<?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>141332</bug_id>
          
          <creation_ts>2015-02-06 08:06:47 -0800</creation_ts>
          <short_desc>DFG should really support varargs</short_desc>
          <delta_ts>2015-02-18 14:59:23 -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>528+ (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>141337</dependson>
    
    <dependson>141342</dependson>
    
    <dependson>141388</dependson>
    
    <dependson>141398</dependson>
    
    <dependson>141440</dependson>
    
    <dependson>141455</dependson>
    
    <dependson>141485</dependson>
    
    <dependson>141493</dependson>
    
    <dependson>141623</dependson>
    
    <dependson>141714</dependson>
    
    <dependson>141771</dependson>
          <blocked>141448</blocked>
    
    <blocked>141660</blocked>
    
    <blocked>141174</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1067358</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-06 08:06:47 -0800</bug_when>
    <thetext>Something that blocks us from doing various arguments-related improvements is that we don&apos;t compile or inline code with varargs calls unless it&apos;s statically obvious that we&apos;re just forwarding arguments.  That&apos;s lame.  The forwarding of arguments should be a late optimization after we have already represented the problem in DFG IR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067377</commentid>
    <comment_count>1</comment_count>
      <attachid>246166</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-06 10:52:51 -0800</bug_when>
    <thetext>Created attachment 246166
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067552</commentid>
    <comment_count>2</comment_count>
      <attachid>246212</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-07 11:56:37 -0800</bug_when>
    <thetext>Created attachment 246212
slowly coming along</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067601</commentid>
    <comment_count>3</comment_count>
      <attachid>246226</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-07 16:24:13 -0800</bug_when>
    <thetext>Created attachment 246226
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068151</commentid>
    <comment_count>4</comment_count>
      <attachid>246344</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-10 14:59:06 -0800</bug_when>
    <thetext>Created attachment 246344
even more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068169</commentid>
    <comment_count>5</comment_count>
      <attachid>246349</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-10 15:45:42 -0800</bug_when>
    <thetext>Created attachment 246349
DFG 64-bit CallVarargs done

Still a lot more to do, but it&apos;s coming along.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068177</commentid>
    <comment_count>6</comment_count>
      <attachid>246351</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-10 16:48:36 -0800</bug_when>
    <thetext>Created attachment 246351
DFG LoadVarargs 64-bit done

Now I need to write the FTL side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068500</commentid>
    <comment_count>7</comment_count>
      <attachid>246417</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-11 15:04:29 -0800</bug_when>
    <thetext>Created attachment 246417
OMG so much code

I wrote most of the meat of the FTL varargs call, and filled in some missing junk for the inline call frame arguments register.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068516</commentid>
    <comment_count>8</comment_count>
      <attachid>246418</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-11 15:59:28 -0800</bug_when>
    <thetext>Created attachment 246418
more

Closing the loop on call varargs in the FTL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068541</commentid>
    <comment_count>9</comment_count>
      <attachid>246423</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-11 20:59:12 -0800</bug_when>
    <thetext>Created attachment 246423
64-bit might be done

I haven&apos;t even tried compiling yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068592</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-12 06:37:05 -0800</bug_when>
    <thetext>Attachment 246423 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:46:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:97:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:105:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:298:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/JITCall.cpp:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/JITCall.cpp:168:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/JITCall.cpp:195:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:679:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1139:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 9 in 50 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>1068655</commentid>
    <comment_count>11</comment_count>
      <attachid>246451</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-12 10:19:19 -0800</bug_when>
    <thetext>Created attachment 246451
starting to compile, and reworking CallForwardVarargs in FTL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069007</commentid>
    <comment_count>12</comment_count>
      <attachid>246542</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-13 12:43:55 -0800</bug_when>
    <thetext>Created attachment 246542
almost compiling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069029</commentid>
    <comment_count>13</comment_count>
      <attachid>246549</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-13 14:17:16 -0800</bug_when>
    <thetext>Created attachment 246549
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069072</commentid>
    <comment_count>14</comment_count>
      <attachid>246561</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-13 17:36:55 -0800</bug_when>
    <thetext>Created attachment 246561
it passes some of our tests!

Fails about 55 of them.  Still debugging...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069149</commentid>
    <comment_count>15</comment_count>
      <attachid>246585</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-13 22:04:03 -0800</bug_when>
    <thetext>Created attachment 246585
now passes more tests than ever!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069208</commentid>
    <comment_count>16</comment_count>
      <attachid>246598</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-14 10:11:00 -0800</bug_when>
    <thetext>Created attachment 246598
it&apos;s passing so many tests

I still need to write my own tests for this, however.  For example, ConstructVarargs never hits FTL in any of our current tests.

Currently the only tests that fail are regress/script-tests/call-spread-apply.js and 	regress/script-tests/call-spread-call.js.  Everything else passes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069344</commentid>
    <comment_count>17</comment_count>
      <attachid>246629</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-15 18:08:52 -0800</bug_when>
    <thetext>Created attachment 246629
almost passing all tests

The latest crash I&apos;m working on is because GetArgument with Int32 flush type tries to speculate, which isn&apos;t what we want.  This should fix it: https://bugs.webkit.org/show_bug.cgi?id=141623</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069539</commentid>
    <comment_count>18</comment_count>
      <attachid>246669</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-16 12:58:49 -0800</bug_when>
    <thetext>Created attachment 246669
more FTL fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069572</commentid>
    <comment_count>19</comment_count>
      <attachid>246676</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-16 13:54:15 -0800</bug_when>
    <thetext>Created attachment 246676
more fixes, more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069677</commentid>
    <comment_count>20</comment_count>
      <attachid>246706</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-16 17:06:08 -0800</bug_when>
    <thetext>Created attachment 246706
64-bit tests pass

Still have to implement the 32-bit DFG portion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069725</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-16 18:47:04 -0800</bug_when>
    <thetext>The perf results are intriguing.  On the major benchmarks, the results are great.  But JSRegress is showing signs of trouble - several tests with &gt;2x slow-downs.  I&apos;ll investigate.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r180189)
&quot;Varargs&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r180189)

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.

                                                        TipOfTree                  Varargs                                      
SunSpider:
   3d-cube                                            4.8283+-0.0954            4.7690+-0.0585          might be 1.0124x faster
   3d-morph                                           6.0459+-0.0834            5.9905+-0.0944        
   3d-raytrace                                        6.4282+-0.2942            6.3465+-0.2322          might be 1.0129x faster
   access-binary-trees                                2.0801+-0.0888            2.0139+-0.0466          might be 1.0329x faster
   access-fannkuch                                    5.7952+-0.1091     ?      5.8472+-0.0669        ?
   access-nbody                                       2.8569+-0.1308     ?      3.0192+-0.3974        ? might be 1.0568x slower
   access-nsieve                                      3.7162+-0.1641            3.7150+-0.1195        
   bitops-3bit-bits-in-byte                           1.5581+-0.0447            1.5411+-0.0318          might be 1.0111x faster
   bitops-bits-in-byte                                3.5278+-0.1087     ?      3.5432+-0.0682        ?
   bitops-bitwise-and                                 2.0440+-0.0645            2.0327+-0.0592        
   bitops-nsieve-bits                                 3.6942+-0.1953            3.5911+-0.0360          might be 1.0287x faster
   controlflow-recursive                              2.1884+-0.0704            2.1702+-0.0298        
   crypto-aes                                         4.1401+-0.1562     ?      4.4900+-0.7132        ? might be 1.0845x slower
   crypto-md5                                         2.5660+-0.0502     ^      2.3962+-0.0586        ^ definitely 1.0708x faster
   crypto-sha1                                        2.6965+-0.2297            2.6475+-0.1754          might be 1.0185x faster
   date-format-tofte                                  9.4598+-0.2065            9.3200+-0.1137          might be 1.0150x faster
   date-format-xparb                                  5.2196+-0.1684     ?      5.4882+-0.5348        ? might be 1.0515x slower
   math-cordic                                        3.0987+-0.2110            3.0188+-0.0311          might be 1.0265x faster
   math-partial-sums                                  5.2854+-0.1328     ?      5.4272+-0.2084        ? might be 1.0268x slower
   math-spectral-norm                                 1.8893+-0.0356     ?      1.9375+-0.0518        ? might be 1.0255x slower
   regexp-dna                                         8.1920+-1.6161            7.5630+-0.3971          might be 1.0832x faster
   string-base64                                      4.4245+-0.4507     ?      4.4338+-0.4299        ?
   string-fasta                                       6.6985+-0.6527            6.5530+-0.3834          might be 1.0222x faster
   string-tagcloud                                    9.7330+-0.1005     ?      9.7691+-0.5645        ?
   string-unpack-code                                20.1917+-0.7477           19.9587+-0.3141          might be 1.0117x faster
   string-validate-input                              4.6868+-0.2944            4.6316+-0.1272          might be 1.0119x faster

   &lt;arithmetic&gt; *                                     5.1171+-0.0933            5.0852+-0.0599          might be 1.0063x faster
   &lt;geometric&gt;                                        4.2414+-0.0594            4.2232+-0.0623          might be 1.0043x faster
   &lt;harmonic&gt;                                         3.6315+-0.0469            3.6133+-0.0565          might be 1.0050x faster

                                                        TipOfTree                  Varargs                                      
LongSpider:
   3d-cube                                          881.4194+-13.9875         879.4170+-8.1408        
   3d-morph                                        1551.6664+-16.9720    ?   1558.0764+-23.7863       ?
   3d-raytrace                                      752.8704+-9.7494          745.9163+-11.9598       
   access-binary-trees                              989.7576+-9.4885     ?    989.9795+-5.6724        ?
   access-fannkuch                                  333.3687+-8.6867          330.4216+-7.9593        
   access-nbody                                     623.1973+-5.2673          618.9768+-3.3285        
   access-nsieve                                    964.9990+-5.5382          949.9091+-10.9895         might be 1.0159x faster
   bitops-3bit-bits-in-byte                          47.0612+-1.8126     ?     48.9921+-1.8591        ? might be 1.0410x slower
   bitops-bits-in-byte                              107.6802+-2.4302     ?    109.9938+-10.1112       ? might be 1.0215x slower
   bitops-nsieve-bits                               707.6697+-11.9688    ?    711.1864+-5.1370        ?
   controlflow-recursive                            504.2573+-6.1659     ^    485.1164+-6.7681        ^ definitely 1.0395x faster
   crypto-aes                                       689.7016+-7.2003     ?    700.1889+-11.5444       ? might be 1.0152x slower
   crypto-md5                                       629.7967+-19.3334    ?    634.6293+-12.2884       ?
   crypto-sha1                                      671.4510+-6.5079     ?    673.3282+-4.9632        ?
   date-format-tofte                                804.0556+-17.6721    ?    806.4819+-25.1952       ?
   date-format-xparb                                840.2531+-131.2412        762.9652+-16.2090         might be 1.1013x faster
   math-cordic                                      598.9208+-9.7534          596.9500+-6.6383        
   math-partial-sums                                542.0361+-6.8847     ?    542.7876+-7.7068        ?
   math-spectral-norm                               568.7288+-4.2136     ?    575.4578+-7.6344        ? might be 1.0118x slower
   string-base64                                    363.3718+-4.7414          363.2862+-5.9981        
   string-fasta                                     437.9007+-9.7960     ?    438.8616+-10.8546       ?
   string-tagcloud                                  226.8181+-4.8095          217.8351+-4.3486          might be 1.0412x faster

   &lt;arithmetic&gt;                                     628.9537+-6.8231          624.5799+-3.1569          might be 1.0070x faster
   &lt;geometric&gt; *                                    516.1671+-4.6923          513.7706+-3.7479          might be 1.0047x faster
   &lt;harmonic&gt;                                       336.3241+-4.3940     ?    339.6559+-7.7003        ? might be 1.0099x slower

                                                        TipOfTree                  Varargs                                      
V8Spider:
   crypto                                            55.8227+-2.2082           55.0824+-1.3186          might be 1.0134x faster
   deltablue                                         90.9392+-5.1112           90.3206+-2.7756        
   earley-boyer                                      45.5307+-1.1588     ?     46.4867+-1.6907        ? might be 1.0210x slower
   raytrace                                          39.4868+-2.0742           37.9139+-1.3229          might be 1.0415x faster
   regexp                                            70.7640+-1.9655           70.7318+-3.6284        
   richards                                          83.0937+-2.3514           81.7196+-2.3874          might be 1.0168x faster
   splay                                             37.7284+-1.9054           36.7572+-1.1534          might be 1.0264x faster

   &lt;arithmetic&gt;                                      60.4808+-0.8950           59.8589+-0.9805          might be 1.0104x faster
   &lt;geometric&gt; *                                     57.2520+-0.7667           56.5887+-0.8832          might be 1.0117x faster
   &lt;harmonic&gt;                                        54.2504+-0.7908           53.5236+-0.8798          might be 1.0136x faster

                                                        TipOfTree                  Varargs                                      
Octane:
   encrypt                                           0.23636+-0.00582          0.23334+-0.00151         might be 1.0130x faster
   decrypt                                           4.03931+-0.02619    ?     4.04704+-0.02880       ?
   deltablue                                x2       0.20250+-0.00275          0.20100+-0.00159       
   earley                                            0.70505+-0.00706          0.69690+-0.00793         might be 1.0117x faster
   boyer                                             5.31139+-0.05581    ?     5.36110+-0.03308       ?
   navier-stokes                            x2       5.19338+-0.04326    ?     5.22049+-0.04524       ?
   raytrace                                 x2       1.24436+-0.05931          1.23212+-0.04363       
   richards                                 x2       0.13201+-0.00194    ?     0.13371+-0.00404       ? might be 1.0129x slower
   splay                                    x2       0.37827+-0.00330          0.37588+-0.00266       
   regexp                                   x2      33.32768+-0.25133    ?    33.80731+-0.36472       ? might be 1.0144x slower
   pdfjs                                    x2      51.73293+-0.09593         51.49666+-0.48402       
   mandreel                                 x2      53.17239+-1.82697         52.79042+-0.71716       
   gbemu                                    x2      48.13580+-2.72095         47.28809+-2.79174         might be 1.0179x faster
   closure                                           0.56282+-0.00698          0.56205+-0.00835       
   jquery                                            7.22227+-0.14249    ?     7.33856+-0.22317       ? might be 1.0161x slower
   box2d                                    x2      13.53053+-0.08818    ^    12.99392+-0.06465       ^ definitely 1.0413x faster
   zlib                                     x2     400.94647+-2.71702        400.43423+-3.29155       
   typescript                               x2     867.70235+-14.05712       857.25203+-13.12071        might be 1.0122x faster

   &lt;arithmetic&gt;                                     98.98248+-0.85327         98.15636+-1.17218         might be 1.0084x faster
   &lt;geometric&gt; *                                     7.03895+-0.03893          7.00449+-0.04107         might be 1.0049x faster
   &lt;harmonic&gt;                                        0.73804+-0.00354          0.73795+-0.00867         might be 1.0001x faster

                                                        TipOfTree                  Varargs                                      
Kraken:
   ai-astar                                          265.247+-4.953      ?     267.734+-3.605         ?
   audio-beat-detection                              113.623+-4.987            111.641+-0.826           might be 1.0178x faster
   audio-dft                                         160.901+-6.193            160.386+-4.848         
   audio-fft                                          82.935+-1.976      ?      84.361+-3.515         ? might be 1.0172x slower
   audio-oscillator                                  243.720+-6.224            240.822+-5.128           might be 1.0120x faster
   imaging-darkroom                                  139.630+-4.218      ?     139.695+-3.036         ?
   imaging-desaturate                                 63.044+-2.347      ?      64.882+-2.529         ? might be 1.0292x slower
   imaging-gaussian-blur                             111.651+-2.337      ?     114.354+-0.801         ? might be 1.0242x slower
   json-parse-financial                               47.182+-2.390      ?      47.271+-2.158         ?
   json-stringify-tinderbox                           58.979+-1.888             58.928+-2.143         
   stanford-crypto-aes                                58.481+-0.956      ?      58.672+-2.007         ?
   stanford-crypto-ccm                                57.343+-4.574             57.141+-7.693         
   stanford-crypto-pbkdf2                            176.568+-2.281            174.617+-3.758           might be 1.0112x faster
   stanford-crypto-sha256-iterative                   55.021+-3.059             54.157+-1.752           might be 1.0160x faster

   &lt;arithmetic&gt; *                                    116.738+-0.747      ?     116.762+-1.009         ? might be 1.0002x slower
   &lt;geometric&gt;                                        98.982+-0.718      ?      99.113+-1.721         ? might be 1.0013x slower
   &lt;harmonic&gt;                                         85.530+-0.918      ?      85.674+-2.224         ? might be 1.0017x slower

                                                        TipOfTree                  Varargs                                      
JSRegress:
   abs-boolean                                        2.6212+-0.0508     ?      2.7155+-0.1161        ? might be 1.0360x slower
   adapt-to-double-divide                            17.1142+-0.9100           16.6148+-0.0683          might be 1.0301x faster
   aliased-arguments-getbyval                         0.8005+-0.0145     ?      0.8352+-0.0214        ? might be 1.0434x slower
   allocate-big-object                                2.3794+-0.1058     ?      2.3852+-0.1300        ?
   arity-mismatch-inlining                            0.8313+-0.0408            0.8038+-0.0200          might be 1.0341x faster
   array-access-polymorphic-structure                 6.5237+-0.1408     ?      6.5286+-0.4005        ?
   array-nonarray-polymorhpic-access                 35.5060+-2.1529     ?     35.5355+-1.7563        ?
   array-prototype-every                             88.5483+-2.5047     ?     92.0790+-4.2008        ? might be 1.0399x slower
   array-prototype-forEach                          103.4073+-28.1307          88.3062+-2.4138          might be 1.1710x faster
   array-prototype-map                              112.6493+-4.3786     ?    112.9924+-2.1811        ?
   array-prototype-some                              92.0496+-2.6549           91.7615+-2.6859        
   array-splice-contiguous                           41.9680+-2.2560           41.0247+-1.3918          might be 1.0230x faster
   array-with-double-add                              4.0435+-0.0641     ?      4.1392+-0.1183        ? might be 1.0237x slower
   array-with-double-increment                        3.1501+-0.0326     ?      3.1606+-0.0328        ?
   array-with-double-mul-add                          4.9618+-0.0622     ?      5.0511+-0.0770        ? might be 1.0180x slower
   array-with-double-sum                              3.2103+-0.0581     ?      3.2753+-0.1485        ? might be 1.0202x slower
   array-with-int32-add-sub                           6.6989+-0.0480     ?      6.7505+-0.0661        ?
   array-with-int32-or-double-sum                     3.2725+-0.0677     ?      3.2885+-0.0680        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.4093+-1.7458           33.6566+-2.4267          might be 1.0224x faster
   ArrayBuffer-DataView-alloc-long-lived             14.6401+-1.8103           14.2390+-1.7203          might be 1.0282x faster
   ArrayBuffer-Int32Array-byteOffset                  3.7377+-0.6725            3.4513+-0.0569          might be 1.0830x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     34.5740+-2.2274           34.5194+-1.3680        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     23.7324+-2.5308           23.4676+-1.7975          might be 1.0113x faster
   ArrayBuffer-Int8Array-alloc-long-lived            13.3031+-1.0186     ?     14.1278+-1.9482        ? might be 1.0620x slower
   ArrayBuffer-Int8Array-alloc                       11.0494+-0.5546     ?     11.2141+-1.1636        ? might be 1.0149x slower
   asmjs_bool_bug                                     7.3911+-0.3005     ?      7.3963+-0.2349        ?
   assign-custom-setter-polymorphic                   2.9513+-0.0509     ?      3.0782+-0.1254        ? might be 1.0430x slower
   assign-custom-setter                               4.2493+-0.3050            4.1284+-0.0655          might be 1.0293x faster
   basic-set                                         10.2118+-0.3989     ?     10.2993+-0.4182        ?
   big-int-mul                                        3.9087+-0.0566     ?      3.9505+-0.0386        ? might be 1.0107x slower
   boolean-test                                       2.9321+-0.0203     ?      2.9499+-0.0278        ?
   branch-fold                                        3.6477+-0.0449     ?      3.6549+-0.0384        ?
   by-val-generic                                     7.9581+-0.2530            7.8708+-0.1251          might be 1.0111x faster
   call-spread-apply                                 14.4283+-0.9393     ?     14.6791+-1.1879        ? might be 1.0174x slower
   call-spread-call                                   6.4222+-1.0667            5.6920+-0.0650          might be 1.1283x faster
   captured-assignments                               0.4342+-0.0124            0.4341+-0.0094        
   cast-int-to-double                                 5.2074+-0.0117     ?      5.3169+-0.1629        ? might be 1.0210x slower
   cell-argument                                      8.3357+-0.1236     ?      8.5077+-0.2804        ? might be 1.0206x slower
   cfg-simplify                                       2.9085+-0.0557            2.8805+-0.0546        
   chain-getter-access                                9.7635+-0.1384            9.6003+-0.1385          might be 1.0170x faster
   cmpeq-obj-to-obj-other                            10.7663+-1.2426     ?     10.8037+-1.0171        ?
   constant-test                                      4.8573+-0.0091            4.8466+-0.0372        
   DataView-custom-properties                        39.8403+-1.0886           39.1313+-1.2256          might be 1.0181x faster
   delay-tear-off-arguments-strictmode               23.4338+-2.1309     ?     24.3552+-2.1906        ? might be 1.0393x slower
   deltablue-varargs                               1102.4718+-7.6058     ^    853.4602+-10.0297       ^ definitely 1.2918x faster
   destructuring-arguments                            5.1800+-0.1092            5.1251+-0.0311          might be 1.0107x faster
   destructuring-swap                                 5.0170+-0.1728            4.9545+-0.0257          might be 1.0126x faster
   direct-arguments-getbyval                          0.9919+-0.0727            0.9124+-0.0420          might be 1.0871x faster
   div-boolean-double                                 5.1696+-0.0234     ?      5.2511+-0.2195        ? might be 1.0158x slower
   div-boolean                                        7.7081+-0.0254     ?      7.8997+-0.3786        ? might be 1.0248x slower
   double-get-by-val-out-of-bounds                    4.3038+-0.1769            4.2531+-0.0230          might be 1.0119x faster
   double-pollution-getbyval                          8.8896+-0.1926            8.8106+-0.0916        
   double-pollution-putbyoffset                       4.0842+-0.0904     ?      4.1893+-0.2126        ? might be 1.0257x slower
   double-to-int32-typed-array-no-inline              2.2601+-0.1611            2.2326+-0.0532          might be 1.0123x faster
   double-to-int32-typed-array                        1.8881+-0.0207     ?      1.8983+-0.0268        ?
   double-to-uint32-typed-array-no-inline             2.3217+-0.1024            2.2588+-0.0460          might be 1.0278x faster
   double-to-uint32-typed-array                       1.9565+-0.0384     ?      2.0793+-0.1647        ? might be 1.0628x slower
   elidable-new-object-dag                           41.9705+-1.8489     ?     42.5362+-2.0310        ? might be 1.0135x slower
   elidable-new-object-roflcopter                    47.4452+-0.7567     ?     48.8214+-1.4310        ? might be 1.0290x slower
   elidable-new-object-then-call                     39.3924+-1.4435     ?     39.6280+-2.0048        ?
   elidable-new-object-tree                          44.7834+-1.4825           44.7431+-2.2761        
   empty-string-plus-int                              5.3086+-0.2324            5.2903+-0.2062        
   emscripten-cube2hash                              38.5666+-0.9606           37.1876+-1.5146          might be 1.0371x faster
   external-arguments-getbyval                        1.2927+-0.0534     ?      1.3328+-0.1267        ? might be 1.0310x slower
   external-arguments-putbyval                        2.1014+-0.0708            2.0734+-0.1155          might be 1.0135x faster
   fixed-typed-array-storage-var-index                1.2355+-0.0565            1.2281+-0.0365        
   fixed-typed-array-storage                          0.9691+-0.1444            0.8939+-0.0462          might be 1.0841x faster
   Float32Array-matrix-mult                           4.2517+-0.0931     !      5.0407+-0.0470        ! definitely 1.1856x slower
   Float32Array-to-Float64Array-set                  58.4541+-2.8761     !     64.1847+-1.8201        ! definitely 1.0980x slower
   Float64Array-alloc-long-lived                     68.2255+-1.0884     !    134.2301+-4.0148        ! definitely 1.9674x slower
   Float64Array-to-Int16Array-set                    69.8218+-2.5428     !     82.9570+-3.9490        ! definitely 1.1881x slower
   fold-double-to-int                                14.5782+-1.5237     ?     14.9761+-1.2871        ? might be 1.0273x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.4859+-0.7349     ?     10.8909+-0.6563        ? might be 1.0386x slower
   fold-get-by-id-to-multi-get-by-offset              9.5851+-0.6564            9.4779+-0.9006          might be 1.0113x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.9248+-0.9236            7.6488+-1.7420          might be 1.1668x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.4383+-1.0385     ?      8.4838+-0.8313        ?
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.6959+-0.9565            7.6415+-0.8026        
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.4022+-0.3573     ?      4.9880+-0.5305        ? might be 1.1331x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.5805+-1.3161            9.2419+-0.5965          might be 1.0366x faster
   fold-put-by-id-to-multi-put-by-offset              8.7837+-0.3902     ?      8.8747+-0.7326        ? might be 1.0104x slower
   fold-put-structure                                 5.2815+-0.2719     ?      5.5278+-0.7908        ? might be 1.0466x slower
   for-of-iterate-array-entries                       5.7706+-0.3743     ?      5.9722+-0.7588        ? might be 1.0349x slower
   for-of-iterate-array-keys                          2.7918+-0.0305     ?      2.8633+-0.2045        ? might be 1.0256x slower
   for-of-iterate-array-values                        2.4502+-0.0516     ?      2.5372+-0.0771        ? might be 1.0355x slower
   fround                                            19.7769+-0.8490     ?     20.1560+-1.9624        ? might be 1.0192x slower
   ftl-library-inlining-dataview                     69.5669+-3.7552     ?     72.5727+-3.2062        ? might be 1.0432x slower
   ftl-library-inlining                              68.0919+-5.8361     ?     86.4943+-19.2504       ? might be 1.2703x slower
   function-dot-apply                                 1.4270+-0.0713     ?      1.4848+-0.0868        ? might be 1.0405x slower
   function-test                                      3.3230+-0.0349            3.3216+-0.0805        
   function-with-eval                               116.4371+-2.9604     ?    118.1788+-4.8629        ? might be 1.0150x slower
   gcse-poly-get-less-obvious                        19.9911+-1.9644           19.5193+-2.4473          might be 1.0242x faster
   gcse-poly-get                                     22.6287+-1.2189     ?     22.6932+-2.5801        ?
   gcse                                               4.3161+-0.1181            4.2794+-0.0781        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7213+-0.0482     ?      2.7402+-0.0770        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.1729+-0.2830            6.0600+-0.0507          might be 1.0186x faster
   get-by-id-chain-from-try-block                    10.7787+-1.2202           10.2128+-1.4291          might be 1.0554x faster
   get-by-id-check-structure-elimination              5.0106+-0.0662            4.9877+-0.0772        
   get-by-id-proto-or-self                           17.6327+-1.5857     ?     18.2055+-1.9995        ? might be 1.0325x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8802+-0.0262     ?      2.9535+-0.1357        ? might be 1.0254x slower
   get-by-id-self-or-proto                           17.9494+-1.3706     ?     18.9677+-1.2284        ? might be 1.0567x slower
   get-by-val-out-of-bounds                           4.1816+-0.1696            4.1534+-0.0185        
   get_callee_monomorphic                             3.9935+-0.6877            3.8318+-0.2900          might be 1.0422x faster
   get_callee_polymorphic                             3.5280+-0.2792            3.4435+-0.2515          might be 1.0246x faster
   getter-no-activation                               4.5197+-0.3812            4.4920+-0.3195        
   getter-richards                                  122.4117+-7.8824          121.4702+-11.1709       
   getter                                             5.1069+-0.1335     ?      5.1653+-0.2230        ? might be 1.0114x slower
   global-var-const-infer-fire-from-opt               0.8751+-0.0766            0.8352+-0.0254          might be 1.0478x faster
   global-var-const-infer                             0.7947+-0.1090     ?      0.8060+-0.1067        ? might be 1.0142x slower
   HashMap-put-get-iterate-keys                      27.2985+-0.8603           27.1536+-0.4345        
   HashMap-put-get-iterate                           27.0245+-0.4352     ?     27.7152+-0.9944        ? might be 1.0256x slower
   HashMap-string-put-get-iterate                    27.4995+-0.4608           27.0775+-1.1013          might be 1.0156x faster
   hoist-make-rope                                   10.8986+-0.5091     ?     11.7653+-1.2203        ? might be 1.0795x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.8593+-0.0453            4.8525+-0.0434        
   hoist-poly-check-structure                         3.6612+-0.1106     ?      3.6876+-0.1942        ?
   imul-double-only                                   7.6360+-0.5558     ?      8.1098+-0.9204        ? might be 1.0620x slower
   imul-int-only                                      9.6540+-0.3078     ?     10.1629+-0.9201        ? might be 1.0527x slower
   imul-mixed                                         8.2721+-0.3917            7.8116+-0.3821          might be 1.0589x faster
   in-four-cases                                     19.5465+-1.2456           19.0280+-0.6362          might be 1.0273x faster
   in-one-case-false                                  9.9301+-0.1526     ?      9.9945+-0.1751        ?
   in-one-case-true                                   9.9178+-0.1594            9.8381+-0.1520        
   in-two-cases                                      10.2864+-0.2896           10.1700+-0.1969          might be 1.0114x faster
   indexed-properties-in-objects                      2.8654+-0.0470     ?      2.9208+-0.1874        ? might be 1.0194x slower
   infer-closure-const-then-mov-no-inline             3.7336+-0.0561            3.7261+-0.1211        
   infer-closure-const-then-mov                      19.4357+-0.7902           18.8259+-1.6148          might be 1.0324x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.6548+-1.5165           12.4356+-0.7283          might be 1.0176x faster
   infer-closure-const-then-put-to-scope             23.6111+-1.1613     ?     23.7346+-1.7248        ?
   infer-closure-const-then-reenter-no-inline   
                                                     51.5207+-1.5447           49.1082+-1.7662          might be 1.0491x faster
   infer-closure-const-then-reenter                  19.8989+-1.4809           19.8740+-1.1173        
   infer-constant-global-property                    31.9941+-2.6781     ?     33.2666+-3.1424        ? might be 1.0398x slower
   infer-constant-property                            2.6250+-0.0544            2.6206+-0.0372        
   infer-one-time-closure-ten-vars                   12.0109+-0.2072     ?     12.3396+-0.7536        ? might be 1.0274x slower
   infer-one-time-closure-two-vars                   12.8328+-1.8168           12.0299+-0.9588          might be 1.0667x faster
   infer-one-time-closure                            11.7133+-0.4817           11.6277+-0.4958        
   infer-one-time-deep-closure                       21.8076+-1.5458           21.4972+-1.5976          might be 1.0144x faster
   inline-arguments-access                            1.3980+-0.0397            1.3788+-0.0305          might be 1.0139x faster
   inline-arguments-aliased-access                    1.6316+-0.0906     ?      1.6397+-0.0816        ?
   inline-arguments-local-escape                     13.7856+-1.7195           12.1422+-0.1829          might be 1.1354x faster
   inline-get-scoped-var                              4.1740+-0.1564            4.1435+-0.0694        
   inlined-put-by-id-transition                      10.5479+-0.7039           10.3984+-0.2812          might be 1.0144x faster
   int-or-other-abs-then-get-by-val                   4.8898+-0.0478            4.8555+-0.0647        
   int-or-other-abs-zero-then-get-by-val             17.4460+-0.9715     ?     18.5558+-1.7431        ? might be 1.0636x slower
   int-or-other-add-then-get-by-val                   4.3171+-0.1340            4.2034+-0.0956          might be 1.0271x faster
   int-or-other-add                                   5.2452+-0.1160            5.1812+-0.0404          might be 1.0124x faster
   int-or-other-div-then-get-by-val                   4.2222+-0.0437     ?      4.2812+-0.1237        ? might be 1.0140x slower
   int-or-other-max-then-get-by-val                   4.3131+-0.0294     ?      4.3654+-0.0831        ? might be 1.0121x slower
   int-or-other-min-then-get-by-val                   4.3976+-0.0323            4.3667+-0.0199        
   int-or-other-mod-then-get-by-val                   3.9048+-0.0763     ?      3.9652+-0.1755        ? might be 1.0155x slower
   int-or-other-mul-then-get-by-val                   3.8297+-0.0546     ?      3.9331+-0.2405        ? might be 1.0270x slower
   int-or-other-neg-then-get-by-val                   4.6981+-0.0221            4.6888+-0.0212        
   int-or-other-neg-zero-then-get-by-val             19.5756+-1.5472           18.1175+-1.8202          might be 1.0805x faster
   int-or-other-sub-then-get-by-val                   4.2305+-0.0370     ?      4.3155+-0.1884        ? might be 1.0201x slower
   int-or-other-sub                                   3.4218+-0.0539     ?      3.4270+-0.0459        ?
   int-overflow-local                                 4.2774+-0.0214     ?      4.3836+-0.2082        ? might be 1.0248x slower
   Int16Array-alloc-long-lived                       48.3795+-1.1625     !    116.9775+-3.4435        ! definitely 2.4179x slower
   Int16Array-bubble-sort-with-byteLength            21.1473+-1.6138           20.9348+-1.3590          might be 1.0102x faster
   Int16Array-bubble-sort                            21.5358+-1.4488     ?     21.8587+-1.4315        ? might be 1.0150x slower
   Int16Array-load-int-mul                            1.4775+-0.0224     ?      1.4834+-0.0417        ?
   Int16Array-to-Int32Array-set                      55.1340+-4.6383     !     62.8521+-2.6366        ! definitely 1.1400x slower
   Int32Array-alloc-large                            24.9858+-1.2060     ?     25.2924+-0.6240        ? might be 1.0123x slower
   Int32Array-alloc-long-lived                       53.7673+-1.8909     !    126.4333+-16.4939       ! definitely 2.3515x slower
   Int32Array-alloc                                   3.2045+-0.5075     !      9.3022+-0.6479        ! definitely 2.9029x slower
   Int32Array-Int8Array-view-alloc                    7.5383+-1.1516     ?      7.9868+-0.8453        ? might be 1.0595x slower
   int52-spill                                        6.2405+-0.0779     ?      6.4122+-0.1877        ? might be 1.0275x slower
   Int8Array-alloc-long-lived                        45.4456+-1.2396           45.1487+-1.1212        
   Int8Array-load-with-byteLength                     3.3151+-0.0514     ?      3.3340+-0.1064        ?
   Int8Array-load                                     3.3125+-0.0537     ?      3.3722+-0.1036        ? might be 1.0180x slower
   integer-divide                                    11.6768+-0.1326     ?     11.7314+-0.1118        ?
   integer-modulo                                     1.9913+-0.1124            1.9529+-0.1047          might be 1.0197x faster
   large-int-captured                                 7.0248+-0.8907            6.9187+-0.8493          might be 1.0153x faster
   large-int-neg                                     16.7248+-1.2173     ?     17.0906+-1.3964        ? might be 1.0219x slower
   large-int                                         15.8532+-1.4771           15.4820+-0.4188          might be 1.0240x faster
   logical-not                                        4.5336+-0.0972     ?      4.5854+-0.0455        ? might be 1.0114x slower
   lots-of-fields                                    10.6439+-1.1455            9.9969+-0.3037          might be 1.0647x faster
   make-indexed-storage                               2.9175+-0.0523     ?      2.9629+-0.1185        ? might be 1.0156x slower
   make-rope-cse                                      4.1684+-0.2221     ?      4.2858+-0.5441        ? might be 1.0282x slower
   marsaglia-larger-ints                             39.2186+-1.4956           38.9637+-0.3137        
   marsaglia-osr-entry                               23.6506+-1.6019           23.1045+-1.2788          might be 1.0236x faster
   max-boolean                                        2.5186+-0.1028            2.4621+-0.0224          might be 1.0229x faster
   method-on-number                                  17.2381+-1.6033           16.5872+-0.2592          might be 1.0392x faster
   min-boolean                                        2.6821+-0.5134            2.5538+-0.1153          might be 1.0502x faster
   minus-boolean-double                               3.1676+-0.0555     ?      3.2177+-0.1716        ? might be 1.0158x slower
   minus-boolean                                      2.3297+-0.0526     ?      2.3431+-0.0241        ?
   misc-strict-eq                                    39.0111+-1.9995           38.2700+-0.6152          might be 1.0194x faster
   mod-boolean-double                                11.1165+-0.1679           11.0924+-0.4197        
   mod-boolean                                        7.8316+-0.1505            7.7846+-0.0417        
   mul-boolean-double                                 3.7261+-0.1150            3.7074+-0.0586        
   mul-boolean                                        2.8921+-0.0733     ?      3.0008+-0.2376        ? might be 1.0376x slower
   neg-boolean                                        3.1819+-0.0766            3.1407+-0.0481          might be 1.0131x faster
   negative-zero-divide                               0.3337+-0.0082            0.3291+-0.0126          might be 1.0141x faster
   negative-zero-modulo                               0.3516+-0.0426            0.3461+-0.0055          might be 1.0158x faster
   negative-zero-negate                               0.3126+-0.0135     ?      0.3203+-0.0139        ? might be 1.0245x slower
   nested-function-parsing                           23.6678+-0.8656           23.3872+-0.9651          might be 1.0120x faster
   new-array-buffer-dead                              2.6480+-0.0631     ?      2.6657+-0.0347        ?
   new-array-buffer-push                              7.7949+-0.5895            7.5115+-0.6008          might be 1.0377x faster
   new-array-dead                                    12.1012+-0.3149     ?     12.2894+-0.6665        ? might be 1.0156x slower
   new-array-push                                     5.5441+-0.6130            5.3146+-0.1419          might be 1.0432x faster
   number-test                                        2.9841+-0.0595            2.9729+-0.0753        
   object-closure-call                                5.4504+-0.1075     ?      5.4687+-0.0665        ?
   object-test                                        3.0424+-0.0357     ?      3.0577+-0.0489        ?
   obvious-sink-pathology-taken                     143.0253+-3.0687     ?    143.6776+-2.6762        ?
   obvious-sink-pathology                           139.9014+-3.7380          139.2068+-2.7311        
   obviously-elidable-new-object                     33.9501+-1.1728     ?     35.3165+-1.4360        ? might be 1.0402x slower
   plus-boolean-arith                                 2.5161+-0.0284     ?      2.5201+-0.0222        ?
   plus-boolean-double                                3.2586+-0.1901            3.1591+-0.0495          might be 1.0315x faster
   plus-boolean                                       2.3835+-0.0217            2.3811+-0.0220        
   poly-chain-access-different-prototypes-simple   
                                                      3.2699+-0.0643     ?      3.2849+-0.0235        ?
   poly-chain-access-different-prototypes             2.5390+-0.2473     ?      2.6463+-0.2876        ? might be 1.0422x slower
   poly-chain-access-simpler                          3.2838+-0.0521     ?      3.2993+-0.0575        ?
   poly-chain-access                                  2.7463+-0.0781     ?      2.7716+-0.0810        ?
   poly-stricteq                                     58.5882+-1.3996     ?     59.7712+-1.5602        ? might be 1.0202x slower
   polymorphic-array-call                             1.8600+-0.1043            1.7675+-0.0275          might be 1.0524x faster
   polymorphic-get-by-id                              3.1406+-0.0920     ?      3.1923+-0.1341        ? might be 1.0165x slower
   polymorphic-put-by-id                             30.0338+-2.0337           30.0035+-2.2549        
   polymorphic-structure                             16.1237+-1.5043           14.9755+-0.2461          might be 1.0767x faster
   polyvariant-monomorphic-get-by-id                  8.5378+-0.1801            8.5188+-0.1050        
   proto-getter-access                                9.6822+-0.2914            9.5739+-0.1333          might be 1.0113x faster
   put-by-id-replace-and-transition                   8.6855+-0.4040            8.5883+-0.2173          might be 1.0113x faster
   put-by-id-slightly-polymorphic                     2.8319+-0.0540     ?      2.8479+-0.0527        ?
   put-by-id                                         13.0806+-0.7095     ?     13.1803+-0.5893        ?
   put-by-val-direct                                  0.5483+-0.0107     ?      0.5563+-0.0107        ? might be 1.0147x slower
   put-by-val-large-index-blank-indexing-type   
                                                      6.1962+-0.6805            6.1951+-0.7237        
   put-by-val-machine-int                             2.5099+-0.0133     !      5.5358+-0.1947        ! definitely 2.2056x slower
   rare-osr-exit-on-local                            14.9390+-0.6329     ?     15.2590+-1.1075        ? might be 1.0214x slower
   register-pressure-from-osr                        21.8924+-0.1230           21.7836+-0.5555        
   setter                                             5.2586+-0.0953            5.1667+-0.1546          might be 1.0178x faster
   simple-activation-demo                            26.1979+-1.8037     ?     26.6113+-1.6349        ? might be 1.0158x slower
   simple-getter-access                              12.8826+-0.8359           12.7462+-0.9038          might be 1.0107x faster
   simple-poly-call-nested                            8.0169+-0.2423     ?      8.0260+-0.4032        ?
   simple-poly-call                                   1.2127+-0.0246     ?      1.2519+-0.0971        ? might be 1.0323x slower
   sin-boolean                                       21.4080+-2.7987           21.2675+-2.7870        
   sinkable-new-object-dag                           70.6248+-2.6608           70.0444+-2.2542        
   sinkable-new-object-taken                         49.7336+-1.1298     ?     50.0622+-1.7758        ?
   sinkable-new-object                               39.4986+-2.1484           38.0152+-1.3297          might be 1.0390x faster
   slow-array-profile-convergence                     2.7525+-0.1317     ?      2.7702+-0.1070        ?
   slow-convergence                                   3.1757+-0.0859            3.1300+-0.0591          might be 1.0146x faster
   sparse-conditional                                 1.0975+-0.0414            1.0867+-0.0393        
   splice-to-remove                                  16.2669+-0.2364     ?     17.0596+-1.1917        ? might be 1.0487x slower
   string-char-code-at                               16.7991+-0.4978     ?     17.2823+-1.1255        ? might be 1.0288x slower
   string-concat-object                               2.3502+-0.3680            2.1676+-0.2191          might be 1.0842x faster
   string-concat-pair-object                          2.2224+-0.4796     ?      2.5049+-0.4427        ? might be 1.1271x slower
   string-concat-pair-simple                         11.2702+-1.1780           10.8129+-0.3857          might be 1.0423x faster
   string-concat-simple                              11.3358+-0.3254     ?     11.5503+-1.3039        ? might be 1.0189x slower
   string-cons-repeat                                 7.6313+-0.8740     ?      7.7265+-0.7668        ? might be 1.0125x slower
   string-cons-tower                                  7.4762+-0.9404            7.3413+-0.3000          might be 1.0184x faster
   string-equality                                   18.6333+-1.4472     ?     19.0858+-1.4626        ? might be 1.0243x slower
   string-get-by-val-big-char                         6.9763+-0.2927     ?      7.0665+-0.2846        ? might be 1.0129x slower
   string-get-by-val-out-of-bounds-insane             3.8803+-0.0766     ?      4.1521+-0.7324        ? might be 1.0701x slower
   string-get-by-val-out-of-bounds                    5.1993+-0.0810     ?      5.2216+-0.0693        ?
   string-get-by-val                                  3.2751+-0.1406     ?      3.2946+-0.0478        ?
   string-hash                                        1.9856+-0.0120     ?      2.0042+-0.0158        ?
   string-long-ident-equality                        14.7498+-0.2195     ?     15.2272+-0.3463        ? might be 1.0324x slower
   string-repeat-arith                               34.8779+-3.6760     ?     35.1596+-2.4053        ?
   string-sub                                        70.2493+-2.7303           69.2666+-3.1070          might be 1.0142x faster
   string-test                                        2.8878+-0.0531            2.8728+-0.0581        
   string-var-equality                               31.6888+-1.3291     ?     33.3819+-2.1741        ? might be 1.0534x slower
   structure-hoist-over-transitions                   2.3500+-0.0344     ?      2.3623+-0.0600        ?
   substring-concat-weird                            39.3584+-2.4579     ?     40.0370+-1.7666        ? might be 1.0172x slower
   substring-concat                                  41.7503+-1.7794           39.8837+-0.7298          might be 1.0468x faster
   substring                                         46.0614+-1.7810     ?     46.4079+-1.4951        ?
   switch-char-constant                               2.6933+-0.0298     ?      2.7015+-0.0363        ?
   switch-char                                        7.0086+-0.8838            6.2962+-0.2390          might be 1.1131x faster
   switch-constant                                   10.1568+-0.4310     ?     10.4425+-0.5088        ? might be 1.0281x slower
   switch-string-basic-big-var                       17.3322+-1.7311           15.6095+-1.2567          might be 1.1104x faster
   switch-string-basic-big                           15.9558+-2.1285           14.9291+-1.6003          might be 1.0688x faster
   switch-string-basic-var                           14.9854+-0.9332     ?     15.7466+-1.8105        ? might be 1.0508x slower
   switch-string-basic                               15.0549+-2.2516           14.4403+-1.8227          might be 1.0426x faster
   switch-string-big-length-tower-var                21.8507+-1.7290           21.1774+-1.2508          might be 1.0318x faster
   switch-string-length-tower-var                    16.8516+-1.9020           16.2882+-1.8292          might be 1.0346x faster
   switch-string-length-tower                        12.7258+-0.6479     ?     14.4002+-1.7607        ? might be 1.1316x slower
   switch-string-short                               13.6778+-1.7405           12.9697+-1.4848          might be 1.0546x faster
   switch                                            13.5416+-1.7594           13.2585+-1.9247          might be 1.0214x faster
   tear-off-arguments-simple                          1.7778+-0.0412     ?      1.7989+-0.0417        ? might be 1.0119x slower
   tear-off-arguments                                 2.6882+-0.0571            2.6562+-0.0385          might be 1.0121x faster
   temporal-structure                                12.4624+-0.8400     ?     12.5753+-0.9146        ?
   to-int32-boolean                                  13.7072+-0.3957     ?     13.7639+-0.2956        ?
   undefined-property-access                        390.2414+-5.1663          388.8454+-8.1147        
   undefined-test                                     3.0178+-0.0432            2.9982+-0.0813        
   unprofiled-licm                                   22.4699+-0.3402     ?     22.9527+-1.4431        ? might be 1.0215x slower
   weird-inlining-const-prop                          1.9775+-0.0901     ?      2.0736+-0.1217        ? might be 1.0486x slower

   &lt;arithmetic&gt;                                      21.3187+-0.0745           21.3086+-0.1699          might be 1.0005x faster
   &lt;geometric&gt; *                                      8.1629+-0.0238     !      8.2977+-0.0465        ! definitely 1.0165x slower
   &lt;harmonic&gt;                                         4.0151+-0.0123     ?      4.0449+-0.0257        ? might be 1.0074x slower

                                                        TipOfTree                  Varargs                                      
AsmBench:
   bigfib.cpp                                       501.5117+-4.8465     ?    501.7469+-2.4127        ?
   cray.c                                           501.2266+-141.7163        451.0122+-8.1881          might be 1.1113x faster
   dry.c                                            502.6892+-13.3196         496.4124+-15.2110         might be 1.0126x faster
   FloatMM.c                                        735.8057+-5.1917     ?    742.5267+-16.2023       ?
   gcc-loops.cpp                                   4215.1259+-38.3104    ?   4216.4792+-44.5235       ?
   n-body.c                                        1000.7433+-7.7089     ?   1006.4331+-7.0989        ?
   Quicksort.c                                      451.5618+-5.7585     ?    475.6743+-59.4393       ? might be 1.0534x slower
   stepanov_container.cpp                          3607.4513+-29.5355    ?   3647.0526+-57.3167       ? might be 1.0110x slower
   Towers.c                                         263.5458+-3.7305     ?    267.9293+-15.6823       ? might be 1.0166x slower

   &lt;arithmetic&gt;                                    1308.8513+-22.1903    ?   1311.6963+-11.8905       ? might be 1.0022x slower
   &lt;geometric&gt; *                                    818.4368+-24.3210         817.7156+-13.7320         might be 1.0009x faster
   &lt;harmonic&gt;                                       602.4026+-17.9361    ?    602.4821+-14.0988       ? might be 1.0001x slower

                                                        TipOfTree                  Varargs                                      
CompressionBench:
   huffman                                          506.2357+-6.7995          494.6323+-11.0881         might be 1.0235x faster
   arithmetic-simple                                422.5426+-7.1369     ?    426.2483+-4.7347        ?
   arithmetic-precise                               325.8688+-5.3953          323.8330+-1.9317        
   arithmetic-complex-precise                       323.3937+-4.7004          318.5152+-4.6211          might be 1.0153x faster
   arithmetic-precise-order-0                       463.8657+-8.9762          461.3990+-4.8314        
   arithmetic-precise-order-1                       363.3422+-6.1786     ?    364.0529+-4.8991        ?
   arithmetic-precise-order-2                       397.0428+-5.4652     ?    398.5431+-3.7641        ?
   arithmetic-simple-order-1                        452.7095+-4.8820     ?    452.7105+-5.8528        ?
   arithmetic-simple-order-2                        505.8470+-11.0134         505.4974+-8.3541        
   lz-string                                        342.2450+-6.3964     ?    351.0746+-6.2713        ? might be 1.0258x slower

   &lt;arithmetic&gt;                                     410.3093+-2.0180          409.6506+-1.8749          might be 1.0016x faster
   &lt;geometric&gt; *                                    404.7911+-1.9706          404.3671+-1.9193          might be 1.0010x faster
   &lt;harmonic&gt;                                       399.3305+-1.9341          399.0836+-1.9950          might be 1.0006x faster

                                                        TipOfTree                  Varargs                                      
All benchmarks:
   &lt;arithmetic&gt;                                     102.8410+-0.5303          102.5648+-0.2820          might be 1.0027x faster
   &lt;geometric&gt;                                       13.4697+-0.0420     !     13.6105+-0.0553        ! definitely 1.0105x slower
   &lt;harmonic&gt;                                         3.3731+-0.0091     ?      3.3865+-0.0061        ? might be 1.0040x slower

                                                        TipOfTree                  Varargs                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   65.4296+-0.4684           65.3259+-0.1854          might be 1.0016x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069727</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-16 19:19:46 -0800</bug_when>
    <thetext>I figured out the performance regressions: I broke typed array constructor inlining, and this appears to only have mattered on our microbenchmarks.  I broke it accidentally as part of the refactoring I had to do in the inlining code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069744</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-16 20:25:23 -0800</bug_when>
    <thetext>OK, all performance is good now.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r180189)
&quot;Varargs&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r180189)

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.

                                                        TipOfTree                  Varargs                                      
SunSpider:
   3d-cube                                            4.8026+-0.0567     ?      4.8888+-0.1662        ? might be 1.0179x slower
   3d-morph                                           6.0504+-0.0365     ?      6.0796+-0.1231        ?
   3d-raytrace                                        7.0231+-1.9006            6.2440+-0.1291          might be 1.1248x faster
   access-binary-trees                                2.0839+-0.1252            2.0438+-0.1017          might be 1.0197x faster
   access-fannkuch                                    5.8274+-0.2128     ?      5.8317+-0.0990        ?
   access-nbody                                       2.8365+-0.1328     ?      2.8560+-0.0592        ?
   access-nsieve                                      3.7153+-0.0563     ?      3.9078+-0.6038        ? might be 1.0518x slower
   bitops-3bit-bits-in-byte                           1.5376+-0.0201            1.5277+-0.0193        
   bitops-bits-in-byte                                3.5793+-0.0653            3.4870+-0.1055          might be 1.0265x faster
   bitops-bitwise-and                                 2.0343+-0.0429     ?      2.2374+-0.4134        ? might be 1.0999x slower
   bitops-nsieve-bits                                 3.6144+-0.0658     ?      3.7081+-0.2725        ? might be 1.0259x slower
   controlflow-recursive                              2.2560+-0.1913            2.1695+-0.0268          might be 1.0399x faster
   crypto-aes                                         4.3143+-0.6121            4.1850+-0.1573          might be 1.0309x faster
   crypto-md5                                         2.6027+-0.0700     ^      2.3711+-0.0450        ^ definitely 1.0976x faster
   crypto-sha1                                        2.5798+-0.1380            2.5085+-0.1086          might be 1.0284x faster
   date-format-tofte                                  9.3044+-0.1986     ?      9.3682+-0.2732        ?
   date-format-xparb                                  5.1751+-0.1294     ?      5.2762+-0.1737        ? might be 1.0195x slower
   math-cordic                                        3.0764+-0.1308     ?      3.0803+-0.0798        ?
   math-partial-sums                                  5.6898+-0.5490            5.5437+-0.2932          might be 1.0263x faster
   math-spectral-norm                                 1.8999+-0.0328     ?      1.9185+-0.0459        ?
   regexp-dna                                         8.0837+-1.1750            7.8398+-1.2557          might be 1.0311x faster
   string-base64                                      4.5736+-0.7479            4.5356+-0.5501        
   string-fasta                                       6.3963+-0.1003     ?      6.7719+-0.6303        ? might be 1.0587x slower
   string-tagcloud                                    9.6937+-0.1574     ?      9.8830+-0.3934        ? might be 1.0195x slower
   string-unpack-code                                20.4762+-0.9067     ?     20.5898+-1.0744        ?
   string-validate-input                              4.5740+-0.0523     ?      4.8623+-0.3485        ? might be 1.0630x slower

   &lt;arithmetic&gt; *                                     5.1462+-0.0855            5.1429+-0.0685          might be 1.0006x faster
   &lt;geometric&gt;                                        4.2549+-0.0464            4.2496+-0.0609          might be 1.0012x faster
   &lt;harmonic&gt;                                         3.6352+-0.0379            3.6259+-0.0532          might be 1.0026x faster

                                                        TipOfTree                  Varargs                                      
LongSpider:
   3d-cube                                          908.4274+-15.4800         899.8439+-12.9558       
   3d-morph                                        1598.7533+-26.3411        1592.8800+-27.1534       
   3d-raytrace                                      774.0499+-5.4868          768.2398+-8.9377        
   access-binary-trees                             1006.7487+-6.4017         1001.7826+-6.2242        
   access-fannkuch                                  340.7502+-6.7285          329.5375+-5.4130          might be 1.0340x faster
   access-nbody                                     662.8798+-71.4904         638.2287+-8.2131          might be 1.0386x faster
   access-nsieve                                    971.4976+-11.6297         963.4171+-6.3078        
   bitops-3bit-bits-in-byte                          48.1631+-2.1012           48.1154+-2.0868        
   bitops-bits-in-byte                              118.9046+-12.2232         117.3034+-9.4061          might be 1.0137x faster
   bitops-nsieve-bits                               726.0989+-9.9088     ?    732.0344+-11.0202       ?
   controlflow-recursive                            518.3383+-8.5805          501.5930+-12.6159         might be 1.0334x faster
   crypto-aes                                       702.6232+-9.4370     ?    704.7467+-8.9687        ?
   crypto-md5                                       646.6972+-14.4554    ?    652.7996+-19.1162       ?
   crypto-sha1                                      692.9813+-9.9172     ?    698.0936+-19.8181       ?
   date-format-tofte                                814.8175+-11.2269    ?    826.4238+-34.2474       ? might be 1.0142x slower
   date-format-xparb                                787.5695+-19.9233         779.1775+-23.4253         might be 1.0108x faster
   math-cordic                                      612.5157+-6.3295          609.6938+-8.9129        
   math-partial-sums                                554.4149+-9.0186     ?    615.6208+-95.6192       ? might be 1.1104x slower
   math-spectral-norm                               593.5487+-8.4247          592.4699+-23.0137       
   string-base64                                    369.9431+-6.5546          366.3904+-4.0005        
   string-fasta                                     439.4980+-7.9096     ?    441.8711+-7.2653        ?
   string-tagcloud                                  231.9950+-5.6261          225.1798+-4.9746          might be 1.0303x faster

   &lt;arithmetic&gt;                                     641.8734+-3.6237          641.1565+-6.2110          might be 1.0011x faster
   &lt;geometric&gt; *                                    528.7052+-4.4849          527.2353+-5.1686          might be 1.0028x faster
   &lt;harmonic&gt;                                       347.1165+-6.9698          345.4101+-7.6724          might be 1.0049x faster

                                                        TipOfTree                  Varargs                                      
V8Spider:
   crypto                                            57.2177+-3.6804           55.5971+-1.3303          might be 1.0291x faster
   deltablue                                         85.6786+-8.1014     ?     87.7258+-4.3231        ? might be 1.0239x slower
   earley-boyer                                      47.1467+-1.8877           45.5576+-0.8665          might be 1.0349x faster
   raytrace                                          40.0444+-1.7066           38.5417+-1.1992          might be 1.0390x faster
   regexp                                            70.0061+-1.9349     ?     72.3778+-3.0744        ? might be 1.0339x slower
   richards                                          82.4088+-3.2801     ?     82.7550+-2.3680        ?
   splay                                             36.3880+-2.9921     ?     37.7218+-2.6937        ? might be 1.0367x slower

   &lt;arithmetic&gt;                                      59.8415+-0.9281     ?     60.0396+-0.7153        ? might be 1.0033x slower
   &lt;geometric&gt; *                                     56.8792+-1.0677     ?     56.8811+-0.5210        ? might be 1.0000x slower
   &lt;harmonic&gt;                                        54.0444+-1.4113           53.9032+-0.6379          might be 1.0026x faster

                                                        TipOfTree                  Varargs                                      
Octane:
   encrypt                                           0.24429+-0.00260          0.24011+-0.00284         might be 1.0174x faster
   decrypt                                           4.17529+-0.09454          4.15439+-0.06416       
   deltablue                                x2       0.20785+-0.00408    ?     0.20809+-0.00331       ?
   earley                                            0.71511+-0.00448          0.71203+-0.01544       
   boyer                                             5.49665+-0.08676          5.42468+-0.07401         might be 1.0133x faster
   navier-stokes                            x2       5.38262+-0.05910    ?     5.57102+-0.45325       ? might be 1.0350x slower
   raytrace                                 x2       1.21768+-0.04730    ?     1.35731+-0.28682       ? might be 1.1147x slower
   richards                                 x2       0.13823+-0.00135          0.13805+-0.00285       
   splay                                    x2       0.38471+-0.00151    ?     0.38684+-0.00514       ?
   regexp                                   x2      34.55647+-0.60553         34.34950+-0.41144       
   pdfjs                                    x2      53.59289+-0.43010    ^    52.35451+-0.54997       ^ definitely 1.0237x faster
   mandreel                                 x2      54.00938+-0.34959         53.85736+-0.46010       
   gbemu                                    x2      51.27613+-3.63519         49.20525+-3.32433         might be 1.0421x faster
   closure                                           0.58076+-0.01196    ?     0.59232+-0.00869       ? might be 1.0199x slower
   jquery                                            7.44985+-0.10619    ?     7.54808+-0.19784       ? might be 1.0132x slower
   box2d                                    x2      13.76926+-0.17888    ^    13.18605+-0.09848       ^ definitely 1.0442x faster
   zlib                                     x2     399.63437+-14.00056       398.55208+-13.00459      
   typescript                               x2     871.98271+-13.62226       871.75940+-16.42152      

   &lt;arithmetic&gt;                                     99.69888+-1.40204         99.35075+-1.14040         might be 1.0035x faster
   &lt;geometric&gt; *                                     7.21011+-0.04684    ?     7.21477+-0.07230       ? might be 1.0006x slower
   &lt;harmonic&gt;                                        0.76136+-0.00493    ?     0.76340+-0.00470       ? might be 1.0027x slower

                                                        TipOfTree                  Varargs                                      
Kraken:
   ai-astar                                          275.056+-6.758            274.881+-7.115         
   audio-beat-detection                              114.697+-2.225            112.416+-0.897           might be 1.0203x faster
   audio-dft                                         167.727+-7.843      ?     170.386+-8.763         ? might be 1.0159x slower
   audio-fft                                          87.381+-3.727             85.261+-1.798           might be 1.0249x faster
   audio-oscillator                                  248.447+-8.101      ?     252.176+-8.846         ? might be 1.0150x slower
   imaging-darkroom                                  148.031+-4.077            142.918+-5.047           might be 1.0358x faster
   imaging-desaturate                                 64.936+-2.599      ?      65.988+-3.548         ? might be 1.0162x slower
   imaging-gaussian-blur                             115.969+-3.640            113.935+-2.542           might be 1.0179x faster
   json-parse-financial                               48.101+-3.141             45.361+-1.662           might be 1.0604x faster
   json-stringify-tinderbox                           61.687+-3.626             58.136+-2.064           might be 1.0611x faster
   stanford-crypto-aes                                59.113+-1.579      ?      59.206+-1.492         ?
   stanford-crypto-ccm                                64.187+-2.853             55.956+-8.976           might be 1.1471x faster
   stanford-crypto-pbkdf2                            180.639+-5.349            179.536+-7.031         
   stanford-crypto-sha256-iterative                   56.741+-4.047      ?      57.864+-4.413         ? might be 1.0198x slower

   &lt;arithmetic&gt; *                                    120.908+-1.064            119.573+-1.267           might be 1.0112x faster
   &lt;geometric&gt;                                       102.763+-1.213            100.595+-1.592           might be 1.0216x faster
   &lt;harmonic&gt;                                         88.910+-1.396             86.228+-1.931           might be 1.0311x faster

                                                        TipOfTree                  Varargs                                      
JSRegress:
   abs-boolean                                        2.6377+-0.0478            2.6261+-0.0228        
   adapt-to-double-divide                            17.2713+-1.4470           16.8875+-0.2573          might be 1.0227x faster
   aliased-arguments-getbyval                         0.8099+-0.0128     ?      0.8441+-0.0230        ? might be 1.0423x slower
   allocate-big-object                                2.4469+-0.1833            2.4453+-0.2034        
   arity-mismatch-inlining                            0.8331+-0.0382            0.8124+-0.0204          might be 1.0255x faster
   array-access-polymorphic-structure                 6.6504+-0.8718     ?      6.7401+-0.8589        ? might be 1.0135x slower
   array-nonarray-polymorhpic-access                 36.4305+-1.6605     ?     40.2568+-9.1696        ? might be 1.1050x slower
   array-prototype-every                             90.8488+-3.6178           90.0061+-3.8067        
   array-prototype-forEach                          103.5016+-30.9499          90.2314+-3.5981          might be 1.1471x faster
   array-prototype-map                              114.6580+-4.1355     ?    117.2358+-2.7495        ? might be 1.0225x slower
   array-prototype-some                              92.2380+-3.8656           90.3232+-2.6296          might be 1.0212x faster
   array-splice-contiguous                           44.8178+-1.9957           44.2948+-1.8299          might be 1.0118x faster
   array-with-double-add                              4.0507+-0.0372            4.0458+-0.0647        
   array-with-double-increment                        3.1903+-0.0473            3.1876+-0.0722        
   array-with-double-mul-add                          5.0199+-0.0758            4.9993+-0.0399        
   array-with-double-sum                              3.2251+-0.0490            3.2149+-0.0281        
   array-with-int32-add-sub                           6.7545+-0.1483     ?      7.4878+-1.9125        ? might be 1.1086x slower
   array-with-int32-or-double-sum                     3.2842+-0.0617     ?      3.3610+-0.1915        ? might be 1.0234x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     35.2952+-2.2518     ?     35.8361+-1.1746        ? might be 1.0153x slower
   ArrayBuffer-DataView-alloc-long-lived             13.9316+-1.3197     ?     14.1142+-1.0574        ? might be 1.0131x slower
   ArrayBuffer-Int32Array-byteOffset                  3.4515+-0.0448     ?      3.4736+-0.0454        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.9243+-1.2013     ?     33.0442+-1.3008        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     23.6692+-1.8182     ?     25.1093+-7.1848        ? might be 1.0608x slower
   ArrayBuffer-Int8Array-alloc-long-lived            13.0114+-0.8883     ?     13.8030+-1.5158        ? might be 1.0608x slower
   ArrayBuffer-Int8Array-alloc                       12.7911+-3.6218           11.4818+-0.8549          might be 1.1140x faster
   asmjs_bool_bug                                     7.5516+-0.1908            7.3816+-0.1379          might be 1.0230x faster
   assign-custom-setter-polymorphic                   2.9897+-0.0799     ?      3.0284+-0.0761        ? might be 1.0129x slower
   assign-custom-setter                               4.3310+-0.5341            4.1318+-0.0461          might be 1.0482x faster
   basic-set                                         10.3272+-0.2668           10.2016+-0.2047          might be 1.0123x faster
   big-int-mul                                        3.9340+-0.1285     ?      4.0498+-0.2215        ? might be 1.0294x slower
   boolean-test                                       2.9945+-0.0927            2.9519+-0.0255          might be 1.0144x faster
   branch-fold                                        3.6652+-0.0283            3.6361+-0.0452        
   by-val-generic                                     7.8883+-0.1142     ?      7.9510+-0.1299        ?
   call-spread-apply                                 16.0472+-1.5990           14.6655+-2.0460          might be 1.0942x faster
   call-spread-call                                   6.5043+-1.0307            5.7029+-0.0668          might be 1.1405x faster
   captured-assignments                               0.4437+-0.0062     ?      0.4476+-0.0042        ?
   cast-int-to-double                                 5.2476+-0.0941            5.2428+-0.0564        
   cell-argument                                      8.1771+-0.2442     ?      8.2955+-0.0698        ? might be 1.0145x slower
   cfg-simplify                                       2.8748+-0.0535     ?      2.9481+-0.0920        ? might be 1.0255x slower
   chain-getter-access                                9.7045+-0.1511            9.6715+-0.1783        
   cmpeq-obj-to-obj-other                             9.8755+-0.4111     ?     10.2097+-0.6870        ? might be 1.0338x slower
   constant-test                                      4.8528+-0.0237     ?      4.9151+-0.1290        ? might be 1.0128x slower
   DataView-custom-properties                        39.7219+-1.6810           38.8782+-1.2013          might be 1.0217x faster
   delay-tear-off-arguments-strictmode               24.7915+-2.5167           23.3879+-1.2208          might be 1.0600x faster
   deltablue-varargs                               1128.9684+-13.4659    ^    869.3823+-6.4294        ^ definitely 1.2986x faster
   destructuring-arguments                            5.2672+-0.1878            5.1293+-0.0532          might be 1.0269x faster
   destructuring-swap                                 4.9635+-0.0276            4.9562+-0.0338        
   direct-arguments-getbyval                          1.0118+-0.2122            0.9296+-0.1317          might be 1.0884x faster
   div-boolean-double                                 5.1831+-0.0671     ?      5.1976+-0.0825        ?
   div-boolean                                        7.8610+-0.3418            7.8045+-0.1431        
   double-get-by-val-out-of-bounds                    4.5775+-0.7376            4.3300+-0.2577          might be 1.0572x faster
   double-pollution-getbyval                          8.8092+-0.0545            8.8013+-0.0289        
   double-pollution-putbyoffset                       4.0352+-0.0172     ^      4.0001+-0.0146        ^ definitely 1.0088x faster
   double-to-int32-typed-array-no-inline              2.2837+-0.1089     ?      2.2909+-0.0737        ?
   double-to-int32-typed-array                        1.8899+-0.0664     ?      1.9104+-0.0481        ? might be 1.0109x slower
   double-to-uint32-typed-array-no-inline             2.3076+-0.0628            2.3043+-0.0406        
   double-to-uint32-typed-array                       1.9854+-0.0299     ?      1.9926+-0.0513        ?
   elidable-new-object-dag                           41.9845+-1.3982           41.5133+-1.0797          might be 1.0113x faster
   elidable-new-object-roflcopter                    49.6423+-2.1235           48.4762+-1.6715          might be 1.0241x faster
   elidable-new-object-then-call                     39.2714+-1.7955           39.0883+-2.0406        
   elidable-new-object-tree                          45.9883+-1.6952           43.7314+-1.4148          might be 1.0516x faster
   empty-string-plus-int                              5.3034+-0.2852     ?      5.6281+-0.8568        ? might be 1.0612x slower
   emscripten-cube2hash                              37.8470+-0.7233     ?     37.8811+-1.9372        ?
   external-arguments-getbyval                        1.3445+-0.1326            1.3093+-0.0452          might be 1.0269x faster
   external-arguments-putbyval                        2.0651+-0.0817     ?      2.4710+-0.6981        ? might be 1.1965x slower
   fixed-typed-array-storage-var-index                1.3889+-0.3333            1.2710+-0.0625          might be 1.0928x faster
   fixed-typed-array-storage                          0.9009+-0.0701     ?      0.9010+-0.0602        ?
   Float32Array-matrix-mult                           4.2402+-0.1255     ?      4.2472+-0.0959        ?
   Float32Array-to-Float64Array-set                  58.6918+-3.5148     ?     61.5549+-2.7903        ? might be 1.0488x slower
   Float64Array-alloc-long-lived                     66.2131+-1.2333     ?     66.5959+-2.3150        ?
   Float64Array-to-Int16Array-set                    71.1981+-0.6071           70.7301+-3.7265        
   fold-double-to-int                                14.2998+-1.7390     ?     14.6755+-1.3246        ? might be 1.0263x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.5632+-1.5409     ?     10.9552+-0.4857        ? might be 1.0371x slower
   fold-get-by-id-to-multi-get-by-offset              8.5971+-0.5248     ?      9.4651+-0.5530        ? might be 1.1010x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.9455+-0.9358            8.3585+-0.9818          might be 1.0702x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.4058+-1.3022     ?      8.8861+-0.9172        ? might be 1.0571x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.6353+-1.7273     ?      7.8753+-0.9380        ? might be 1.0314x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.8990+-0.2920            4.5053+-0.4021          might be 1.0874x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.2271+-1.0402            9.3031+-1.1251          might be 1.0993x faster
   fold-put-by-id-to-multi-put-by-offset              9.1123+-0.7102            8.6698+-0.6625          might be 1.0510x faster
   fold-put-structure                                 5.7914+-0.9123            5.7796+-0.6543        
   for-of-iterate-array-entries                       5.9075+-0.8253     ?      6.6237+-1.0269        ? might be 1.1212x slower
   for-of-iterate-array-keys                          2.8931+-0.1871     ?      2.9036+-0.2203        ?
   for-of-iterate-array-values                        2.6142+-0.0791     ?      2.6244+-0.2241        ?
   fround                                            19.4590+-0.4524           19.2622+-0.5047          might be 1.0102x faster
   ftl-library-inlining-dataview                     69.4948+-2.0472     ?     70.5918+-4.6007        ? might be 1.0158x slower
   ftl-library-inlining                              84.0391+-17.7823    ?     84.3176+-11.9040       ?
   function-dot-apply                                 1.4873+-0.1187     ?      1.4989+-0.0817        ?
   function-test                                      3.3677+-0.1178            3.3170+-0.0377          might be 1.0153x faster
   function-with-eval                               119.9775+-5.9320          114.4809+-2.4122          might be 1.0480x faster
   gcse-poly-get-less-obvious                        19.6985+-1.7078     ?     21.2074+-1.3506        ? might be 1.0766x slower
   gcse-poly-get                                     22.3350+-2.6810           22.2955+-1.5330        
   gcse                                               4.3015+-0.1976            4.2998+-0.1830        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7065+-0.0494     ?      2.7800+-0.1353        ? might be 1.0272x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0774+-0.3222     ?      6.1314+-0.1992        ?
   get-by-id-chain-from-try-block                    10.5632+-1.5220            9.1527+-0.8315          might be 1.1541x faster
   get-by-id-check-structure-elimination              5.0083+-0.0573     ?      5.0472+-0.1323        ?
   get-by-id-proto-or-self                           18.5756+-2.0665           17.3213+-0.9749          might be 1.0724x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8789+-0.0520            2.8640+-0.0143        
   get-by-id-self-or-proto                           17.3221+-0.9450     ?     17.8546+-0.5510        ? might be 1.0307x slower
   get-by-val-out-of-bounds                           4.1611+-0.0774     ?      4.1709+-0.0703        ?
   get_callee_monomorphic                             3.7891+-0.1650            3.7732+-0.2186        
   get_callee_polymorphic                             3.4610+-0.0603            3.3940+-0.0592          might be 1.0197x faster
   getter-no-activation                               4.6043+-0.3420            4.4551+-0.4731          might be 1.0335x faster
   getter-richards                                  126.8127+-5.3953     ?    127.3516+-4.3695        ?
   getter                                             5.0455+-0.0441     ?      5.0798+-0.0714        ?
   global-var-const-infer-fire-from-opt               0.8233+-0.0358     ?      0.9151+-0.1241        ? might be 1.1114x slower
   global-var-const-infer                             0.8808+-0.1033     ^      0.7131+-0.0262        ^ definitely 1.2353x faster
   HashMap-put-get-iterate-keys                      27.1720+-0.6724     ?     27.2942+-0.4762        ?
   HashMap-put-get-iterate                           27.8050+-1.0344     ?     27.8396+-0.8134        ?
   HashMap-string-put-get-iterate                    27.1544+-1.0001           26.5079+-0.5395          might be 1.0244x faster
   hoist-make-rope                                   11.9669+-1.3628           11.3705+-0.9499          might be 1.0524x faster
   hoist-poly-check-structure-effectful-loop   
                                                      4.9547+-0.2502            4.9170+-0.1121        
   hoist-poly-check-structure                         3.6540+-0.1390            3.6132+-0.0392          might be 1.0113x faster
   imul-double-only                                   7.6957+-0.4688     ?      7.7939+-0.4535        ? might be 1.0128x slower
   imul-int-only                                     10.0865+-0.8308            9.5500+-0.1753          might be 1.0562x faster
   imul-mixed                                         7.6761+-0.3576     ?      7.9413+-0.5426        ? might be 1.0345x slower
   in-four-cases                                     18.9210+-0.2240     ?     18.9618+-0.1739        ?
   in-one-case-false                                  9.9697+-0.2412            9.8764+-0.1707        
   in-one-case-true                                   9.9499+-0.2079     ?      9.9678+-0.2899        ?
   in-two-cases                                      10.0929+-0.0543     ?     10.0970+-0.0866        ?
   indexed-properties-in-objects                      2.8582+-0.0165     ?      2.8665+-0.0620        ?
   infer-closure-const-then-mov-no-inline             3.6946+-0.0290     ?      3.7004+-0.0135        ?
   infer-closure-const-then-mov                      18.9068+-1.3999     ?     19.5348+-1.3789        ? might be 1.0332x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.9336+-1.6826     ?     13.1229+-2.0299        ? might be 1.0146x slower
   infer-closure-const-then-put-to-scope             24.0260+-1.7423           23.8776+-1.7231        
   infer-closure-const-then-reenter-no-inline   
                                                     51.5336+-3.3131     ?     51.5431+-2.6450        ?
   infer-closure-const-then-reenter                  18.6663+-0.4180     ?     19.0751+-1.0524        ? might be 1.0219x slower
   infer-constant-global-property                    31.9668+-2.1745     ?     33.7634+-3.2238        ? might be 1.0562x slower
   infer-constant-property                            2.6960+-0.1349            2.6542+-0.0379          might be 1.0157x faster
   infer-one-time-closure-ten-vars                   11.9591+-0.1126     ?     12.3551+-1.3133        ? might be 1.0331x slower
   infer-one-time-closure-two-vars                   12.0148+-1.4513           11.7224+-0.3021          might be 1.0249x faster
   infer-one-time-closure                            11.8381+-0.5616           11.6703+-0.2728          might be 1.0144x faster
   infer-one-time-deep-closure                       21.3217+-1.4321           20.6117+-0.7689          might be 1.0344x faster
   inline-arguments-access                            1.4198+-0.0641     ?      1.4714+-0.1059        ? might be 1.0364x slower
   inline-arguments-aliased-access                    1.6140+-0.0440            1.6122+-0.0428        
   inline-arguments-local-escape                     12.4343+-0.4100     ?     12.5323+-0.5878        ?
   inline-get-scoped-var                              4.1412+-0.1152     ?      4.2033+-0.1242        ? might be 1.0150x slower
   inlined-put-by-id-transition                      10.2543+-0.5430     ?     10.6163+-0.8226        ? might be 1.0353x slower
   int-or-other-abs-then-get-by-val                   4.8823+-0.0420     ?      4.8839+-0.0190        ?
   int-or-other-abs-zero-then-get-by-val             17.4277+-0.4396           17.1905+-0.3863          might be 1.0138x faster
   int-or-other-add-then-get-by-val                   4.3526+-0.2856            4.2052+-0.0249          might be 1.0350x faster
   int-or-other-add                                   5.3398+-0.2020            5.2438+-0.1037          might be 1.0183x faster
   int-or-other-div-then-get-by-val                   4.2901+-0.0805     ?      4.3413+-0.2182        ? might be 1.0119x slower
   int-or-other-max-then-get-by-val                   4.4120+-0.1236            4.3840+-0.0995        
   int-or-other-min-then-get-by-val                   4.4083+-0.0691     ?      4.4243+-0.0704        ?
   int-or-other-mod-then-get-by-val                   3.9061+-0.0579            3.8982+-0.0808        
   int-or-other-mul-then-get-by-val                   3.8535+-0.0500     ?      3.8556+-0.1136        ?
   int-or-other-neg-then-get-by-val                   4.7567+-0.1728            4.7091+-0.0494          might be 1.0101x faster
   int-or-other-neg-zero-then-get-by-val             18.8747+-1.7125           17.9097+-1.5164          might be 1.0539x faster
   int-or-other-sub-then-get-by-val                   4.4021+-0.4287            4.3807+-0.3143        
   int-or-other-sub                                   3.4543+-0.0444     ?      3.5116+-0.1983        ? might be 1.0166x slower
   int-overflow-local                                 4.3218+-0.1094            4.3100+-0.0753        
   Int16Array-alloc-long-lived                       49.8179+-2.4099           48.9523+-1.5323          might be 1.0177x faster
   Int16Array-bubble-sort-with-byteLength            21.7593+-1.0312     ^     20.1429+-0.3934        ^ definitely 1.0802x faster
   Int16Array-bubble-sort                            21.5291+-1.0514     ?     22.0817+-1.5141        ? might be 1.0257x slower
   Int16Array-load-int-mul                            1.5117+-0.1035            1.4672+-0.0157          might be 1.0303x faster
   Int16Array-to-Int32Array-set                      54.9065+-2.9240     ?     54.9702+-2.3688        ?
   Int32Array-alloc-large                            24.8816+-0.7255     ?     24.9344+-0.7280        ?
   Int32Array-alloc-long-lived                       54.4545+-1.4576           54.3951+-2.4334        
   Int32Array-alloc                                   3.1705+-0.3587     ?      3.4528+-0.4989        ? might be 1.0890x slower
   Int32Array-Int8Array-view-alloc                    7.0433+-0.6846     ?      7.2664+-0.9452        ? might be 1.0317x slower
   int52-spill                                        6.4556+-0.3497            6.3528+-0.0827          might be 1.0162x faster
   Int8Array-alloc-long-lived                        46.5347+-2.1107           45.5233+-1.8827          might be 1.0222x faster
   Int8Array-load-with-byteLength                     3.3068+-0.0344            3.3063+-0.0499        
   Int8Array-load                                     3.2994+-0.0341     ?      3.4365+-0.1332        ? might be 1.0416x slower
   integer-divide                                    11.7507+-0.2107           11.7002+-0.2199        
   integer-modulo                                     2.0112+-0.1142     ?      2.0341+-0.2376        ? might be 1.0114x slower
   large-int-captured                                 7.5880+-2.3251            7.5860+-1.1380        
   large-int-neg                                     17.2301+-1.3705           17.0892+-0.6020        
   large-int                                         15.9727+-1.1895           15.3453+-0.4287          might be 1.0409x faster
   logical-not                                        4.5341+-0.0633     ?      4.5882+-0.0225        ? might be 1.0119x slower
   lots-of-fields                                    10.4685+-0.4544           10.1754+-0.9127          might be 1.0288x faster
   make-indexed-storage                               2.8998+-0.1815     ?      2.9312+-0.3173        ? might be 1.0108x slower
   make-rope-cse                                      4.2317+-0.4311     ?      4.4452+-0.5021        ? might be 1.0504x slower
   marsaglia-larger-ints                             39.3074+-1.4513     ?     40.5042+-1.7863        ? might be 1.0304x slower
   marsaglia-osr-entry                               23.2778+-0.9720           23.1380+-1.5516        
   max-boolean                                        2.4907+-0.0229     ?      2.5090+-0.0349        ?
   method-on-number                                  17.3437+-0.9687     ?     17.9661+-2.0800        ? might be 1.0359x slower
   min-boolean                                        2.5390+-0.0973     ?      2.5396+-0.0908        ?
   minus-boolean-double                               3.1490+-0.0499            3.1427+-0.0506        
   minus-boolean                                      2.3213+-0.0191     ?      2.3464+-0.0802        ? might be 1.0108x slower
   misc-strict-eq                                    37.5551+-0.9933     ?     37.9972+-0.8613        ? might be 1.0118x slower
   mod-boolean-double                                11.4840+-0.7778           11.0885+-0.2404          might be 1.0357x faster
   mod-boolean                                        7.8508+-0.0883            7.8348+-0.1187        
   mul-boolean-double                                 3.7596+-0.1519     ?      3.7598+-0.1750        ?
   mul-boolean                                        2.8548+-0.0688     ?      2.8892+-0.1166        ? might be 1.0121x slower
   neg-boolean                                        3.1613+-0.0477            3.1405+-0.0380        
   negative-zero-divide                               0.3408+-0.0189            0.3299+-0.0114          might be 1.0331x faster
   negative-zero-modulo                               0.3334+-0.0127     ?      0.3488+-0.0213        ? might be 1.0461x slower
   negative-zero-negate                               0.3169+-0.0064     ?      0.3278+-0.0405        ? might be 1.0342x slower
   nested-function-parsing                           23.5352+-0.1019           23.4799+-0.9589        
   new-array-buffer-dead                              2.7483+-0.1310            2.6801+-0.0394          might be 1.0254x faster
   new-array-buffer-push                              8.2676+-0.8416            7.6698+-0.8276          might be 1.0779x faster
   new-array-dead                                    12.1735+-0.3248           12.0669+-0.4827        
   new-array-push                                     5.4013+-0.1063            5.2916+-0.0714          might be 1.0207x faster
   number-test                                        2.9772+-0.0615            2.9765+-0.0559        
   object-closure-call                                5.5044+-0.2078     ?      5.5243+-0.0994        ?
   object-test                                        3.0634+-0.1277     ?      3.0794+-0.0765        ?
   obvious-sink-pathology-taken                     143.5330+-2.6452          143.0437+-3.2482        
   obvious-sink-pathology                           138.1538+-3.4589     ?    141.8939+-3.4854        ? might be 1.0271x slower
   obviously-elidable-new-object                     36.4009+-1.1042           34.4602+-1.2098          might be 1.0563x faster
   plus-boolean-arith                                 2.5179+-0.0634            2.4967+-0.0285        
   plus-boolean-double                                3.1927+-0.0948            3.1597+-0.0352          might be 1.0105x faster
   plus-boolean                                       2.3813+-0.0353            2.3586+-0.0290        
   poly-chain-access-different-prototypes-simple   
                                                      3.2906+-0.0517            3.2365+-0.0194          might be 1.0167x faster
   poly-chain-access-different-prototypes             2.5929+-0.2615            2.5549+-0.3371          might be 1.0149x faster
   poly-chain-access-simpler                          3.3089+-0.0614     ?      3.3249+-0.0838        ?
   poly-chain-access                                  2.7039+-0.1782            2.5198+-0.2480          might be 1.0731x faster
   poly-stricteq                                     62.1642+-1.0595           61.3830+-3.6927          might be 1.0127x faster
   polymorphic-array-call                             1.8458+-0.0217     ?      1.8738+-0.1097        ? might be 1.0151x slower
   polymorphic-get-by-id                              3.0846+-0.0460     ?      3.1541+-0.0999        ? might be 1.0225x slower
   polymorphic-put-by-id                             31.3785+-2.8477           30.3222+-1.6786          might be 1.0348x faster
   polymorphic-structure                             16.0190+-1.5044           14.8763+-0.1985          might be 1.0768x faster
   polyvariant-monomorphic-get-by-id                  8.4245+-0.0449     ?      8.4300+-0.0834        ?
   proto-getter-access                                9.6556+-0.1671            9.6091+-0.2301        
   put-by-id-replace-and-transition                   8.5211+-0.2216     ?      8.7251+-0.3925        ? might be 1.0239x slower
   put-by-id-slightly-polymorphic                     2.8475+-0.0471            2.8003+-0.0350          might be 1.0169x faster
   put-by-id                                         12.9555+-0.4101     ?     13.0852+-0.7559        ? might be 1.0100x slower
   put-by-val-direct                                  0.5490+-0.0293            0.5399+-0.0260          might be 1.0167x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.8709+-0.7326     ?      6.2231+-0.8885        ? might be 1.0600x slower
   put-by-val-machine-int                             2.5232+-0.0126     ?      2.5819+-0.1383        ? might be 1.0233x slower
   rare-osr-exit-on-local                            14.8328+-0.3666           14.7714+-0.2581        
   register-pressure-from-osr                        22.7411+-1.3536           22.1397+-0.6402          might be 1.0272x faster
   setter                                             5.4062+-0.4073            5.2198+-0.2041          might be 1.0357x faster
   simple-activation-demo                            26.8653+-1.9951           26.3792+-2.2680          might be 1.0184x faster
   simple-getter-access                              12.4102+-0.2023     ?     12.7237+-0.3486        ? might be 1.0253x slower
   simple-poly-call-nested                            8.0687+-0.1532     ?      8.2702+-0.3396        ? might be 1.0250x slower
   simple-poly-call                                   1.2332+-0.0905     ?      1.2427+-0.0739        ?
   sin-boolean                                       21.9297+-2.6684     ?     23.2614+-3.2645        ? might be 1.0607x slower
   sinkable-new-object-dag                           69.7868+-2.5697           68.2832+-1.5299          might be 1.0220x faster
   sinkable-new-object-taken                         51.3703+-2.9684     ?     54.8672+-11.2974       ? might be 1.0681x slower
   sinkable-new-object                               38.0990+-1.3234           37.8446+-1.0050        
   slow-array-profile-convergence                     2.8228+-0.2243            2.7380+-0.0521          might be 1.0310x faster
   slow-convergence                                   3.2226+-0.1327            3.1775+-0.0555          might be 1.0142x faster
   sparse-conditional                                 1.0735+-0.0129     ?      1.1053+-0.0450        ? might be 1.0296x slower
   splice-to-remove                                  18.4343+-1.1731           18.2231+-1.3219          might be 1.0116x faster
   string-char-code-at                               17.2371+-1.2694     ?     17.4187+-1.5697        ? might be 1.0105x slower
   string-concat-object                               2.4487+-0.3330            2.3981+-0.5376          might be 1.0211x faster
   string-concat-pair-object                          2.4323+-0.4084            2.2473+-0.3172          might be 1.0823x faster
   string-concat-pair-simple                         11.5662+-2.4361           10.9451+-1.1738          might be 1.0567x faster
   string-concat-simple                              11.5237+-0.9203           11.1984+-1.1504          might be 1.0290x faster
   string-cons-repeat                                 7.4022+-0.5285     ?      8.1506+-1.1613        ? might be 1.1011x slower
   string-cons-tower                                  7.5127+-0.4463            7.4622+-0.8353        
   string-equality                                   21.0863+-3.3804           19.1524+-1.9284          might be 1.1010x faster
   string-get-by-val-big-char                         6.8618+-0.0341     ?      7.9143+-2.3952        ? might be 1.1534x slower
   string-get-by-val-out-of-bounds-insane             4.5302+-1.5902            3.7760+-0.0904          might be 1.1998x faster
   string-get-by-val-out-of-bounds                    5.1728+-0.0918     ?      5.2310+-0.0974        ? might be 1.0113x slower
   string-get-by-val                                  3.1812+-0.0686            3.1576+-0.0323        
   string-hash                                        2.0377+-0.0781            2.0217+-0.0260        
   string-long-ident-equality                        15.4439+-0.9705     ?     15.5222+-0.8648        ?
   string-repeat-arith                               33.8103+-2.0808     ?     34.3999+-1.8125        ? might be 1.0174x slower
   string-sub                                        70.6002+-2.7559           67.9901+-2.0423          might be 1.0384x faster
   string-test                                        2.9440+-0.1276            2.9291+-0.1129        
   string-var-equality                               32.8765+-2.1384           32.8169+-2.6278        
   structure-hoist-over-transitions                   2.3757+-0.0726            2.3644+-0.0328        
   substring-concat-weird                            41.3951+-1.6361           40.6172+-1.3000          might be 1.0192x faster
   substring-concat                                  41.9649+-1.8279     ?     42.6056+-2.1366        ? might be 1.0153x slower
   substring                                         46.5783+-2.2780     ?     47.5019+-2.0320        ? might be 1.0198x slower
   switch-char-constant                               2.6879+-0.0301     ?      2.8632+-0.4446        ? might be 1.0652x slower
   switch-char                                        7.0628+-0.7787            6.9147+-0.6594          might be 1.0214x faster
   switch-constant                                    9.9967+-0.2589            9.6079+-0.8337          might be 1.0405x faster
   switch-string-basic-big-var                       16.4856+-1.4392     ?     16.5869+-1.1903        ?
   switch-string-basic-big                           16.6488+-1.0362           14.7524+-1.5907          might be 1.1285x faster
   switch-string-basic-var                           15.2552+-1.0387     ?     15.6516+-1.5815        ? might be 1.0260x slower
   switch-string-basic                               15.6749+-1.6268           15.3260+-1.3779          might be 1.0228x faster
   switch-string-big-length-tower-var                21.1968+-1.4002           20.3350+-1.4833          might be 1.0424x faster
   switch-string-length-tower-var                    15.6240+-1.4799           14.9983+-0.5767          might be 1.0417x faster
   switch-string-length-tower                        13.0468+-1.1253     ?     14.1802+-1.6277        ? might be 1.0869x slower
   switch-string-short                               14.1847+-1.9313           12.4224+-0.0933          might be 1.1419x faster
   switch                                            14.3986+-1.7643           11.9808+-1.9113          might be 1.2018x faster
   tear-off-arguments-simple                          1.8053+-0.0314     ?      1.8132+-0.0251        ?
   tear-off-arguments                                 2.6222+-0.0492     ?      2.9440+-0.7427        ? might be 1.1227x slower
   temporal-structure                                12.7605+-1.5458           12.4714+-0.8558          might be 1.0232x faster
   to-int32-boolean                                  13.9764+-0.6531           13.9762+-1.0175        
   undefined-property-access                        399.4307+-6.0751          395.6478+-8.7134        
   undefined-test                                     3.0486+-0.1243            3.0361+-0.1414        
   unprofiled-licm                                   22.8896+-0.7671     ?     24.1981+-2.2013        ? might be 1.0572x slower
   weird-inlining-const-prop                          2.1449+-0.1418            2.0306+-0.0915          might be 1.0563x faster

   &lt;arithmetic&gt;                                      21.6450+-0.2338     ^     20.6024+-0.0993        ^ definitely 1.0506x faster
   &lt;geometric&gt; *                                      8.2254+-0.0310            8.1837+-0.0384          might be 1.0051x faster
   &lt;harmonic&gt;                                         4.0410+-0.0231            4.0312+-0.0445          might be 1.0024x faster

                                                        TipOfTree                  Varargs                                      
AsmBench:
   bigfib.cpp                                       509.9665+-3.4647          508.5284+-4.5365        
   cray.c                                           462.3071+-15.9530         455.0837+-4.8121          might be 1.0159x faster
   dry.c                                            522.3138+-8.9570          519.0764+-11.7603       
   FloatMM.c                                        759.7880+-14.7970         754.8067+-8.4566        
   gcc-loops.cpp                                   4350.9079+-27.7889        4349.3158+-17.0638       
   n-body.c                                        1044.2198+-7.0197         1029.9733+-18.1867         might be 1.0138x faster
   Quicksort.c                                      465.0140+-6.2040          461.1965+-10.5657       
   stepanov_container.cpp                          3703.3679+-37.8267        3690.2519+-27.8405       
   Towers.c                                         272.8492+-6.6793          271.8270+-7.0600        

   &lt;arithmetic&gt;                                    1343.4149+-6.5278         1337.7844+-6.8570          might be 1.0042x faster
   &lt;geometric&gt; *                                    836.0450+-6.1720          830.4153+-6.7441          might be 1.0068x faster
   &lt;harmonic&gt;                                       615.1226+-6.4918          610.7100+-6.4641          might be 1.0072x faster

                                                        TipOfTree                  Varargs                                      
CompressionBench:
   huffman                                          523.4119+-14.7566    ?    533.9702+-6.5180        ? might be 1.0202x slower
   arithmetic-simple                                438.0364+-10.2581         435.5862+-10.6094       
   arithmetic-precise                               329.2513+-6.3226     ?    335.0275+-5.9349        ? might be 1.0175x slower
   arithmetic-complex-precise                       329.5603+-10.3139    ?    344.8861+-56.4117       ? might be 1.0465x slower
   arithmetic-precise-order-0                       471.9719+-9.3184     ?    473.6711+-10.0789       ?
   arithmetic-precise-order-1                       377.0987+-5.4909     ?    405.3004+-77.1429       ? might be 1.0748x slower
   arithmetic-precise-order-2                       412.9557+-6.1838          409.1986+-10.6570       
   arithmetic-simple-order-1                        465.3090+-6.0304     ?    467.9609+-6.0845        ?
   arithmetic-simple-order-2                        515.0670+-9.5275          509.0608+-10.1933         might be 1.0118x faster
   lz-string                                        351.5260+-3.4569     ?    363.1371+-9.3085        ? might be 1.0330x slower

   &lt;arithmetic&gt;                                     421.4188+-3.2817     ?    427.7799+-8.9411        ? might be 1.0151x slower
   &lt;geometric&gt; *                                    415.6298+-3.0339     ?    421.9763+-8.8476        ? might be 1.0153x slower
   &lt;harmonic&gt;                                       409.8505+-2.9327     ?    416.1544+-8.8038        ? might be 1.0154x slower

                                                        TipOfTree                  Varargs                                      
All benchmarks:
   &lt;arithmetic&gt;                                     105.0415+-0.4271          104.2315+-0.4958          might be 1.0078x faster
   &lt;geometric&gt;                                       13.6197+-0.0349           13.5614+-0.0464          might be 1.0043x faster
   &lt;harmonic&gt;                                         3.4227+-0.0150            3.4201+-0.0182          might be 1.0008x faster

                                                        TipOfTree                  Varargs                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   66.5657+-0.2350           66.4780+-0.3541          might be 1.0013x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069749</commentid>
    <comment_count>24</comment_count>
      <attachid>246722</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-16 20:49:09 -0800</bug_when>
    <thetext>Created attachment 246722
towards 32-bit support

Implemented 32-bit support, but it&apos;s still failing a lot of tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069755</commentid>
    <comment_count>25</comment_count>
      <attachid>246724</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-16 21:15:51 -0800</bug_when>
    <thetext>Created attachment 246724
x86 32-bit and 64-bit pass all tests

I still have to do minor tweaks for ARM, but it&apos;s ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069757</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-16 21:18:10 -0800</bug_when>
    <thetext>Attachment 246724 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:689:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:674:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1417:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1426:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1439:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1526:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1254:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1271:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:298:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/JITCall.cpp:191:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:54:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:134:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:142:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:475:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:476:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 16 in 88 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>1069845</commentid>
    <comment_count>27</comment_count>
      <attachid>246724</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-02-17 08:46:47 -0800</bug_when>
    <thetext>Comment on attachment 246724
x86 32-bit and 64-bit pass all tests

y u so big :-/

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069851</commentid>
    <comment_count>28</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-02-17 09:26:52 -0800</bug_when>
    <thetext>I tested the latest patch and it doesn&apos;t build on ARMv7 Linux. Could you
possibly give us a little bit time (max a day) to fix before landing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069855</commentid>
    <comment_count>29</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-02-17 09:30:49 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; I tested the latest patch and it doesn&apos;t build on ARMv7 Linux. Could you
&gt; possibly give us a little bit time (max a day) to fix before landing?

At least helpers are missing from Source/JavaScriptCore/jit/CCallHelpers.h,
I don&apos;t know if there is any issue later, but I&apos;m on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069883</commentid>
    <comment_count>30</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-02-17 10:20:33 -0800</bug_when>
    <thetext>I fixed the ARM Linux build in bug141714, please review 
and land it before landing this patch. Thanks.

Additionally I started JSC tests, it is still running, but no regression at 10% .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069888</commentid>
    <comment_count>31</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-17 10:36:07 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; I tested the latest patch and it doesn&apos;t build on ARMv7 Linux. Could you
&gt; possibly give us a little bit time (max a day) to fix before landing?

In the past, the way we worked this out was that I CC&apos;d you on the bug before landing and then you would fix after.

Are you proposing a change to this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069889</commentid>
    <comment_count>32</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-02-17 10:38:17 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #28)
&gt; &gt; I tested the latest patch and it doesn&apos;t build on ARMv7 Linux. Could you
&gt; &gt; possibly give us a little bit time (max a day) to fix before landing?
&gt; 
&gt; In the past, the way we worked this out was that I CC&apos;d you on the bug
&gt; before landing and then you would fix after.
&gt; 
&gt; Are you proposing a change to this?

Nope, I thought it is a bigger change, but I already fixed it. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069891</commentid>
    <comment_count>33</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-02-17 10:42:26 -0800</bug_when>
    <thetext>I noticed it wasn&apos;t ARM Linux specific build issue,
it was exactly same as the iOS EWS noticed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069899</commentid>
    <comment_count>34</comment_count>
      <attachid>246757</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-17 11:10:22 -0800</bug_when>
    <thetext>Created attachment 246757
closer to landing

Fixed some debug asserts and crashes.  Still need to deal with some ARMs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069900</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-17 11:12:53 -0800</bug_when>
    <thetext>Attachment 246757 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:689:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:674:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1417:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1526:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1254:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1271:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:298:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:54:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:134:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp:142:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 11 in 94 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>1070122</commentid>
    <comment_count>36</comment_count>
      <attachid>246819</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-18 09:06:36 -0800</bug_when>
    <thetext>Created attachment 246819
ARM64 works</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070170</commentid>
    <comment_count>37</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-18 11:57:08 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/180279</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246166</attachid>
            <date>2015-02-06 10:52:51 -0800</date>
            <delta_ts>2015-02-07 11:56:37 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17225</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDE3OTc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgQ2FsbExp
bmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgICAgICwgaGFzU2VlblNob3VsZFJlcGF0
Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2VlbkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2Fs
bFR5cGUoTm9uZSkKKyAgICAgICAgLCBtYXhOdW1Bcmd1bWVudHMoMCkKICAgICAgICAgLCBzbG93
UGF0aENvdW50KDApCiAgICAgewogICAgIH0KQEAgLTg3LDYgKzg4LDcgQEAgc3RydWN0IENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAx
OwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBj
YWxsZWVHUFIgOiA4OworICAgIHVpbnQ4X3QgbWF4TnVtQXJndW1lbnRzOyAvLyBPbmx5IHVzZWQg
Zm9yIHZhcmFyZ3MgY2FsbHMuCiAgICAgdWludDMyX3Qgc2xvd1BhdGhDb3VudDsKICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTc5NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw4
IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENh
bGwsCiAgICAgICAgIENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENv
bnN0cnVjdFZhcmFyZ3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFj
a09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0
dXJuIFBDCiAgICAgICAgIC8vIHNsb3QuCkBAIC0xNDQsMjEgKzE0NiwyMyBAQCBzdHJ1Y3QgSW5s
aW5lQ2FsbEZyYW1lIHsKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzUsNiArMTc5LDcgQEAgc3RydWN0IElubGlu
ZUNhbGxGcmFtZSB7CiAgICAgdW5zaWduZWQga2luZCA6IDI7IC8vIHJlYWwgdHlwZSBpcyBLaW5k
CiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRo
YXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhl
bSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4K
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXI7IC8vIFRoaXMgaXMgb25seSBz
ZXQgaWYgdGhlIGNvZGUgdXNlcyBhcmd1bWVudHMuIFRoZSB1bm1vZGlmaWVkIGFyZ3VtZW50cyBy
ZWdpc3RlciBmb2xsb3dzIHRoZSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoKSBjb252ZW50
aW9uIChzZWUgQ29kZUJsb2NrLmgpLgorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50
UmVnaXN0ZXI7IC8vIE9ubHkgc2V0IHdoZW4gd2UgaW5saW5lIGEgdmFyYXJncyBjYWxsLgogICAg
IAogICAgIC8vIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG5vdGlvbiBvZiBhICJkZWZhdWx0IiBz
ZXQgb2YgdmFsdWVzIGZvcgogICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBj
b25zdHJ1Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlz
aW9uIDE3OTc0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEyLDQwICszMTEyLDQ4IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCB0aGlzUmVnID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmd1bWVu
dHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGZp
cnN0RnJlZVJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5k
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkKKyAgICAg
ICAgICAgICAgICAmJiBhcmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2st
PmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxp
bmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKQor
ICAgICAgICAgICAgICAgICYmICFmaXJzdFZhckFyZ09mZnNldCkgeworICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKKworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50cy5zaXplKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21wdXRlIHRoZSByZWdp
c3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNlZCByZWdpc3RlciwgYW5kCisg
ICAgICAgICAgICAgICAgLy8gdGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0
aGUgY2FsbCBmcmFtZS4KKyAgICAgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBmaXJz
dEZyZWVSZWcgKyAxOworICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IGFyZ0NvdW50
OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2ls
bCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhlYWRlci4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgorICAgICAgICAgICAgICAg
IHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAg
ICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgICAgICAgICAg
LXJlZ2lzdGVyT2Zmc2V0KTsKKworICAgICAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAorICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3VsZG4n
dCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2UgaXQK
KyAgICAgICAgICAgICAgICAvLyBsb29rIGxpa2UgdGhlIGJ5dGVjb2RlIGhhZCBkb25lIGl0Lgor
ICAgICAgICAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJbW1l
ZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9
IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCisgICAgICAgICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaGFuZGxlQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LCBDYWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAorICAg
ICAgICAgICAgICAgICAgICBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCk7CisgICAg
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9jYWxs
VmFyYXJnc0RhdGEuYWRkKCk7CisgICAgICAgICAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNldCA9
IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgICAgICAgICAgLy8gRklYTUUKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZSgpKTsKLSAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoYXJndW1lbnRzLCBhcmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOwotICAgICAgICAgICAgQVNTRVJU
KCFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xvd0FyZ3Vt
ZW50cygpKTsKLQotICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0FyZ3VtZW50c05vdENyZWF0
ZWQpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGlubGluZUNhbGxGcmFtZSgp
LT5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBMZXQncyBj
b21wdXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNlZCBy
ZWdpc3RlciwgYW5kCi0gICAgICAgICAgICAvLyB0aGVuIGFkanVzdCBmb3IgdGhlIHRoaW5ncyB3
ZSB3YW50IGluIHRoZSBjYWxsIGZyYW1lLgotICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0
ID0gZmlyc3RGcmVlUmVnICsgMTsKLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IGFyZ0Nv
dW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1bWVudHMuCi0gICAgICAgICAgICBy
ZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyAvLyBXZSB3aWxs
IHByZXRlbmQgdG8gaGF2ZSBhIGNhbGwgZnJhbWUgaGVhZGVyLgotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KLSAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKLSAgICAgICAgICAgICAgICBzdGFj
a0FsaWdubWVudFJlZ2lzdGVycygpLAotICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7
Ci0KLSAgICAgICAgICAgIGVuc3VyZUxvY2FscygKLSAgICAgICAgICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
cihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQg
d2UnbGwgZG8gaXQgYW5kIG1ha2UgaXQKLSAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0
ZWNvZGUgaGFkIGRvbmUgaXQuCi0gICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0
ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhp
c1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKLSAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgICAgICAgICByZXN1bHQsIENh
bGwsIENvZGVGb3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCi0gICAgICAg
ICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzk3NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg4OCw2ICs4ODgsNyBAQCBwdWJsaWM6CiAgICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBt
X211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9t
dWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4g
bV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOworICAgIEJhcjxDYWxsVmFyYXJnc0RhdGE+IG1f
Y2FsbFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5s
aW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRy
PEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9o
YXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gMTc5NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4Myw2ICsxODMsMTAgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIGJv
b2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IENhbGxWYXJhcmdzRGF0YSB7CisgICAg
aW50IGZpcnN0VmFyQXJnT2Zmc2V0OworfTsKKwogLy8gVGhpcyB0eXBlIHVzZWQgaW4gcGFzc2lu
ZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1
aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVC
bG9jayBkYXRhIHN0cnVjdHVyZSAtIAogLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9y
IGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAgLTkxMSw2ICs5MTUsMjIgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+
KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNDYWxsVmFyYXJnc0RhdGEoKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6
CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBjYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxDYWxsVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7Cisg
ICAgfQorICAgIAogICAgIGJvb2wgaGFzUmVzdWx0KCkKICAgICB7CiAgICAgICAgIHJldHVybiAh
IXJlc3VsdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDE3OTc0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDksNyArMTQ5LDEwIEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbGwK
IAogICAgICAgICBtX2ZyYW1lLm1fY2FsbEZyYW1lID0gY2FsbEZyYW1lOwogICAgICAgICBtX2Zy
YW1lLm1faW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBtX2ZyYW1l
Lm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCk7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdp
c3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCk7CiAgICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCk7CiAgICAgICAgIG1fZnJhbWUubV9ieXRlY29k
ZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMTc5NzQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChPcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKE9wY29kZUlELCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgICAgIHZvaWQgY29tcGls
ZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgY29tcGlsZUxvYWRWYXJh
cmdzKEluc3RydWN0aW9uKiwgQ2FsbExpbmtJbmZvKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNh
bGxFdmFsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTc5NzQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQCB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdz
KEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3Mo
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCiB7CiAgICAgaW50
IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICBpbnQgYXJndW1lbnRz
ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5hZGRyZXNzT2ZTdGFja0xpbWl0
KCkpLCByZWdUMSkpOwogCiAgICAgICAgIC8vIEluaXRpYWxpemUgQXJndW1lbnRDb3VudC4KLSAg
ICAgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0b3Jl
MzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOwogCiAgICAgICAg
IC8vIEluaXRpYWxpemUgJ3RoaXMnLgogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRo
aXNWYWx1ZSwgcmVnVDIpOwpAQCAtMTMwLDYgKzEzMCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZUxv
YWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgaWYgKGNhbk9wdGltaXplKQogICAgICAgICBlbmQu
bGluayh0aGlzKTsKICAgICAKKyAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAg
IGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dl
c3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRl
ZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmso
dGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBu
b3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQog
CkBAIC0xNzAsNyArMTgwLDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKElu
c3RydQogCiB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKLSAgICBp
bnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAgICBpbnQgY2FsbGVl
ID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgLyogQ2FsbGVyIGFsd2F5czoKICAg
ICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJhbWUuCkBA
IC0xODgsNyArMjAwLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2Rl
SQogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xF
TkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0
X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2Nh
bGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBjYWxsX2FuZF9jb25z
dHJ1Y3RfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MpCi0gICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhpbnN0cnVjdGlvbik7CisgICAgICAgIGNv
bXBpbGVMb2FkVmFyYXJncyhpbnN0cnVjdGlvbiwgaW5mbyk7CiAgICAgZWxzZSB7CiAgICAgICAg
IGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTIxMiw5ICsyMjQs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBzdG9y
ZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFk
ZENhbGxMaW5rSW5mbygpOwotCi0gICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewor
ICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2
YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE3OTc0NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIEFyZ3VtZW50cyog
Y3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxBcmd1bWVudHNDcmVhdGlv
bk1vZGUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3Rl
ckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoaW5saW5lQ2FsbEZyYW1lKSkpIEFy
Z3VtZW50cyhjYWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVS
ZWdpc3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoY2FsbEZyYW1lLCBpbmxp
bmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+
ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUsIG1vZGUpOwogICAgICAg
ICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KQEAgLTEyNCw3ICsxMjQsMTUgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShFeGVjU3RhdGUqKTsK
IAogICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSog
Y2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpOyB9Ci0gICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5
U2l6ZUluQnl0ZXMoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsgcmV0dXJuIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSAtIDEpOyB9CisgICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0
ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Cisg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+
cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hl
ZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpCisgICAgICAgIHJldHVy
biBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAtIDEpOworICAgIH0KICAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90KTsKICAgICBib29s
IHRyeVNldEFyZ3VtZW50KFZNJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlKTsKICAgICBKU1Zh
bHVlIHRyeUdldEFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCk7CkBAIC0zNDAsMTEgKzM0OCwxNSBA
QCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgbV9vdmVycm9k
ZUNhbGxlZSA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsKICAgICBtX2lz
U3RyaWN0TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJhbWUt
PmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKLQorICAgIAorICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgIG1f
bnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICBlbHNlCisgICAgICAgIG1f
bnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgIG1f
bnVtQXJndW1lbnRzLS07CisgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBOb3Jt
YWxBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICAKICAgICAgICAgaWYg
KG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQo
KTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1
bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpAQCAtMzYx
LDcgKzM3Myw2IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0g
ICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMTsKICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zm
c2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFs
UmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnBy
ZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEp
Lm9mZnNldCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246212</attachid>
            <date>2015-02-07 11:56:37 -0800</date>
            <delta_ts>2015-02-07 16:24:13 -0800</delta_ts>
            <desc>slowly coming along</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>39696</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlz
aW9uIDE3OTc1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTM5Nyw2ICsxMzk3LDcgQEAgdm9pZCB0ZXN0T2JqZWN0aXZl
Q0FQSSgpCiAgICAgICAgIGNoZWNrUmVzdWx0KEAiRWRlbkNvbGxlY3Rpb24gZG9lc24ndCByZWNs
YWltIG5ldyBtYW5hZ2VkIHZhbHVlcyIsIFttYW5hZ2VkSlNPYmplY3QgdmFsdWVdICE9IG5pbCk7
CiAgICAgfQogCisgICAgaWYgKGZhbHNlKSB7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAgICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKICAgICAg
ICAgCkBAIC0xNDI3LDYgKzE0MjgsNyBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKICAgICAg
ICAgcHRocmVhZF9qb2luKHRocmVhZElELCBudWxscHRyKTsKICAgICAgICAgY2hlY2tSZXN1bHQo
QCJEaWQgbm90IGNyYXNoIGlmIHRoZSBWTSBpcyBkZXN0cnVjdGVkIGJlZm9yZSBhbm90aGVyIHRo
cmVhZCB1c2luZyB0aGUgVk0gZW5kcyIsIHRydWUpOwogICAgIH0KKyAgICB9CiAKICAgICBjdXJy
ZW50VGhpc0luc2lkZUJsb2NrR2V0dGVyVGVzdCgpOwogICAgIHJ1bkRhdGVUZXN0cygpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2
aXNpb24gMTc5NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIHN0cnVjdCBDYWxsTGlua0lu
Zm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICAgICAgLCBoYXNTZWVuU2hvdWxkUmVwYXRjaChm
YWxzZSkKICAgICAgICAgLCBoYXNTZWVuQ2xvc3VyZShmYWxzZSkKICAgICAgICAgLCBjYWxsVHlw
ZShOb25lKQorICAgICAgICAsIG1heE51bUFyZ3VtZW50cygwKQogICAgICAgICAsIHNsb3dQYXRo
Q291bnQoMCkKICAgICB7CiAgICAgfQpAQCAtODcsNiArODgsNyBAQCBzdHJ1Y3QgQ2FsbExpbmtJ
bmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgYm9vbCBoYXNTZWVuQ2xvc3VyZSA6IDE7CiAg
ICAgdW5zaWduZWQgY2FsbFR5cGUgOiA1OyAvLyBDYWxsVHlwZQogICAgIHVuc2lnbmVkIGNhbGxl
ZUdQUiA6IDg7CisgICAgdWludDhfdCBtYXhOdW1Bcmd1bWVudHM7IC8vIE9ubHkgdXNlZCBmb3Ig
dmFyYXJncyBjYWxscy4KICAgICB1aW50MzJfdCBzbG93UGF0aENvdW50OwogICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCShyZXZpc2lvbiAxNzk3NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjksNyArMTI5LDkgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
bwogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMsIGJ1dCBhbnl0aW1lIHdlIGhhdmUg
dG8gZGVidWcgdGhpcyBjb2RlLCBpdCBiZWNvbWVzIGluZGlzcGVuc2FibGUuCiAgICAgVU5VU0VE
X1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIAotICAgIHJldHVybiBjb21wdXRlRnJvbUNhbGxM
aW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgQ2FsbExpbmtTdGF0dXMgcmVzdWx0
ID0gY29tcHV0ZUZyb21DYWxsTGlua0luZm8obG9ja2VyLCBjYWxsTGlua0luZm8pOworICAgIHJl
c3VsdC5tX21heE51bUFyZ3VtZW50cyA9IGNhbGxMaW5rSW5mby5tYXhOdW1Bcmd1bWVudHM7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVGcm9tQ2FsbExpbmtJbmZvKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHJldmlzaW9uIDE3OTc1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjMsNiArMTIzLDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCgp
IGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgYW55IGNhbGxlZSBpcyBhIGNsb3N1cmUgY2FsbC4K
ICAgICAKKyAgICBib29sIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TnVt
QXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAg
ICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzOSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZhcmlh
bnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAgIGJv
b2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5oCShyZXZpc2lvbiAxNzk3NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDggQEAg
c3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgZW51bSBLaW5kIHsKICAgICAgICAgQ2FsbCwK
ICAgICAgICAgQ29uc3RydWN0LAorICAgICAgICBDYWxsVmFyYXJncywKKyAgICAgICAgQ29uc3Ry
dWN0VmFyYXJncywKICAgICAgICAgCiAgICAgICAgIC8vIEZvciB0aGVzZSwgdGhlIHN0YWNrT2Zm
c2V0IGluY29ycG9yYXRlcyB0aGUgYXJndW1lbnQgY291bnQgcGx1cyB0aGUgdHJ1ZSByZXR1cm4g
UEMKICAgICAgICAgLy8gc2xvdC4KQEAgLTE0MCwyNSArMTQyLDM5IEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgICAgICByZXR1cm4gQ2FsbDsKICAgICB9CiAgICAgCisgICAgc3RhdGlj
IEtpbmQgdmFyYXJnc0tpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAg
ICAgICAgICByZXR1cm4gQ2FsbFZhcmFyZ3M7CisgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVj
dDoKKyAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICB9CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBDYWxsOwor
ICAgIH0KKyAgICAKICAgICBzdGF0aWMgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXph
dGlvbktpbmRGb3IoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAg
ICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKICAgICAgICAgY2Fz
ZSBHZXR0ZXJDYWxsOgogICAgICAgICBjYXNlIFNldHRlckNhbGw6CiAgICAgICAgICAgICByZXR1
cm4gQ29kZUZvckNhbGw7CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYXNlIENv
bnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgICAgICByZXR1cm4gQ29kZUZvckNvbnN0cnVjdDsKICAg
ICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gQ29kZUZvckNhbGw7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIGlzTm9ybWFs
Q2FsbChLaW5kIGtpbmQpCisgICAgc3RhdGljIGJvb2wgaXNWYXJhcmdzKEtpbmQga2luZCkKICAg
ICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewotICAgICAgICBjYXNlIENhbGw6Ci0gICAgICAg
IGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3MSwxMCArMTg3LDExIEBAIHN0
cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZl
Y3RvciBjYXB0dXJlZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdz
IHZhcmlhYmxlIG51bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAg
IHVuc2lnbmVkIGtpbmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFj
a09mZnNldCA6IDI4OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2lu
ZAogICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0
aGF0IGNhbGxlZS9zY29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRo
ZW0gYXMgdmFyaWFibGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHku
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkg
c2V0IGlmIHRoZSBjb2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMg
cmVnaXN0ZXIgZm9sbG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVu
dGlvbiAoc2VlIENvZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3Vu
dFJlZ2lzdGVyOyAvLyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAg
ICAKICAgICAvLyBUaGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIg
c2V0IG9mIHZhbHVlcyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMg
Y29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3OTc1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjAzLDggKzIwMywxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldEFyZ3VtZW50OgotICAgICAgICAvLyBBc3Nl
cnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KLSAgICAgICAgQVNT
RVJUKCFtX3N0YXRlLmJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkp
LmlzQ2xlYXIoKSk7CisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVu
dHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudCBtZWFucyB0aGF0IHNvbWVvbmUgc2V0CisgICAg
ICAgIC8vIHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhp
cyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCisgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4K
KyAgICAgICAgQVNTRVJUKG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgp
KS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQml0
QW5kOgpAQCAtMTMxNSw3ICsxMzE3LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhp
cyBpcyBub3Qgc3VmZmljaWVudCB0byBmb3JjZSBjb25zdGFudCBmb2xkaW5nCiAgICAgICAgIC8v
IG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBiZWNhdXNlIEdldE15QXJndW1lbnRzTGVuZ3RoIGlz
IGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCiAgICAgICAgIC8vIFdlIHBlcmZvcm0gZnVydGhlciBv
cHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIgb24uCi0gICAgICAgIGlmIChub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhSW5saW5lQ2FsbEZyYW1lOjpp
c1ZhcmFyZ3Mobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+a2luZCkpIHsK
ICAgICAgICAgICAgIHNldENvbnN0YW50KAogICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVtYmVy
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSk7CiAgICAgICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7IC8vIFByZXRl
bmQgdGhhdCB3ZSBjbG9iYmVyZWQgdG8gcHJldmVudCBjb25zdGFudCBmb2xkaW5nLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzk3NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFvcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6Omlz
VmFyYXJncyhvcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5raW5kKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgLy8gV2Uga25vdyBleGFjdGx5IHdoYXQgdGhpcyB3aWxsIHJldHVybi4gQnV0IG9u
bHkgYWZ0ZXIgd2UgaGF2ZSBjaGVja2VkCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgbm9i
b2R5IGhhcyBlc2NhcGVkIG91ciBhcmd1bWVudHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTc5NzU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Niw5ICsxODYsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZW1pdEFyZ3VtZW50
UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHVuc2lnbmVkIGlubGluaW5nQ29zdChD
YWxsVmFyaWFudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFuIGlubGluaW5nIGNh
bmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29zdCBvZiAxLgogICAg
IC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBp
ZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMm
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQs
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOworICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9k
ZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1
cyYsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZy
YW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBlbnVtIENhbGxlckxp
bmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIENhbGxlckxpbmtzTWFudWFsbHkg
fTsKLSAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGlu
dCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxG
cmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24s
IHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpOworICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2Fs
bChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBp
bnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZy
YW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwg
dW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSk7CiAgICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUqIGNh
bGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5KTsKICAgICB2b2lk
IGNhbmNlbExpbmtpbmdGb3JCbG9jayhJbmxpbmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAv
LyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdpdmVuIGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZl
IGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5saW5lIHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBp
bnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlm
IHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgpAQCAtMTA1OSw3ICsxMDU5LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICAKICAgICBPcEluZm8gY2FsbE9wSW5mbzsKICAg
ICAKLSAgICBpZiAoaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0
YXR1cywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zm
c2V0LCBvcCwga2luZCwgcHJlZGljdGlvbikpIHsKKyAgICBpZiAoaGFuZGxlSW5saW5pbmcoY2Fs
bFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSwgVmlydHVhbFJlZ2lzdGVyKCks
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwga2luZCwgcHJlZGlj
dGlvbikpIHsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAg
IG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMTA4NywxMSArMTA4NywxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVD
YWxsKAogICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbE9wSW5mbywgY2FsbFRhcmdldCwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKIH0K
IAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNh
bGxlZSwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3Mo
Q2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c0FyZ3VtZW50UmVnLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgTm9kZSog
dGhpc0FyZ3VtZW50OwotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICB0aGlz
QXJndW1lbnQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZz
ZXQpKTsKKyAgICBpZiAodGhpc0FyZ3VtZW50UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgdGhpc0Fy
Z3VtZW50ID0gZ2V0KHRoaXNBcmd1bWVudFJlZyk7IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICBlbHNlCiAgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7
CiAKQEAgLTEzNTUsNyArMTM1NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmNhbmNlbExpbmtp
bmdGb3JCbG8KICAgICB9CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGlu
ZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFu
dCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2Fs
bGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpCitib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRl
bXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwg
Q2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0
aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4
dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNh
bGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5s
aW5pbmdCYWxhbmNlKQogewogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRp
b25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CiAg
ICAgCkBAIC0xMzkyLDcgKzEzOTIsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRv
SW5saW5lQ2FsbAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNv
bnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVU
eXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24pCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKKyAgICBOb2Rl
KiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVz
JiBjYWxsTGlua1N0YXR1cywKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZywg
VmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4
dE9mZnNldCwKKyAgICBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5k
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAg
ICAgIGRhdGFMb2coIkhhbmRsaW5nIGlubGluaW5nLi4uXG4iKTsKQEAgLTE0MDYsNiArMTQxMCwx
MyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgCisgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJh
cmdzKGtpbmQpCisgICAgICAgICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4g
T3B0aW9uczo6bWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZygpKSB7CisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZh
cmFyZ3MuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAg
dW5zaWduZWQgaW5saW5pbmdCYWxhbmNlID0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2Fs
bElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRp
b25LaW5kID09IENvZGVGb3JDb25zdHJ1Y3QpCiAgICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0
ZDo6bWluKGlubGluaW5nQmFsYW5jZSwgT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpKTsKQEAgLTE0MTYsMTAgKzE0Mjcs
NDQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNp
bXBsaWZpY2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGlt
ZXMsIGJ1dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUg
d2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4K
ICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtT
dGF0dXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAg
ICAgICAgY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwg
c3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5r
U3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50LCBzcGVjaWFsaXphdGlvbktp
bmQpOworCisgICAgICAgIGludCByZWdpc3Rlck9mZnNldDsKKworICAgICAgICAvLyBJZiB3ZSBo
YXZlIGEgdmFyYXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFyZ3VtZW50cyByaWdo
dCBub3cuCisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgewor
ICAgICAgICAgICAgdW5zaWduZWQgbWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtTdGF0dXMubWF4
TnVtQXJndW1lbnRzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0
ID0gcmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rl
ck9mZnNldCAtPSBtYXhOdW1Bcmd1bWVudHM7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAt
PSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAgICAgICAgIHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAorICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgYXJndW1lbnRT
dGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlzQXJn
dW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMTsgYXJndW1lbnQgPCBtYXhOdW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKAorICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRT
dGFydCArIGFyZ3VtZW50KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJn
ZVNob3VsZE5ldmVyVW5ib3godHJ1ZSk7IC8vIFdlIGN1cnJlbnRseSBoYXZlIG5vd2hlcmUgdG8g
cHV0IHRoZSB0eXBlIGNoZWNrIG9uIHRoZSBCdWxrR2V0QnlWYWwuCisgICAgICAgICAgICAgICAg
Tm9kZSogc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8odmFyaWFi
bGUpKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNl
dE9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgQnVsa0dldEJ5VmFsRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9idWxrR2V0QnlWYWxEYXRhLmFkZCgpOworICAgICAgICAgICAgZGF0YS0+c3RhcnQgPSBW
aXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCArIDEpOworICAgICAgICAgICAgZGF0YS0+Y291
bnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENv
dW50KTsKKyAgICAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4TnVtQXJndW1lbnRzOworICAgICAg
ICAgICAgYWRkVG9HcmFwaChCdWxrR2V0QnlWYWwsIE9wSW5mbyhkYXRhKSwgZ2V0KGFyZ3VtZW50
c0FyZ3VtZW50KSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZWV0
ID0gcmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAgICAgCiAgICAgICAgIGJvb2wg
cmVzdWx0ID0gYXR0ZW1wdFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIGNhbGxUYXJnZXROb2Rl
LCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsCisgICAg
ICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0s
IHJlZ2lzdGVyT2Zmc2V0LCB0aGlzQXJndW1lbnQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcs
IHByZWRpY3Rpb24sCiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UpOwogICAgICAgICBpZiAo
IXJlc3VsdCAmJiAhY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkKQEAgLTE0MzYsMTEgKzE0ODEs
OSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gZG8g
bW9yZSBkZXRhaWxlZCBwb2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7IGFuZCBzZWNv
bmQsIGl0IHJlZHVjZXMgY29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcuIEFuZCBieSBw
b2x5dmFyaWFudCBwcm9maWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxpbmcgb2YgKnRo
aXMqIGNhbGwuIE5vdGUgdGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhhdCBhc3BlY3Qg
b2YgdGhpcyBieSBkb2luZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5nIHRoZSBwcm9m
aWxpbmcKLSAgICAvLyBhbHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhpcywgYnV0IGl0
IGNvdWxkIGJlIGludGVyZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5nIGEKLSAgICAv
LyBzZXBhcmF0ZSBub2RlIGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8vIEZJWE1FOiBJ
bnRyb2R1Y2UgdGhlIG5vdGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9maWxpbmcgbm9k
ZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDMz
Ci0gICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxl
UG9seW1vcnBoaWNDYWxsSW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAgaWYgKCFpc0ZU
TChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNDYWxs
SW5saW5pbmcoKQorICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkg
ewogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBp
bmxpbmluZyAoaGFyZCkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKQEAgLTE0ODEsNiArMTUyNCw4IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIs
IGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAogICAgIC8vIFRo
aXMgbWFrZXMgbWUgd2lzaCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGltZS4gV2UgbmVl
ZCB0byBwaWNrIGEgdmFyaWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3JlIHRoZSBjYWxs
ZWUgc28gdGhhdCBpdCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBibG9ja3Mgd2Un
cmUgYWJvdXQgdG8gY3JlYXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9pbmcgYW4gaW1t
ZWRpYXRlLXNldCBoZXJlIGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3JtZWQgYW55IHNp
ZGUgZWZmZWN0cwpAQCAtMTUyMyw3ICsxNTY4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBOb2RlKiBteUNhbGxUYXJnZXROb2RlID0gZ2V0RGly
ZWN0KGNhbGxlZVJlZyk7CiAgICAgICAgIAogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0g
YXR0ZW1wdFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3Vs
dE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAgICAg
IG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCByZWdp
c3Rlck9mZnNldCwgdGhpc0FyZ3VtZW50LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxlckxpbmtzTWFudWFsbHksIHByZWRpY3Rp
b24sCiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UpOwogICAgICAgICAKQEAgLTMxMTIsNDAg
KzMxNTcsNTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgaW50IHRoaXNSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwog
ICAgICAgICAgICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBpbnQgZmlyc3RGcmVlUmVnID0gY3VycmVudEluc3RydWN0aW9uWzVd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VS
VChpbmxpbmVDYWxsRnJhbWUoKSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFyZ3VtZW50
cywgYXJndW1lbnRzID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNS
ZWdpc3RlcigpLm9mZnNldCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7Ci0KLSAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKLQotICAgICAgICAg
ICAgdW5zaWduZWQgYXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0
ZXIgb2Zmc2V0LiBXZSBzdGFydCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAotICAg
ICAgICAgICAgLy8gdGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2Fs
bCBmcmFtZS4KLSAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyAr
IDE7Ci0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBi
ZSBwYXNzaW5nIHNvbWUgYXJndW1lbnRzLgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0g
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUg
YSBjYWxsIGZyYW1lIGhlYWRlci4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHRo
ZSBhbGlnbm1lbnQgcmlnaHQuCi0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJv
dW5kVXBUb011bHRpcGxlT2YoCi0gICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3Rl
cnMoKSwKLSAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwotCi0gICAgICAgICAgICBl
bnN1cmVMb2NhbHMoCi0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKAotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQp
KS50b0xvY2FsKCkpOworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpCisgICAgICAg
ICAgICAgICAgJiYgYXJndW1lbnRzID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5h
cmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCkKKyAg
ICAgICAgICAgICAgICAmJiAhZmlyc3RWYXJBcmdPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBhcmdDb3VudCA9IGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0
ZXIgb2Zmc2V0LiBXZSBzdGFydCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAorICAg
ICAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhl
IGNhbGwgZnJhbWUuCisgICAgICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gZmlyc3RG
cmVlUmVnICsgMTsKKyAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsg
Ly8gV2Ugd2lsbCBiZSBwYXNzaW5nIHNvbWUgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwg
cHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCisgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KKyAgICAgICAgICAgICAgICBy
ZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCisgICAgICAgICAgICAg
ICAgICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgIC1y
ZWdpc3Rlck9mZnNldCk7CisKKyAgICAgICAgICAgICAgICBlbnN1cmVMb2NhbHMoCisgICAgICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGUgYnl0ZWNvZGUgd291bGRuJ3Qg
aGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4gQnV0IHdlJ2xsIGRvIGl0IGFuZCBtYWtlIGl0Cisg
ICAgICAgICAgICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9uZSBpdC4KKyAg
ICAgICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKSwgSW1tZWRp
YXRlTmFrZWRTZXQpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAx
OyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQorICAgICAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGhhbmRsZUNhbGwoCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwg
Q2FsbCwgQ29kZUZvckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoVmlydHVhbFJl
Z2lzdGVyKGNhbGxlZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBDYWxsTGlua1N0YXR1
cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3Ms
IG1fY2FsbENvbnRleHRNYXApOworICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOworICAg
ICAgICAgICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAg
ICAgICAgICAgIC8vIEZJWE1FCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBieXRl
Y29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQg
YW5kIG1ha2UgaXQKLSAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNvZGUgaGFkIGRv
bmUgaXQuCi0gICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJbW1l
ZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsg
YXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKLSAgICAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgICAgICAgICByZXN1bHQsIENhbGwsIENvZGVGb3JD
YWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCi0gICAgICAgICAgICAgICAgY2Fs
bGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzk3NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4OCw2ICs4ODgs
NyBAQCBwdWJsaWM6CiAgICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlP
ZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zm
c2V0RGF0YTsKICAgICBCYWc8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRl
cmlhbGl6YXRpb25EYXRhOworICAgIEJhcjxDYWxsVmFyYXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NE
YXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVE
YXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29k
ZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTc5NzU2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4Myw2ICsxODMsMTYgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVt
cFRhYmxlOwogfTsKIAorc3RydWN0IENhbGxWYXJhcmdzRGF0YSB7CisgICAgaW50IGZpcnN0VmFy
QXJnT2Zmc2V0OworfTsKKworc3RydWN0IEJ1bGtHZXRCeVZhbERhdGEgeworICAgIFZpcnR1YWxS
ZWdpc3RlciBzdGFydDsgLy8gTG9jYWwgZm9yIHRoZSBmaXJzdCBlbGVtZW50LgorICAgIFZpcnR1
YWxSZWdpc3RlciBjb3VudDsgLy8gTG9jYWwgZm9yIHRoZSBjb3VudC4KKyAgICB1bnNpZ25lZCBs
aW1pdDsgLy8gTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbG9hZC4KK307CisKIC8vIFRo
aXMgdHlwZSB1c2VkIGluIHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29u
c3RydWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5
IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3Rh
bnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCkBAIC05MTEs
NiArOTIxLDM0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxX
cml0ZUJhcnJpZXI8VW5rbm93bj4qPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wg
aGFzQ2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAg
ICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIENhbGxWYXJhcmdzRGF0YSogY2FsbFZh
cmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNDYWxsVmFyYXJnc0RhdGEoKSk7
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Q2FsbFZhcmFyZ3NEYXRhKj4obV9vcEluZm8p
OworICAgIH0KKyAgICAKKyAgICBib29sIGhhc0J1bGtHZXRCeVZhbERhdGEoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gQnVsa0dldEJ5VmFsOworICAgIH0KKyAgICAKKyAgICBCdWxr
R2V0QnlWYWxEYXRhKiBidWxrR2V0QnlWYWxEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCho
YXNCdWxrR2V0QnlWYWxEYXRhKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEJ1bGtH
ZXRCeVZhbERhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzUmVzdWx0
KCkKICAgICB7CiAgICAgICAgIHJldHVybiAhIXJlc3VsdCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTc5NzU2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiAr
MTQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIHRoaXMgbXVz
dCBiZSB0aGUgZGlyZWN0bHkgc3Vic2VxdWVudCBwcm9wZXJ0eSBwdXQuIE5vdGUgdGhhdCBQdXRC
eVZhbCAqL1wKICAgICAvKiBvcGNvZGVzIHVzZSBWYXJBcmdzIGJlYXVzZSB0aGV5IG1heSBoYXZl
IHVwIHRvIDQgY2hpbGRyZW4uICovXAogICAgIG1hY3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKEJ1bGtH
ZXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFj
cm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5v
ZGVNaWdodENsb2JiZXIpIFwKICAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKFB1dEJ5VmFs
QWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNaWdodENsb2Ji
ZXIpIFwKQEAgLTIxNyw2ICsyMTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgLyogQ2FsbHMuICovXAogICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAg
bWFjcm8oQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhh
c1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKENhbGxWYXJhcmdzLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xv
YmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKENvbnN0cnVjdFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBc
CiAgICAgbWFjcm8oTmF0aXZlQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhOYXRpdmVD
b25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNzk3NTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MzM4LDkgKzQzMzgsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgo
KS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBu
b2RlLCAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1
bHRHUFIpOworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZQorICAgICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSksCisgICAgICAgICAgICAgICAg
cmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJl
Z2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsK
KyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVu
dENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAgICAgICAgIGludDMyUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQzNTQsMTIgKzQz
NjUsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCiAgICAgICAgICAgICAgICAgbV9qaXQuZ3Jh
cGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkp
OwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUKKyAgICAgICAgICAgICYmICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5raW5kKSkgewogICAgICAgICAgICAgbV9qaXQu
bW92ZSgKICAgICAgICAgICAgICAgICBJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEp
KSksCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1
bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVy
ID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50
UmVnaXN0ZXIpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAx
Nzk3NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk4Nyw4ICsxOTg3LDIyIEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBjaGVja0FyZ3VtZW50c05vdENyZWF0ZWQoKTsKIAotICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSk7Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmFkZChtX291dC5sb2FkMzJOb25OZWdhdGl2ZShw
YXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSwgbV9vdXQuY29uc3RJbnQzMigtMSkp
KTsKKyAgICAgICAgaWYgKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQor
ICAgICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZS1raW5kKSkgeworICAgICAgICAgICAgc2V0SW50MzIo
CisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigKKyAgICAgICAgICAgICAgICAgICAg
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdp
c3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsK
KyAgICAgICAgICAgIHNldEludDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmFkZCgKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihhcmd1bWVu
dENvdW50UmVnaXN0ZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigt
MSkpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3Vt
ZW50QnlWYWwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDE3OTc1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDksNyArMTQ5LDEwIEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbGwK
IAogICAgICAgICBtX2ZyYW1lLm1fY2FsbEZyYW1lID0gY2FsbEZyYW1lOwogICAgICAgICBtX2Zy
YW1lLm1faW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBtX2ZyYW1l
Lm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCk7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdp
c3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCk7CiAgICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCk7CiAgICAgICAgIG1fZnJhbWUubV9ieXRlY29k
ZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMTc5NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChPcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKE9wY29kZUlELCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgICAgIHZvaWQgY29tcGls
ZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgY29tcGlsZUxvYWRWYXJh
cmdzKEluc3RydWN0aW9uKiwgQ2FsbExpbmtJbmZvKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNh
bGxFdmFsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTc5NzU2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQCB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdz
KEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3Mo
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCiB7CiAgICAgaW50
IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICBpbnQgYXJndW1lbnRz
ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5hZGRyZXNzT2ZTdGFja0xpbWl0
KCkpLCByZWdUMSkpOwogCiAgICAgICAgIC8vIEluaXRpYWxpemUgQXJndW1lbnRDb3VudC4KLSAg
ICAgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0b3Jl
MzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOwogCiAgICAgICAg
IC8vIEluaXRpYWxpemUgJ3RoaXMnLgogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRo
aXNWYWx1ZSwgcmVnVDIpOwpAQCAtMTMwLDYgKzEzMCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZUxv
YWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgaWYgKGNhbk9wdGltaXplKQogICAgICAgICBlbmQu
bGluayh0aGlzKTsKICAgICAKKyAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAg
IGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dl
c3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRl
ZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmso
dGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBu
b3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQog
CkBAIC0xNzAsNyArMTgwLDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKElu
c3RydQogCiB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKLSAgICBp
bnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAgICBpbnQgY2FsbGVl
ID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgLyogQ2FsbGVyIGFsd2F5czoKICAg
ICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJhbWUuCkBA
IC0xODgsNyArMjAwLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2Rl
SQogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xF
TkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0
X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2Nh
bGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBjYWxsX2FuZF9jb25z
dHJ1Y3RfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MpCi0gICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhpbnN0cnVjdGlvbik7CisgICAgICAgIGNv
bXBpbGVMb2FkVmFyYXJncyhpbnN0cnVjdGlvbiwgaW5mbyk7CiAgICAgZWxzZSB7CiAgICAgICAg
IGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTIxMiw5ICsyMjQs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBzdG9y
ZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFk
ZENhbGxMaW5rSW5mbygpOwotCi0gICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewor
ICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2
YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE3OTc1NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIEFyZ3VtZW50cyog
Y3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxBcmd1bWVudHNDcmVhdGlv
bk1vZGUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3Rl
ckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoaW5saW5lQ2FsbEZyYW1lKSkpIEFy
Z3VtZW50cyhjYWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVS
ZWdpc3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoY2FsbEZyYW1lLCBpbmxp
bmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+
ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUsIG1vZGUpOwogICAgICAg
ICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KQEAgLTEyNCw3ICsxMjQsMTUgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShFeGVjU3RhdGUqKTsK
IAogICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSog
Y2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpOyB9Ci0gICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5
U2l6ZUluQnl0ZXMoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsgcmV0dXJuIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSAtIDEpOyB9CisgICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0
ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Cisg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+
cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hl
ZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpCisgICAgICAgIHJldHVy
biBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAtIDEpOworICAgIH0KICAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90KTsKICAgICBib29s
IHRyeVNldEFyZ3VtZW50KFZNJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlKTsKICAgICBKU1Zh
bHVlIHRyeUdldEFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCk7CkBAIC0zNDAsMTEgKzM0OCwxNSBA
QCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgbV9vdmVycm9k
ZUNhbGxlZSA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsKICAgICBtX2lz
U3RyaWN0TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJhbWUt
PmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKLQorICAgIAorICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgIG1f
bnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICBlbHNlCisgICAgICAgIG1f
bnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgIG1f
bnVtQXJndW1lbnRzLS07CisgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBOb3Jt
YWxBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICAKICAgICAgICAgaWYg
KG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQo
KTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1
bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpAQCAtMzYx
LDcgKzM3Myw2IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0g
ICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMTsKICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zm
c2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFs
UmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnBy
ZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEp
Lm9mZnNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
cmV2aXNpb24gMTc5NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDggQEAgdHlwZWRlZiBjb25zdCBjaGFy
KiBvcHRpb25TdHJpbmc7CiAgICAgLyogZnJvbSBzdXBlciBsb25nIGNvbXBpbGVzIHRoYXQgdGFr
ZSBhIGxvdCBvZiBtZW1vcnkuICovXAogICAgIHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ0Nh
bGxlclNpemUsIDEwMDAwKSBcCiAgICAgXAorICAgIHYodW5zaWduZWQsIG1heGltdW1WYXJhcmdz
Rm9ySW5saW5pbmcsIDEwMCkgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50
Q2FsbElubGluaW5nLCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudEJ5SWRJ
bmxpbmluZywgdHJ1ZSkgXAogICAgIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246226</attachid>
            <date>2015-02-07 16:24:13 -0800</date>
            <delta_ts>2015-02-10 14:59:06 -0800</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58652</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDE3OTc1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgQ2FsbExp
bmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgICAgICwgaGFzU2VlblNob3VsZFJlcGF0
Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2VlbkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2Fs
bFR5cGUoTm9uZSkKKyAgICAgICAgLCBtYXhOdW1Bcmd1bWVudHMoMCkKICAgICAgICAgLCBzbG93
UGF0aENvdW50KDApCiAgICAgewogICAgIH0KQEAgLTg3LDYgKzg4LDcgQEAgc3RydWN0IENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAx
OwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBj
YWxsZWVHUFIgOiA4OworICAgIHVpbnQ4X3QgbWF4TnVtQXJndW1lbnRzOyAvLyBPbmx5IHVzZWQg
Zm9yIHZhcmFyZ3MgY2FsbHMuCiAgICAgdWludDMyX3Qgc2xvd1BhdGhDb3VudDsKICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTc5NzU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDcgKzEyOSw5IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzLCBidXQgYW55dGltZSB3ZSBo
YXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQgYmVjb21lcyBpbmRpc3BlbnNhYmxlLgogICAgIFVO
VVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZyb21D
YWxsTGlua0luZm8obG9ja2VyLCBjYWxsTGlua0luZm8pOworICAgIENhbGxMaW5rU3RhdHVzIHJl
c3VsdCA9IGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAg
ICByZXN1bHQubV9tYXhOdW1Bcmd1bWVudHMgPSBjYWxsTGlua0luZm8ubWF4TnVtQXJndW1lbnRz
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKQEAgLTI5MSw2ICsyOTMsMTMgQEAgQ2FsbExpbmtT
dGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogICAgIHJldHVybiBjb21wdXRlRm9yKHBy
b2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgYmFzZWxpbmVNYXApOwogfQog
Cit2b2lkIENhbGxMaW5rU3RhdHVzOjpzZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFu
dCB2YXJpYW50KQoreworICAgIG1fdmFyaWFudHMgPSBDYWxsVmFyaWFudExpc3R7IHZhcmlhbnQg
fTsKKyAgICBtX2NvdWxkVGFrZVNsb3dQYXRoID0gZmFsc2U7CisgICAgbV9pc1Byb3ZlZCA9IHRy
dWU7Cit9CisKIGJvb2wgQ2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb25zdAogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2
aXNpb24gMTc5NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAotICAgIENhbGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJv
dmVkKQotICAgIHsKLSAgICAgICAgbV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRl
Rm9yKAogICAgICAgICBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBD
YWxsTGlua0luZm9NYXAmKTsKIApAQCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9y
aWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAor
ICAgIHZvaWQgc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9j
b3VsZFRha2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWlzU2V0KCk7IH0KQEAgLTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVl
IGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIAorICAgIGJvb2wgbWF4TnVtQXJndW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhOdW1Bcmd1bWVudHM7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CkBAIC0xMzcsNiArMTM1LDcgQEAgcHJp
dmF0ZToKICAgICBDYWxsVmFyaWFudExpc3QgbV92YXJpYW50czsKICAgICBib29sIG1fY291bGRU
YWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lzUHJvdmVkOworICAgIHVuc2lnbmVkIG1fbWF4TnVt
QXJndW1lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE3OTc1NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMSw2ICsxMjEsOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtp
bmQgewogICAgICAgICBDYWxsLAogICAgICAgICBDb25zdHJ1Y3QsCisgICAgICAgIENhbGxWYXJh
cmdzLAorICAgICAgICBDb25zdHJ1Y3RWYXJhcmdzLAogICAgICAgICAKICAgICAgICAgLy8gRm9y
IHRoZXNlLCB0aGUgc3RhY2tPZmZzZXQgaW5jb3Jwb3JhdGVzIHRoZSBhcmd1bWVudCBjb3VudCBw
bHVzIHRoZSB0cnVlIHJldHVybiBQQwogICAgICAgICAvLyBzbG90LgpAQCAtMTQwLDI1ICsxNDIs
MzkgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgICAgIHJldHVybiBDYWxsOwogICAg
IH0KICAgICAKKyAgICBzdGF0aWMgS2luZCB2YXJhcmdzS2luZEZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgIHJldHVybiBDYWxsVmFyYXJnczsKKyAgICAgICAg
Y2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdFZhcmFy
Z3M7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIENhbGw7CisgICAgfQorICAgIAogICAgIHN0YXRpYyBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZEZvcihLaW5kIGtpbmQpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENhbGxW
YXJhcmdzOgogICAgICAgICBjYXNlIEdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgU2V0dGVyQ2Fs
bDoKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiBD
b2RlRm9yQ29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICB9CiAgICAgCi0gICAg
c3RhdGljIGJvb2wgaXNOb3JtYWxDYWxsKEtpbmQga2luZCkKKyAgICBzdGF0aWMgYm9vbCBpc1Zh
cmFyZ3MoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAg
IGNhc2UgQ2FsbDoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTcxLDEwICsxODcsMTEgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9yaWdp
biBjYWxsZXI7CiAgICAgQml0VmVjdG9yIGNhcHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUg
bWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFibGUgbnVtYmVyaW5nLgogCi0gICAgc2lnbmVkIHN0
YWNrT2Zmc2V0IDogMjk7Ci0gICAgdW5zaWduZWQga2luZCA6IDI7IC8vIHJlYWwgdHlwZSBpcyBL
aW5kCisgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CisgICAgdW5zaWduZWQga2luZCA6IDM7
IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYg
ZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRo
ZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJl
IHJlY292ZXJlZCBtYW51YWxseS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0
ZXI7IC8vIFRoaXMgaXMgb25seSBzZXQgaWYgdGhlIGNvZGUgdXNlcyBhcmd1bWVudHMuIFRoZSB1
bm1vZGlmaWVkIGFyZ3VtZW50cyByZWdpc3RlciBmb2xsb3dzIHRoZSB1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoKSBjb252ZW50aW9uIChzZWUgQ29kZUJsb2NrLmgpLgorICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7IC8vIE9ubHkgc2V0IHdoZW4gd2UgaW5saW5l
IGEgdmFyYXJncyBjYWxsLgogICAgIAogICAgIC8vIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG5v
dGlvbiBvZiBhICJkZWZhdWx0IiBzZXQgb2YgdmFsdWVzIGZvcgogICAgIC8vIElubGluZUNhbGxG
cmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNv
bmZ1c2lvbiBpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5NzU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsOCArMjAzLDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1l
bnQ6Ci0gICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJl
ZW4gc2V0LgotICAgICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRo
YXQgc29tZW9uZSBzZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFu
ZCwgYW5kIGN1cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAg
Ly8gbm9uLWNsZWFyIHZhbHVlLgorICAgICAgICBBU1NFUlQobV9zdGF0ZS52YXJpYWJsZXMoKS5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0xMzE1LDcgKzEzMTcsOCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMg
YSBiaXQuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50
IGZvbGRpbmcKICAgICAgICAgLy8gb2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0
TXlBcmd1bWVudHNMZW5ndGggaXMgYSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KICAgICAgICAgLy8g
V2UgcGVyZm9ybSBmdXJ0aGVyIG9wdGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAg
ICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAg
aWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYm
ICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lLT5raW5kKSkgewogICAgICAgICAgICAgc2V0Q29uc3RhbnQoCiAgICAgICAgICAg
ICAgICAgbm9kZSwganNOdW1iZXIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xv
YmJlcih0cnVlKTsgLy8gUHJldGVuZCB0aGF0IHdlIGNsb2JiZXJlZCB0byBwcmV2ZW50IGNvbnN0
YW50IGZvbGRpbmcuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3
OTc1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUtPmtpbmQpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlz
IHdpbGwgcmV0dXJuLiBCdXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhhdCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNzk3NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDE0ICsxODEsMTUgQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIENhbGxMaW5rU3RhdHVzKTsKICAgICB2b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9k
ZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6
ZSwgaW50IGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwogICAgIHZv
aWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKKyAgICB2b2lkIGhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywg
Tm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHZvaWQgZW1pdEZ1bmN0
aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHZvaWQgdW5kb0Z1bmN0aW9uQ2hlY2tz
KENhbGxWYXJpYW50KTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21zKGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7IC8vIFJldHVy
biBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmluZyBjYW5kaWRhdGUuIEJ5IGNvbnZlbnRp
b24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4KICAgICAvLyBIYW5kbGUgaW5saW5pbmcu
IFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBh
IGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50
IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5v
ZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBp
bnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBlbnVtIENh
bGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIENhbGxlckxpbmtzTWFu
dWFsbHkgfTsKLSAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGlu
ZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpOworICAgIGJvb2wgYXR0ZW1wdFRvSW5s
aW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJp
YW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSk7CiAgICAgdm9pZCBpbmxpbmVDYWxsKE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCBy
ZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBu
ZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5KTsKICAg
ICB2b2lkIGNhbmNlbExpbmtpbmdGb3JCbG9jayhJbmxpbmVTdGFja0VudHJ5KiwgQmFzaWNCbG9j
ayopOyAvLyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdpdmVuIGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0
byBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5saW5lIHN0YWNrIGVudHJ5LgogICAgIC8vIEhh
bmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZh
bHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgpAQCAtNjkwLDcgKzY5MSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBvcCwgb3BJbmZvLCBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9m
ZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVz
dWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOworICAgICAgICAgICAgc2V0KHJlc3VsdFJl
ZywgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKQEAgLTEwNDIsNyAr
MTA0Myw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgQVNTRVJUKHJl
Z2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIAogICAgIGlmIChjYWxsVGFyZ2V0LT5oYXNDb25zdGFu
dCgpKQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKGNhbGxUYXJnZXQt
PmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKKyAgICAgICAgY2FsbExpbmtTdGF0dXMu
c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoY2FsbFRhcmdldC0+YXNKU1ZhbHVlKCkpOwogICAgIAog
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCiAgICAgICAgIGRh
dGFMb2coIiAgICBIYW5kbGluZyBjYWxsIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIs
IGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKQEAgLTEwNTksNyArMTA2MCw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgCiAgICAgT3BJbmZvIGNhbGxPcEluZm87CiAgICAg
Ci0gICAgaWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0
dXMsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNl
dCwgb3AsIGtpbmQsIHByZWRpY3Rpb24pKSB7CisgICAgaWYgKGhhbmRsZUlubGluaW5nKGNhbGxU
YXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zmc2V0LCB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCksIFZpcnR1YWxSZWdpc3RlcigpLCAw
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwgb3AsIGtpbmQsIHByZWRp
Y3Rpb24pKSB7CiAgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCiAgICAgICAgICAg
ICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRDYWxsKCk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTEwODcsMTEgKzEwODgsNDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q2FsbCgKICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxPcEluZm8sIGNhbGxUYXJnZXQsIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiB9
CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBj
YWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwo
SW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCkKK3sK
KyAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpID09IE9QQ09ERV9MRU5H
VEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpKTsKKyAgICAKKyAgICBpbnQgcmVzdWx0ID0gcGNbMV0u
dS5vcGVyYW5kOworICAgIGludCBjYWxsZWUgPSBwY1syXS51Lm9wZXJhbmQ7CisgICAgaW50IHRo
aXNSZWcgPSBwY1szXS51Lm9wZXJhbmQ7CisgICAgaW50IGFyZ3VtZW50cyA9IHBjWzRdLnUub3Bl
cmFuZDsKKyAgICBpbnQgZmlyc3RGcmVlUmVnID0gcGNbNV0udS5vcGVyYW5kOworICAgIGludCBm
aXJzdFZhckFyZ09mZnNldCA9IHBjWzZdLnUub3BlcmFuZDsKKyAgICAKKyAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOworICAgIAorICAgIE5vZGUqIGNhbGxU
YXJnZXQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZSkpOworICAgIAorICAgIENhbGxMaW5r
U3RhdHVzIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4o
KSwKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsTGlua0luZm9zLCBtX2NhbGxDb250
ZXh0TWFwKTsKKyAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgY2Fs
bExpbmtTdGF0dXMuc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoY2FsbFRhcmdldC0+YXNKU1ZhbHVl
KCkpOworICAgIAorICAgIGlmIChjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpCisgICAgICAg
ICYmIGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIGZp
cnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpLCBWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzKSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5lQ2FsbEZyYW1lOjp2YXJhcmdzS2luZEZv
cihraW5kKSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24o
KSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEqIGRh
dGEgPSBtX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsKKyAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNl
dCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgIAorICAgIE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBo
KG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgY2FsbFRhcmdldCwgZ2V0KHRo
aXNSZWcpLCBnZXQoYXJndW1lbnRzKSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhy
ZXN1bHQpOworICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQorICAgICAgICBzZXQocmVzdWx0
UmVnLCBjYWxsKTsKK30KKwordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tz
KENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHRo
aXNBcmd1bWVudFJlZywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIE5vZGUq
IHRoaXNBcmd1bWVudDsKLSAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgdGhp
c0FyZ3VtZW50ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zm
c2V0KSk7CisgICAgaWYgKHRoaXNBcmd1bWVudFJlZy5pc1ZhbGlkKCkpCisgICAgICAgIHRoaXNB
cmd1bWVudCA9IGdldCh0aGlzQXJndW1lbnRSZWcpOyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgZWxzZQogICAgICAgICB0aGlzQXJndW1lbnQgPSAw
OwogCkBAIC0xMzU1LDcgKzEzOTMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpjYW5jZWxMaW5r
aW5nRm9yQmxvCiAgICAgfQogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9Jbmxp
bmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlh
bnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENh
bGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0
ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQs
IENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5l
eHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBDYWxsZXJMaW5rYWJpbGl0eSBj
YWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlu
bGluaW5nQmFsYW5jZSkKIHsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0
aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwog
ICAgIApAQCAtMTM5Miw3ICsxNDMwLDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRU
b0lubGluZUNhbGwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBj
b25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdpc3Rlck9mZnNldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2Rl
VHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCisgICAgTm9k
ZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1
cyYgY2FsbExpbmtTdGF0dXMsCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWcs
IFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywKKyAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3As
IElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQog
ewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIGlubGluaW5n
Li4uXG4iKTsKQEAgLTE0MDYsNiArMTQ0OCwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCisgICAg
aWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpCisgICAgICAgICYmIGNhbGxMaW5r
U3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9uczo6bWF4aW11bVZhcmFyZ3NGb3JJbmxp
bmluZygpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQmFp
bGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZhcmFyZ3MuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAgICAgCiAgICAgdW5zaWduZWQgaW5saW5pbmdCYWxhbmNlID0gT3B0
aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291
bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5kID09IENvZGVGb3JDb25zdHJ1Y3QpCiAg
ICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0ZDo6bWluKGlubGluaW5nQmFsYW5jZSwgT3B0aW9u
czo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25D
b3VudCgpKTsKQEAgLTE0MTYsMTAgKzE0NjUsNTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNpbXBsaWZpY2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRo
aXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGltZXMsIGJ1dCB3ZSBjYW4gb25seSBsZXZlcmFnZQog
ICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cgZGlh
bW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4KICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxk
VGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtTdGF0dXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAg
ZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAgICAgICAgY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxU
YXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAg
ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgdGhp
c0FyZ3VtZW50LCBzcGVjaWFsaXphdGlvbktpbmQpOworCisgICAgICAgIGludCByZWdpc3Rlck9m
ZnNldDsKKworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdmFyYXJncyBjYWxsLCB3ZSB3YW50IHRv
IGV4dHJhY3QgdGhlIGFyZ3VtZW50cyByaWdodCBub3cuCisgICAgICAgIGlmIChJbmxpbmVDYWxs
RnJhbWU6OmlzVmFyYXJncyhraW5kKSkgeworICAgICAgICAgICAgdW5zaWduZWQgbWF4TnVtQXJn
dW1lbnRzID0gY2FsbExpbmtTdGF0dXMubWF4TnVtQXJndW1lbnRzKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJl
ZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBtYXhOdW1Bcmd1bWVudHM7Cisg
ICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OworICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KAorICAgICAgICAgICAgICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAg
ICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW5zdXJl
TG9jYWxzKAorICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBCdWxrR2V0QnlWYWxEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2J1bGtHZXRC
eVZhbERhdGEuYWRkKCk7CisgICAgICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudFN0YXJ0ICsgMSk7CisgICAgICAgICAgICBkYXRhLT5jb3VudCA9IFZpcnR1YWxS
ZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAg
ICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OworICAgICAgICAgICAgZGF0YS0+
bGltaXQgPSBtYXhOdW1Bcmd1bWVudHM7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJ1bGtHZXRC
eVZhbCwgT3BJbmZvKGRhdGEpLCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gSW4gREZHIElSIGJlZm9yZSBTU0EsIHdlIGNhbm5vdCBpbnNlcnQg
Y29udHJvbCBmbG93IGJldHdlZW4gYWZ0ZXIgdGhlCisgICAgICAgICAgICAvLyBCdWxrR2V0QnlW
YWwgYW5kIHRoZSBsYXN0IFNldEFyZ3VtZW50LiBUaGlzIGlzbid0IGEgcHJvYmxlbSBvbmNlIHdl
IGdldCB0byBERkcKKyAgICAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2
ZSBvdGhlciByZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdworICAgICAgICAg
ICAgLy8gYmVmb3JlIFNTQS4KKworICAgICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdp
c3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhpc0FyZ3VtZW50KSwgSW1t
ZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7
IGFyZ3VtZW50IDwgbWF4TnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgK
KyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQgKyBhcmd1
bWVudCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VTaG91bGROZXZl
clVuYm94KHRydWUpOyAvLyBXZSBjdXJyZW50bHkgaGF2ZSBub3doZXJlIHRvIHB1dCB0aGUgdHlw
ZSBjaGVjayBvbiB0aGUgQnVsa0dldEJ5VmFsLiBXZSBjb3VsZCBmaXggdGhpcyBieSBoYXZpbmcg
U2V0QXJndW1lbnQgZG8gdGhlIGFyZ3VtZW50IGNoZWNrcy4KKyAgICAgICAgICAgICAgICBOb2Rl
KiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkp
OworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZWV0ID0g
cmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgcmVz
dWx0ID0gYXR0ZW1wdFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCBy
ZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAg
ICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJl
Z2lzdGVyT2Zmc2V0LCB0aGlzQXJndW1lbnQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIHBy
ZWRpY3Rpb24sCiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UpOwogICAgICAgICBpZiAoIXJl
c3VsdCAmJiAhY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkKQEAgLTE0MzYsMTEgKzE1MjYsOSBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gZG8gbW9y
ZSBkZXRhaWxlZCBwb2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7IGFuZCBzZWNvbmQs
IGl0IHJlZHVjZXMgY29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcuIEFuZCBieSBwb2x5
dmFyaWFudCBwcm9maWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxpbmcgb2YgKnRoaXMq
IGNhbGwuIE5vdGUgdGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhhdCBhc3BlY3Qgb2Yg
dGhpcyBieSBkb2luZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5nIHRoZSBwcm9maWxp
bmcKLSAgICAvLyBhbHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhpcywgYnV0IGl0IGNv
dWxkIGJlIGludGVyZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5nIGEKLSAgICAvLyBz
ZXBhcmF0ZSBub2RlIGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8vIEZJWE1FOiBJbnRy
b2R1Y2UgdGhlIG5vdGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9maWxpbmcgbm9kZS4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDMzCi0g
ICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9s
eW1vcnBoaWNDYWxsSW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAgaWYgKCFpc0ZUTCht
X2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5s
aW5pbmcoKQorICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgewog
ICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxp
bmluZyAoaGFyZCkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50
Q29kZU9yaWdpbigpLCAiXG4iKTsKQEAgLTE0ODEsNiArMTU2OSw4IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1
cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAogICAgIC8vIFRoaXMg
bWFrZXMgbWUgd2lzaCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGltZS4gV2UgbmVlZCB0
byBwaWNrIGEgdmFyaWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3JlIHRoZSBjYWxsZWUg
c28gdGhhdCBpdCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBibG9ja3Mgd2UncmUg
YWJvdXQgdG8gY3JlYXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9pbmcgYW4gaW1tZWRp
YXRlLXNldCBoZXJlIGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3JtZWQgYW55IHNpZGUg
ZWZmZWN0cwpAQCAtMTUyMyw3ICsxNjEzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW5saW5pbmcoTm9kZQogICAgICAgICBOb2RlKiBteUNhbGxUYXJnZXROb2RlID0gZ2V0RGlyZWN0
KGNhbGxlZVJlZyk7CiAgICAgICAgIAogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0
ZW1wdFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9w
ZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAgICAgIG15
Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rl
ck9mZnNldCwgdGhpc0FyZ3VtZW50LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxlckxpbmtzTWFudWFsbHksIHByZWRpY3Rpb24s
CiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UpOwogICAgICAgICAKQEAgLTMxMTIsNDMgKzMy
MDIsNTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgaW50IHRoaXNSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAg
ICAgICAgICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7
CiAgICAgICAgICAgICBpbnQgZmlyc3RGcmVlUmVnID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGN1cnJlbnRJbnN0
cnVjdGlvbls2XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChp
bmxpbmVDYWxsRnJhbWUoKSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFyZ3VtZW50cywg
YXJndW1lbnRzID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdp
c3RlcigpLm9mZnNldCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7Ci0KLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKLQotICAgICAgICAgICAg
dW5zaWduZWQgYXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIg
b2Zmc2V0LiBXZSBzdGFydCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAotICAgICAg
ICAgICAgLy8gdGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBm
cmFtZS4KLSAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7
Ci0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBw
YXNzaW5nIHNvbWUgYXJndW1lbnRzLgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBj
YWxsIGZyYW1lIGhlYWRlci4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHRoZSBh
bGlnbm1lbnQgcmlnaHQuCi0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJvdW5k
VXBUb011bHRpcGxlT2YoCi0gICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwKLSAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwotCi0gICAgICAgICAgICBlbnN1
cmVMb2NhbHMoCi0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KAotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50
b0xvY2FsKCkpOworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpCisgICAgICAgICAg
ICAgICAgJiYgYXJndW1lbnRzID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1
bWVudHNSZWdpc3RlcigpLm9mZnNldCgpCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCkKKyAgICAg
ICAgICAgICAgICAmJiAhZmlyc3RWYXJBcmdPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBhcmdDb3VudCA9IGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIg
b2Zmc2V0LiBXZSBzdGFydCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAorICAgICAg
ICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhlIGNh
bGwgZnJhbWUuCisgICAgICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gZmlyc3RGcmVl
UmVnICsgMTsKKyAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8g
V2Ugd2lsbCBiZSBwYXNzaW5nIHNvbWUgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgIHJlZ2lz
dGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwgcHJl
dGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KKyAgICAgICAgICAgICAgICByZWdp
c3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCisgICAgICAgICAgICAgICAg
ICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgIC1yZWdp
c3Rlck9mZnNldCk7CisKKyAgICAgICAgICAgICAgICBlbnN1cmVMb2NhbHMoCisgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGUgYnl0ZWNvZGUgd291bGRuJ3QgaGF2
ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4gQnV0IHdlJ2xsIGRvIGl0IGFuZCBtYWtlIGl0CisgICAg
ICAgICAgICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9uZSBpdC4KKyAgICAg
ICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
bmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKSwgSW1tZWRpYXRl
TmFrZWRTZXQpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBh
cmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQorICAgICAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGhhbmRsZUNhbGwoCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgQ2Fs
bCwgQ29kZUZvckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1
cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2UgaXQKLSAgICAgICAgICAg
IC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNvZGUgaGFkIGRvbmUgaXQuCi0gICAgICAgICAgICBpbnQg
bmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJT
aXplOwotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdl
dChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKyth
cmd1bWVudCkKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3Rl
cisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0
ZU5ha2VkU2V0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxlQ2FsbCgKLSAgICAg
ICAgICAgICAgICByZXN1bHQsIENhbGwsIENvZGVGb3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2Nh
bGxfdmFyYXJncyksCi0gICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJP
ZmZzZXQpOworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9u
LCBDYWxsVmFyYXJncywgQ29kZUZvckNhbGwpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Y2FsbF92YXJhcmdzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0VmFyYXJncywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgogICAgICAgICAgICAgLy8gU3Rh
dGljYWxseSBzcGVjdWxhdGUgZm9yIG5vdy4gSXQgbWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1bGF0
ZS1vbmx5IGpuZXFfcHRyCiAgICAgICAgICAgICAvLyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3aGls
ZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUgZ2VuZXJhbCwgc2luY2UgaXQncwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc5
NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4Miw2ICsxODIsOCBAQCBDYXBhYmlsaXR5
TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF90aHJvd19zdGF0aWNf
ZXJyb3I6CiAgICAgY2FzZSBvcF9jYWxsOgogICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgIGNh
c2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAg
Y2FzZSBvcF9pbml0X2xhenlfcmVnOgogICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czoKICAg
ICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czoKQEAgLTIyMywxNCArMjI1LDYgQEAgQ2FwYWJp
bGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgICAgICByZXR1cm4gQ2FuQ29t
cGlsZUFuZElubGluZTsKICAgICB9CiAKLSAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICAg
ICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYmIHBjWzRdLnUub3BlcmFuZCA9PSBj
b2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKLSAgICAgICAgICAgICYmICFw
Y1s2XS51Lm9wZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSB0aGlzLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI2Ci0gICAgICAgIHJldHVybiBDYW5ub3RD
b21waWxlOwotCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiAKICAgICBjYXNlIG9wX2NyZWF0ZV9s
ZXhpY2FsX2Vudmlyb25tZW50OgogICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDE3OTc1NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOCArODYsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxl
dmVsIGZ1bmN0aW9uQ2FwYWJpbGl0CiAgICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2Fu
Q29tcGlsZUFuZElubGluZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwogICAgIGlmIChtaWdo
dENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQogICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5k
KENhbkNvbXBpbGUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKLSAgICBpZiAoIW1pZ2h0Q29t
cGlsZSAmJiBtaWdodElubGluZSkKLSAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5J
bmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKICAgICBpZiAoIW1pZ2h0Q29tcGlsZSAm
JiAhbWlnaHRJbmxpbmUpCiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTc5NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw2ICs0MDEsMTMg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5s
b2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCisgICAgY2FzZSBCdWxrR2V0QnlWYWw6CisgICAgICAgIC8vIFRoaXMgYWN0dWFsbHkgd3Jp
dGVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBpdCByZWFkcyB0aGUgYXJy
YXksIGl0IGRvZXMKKyAgICAgICAgLy8gc28gaW4gYSB3YXkgdGhhdCBtYXkgdHJpZ2dlciBnZXR0
ZXJzIG9yIHZhcmlvdXMgdHJhcHMuCisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0
ZShXb3JsZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5s
aW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5NzU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5Miw3ICsyOTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0g
Q2FwYWJpbGl0eUxldmVsIHsKICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwKICAg
ICBDYW5Db21waWxlLAogICAgIENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxl
dmVsTm90U2V0CkBAIC0zMTIsNyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBh
YmlsaXR5TGV2ZWwgbAogaW5saW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZl
bCkKIHsKICAgICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2Fz
ZSBDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0
OgpAQCAtMzI1LDE0ICszMjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJC
b3VuZChDCiAgICAgc3dpdGNoIChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAg
ICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dp
dGNoIChiKSB7Ci0gICAgICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBp
bGVBbmRJbmxpbmU6Ci0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBj
YXNlIENhbkNvbXBpbGU6CiAgICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNv
bXBpbGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
Nzk3NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg4OCw2ICs4ODgsNyBAQCBwdWJsaWM6CiAgICAgQmFnPE11bHRpR2V0QnlPZmZz
ZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1dEJ5T2Zmc2V0
RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8T2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOworICAgIEJhcjxDYWxsVmFyYXJn
c0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEs
IDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1
bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAg
IGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gMTc5NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMTkgQEAgc3RydWN0IFN3aXRjaERhdGEg
ewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IENhbGxWYXJhcmdzRGF0
YSB7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0OworfTsKKworc3RydWN0IEJ1bGtHZXRCeVZh
bERhdGEgeworICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydDsgLy8gTG9jYWwgZm9yIHRoZSBmaXJz
dCBlbGVtZW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBjb3VudDsgLy8gTG9jYWwgZm9yIHRoZSBj
b3VudC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVN0YXJ0OworICAgIFZpcnR1YWxSZWdp
c3RlciBtYWNoaW5lQ291bnQ7CisgICAgdW5zaWduZWQgb2Zmc2V0OyAvLyBXaGljaCBhcnJheSBl
bGVtZW50IHRvIHN0YXJ0IHdpdGguIFVzdWFsbHkgdGhpcyBpcyAwLgorICAgIHVuc2lnbmVkIGxp
bWl0OyAvLyBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0byBsb2FkLgorfTsKKwogLy8gVGhp
cyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25z
dHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkg
YW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAogLy8gYSBjb25zdGFu
dCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAgLTkxMSw2
ICs5MjQsMzQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdy
aXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBo
YXNDYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAg
ICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBjYWxsVmFy
YXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0NhbGxWYXJhcmdzRGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxDYWxsVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7
CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzQnVsa0dldEJ5VmFsRGF0YSgpCisgICAgeworICAg
ICAgICByZXR1cm4gb3AoKSA9PSBCdWxrR2V0QnlWYWw7CisgICAgfQorICAgIAorICAgIEJ1bGtH
ZXRCeVZhbERhdGEqIGJ1bGtHZXRCeVZhbERhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhh
c0J1bGtHZXRCeVZhbERhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QnVsa0dl
dEJ5VmFsRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNSZXN1bHQo
KQogICAgIHsKICAgICAgICAgcmV0dXJuICEhcmVzdWx0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzk3NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsx
NDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogdGhpcyBtdXN0
IGJlIHRoZSBkaXJlY3RseSBzdWJzZXF1ZW50IHByb3BlcnR5IHB1dC4gTm90ZSB0aGF0IFB1dEJ5
VmFsICovXAogICAgIC8qIG9wY29kZXMgdXNlIFZhckFyZ3MgYmVhdXNlIHRoZXkgbWF5IGhhdmUg
dXAgdG8gNCBjaGlsZHJlbi4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oQnVsa0dl
dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNy
byhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9k
ZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUhhc1ZhckFyZ3MgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxB
bGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU1pZ2h0Q2xvYmJl
cikgXApAQCAtMjE3LDYgKzIxOCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICAvKiBDYWxscy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBt
YWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFz
VmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oQ2FsbFZhcmFyZ3MsIE5v
ZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAg
IG1hY3JvKENvbnN0cnVjdFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxk
KSBcCiAgICAgbWFjcm8oTmF0aXZlQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTc5NzU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAg
Y2FzZSBCdWxrR2V0QnlWYWw6IHsKKyAgICAgICAgQnVsa0dldEJ5VmFsRGF0YSogZGF0YSA9IG5v
ZGUtPmJ1bGtHZXRCeVZhbERhdGEoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChkYXRhLT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRB
dChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBsaW1pdDsgaS0tOykgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQor
ICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZp
cnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3OTc1NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCB3
cml0ZVRvcCgpCiAgICAgeworICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IEJ1bGtHZXRCeVZh
bCkgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIG5vdGUgdGhlIHdyaXRlcyB0byB0aGUg
bG9jYWxzIHRoYXQgd2lsbCBzdG9yZSB0aGUgYXJyYXkgZWxlbWVudHMgYW5kCisgICAgICAgICAg
ICAvLyBjb3VudC4KKyAgICAgICAgICAgIEJ1bGtHZXRCeVZhbERhdGEqIGRhdGEgPSBtX25vZGUt
PmJ1bGtHZXRCeVZhbERhdGEoKTsKKyAgICAgICAgICAgIG1fd3JpdGUoZGF0YS0+Y291bnQpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAg
ICAgICAgICAgbV93cml0ZShWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBp
KSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLm1fY29kZUJsb2Nr
LT51c2VzQXJndW1lbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3Jh
cGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCiAgICAgICAgICAgICAg
ICAgbV93cml0ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDE3OTc1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMzgsOSArNDMzOCwyMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBERkdfQVNTRVJUKG1faml0
LmdyYXBoKCksIG5vZGUsICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsK
LSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Mo
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+a2luZCkpIHsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSwKKyAgICAg
ICAgICAgICAgICByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1
bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lz
dGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2Fk
Rm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KICAgICAgICAg
aW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
NDM1NCwxMiArNDM2NSwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAgICAg
ICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdz
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7CiAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKAogICAgICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpIC0gMSkpKSwKICAgICAgICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENv
dW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lz
dGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFy
Z3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNzk3NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
YWNrTGF5b3V0UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgQml0VmVjdG9yIHVzZWRMb2NhbHM7CiAgICAgICAgIAogICAgICAgICAvLyBD
b2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCi0gICAgICAgIGJv
b2wgaGFzR2V0TG9jYWxVbmxpbmtlZCA9IGZhbHNlOworICAgICAgICBib29sIGhhc05vZGVzVGhh
dE5lZWRGaXh1cCA9IGZhbHNlOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlm
ICghYmxvY2spCkBAIC04MSw3ICs4MSwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChvcGVyYW5kLnRvTG9jYWwoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGhhc0dldExvY2FsVW5saW5rZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgQnVsa0dldEJ5VmFsOiB7CisgICAgICAgICAgICAgICAgICAg
IEJ1bGtHZXRCeVZhbERhdGEqIGRhdGEgPSBub2RlLT5idWxrR2V0QnlWYWxEYXRhKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBv
ZiBzdGFjayBsYXlvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgor
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFy
dC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+
c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB9IC8v
IHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KKyAgICAgICAgICAgICAgICAgICAgaGFz
Tm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTE0OCw0MiArMTYzLDM2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01B
WCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAg
ICAgICAgICAgICAgYWxsb2NhdGlvblt2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCldKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2
YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChjb2Rl
QmxvY2soKS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRzUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAg
ICAgICBhbGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpLnRvTG9jYWwo
KV0pOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0KKyAg
ICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFyZ3VtZW50c1Jl
Z2lzdGVyKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblsKLSAgICAgICAgICAgICAgICAgICAg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLnRvTG9jYWwoKV0pCisgICAgICAgICAgICAg
ICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2RlQmxv
Y2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICBjb2Rl
QmxvY2soKS0+c2V0QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCktPnVuY2hlY2tlZEFjdGl2YXRp
b25SZWdpc3RlcigpLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldEFj
dGl2YXRpb25SZWdpc3RlcigKLSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChhbGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS50b0xvY2FsKCld
KSk7CisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5hY3Rp
dmF0aW9uUmVnaXN0ZXIoKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoY29k
ZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHNjb3BlUmVnaXN0ZXJBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltjb2RlQmxvY2soKS0+c2Nv
cGVSZWdpc3RlcigpLnRvTG9jYWwoKV07Ci0gICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2Nv
cGVSZWdpc3RlcihzY29wZVJlZ2lzdGVyQWxsb2NhdGlvbiA9PSBVSU5UX01BWCA/IFZpcnR1YWxS
ZWdpc3RlcigpIDogdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoc2NvcGVSZWdpc3RlckFsbG9jYXRp
b24pKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIo
KS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihh
c3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkpOwogCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGEuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICBJbmxpbmVWYXJpYWJsZURhdGEgZGF0YSA9IG1fZ3JhcGgu
bV9pbmxpbmVWYXJpYWJsZURhdGFbaV07CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLT51c2VzQXJndW1lbnRzKCkp
IHsKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25b
bV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpLnRvTG9jYWwoKV0p
OworICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSBh
c3NpZ24oCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIG1fZ3JhcGguYXJndW1lbnRz
UmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCgKLSAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxs
b2NhdGlvblt1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpLnRvTG9j
YWwoKV0pCisgICAgICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxs
RnJhbWUpKSkKICAgICAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lz
dGVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtMjI5LDkgKzIzOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCkpOwogICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBzeW1ib2xUYWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgaS0tOykgewogICAg
ICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldID0gc2xvd0FyZ3VtZW50c1tpXTsK
LSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IFZpcnR1YWxSZWdpc3Rl
cihzbG93QXJndW1lbnRzW2ldLmluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZy5p
c0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmlu
ZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltyZWcudG9Mb2NhbCgpXSku
b2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXgg
PSBhc3NpZ24oYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKHNsb3dBcmd1bWV0c1tpXS5pbmRl
eCkpLm9mZnNldCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKG5ld1Nsb3dBcmd1bWVu
dHMpOwpAQCAtMjM5LDcgKzI0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gRml4IEdldExvY2FsVW5saW5rZWQncyB2YXJpYWJsZSByZWZlcmVuY2VzLgotICAg
ICAgICBpZiAoaGFzR2V0TG9jYWxVbmxpbmtlZCkgeworICAgICAgICBpZiAoaGFzTm9kZXNUaGF0
TmVlZEZpeHVwKSB7CiAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
Z3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFibG9jaykKQEAgLTI0OCwxMCArMjU1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IG5vZGUtPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltvcGVyYW5kLnRvTG9j
YWwoKV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5l
TG9jYWwob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtl
ZE1hY2hpbmVMb2NhbChhc3NpZ24oYWxsb2NhdGlvbiwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgQnVsa0dl
dEJ5VmFsOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBCdWxrR2V0QnlWYWxEYXRhKiBkYXRh
ID0gbm9kZS0+YnVsa0dldEJ5VmFsRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9u
LCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yNjQsNiArMjc1LDIw
IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworcHJp
dmF0ZToKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4m
IGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMpCisgICAgeworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gc3JjOworICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgewor
ICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9M
b2NhbCgpXTsKKyAgICAgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxv
Y2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIH07CiAK
IGJvb2wgcGVyZm9ybVN0YWNrTGF5b3V0KEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3OTc1NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMTksNiArMTE5LDkgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKICAgICBj
YXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAg
ICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBCdWxrR2V0QnlWYWw6CiAgICAgY2Fz
ZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgVmFsdWVU
b0ludDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE3OTc1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTg3LDggKzE5ODcs
MjIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGNoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCgp
OwogCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhbV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQuYWRkKG1f
b3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
LCBtX291dC5jb25zdEludDMyKC0xKSkpOworICAgICAgICBpZiAobV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhSW5saW5lQ2FsbEZyYW1lOjpp
c1ZhcmFyZ3MobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLWtpbmQpKSB7
CisgICAgICAgICAgICBzZXRJbnQzMigKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMy
KAorICAgICAgICAgICAgICAgICAgICBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAg
aWYgKCFtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50
Q291bnRSZWdpc3RlciA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAg
ICAgICAgbV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdh
dGl2ZShwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlcikpLAorICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKC0xKSkpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkocmV2aXNpb24gMTc5
NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksMTAgQEAgdm9pZCBTdGFja1Zpc2l0b3I6
OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbAogCiAgICAgICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBj
YWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxs
RnJhbWU7Ci0gICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG1fZnJh
bWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAgICAgbV9mcmFt
ZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKTsKICAg
ICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTc5NzU2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NjQsMTEgKzQ2NCw2IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkK
ICAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3No
b3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBERkc6
OkNhbklubGluZToKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBt
X2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91bGRFbWl0UHJv
ZmlsaW5nID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6
CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRp
bWl6ZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNzk3
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTYsNyArMjk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjb21waWxl
T3BDYWxsKE9wY29kZUlELCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQsIEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKLSAgICAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24q
KTsKKyAgICAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24qLCBDYWxsTGlu
a0luZm8qKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3Vs
dChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CShyZXZpc2lvbiAxNzk3NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgSklUOjplbWl0UHV0Q2Fs
bFJlc3VsdChJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKLXZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBpbnQgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwogICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQ7CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1
Y3Rpb24KICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihBYm92ZSwgQWJzb2x1dGVB
ZGRyZXNzKG1fdm0tPmFkZHJlc3NPZlN0YWNrTGltaXQoKSksIHJlZ1QxKSk7CiAKICAgICAgICAg
Ly8gSW5pdGlhbGl6ZSBBcmd1bWVudENvdW50LgotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QxLCBKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwg
SlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkgKyBQYXlsb2FkT2Zmc2V0KSk7CiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCByZWdUMik7CkBAIC0xMzAs
NiArMTMwLDE2IEBAIHZvaWQgSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KICAg
ICBpZiAoY2FuT3B0aW1pemUpCiAgICAgICAgIGVuZC5saW5rKHRoaXMpOwogICAgIAorICAgIC8v
IFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgorICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBK
U1N0YWNrOjpBcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7CisgICAgbG9hZDgoJmluZm8tPm1heE51bUFyZ3Vt
ZW50cywgcmVnVDApOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdU
MCwgcmVnVDIpOworICAgIEp1bXAgbm90U2F0dXJhdGVkID0gYnJhbmNoMzIoQmVsb3dPckVxdWFs
LCByZWdUMiwgVHJ1c3RlZEltbTMyKDI1NSkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDI1NSks
IHJlZ1QyKTsKKyAgICBub3RTYXR1cmF0ZWQubGluayh0aGlzKTsKKyAgICBzdG9yZTgocmVnVDIs
ICZpbmZvLT5tYXhOdW1Bcmd1bWVudHMpOworICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKKyAg
ICAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJl
Z1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKQEAgLTE3MCw3ICsxODAsOSBAQCB2b2lk
IEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1CiAKIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENh
bGxMaW5rSW5mbygpOworCisgICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1l
UmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KQEAgLTE4OCw3ICsyMDAsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgQ09NUElMRV9BU1NFUlQoT1BD
T0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIGNh
bGxfYW5kX2NhbGxfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIENP
TVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9j
b25zdHJ1Y3RfdmFyYXJncyksIGNhbGxfYW5kX2NvbnN0cnVjdF92YXJhcmdzX29wY29kZXNfbXVz
dF9iZV9zYW1lX2xlbmd0aCk7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8
fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKLSAgICAgICAgY29tcGlsZUxvYWRW
YXJhcmdzKGluc3RydWN0aW9uKTsKKyAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKGluc3RydWN0
aW9uLCBpbmZvKTsKICAgICBlbHNlIHsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rp
b25bNF0udS5vcGVyYW5kOwpAQCAtMjEyLDkgKzIyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKE9wY29kZUlEIG9wY29kZUkKIAogICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKICAgICAKLSAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0KLSAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CisgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2Fs
bF9ldmFsKSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1
bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1
bWVudHMuaAkocmV2aXNpb24gMTc5NzU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICBzdGF0aWMgQXJndW1lbnRzKiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEFyZ3VtZW50c01v
ZGUgbW9kZSA9IE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9kZSkKICAgICB7Ci0gICAgICAgIEFy
Z3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJndW1lbnRz
Pih2bS5oZWFwLCBvZmZzZXRPZklubGluZVJlZ2lzdGVyQXJyYXkoKSArIHJlZ2lzdGVyQXJyYXlT
aXplSW5CeXRlcyhpbmxpbmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAg
ICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJn
dW1lbnRzPih2bS5oZWFwLCBvZmZzZXRPZklubGluZVJlZ2lzdGVyQXJyYXkoKSArIHJlZ2lzdGVy
QXJyYXlTaXplSW5CeXRlcyhjYWxsRnJhbWUsIGlubGluZUNhbGxGcmFtZSkpKSBBcmd1bWVudHMo
Y2FsbEZyYW1lKTsKICAgICAgICAgYXJndW1lbnRzLT5maW5pc2hDcmVhdGlvbihjYWxsRnJhbWUs
IGlubGluZUNhbGxGcmFtZSwgbW9kZSk7CiAgICAgICAgIHJldHVybiBhcmd1bWVudHM7CiAgICAg
fQpAQCAtMTI0LDcgKzEyNCwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlU3RyaWN0TW9k
ZUNhbGxlZUlmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSopOwogCiAgICAgc3RhdGljIHNpemVfdCByZWdp
c3RlckFycmF5U2l6ZUluQnl0ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7IH0K
LSAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSkgeyByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikgKiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSk7IH0KKyAgICBzdGF0
aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkKKyAgICAgICAgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pICogKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgfQogICAgIGJv
b2wgaXNBcmd1bWVudChzaXplX3QpOwogICAgIGJvb2wgdHJ5U2V0QXJndW1lbnQoVk0mLCBzaXpl
X3QgYXJndW1lbnQsIEpTVmFsdWUpOwogICAgIEpTVmFsdWUgdHJ5R2V0QXJndW1lbnQoc2l6ZV90
IGFyZ3VtZW50KTsKQEAgLTM0MCwxMSArMzQ4LDE1IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6
ZmluaXNoQ3JlYXRpb24oQ2EKICAgICBtX292ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAgbV9v
dmVycm9kZUNhbGxlciA9IGZhbHNlOwogICAgIG1faXNTdHJpY3RNb2RlID0ganNDYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmlzU3Ry
aWN0TW9kZSgpOwotCisgICAgCisgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBjYWxsRnJhbWUt
PnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94
ZWRJbnQzMigpOworICAgIGVsc2UKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgbV9udW1Bcmd1bWVudHMtLTsKKyAgICAKICAg
ICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9kZTog
ewotICAgICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKSAtIDE7Ci0gICAgICAgIAogICAgICAgICBpZiAobV9udW1Bcmd1bWVudHMpIHsKICAgICAg
ICAgICAgIGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAgICAgbV9yZWdpc3Rl
cnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJh
bWUtPnJlZ2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50T25lIC0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSkub2Zmc2V0KCk7CkBAIC0zNjEsNyArMzczLDYgQEAgaW5saW5lIHZvaWQg
QXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBD
bG9uZWRBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwogICAgICAgICBpZiAobV9udW1B
cmd1bWVudHMpIHsKICAgICAgICAgICAgIGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAg
ICAgICAgICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50T25l
IC0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNzk3NTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
MSw2ICsyMTEsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICAvKiBm
cm9tIHN1cGVyIGxvbmcgY29tcGlsZXMgdGhhdCB0YWtlIGEgbG90IG9mIG1lbW9yeS4gKi9cCiAg
ICAgdih1bnNpZ25lZCwgbWF4aW11bUlubGluaW5nQ2FsbGVyU2l6ZSwgMTAwMDApIFwKICAgICBc
CisgICAgdih1bnNpZ25lZCwgbWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZywgMTAwKSBcCisgICAg
XAogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcsIHRydWUpIFwKICAg
ICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50QnlJZElubGluaW5nLCB0cnVlKSBcCiAgICAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246344</attachid>
            <date>2015-02-10 14:59:06 -0800</date>
            <delta_ts>2015-02-10 15:45:42 -0800</delta_ts>
            <desc>even more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69966</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgQ2FsbExp
bmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgICAgICwgaGFzU2VlblNob3VsZFJlcGF0
Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2VlbkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2Fs
bFR5cGUoTm9uZSkKKyAgICAgICAgLCBtYXhOdW1Bcmd1bWVudHMoMCkKICAgICAgICAgLCBzbG93
UGF0aENvdW50KDApCiAgICAgewogICAgIH0KQEAgLTg3LDYgKzg4LDcgQEAgc3RydWN0IENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAx
OwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBj
YWxsZWVHUFIgOiA4OworICAgIHVpbnQ4X3QgbWF4TnVtQXJndW1lbnRzOyAvLyBPbmx5IHVzZWQg
Zm9yIHZhcmFyZ3MgY2FsbHMuCiAgICAgdWludDMyX3Qgc2xvd1BhdGhDb3VudDsKICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDcgKzEyOSw5IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzLCBidXQgYW55dGltZSB3ZSBo
YXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQgYmVjb21lcyBpbmRpc3BlbnNhYmxlLgogICAgIFVO
VVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZyb21D
YWxsTGlua0luZm8obG9ja2VyLCBjYWxsTGlua0luZm8pOworICAgIENhbGxMaW5rU3RhdHVzIHJl
c3VsdCA9IGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAg
ICByZXN1bHQubV9tYXhOdW1Bcmd1bWVudHMgPSBjYWxsTGlua0luZm8ubWF4TnVtQXJndW1lbnRz
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKQEAgLTI5MSw2ICsyOTMsMTMgQEAgQ2FsbExpbmtT
dGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogICAgIHJldHVybiBjb21wdXRlRm9yKHBy
b2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgYmFzZWxpbmVNYXApOwogfQog
Cit2b2lkIENhbGxMaW5rU3RhdHVzOjpzZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFu
dCB2YXJpYW50KQoreworICAgIG1fdmFyaWFudHMgPSBDYWxsVmFyaWFudExpc3R7IHZhcmlhbnQg
fTsKKyAgICBtX2NvdWxkVGFrZVNsb3dQYXRoID0gZmFsc2U7CisgICAgbV9pc1Byb3ZlZCA9IHRy
dWU7Cit9CisKIGJvb2wgQ2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb25zdAogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2
aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAotICAgIENhbGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJv
dmVkKQotICAgIHsKLSAgICAgICAgbV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRl
Rm9yKAogICAgICAgICBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBD
YWxsTGlua0luZm9NYXAmKTsKIApAQCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9y
aWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAor
ICAgIHZvaWQgc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9j
b3VsZFRha2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWlzU2V0KCk7IH0KQEAgLTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVl
IGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIAorICAgIGJvb2wgbWF4TnVtQXJndW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhOdW1Bcmd1bWVudHM7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CkBAIC0xMzcsNiArMTM1LDcgQEAgcHJp
dmF0ZToKICAgICBDYWxsVmFyaWFudExpc3QgbV92YXJpYW50czsKICAgICBib29sIG1fY291bGRU
YWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lzUHJvdmVkOworICAgIHVuc2lnbmVkIG1fbWF4TnVt
QXJndW1lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE3OTg2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMSw2ICsxMjEsOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtp
bmQgewogICAgICAgICBDYWxsLAogICAgICAgICBDb25zdHJ1Y3QsCisgICAgICAgIENhbGxWYXJh
cmdzLAorICAgICAgICBDb25zdHJ1Y3RWYXJhcmdzLAogICAgICAgICAKICAgICAgICAgLy8gRm9y
IHRoZXNlLCB0aGUgc3RhY2tPZmZzZXQgaW5jb3Jwb3JhdGVzIHRoZSBhcmd1bWVudCBjb3VudCBw
bHVzIHRoZSB0cnVlIHJldHVybiBQQwogICAgICAgICAvLyBzbG90LgpAQCAtMTQwLDI1ICsxNDIs
MzkgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgICAgIHJldHVybiBDYWxsOwogICAg
IH0KICAgICAKKyAgICBzdGF0aWMgS2luZCB2YXJhcmdzS2luZEZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgIHJldHVybiBDYWxsVmFyYXJnczsKKyAgICAgICAg
Y2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdFZhcmFy
Z3M7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIENhbGw7CisgICAgfQorICAgIAogICAgIHN0YXRpYyBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZEZvcihLaW5kIGtpbmQpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENhbGxW
YXJhcmdzOgogICAgICAgICBjYXNlIEdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgU2V0dGVyQ2Fs
bDoKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiBD
b2RlRm9yQ29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICB9CiAgICAgCi0gICAg
c3RhdGljIGJvb2wgaXNOb3JtYWxDYWxsKEtpbmQga2luZCkKKyAgICBzdGF0aWMgYm9vbCBpc1Zh
cmFyZ3MoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAg
IGNhc2UgQ2FsbDoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTcxLDEwICsxODcsMTEgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9yaWdp
biBjYWxsZXI7CiAgICAgQml0VmVjdG9yIGNhcHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUg
bWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFibGUgbnVtYmVyaW5nLgogCi0gICAgc2lnbmVkIHN0
YWNrT2Zmc2V0IDogMjk7Ci0gICAgdW5zaWduZWQga2luZCA6IDI7IC8vIHJlYWwgdHlwZSBpcyBL
aW5kCisgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CisgICAgdW5zaWduZWQga2luZCA6IDM7
IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYg
ZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRo
ZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJl
IHJlY292ZXJlZCBtYW51YWxseS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0
ZXI7IC8vIFRoaXMgaXMgb25seSBzZXQgaWYgdGhlIGNvZGUgdXNlcyBhcmd1bWVudHMuIFRoZSB1
bm1vZGlmaWVkIGFyZ3VtZW50cyByZWdpc3RlciBmb2xsb3dzIHRoZSB1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoKSBjb252ZW50aW9uIChzZWUgQ29kZUJsb2NrLmgpLgorICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7IC8vIE9ubHkgc2V0IHdoZW4gd2UgaW5saW5l
IGEgdmFyYXJncyBjYWxsLgogICAgIAogICAgIC8vIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG5v
dGlvbiBvZiBhICJkZWZhdWx0IiBzZXQgb2YgdmFsdWVzIGZvcgogICAgIC8vIElubGluZUNhbGxG
cmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNv
bmZ1c2lvbiBpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5ODYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52
YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKLSAgICAgICAg
QVNTRVJUKHZhbHVlLmlzSGVhcFRvcCgpKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0NsZWFy
KCkpOwogICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2YWx1
ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgp
KSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEZpbHRyYXRpb25P
Syk7CkBAIC0yMDMsOSArMjAzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgICAg
IC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LgotICAg
ICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9m
IGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9uZSBz
ZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1cnJl
bnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAgLy8gbm9uLWNsZWFy
IHZhbHVlLgorICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2Rl
LT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2Fz
ZSBMb2FkVmFyYXJnczogeworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5k
KGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5v
cGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBC
aXRPcjoKQEAgLTEzMTUsNyArMTMyNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRo
aXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAgICAv
LyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBp
cyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIg
b3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6
aXNWYXJhcmdzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7
CiAgICAgICAgICAgICBzZXRDb25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJl
cihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMSkpOwogICAgICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0
ZW5kIHRoYXQgd2UgY2xvYmJlcmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KQEAgLTE5
NjQsNiArMTk3Niw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRp
dmVDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwMyw2ICs1MDMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBCdXQgb25seSBhZnRlciB3ZSBo
YXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBub2JvZHkgaGFzIGVzY2Fw
ZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzk4NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgy
LDE0ICsxODIsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFy
Z0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzKTsKICAgICB2b2lkIGhh
bmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQs
IHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQg
cmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5v
ZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB2b2lkIGhhbmRsZVZhcmFy
Z3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOwogICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxs
VGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAg
IHZvaWQgdW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50KTsKICAgICB2b2lkIGVtaXRBcmd1
bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxpbmluZ0Nv
c3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7IC8vIFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmlu
ZyBjYW5kaWRhdGUuIEJ5IGNvbnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4K
ICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFs
c2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3Rh
dHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpL
aW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5n
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtT
dGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQs
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQs
IE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKTsKICAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1h
bExpbmtpbmcsIENhbGxlckxpbmtzTWFudWFsbHkgfTsKLSAgICBib29sIGF0dGVtcHRUb0lubGlu
ZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFu
dCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVu
c2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxp
dHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2Up
OworICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50
IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxS
ZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0
eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSk7
CiAgICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3Bl
cmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQs
IENhbGxlckxpbmthYmlsaXR5KTsKICAgICB2b2lkIGNhbmNlbExpbmtpbmdGb3JCbG9jayhJbmxp
bmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAvLyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdpdmVu
IGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5saW5l
IHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4g
dHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgpA
QCAtNjkxLDcgKzY5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBvcCwgb3BJbmZvLCBjYWxs
ZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOwor
ICAgICAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwog
ICAgIH0KICAgICAKQEAgLTEwNDMsNyArMTA0NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNhbGwoCiAgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIAogICAgIGlm
IChjYWxsVGFyZ2V0LT5oYXNDb25zdGFudCgpKQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENh
bGxMaW5rU3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsK
KyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoY2FsbFRhcmdl
dC0+YXNKU1ZhbHVlKCkpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNv
ZGVQYXJzaW5nKCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBIYW5kbGluZyBjYWxsIGF0ICIsIGN1
cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKQEAgLTEwNjAs
NyArMTA2MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgCiAgICAg
T3BJbmZvIGNhbGxPcEluZm87CiAgICAgCi0gICAgaWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJn
ZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwgb3AsIGtpbmQsIHByZWRpY3Rpb24pKSB7CisgICAg
aWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJl
Z2lzdGVyT2Zmc2V0LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNl
dCksIFZpcnR1YWxSZWdpc3RlcigpLCAwLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4
dE9mZnNldCwgb3AsIGtpbmQsIHByZWRpY3Rpb24pKSB7CiAgICAgICAgIGlmIChtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlu
bGluZWRDYWxsKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwODgsMTEgKzEwODksNDggQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNh
bGxPcEluZm8sIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rl
ck9mZnNldCwgcHJlZGljdGlvbik7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5j
dGlvbkNoZWNrcyhDYWxsVmFyaWFudCBjYWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdp
c3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCkKK3sKKyAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxs
X3ZhcmFyZ3MpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpKTsKKyAgICAK
KyAgICBpbnQgcmVzdWx0ID0gcGNbMV0udS5vcGVyYW5kOworICAgIGludCBjYWxsZWUgPSBwY1sy
XS51Lm9wZXJhbmQ7CisgICAgaW50IHRoaXNSZWcgPSBwY1szXS51Lm9wZXJhbmQ7CisgICAgaW50
IGFyZ3VtZW50cyA9IHBjWzRdLnUub3BlcmFuZDsKKyAgICBpbnQgZmlyc3RGcmVlUmVnID0gcGNb
NV0udS5vcGVyYW5kOworICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IHBjWzZdLnUub3BlcmFu
ZDsKKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigp
OworICAgIAorICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxl
ZSkpOworICAgIAorICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsTGlua0luZm9zLCBtX2NhbGxDb250ZXh0TWFwKTsKKyAgICBpZiAoY2FsbFRhcmdldC0+aGFz
Q29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJvdmVuQ29uc3RhbnRDYWxs
ZWUoY2FsbFRhcmdldC0+YXNKU1ZhbHVlKCkpOworICAgIAorICAgIGlmIChjYWxsTGlua1N0YXR1
cy5jYW5PcHRpbWl6ZSgpCisgICAgICAgICYmIGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJl
c3VsdCwgY2FsbExpbmtTdGF0dXMsIGZpcnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNS
ZWcpLCBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1f
Y3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5l
Q2FsbEZyYW1lOjp2YXJhcmdzS2luZEZvcihraW5kKSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAg
aWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRp
b24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsKKyAg
ICBkYXRhLT5maXJzdFZhckFyZ09mZnNldCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgIAorICAg
IE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgY2FsbFRhcmdldCwgZ2V0KHRoaXNSZWcpLCBnZXQoYXJndW1lbnRzKSk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOworICAgIGlmIChyZXN1bHRSZWcuaXNWYWxp
ZCgpKQorICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKK30KKwordm9pZCBCeXRlQ29kZVBh
cnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRh
cmdldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudFJlZywgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQogewogICAgIE5vZGUqIHRoaXNBcmd1bWVudDsKLSAgICBpZiAoa2luZCA9PSBD
b2RlRm9yQ2FsbCkKLSAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgaWYgKHRoaXNBcmd1bWVudFJlZy5p
c1ZhbGlkKCkpCisgICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh0aGlzQXJndW1lbnRSZWcpOyB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgZWxzZQog
ICAgICAgICB0aGlzQXJndW1lbnQgPSAwOwogCkBAIC0xMzU2LDcgKzEzOTQsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpjYW5jZWxMaW5raW5nRm9yQmxvCiAgICAgfQogfQogCi1ib29sIEJ5dGVD
b2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQg
cmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlKQor
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0
Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBr
aW5kLCBDYWxsZXJMaW5rYWJpbGl0eSBjYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSkKIHsKICAgICBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lh
bGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIApAQCAtMTM5Myw3ICsxNDMxLDExIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0
dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1
bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2lu
ZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoCisgICAgTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVy
YW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsCisgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCisg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRh
dGFMb2coIkhhbmRsaW5nIGlubGluaW5nLi4uXG4iKTsKQEAgLTE0MDcsNiArMTQ0OSwxMyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgCisgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtp
bmQpCisgICAgICAgICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9u
czo6bWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZygpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZhcmFyZ3Mu
XG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAgdW5zaWdu
ZWQgaW5saW5pbmdCYWxhbmNlID0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGlu
ZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QpCiAgICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0ZDo6bWlu
KGlubGluaW5nQmFsYW5jZSwgT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5s
aW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpKTsKQEAgLTE0MTcsMTAgKzE0NjYsNjIgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNpbXBsaWZp
Y2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGltZXMsIGJ1
dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUgd2UgZG9u
J3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4KICAgICBp
ZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtTdGF0dXMu
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAgICAgICAg
Y2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lh
bGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVz
WzBdLCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50LCBzcGVjaWFsaXphdGlvbktpbmQpOwor
CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldDsKKworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
dmFyYXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFyZ3VtZW50cyByaWdodCBub3cu
CisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgbWFuZGF0b3J5TWluaW11bTsgLy8gZXhjbHVkZXMgInRoaXMiCisgICAg
ICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBjYWxs
TGlua1N0YXR1c1swXS5mdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICBtYW5k
YXRvcnlNaW5pbXVtID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBpbmNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIHVu
c2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IG1heCgKKyAgICAgICAgICAgICAgICBjYWxsTGlua1N0
YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVt
ICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0
ZXJPZmZzZXRPckZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAt
PSBtYXhOdW1Bcmd1bWVudHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAg
ICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9m
ZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKKyAg
ICAgICAgICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQgKyAx
KTsKKyAgICAgICAgICAgIGRhdGEtPmNvdW50ID0gVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBkYXRhLT5vZmZzZXQg
PSBhcmd1bWVudHNPZmZzZXQ7CisgICAgICAgICAgICBkYXRhLT5saW1pdCA9IG1heE51bUFyZ3Vt
ZW50czsKKyAgICAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5p
bXVtOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBP
cEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBJbiBERkcgSVIgYmVmb3JlIFNTQSwgd2UgY2Fubm90IGluc2VydCBjb250cm9s
IGZsb3cgYmV0d2VlbiBhZnRlciB0aGUKKyAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCB0
aGUgbGFzdCBTZXRBcmd1bWVudC4gVGhpcyBpc24ndCBhIHByb2JsZW0gb25jZSB3ZSBnZXQgdG8g
REZHCisgICAgICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIg
cmVhc29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKKyAgICAgICAgICAgIC8vIGJl
Zm9yZSBTU0EuCisKKyAgICAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZz
ZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5h
a2VkU2V0KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVu
dCA8IG1heE51bUFyZ3VtZW50czsgKythcmd1bWVudCkgeworICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0ICsgYXJndW1lbnQpLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0
cnVlKTsgLy8gV2UgY3VycmVudGx5IGhhdmUgbm93aGVyZSB0byBwdXQgdGhlIHR5cGUgY2hlY2sg
b24gdGhlIExvYWRWYXJhcmdzLiBXZSBjb3VsZCBmaXggdGhpcyBieSBoYXZpbmcgU2V0QXJndW1l
bnQgZG8gdGhlIGFyZ3VtZW50IGNoZWNrcy4KKyAgICAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1
bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZWV0ID0gcmVnaXN0ZXJP
ZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gYXR0
ZW1wdFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVy
YW5kLCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAgICAgICBjYWxs
VGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zm
c2V0LCB0aGlzQXJndW1lbnQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIHByZWRpY3Rpb24s
CiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UpOwogICAgICAgICBpZiAoIXJlc3VsdCAmJiAh
Y2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkKQEAgLTE0MzcsMTEgKzE1MzgsOSBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gZG8gbW9yZSBkZXRhaWxl
ZCBwb2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7IGFuZCBzZWNvbmQsIGl0IHJlZHVj
ZXMgY29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcuIEFuZCBieSBwb2x5dmFyaWFudCBw
cm9maWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxpbmcgb2YgKnRoaXMqIGNhbGwuIE5v
dGUgdGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhhdCBhc3BlY3Qgb2YgdGhpcyBieSBk
b2luZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5nIHRoZSBwcm9maWxpbmcKLSAgICAv
LyBhbHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhpcywgYnV0IGl0IGNvdWxkIGJlIGlu
dGVyZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5nIGEKLSAgICAvLyBzZXBhcmF0ZSBu
b2RlIGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdGhl
IG5vdGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9maWxpbmcgbm9kZS4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDMzCi0gICAgaWYgKCFp
c0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWND
YWxsSW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1f
cGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcoKQor
ICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgewogICAgICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyAoaGFy
ZCkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiXG4iKTsKQEAgLTE0ODIsNiArMTU4MSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2Rl
T3JpZ2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBy
ZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAogICAgIC8vIFRoaXMgbWFrZXMgbWUg
d2lzaCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGltZS4gV2UgbmVlZCB0byBwaWNrIGEg
dmFyaWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3JlIHRoZSBjYWxsZWUgc28gdGhhdCBp
dCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBibG9ja3Mgd2UncmUgYWJvdXQgdG8g
Y3JlYXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9pbmcgYW4gaW1tZWRpYXRlLXNldCBo
ZXJlIGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3JtZWQgYW55IHNpZGUgZWZmZWN0cwpA
QCAtMTUyNCw3ICsxNjI1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
Tm9kZQogICAgICAgICBOb2RlKiBteUNhbGxUYXJnZXROb2RlID0gZ2V0RGlyZWN0KGNhbGxlZVJl
Zyk7CiAgICAgICAgIAogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0ZW1wdFRvSW5s
aW5lQ2FsbCgKLSAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNh
bGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAgICAgIG15Q2FsbFRhcmdl
dE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwg
dGhpc0FyZ3VtZW50LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIENhbGxlckxpbmtzTWFudWFsbHksIHByZWRpY3Rpb24sCiAgICAgICAg
ICAgICBpbmxpbmluZ0JhbGFuY2UpOwogICAgICAgICAKQEAgLTMxMTMsNDMgKzMyMTQsNzAgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaW50
IHRoaXNSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBpbnQgZmlyc3RGcmVlUmVnID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2
XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxs
RnJhbWUoKSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFyZ3VtZW50cywgYXJndW1lbnRz
ID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9m
ZnNldCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7Ci0KLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKLQotICAgICAgICAgICAgdW5zaWduZWQg
YXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LiBX
ZSBzdGFydCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAotICAgICAgICAgICAgLy8g
dGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4KLSAg
ICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7Ci0gICAgICAg
ICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBwYXNzaW5nIHNv
bWUgYXJndW1lbnRzLgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1l
IGhlYWRlci4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHRoZSBhbGlnbm1lbnQg
cmlnaHQuCi0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRp
cGxlT2YoCi0gICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKLSAgICAg
ICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwotCi0gICAgICAgICAgICBlbnN1cmVMb2NhbHMo
Ci0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAotICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkp
OworICAgICAgICAgICAgaWYgKGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQorICAgICAgICAgICAg
ICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xv
d0FyZ3VtZW50cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpCisg
ICAgICAgICAgICAgICAgICAgICYmICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhpbmxpbmVD
YWxsRnJhbWUoKS0+a2luZCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWZpcnN0VmFyQXJnT2Zm
c2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RD
cmVhdGVkKTsKKworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGlubGlu
ZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIC8vIExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9mZnNldC4gV2Ugc3RhcnQg
d2l0aCB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgLy8g
dGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4KKyAg
ICAgICAgICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gZmlyc3RGcmVlUmVnICsgMTsK
KyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gYXJnQ291bnQ7IC8vIFdlIHdp
bGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0
ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhlYWRlci4KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KKyAgICAgICAgICAgICAgICAg
ICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisKKyAgICAgICAgICAgICAgICAgICAgZW5zdXJl
TG9jYWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdp
c3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0IGhhdmUgc2V0IHVwIHRoZSBhcmd1bWVudHMuIEJ1
dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAorICAgICAgICAgICAgICAgICAgICAvLyBsb29rIGxp
a2UgdGhlIGJ5dGVjb2RlIGhhZCBkb25lIGl0LgorICAgICAgICAgICAgICAgICAgICBpbnQgbmV4
dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3Rlcisr
KSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwg
YXJnQ291bnQ7ICsrYXJndW1lbnQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVDYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBD
YWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAg
ICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBFbWl0IENhbGxG
b3J3YXJkVmFyYXJncworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1lYW5zIHdlIGNh
bm5vdCBpbmxpbmUgZm9yd2FyZGVkIHZhcmFyZ3MgY2FsbHMgaW5zaWRlIGEgdmFyYXJncworICAg
ICAgICAgICAgICAgIC8vIGNhbGwgZnJhbWUuIFdlIHdpbGwgcHJvYmFibHkgZml4IHRoYXQgb25j
ZSB3ZSBmaW5hbGx5IGdldCByaWQgb2YgdGhlCisgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRz
IG9iamVjdCBzcGVjaWFsLWNhc2luZy4KKyAgICAgICAgICAgICAgICBDYWxsVmFyYXJnc0RhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOworICAgICAgICAgICAgICAg
IGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgoCisgICAgICAg
ICAgICAgICAgICAgIENhbGxGb3J3YXJkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBPcEluZm8oZ2V0
UHJlZGljdGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0KGNhbGxlZSksIGdldCh0aGlz
UmVnKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQp
OworICAgICAgICAgICAgICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBUaGUgYnl0ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4g
QnV0IHdlJ2xsIGRvIGl0IGFuZCBtYWtlIGl0Ci0gICAgICAgICAgICAvLyBsb29rIGxpa2UgdGhl
IGJ5dGVjb2RlIGhhZCBkb25lIGl0LgotICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJl
Z2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVhbFJlZ2lzdGVy
KHRoaXNSZWcpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCi0gICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGhhbmRsZUNhbGwoCi0gICAgICAgICAgICAgICAgcmVzdWx0
LCBDYWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAotICAg
ICAgICAgICAgICAgIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAg
ICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbFZhcmFyZ3MsIENv
ZGVGb3JDYWxsKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdz
OiB7CisgICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENv
bnN0cnVjdFZhcmFyZ3MsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfY29uc3RydWN0X3ZhcmFyZ3MpOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICAgICAgICAgIC8vIFN0YXRpY2FsbHkgc3BlY3VsYXRl
IGZvciBub3cuIEl0IG1ha2VzIHNlbnNlIHRvIGxldCBzcGVjdWxhdGUtb25seSBqbmVxX3B0cgog
ICAgICAgICAgICAgLy8gc3VwcG9ydCBzaW1tZXIgZm9yIGEgd2hpbGUgYmVmb3JlIG1ha2luZyBp
dCBtb3JlIGdlbmVyYWwsIHNpbmNlIGl0J3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xODIsNiArMTgyLDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlM
ZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgogICAgIGNhc2Ug
b3BfY2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2Ugb3BfaW5pdF9sYXp5
X3JlZzoKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF90ZWFyX29m
Zl9hcmd1bWVudHM6CkBAIC0yMjMsMTQgKzIyNSw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAg
ICAgfQogCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAgICAgIGlmIChjb2RlQmxvY2st
PnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVu
dHNSZWdpc3RlcigpLm9mZnNldCgpCi0gICAgICAgICAgICAmJiAhcGNbNl0udS5vcGVyYW5kKQot
ICAgICAgICAgICAgcmV0dXJuIENhbklubGluZTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBoYW5kbGUgdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNzYyNgotICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLQogICAgIGNh
c2Ugb3BfbmV3X3JlZ2V4cDogCiAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVu
dDoKICAgICBjYXNlIG9wX25ld19mdW5jOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNzk4NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg2LDggKzg2LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBmdW5jdGlvbkNhcGFi
aWxpdAogICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbkNvbXBpbGVBbmRJbmxpbmUs
IGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKICAgICBpZiAobWlnaHRDb21waWxlICYmICFtaWdo
dElubGluZSkKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5Db21waWxlLCBjb21w
dXRlZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENvbXBpbGUgJiYgbWlnaHRJbmxp
bmUpCi0gICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2FuSW5saW5lLCBjb21wdXRlZENh
cGFiaWxpdHlMZXZlbCk7CiAgICAgaWYgKCFtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQog
ICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNiArMzY1LDkgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2Ug
TmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJh
cmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2UgSW46CiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50c0xlbmd0aFNhZmU6CkBAIC00MDEsNiArNDA0LDEzIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJp
YWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CisgICAgICAgIC8vIFRoaXMgYWN0dWFsbHkgd3JpdGVzIHRvIGxvY2FsIHZhcmlh
YmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBpdCByZWFkcyB0aGUgYXJyYXksIGl0IGRvZXMKKyAgICAg
ICAgLy8gc28gaW4gYSB3YXkgdGhhdCBtYXkgdHJpZ2dlciBnZXR0ZXJzIG9yIHZhcmlvdXMgdHJh
cHMuCisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CiAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Miw3ICsyOTIsNiBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0gQ2FwYWJpbGl0eUxldmVsIHsK
ICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwKICAgICBDYW5Db21waWxlLAogICAg
IENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxldmVsTm90U2V0CkBAIC0zMTIs
NyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBhYmlsaXR5TGV2ZWwgbAogaW5s
aW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZlbCkKIHsKICAgICBzd2l0Y2gg
KGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2FzZSBDYW5Db21waWxlQW5kSW5s
aW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMzI1LDE0ICszMjMs
NiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJCb3VuZChDCiAgICAgc3dpdGNo
IChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAgICByZXR1cm4gQ2Fubm90Q29t
cGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dpdGNoIChiKSB7Ci0gICAgICAg
IGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6Ci0gICAg
ICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBjYXNlIENhbkNvbXBpbGU6CiAg
ICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNvbXBpbGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzk4NjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw2ICsxMTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0
cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
KyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAg
IGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIEJy
ZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxNzk4NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgyMiw2ICs4MjIsNyBAQCBwdWJsaWM6CiAgICAgQmFnPE11bHRpR2V0QnlP
ZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1dEJ5T2Zm
c2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8T2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOworICAgIEJhcjxDYWxsVmFy
YXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURh
dGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwog
ICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMjAgQEAgc3RydWN0IFN3aXRjaERh
dGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IENhbGxWYXJhcmdz
RGF0YSB7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0OworfTsKKworc3RydWN0IExvYWRWYXJh
cmdzRGF0YSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0OyAvLyBMb2NhbCBmb3IgdGhlIGZp
cnN0IGVsZW1lbnQuCisgICAgVmlydHVhbFJlZ2lzdGVyIGNvdW50OyAvLyBMb2NhbCBmb3IgdGhl
IGNvdW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lU3RhcnQ7CisgICAgVmlydHVhbFJl
Z2lzdGVyIG1hY2hpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBvZmZzZXQ7IC8vIFdoaWNoIGFycmF5
IGVsZW1lbnQgdG8gc3RhcnQgd2l0aC4gVXN1YWxseSB0aGlzIGlzIDAuCisgICAgdW5zaWduZWQg
bWFuZGF0b3J5TWluaW11bTsgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBvbiB0aGUgc3RhY2sg
dGhhdCBtdXN0IGJlIGluaXRpYWxpemVkOyBpZiB0aGUgYXJyYXkgaXMgdG9vIHNob3J0IHRoZW4g
dGhlIG1pc3NpbmcgZWxlbWVudHMgbXVzdCBnZXQgdW5kZWZpbmVkLgorICAgIHVuc2lnbmVkIGxp
bWl0OyAvLyBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0byBsb2FkLgorfTsKKwogLy8gVGhp
cyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25z
dHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkg
YW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAogLy8gYSBjb25zdGFu
dCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAgLTg4OCw2
ICs5MDIsMzUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdy
aXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBo
YXNDYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAg
ICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIENhbGxWYXJhcmdzRGF0YSogY2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNDYWxsVmFyYXJnc0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Q2FsbFZhcmFyZ3NEYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29s
IGhhc0xvYWRWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2Fk
VmFyYXJnczsKKyAgICB9CisgICAgCisgICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJnc0Rh
dGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0xvYWRWYXJhcmdzRGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxMb2FkVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAg
fQorICAgIAogICAgIGJvb2wgaGFzUmVzdWx0KCkKICAgICB7CiAgICAgICAgIHJldHVybiAhIXJl
c3VsdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2
aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogICAgIC8qIHRoaXMgbXVzdCBiZSB0aGUgZGlyZWN0bHkgc3Vic2VxdWVudCBw
cm9wZXJ0eSBwdXQuIE5vdGUgdGhhdCBQdXRCeVZhbCAqL1wKICAgICAvKiBvcGNvZGVzIHVzZSBW
YXJBcmdzIGJlYXVzZSB0aGV5IG1heSBoYXZlIHVwIHRvIDQgY2hpbGRyZW4uICovXAogICAgIG1h
Y3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERp
cmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oUHV0
QnlWYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1
dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApAQCAtMjE3
LDYgKzIxOCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBDYWxs
cy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhDYWxsVmFyYXJn
cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENhbGxGb3J3
YXJkVmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KENvbnN0cnVjdFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhOYXRpdmVDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhOYXRpdmVDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU1LDYgKzE1NSwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBMb2Fk
VmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFy
YXJnc0RhdGEoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50
MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaW1p
dDsgaS0tOykgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQorICAgICAgICAgICAg
ICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3Rl
cihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9i
YmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzgsNiArMTM4LDE4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCB3cml0ZVRvcCgpCiAg
ICAgeworICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IExvYWRWYXJhcmdzKSB7CisgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgd2Ugbm90ZSB0aGUgd3JpdGVzIHRvIHRoZSBsb2NhbHMgdGhhdCB3
aWxsIHN0b3JlIHRoZSBhcnJheSBlbGVtZW50cyBhbmQKKyAgICAgICAgICAgIC8vIGNvdW50Lgor
ICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKKyAgICAgICAgICAgIG1fd3JpdGUoZGF0YS0+Y291bnQpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAgICAgICAgICAgbV93cml0
ZShWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRo
aW5nIHNwZWNpYWwgZm9yIENhbGxGb3J3YXJkVmFyYXJncywgc2luY2UgaXQgcmVhZHMKKyAgICAg
ICAgLy8gb3VyIGFyZ3VtZW50cyB0aGUgc2FtZSB3YXkgdGhhdCBhbnkgZWZmZWN0ZnVsIHRoaW5n
IG1pZ2h0LgorICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGgubV9jb2RlQmxvY2stPnVzZXNB
cmd1bWVudHMoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKICAgICAgICAgICAgICAgICBtX3dy
aXRlKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzk4NjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xODksNiArMTg5LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRl
VHlwZSYgc3QKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAgICAg
Y2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2Ug
TmV3QXJyYXlXaXRoU2l6ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjI0LDMyICs2MjQsMTI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3Ry
aWN0RXEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAg
ICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlzQ2FsbCkKLSAg
ICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0
cnVjdCk7Ci0gICAgCisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBi
b29sIGlzQ2FsbDsKKyAgICBib29sIGlzVmFyYXJnczsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICBjYXNlIENhbGw6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxs
OworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhbGxUeXBlID0gQ2Fs
bExpbmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAgICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAgICBp
c1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxsVmFyYXJnczoK
KyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlu
a0luZm86OkNhbGxWYXJhcmdzOworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1Zh
cmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6
CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAg
ICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5v
ZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIC8vIEZv
ciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhh
dmUgdG8gbWFrZSBzcGFjZQogICAgIC8vIGZvciBpdC4KICAgICBpbnQgZHVtbXlUaGlzQXJndW1l
bnQgPSBpc0NhbGwgPyAwIDogMTsKICAgICAKLSAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNh
bGxUeXBlID0gaXNDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25z
dHJ1Y3Q7CisgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsKICAg
ICAKLSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5b
bm9kZS0+Zmlyc3RDaGlsZCgpXTsKLSAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0
IGNoaWxkIGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQot
ICAgIC8vIGFyZ3VtZW50cy4KLSAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxk
cmVuKCkgLSAxOworICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJh
cmdzIGlzIHRyaWNraWVyLgorICAgIGlmIChpc1ZhcmFyZ3MpIHsKKyAgICAgICAgLy8gMSkgZ2V0
IHRoZSBhcmd1bWVudHMKKyAgICAgICAgLy8gMikgZmx1c2ggcmVnaXN0ZXJzCisgICAgICAgIC8v
IDMpIHNldCB1cCB0aGUgY2FsbCBmcmFtZQorICAgICAgICAvLyA0KSBnZXQgdGhlIGNhbGxlZSBh
bmQgInRoaXMiIGFuZCBoYW5kbGUgdGhlbQorICAgICAgICAvLyA1KSBmbHVzaCByZWdpc3RlcnMg
YWdhaW4KKyAgICAgICAgCisgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNh
bGxWYXJhcmdzRGF0YSgpOworCisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICAKKyAgICAgICAgYXV0byBsb2FkQXJndW1lbnRzR1BSID0gWyZdICgpIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IEdQUkluZm86OnJlZ1QwOworICAgICAgICAgICAgICAgIG1faml0
LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnRzR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2Ny
YXRjaEdQUjEgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNHUFIpOwor
ICAgICAgICAgICAgc2NyYXRjaEdQUjIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihh
cmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gSklU
Q29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgc2Ny
YXRjaEdQUjIpOworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQ
UigpOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSB3aG9s
ZSByZWdpc3RlciBmaWxlIHRvIG91cnNlbHZlcywgYW5kIGFyZ3VtZW50c0dQUiBoYXMgdGhlCisg
ICAgICAgIC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gU2VsZWN0IHNvbWUgc2NyYXRjaCByZWdpc3Rl
cnMuCisgICAgICAgIAorICAgICAgICAvLyBXZSB3aWxsIHVzZSBzY3JhdGNoR1BSMiB0byBwb2lu
dCB0byBvdXIgc3RhY2sgZnJhbWUuCisKKyAgICAgICAgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xv
dHMgPSBtX2ppdC5ncmFwaCgpLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICAgICAgCisgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8gRG8gdGhlIGhvcnJpZmlj
IGZvby5hcHBseSh0aGlzLCBhcmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIC8v
IEZJWE1FOiBkbyB0aGlzIG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwgaW5zdGVhZCBvZiBo
ZXJlLiBUaGlzIHdpbGwgaGFwcGVuCisgICAgICAgICAgICAvLyBvbmNlIHdlIGdldCByaWQgb2Yg
dGhlIGFyZ3VtZW50cyBsYXp5IGNyZWF0aW9uIGFuZCBsYXp5IHRlYXItb2ZmLgorICAgICAgICAg
ICAgCisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25a
ZXJvLCBhcmd1bWVudHNHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMik7CisgICAgICAg
ICAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShtX2ppdCwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5zdGFja09mZnNldCgpLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzID0gbV9qaXQuanVtcCgpOworICAg
ICAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBSaWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVudHNHUFIgYW5kIHRoZSBy
ZWdpc3RlciBmaWxlIGlzIGZsdXNoZWQuCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2l6ZUZyYW1lRm9yVmFyYXJncywgCisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhlIGNhbGwgaW5zdHJ1
Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247IHRoZSBzdWJzZXF1ZW50IGNoaWxk
cmVuIGFyZSB0aGUKKyAgICAgICAgLy8gYXJndW1lbnRzLgorICAgICAgICBpbnQgbnVtUGFzc2Vk
QXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogICAgIAotICAgIGludCBudW1BcmdzID0g
bnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OworICAgICAgICBpbnQgbnVtQXJncyA9
IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKICAgICAKLSAgICBtX2ppdC5zdG9y
ZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyksIGNhbGxlZUZyYW1lUGF5
bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgICAgICBtX2ppdC5zdG9yZTMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyksIGNhbGxlZUZyYW1lUGF5bG9h
ZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIAotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7Ci0gICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0
LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKLSAgICAgICAgR1BSUmVn
IGFyZ0dQUiA9IGFyZy5ncHIoKTsKLSAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgeworICAgICAgICAgICAgRWRnZSBh
cmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQo
KSArIDEgKyBpXTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdl
KTsKKyAgICAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgICAgICAgICB1
c2UoYXJnRWRnZSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgY2Fs
bGVlQXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NChhcmdHUFIsIGNhbGxlZUFyZ3VtZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1l
bnQpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlz
LCBjYWxsZWVFZGdlKTsKQEAgLTQyMzEsNiArNDMyNSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKQEAgLTQzMzgsOSArNDQzNSwyMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2pp
dC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBERkdfQVNTRVJUKG1faml0Lmdy
YXBoKCksIG5vZGUsICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAg
ICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Mobm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+a2luZCkpIHsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSwKKyAgICAgICAg
ICAgICAgICByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVy
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJl
Z2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5z
dWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KICAgICAgICAgaW50
MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDM1
NCwyMCArNDQ2MiwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7CiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKAogICAgICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMSkpKSwKICAgICAgICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50
UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVy
OworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgLy8gRklYTUU6IHRoZSBzbG93IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJm
b3JtIGEgZm9yd2FyZCBzcGVjdWxhdGlvbiB0aGF0IHRoZQotICAgICAgICAvLyByZXN1bHQgaXMg
YW4gaW50ZWdlci4gRm9yIG5vdyB3ZSBwb3N0cG9uZSB0aGUgc3BlY3VsYXRpb24gYnkgaGF2aW5n
IHRoaXMgcmV0dXJuCi0gICAgICAgIC8vIGEgSlNWYWx1ZS4KLSAgICAgICAgCiAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAg
ICAgICAgIGNyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aCwgcmVzdWx0
R1BSLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5
b3V0UGhhc2UuY3BwCShyZXZpc2lvbiAxNzk4NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgQml0VmVjdG9yIHVzZWRMb2NhbHM7CiAgICAgICAgIAogICAgICAg
ICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCi0gICAg
ICAgIGJvb2wgaGFzR2V0TG9jYWxVbmxpbmtlZCA9IGZhbHNlOworICAgICAgICBib29sIGhhc05v
ZGVzVGhhdE5lZWRGaXh1cCA9IGZhbHNlOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAg
ICAgIGlmICghYmxvY2spCkBAIC04MSw3ICs4MSwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChvcGVyYW5kLnRvTG9j
YWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0dldExvY2FsVW5saW5rZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAg
ICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0
eSBvZiBzdGFjayBsYXlvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRz
LgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5z
dGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0
YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB9
IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KKyAgICAgICAgICAgICAgICAgICAg
aGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTE0OCwyNCArMTYz
LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5U
X01BWCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0g
ICAgICAgICAgICAgICAgYWxsb2NhdGlvblt2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCldKTsK
KyAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0aW9u
LCB2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChj
b2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAg
ICAgICAgICBhbGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpLnRvTG9j
YWwoKV0pOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0K
KyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFyZ3VtZW50
c1JlZ2lzdGVyKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblsKLSAgICAgICAgICAgICAgICAg
ICAgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLnRvTG9jYWwoKV0pCisgICAgICAgICAg
ICAgICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2Rl
QmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgICAgICAgICAgPT0gdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICBj
b2RlQmxvY2soKS0+c2V0QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCktPnVuY2hlY2tlZEFjdGl2
YXRpb25SZWdpc3RlcigpLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNl
dEFjdGl2YXRpb25SZWdpc3RlcigKLSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChhbGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS50b0xvY2Fs
KCldKSk7CisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5h
Y3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBU
aGlzIHJlZ2lzdGVyIGlzIG5ldmVyIHZhbGlkIGZvciBERkcgY29kZSBibG9ja3MuCkBAIC0xNzYs
MTIgKzE4OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLT51c2VzQXJndW1lbnRzKCkpIHsK
LSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyID0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bbV9n
cmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpLnRvTG9jYWwoKV0pOwor
ICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSBhc3Np
Z24oCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIG1fZ3JhcGguYXJndW1lbnRzUmVn
aXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCgKLSAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2Nh
dGlvblt1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpLnRvTG9jYWwo
KV0pCisgICAgICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJh
bWUpKSkKICAgICAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtMjI3LDkgKzIzOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCkpOwogICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBzeW1ib2xUYWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgaS0tOykgewogICAgICAg
ICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldID0gc2xvd0FyZ3VtZW50c1tpXTsKLSAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IFZpcnR1YWxSZWdpc3Rlcihz
bG93QXJndW1lbnRzW2ldLmluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZy5pc0xv
Y2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmluZGV4
ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltyZWcudG9Mb2NhbCgpXSkub2Zm
c2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBh
c3NpZ24oYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKHNsb3dBcmd1bWV0c1tpXS5pbmRleCkp
Lm9mZnNldCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKG5ld1Nsb3dBcmd1bWVudHMp
OwpAQCAtMjM3LDcgKzI0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gRml4IEdldExvY2FsVW5saW5rZWQncyB2YXJpYWJsZSByZWZlcmVuY2VzLgotICAgICAg
ICBpZiAoaGFzR2V0TG9jYWxVbmxpbmtlZCkgeworICAgICAgICBpZiAoaGFzTm9kZXNUaGF0TmVl
ZEZpeHVwKSB7CiAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFibG9jaykKQEAgLTI0NiwxMCArMjU1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbFVubGlua2VkOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IG5vZGUtPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvcGVyYW5kLmlzTG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltvcGVyYW5kLnRvTG9jYWwo
KV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9j
YWwob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1h
Y2hpbmVMb2NhbChhc3NpZ24oYWxsb2NhdGlvbiwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFy
Z3M6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5v
ZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFj
aGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRh
LT5zdGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yNjIsNiArMjc1LDIwIEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9j
YXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0ID0gc3JjOworICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgp
XTsKKyAgICAgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIH07CiAKIGJvb2wg
cGVyZm9ybVN0YWNrTGF5b3V0KEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3OTg2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMTksNiArMTE5LDkgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KE5vZGUqIAogICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKICAgICBjYXNlIENh
bGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2
ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5ODYsOCArMTk4NiwyMiBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgY2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKCk7CiAKLSAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBzZXRJbnQzMihtX291dC5hZGQobV9vdXQubG9h
ZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSksIG1fb3V0
LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIGlmIChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJn
cyhtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUta2luZCkpIHsKKyAgICAg
ICAgICAgIHNldEludDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoCisgICAg
ICAgICAgICAgICAgICAgIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBh
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRD
b3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJl
Z2lzdGVyID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBzZXRJbnQzMigKKyAgICAgICAgICAgICAgICBt
X291dC5hZGQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBh
eWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksCisgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAxNzk4NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElu
bGluZWRGcmFtZShDYWxsCiAKICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFt
ZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsK
LSAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgbV9mcmFtZS5tX2Fy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICBtX2ZyYW1lLm1fY29k
ZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpOwogICAgICAgICBt
X2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQgPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlz
aW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICszMzgsMTAgQEAgcHVibGljOgogICAgIH0KICAg
ICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIpCiAgICAgeworICAgICAgICAvLyBOQi4gSXQncyB0ZW1wdGluZyBvbiBzb21lIGFyY2hpdGVj
dHVyZXMgdG8gc29tZXRpbWVzIHVzZSBhbiBvZmZzZXQgZnJvbSB0aGUgc3RhY2sKKyAgICAgICAg
Ly8gcmVnaXN0ZXIgYmVjYXVzZSBmb3Igc29tZSBvZmZzZXRzIHRoYXQgd2lsbCBlbmNvZGUgdG8g
YSBzbWFsbGVyIGluc3RydWN0aW9uLiBCdXQgd2UKKyAgICAgICAgLy8gY2Fubm90IGRvIHRoaXMu
IFdlIHVzZSB0aGlzIGluIHBsYWNlcyB3aGVyZSB0aGUgc3RhY2sgcG9pbnRlciBoYXMgYmVlbiBt
b3ZlZCB0byBzb21lCisgICAgICAgIC8vIHVucHJlZGljdGFibGUgbG9jYXRpb24uCiAgICAgICAg
IEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDE3OTg2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDExICs0NjQsNiBAQCBDb21waWxhdGlvblJlc3VsdCBK
SVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQg
PSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgREZHOjpDYW5JbmxpbmU6Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7Ci0g
ICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwogICAg
IGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5l
OgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChPcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKE9wY29kZUlELCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgICAgIHZvaWQgY29tcGlsZVNl
dHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgY29tcGlsZVNldHVw
VmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiwgQ2FsbExpbmtJbmZvKik7CiAgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTc5ODYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZVNl
dHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21w
aWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYWxsTGlua0lu
Zm8qIGluZm8pCiB7CiAgICAgaW50IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKICAgICBpbnQgYXJndW1lbnRzID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtODgs
NiArODgsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cgogICAg
IGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgZW5kLmxpbmsodGhpcyk7CiAgICAgCisgICAgLy8g
UHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
ICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKKyAgICBsb2FkOCgmaW5mby0+bWF4TnVtQXJndW1l
bnRzLCByZWdUMCk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1Qw
LCByZWdUMik7CisgICAgSnVtcCBub3RTYXR1cmF0ZWQgPSBicmFuY2gzMihCZWxvd09yRXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoMjU1KSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoMjU1KSwg
cmVnVDIpOworICAgIG5vdFNhdHVyYXRlZC5saW5rKHRoaXMpOworICAgIHN0b3JlOChyZWdUMiwg
JmluZm8tPm1heE51bUFyZ3VtZW50cyk7CisgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOworICAg
IAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1ZhbHVlLCByZWdUMCk7CiAgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgQ2Fs
bEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKQEAgLTEzMiw3ICsxNDIsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoSW5zdHJ1CiAKIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29k
ZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KQogewotICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOworCisgICAg
IGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKICAgICAvKiBDYWxsZXIg
YWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNh
bGxGcmFtZS4KQEAgLTE1MCw3ICsxNjIsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bj
b2RlSUQgb3Bjb2RlSQogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkg
PT0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nf
b3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVf
TEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBj
YWxsX2FuZF9jb25zdHJ1Y3RfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MpCis8PDw8PDw8IC5taW5lCisgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJn
cyhpbnN0cnVjdGlvbiwgaW5mbyk7Cis9PT09PT09CiAgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFy
Z3NGcmFtZShpbnN0cnVjdGlvbik7Cis+Pj4+Pj4+IC5yMTc5ODYyCiAgICAgZWxzZSB7CiAgICAg
ICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE3NCw5ICsx
OTAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxs
ZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbygpOwotCi0gICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkg
eworICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2Fs
bEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE3OTg2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIEFyZ3VtZW50
cyogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxBcmd1bWVudHNDcmVh
dGlvbk1vZGUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdp
c3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoaW5saW5lQ2FsbEZyYW1lKSkp
IEFyZ3VtZW50cyhjYWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxp
bmVSZWdpc3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoY2FsbEZyYW1lLCBp
bmxpbmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50
cy0+ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUsIG1vZGUpOwogICAg
ICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KQEAgLTEyNCw3ICsxMjQsMTUgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShFeGVjU3RhdGUq
KTsKIAogICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFt
ZSogY2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyB9Ci0gICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFy
cmF5U2l6ZUluQnl0ZXMoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsgcmV0dXJu
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSAtIDEpOyB9CisgICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUlu
Qnl0ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1Zh
bGlkKCkpCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFt
ZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5i
b3hlZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpCisgICAgICAgIHJl
dHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDEpOworICAgIH0KICAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90KTsKICAgICBi
b29sIHRyeVNldEFyZ3VtZW50KFZNJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlKTsKICAgICBK
U1ZhbHVlIHRyeUdldEFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCk7CkBAIC0zNDAsMTEgKzM0OCwx
NSBAQCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgbV9vdmVy
cm9kZUNhbGxlZSA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsKICAgICBt
X2lzU3RyaWN0TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJh
bWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKLQorICAgIAorICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAg
IG1fbnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICBlbHNlCisgICAgICAg
IG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAg
IG1fbnVtQXJndW1lbnRzLS07CisgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBO
b3JtYWxBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICAKICAgICAgICAg
aWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRP
bmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JB
cmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpAQCAt
MzYxLDcgKzM3Myw2IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7
Ci0gICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMTsKICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQg
b2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0
dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRl
cnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDEpLm9mZnNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkocmV2aXNpb24gMTc5ODYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDggQEAgdHlwZWRlZiBjb25zdCBj
aGFyKiBvcHRpb25TdHJpbmc7CiAgICAgLyogZnJvbSBzdXBlciBsb25nIGNvbXBpbGVzIHRoYXQg
dGFrZSBhIGxvdCBvZiBtZW1vcnkuICovXAogICAgIHYodW5zaWduZWQsIG1heGltdW1Jbmxpbmlu
Z0NhbGxlclNpemUsIDEwMDAwKSBcCiAgICAgXAorICAgIHYodW5zaWduZWQsIG1heGltdW1WYXJh
cmdzRm9ySW5saW5pbmcsIDEwMCkgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJp
YW50Q2FsbElubGluaW5nLCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudEJ5
SWRJbmxpbmluZywgdHJ1ZSkgXAogICAgIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246349</attachid>
            <date>2015-02-10 15:45:42 -0800</date>
            <delta_ts>2015-02-10 16:48:36 -0800</delta_ts>
            <desc>DFG 64-bit CallVarargs done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74325</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgQ2FsbExp
bmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgICAgICwgaGFzU2VlblNob3VsZFJlcGF0
Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2VlbkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2Fs
bFR5cGUoTm9uZSkKKyAgICAgICAgLCBtYXhOdW1Bcmd1bWVudHMoMCkKICAgICAgICAgLCBzbG93
UGF0aENvdW50KDApCiAgICAgewogICAgIH0KQEAgLTg3LDYgKzg4LDcgQEAgc3RydWN0IENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAx
OwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBj
YWxsZWVHUFIgOiA4OworICAgIHVpbnQ4X3QgbWF4TnVtQXJndW1lbnRzOyAvLyBPbmx5IHVzZWQg
Zm9yIHZhcmFyZ3MgY2FsbHMuCiAgICAgdWludDMyX3Qgc2xvd1BhdGhDb3VudDsKICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTc5ODg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDcgKzEyOSw5IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzLCBidXQgYW55dGltZSB3ZSBo
YXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQgYmVjb21lcyBpbmRpc3BlbnNhYmxlLgogICAgIFVO
VVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZyb21D
YWxsTGlua0luZm8obG9ja2VyLCBjYWxsTGlua0luZm8pOworICAgIENhbGxMaW5rU3RhdHVzIHJl
c3VsdCA9IGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAg
ICByZXN1bHQubV9tYXhOdW1Bcmd1bWVudHMgPSBjYWxsTGlua0luZm8ubWF4TnVtQXJndW1lbnRz
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKQEAgLTI5MSw2ICsyOTMsMTMgQEAgQ2FsbExpbmtT
dGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogICAgIHJldHVybiBjb21wdXRlRm9yKHBy
b2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgYmFzZWxpbmVNYXApOwogfQog
Cit2b2lkIENhbGxMaW5rU3RhdHVzOjpzZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFu
dCB2YXJpYW50KQoreworICAgIG1fdmFyaWFudHMgPSBDYWxsVmFyaWFudExpc3R7IHZhcmlhbnQg
fTsKKyAgICBtX2NvdWxkVGFrZVNsb3dQYXRoID0gZmFsc2U7CisgICAgbV9pc1Byb3ZlZCA9IHRy
dWU7Cit9CisKIGJvb2wgQ2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb25zdAogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2
aXNpb24gMTc5ODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAotICAgIENhbGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJv
dmVkKQotICAgIHsKLSAgICAgICAgbV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRl
Rm9yKAogICAgICAgICBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBD
YWxsTGlua0luZm9NYXAmKTsKIApAQCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9y
aWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAor
ICAgIHZvaWQgc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9j
b3VsZFRha2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWlzU2V0KCk7IH0KQEAgLTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVl
IGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIAorICAgIGJvb2wgbWF4TnVtQXJndW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhOdW1Bcmd1bWVudHM7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CkBAIC0xMzcsNiArMTM1LDcgQEAgcHJp
dmF0ZToKICAgICBDYWxsVmFyaWFudExpc3QgbV92YXJpYW50czsKICAgICBib29sIG1fY291bGRU
YWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lzUHJvdmVkOworICAgIHVuc2lnbmVkIG1fbWF4TnVt
QXJndW1lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE3OTg4NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMSw2ICsxMjEsOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtp
bmQgewogICAgICAgICBDYWxsLAogICAgICAgICBDb25zdHJ1Y3QsCisgICAgICAgIENhbGxWYXJh
cmdzLAorICAgICAgICBDb25zdHJ1Y3RWYXJhcmdzLAogICAgICAgICAKICAgICAgICAgLy8gRm9y
IHRoZXNlLCB0aGUgc3RhY2tPZmZzZXQgaW5jb3Jwb3JhdGVzIHRoZSBhcmd1bWVudCBjb3VudCBw
bHVzIHRoZSB0cnVlIHJldHVybiBQQwogICAgICAgICAvLyBzbG90LgpAQCAtMTQwLDI1ICsxNDIs
MzkgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgICAgIHJldHVybiBDYWxsOwogICAg
IH0KICAgICAKKyAgICBzdGF0aWMgS2luZCB2YXJhcmdzS2luZEZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgIHJldHVybiBDYWxsVmFyYXJnczsKKyAgICAgICAg
Y2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdFZhcmFy
Z3M7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIENhbGw7CisgICAgfQorICAgIAogICAgIHN0YXRpYyBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZEZvcihLaW5kIGtpbmQpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENhbGxW
YXJhcmdzOgogICAgICAgICBjYXNlIEdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgU2V0dGVyQ2Fs
bDoKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiBD
b2RlRm9yQ29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICB9CiAgICAgCi0gICAg
c3RhdGljIGJvb2wgaXNOb3JtYWxDYWxsKEtpbmQga2luZCkKKyAgICBzdGF0aWMgYm9vbCBpc1Zh
cmFyZ3MoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAg
IGNhc2UgQ2FsbDoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTcxLDEwICsxODcsMTEgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9yaWdp
biBjYWxsZXI7CiAgICAgQml0VmVjdG9yIGNhcHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUg
bWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFibGUgbnVtYmVyaW5nLgogCi0gICAgc2lnbmVkIHN0
YWNrT2Zmc2V0IDogMjk7Ci0gICAgdW5zaWduZWQga2luZCA6IDI7IC8vIHJlYWwgdHlwZSBpcyBL
aW5kCisgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CisgICAgdW5zaWduZWQga2luZCA6IDM7
IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYg
ZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRo
ZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJl
IHJlY292ZXJlZCBtYW51YWxseS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0
ZXI7IC8vIFRoaXMgaXMgb25seSBzZXQgaWYgdGhlIGNvZGUgdXNlcyBhcmd1bWVudHMuIFRoZSB1
bm1vZGlmaWVkIGFyZ3VtZW50cyByZWdpc3RlciBmb2xsb3dzIHRoZSB1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoKSBjb252ZW50aW9uIChzZWUgQ29kZUJsb2NrLmgpLgorICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7IC8vIE9ubHkgc2V0IHdoZW4gd2UgaW5saW5l
IGEgdmFyYXJncyBjYWxsLgogICAgIAogICAgIC8vIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG5v
dGlvbiBvZiBhICJkZWZhdWx0IiBzZXQgb2YgdmFsdWVzIGZvcgogICAgIC8vIElubGluZUNhbGxG
cmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNv
bmZ1c2lvbiBpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5ODg3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52
YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKLSAgICAgICAg
QVNTRVJUKHZhbHVlLmlzSGVhcFRvcCgpKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0NsZWFy
KCkpOwogICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2YWx1
ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgp
KSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEZpbHRyYXRpb25P
Syk7CkBAIC0yMDMsOSArMjAzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgICAg
IC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LgotICAg
ICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9m
IGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9uZSBz
ZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1cnJl
bnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAgLy8gbm9uLWNsZWFy
IHZhbHVlLgorICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2Rl
LT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2Fz
ZSBMb2FkVmFyYXJnczogeworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5k
KGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5v
cGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBC
aXRPcjoKQEAgLTEzMTUsNyArMTMyNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRo
aXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAgICAv
LyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBp
cyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIg
b3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6
aXNWYXJhcmdzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7
CiAgICAgICAgICAgICBzZXRDb25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJl
cihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMSkpOwogICAgICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0
ZW5kIHRoYXQgd2UgY2xvYmJlcmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KQEAgLTE5
NjQsNiArMTk3Niw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRp
dmVDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwMyw2ICs1MDMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBCdXQgb25seSBhZnRlciB3ZSBo
YXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBub2JvZHkgaGFzIGVzY2Fw
ZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgy
LDE0ICsxODIsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFy
Z0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzKTsKICAgICB2b2lkIGhh
bmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQs
IHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQg
cmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5v
ZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB2b2lkIGhhbmRsZVZhcmFy
Z3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOwogICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxs
VGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAg
IHZvaWQgdW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50KTsKICAgICB2b2lkIGVtaXRBcmd1
bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxpbmluZ0Nv
c3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7IC8vIFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmlu
ZyBjYW5kaWRhdGUuIEJ5IGNvbnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4K
ICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFs
c2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3Rh
dHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpL
aW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5n
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtT
dGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQs
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQs
IE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKTsKICAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1h
bExpbmtpbmcsIENhbGxlckxpbmtzTWFudWFsbHkgfTsKLSAgICBib29sIGF0dGVtcHRUb0lubGlu
ZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFu
dCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVu
c2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxp
dHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2Up
OworICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50
IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxS
ZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0
eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSk7
CiAgICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3Bl
cmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQs
IENhbGxlckxpbmthYmlsaXR5KTsKICAgICB2b2lkIGNhbmNlbExpbmtpbmdGb3JCbG9jayhJbmxp
bmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAvLyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdpdmVu
IGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5saW5l
IHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4g
dHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgpA
QCAtNjkxLDcgKzY5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBvcCwgb3BJbmZvLCBjYWxs
ZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOwor
ICAgICAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwog
ICAgIH0KICAgICAKQEAgLTEwNDMsNyArMTA0NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNhbGwoCiAgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIAogICAgIGlm
IChjYWxsVGFyZ2V0LT5oYXNDb25zdGFudCgpKQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENh
bGxMaW5rU3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsK
KyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoY2FsbFRhcmdl
dC0+YXNKU1ZhbHVlKCkpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNv
ZGVQYXJzaW5nKCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBIYW5kbGluZyBjYWxsIGF0ICIsIGN1
cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKQEAgLTEwNjAs
NyArMTA2MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgCiAgICAg
T3BJbmZvIGNhbGxPcEluZm87CiAgICAgCi0gICAgaWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJn
ZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwgb3AsIGtpbmQsIHByZWRpY3Rpb24pKSB7CisgICAg
aWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJl
Z2lzdGVyT2Zmc2V0LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNl
dCksIFZpcnR1YWxSZWdpc3RlcigpLCAwLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4
dE9mZnNldCwgb3AsIGtpbmQsIHByZWRpY3Rpb24pKSB7CiAgICAgICAgIGlmIChtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlu
bGluZWRDYWxsKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwODgsMTEgKzEwODksNDggQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNh
bGxPcEluZm8sIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rl
ck9mZnNldCwgcHJlZGljdGlvbik7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5j
dGlvbkNoZWNrcyhDYWxsVmFyaWFudCBjYWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdp
c3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCkKK3sKKyAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxs
X3ZhcmFyZ3MpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpKTsKKyAgICAK
KyAgICBpbnQgcmVzdWx0ID0gcGNbMV0udS5vcGVyYW5kOworICAgIGludCBjYWxsZWUgPSBwY1sy
XS51Lm9wZXJhbmQ7CisgICAgaW50IHRoaXNSZWcgPSBwY1szXS51Lm9wZXJhbmQ7CisgICAgaW50
IGFyZ3VtZW50cyA9IHBjWzRdLnUub3BlcmFuZDsKKyAgICBpbnQgZmlyc3RGcmVlUmVnID0gcGNb
NV0udS5vcGVyYW5kOworICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IHBjWzZdLnUub3BlcmFu
ZDsKKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigp
OworICAgIAorICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxl
ZSkpOworICAgIAorICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsTGlua0luZm9zLCBtX2NhbGxDb250ZXh0TWFwKTsKKyAgICBpZiAoY2FsbFRhcmdldC0+aGFz
Q29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJvdmVuQ29uc3RhbnRDYWxs
ZWUoY2FsbFRhcmdldC0+YXNKU1ZhbHVlKCkpOworICAgIAorICAgIGlmIChjYWxsTGlua1N0YXR1
cy5jYW5PcHRpbWl6ZSgpCisgICAgICAgICYmIGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJl
c3VsdCwgY2FsbExpbmtTdGF0dXMsIGZpcnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNS
ZWcpLCBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1f
Y3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5l
Q2FsbEZyYW1lOjp2YXJhcmdzS2luZEZvcihraW5kKSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAg
aWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRp
b24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsKKyAg
ICBkYXRhLT5maXJzdFZhckFyZ09mZnNldCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgIAorICAg
IE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgY2FsbFRhcmdldCwgZ2V0KHRoaXNSZWcpLCBnZXQoYXJndW1lbnRzKSk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOworICAgIGlmIChyZXN1bHRSZWcuaXNWYWxp
ZCgpKQorICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKK30KKwordm9pZCBCeXRlQ29kZVBh
cnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRh
cmdldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudFJlZywgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQogewogICAgIE5vZGUqIHRoaXNBcmd1bWVudDsKLSAgICBpZiAoa2luZCA9PSBD
b2RlRm9yQ2FsbCkKLSAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgaWYgKHRoaXNBcmd1bWVudFJlZy5p
c1ZhbGlkKCkpCisgICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh0aGlzQXJndW1lbnRSZWcpOyB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgZWxzZQog
ICAgICAgICB0aGlzQXJndW1lbnQgPSAwOwogCkBAIC0xMzU2LDcgKzEzOTQsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpjYW5jZWxMaW5raW5nRm9yQmxvCiAgICAgfQogfQogCi1ib29sIEJ5dGVD
b2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQg
cmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlKQor
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0
Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBr
aW5kLCBDYWxsZXJMaW5rYWJpbGl0eSBjYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSkKIHsKICAgICBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lh
bGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIApAQCAtMTM5Myw3ICsxNDMxLDExIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0
dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1
bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2lu
ZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoCisgICAgTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVy
YW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsCisgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCisg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRh
dGFMb2coIkhhbmRsaW5nIGlubGluaW5nLi4uXG4iKTsKQEAgLTE0MDcsNiArMTQ0OSwxMyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgCisgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtp
bmQpCisgICAgICAgICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9u
czo6bWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZygpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZhcmFyZ3Mu
XG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAgdW5zaWdu
ZWQgaW5saW5pbmdCYWxhbmNlID0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGlu
ZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QpCiAgICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0ZDo6bWlu
KGlubGluaW5nQmFsYW5jZSwgT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5s
aW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpKTsKQEAgLTE0MTcsMTAgKzE0NjYsNjIgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNpbXBsaWZp
Y2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGltZXMsIGJ1
dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUgd2UgZG9u
J3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4KICAgICBp
ZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtTdGF0dXMu
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAgICAgICAg
Y2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lh
bGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVz
WzBdLCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50LCBzcGVjaWFsaXphdGlvbktpbmQpOwor
CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldDsKKworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
dmFyYXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFyZ3VtZW50cyByaWdodCBub3cu
CisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgbWFuZGF0b3J5TWluaW11bTsgLy8gZXhjbHVkZXMgInRoaXMiCisgICAg
ICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBjYWxs
TGlua1N0YXR1c1swXS5mdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICBtYW5k
YXRvcnlNaW5pbXVtID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBpbmNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIHVu
c2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IG1heCgKKyAgICAgICAgICAgICAgICBjYWxsTGlua1N0
YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVt
ICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0
ZXJPZmZzZXRPckZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAt
PSBtYXhOdW1Bcmd1bWVudHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAg
ICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9m
ZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKKyAg
ICAgICAgICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQgKyAx
KTsKKyAgICAgICAgICAgIGRhdGEtPmNvdW50ID0gVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBkYXRhLT5vZmZzZXQg
PSBhcmd1bWVudHNPZmZzZXQ7CisgICAgICAgICAgICBkYXRhLT5saW1pdCA9IG1heE51bUFyZ3Vt
ZW50czsKKyAgICAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5p
bXVtOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBP
cEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBJbiBERkcgSVIgYmVmb3JlIFNTQSwgd2UgY2Fubm90IGluc2VydCBjb250cm9s
IGZsb3cgYmV0d2VlbiBhZnRlciB0aGUKKyAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCB0
aGUgbGFzdCBTZXRBcmd1bWVudC4gVGhpcyBpc24ndCBhIHByb2JsZW0gb25jZSB3ZSBnZXQgdG8g
REZHCisgICAgICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIg
cmVhc29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKKyAgICAgICAgICAgIC8vIGJl
Zm9yZSBTU0EuCisKKyAgICAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZz
ZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5h
a2VkU2V0KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVu
dCA8IG1heE51bUFyZ3VtZW50czsgKythcmd1bWVudCkgeworICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0ICsgYXJndW1lbnQpLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0
cnVlKTsgLy8gV2UgY3VycmVudGx5IGhhdmUgbm93aGVyZSB0byBwdXQgdGhlIHR5cGUgY2hlY2sg
b24gdGhlIExvYWRWYXJhcmdzLiBXZSBjb3VsZCBmaXggdGhpcyBieSBoYXZpbmcgU2V0QXJndW1l
bnQgZG8gdGhlIGFyZ3VtZW50IGNoZWNrcy4KKyAgICAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1
bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZWV0ID0gcmVnaXN0ZXJP
ZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gYXR0
ZW1wdFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVy
YW5kLCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAgICAgICBjYWxs
VGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zm
c2V0LCB0aGlzQXJndW1lbnQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIHByZWRpY3Rpb24s
CiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UpOwogICAgICAgICBpZiAoIXJlc3VsdCAmJiAh
Y2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkKQEAgLTE0MzcsMTEgKzE1MzgsOSBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gZG8gbW9yZSBkZXRhaWxl
ZCBwb2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7IGFuZCBzZWNvbmQsIGl0IHJlZHVj
ZXMgY29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcuIEFuZCBieSBwb2x5dmFyaWFudCBw
cm9maWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxpbmcgb2YgKnRoaXMqIGNhbGwuIE5v
dGUgdGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhhdCBhc3BlY3Qgb2YgdGhpcyBieSBk
b2luZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5nIHRoZSBwcm9maWxpbmcKLSAgICAv
LyBhbHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhpcywgYnV0IGl0IGNvdWxkIGJlIGlu
dGVyZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5nIGEKLSAgICAvLyBzZXBhcmF0ZSBu
b2RlIGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdGhl
IG5vdGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9maWxpbmcgbm9kZS4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDMzCi0gICAgaWYgKCFp
c0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWND
YWxsSW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1f
cGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcoKQor
ICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgewogICAgICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyAoaGFy
ZCkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiXG4iKTsKQEAgLTE0ODIsNiArMTU4MSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2Rl
T3JpZ2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBy
ZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAogICAgIC8vIFRoaXMgbWFrZXMgbWUg
d2lzaCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGltZS4gV2UgbmVlZCB0byBwaWNrIGEg
dmFyaWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3JlIHRoZSBjYWxsZWUgc28gdGhhdCBp
dCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBibG9ja3Mgd2UncmUgYWJvdXQgdG8g
Y3JlYXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9pbmcgYW4gaW1tZWRpYXRlLXNldCBo
ZXJlIGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3JtZWQgYW55IHNpZGUgZWZmZWN0cwpA
QCAtMTUyNCw3ICsxNjI1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
Tm9kZQogICAgICAgICBOb2RlKiBteUNhbGxUYXJnZXROb2RlID0gZ2V0RGlyZWN0KGNhbGxlZVJl
Zyk7CiAgICAgICAgIAogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0ZW1wdFRvSW5s
aW5lQ2FsbCgKLSAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNh
bGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAgICAgIG15Q2FsbFRhcmdl
dE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwg
dGhpc0FyZ3VtZW50LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIENhbGxlckxpbmtzTWFudWFsbHksIHByZWRpY3Rpb24sCiAgICAgICAg
ICAgICBpbmxpbmluZ0JhbGFuY2UpOwogICAgICAgICAKQEAgLTMxMTMsNDMgKzMyMTQsNzAgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaW50
IHRoaXNSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBpbnQgZmlyc3RGcmVlUmVnID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2
XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxs
RnJhbWUoKSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFyZ3VtZW50cywgYXJndW1lbnRz
ID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9m
ZnNldCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7Ci0KLSAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKLQotICAgICAgICAgICAgdW5zaWduZWQg
YXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LiBX
ZSBzdGFydCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAotICAgICAgICAgICAgLy8g
dGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4KLSAg
ICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7Ci0gICAgICAg
ICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBwYXNzaW5nIHNv
bWUgYXJndW1lbnRzLgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1l
IGhlYWRlci4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHRoZSBhbGlnbm1lbnQg
cmlnaHQuCi0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRp
cGxlT2YoCi0gICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKLSAgICAg
ICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwotCi0gICAgICAgICAgICBlbnN1cmVMb2NhbHMo
Ci0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAotICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkp
OworICAgICAgICAgICAgaWYgKGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQorICAgICAgICAgICAg
ICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xv
d0FyZ3VtZW50cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpCisg
ICAgICAgICAgICAgICAgICAgICYmICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhpbmxpbmVD
YWxsRnJhbWUoKS0+a2luZCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWZpcnN0VmFyQXJnT2Zm
c2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RD
cmVhdGVkKTsKKworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGlubGlu
ZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIC8vIExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9mZnNldC4gV2Ugc3RhcnQg
d2l0aCB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgLy8g
dGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4KKyAg
ICAgICAgICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gZmlyc3RGcmVlUmVnICsgMTsK
KyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gYXJnQ291bnQ7IC8vIFdlIHdp
bGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0
ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhlYWRlci4KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KKyAgICAgICAgICAgICAgICAg
ICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisKKyAgICAgICAgICAgICAgICAgICAgZW5zdXJl
TG9jYWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdp
c3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0IGhhdmUgc2V0IHVwIHRoZSBhcmd1bWVudHMuIEJ1
dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAorICAgICAgICAgICAgICAgICAgICAvLyBsb29rIGxp
a2UgdGhlIGJ5dGVjb2RlIGhhZCBkb25lIGl0LgorICAgICAgICAgICAgICAgICAgICBpbnQgbmV4
dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3Rlcisr
KSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwg
YXJnQ291bnQ7ICsrYXJndW1lbnQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVDYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBD
YWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAg
ICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBFbWl0IENhbGxG
b3J3YXJkVmFyYXJncworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1lYW5zIHdlIGNh
bm5vdCBpbmxpbmUgZm9yd2FyZGVkIHZhcmFyZ3MgY2FsbHMgaW5zaWRlIGEgdmFyYXJncworICAg
ICAgICAgICAgICAgIC8vIGNhbGwgZnJhbWUuIFdlIHdpbGwgcHJvYmFibHkgZml4IHRoYXQgb25j
ZSB3ZSBmaW5hbGx5IGdldCByaWQgb2YgdGhlCisgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRz
IG9iamVjdCBzcGVjaWFsLWNhc2luZy4KKyAgICAgICAgICAgICAgICBDYWxsVmFyYXJnc0RhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOworICAgICAgICAgICAgICAg
IGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgoCisgICAgICAg
ICAgICAgICAgICAgIENhbGxGb3J3YXJkVmFyYXJncywgT3BJbmZvKGRhdGEpLCBPcEluZm8oZ2V0
UHJlZGljdGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0KGNhbGxlZSksIGdldCh0aGlz
UmVnKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQp
OworICAgICAgICAgICAgICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBUaGUgYnl0ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4g
QnV0IHdlJ2xsIGRvIGl0IGFuZCBtYWtlIGl0Ci0gICAgICAgICAgICAvLyBsb29rIGxpa2UgdGhl
IGJ5dGVjb2RlIGhhZCBkb25lIGl0LgotICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJl
Z2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVhbFJlZ2lzdGVy
KHRoaXNSZWcpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCi0gICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGhhbmRsZUNhbGwoCi0gICAgICAgICAgICAgICAgcmVzdWx0
LCBDYWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAotICAg
ICAgICAgICAgICAgIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAg
ICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbFZhcmFyZ3MsIENv
ZGVGb3JDYWxsKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdz
OiB7CisgICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENv
bnN0cnVjdFZhcmFyZ3MsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfY29uc3RydWN0X3ZhcmFyZ3MpOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICAgICAgICAgIC8vIFN0YXRpY2FsbHkgc3BlY3VsYXRl
IGZvciBub3cuIEl0IG1ha2VzIHNlbnNlIHRvIGxldCBzcGVjdWxhdGUtb25seSBqbmVxX3B0cgog
ICAgICAgICAgICAgLy8gc3VwcG9ydCBzaW1tZXIgZm9yIGEgd2hpbGUgYmVmb3JlIG1ha2luZyBp
dCBtb3JlIGdlbmVyYWwsIHNpbmNlIGl0J3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xODIsNiArMTgyLDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlM
ZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgogICAgIGNhc2Ug
b3BfY2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2Ugb3BfaW5pdF9sYXp5
X3JlZzoKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF90ZWFyX29m
Zl9hcmd1bWVudHM6CkBAIC0yMjMsMTQgKzIyNSw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAg
ICAgfQogCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAgICAgIGlmIChjb2RlQmxvY2st
PnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVu
dHNSZWdpc3RlcigpLm9mZnNldCgpCi0gICAgICAgICAgICAmJiAhcGNbNl0udS5vcGVyYW5kKQot
ICAgICAgICAgICAgcmV0dXJuIENhbklubGluZTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBoYW5kbGUgdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNzYyNgotICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLQogICAgIGNh
c2Ugb3BfbmV3X3JlZ2V4cDogCiAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVu
dDoKICAgICBjYXNlIG9wX25ld19mdW5jOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTg2LDggKzg2LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBmdW5jdGlvbkNhcGFi
aWxpdAogICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbkNvbXBpbGVBbmRJbmxpbmUs
IGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKICAgICBpZiAobWlnaHRDb21waWxlICYmICFtaWdo
dElubGluZSkKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5Db21waWxlLCBjb21w
dXRlZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENvbXBpbGUgJiYgbWlnaHRJbmxp
bmUpCi0gICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2FuSW5saW5lLCBjb21wdXRlZENh
cGFiaWxpdHlMZXZlbCk7CiAgICAgaWYgKCFtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQog
ICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNiArMzY1LDkgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2Ug
TmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJh
cmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2UgSW46CiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50c0xlbmd0aFNhZmU6CkBAIC00MDEsNiArNDA0LDEzIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJp
YWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CisgICAgICAgIC8vIFRoaXMgYWN0dWFsbHkgd3JpdGVzIHRvIGxvY2FsIHZhcmlh
YmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBpdCByZWFkcyB0aGUgYXJyYXksIGl0IGRvZXMKKyAgICAg
ICAgLy8gc28gaW4gYSB3YXkgdGhhdCBtYXkgdHJpZ2dlciBnZXR0ZXJzIG9yIHZhcmlvdXMgdHJh
cHMuCisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIHJl
YWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CiAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5ODg3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Miw3ICsyOTIsNiBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0gQ2FwYWJpbGl0eUxldmVsIHsK
ICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwKICAgICBDYW5Db21waWxlLAogICAg
IENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxldmVsTm90U2V0CkBAIC0zMTIs
NyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBhYmlsaXR5TGV2ZWwgbAogaW5s
aW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZlbCkKIHsKICAgICBzd2l0Y2gg
KGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2FzZSBDYW5Db21waWxlQW5kSW5s
aW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMzI1LDE0ICszMjMs
NiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJCb3VuZChDCiAgICAgc3dpdGNo
IChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAgICByZXR1cm4gQ2Fubm90Q29t
cGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dpdGNoIChiKSB7Ci0gICAgICAg
IGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6Ci0gICAg
ICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBjYXNlIENhbkNvbXBpbGU6CiAg
ICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNvbXBpbGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzk4ODcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw2ICsxMTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0
cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
KyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAg
IGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIEJy
ZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgyMiw2ICs4MjIsNyBAQCBwdWJsaWM6CiAgICAgQmFnPE11bHRpR2V0QnlP
ZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1dEJ5T2Zm
c2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8T2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOworICAgIEJhcjxDYWxsVmFy
YXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURh
dGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwog
ICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTc5ODg3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2
ICsxMjIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAgICAg
ICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3
byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAg
ICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQb2lu
dGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogI2lmIENQVShYODYpCiAgICAg
ICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZSBjYWxsIGFic3RyYWN0aW9uLCBidXQgdGhpcyBp
cyBjdXJyZW50bHkgaW4gdGhlIFNwZWN1bGF0aXZlSklUIGxheWVyIQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDIwIEBA
IHN0cnVjdCBTd2l0Y2hEYXRhIHsKICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKIH07CiAKK3N0
cnVjdCBDYWxsVmFyYXJnc0RhdGEgeworICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsKK307CisK
K3N0cnVjdCBMb2FkVmFyYXJnc0RhdGEgeworICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydDsgLy8g
TG9jYWwgZm9yIHRoZSBmaXJzdCBlbGVtZW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBjb3VudDsg
Ly8gTG9jYWwgZm9yIHRoZSBjb3VudC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVN0YXJ0
OworICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lQ291bnQ7CisgICAgdW5zaWduZWQgb2Zmc2V0
OyAvLyBXaGljaCBhcnJheSBlbGVtZW50IHRvIHN0YXJ0IHdpdGguIFVzdWFsbHkgdGhpcyBpcyAw
LgorICAgIHVuc2lnbmVkIG1hbmRhdG9yeU1pbmltdW07IC8vIFRoZSBudW1iZXIgb2YgZWxlbWVu
dHMgb24gdGhlIHN0YWNrIHRoYXQgbXVzdCBiZSBpbml0aWFsaXplZDsgaWYgdGhlIGFycmF5IGlz
IHRvbyBzaG9ydCB0aGVuIHRoZSBtaXNzaW5nIGVsZW1lbnRzIG11c3QgZ2V0IHVuZGVmaW5lZC4K
KyAgICB1bnNpZ25lZCBsaW1pdDsgLy8gTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbG9h
ZC4KK307CisKIC8vIFRoaXMgdHlwZSB1c2VkIGluIHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3Vt
ZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2
YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUg
LSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEg
Tm9kZSouCkBAIC04ODgsNiArOTAyLDM1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihtX29wSW5mbyk7CiAgICAgfQog
ICAgIAorICAgIGJvb2wgaGFzQ2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIENhbGxG
b3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEqIGNhbGxWYXJhcmdzRGF0
YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQ2FsbFZhcmFyZ3NEYXRhKCkpOworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PENhbGxWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3M7CisgICAgfQorICAgIAorICAgIExvYWRWYXJhcmdzRGF0
YSogbG9hZFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNMb2FkVmFyYXJn
c0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8TG9hZFZhcmFyZ3NEYXRhKj4o
bV9vcEluZm8pOworICAgIH0KKyAgICAKICAgICBib29sIGhhc1Jlc3VsdCgpCiAgICAgewogICAg
ICAgICByZXR1cm4gISFyZXN1bHQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiB0aGlzIG11c3QgYmUgdGhlIGRpcmVj
dGx5IHN1YnNlcXVlbnQgcHJvcGVydHkgcHV0LiBOb3RlIHRoYXQgUHV0QnlWYWwgKi9cCiAgICAg
Lyogb3Bjb2RlcyB1c2UgVmFyQXJncyBiZWF1c2UgdGhleSBtYXkgaGF2ZSB1cCB0byA0IGNoaWxk
cmVuLiAqL1wKICAgICBtYWNybyhHZXRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAorICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykg
XAogICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3Mp
IFwKICAgICBtYWNybyhQdXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1Zh
ckFyZ3MpIFwKQEAgLTIxNyw2ICsyMTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgLyogQ2FsbHMuICovXAogICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKENvbnN0cnVjdCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAg
bWFjcm8oQ2FsbFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhDYWxsRm9yd2FyZFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhDb25zdHJ1Y3RWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmF0aXZlQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oTmF0aXZlQ29uc3RydWN0
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAg
ICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE3OTg4NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsMTcgQEAgdm9pZCBMb2NhbE9TUkF2
YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVz
aGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbGltaXQ7IGktLTspIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkp
ID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVl
LCBWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpICsgaSkpKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzk4ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCwxOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgd3JpdGVUb3AoKQogICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBMb2FkVmFy
YXJncykgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIG5vdGUgdGhlIHdyaXRlcyB0byB0
aGUgbG9jYWxzIHRoYXQgd2lsbCBzdG9yZSB0aGUgYXJyYXkgZWxlbWVudHMgYW5kCisgICAgICAg
ICAgICAvLyBjb3VudC4KKyAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICBtX3dyaXRlKGRhdGEtPmNvdW50KTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAg
ICAgICAgICAgIG1fd3JpdGUoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsg
aSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3Qg
bmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBDYWxsRm9yd2FyZFZhcmFyZ3MsIHNpbmNl
IGl0IHJlYWRzCisgICAgICAgIC8vIG91ciBhcmd1bWVudHMgdGhlIHNhbWUgd2F5IHRoYXQgYW55
IGVmZmVjdGZ1bCB0aGluZyBtaWdodC4KKyAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLm1f
Y29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCiAgICAg
ICAgICAgICAgICAgbV93cml0ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNp
b24gMTc5ODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg5LDYgKzE4OSwxMCBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAg
Y2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Cisg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdB
cnJheToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3OTg4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYyNCwzNyArNjI0LDE3MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGw7Ci0gICAg
aWYgKCFpc0NhbGwpCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9k
ZS0+b3AoKSA9PSBDb25zdHJ1Y3QpOwotICAgIAorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUg
Y2FsbFR5cGU7CisgICAgYm9vbCBpc0NhbGw7CisgICAgYm9vbCBpc1ZhcmFyZ3M7CisgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDYWxsOgorICAgICAgICBjYWxsVHlwZSA9IENh
bGxMaW5rSW5mbzo6Q2FsbDsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsKKyAgICAgICAgaXNWYXJh
cmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAg
ICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgICAgICBpc0NhbGwgPSBm
YWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNh
bGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gdHJ1
ZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
b25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3Ry
dWN0VmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAgIGlzVmFyYXJncyA9
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIERGR19DUkFTSCht
X2ppdC5ncmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKICAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3Qg
cGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKICAgICAvLyBmb3IgaXQuCiAgICAgaW50
IGR1bW15VGhpc0FyZ3VtZW50ID0gaXNDYWxsID8gMCA6IDE7CiAgICAgCi0gICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGlzQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENh
bGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1fZ3JhcGguY2hp
bGQobm9kZSwgMCk7CiAgICAgCi0gICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5t
X3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKV07Ci0gICAgLy8gVGhlIGNhbGwgaW5z
dHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247IHRoZSBzdWJzZXF1ZW50IGNo
aWxkcmVuIGFyZSB0aGUKLSAgICAvLyBhcmd1bWVudHMuCi0gICAgaW50IG51bVBhc3NlZEFyZ3Mg
PSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAvLyBHb3R0YSBsb2FkIHRoZSBhcmd1bWVu
dHMgc29tZWhvdy4gVmFyYXJncyBpcyB0cmlja2llci4KKyAgICBpZiAoaXNWYXJhcmdzKSB7Cisg
ICAgICAgIC8vIDEpIGdldCB0aGUgYXJndW1lbnRzCisgICAgICAgIC8vIDIpIGZsdXNoIHJlZ2lz
dGVycworICAgICAgICAvLyAzKSBzZXQgdXAgdGhlIGNhbGwgZnJhbWUKKyAgICAgICAgLy8gNCkg
Z2V0IHRoZSBjYWxsZWUgYW5kICJ0aGlzIiBhbmQgaGFuZGxlIHRoZW0KKyAgICAgICAgLy8gNSkg
Zmx1c2ggcmVnaXN0ZXJzIGFnYWluCisgICAgICAgIAorICAgICAgICBDYWxsVmFyYXJnc0RhdGEq
IGRhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKKworICAgICAgICBHUFJSZWcgYXJndW1l
bnRzR1BSOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjE7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMjsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzOworICAgICAgICAKKyAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICAvLyBX
ZSBhdm9pZCBjYWxsaW5nIGZsdXNoUmVnaXN0ZXJzKCkgaW5zaWRlIHRoZSBjb250cm9sIGZsb3cg
b2YgQ2FsbEZvcndhcmRWYXJhcmdzLgorICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXV0byBsb2FkQXJndW1lbnRzR1BSID0gWyZdIChH
UFJSZWcgcmVzZXJ2ZWRHUFIpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxG
b3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IEpJVENvbXBp
bGVyOjpzZWxlY3RTY3JhdGNoR1BSKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkNjQoCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVn
aXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksCisgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50c0dQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChy
ZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICBsb2NrKHJl
c2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3Vt
ZW50cy5ncHIoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgICAgICAgICAgICAgdW5sb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAg
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBzY3JhdGNoR1BSMSA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFy
Z3VtZW50c0dQUiwgcmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgc2NyYXRjaEdQUjIgPSBKSVRD
b21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCByZXNl
cnZlZEdQUik7CisgICAgICAgICAgICBzY3JhdGNoR1BSMyA9IEpJVENvbXBpbGVyOjpzZWxlY3RT
Y3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCByZXNlcnZl
ZEdQUik7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBsb2FkQXJndW1lbnRzR1BSKElu
dmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZl
IHRoZSB3aG9sZSByZWdpc3RlciBmaWxlIHRvIG91cnNlbHZlcywgYW5kIGFyZ3VtZW50c0dQUiBo
YXMgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gU2VsZWN0IHNvbWUgc2NyYXRj
aCByZWdpc3RlcnMuCisgICAgICAgIAorICAgICAgICAvLyBXZSB3aWxsIHVzZSBzY3JhdGNoR1BS
MiB0byBwb2ludCB0byBvdXIgc3RhY2sgZnJhbWUuCisKKyAgICAgICAgdW5zaWduZWQgbnVtVXNl
ZFN0YWNrU2xvdHMgPSBtX2ppdC5ncmFwaCgpLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICAgICAg
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
Q2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICAvLyBEbyB0aGUgaG9ycmlmaWMgZm9v
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0aW1pemF0aW9uLgorICAgICAgICAgICAgLy8gRklY
TUU6IGRvIHRoaXMgb3B0aW1pemF0aW9uIGF0IHRoZSBJUiBsZXZlbCBpbnN0ZWFkIG9mIGhlcmUu
IFRoaXMgd2lsbCBoYXBwZW4KKyAgICAgICAgICAgIC8vIG9uY2Ugd2UgZ2V0IHJpZCBvZiB0aGUg
YXJndW1lbnRzIGxhenkgY3JlYXRpb24gYW5kIGxhenkgdGVhci1vZmYuCisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8s
IGFyZ3VtZW50c0dQUikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihudW1Vc2VkU3RhY2tTbG90cyksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAg
IGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgbm9kZS0+b3JpZ2luLnNlbWFudGljLnN0
YWNrT2Zmc2V0KCksIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgICAg
ICAgICByZXN1bHRHUFIgPSBzY3JhdGNoR1BSMjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aGF2ZUFyZ3VtZW50cyA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmxpbmso
Jm1faml0KTsKKyAgICAgICAgfQorCisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gUmlnaHQgbm93LCBhcmd1
bWVudHMgaXMgaW4gYXJndW1lbnRzR1BSIGFuZCB0aGUgcmVnaXN0ZXIgZmlsZSBpcyBmbHVzaGVk
LgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIG51bVVzZWRTdGFja1Nsb3RzLCBm
aXJzdFZhckFyZ09mZnNldCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgd2UgaGF2ZSB0aGUg
YXJndW1lbnQgY291bnQgb2YgdGhlIGNhbGxlZSBmcmFtZSwgYnV0IHdlJ3ZlIGxvc3QgdGhlIGFy
Z3VtZW50cyBvcGVyYW5kLgorICAgICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIG9w
ZXJhbmQgd2hpbGUgcHJlc2VydmluZyB0aGUgY2FsbGVlIGZyYW1lLgorICAgICAgICBsb2FkQXJn
dW1lbnRzR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIGVt
aXRTZXRWYXJhcmdzRnJhbWUobV9qaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBmYWxzZSwg
c2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJ
bW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCBzY3JhdGNoR1BS
MSwgR1BSSW5mbzo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSwgc2NyYXRjaEdQUjEsIGFyZ3Vt
ZW50c0dQUiwgZmlyc3RWYXJBcmdPZmZzZXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykKKyAg
ICAgICAgICAgIGhhdmVBcmd1bWVudHMubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAg
bV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZXN1
bHRHUFIsIEdQUkluZm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAg
IERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAK
KyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0aGUgYXJndW1lbnRzIGFycmF5IGFueW1vcmUuCisg
ICAgICAgIHVzZShub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgc2V0
IHVwIHRoZSAidGhpcyIgYXJndW1lbnQuCisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHRoaXNBcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBH
UFJSZWcgdGhpc0FyZ3VtZW50R1BSID0gdGhpc0FyZ3VtZW50LmdwcigpOworICAgICAgICAgICAg
dGhpc0FyZ3VtZW50LnVzZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5zdG9y
ZTY0KAorICAgICAgICAgICAgICAgIHRoaXNBcmd1bWVudHNHUFIsCisgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247IHRo
ZSBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUKKyAgICAgICAgLy8gYXJndW1lbnRzLgorICAg
ICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogICAgIAot
ICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OworICAg
ICAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKICAg
ICAKLSAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJn
cyksIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAg
ICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyks
IGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIAot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7Ci0gICAgICAgIEVk
Z2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyAxICsgaV07Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdl
KTsKLSAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKLSAgICAgICAgdXNlKGFyZ0Vk
Z2UpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewor
ICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZyh0aGlzLCBhcmdFZGdlKTsKKyAgICAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3By
KCk7CisgICAgICAgICAgICB1c2UoYXJnRWRnZSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5z
dG9yZTY0KGFyZ0dQUiwgY2FsbGVlQXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIGNhbGxlZUFyZ3VtZW50U2xvdChp
ICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEpTVmFsdWVP
cGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKICAgICBHUFJSZWcgY2FsbGVlR1BSID0g
Y2FsbGVlLmdwcigpOwotICAgIHVzZShjYWxsZWVFZGdlKTsKKyAgICBjYWxsZWUudXNlKCk7CiAg
ICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIGNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxs
ZWUpKTsKICAgICAKICAgICBmbHVzaFJlZ2lzdGVycygpOwpAQCAtNjkyLDYgKzgyNSwxMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgY2FsbExpbmtJbmZv
LT5jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgCiAgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RD
YWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbExpbmtJbmZvKTsKKyAgICAKKyAgICAv
LyBJZiB3ZSB3ZXJlIHZhcmFyZ3MsIHRoZW4gYWZ0ZXIgdGhlIGNhbGxzIGFyZSBkb25lLCB3ZSBu
ZWVkIHRvIHJlZXN0YWJsaXNoIG91ciBzdGFjayBwb2ludGVyLgorICAgIGlmIChpc1ZhcmFyZ3Mp
CisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJP
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxs
b3cgdW5yZWFjaGFibGUgW1tjbGFuZzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlv
bnMgaWYgYW55IHRlbXBsYXRlIGV4cGFuc2lvbiB1c2VzIGl0CkBAIC00MjMxLDYgKzQzNjgsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIENh
bGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNl
IENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAg
IGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC00MzM4LDkgKzQ0
NzgsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5
bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9q
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBpZiAobm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIUlubGluZUNh
bGxGcmFtZTo6aXNWYXJhcmdzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUt
PmtpbmQpKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKAorICAgICAgICAgICAgICAgIFRydXN0
ZWRJbW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpIC0gMSksCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwor
ICAgICAgICB9CiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTQzNTQsMjAgKzQ1MDUsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IoCiAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFJbmxpbmVD
YWxsRnJhbWU6OmlzVmFyYXJncyhub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5raW5kKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZSgKICAgICAgICAgICAgICAgICBJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSksCiAgICAgICAgICAgICAgICAgcmVzdWx0
R1BSKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAg
ICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwogICAgICAg
ICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQ
Uik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiB0aGUgc2xvdyBwYXRo
IGdlbmVyYXRvciBzaG91bGQgcGVyZm9ybSBhIGZvcndhcmQgc3BlY3VsYXRpb24gdGhhdCB0aGUK
LSAgICAgICAgLy8gcmVzdWx0IGlzIGFuIGludGVnZXIuIEZvciBub3cgd2UgcG9zdHBvbmUgdGhl
IHNwZWN1bGF0aW9uIGJ5IGhhdmluZyB0aGlzIHJldHVybgotICAgICAgICAvLyBhIEpTVmFsdWUu
Ci0gICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBjcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25HZXRB
cmd1bWVudHNMZW5ndGgsIHJlc3VsdEdQUiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTc4LDcgKzU3OCw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotI2lmbmRlZiBOREVC
VUcKICAgICAvLyBVc2VkIHRvIEFTU0VSVCBmbHVzaFJlZ2lzdGVycygpIGhhcyBiZWVuIGNhbGxl
ZCBwcmlvciB0bwogICAgIC8vIGNhbGxpbmcgb3V0IGZyb20gSklUIGNvZGUgdG8gYSBDIGhlbHBl
ciBmdW5jdGlvbi4KICAgICBib29sIGlzRmx1c2hlZCgpCkBAIC01OTMsNyArNTkyLDYgQEAgcHVi
bGljOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSNlbmRpZgogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVl
T2ZKU0NvbnN0YW50QXNJbW02NChOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCShyZXZpc2lvbiAxNzk4ODcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgQml0VmVjdG9yIHVz
ZWRMb2NhbHM7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0
aGF0IGFyZSB1c2VkIGZyb20gSVIuCi0gICAgICAgIGJvb2wgaGFzR2V0TG9jYWxVbmxpbmtlZCA9
IGZhbHNlOworICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IGZhbHNlOwogICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC04MSw3ICs4MSwy
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB1
c2VkTG9jYWxzLnNldChvcGVyYW5kLnRvTG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhh
c0dldExvY2FsVW5saW5rZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBoYXNOb2Rlc1Ro
YXROZWVkRml4dXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5j
b3VudC5pc0xvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChk
YXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3Rh
cnQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVh
bGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0g
MSkuaXNMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEtPmxpbWl0OyBpLS07KSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2Fs
KCkpOworICAgICAgICAgICAgICAgICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhh
cHBlbi4KKyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKQEAgLTE0OCwyNCArMTYzLDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlm
IChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvblt2YXJp
YWJsZS0+bG9jYWwoKS50b0xvY2FsKCldKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50cygpKSB7
Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW2NvZGVCbG9jaygp
LT5hcmd1bWVudHNSZWdpc3RlcigpLnRvTG9jYWwoKV0pOworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0KKyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2Nh
dGlvbiwgY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxs
b2NhdGlvblsKLSAgICAgICAgICAgICAgICAgICAgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVy
KCkpLnRvTG9jYWwoKV0pCisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkp
CiAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50
c1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0QXJndW1lbnRzUmVnaXN0
ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
Y29kZUJsb2NrKCktPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpLmlzVmFsaWQoKSkgewog
ICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldEFjdGl2YXRpb25SZWdpc3RlcigKLSAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW2NvZGVCbG9jaygpLT5h
Y3RpdmF0aW9uUmVnaXN0ZXIoKS50b0xvY2FsKCldKSk7CisgICAgICAgICAgICAgICAgYXNzaWdu
KGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIHJlZ2lzdGVyIGlzIG5ldmVyIHZhbGlkIGZv
ciBERkcgY29kZSBibG9ja3MuCkBAIC0xNzYsMTIgKzE4OCwxMSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZy
YW1lOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5leGVj
dXRhYmxlLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50c1JlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAg
ICAgICAgICAgICAgIGFsbG9jYXRpb25bbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxp
bmVDYWxsRnJhbWUpLnRvTG9jYWwoKV0pOworICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSBhc3NpZ24oCisgICAgICAgICAgICAgICAgICAgIGFsbG9j
YXRpb24sIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiAK
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKLSAgICAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblt1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0
ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9y
KGlubGluZUNhbGxGcmFtZSkpLnRvTG9jYWwoKV0pCisgICAgICAgICAgICAgICAgICAgIGFzc2ln
bihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVu
dHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKSkKICAgICAgICAgICAgICAgICAgICAgPT0g
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVn
aXN0ZXIpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjI3LDkgKzIzOCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50
KCkpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzeW1ib2xUYWJsZS0+cGFyYW1l
dGVyQ291bnQoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRz
W2ldID0gc2xvd0FyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZyA9IFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1lbnRzW2ldLmluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBuZXdTbG93QXJndW1lbnRzW2ldLmluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxs
b2NhdGlvbltyZWcudG9Mb2NhbCgpXSkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5l
d1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBhc3NpZ24oYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lz
dGVyKHNsb3dBcmd1bWV0c1tpXS5pbmRleCkpLm9mZnNldCgpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zbG93QXJndW1lbnRzID0g
V1RGOjptb3ZlKG5ld1Nsb3dBcmd1bWVudHMpOwpAQCAtMjM3LDcgKzI0Niw3IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRml4IEdldExvY2FsVW5saW5rZWQncyB2
YXJpYWJsZSByZWZlcmVuY2VzLgotICAgICAgICBpZiAoaGFzR2V0TG9jYWxVbmxpbmtlZCkgewor
ICAgICAgICBpZiAoaGFzTm9kZXNUaGF0TmVlZEZpeHVwKSB7CiAgICAgICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKQEAgLTI0NiwxMCArMjU1LDE0
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnVubGlua2VkTG9jYWwo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
YWxsb2NhdGlvbltvcGVyYW5kLnRvTG9jYWwoKV0pOwotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwob3BlcmFuZCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1hY2hpbmVMb2NhbChhc3NpZ24oYWxsb2NhdGlvbiwg
bm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRpb24s
IGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFy
dCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgCkBAIC0yNjIsNiArMjc1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWduKGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMpCisg
ICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gc3JjOworICAgICAgICBpZiAo
cmVzdWx0LmlzTG9jYWwoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0g
YWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgpXTsKKyAgICAgICAgICAgIGlmIChteUFsbG9jYXRp
b24gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVy
KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KIH07CiAKIGJvb2wgcGVyZm9ybVN0YWNrTGF5b3V0KEdyYXBoJiBncmFw
aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsNiArMTIwLDkgQEAgaW5saW5l
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgU3RvcmVCYXJyaWVy
V2l0aE51bGxDaGVjazoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBM
b2FkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1
Y3Q6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTc5ODg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5ODYsOCArMTk4NiwyMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgY2hlY2tB
cmd1bWVudHNOb3RDcmVhdGVkKCk7CiAKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsICFtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBz
ZXRJbnQzMihtX291dC5hZGQobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihKU1N0
YWNrOjpBcmd1bWVudENvdW50KSksIG1fb3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIGlm
IChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYm
ICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUta2luZCkpIHsKKyAgICAgICAgICAgIHNldEludDMyKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVn
aXN0ZXI7CisgICAgICAgICAgICBpZiAoIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFs
UmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBz
ZXRJbnQzMigKKyAgICAgICAgICAgICAgICBtX291dC5hZGQoCisgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVy
KSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwCShyZXZpc2lvbiAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSwxMCBA
QCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZShDYWxsCiAKICAgICAgICAgbV9m
cmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNh
bGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgp
KQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2Fs
bEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgp
KS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9mcmFtZS5tX2Fy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jaygpOwogICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQgPSBjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICsz
MzgsMTAgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgeworICAgICAgICAvLyBOQi4gSXQn
cyB0ZW1wdGluZyBvbiBzb21lIGFyY2hpdGVjdHVyZXMgdG8gc29tZXRpbWVzIHVzZSBhbiBvZmZz
ZXQgZnJvbSB0aGUgc3RhY2sKKyAgICAgICAgLy8gcmVnaXN0ZXIgYmVjYXVzZSBmb3Igc29tZSBv
ZmZzZXRzIHRoYXQgd2lsbCBlbmNvZGUgdG8gYSBzbWFsbGVyIGluc3RydWN0aW9uLiBCdXQgd2UK
KyAgICAgICAgLy8gY2Fubm90IGRvIHRoaXMuIFdlIHVzZSB0aGlzIGluIHBsYWNlcyB3aGVyZSB0
aGUgc3RhY2sgcG9pbnRlciBoYXMgYmVlbiBtb3ZlZCB0byBzb21lCisgICAgICAgIC8vIHVucHJl
ZGljdGFibGUgbG9jYXRpb24uCiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxp
ZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDExICs0
NjQsNiBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAg
IG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0
UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgREZHOjpDYW5Jbmxp
bmU6Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9w
dGltaXplZE9ySW5saW5lZCA9IHRydWU7Ci0gICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9
IHRydWU7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNh
c2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0g
dHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTc5ODg3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcg
KzI5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChP
cGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAg
ICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlELCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCk7Ci0gICAgICAgIHZvaWQgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKik7
CisgICAgICAgIHZvaWQgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiwgQ2Fs
bExpbmtJbmZvKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxS
ZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMTc5ODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1
dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCi12b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCiB7CiAgICAgaW50IHRoaXNWYWx1
ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICBpbnQgYXJndW1lbnRzID0gaW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtOTAsNiArOTAsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVT
ZXR1cFZhcmFyZ3NGcmFtZShJbnN0cgogICAgIGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgZW5k
LmxpbmsodGhpcyk7CiAgICAgCisgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCisg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKKyAg
ICBsb2FkOCgmaW5mby0+bWF4TnVtQXJndW1lbnRzLCByZWdUMCk7CisgICAgSnVtcCBub3RCaWdn
ZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7CisgICAgSnVtcCBub3RTYXR1cmF0
ZWQgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoMjU1KSk7Cisg
ICAgbW92ZShUcnVzdGVkSW1tMzIoMjU1KSwgcmVnVDIpOworICAgIG5vdFNhdHVyYXRlZC5saW5r
KHRoaXMpOworICAgIHN0b3JlOChyZWdUMiwgJmluZm8tPm1heE51bUFyZ3VtZW50cyk7CisgICAg
bm90QmlnZ2VzdC5saW5rKHRoaXMpOworICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCByZWdUMCk7CiAgICAgc3RvcmU2
NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKQEAgLTEzNCw3ICsxNDQsOSBA
QCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1CiAKIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAgIGludCBjYWxsZWUgPSBpbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbygpOworCisgICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2Fs
bEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KQEAgLTE1Miw3ICsxNjQsMTEgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIENPTVBJTEVfQVNT
RVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFy
Z3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsK
ICAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5H
VEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBjYWxsX2FuZF9jb25zdHJ1Y3RfdmFyYXJnc19vcGNv
ZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX3Zh
cmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCis8PDw8PDw8IC5taW5l
CisgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhpbnN0cnVjdGlvbiwgaW5mbyk7Cis9PT09PT09
CiAgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbik7Cis+Pj4+Pj4+
IC5yMTc5ODYyCiAgICAgZWxzZSB7CiAgICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9u
WzRdLnUub3BlcmFuZDsKQEAgLTE3Niw5ICsxOTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExp
bmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotCi0gICAgaWYg
KG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgeworICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxf
ZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmgJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAg
ICAgICAgCiAgICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBBcmd1bWVudHNNb2Rl
IG1vZGUgPSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1vZGUpCiAgICAgewotICAgICAgICBBcmd1
bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4o
dm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6
ZUluQnl0ZXMoaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOworICAgICAg
ICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3Vt
ZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFycmF5KCkgKyByZWdpc3RlckFy
cmF5U2l6ZUluQnl0ZXMoY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNh
bGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBp
bmxpbmVDYWxsRnJhbWUsIG1vZGUpOwogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0K
QEAgLTEyNCw3ICsxMjQsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVD
YWxsZWVJZk5lY2Vzc2FyeShFeGVjU3RhdGUqKTsKIAogICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0
ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyB9Ci0g
ICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
ICogKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpOyB9CisgICAgc3RhdGlj
IHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpCisgICAgICAgIHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSAqIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOworICAgIH0KICAgICBib29s
IGlzQXJndW1lbnQoc2l6ZV90KTsKICAgICBib29sIHRyeVNldEFyZ3VtZW50KFZNJiwgc2l6ZV90
IGFyZ3VtZW50LCBKU1ZhbHVlKTsKICAgICBKU1ZhbHVlIHRyeUdldEFyZ3VtZW50KHNpemVfdCBh
cmd1bWVudCk7CkBAIC0zNDAsMTEgKzM0OCwxNSBAQCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZp
bmlzaENyZWF0aW9uKENhCiAgICAgbV9vdmVycm9kZUNhbGxlZSA9IGZhbHNlOwogICAgIG1fb3Zl
cnJvZGVDYWxsZXIgPSBmYWxzZTsKICAgICBtX2lzU3RyaWN0TW9kZSA9IGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmlj
dE1vZGUoKTsKLQorICAgIAorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgIG1fbnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5y
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVk
SW50MzIoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgIG1fbnVtQXJndW1lbnRzLS07CisgICAgCiAgICAg
c3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsK
LSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXpl
KCkgLSAxOwotICAgICAgICAKICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAg
ICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJz
ID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEpLm9mZnNldCgpOwpAQCAtMzYxLDcgKzM3Myw2IEBAIGlubGluZSB2b2lkIEFy
Z3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2xv
bmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0gICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKICAgICAgICAgaWYgKG1fbnVtQXJn
dW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAg
ICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAt
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTc5ODg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEs
NiArMjExLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgLyogZnJv
bSBzdXBlciBsb25nIGNvbXBpbGVzIHRoYXQgdGFrZSBhIGxvdCBvZiBtZW1vcnkuICovXAogICAg
IHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ0NhbGxlclNpemUsIDEwMDAwKSBcCiAgICAgXAor
ICAgIHYodW5zaWduZWQsIG1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcsIDEwMCkgXAorICAgIFwK
ICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50Q2FsbElubGluaW5nLCB0cnVlKSBcCiAgICAg
dihib29sLCBlbmFibGVQb2x5dmFyaWFudEJ5SWRJbmxpbmluZywgdHJ1ZSkgXAogICAgIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246351</attachid>
            <date>2015-02-10 16:48:36 -0800</date>
            <delta_ts>2015-02-11 15:04:29 -0800</delta_ts>
            <desc>DFG LoadVarargs 64-bit done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80897</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgQ2FsbExp
bmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgICAgICwgaGFzU2VlblNob3VsZFJlcGF0
Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2VlbkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2Fs
bFR5cGUoTm9uZSkKKyAgICAgICAgLCBtYXhOdW1Bcmd1bWVudHMoMCkKICAgICAgICAgLCBzbG93
UGF0aENvdW50KDApCiAgICAgewogICAgIH0KQEAgLTg3LDYgKzg4LDcgQEAgc3RydWN0IENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAx
OwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBj
YWxsZWVHUFIgOiA4OworICAgIHVpbnQ4X3QgbWF4TnVtQXJndW1lbnRzOyAvLyBPbmx5IHVzZWQg
Zm9yIHZhcmFyZ3MgY2FsbHMuCiAgICAgdWludDMyX3Qgc2xvd1BhdGhDb3VudDsKICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTc5ODg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDcgKzEyOSw5IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzLCBidXQgYW55dGltZSB3ZSBo
YXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQgYmVjb21lcyBpbmRpc3BlbnNhYmxlLgogICAgIFVO
VVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZyb21D
YWxsTGlua0luZm8obG9ja2VyLCBjYWxsTGlua0luZm8pOworICAgIENhbGxMaW5rU3RhdHVzIHJl
c3VsdCA9IGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAg
ICByZXN1bHQubV9tYXhOdW1Bcmd1bWVudHMgPSBjYWxsTGlua0luZm8ubWF4TnVtQXJndW1lbnRz
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKQEAgLTI5MSw2ICsyOTMsMTMgQEAgQ2FsbExpbmtT
dGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogICAgIHJldHVybiBjb21wdXRlRm9yKHBy
b2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgYmFzZWxpbmVNYXApOwogfQog
Cit2b2lkIENhbGxMaW5rU3RhdHVzOjpzZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFu
dCB2YXJpYW50KQoreworICAgIG1fdmFyaWFudHMgPSBDYWxsVmFyaWFudExpc3R7IHZhcmlhbnQg
fTsKKyAgICBtX2NvdWxkVGFrZVNsb3dQYXRoID0gZmFsc2U7CisgICAgbV9pc1Byb3ZlZCA9IHRy
dWU7Cit9CisKIGJvb2wgQ2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb25zdAogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2
aXNpb24gMTc5ODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAotICAgIENhbGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJv
dmVkKQotICAgIHsKLSAgICAgICAgbV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRl
Rm9yKAogICAgICAgICBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBD
YWxsTGlua0luZm9NYXAmKTsKIApAQCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9y
aWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAor
ICAgIHZvaWQgc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9j
b3VsZFRha2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWlzU2V0KCk7IH0KQEAgLTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVl
IGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIAorICAgIGJvb2wgbWF4TnVtQXJndW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhOdW1Bcmd1bWVudHM7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CkBAIC0xMzcsNiArMTM1LDcgQEAgcHJp
dmF0ZToKICAgICBDYWxsVmFyaWFudExpc3QgbV92YXJpYW50czsKICAgICBib29sIG1fY291bGRU
YWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lzUHJvdmVkOworICAgIHVuc2lnbmVkIG1fbWF4TnVt
QXJndW1lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE3OTg4NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMSw2ICsxMjEsOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtp
bmQgewogICAgICAgICBDYWxsLAogICAgICAgICBDb25zdHJ1Y3QsCisgICAgICAgIENhbGxWYXJh
cmdzLAorICAgICAgICBDb25zdHJ1Y3RWYXJhcmdzLAogICAgICAgICAKICAgICAgICAgLy8gRm9y
IHRoZXNlLCB0aGUgc3RhY2tPZmZzZXQgaW5jb3Jwb3JhdGVzIHRoZSBhcmd1bWVudCBjb3VudCBw
bHVzIHRoZSB0cnVlIHJldHVybiBQQwogICAgICAgICAvLyBzbG90LgpAQCAtMTQwLDI1ICsxNDIs
MzkgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgICAgIHJldHVybiBDYWxsOwogICAg
IH0KICAgICAKKyAgICBzdGF0aWMgS2luZCB2YXJhcmdzS2luZEZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgIHJldHVybiBDYWxsVmFyYXJnczsKKyAgICAgICAg
Y2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdFZhcmFy
Z3M7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIENhbGw7CisgICAgfQorICAgIAogICAgIHN0YXRpYyBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZEZvcihLaW5kIGtpbmQpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENhbGxW
YXJhcmdzOgogICAgICAgICBjYXNlIEdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgU2V0dGVyQ2Fs
bDoKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiBD
b2RlRm9yQ29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICB9CiAgICAgCi0gICAg
c3RhdGljIGJvb2wgaXNOb3JtYWxDYWxsKEtpbmQga2luZCkKKyAgICBzdGF0aWMgYm9vbCBpc1Zh
cmFyZ3MoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAg
IGNhc2UgQ2FsbDoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTcxLDEwICsxODcsMTEgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9yaWdp
biBjYWxsZXI7CiAgICAgQml0VmVjdG9yIGNhcHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUg
bWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFibGUgbnVtYmVyaW5nLgogCi0gICAgc2lnbmVkIHN0
YWNrT2Zmc2V0IDogMjk7Ci0gICAgdW5zaWduZWQga2luZCA6IDI7IC8vIHJlYWwgdHlwZSBpcyBL
aW5kCisgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CisgICAgdW5zaWduZWQga2luZCA6IDM7
IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYg
ZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRo
ZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJl
IHJlY292ZXJlZCBtYW51YWxseS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0
ZXI7IC8vIFRoaXMgaXMgb25seSBzZXQgaWYgdGhlIGNvZGUgdXNlcyBhcmd1bWVudHMuIFRoZSB1
bm1vZGlmaWVkIGFyZ3VtZW50cyByZWdpc3RlciBmb2xsb3dzIHRoZSB1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoKSBjb252ZW50aW9uIChzZWUgQ29kZUJsb2NrLmgpLgorICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7IC8vIE9ubHkgc2V0IHdoZW4gd2UgaW5saW5l
IGEgdmFyYXJncyBjYWxsLgogICAgIAogICAgIC8vIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG5v
dGlvbiBvZiBhICJkZWZhdWx0IiBzZXQgb2YgdmFsdWVzIGZvcgogICAgIC8vIElubGluZUNhbGxG
cmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNv
bmZ1c2lvbiBpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtp
bmQuY3BwCShyZXZpc2lvbiAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw4IEBAIGNvbnN0IGNo
YXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQga2kKICAgICAgICAgcmV0dXJuICJBcmd1bWVu
dHNFc2NhcGVkIjsKICAgICBjYXNlIE5vdFN0cmluZ09iamVjdDoKICAgICAgICAgcmV0dXJuICJO
b3RTdHJpbmdPYmplY3QiOworICAgIGNhc2UgVmFyYXJnc092ZXJmbG93OgorICAgICAgICByZXR1
cm4gIlZhcmFyZ3NPdmVyZmxvdyI7CiAgICAgY2FzZSBVbmNvdW50YWJsZToKICAgICAgICAgcmV0
dXJuICJVbmNvdW50YWJsZSI7CiAgICAgY2FzZSBVbmNvdW50YWJsZUludmFsaWRhdGlvbjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCShyZXZpc2lvbiAx
Nzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBlbnVtIEV4aXRLaW5kIDogdWludDhfdCB7CiAg
ICAgSW5hZGVxdWF0ZUNvdmVyYWdlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBlbmRlZCB1cCBp
biBjb2RlIHRoYXQgZGlkbid0IGhhdmUgcHJvZmlsaW5nIGNvdmVyYWdlLgogICAgIEFyZ3VtZW50
c0VzY2FwZWQsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGFyZ3VtZW50cyBlc2NhcGVkIGJ1dCB3ZSBk
aWRuJ3QgZXhwZWN0IHRoZW0gdG8uCiAgICAgTm90U3RyaW5nT2JqZWN0LCAvLyBXZSBleGl0ZWQg
YmVjYXVzZSB3ZSBzaG91bGRuJ3QgaGF2ZSBhdHRlbXB0ZWQgdG8gb3B0aW1pemUgc3RyaW5nIG9i
amVjdCBhY2Nlc3MuCisgICAgVmFyYXJnc092ZXJmbG93LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
IHZhcmFyZ3MgY2FsbCBwYXNzZWQgbW9yZSBhcmd1bWVudHMgdGhhbiB3ZSBleHBlY3RlZC4KICAg
ICBVbmNvdW50YWJsZSwgLy8gV2UgZXhpdGVkIGZvciBub25lIG9mIHRoZSBhYm92ZSByZWFzb25z
LCBhbmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdC4gTW9zdCB1c2VzIG9mIHRoaXMgc2hvdWxkIGJl
IHZpZXdlZCBhcyBhIEZJWE1FLgogICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCAvLyBXZSBl
eGl0ZWQgYmVjYXVzZSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQ7IHRoaXMgbWVhbnMg
dGhhdCB3ZSd2ZSBhbHJlYWR5IGNvdW50ZWQgdGhlIHJlYXNvbnMgd2h5IHRoZSBjb2RlIGJsb2Nr
IHdhcyBpbnZhbGlkYXRlZC4KICAgICBXYXRjaGRvZ1RpbWVyRmlyZWQsIC8vIFdlIGV4aXRlZCBi
ZWNhdXNlIHdlIG5lZWQgdG8gc2VydmljZSB0aGUgd2F0Y2hkb2cgdGltZXIuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTQ0LDcgKzE0NCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpOwotICAgICAgICBBU1NFUlQodmFsdWUuaXNIZWFwVG9w
KCkpOworICAgICAgICBBU1NFUlQoIXZhbHVlLmlzQ2xlYXIoKSk7CiAgICAgICAgIEZpbHRyYXRp
b25SZXN1bHQgcmVzdWx0ID0KICAgICAgICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRmlsdGVyRm9y
KHVzZUtpbmRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQgPT0gRmlsdHJhdGlvbk9LKTsKQEAgLTIwMyw5ICsyMDMsMjAg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKLSAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0
YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS5i
bG9jaygpLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwor
ICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNl
dC4gU2V0QXJndW1lbnQgbWVhbnMgdGhhdCBzb21lb25lIHNldAorICAgICAgICAvLyB0aGUgYXJn
dW1lbnQgdmFsdWVzIG91dC1vZi1iYW5kLCBhbmQgY3VycmVudGx5IHRoaXMgYWx3YXlzIG1lYW5z
IHNldHRpbmcgdG8gYQorICAgICAgICAvLyBub24tY2xlYXIgdmFsdWUuCisgICAgICAgIEFTU0VS
VCghbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7
CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Cisg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwor
ICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldFR5cGUo
U3BlY0ludDMyKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTsp
CisgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zm
c2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAg
ICAgICAKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgpAQCAtMTMxNSw3ICsxMzI2
LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAv
LyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0
byBmb3JjZSBjb25zdGFudCBmb2xkaW5nCiAgICAgICAgIC8vIG9mIEdldE15QXJndW1lbnRzTGVu
Z3RoLCBiZWNhdXNlIEdldE15QXJndW1lbnRzTGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBvcGVyYXRp
b24uCiAgICAgICAgIC8vIFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMg
bGF0ZXIgb24uCi0gICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lKSB7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
CisgICAgICAgICAgICAmJiAhSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Mobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+a2luZCkpIHsKICAgICAgICAgICAgIHNldENvbnN0
YW50KAogICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVtYmVyKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CiAgICAgICAgICAgICBt
X3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7IC8vIFByZXRlbmQgdGhhdCB3ZSBjbG9iYmVyZWQg
dG8gcHJldmVudCBjb25zdGFudCBmb2xkaW5nLgpAQCAtMTk2NCw2ICsxOTc2LDkgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQ29uc3RydWN0Ogog
ICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNl
IENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29u
c3RydWN0VmFyYXJnczoKICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2xvYmJlckxpbWl0KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwog
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTc5ODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAzLDYgKzUwMyw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47
CiAgICAgICAgICAgICAgICAgICAgIGlmICghb3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBp
ZiAoSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Mob3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZS0+a2luZCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgZXhhY3RseSB3aGF0IHRo
aXMgd2lsbCByZXR1cm4uIEJ1dCBvbmx5IGFmdGVyIHdlIGhhdmUgY2hlY2tlZAogICAgICAgICAg
ICAgICAgICAgICAvLyB0aGF0IG5vYm9keSBoYXMgZXNjYXBlZCBvdXIgYXJndW1lbnRzLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsMTIgKzE4MiwxMyBAQCBwcml2YXRl
OgogICAgICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9m
ZnNldCwgQ2FsbExpbmtTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBO
b2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25T
aXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAgICAg
dm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOworICAgIHZvaWQgaGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBj
LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgdm9pZCBlbWl0RnVu
Y3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9m
ZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgdm9pZCB1bmRvRnVuY3Rpb25DaGVj
a3MoQ2FsbFZhcmlhbnQpOwogICAgIHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQpOwogICAgIHVuc2lnbmVkIGlubGluaW5nQ29zdChDYWxsVmFyaWFudCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsgLy8gUmV0
dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFuIGlubGluaW5nIGNhbmRpZGF0ZS4gQnkgY29udmVu
dGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29zdCBvZiAxLgogICAgIC8vIEhhbmRsZSBpbmxpbmlu
Zy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50
IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBp
bnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwg
Tm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24pOworICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUs
IGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9m
ZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxp
bmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIGVudW0g
Q2FsbGVyTGlua2FiaWxpdHkgeyBDYWxsZXJEb2VzTm9ybWFsTGlua2luZywgQ2FsbGVyTGlua3NN
YW51YWxseSB9OwogICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0
Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5s
aW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSk7CiAgICAgdm9pZCBpbmxpbmVDYWxs
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25l
ZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5KTsK
QEAgLTY5MSw3ICs2OTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgb3AsIG9wSW5mbywgY2Fs
bGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CiAgICAgICAgIGlmIChyZXN1bHRSZWcuaXNW
YWxpZCgpKQotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpLCBjYWxsKTsK
KyAgICAgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOwogICAgICAgICByZXR1cm4gY2FsbDsK
ICAgICB9CiAgICAgCkBAIC0xMDQzLDcgKzEwNDQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVDYWxsKAogICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA8PSAwKTsKICAgICAKICAgICBp
ZiAoY2FsbFRhcmdldC0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBD
YWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0LT5hc0pTVmFsdWUoKSkuc2V0SXNQcm92ZWQodHJ1ZSk7
CisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2FsbGVlKGNhbGxUYXJn
ZXQtPmFzSlNWYWx1ZSgpKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVD
b2RlUGFyc2luZygpKQogICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBj
dXJyZW50Q29kZU9yaWdpbigpLCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CkBAIC0xMDYw
LDcgKzEwNjEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogICAg
IE9wSW5mbyBjYWxsT3BJbmZvOwogICAgIAotICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFy
Z2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgeworICAg
IGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCBy
ZWdpc3Rlck9mZnNldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZz
ZXQpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgewogICAgICAgICBpZiAobV9ncmFwaC5j
b21waWxhdGlvbigpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJ
bmxpbmVkQ2FsbCgpOwogICAgICAgICByZXR1cm47CkBAIC0xMDg4LDExICsxMDg5LDQ4IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBj
YWxsT3BJbmZvLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0
ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVu
Y3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpCit7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2Fs
bF92YXJhcmdzKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7CisgICAg
CisgICAgaW50IHJlc3VsdCA9IHBjWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgY2FsbGVlID0gcGNb
Ml0udS5vcGVyYW5kOworICAgIGludCB0aGlzUmVnID0gcGNbM10udS5vcGVyYW5kOworICAgIGlu
dCBhcmd1bWVudHMgPSBwY1s0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJlZVJlZyA9IHBj
WzVdLnUub3BlcmFuZDsKKyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBwY1s2XS51Lm9wZXJh
bmQ7CisgICAgCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24o
KTsKKyAgICAKKyAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxs
ZWUpKTsKKyAgICAKKyAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
Y2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1hcCk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmhh
c0NvbnN0YW50KCkpCisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2Fs
bGVlKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKTsKKyAgICAKKyAgICBpZiAoY2FsbExpbmtTdGF0
dXMuY2FuT3B0aW1pemUoKQorICAgICAgICAmJiBoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCBy
ZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCBmaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3Rlcih0aGlz
UmVnKSwgVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cyksIGZpcnN0VmFyQXJnT2Zmc2V0LCAwLCBt
X2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgb3AsIElubGlu
ZUNhbGxGcmFtZTo6dmFyYXJnc0tpbmRGb3Ioa2luZCksIHByZWRpY3Rpb24pKSB7CisgICAgICAg
IGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0
aW9uKCktPm5vdGljZUlubGluZWRDYWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9jYWxsVmFyYXJnc0RhdGEuYWRkKCk7Cisg
ICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAgICAKKyAg
ICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGNhbGxUYXJnZXQsIGdldCh0aGlzUmVnKSwgZ2V0KGFyZ3VtZW50cykpOworICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKKyAgICBpZiAocmVzdWx0UmVnLmlzVmFs
aWQoKSkKKyAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7Cit9CisKK3ZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBjYWxsZWUsIE5vZGUqIGNhbGxU
YXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnRSZWcsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKIHsKICAgICBOb2RlKiB0aGlzQXJndW1lbnQ7Ci0gICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpCi0gICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgIGlmICh0aGlzQXJndW1lbnRSZWcu
aXNWYWxpZCgpKQorICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQodGhpc0FyZ3VtZW50UmVnKTsg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgIGVsc2UK
ICAgICAgICAgdGhpc0FyZ3VtZW50ID0gMDsKIApAQCAtMTM5Myw3ICsxNDMxLDExIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0
dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1
bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2lu
ZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoCisgICAgTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVy
YW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsCisgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCisg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRh
dGFMb2coIkhhbmRsaW5nIGlubGluaW5nLi4uXG4iKTsKQEAgLTE0MDcsNiArMTQ0OSwxMyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgCisgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtp
bmQpCisgICAgICAgICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9u
czo6bWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZygpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZhcmFyZ3Mu
XG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAgdW5zaWdu
ZWQgaW5saW5pbmdCYWxhbmNlID0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGlu
ZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QpCiAgICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0ZDo6bWlu
KGlubGluaW5nQmFsYW5jZSwgT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5s
aW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpKTsKQEAgLTE0MTcsOCArMTQ2Niw2MSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gc2ltcGxpZmlj
YXRpb24gb24gdGhlIGZseSBhbmQgdGhpcyBoZWxwcyByZWR1Y2UgY29tcGlsZSB0aW1lcywgYnV0
IHdlIGNhbiBvbmx5IGxldmVyYWdlCiAgICAgLy8gdGhpcyBpbiBjYXNlcyB3aGVyZSB3ZSBkb24n
dCBuZWVkIGNvbnRyb2wgZmxvdyBkaWFtb25kcyB0byBjaGVjayB0aGUgY2FsbGVlLgogICAgIGlm
ICghY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSAmJiBjYWxsTGlua1N0YXR1cy5z
aXplKCkgPT0gMSkgewotICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoCi0gICAgICAgICAgICBj
YWxsTGlua1N0YXR1c1swXSwgY2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFs
aXphdGlvbktpbmQpOworICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXNb
MF0sIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQsIHNwZWNpYWxpemF0aW9uS2luZCk7CisK
KyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0OworCisgICAgICAgIC8vIElmIHdlIGhhdmUgYSB2
YXJhcmdzIGNhbGwsIHdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgYXJndW1lbnRzIHJpZ2h0IG5vdy4K
KyAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpKSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBtYW5kYXRvcnlNaW5pbXVtOyAvLyBleGNsdWRlcyAidGhpcyIKKyAgICAg
ICAgICAgIGlmIChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IGNhbGxM
aW5rU3RhdHVzWzBdLmZ1bmN0aW9uRXhlY3V0YWJsZSgpKQorICAgICAgICAgICAgICAgIG1hbmRh
dG9yeU1pbmltdW0gPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5TWluaW11bSA9IDA7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgdW5z
aWduZWQgbWF4TnVtQXJndW1lbnRzID0gbWF4KAorICAgICAgICAgICAgICAgIGNhbGxMaW5rU3Rh
dHVzLm1heE51bUFyZ3VtZW50cygpLAorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0g
KyAxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rl
ck9mZnNldE9yRmlyc3RGcmVlUmVnICsgMTsKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09
IG1heE51bUFyZ3VtZW50czsgLy8gaW5jbHVkZXMgInRoaXMiCisgICAgICAgICAgICByZWdpc3Rl
ck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmVn
aXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAgICAgICAg
IHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgLXJlZ2lzdGVyT2Zm
c2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAorICAgICAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVn
aXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMb2Fk
VmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOworICAg
ICAgICAgICAgZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCArIDEp
OworICAgICAgICAgICAgZGF0YS0+Y291bnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGRhdGEtPm9mZnNldCA9
IGFyZ3VtZW50c09mZnNldDsKKyAgICAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4TnVtQXJndW1l
bnRzOworICAgICAgICAgICAgZGF0YS0+bWFuZGF0b3J5TWluaW11bSA9IG1hbmRhdG9yeU1pbmlt
dW07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9w
SW5mbyhkYXRhKSwgZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIEluIERGRyBJUiBiZWZvcmUgU1NBLCB3ZSBjYW5ub3QgaW5zZXJ0IGNvbnRyb2wg
ZmxvdyBiZXR3ZWVuIGFmdGVyIHRoZQorICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIHRo
ZSBsYXN0IFNldEFyZ3VtZW50LiBUaGlzIGlzbid0IGEgcHJvYmxlbSBvbmNlIHdlIGdldCB0byBE
RkcKKyAgICAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciBy
ZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdworICAgICAgICAgICAgLy8gYmVm
b3JlIFNTQS4KKworICAgICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdpc3Rlck9mZnNl
dCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICBpZiAoc3BlY2lh
bGl6YXRpb25LaW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJbW1lZGlhdGVOYWtl
ZFNldCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQg
PCBtYXhOdW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAorICAgICAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCArIGFyZ3VtZW50KSwgZmFs
c2UpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1
ZSk7IC8vIFdlIGN1cnJlbnRseSBoYXZlIG5vd2hlcmUgdG8gcHV0IHRoZSB0eXBlIGNoZWNrIG9u
IHRoZSBMb2FkVmFyYXJncy4gV2UgY291bGQgZml4IHRoaXMgYnkgaGF2aW5nIFNldEFyZ3VtZW50
IGRvIHRoZSBhcmd1bWVudCBjaGVja3MuCisgICAgICAgICAgICAgICAgTm9kZSogc2V0QXJndW1l
bnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCksIHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJPZmZz
ZXRPckZpcnN0RnJlZVJlZzsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gYXR0ZW1w
dFRvSW5saW5lQ2FsbCgKICAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5k
LCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyRG9lc05vcm1hbExp
bmtpbmcsIHByZWRpY3Rpb24sCkBAIC0xNDM3LDExICsxNTM5LDkgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIGRvIG1vcmUgZGV0YWlsZWQgcG9seXZh
cmlhbnQvcG9seW1vcnBoaWMgcHJvZmlsaW5nOyBhbmQgc2Vjb25kLCBpdCByZWR1Y2VzIGNvbXBp
bGUgdGltZXMgaW4KICAgICAvLyB0aGUgREZHLiBBbmQgYnkgcG9seXZhcmlhbnQgcHJvZmlsaW5n
IHdlIG1lYW4gcG9seXZhcmlhbnQgcHJvZmlsaW5nIG9mICp0aGlzKiBjYWxsLiBOb3RlIHRoYXQK
ICAgICAvLyB3ZSBjb3VsZCBpbXByb3ZlIHRoYXQgYXNwZWN0IG9mIHRoaXMgYnkgZG9pbmcgcG9s
eW1vcnBoaWMgaW5saW5pbmcgYnV0IGhhdmluZyB0aGUgcHJvZmlsaW5nCi0gICAgLy8gYWxzby4g
Q3VycmVudGx5IHdlIG9wdCBhZ2FpbnN0IHRoaXMsIGJ1dCBpdCBjb3VsZCBiZSBpbnRlcmVzdGlu
Zy4gVGhhdCB3b3VsZCByZXF1aXJlIGhhdmluZyBhCi0gICAgLy8gc2VwYXJhdGUgbm9kZSBmb3Ig
Y2FsbCBlZGdlIHByb2ZpbGluZy4KLSAgICAvLyBGSVhNRTogSW50cm9kdWNlIHRoZSBub3Rpb24g
b2YgYSBzZXBhcmF0ZSBjYWxsIGVkZ2UgcHJvZmlsaW5nIG5vZGUuCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjAzMwotICAgIGlmICghaXNGVEwobV9n
cmFwaC5tX3BsYW4ubW9kZSkgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQ2FsbElubGlu
aW5nKCkpIHsKKyAgICAvLyBhbHNvLgorICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9k
ZSkgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nKCkKKyAgICAgICAg
fHwgSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkpIHsKICAgICAgICAgaWYgKHZlcmJv
c2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgKGhhcmQpLlxuIik7
CiAgICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxu
Iik7CkBAIC0xNDgyLDYgKzE1ODIsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZyhOb2RlCiAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigp
LCAiXG4iKTsKICAgICB9CiAgICAgCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJP
ZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAKICAgICAvLyBUaGlzIG1ha2VzIG1lIHdpc2ggdGhh
dCB3ZSB3ZXJlIGluIFNTQSBhbGwgdGhlIHRpbWUuIFdlIG5lZWQgdG8gcGljayBhIHZhcmlhYmxl
IGludG8gd2hpY2ggdG8KICAgICAvLyBzdG9yZSB0aGUgY2FsbGVlIHNvIHRoYXQgaXQgd2lsbCBi
ZSBhY2Nlc3NpYmxlIHRvIGFsbCBvZiB0aGUgYmxvY2tzIHdlJ3JlIGFib3V0IHRvIGNyZWF0ZS4g
V2UKICAgICAvLyBnZXQgYXdheSB3aXRoIGRvaW5nIGFuIGltbWVkaWF0ZS1zZXQgaGVyZSBiZWNh
dXNlIHdlIHdvdWxkbid0IGhhdmUgcGVyZm9ybWVkIGFueSBzaWRlIGVmZmVjdHMKQEAgLTMxMTMs
NDMgKzMyMTUsNzAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgaW50IHRoaXNSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwogICAgICAgICAgICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9w
ZXJhbmQ7CiAgICAgICAgICAgICBpbnQgZmlyc3RGcmVlUmVnID0gY3VycmVudEluc3RydWN0aW9u
WzVdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGN1cnJl
bnRJbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFT
U0VSVChpbmxpbmVDYWxsRnJhbWUoKSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFyZ3Vt
ZW50cywgYXJndW1lbnRzID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVu
dHNSZWdpc3RlcigpLm9mZnNldCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7Ci0KLSAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKLQotICAgICAg
ICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNp
emUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVn
aXN0ZXIgb2Zmc2V0LiBXZSBzdGFydCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAot
ICAgICAgICAgICAgLy8gdGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUg
Y2FsbCBmcmFtZS4KLSAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJl
ZyArIDE7Ci0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2ls
bCBiZSBwYXNzaW5nIHNvbWUgYXJndW1lbnRzLgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQg
LT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhh
dmUgYSBjYWxsIGZyYW1lIGhlYWRlci4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0
IHRoZSBhbGlnbm1lbnQgcmlnaHQuCi0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IC1XVEY6
OnJvdW5kVXBUb011bHRpcGxlT2YoCi0gICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdp
c3RlcnMoKSwKLSAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwotCi0gICAgICAgICAg
ICBlbnN1cmVMb2NhbHMoCi0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgaWYgKGFyZ3VtZW50cyA9PSBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQo
KQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3lt
Ym9sVGFibGUoKS0+c2xvd0FyZ3VtZW50cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSgpCisgICAgICAgICAgICAgICAgICAgICYmICFJbmxpbmVDYWxsRnJhbWU6Omlz
VmFyYXJncyhpbmxpbmVDYWxsRnJhbWUoKS0+a2luZCkKKyAgICAgICAgICAgICAgICAgICAgJiYg
IWZpcnN0VmFyQXJnT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKKworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBh
cmdDb3VudCA9IGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIC8vIExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9m
ZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyLCBhbmQKKyAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUg
Y2FsbCBmcmFtZS4KKyAgICAgICAgICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gZmly
c3RGcmVlUmVnICsgMTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gYXJn
Q291bnQ7IC8vIFdlIHdpbGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KKyAgICAgICAgICAg
ICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsg
Ly8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhlYWRlci4KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KKyAg
ICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgZW5zdXJlTG9jYWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0IGhhdmUgc2V0IHVwIHRo
ZSBhcmd1bWVudHMuIEJ1dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAorICAgICAgICAgICAgICAg
ICAgICAvLyBsb29rIGxpa2UgdGhlIGJ5dGVjb2RlIGhhZCBkb25lIGl0LgorICAgICAgICAgICAg
ICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KG5leHRSZWdpc3RlcisrKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSksIEltbWVkaWF0
ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9
IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCisgICAgICAgICAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBoYW5kbGVDYWxsKAorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LCBDYWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3Zh
cmFyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0
ZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFy
Z3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBFbWl0IENhbGxGb3J3YXJkVmFyYXJncworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIG1lYW5zIHdlIGNhbm5vdCBpbmxpbmUgZm9yd2FyZGVkIHZhcmFyZ3MgY2FsbHMgaW5zaWRl
IGEgdmFyYXJncworICAgICAgICAgICAgICAgIC8vIGNhbGwgZnJhbWUuIFdlIHdpbGwgcHJvYmFi
bHkgZml4IHRoYXQgb25jZSB3ZSBmaW5hbGx5IGdldCByaWQgb2YgdGhlCisgICAgICAgICAgICAg
ICAgLy8gYXJndW1lbnRzIG9iamVjdCBzcGVjaWFsLWNhc2luZy4KKyAgICAgICAgICAgICAgICBD
YWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOwor
ICAgICAgICAgICAgICAgIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJBcmdPZmZz
ZXQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogY2FsbCA9IGFkZFRv
R3JhcGgoCisgICAgICAgICAgICAgICAgICAgIENhbGxGb3J3YXJkVmFyYXJncywgT3BJbmZvKGRh
dGEpLCBPcEluZm8oZ2V0UHJlZGljdGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0KGNh
bGxlZSksIGdldCh0aGlzUmVnKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFJlZyhyZXN1bHQpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKKyAgICAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBUaGUgYnl0ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAg
dGhlIGFyZ3VtZW50cy4gQnV0IHdlJ2xsIGRvIGl0IGFuZCBtYWtlIGl0Ci0gICAgICAgICAgICAv
LyBsb29rIGxpa2UgdGhlIGJ5dGVjb2RlIGhhZCBkb25lIGl0LgotICAgICAgICAgICAgaW50IG5l
eHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZTsKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQo
VmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJn
dW1lbnQpCi0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVO
YWtlZFNldCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGhhbmRsZUNhbGwoCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LCBDYWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxs
X3ZhcmFyZ3MpLAotICAgICAgICAgICAgICAgIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zm
c2V0KTsKKyAgICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
Q2FsbFZhcmFyZ3MsIENvZGVGb3JDYWxsKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Nh
bGxfdmFyYXJncyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2Nv
bnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdFZhcmFyZ3MsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0X3ZhcmFyZ3MpOworICAgICAgICB9CisgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICAgICAgICAgIC8vIFN0YXRp
Y2FsbHkgc3BlY3VsYXRlIGZvciBub3cuIEl0IG1ha2VzIHNlbnNlIHRvIGxldCBzcGVjdWxhdGUt
b25seSBqbmVxX3B0cgogICAgICAgICAgICAgLy8gc3VwcG9ydCBzaW1tZXIgZm9yIGEgd2hpbGUg
YmVmb3JlIG1ha2luZyBpdCBtb3JlIGdlbmVyYWwsIHNpbmNlIGl0J3MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3OTg4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODIsNiArMTgyLDggQEAgQ2FwYWJpbGl0eUxl
dmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vy
cm9yOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBjYXNl
IG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNh
c2Ugb3BfaW5pdF9sYXp5X3JlZzoKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAgICAg
Y2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6CkBAIC0yMjMsMTQgKzIyNSw2IEBAIENhcGFiaWxp
dHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAgICAgcmV0dXJuIENhbkNvbXBp
bGVBbmRJbmxpbmU7CiAgICAgfQogCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAgICAg
IGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0gY29k
ZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpCi0gICAgICAgICAgICAmJiAhcGNb
Nl0udS5vcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIENhbklubGluZTsKLSAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBoYW5kbGUgdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNgotICAgICAgICByZXR1cm4gQ2Fubm90Q29t
cGlsZTsKLQogICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogCiAgICAgY2FzZSBvcF9jcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudDoKICAgICBjYXNlIG9wX25ld19mdW5jOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNzk4ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDggKzg2LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZl
bCBmdW5jdGlvbkNhcGFiaWxpdAogICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbkNv
bXBpbGVBbmRJbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKICAgICBpZiAobWlnaHRD
b21waWxlICYmICFtaWdodElubGluZSkKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3VuZChD
YW5Db21waWxlLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENvbXBp
bGUgJiYgbWlnaHRJbmxpbmUpCi0gICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2FuSW5s
aW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7CiAgICAgaWYgKCFtaWdodENvbXBpbGUgJiYg
IW1pZ2h0SW5saW5lKQogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNiArMzY1LDkgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29uc3Ry
dWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKKyAg
ICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNh
c2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2UgSW46
CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CkBAIC00MDEsNiArNDA0LDEzIEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9j
YWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgIC8vIFRoaXMgYWN0dWFsbHkgd3JpdGVz
IHRvIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBpdCByZWFkcyB0aGUgYXJyYXks
IGl0IGRvZXMKKyAgICAgICAgLy8gc28gaW4gYSB3YXkgdGhhdCBtYXkgdHJpZ2dlciBnZXR0ZXJz
IG9yIHZhcmlvdXMgdHJhcHMuCisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShX
b3JsZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5r
ZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRM
b2NhbCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0
SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5ODg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5
Miw3ICsyOTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0gQ2Fw
YWJpbGl0eUxldmVsIHsKICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwKICAgICBD
YW5Db21waWxlLAogICAgIENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxldmVs
Tm90U2V0CkBAIC0zMTIsNyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBhYmls
aXR5TGV2ZWwgbAogaW5saW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZlbCkK
IHsKICAgICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2FzZSBD
YW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpA
QCAtMzI1LDE0ICszMjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJCb3Vu
ZChDCiAgICAgc3dpdGNoIChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAgICBy
ZXR1cm4gQ2Fubm90Q29tcGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dpdGNo
IChiKSB7Ci0gICAgICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBpbGVB
bmRJbmxpbmU6Ci0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBjYXNl
IENhbkNvbXBpbGU6CiAgICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNvbXBp
bGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoK
ICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29u
c3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndh
cmRWYXJhcmdzOgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVj
dDoKICAgICBjYXNlIEJyZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCShyZXZpc2lvbiAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw2ICs4MjIsNyBAQCBwdWJsaWM6CiAgICAg
QmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJh
ZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8
T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwor
ICAgIEJhcjxDYWxsVmFyYXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJ
bmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8
Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRl
Y29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTc5ODg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMiw2ICsxMjIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0
aW9uSGFuZGxlCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJh
bWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxs
RnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1f
Z3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogI2lm
IENQVShYODYpCiAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZSBjYWxsIGFic3RyYWN0
aW9uLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgaW4gdGhlIFNwZWN1bGF0aXZlSklUIGxheWVyIQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3OTg4NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODMsNiArMTgzLDIwIEBAIHN0cnVjdCBTd2l0Y2hEYXRhIHsKICAgICBib29sIGRpZFVzZUp1bXBU
YWJsZTsKIH07CiAKK3N0cnVjdCBDYWxsVmFyYXJnc0RhdGEgeworICAgIGludCBmaXJzdFZhckFy
Z09mZnNldDsKK307CisKK3N0cnVjdCBMb2FkVmFyYXJnc0RhdGEgeworICAgIFZpcnR1YWxSZWdp
c3RlciBzdGFydDsgLy8gTG9jYWwgZm9yIHRoZSBmaXJzdCBlbGVtZW50LgorICAgIFZpcnR1YWxS
ZWdpc3RlciBjb3VudDsgLy8gTG9jYWwgZm9yIHRoZSBjb3VudC4KKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbWFjaGluZVN0YXJ0OworICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lQ291bnQ7CisgICAg
dW5zaWduZWQgb2Zmc2V0OyAvLyBXaGljaCBhcnJheSBlbGVtZW50IHRvIHN0YXJ0IHdpdGguIFVz
dWFsbHkgdGhpcyBpcyAwLgorICAgIHVuc2lnbmVkIG1hbmRhdG9yeU1pbmltdW07IC8vIFRoZSBu
dW1iZXIgb2YgZWxlbWVudHMgb24gdGhlIHN0YWNrIHRoYXQgbXVzdCBiZSBpbml0aWFsaXplZDsg
aWYgdGhlIGFycmF5IGlzIHRvbyBzaG9ydCB0aGVuIHRoZSBtaXNzaW5nIGVsZW1lbnRzIG11c3Qg
Z2V0IHVuZGVmaW5lZC4KKyAgICB1bnNpZ25lZCBsaW1pdDsgLy8gTWF4aW11bSBudW1iZXIgb2Yg
ZWxlbWVudHMgdG8gbG9hZC4KK307CisKIC8vIFRoaXMgdHlwZSB1c2VkIGluIHBhc3NpbmcgYW4g
aW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVz
IGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sg
ZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVu
dGlmaWVyKSBmcm9tIGEgTm9kZSouCkBAIC04ODgsNiArOTAyLDM1IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihtX29w
SW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzQ2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAg
ICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEq
IGNhbGxWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQ2FsbFZhcmFyZ3NE
YXRhKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENhbGxWYXJhcmdzRGF0YSo+KG1f
b3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3M7CisgICAgfQorICAgIAorICAg
IExvYWRWYXJhcmdzRGF0YSogbG9hZFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChoYXNMb2FkVmFyYXJnc0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8TG9h
ZFZhcmFyZ3NEYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKICAgICBib29sIGhhc1Jlc3Vs
dCgpCiAgICAgewogICAgICAgICByZXR1cm4gISFyZXN1bHQoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYg
KzE0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiB0aGlzIG11
c3QgYmUgdGhlIGRpcmVjdGx5IHN1YnNlcXVlbnQgcHJvcGVydHkgcHV0LiBOb3RlIHRoYXQgUHV0
QnlWYWwgKi9cCiAgICAgLyogb3Bjb2RlcyB1c2UgVmFyQXJncyBiZWF1c2UgdGhleSBtYXkgaGF2
ZSB1cCB0byA0IGNoaWxkcmVuLiAqL1wKICAgICBtYWNybyhHZXRCeVZhbCwgTm9kZVJlc3VsdEpT
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQdXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKQEAgLTIxNyw2ICsyMTgsOSBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogQ2FsbHMuICovXAogICAgIG1hY3JvKENhbGwsIE5v
ZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1h
Y3JvKENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNW
YXJBcmdzKSBcCisgICAgbWFjcm8oQ2FsbFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDYWxsRm9yd2FyZFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDb25zdHJ1Y3RWYXJhcmdzLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmF0aXZlQ2FsbCwgTm9kZVJl
c3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8o
TmF0aXZlQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlz
aW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsMTcgQEAg
dm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KKyAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGltaXQ7IGktLTspIHsKKyAgICAgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0
Lm9mZnNldCgpICsgaSkpID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNl
dCgpICsgaSkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTc5ODg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMDE4LDYgKzEwMTgsMjcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5vdGlmeVdyaXRlKAogICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhl
Y3V0ZWQgTm90aWZ5V3JpdGUiKTsKIH0KIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJn
dW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwor
ICAgIAorICAgIHJldHVybiBzaXplT2ZWYXJhcmdzKGV4ZWMsIGFyZ3VtZW50cywgZmlyc3RWYXJB
cmdPZmZzZXQpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3Mo
RXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRBcmd1bWVudHMsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbmd0aCwgaW50MzJf
dCBtYW5kYXRvcnlNaW5pbXVtKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYXJndW1l
bnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOworICAgIAorICAgIGxvYWRW
YXJhcmdzKGV4ZWMsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnREZXN0KSwgYXJndW1lbnRz
LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgCisgICAgZm9yIChpbnQzMl90IGkgPSBsZW5ndGg7IGkg
PCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisgICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVz
dCArIGkpID0ganNVbmRlZmluZWQoKTsKK30KKwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICByZXR1cm4gZm1vZChh
LCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShy
ZXZpc2lvbiAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjUsNiArMTI1LDggQEAgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMwogY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcq
KTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqLCBW
YXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7CitpbnQzMl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBh
cmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSosIGludDMyX3QgZmlyc3RFbGVtZW50RGVz
dCwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW5n
dGgsIGludDMyX3QgbWFuZGF0b3J5TWluaW11bSk7CiAKIGludDY0X3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0ludDUyKEVuY29kZWRKU1ZhbHVlKTsKIGludDY0
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG91YmxlVG9JbnQ1Mihkb3VibGUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9j
YWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgs
NiArMTM4LDE4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCB3cml0ZVRvcCgpCiAgICAgewor
ICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IExvYWRWYXJhcmdzKSB7CisgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgd2Ugbm90ZSB0aGUgd3JpdGVzIHRvIHRoZSBsb2NhbHMgdGhhdCB3aWxsIHN0
b3JlIHRoZSBhcnJheSBlbGVtZW50cyBhbmQKKyAgICAgICAgICAgIC8vIGNvdW50LgorICAgICAg
ICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
KyAgICAgICAgICAgIG1fd3JpdGUoZGF0YS0+Y291bnQpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAgICAgICAgICAgbV93cml0ZShWaXJ0
dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNw
ZWNpYWwgZm9yIENhbGxGb3J3YXJkVmFyYXJncywgc2luY2UgaXQgcmVhZHMKKyAgICAgICAgLy8g
b3VyIGFyZ3VtZW50cyB0aGUgc2FtZSB3YXkgdGhhdCBhbnkgZWZmZWN0ZnVsIHRoaW5nIG1pZ2h0
LgorICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGgubV9jb2RlQmxvY2stPnVzZXNBcmd1bWVu
dHMoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKICAgICAgICAgICAgICAgICBtX3dyaXRlKHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzk4ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xODksNiArMTg5LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3QKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBD
b25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFy
Z3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoK
ICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJy
YXlXaXRoU2l6ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTc5ODg3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI0
LDM3ICs2MjQsMTcxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEK
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBib29s
IGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlzQ2FsbCkKLSAgICAgICAg
REZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7
Ci0gICAgCisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBib29sIGlz
Q2FsbDsKKyAgICBib29sIGlzVmFyYXJnczsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICBjYXNlIENhbGw6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOworICAg
ICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJ
bmZvOjpDb25zdHJ1Y3Q7CisgICAgICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAgICBpc1ZhcmFy
Z3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBj
YXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86
OkNhbGxWYXJhcmdzOworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3Mg
PSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAg
ICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICBp
c0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJi
YWQgbm9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIC8vIEZvciBjb25z
dHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8g
bWFrZSBzcGFjZQogICAgIC8vIGZvciBpdC4KICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBp
c0NhbGwgPyAwIDogMTsKICAgICAKLSAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBl
ID0gaXNDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7
CisgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsKICAgICAKLSAg
ICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+
Zmlyc3RDaGlsZCgpXTsKLSAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxk
IGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQotICAgIC8v
IGFyZ3VtZW50cy4KLSAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkg
LSAxOworICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlz
IHRyaWNraWVyLgorICAgIGlmIChpc1ZhcmFyZ3MpIHsKKyAgICAgICAgLy8gMSkgZ2V0IHRoZSBh
cmd1bWVudHMKKyAgICAgICAgLy8gMikgZmx1c2ggcmVnaXN0ZXJzCisgICAgICAgIC8vIDMpIHNl
dCB1cCB0aGUgY2FsbCBmcmFtZQorICAgICAgICAvLyA0KSBnZXQgdGhlIGNhbGxlZSBhbmQgInRo
aXMiIGFuZCBoYW5kbGUgdGhlbQorICAgICAgICAvLyA1KSBmbHVzaCByZWdpc3RlcnMgYWdhaW4K
KyAgICAgICAgCisgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJh
cmdzRGF0YSgpOworICAgICAgICBFZGdlIGFyZ3VtZW50c0VkZ2UgPSBpc0NhbGwgPyBub2RlLT5j
aGlsZDMoKSA6IG5vZGUtPmNoaWxkMigpOworCisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIAorICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIFdlIGF2b2lk
IGNhbGxpbmcgZmx1c2hSZWdpc3RlcnMoKSBpbnNpZGUgdGhlIGNvbnRyb2wgZmxvdyBvZiBDYWxs
Rm9yd2FyZFZhcmFyZ3MuCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBhdXRvIGxvYWRBcmd1bWVudHNHUFIgPSBbJl0gKEdQUlJlZyBy
ZXNlcnZlZEdQUikgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRW
YXJhcmdzKSB7CisgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gSklUQ29tcGlsZXI6OnNl
bGVjdFNjcmF0Y2hHUFIocmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2
NCgKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRz
R1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc2VydmVk
R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIGxvY2socmVzZXJ2ZWRH
UFIpOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBhcmd1
bWVudHNFZGdlKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHMuZ3By
KCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgICAgICAgICAgICAgIHVubG9jayhyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc2NyYXRjaEdQUjEgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNH
UFIsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIyID0gSklUQ29tcGlsZXI6
OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgcmVzZXJ2ZWRHUFIp
OworICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQ
Uihhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgcmVzZXJ2ZWRHUFIpOwor
ICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGUgd2hv
bGUgcmVnaXN0ZXIgZmlsZSB0byBvdXJzZWx2ZXMsIGFuZCBhcmd1bWVudHNHUFIgaGFzIHRoZQor
ICAgICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFNlbGVjdCBzb21lIHNjcmF0Y2ggcmVnaXN0
ZXJzLgorICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lsbCB1c2Ugc2NyYXRjaEdQUjIgdG8gcG9p
bnQgdG8gb3VyIHN0YWNrIGZyYW1lLgorCisgICAgICAgIHVuc2lnbmVkIG51bVVzZWRTdGFja1Ns
b3RzID0gbV9qaXQuZ3JhcGgoKS5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgICAgIAorICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBoYXZlQXJndW1lbnRzOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3
YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8gRG8gdGhlIGhvcnJpZmljIGZvby5hcHBseSh0
aGlzLCBhcmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBkbyB0
aGlzIG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwgaW5zdGVhZCBvZiBoZXJlLiBUaGlzIHdp
bGwgaGFwcGVuCisgICAgICAgICAgICAvLyBvbmNlIHdlIGdldCByaWQgb2YgdGhlIGFyZ3VtZW50
cyBsYXp5IGNyZWF0aW9uIGFuZCBsYXp5IHRlYXItb2ZmLgorICAgICAgICAgICAgCisgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmd1bWVu
dHNHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBlbWl0U2V0
dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShtX2ppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5zdGFja09mZnNl
dCgpLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgICAgICAgICAgcmVz
dWx0R1BSID0gc2NyYXRjaEdQUjI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhdmVBcmd1
bWVudHMgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7
CisgICAgICAgIH0KKworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlz
Rmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJpZ2h0IG5vdywgYXJndW1lbnRzIGlz
IGluIGFyZ3VtZW50c0dQUiBhbmQgdGhlIHJlZ2lzdGVyIGZpbGUgaXMgZmx1c2hlZC4KKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzR1BSLCBudW1Vc2VkU3RhY2tTbG90cywgZmlyc3RWYXJB
cmdPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGhhdmUgdGhlIGFyZ3VtZW50
IGNvdW50IG9mIHRoZSBjYWxsZWUgZnJhbWUsIGJ1dCB3ZSd2ZSBsb3N0IHRoZSBhcmd1bWVudHMg
b3BlcmFuZC4KKyAgICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBvcGVyYW5kIHdo
aWxlIHByZXNlcnZpbmcgdGhlIGNhbGxlZSBmcmFtZS4KKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQ
UihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKG51bVVzZWRTdGFja1Nsb3RzKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBlbWl0U2V0VmFy
YXJnc0ZyYW1lKG1faml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHNjcmF0Y2hH
UFIxLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoLShz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgc2NyYXRjaEdQUjEsIEdQUklu
Zm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUsIHNjcmF0Y2hHUFIxLCBhcmd1bWVudHNHUFIs
IGZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIAor
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAg
ICBoYXZlQXJndW1lbnRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFk
ZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVzdWx0R1BSLCBH
UFJJbmZvOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBERkdfQVNT
RVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlzRmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFdlIGRvbid0IG5lZWQgdGhlIGFyZ3VtZW50cyBhcnJheSBhbnltb3JlLgorICAgICAgICB1
c2UoYXJndW1lbnRzRWRnZSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNDYWxsKSB7CisgICAg
ICAgICAgICAvLyBOb3cgc2V0IHVwIHRoZSAidGhpcyIgYXJndW1lbnQuCisgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB0aGlzQXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgR1BSUmVnIHRoaXNBcmd1bWVudEdQUiA9IHRoaXNBcmd1bWVudC5ncHIoKTsKKyAgICAg
ICAgICAgIHRoaXNBcmd1bWVudC51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICB0aGlzQXJndW1lbnRzR1BSLAorICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgdGhlIGZ1bmN0
aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50
cy4KKyAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsK
ICAgICAKLSAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVu
dDsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1l
bnQ7CiAgICAgCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KG51bUFyZ3MpLCBjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51
bUFyZ3MpLCBjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsK
ICAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAg
ICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+
Zmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywg
YXJnRWRnZSk7Ci0gICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7Ci0gICAgICAgIHVz
ZShhcmdFZGdlKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBp
KyspIHsKKyAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdD
aGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7CisgICAgICAgICAgICBHUFJSZWcgYXJnR1BSID0g
YXJnLmdwcigpOworICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwogICAgICAgICAKLSAgICAgICAg
bV9qaXQuc3RvcmU2NChhcmdHUFIsIGNhbGxlZUFyZ3VtZW50U2xvdChpICsgZHVtbXlUaGlzQXJn
dW1lbnQpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BSLCBjYWxsZWVBcmd1bWVu
dFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBK
U1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CiAgICAgR1BSUmVnIGNhbGxl
ZUdQUiA9IGNhbGxlZS5ncHIoKTsKLSAgICB1c2UoY2FsbGVlRWRnZSk7CisgICAgY2FsbGVlLnVz
ZSgpOwogICAgIG1faml0LnN0b3JlNjQoY2FsbGVlR1BSLCBjYWxsZWVGcmFtZVNsb3QoSlNTdGFj
azo6Q2FsbGVlKSk7CiAgICAgCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKQEAgLTY5Miw2ICs4MjYs
MTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIGNhbGxM
aW5rSW5mby0+Y2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIAogICAgIG1faml0LmFkZEpTQ2Fs
bChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7CisgICAg
CisgICAgLy8gSWYgd2Ugd2VyZSB2YXJhcmdzLCB0aGVuIGFmdGVyIHRoZSBjYWxscyBhcmUgZG9u
ZSwgd2UgbmVlZCB0byByZWVzdGFibGlzaCBvdXIgc3RhY2sgcG9pbnRlci4KKyAgICBpZiAoaXNW
YXJhcmdzKQorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQ
b2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIH0KIAogLy8gQ2xhbmcgc2hv
dWxkIGFsbG93IHVucmVhY2hhYmxlIFtbY2xhbmc6OmZhbGx0aHJvdWdoXV0gaW4gdGVtcGxhdGUg
ZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0ZSBleHBhbnNpb24gdXNlcyBpdApAQCAtNDIzMSw5ICs0
MzY5LDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAg
IGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgor
ICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
ICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBj
YXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGFyZ3VtZW50c0dQ
UjsKKyAgICAgICAgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5n
cHIoKTsKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c0dQUiwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpOwor
ICAgICAgICAKKyAgICAgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7CisgICAg
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9CisgICAgICAgIHVubG9jayhHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlcmUg
aXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0
eSB0d2ljZS4gVGhpcyBpcyBzYWZlCisgICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2Yg
dGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29t
cGxpYW5jZQorICAgICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBi
ZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQK
KyAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4CisgICAgICAgIAorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCks
IEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwK
KyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAor
ICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBwYXlsb2FkRm9y
KGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Mb2FkVmFyYXJncywgZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVu
dHNHUFIsIGRhdGEtPm9mZnNldCwgZGF0YS0+bGVuZ3RoLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVt
KTsKKyAgICAgICAgCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBD
cmVhdGVBY3RpdmF0aW9uOiB7CiAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9k
ZSwgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKQEAg
LTQzMzgsOSArNDUxOCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVu
dHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwot
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAg
IGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAm
JiAhSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Mobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZS0+a2luZCkpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoCisgICAgICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkgLSAxKSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRS
ZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFs
UmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3Rlciks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
c3VsdEdQUik7CisgICAgICAgIH0KICAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDM1NCwyMCArNDU0NSwyMiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CiAgICAgICAgIAotICAg
ICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAg
ICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAg
JiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUtPmtpbmQpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKAogICAgICAgICAg
ICAgICAgIEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKSwKICAgICAgICAgICAg
ICAgICByZXN1bHRHUFIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1
bHRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3Rl
cjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0
ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVzdWx0R1BSKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IHRo
ZSBzbG93IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2FyZCBzcGVjdWxhdGlv
biB0aGF0IHRoZQotICAgICAgICAvLyByZXN1bHQgaXMgYW4gaW50ZWdlci4gRm9yIG5vdyB3ZSBw
b3N0cG9uZSB0aGUgc3BlY3VsYXRpb24gYnkgaGF2aW5nIHRoaXMgcmV0dXJuCi0gICAgICAgIC8v
IGEgSlNWYWx1ZS4KLSAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIGNyZWF0ZWQsIHRoaXMsIG9w
ZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aCwgcmVzdWx0R1BSLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTc5ODg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NzgsNyArNTc4LDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0j
aWZuZGVmIE5ERUJVRwogICAgIC8vIFVzZWQgdG8gQVNTRVJUIGZsdXNoUmVnaXN0ZXJzKCkgaGFz
IGJlZW4gY2FsbGVkIHByaW9yIHRvCiAgICAgLy8gY2FsbGluZyBvdXQgZnJvbSBKSVQgY29kZSB0
byBhIEMgaGVscGVyIGZ1bmN0aW9uLgogICAgIGJvb2wgaXNGbHVzaGVkKCkKQEAgLTU5Myw3ICs1
OTIsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQot
I2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6
SW1tNjQgdmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHJldmlz
aW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICBC
aXRWZWN0b3IgdXNlZExvY2FsczsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2Ug
dmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgZnJvbSBJUi4KLSAgICAgICAgYm9vbCBoYXNHZXRMb2Nh
bFVubGlua2VkID0gZmFsc2U7CisgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0g
ZmFsc2U7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKQEAg
LTgxLDcgKzgxLDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQu
aXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KG9wZXJhbmQudG9Mb2NhbCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaGFzR2V0TG9jYWxVbmxpbmtlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGRhdGEtPmNvdW50LmlzTG9jYWwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRM
b2NhbHMuc2V0KGRhdGEtPmNvdW50LnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChkYXRhLT5zdGFydC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgcGFydCByZWFsbHkgcmVsaWVzIG9uIHRoZSBjb250aWd1aXR5IG9mIHN0YWNrIGxheW91dAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdubWVudHMuCisgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0
YS0+bGltaXQgLSAxKS5pc0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSAr
IGkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIH0gLy8gdGhlIGVsc2UgY2FzZSBz
aG91bGRuJ3QgaGFwcGVuLgorICAgICAgICAgICAgICAgICAgICBoYXNOb2Rlc1RoYXROZWVkRml4
dXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTQ4LDI0ICsxNjMsMjEgQEAgcHVibGljOgogICAg
ICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGlu
ZUxvY2FsKCkgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICBhbGxv
Y2F0aW9uW3ZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKV0pOworICAgICAgICAgICAgdmFyaWFi
bGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFsbG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgp
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT51c2VzQXJn
dW1lbnRzKCkpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3Rl
ciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25b
Y29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkudG9Mb2NhbCgpXSk7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPQorICAgICAgICAgICAgICAgIGFz
c2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCgKLSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChhbGxvY2F0aW9uWwotICAgICAgICAgICAgICAgICAgICB1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+YXJndW1l
bnRzUmVnaXN0ZXIoKSkudG9Mb2NhbCgpXSkKKyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2Nh
dGlvbiwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGNvZGVCbG9jaygpLT5hcmd1bWVudHNS
ZWdpc3RlcigpKSkKICAgICAgICAgICAgICAgICA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0
ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRBcmd1
bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmIChjb2RlQmxvY2soKS0+dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCkuaXNW
YWxpZCgpKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0QWN0aXZhdGlvblJlZ2lzdGVy
KAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bY29k
ZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpLnRvTG9jYWwoKV0pKTsKKyAgICAgICAgICAg
ICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3Rlcigp
KSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgcmVnaXN0ZXIgaXMgbmV2
ZXIgdmFsaWQgZm9yIERGRyBjb2RlIGJsb2Nrcy4KQEAgLTE3NiwxMiArMTg4LDExIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZGF0YS5p
bmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmV4ZWN1dGFibGUtPnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgICAgIGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bCgKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblttX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKGlubGluZUNhbGxGcmFtZSkudG9Mb2NhbCgpXSk7CisgICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3RlciA9IGFzc2lnbigKKyAgICAgICAgICAgICAg
ICAgICAgYWxsb2NhdGlvbiwgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxs
RnJhbWUpKTsKIAogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKAotICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW3VubW9kaWZpZWRBcmd1
bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRz
UmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSkudG9Mb2NhbCgpXSkKKyAgICAgICAgICAgICAg
ICAgICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dy
YXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpKQogICAgICAgICAgICAg
ICAgICAgICA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHNSZWdpc3RlcikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMjcs
OSArMjM4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cGFy
YW1ldGVyQ291bnQoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHN5bWJvbFRh
YmxlLT5wYXJhbWV0ZXJDb3VudCgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgIG5ld1Ns
b3dBcmd1bWVudHNbaV0gPSBzbG93QXJndW1lbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKHNsb3dBcmd1bWVudHNbaV0uaW5k
ZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChhbGxvY2F0aW9uW3JlZy50b0xvY2FsKCldKS5vZmZzZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IGFzc2lnbihhbGxvY2F0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIoc2xvd0FyZ3VtZXRzW2ldLmluZGV4KSkub2Zmc2V0KCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Nsb3dB
cmd1bWVudHMgPSBXVEY6Om1vdmUobmV3U2xvd0FyZ3VtZW50cyk7CkBAIC0yMzcsNyArMjQ2LDcg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGaXggR2V0TG9jYWxV
bmxpbmtlZCdzIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi0gICAgICAgIGlmIChoYXNHZXRMb2NhbFVu
bGlua2VkKSB7CisgICAgICAgIGlmIChoYXNOb2Rlc1RoYXROZWVkRml4dXApIHsKICAgICAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQpAQCAtMjQ2
LDEwICsyNTUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+dW5s
aW5rZWRMb2NhbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2Nh
bCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChhbGxvY2F0aW9uW29wZXJhbmQudG9Mb2NhbCgpXSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1hY2hpbmVMb2NhbChvcGVyYW5kKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFVubGlua2VkTWFjaGluZUxvY2FsKGFzc2lnbihh
bGxvY2F0aW9uLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICAgICAg
ICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24o
YWxsb2NhdGlvbiwgZGF0YS0+Y291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+
bWFjaGluZVN0YXJ0ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKQEAgLTI2Miw2ICsyNzUsMjAgQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCitwcml2YXRlOgorICAgIFZpcnR1YWxSZWdpc3Rl
ciBhc3NpZ24oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lz
dGVyIHNyYykKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBzcmM7Cisg
ICAgICAgIGlmIChyZXN1bHQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBteUFs
bG9jYXRpb24gPSBhbGxvY2F0aW9uW3Jlc3VsdC50b0xvY2FsKCldOworICAgICAgICAgICAgaWYg
KG15QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBWaXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogfTsKIAogYm9vbCBwZXJmb3JtU3RhY2tMYXlvdXQo
R3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc5ODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCw2ICsxMjAs
OSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBT
dG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0
cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
KyAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5h
dGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzk4
ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk4Niw4ICsxOTg2LDIyIEBAIHByaXZhdGU6CiAgICAgewogICAg
ICAgICBjaGVja0FyZ3VtZW50c05vdENyZWF0ZWQoKTsKIAotICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7
Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmFkZChtX291dC5sb2FkMzJOb25OZWdhdGl2ZShwYXls
b2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSwgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsK
KyAgICAgICAgaWYgKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAg
ICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZS1raW5kKSkgeworICAgICAgICAgICAgc2V0SW50MzIoCisg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigKKyAgICAgICAgICAgICAgICAgICAgbV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0g
MSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3Rl
ciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAg
ICAgICAgICAgIHNldEludDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmFkZCgKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihhcmd1bWVudENv
dW50UmVnaXN0ZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtMSkp
KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50
QnlWYWwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyAr
MTM0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIHJldHVybiBp
bnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgY2FsbGVyU2Nv
cGVDaGFpbik7CiB9CiAKLXVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTU3RhY2sqIHN0YWNrLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVt
VXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQordW5zaWduZWQgc2l6
ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQz
Ml90IGZpcnN0VmFyQXJnT2Zmc2V0KQogewogICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICBpZiAo
IWFyZ3VtZW50cykKQEAgLTE1Niw2ICsxNTYsMTMgQEAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFy
YXJncyhDYWxsRnJhbWUqIAogICAgIGVsc2UKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAKKyAg
ICByZXR1cm4gbGVuZ3RoOworfQorCit1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1N0YWNrKiBzdGFjaywgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2ln
bmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3sKKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzaXplT2ZWYXJhcmdzKGNhbGxGcmFtZSwgYXJndW1lbnRzLCBm
aXJzdFZhckFyZ09mZnNldCk7CisgICAgCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNh
bGxlZUZyYW1lRm9yVmFyYXJncyhjYWxsRnJhbWUsIG51bVVzZWRTdGFja1Nsb3RzLCBsZW5ndGgg
KyAxKTsKICAgICBpZiAobGVuZ3RoID4gQXJndW1lbnRzOjpNYXhBcmd1bWVudHMgfHwgIXN0YWNr
LT5lbnN1cmVDYXBhY2l0eUZvcihjYWxsZWVGcmFtZS0+cmVnaXN0ZXJzKCkpKSB7CiAgICAgICAg
IHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTc5ODg3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
cmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBwYWRkZWRD
YWxsZWVGcmFtZU9mZnNldCk7CiAgICAgfQogCisgICAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhD
YWxsRnJhbWUqIGV4ZWMsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09m
ZnNldCk7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWMs
IEpTU3RhY2sqLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMs
IHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB2b2lkIGxvYWRWYXJhcmdzKENhbGxG
cmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFs
dWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBz
ZXR1cFZhcmFyZ3NGcmFtZShDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0Nh
bGxlZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50
MzJfdCBsZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDE3OTg4NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDksNyArMTQ5LDEwIEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENh
bGwKIAogICAgICAgICBtX2ZyYW1lLm1fY2FsbEZyYW1lID0gY2FsbEZyYW1lOwogICAgICAgICBt
X2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBtX2Zy
YW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCk7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAgICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxp
bmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCk7CiAgICAgICAgIG1fZnJhbWUubV9ieXRl
Y29kZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTc5ODg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzM4LDYgKzMzOCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHN0YXRpYyBBZGRy
ZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7Cisg
ICAgICAgIC8vIE5CLiBJdCdzIHRlbXB0aW5nIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBzb21l
dGltZXMgdXNlIGFuIG9mZnNldCBmcm9tIHRoZSBzdGFjaworICAgICAgICAvLyByZWdpc3RlciBi
ZWNhdXNlIGZvciBzb21lIG9mZnNldHMgdGhhdCB3aWxsIGVuY29kZSB0byBhIHNtYWxsZXIgaW5z
dHJ1Y3Rpb24uIEJ1dCB3ZQorICAgICAgICAvLyBjYW5ub3QgZG8gdGhpcy4gV2UgdXNlIHRoaXMg
aW4gcGxhY2VzIHdoZXJlIHRoZSBzdGFjayBwb2ludGVyIGhhcyBiZWVuIG1vdmVkIHRvIHNvbWUK
KyAgICAgICAgLy8gdW5wcmVkaWN0YWJsZSBsb2NhdGlvbi4KICAgICAgICAgQVNTRVJUKHZpcnR1
YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24g
MTc5ODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NjQsMTEgKzQ2NCw2IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNv
bXBpbGUoSkkKICAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAg
ICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBERkc6OkNhbklubGluZToKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwot
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91
bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNh
bkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1f
Y2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZp
c2lvbiAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTYsNyArMjk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9p
ZCBjb21waWxlT3BDYWxsKE9wY29kZUlELCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQs
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICAgICAgdm9pZCBjb21waWxlU2V0dXBWYXJhcmdzRnJh
bWUoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUo
SW5zdHJ1Y3Rpb24qLCBDYWxsTGlua0luZm8qKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2
YWwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAg
dm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNzk4ODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBA
IHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJh
bWUoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQordm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFy
Z3NGcmFtZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5mbyogaW5mbykKIHsK
ICAgICBpbnQgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBh
cmd1bWVudHMgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CkBAIC05MCw2ICs5MCwxNiBAQCB2
b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RyCiAgICAgaWYgKGNhbk9wdGlt
aXplKQogICAgICAgICBlbmQubGluayh0aGlzKTsKICAgICAKKyAgICAvLyBQcm9maWxlIHRoZSBh
cmd1bWVudCBjb3VudC4KKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1l
bnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zm
c2V0KSwgcmVnVDIpOworICAgIGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsK
KyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAg
ICBKdW1wIG5vdFNhdHVyYXRlZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0
ZWRJbW0zMigyNTUpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAg
bm90U2F0dXJhdGVkLmxpbmsodGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVt
QXJndW1lbnRzKTsKKyAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgLy8gSW5p
dGlhbGl6ZSAndGhpcycuCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJl
Z1QwKTsKICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwpA
QCAtMTM0LDcgKzE0NCw5IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0
cnUKIAogdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgaW50
IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CisKKyAgICAgaW50IGNhbGxlZSA9
IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAg
ICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpAQCAt
MTUyLDcgKzE2NCwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJ
CiAgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVO
R1RIKG9wX2NhbGxfdmFyYXJncyksIGNhbGxfYW5kX2NhbGxfdmFyYXJnc19vcGNvZGVzX211c3Rf
YmVfc2FtZV9sZW5ndGgpOwogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFyYXJncyksIGNhbGxfYW5kX2NvbnN0
cnVjdF92YXJhcmdzX29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJn
cykKKzw8PDw8PDwgLm1pbmUKKyAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKGluc3RydWN0aW9u
LCBpbmZvKTsKKz09PT09PT0KICAgICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKGluc3Ry
dWN0aW9uKTsKKz4+Pj4+Pj4gLnIxNzk4NjIKICAgICBlbHNlIHsKICAgICAgICAgaW50IGFyZ0Nv
dW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtMTc2LDkgKzE5Miw3IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKIAogICAgIHN0b3JlNjQocmVnVDAs
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkNhbGxlZSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsK
ICAgICAKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJ
bmZvKCk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CisgICBpZiAob3Bj
b2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVj
dGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gMTc5ODg3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2
LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBzdGF0aWMgQXJndW1lbnRzKiBjcmVhdGUoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIEFyZ3VtZW50c01vZGUgbW9kZSA9IE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9kZSkKICAg
ICB7Ci0gICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFwLCBvZmZzZXRPZklubGluZVJlZ2lzdGVyQXJyYXkoKSAr
IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhpbmxpbmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNh
bGxGcmFtZSk7CisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFwLCBvZmZzZXRPZklubGluZVJlZ2lzdGVyQXJy
YXkoKSArIHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhjYWxsRnJhbWUsIGlubGluZUNhbGxGcmFt
ZSkpKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKICAgICAgICAgYXJndW1lbnRzLT5maW5pc2hDcmVh
dGlvbihjYWxsRnJhbWUsIGlubGluZUNhbGxGcmFtZSwgbW9kZSk7CiAgICAgICAgIHJldHVybiBh
cmd1bWVudHM7CiAgICAgfQpAQCAtMTI0LDcgKzEyNCwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y3JlYXRlU3RyaWN0TW9kZUNhbGxlZUlmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSopOwogCiAgICAgc3Rh
dGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
IHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRl
cyhJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkgeyByZXR1cm4gc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikgKiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0g
MSk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkKKyAgICAgICAgcmV0dXJuIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7
CisgICAgfQogICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QpOwogICAgIGJvb2wgdHJ5U2V0QXJn
dW1lbnQoVk0mLCBzaXplX3QgYXJndW1lbnQsIEpTVmFsdWUpOwogICAgIEpTVmFsdWUgdHJ5R2V0
QXJndW1lbnQoc2l6ZV90IGFyZ3VtZW50KTsKQEAgLTM0MCwxMSArMzQ4LDE1IEBAIGlubGluZSB2
b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EKICAgICBtX292ZXJyb2RlQ2FsbGVlID0g
ZmFsc2U7CiAgICAgbV9vdmVycm9kZUNhbGxlciA9IGZhbHNlOwogICAgIG1faXNTdHJpY3RNb2Rl
ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJs
ZS5nZXQoKSktPmlzU3RyaWN0TW9kZSgpOwotCisgICAgCisgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgbV9udW1Bcmd1bWVu
dHMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIu
b2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgIGVsc2UKKyAgICAgICAgbV9udW1Bcmd1bWVu
dHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgbV9udW1Bcmd1bWVu
dHMtLTsKKyAgICAKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIE5vcm1hbEFyZ3VtZW50
c0NyZWF0aW9uTW9kZTogewotICAgICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7Ci0gICAgICAgIAogICAgICAgICBpZiAobV9udW1Bcmd1
bWVudHMpIHsKICAgICAgICAgICAgIGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAg
ICAgICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50T25lIC0g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCk7CkBAIC0zNjEsNyArMzczLDYg
QEAgaW5saW5lIHZvaWQgQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9u
dW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwogICAg
ICAgICBpZiAobV9udW1Bcmd1bWVudHMpIHsKICAgICAgICAgICAgIGludCBvZmZzZXRGb3JBcmd1
bWVudE9uZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpOwogICAgICAgICAgICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSArIG9mZnNl
dEZvckFyZ3VtZW50T25lIC0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAx
Nzk4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxMSw2ICsyMTEsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0
cmluZzsKICAgICAvKiBmcm9tIHN1cGVyIGxvbmcgY29tcGlsZXMgdGhhdCB0YWtlIGEgbG90IG9m
IG1lbW9yeS4gKi9cCiAgICAgdih1bnNpZ25lZCwgbWF4aW11bUlubGluaW5nQ2FsbGVyU2l6ZSwg
MTAwMDApIFwKICAgICBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11bVZhcmFyZ3NGb3JJbmxpbmlu
ZywgMTAwKSBcCisgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5p
bmcsIHRydWUpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50QnlJZElubGluaW5nLCB0
cnVlKSBcCiAgICAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246417</attachid>
            <date>2015-02-11 15:04:29 -0800</date>
            <delta_ts>2015-02-11 15:59:28 -0800</delta_ts>
            <desc>OMG so much code</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>103698</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcxLDYgKzQ3MSwxNiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBsc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0p
LCBzcmNEZXN0KTsKICAgICB9CisgICAgCisgICAgdm9pZCByc2hpZnRQdHIoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICByc2hpZnQzMih0cnVzdGVkSW1tMzJG
b3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHVyc2hpZnRQdHIoSW1t
MzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICB1cnNoaWZ0MzIodHJ1
c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CisgICAgfQogCiAgICAgdm9pZCBuZWdQ
dHIoUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKQEAgLTc1MCw2ICs3NjAsMTYgQEAgcHVibGljOgog
ICAgICAgICBsc2hpZnQ2NCh0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKICAg
ICB9CiAKKyAgICB2b2lkIHJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkK
KyAgICB7CisgICAgICAgIHJzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rl
c3QpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
c3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVyc2hpZnQ2NCh0cnVzdGVkSW1tMzJGb3JTaGlmdChp
bW0pLCBzcmNEZXN0KTsKKyAgICB9CisKICAgICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBuZWc2NChkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2Vu
CiAgICAgICAgICwgaGFzU2VlblNob3VsZFJlcGF0Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2Vl
bkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2FsbFR5cGUoTm9uZSkKKyAgICAgICAgLCBtYXhO
dW1Bcmd1bWVudHMoMCkKICAgICAgICAgLCBzbG93UGF0aENvdW50KDApCiAgICAgewogICAgIH0K
QEAgLTkxLDYgKzkyLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1Nl
bgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAxOwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDog
NTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBjYWxsZWVHUFIgOiA4OworICAgIHVpbnQ4X3Qg
bWF4TnVtQXJndW1lbnRzOyAvLyBPbmx5IHVzZWQgZm9yIHZhcmFyZ3MgY2FsbHMuCiAgICAgdWlu
dDMyX3Qgc2xvd1BhdGhDb3VudDsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNw
cAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw5IEBAIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFs
bHkgbmVlZCB0aGlzLCBidXQgYW55dGltZSB3ZSBoYXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQg
YmVjb21lcyBpbmRpc3BlbnNhYmxlLgogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsK
ICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZyb21DYWxsTGlua0luZm8obG9ja2VyLCBjYWxsTGlu
a0luZm8pOworICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGcm9tQ2FsbExpbmtJ
bmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICByZXN1bHQubV9tYXhOdW1Bcmd1bWVudHMg
PSBjYWxsTGlua0luZm8ubWF4TnVtQXJndW1lbnRzOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygK
QEAgLTI5MSw2ICsyOTMsMTMgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVGbwogICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCwgYmFzZWxpbmVNYXApOwogfQogCit2b2lkIENhbGxMaW5rU3RhdHVzOjpzZXRQ
cm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFudCB2YXJpYW50KQoreworICAgIG1fdmFyaWFu
dHMgPSBDYWxsVmFyaWFudExpc3R7IHZhcmlhbnQgfTsKKyAgICBtX2NvdWxkVGFrZVNsb3dQYXRo
ID0gZmFsc2U7CisgICAgbV9pc1Byb3ZlZCA9IHRydWU7Cit9CisKIGJvb2wgQ2FsbExpbmtTdGF0
dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENhbGxMaW5r
U3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAgbV9pc1By
b3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAg
IHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApAQCAtMTA4
LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZv
cigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFw
JiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29uc3RhbnRD
YWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAog
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAgLTEyMyw2
ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7
IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIAor
ICAgIGJvb2wgbWF4TnVtQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhOdW1Bcmd1bWVu
dHM7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHBy
aXZhdGU6CkBAIC0xMzcsNiArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBDYWxsVmFyaWFudExpc3Qg
bV92YXJpYW50czsKICAgICBib29sIG1fY291bGRUYWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lz
UHJvdmVkOworICAgIHVuc2lnbmVkIG1fbWF4TnVtQXJndW1lbnRzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBzdHJ1Y3Qg
SW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtpbmQgewogICAgICAgICBDYWxsLAogICAgICAg
ICBDb25zdHJ1Y3QsCisgICAgICAgIENhbGxWYXJhcmdzLAorICAgICAgICBDb25zdHJ1Y3RWYXJh
cmdzLAogICAgICAgICAKICAgICAgICAgLy8gRm9yIHRoZXNlLCB0aGUgc3RhY2tPZmZzZXQgaW5j
b3Jwb3JhdGVzIHRoZSBhcmd1bWVudCBjb3VudCBwbHVzIHRoZSB0cnVlIHJldHVybiBQQwogICAg
ICAgICAvLyBzbG90LgpAQCAtMTQwLDI1ICsxNDIsMzkgQEAgc3RydWN0IElubGluZUNhbGxGcmFt
ZSB7CiAgICAgICAgIHJldHVybiBDYWxsOwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgS2luZCB2
YXJhcmdzS2luZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAg
IHJldHVybiBDYWxsVmFyYXJnczsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAg
ICAgICAgICAgcmV0dXJuIENvbnN0cnVjdFZhcmFyZ3M7CisgICAgICAgIH0KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENhbGw7CisgICAgfQor
ICAgIAogICAgIHN0YXRpYyBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2lu
ZEZvcihLaW5kIGtpbmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAg
Y2FzZSBDYWxsOgorICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIEdldHRl
ckNhbGw6CiAgICAgICAgIGNhc2UgU2V0dGVyQ2FsbDoKICAgICAgICAgICAgIHJldHVybiBDb2Rl
Rm9yQ2FsbDsKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ29uc3RydWN0
VmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ29uc3RydWN0OwogICAgICAgICB9
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBD
b2RlRm9yQ2FsbDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgaXNOb3JtYWxDYWxsKEtp
bmQga2luZCkKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcmFyZ3MoS2luZCBraW5kKQogICAgIHsKICAg
ICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgQ2FsbDoKLSAgICAgICAgY2FzZSBD
b25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcxLDEwICsxODcsMTEgQEAgc3RydWN0IElu
bGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7CiAgICAgQml0VmVjdG9yIGNh
cHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUgbWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFi
bGUgbnVtYmVyaW5nLgogCi0gICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjk7Ci0gICAgdW5zaWdu
ZWQga2luZCA6IDI7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCisgICAgc2lnbmVkIHN0YWNrT2Zmc2V0
IDogMjg7CisgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAg
Ym9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2Fs
bGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2
YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXI7IC8vIFRoaXMgaXMgb25seSBzZXQgaWYg
dGhlIGNvZGUgdXNlcyBhcmd1bWVudHMuIFRoZSB1bm1vZGlmaWVkIGFyZ3VtZW50cyByZWdpc3Rl
ciBmb2xsb3dzIHRoZSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoKSBjb252ZW50aW9uIChz
ZWUgQ29kZUJsb2NrLmgpLgorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0
ZXI7IC8vIE9ubHkgc2V0IHdoZW4gd2UgaW5saW5lIGEgdmFyYXJncyBjYWxsLgogICAgIAogICAg
IC8vIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG5vdGlvbiBvZiBhICJkZWZhdWx0IiBzZXQgb2Yg
dmFsdWVzIGZvcgogICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1
Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCShyZXZpc2lvbiAxNzk5NTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw2ICs2Niw4IEBAIGNvbnN0IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtp
bmQga2kKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHNFc2NhcGVkIjsKICAgICBjYXNlIE5vdFN0
cmluZ09iamVjdDoKICAgICAgICAgcmV0dXJuICJOb3RTdHJpbmdPYmplY3QiOworICAgIGNhc2Ug
VmFyYXJnc092ZXJmbG93OgorICAgICAgICByZXR1cm4gIlZhcmFyZ3NPdmVyZmxvdyI7CiAgICAg
Y2FzZSBVbmNvdW50YWJsZToKICAgICAgICAgcmV0dXJuICJVbmNvdW50YWJsZSI7CiAgICAgY2Fz
ZSBVbmNvdW50YWJsZUludmFsaWRhdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGl0S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGl0S2luZC5oCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBA
QCBlbnVtIEV4aXRLaW5kIDogdWludDhfdCB7CiAgICAgSW5hZGVxdWF0ZUNvdmVyYWdlLCAvLyBX
ZSBleGl0ZWQgYmVjYXVzZSB3ZSBlbmRlZCB1cCBpbiBjb2RlIHRoYXQgZGlkbid0IGhhdmUgcHJv
ZmlsaW5nIGNvdmVyYWdlLgogICAgIEFyZ3VtZW50c0VzY2FwZWQsIC8vIFdlIGV4aXRlZCBiZWNh
dXNlIGFyZ3VtZW50cyBlc2NhcGVkIGJ1dCB3ZSBkaWRuJ3QgZXhwZWN0IHRoZW0gdG8uCiAgICAg
Tm90U3RyaW5nT2JqZWN0LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBzaG91bGRuJ3QgaGF2ZSBh
dHRlbXB0ZWQgdG8gb3B0aW1pemUgc3RyaW5nIG9iamVjdCBhY2Nlc3MuCisgICAgVmFyYXJnc092
ZXJmbG93LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIHZhcmFyZ3MgY2FsbCBwYXNzZWQgbW9yZSBh
cmd1bWVudHMgdGhhbiB3ZSBleHBlY3RlZC4KICAgICBVbmNvdW50YWJsZSwgLy8gV2UgZXhpdGVk
IGZvciBub25lIG9mIHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBp
dC4gTW9zdCB1c2VzIG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBhIEZJWE1FLgogICAgIFVu
Y291bnRhYmxlSW52YWxpZGF0aW9uLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB0aGUgY29kZSBibG9j
ayB3YXMgaW52YWxpZGF0ZWQ7IHRoaXMgbWVhbnMgdGhhdCB3ZSd2ZSBhbHJlYWR5IGNvdW50ZWQg
dGhlIHJlYXNvbnMgd2h5IHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlkYXRlZC4KICAgICBXYXRj
aGRvZ1RpbWVyRmlyZWQsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gc2VydmljZSB0
aGUgd2F0Y2hkb2cgdGltZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzk5
NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9m
b3JtID09IFNTQSk7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBt
X3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpOwot
ICAgICAgICBBU1NFUlQodmFsdWUuaXNIZWFwVG9wKCkpOworICAgICAgICBBU1NFUlQoIXZhbHVl
LmlzQ2xlYXIoKSk7CiAgICAgICAgIEZpbHRyYXRpb25SZXN1bHQgcmVzdWx0ID0KICAgICAgICAg
ICAgIHZhbHVlLmZpbHRlcih0eXBlRmlsdGVyRm9yKHVzZUtpbmRGb3IodmFyaWFibGUtPmZsdXNo
Rm9ybWF0KCkpKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQgPT0gRmls
dHJhdGlvbk9LKTsKQEAgLTIwMyw5ICsyMDMsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoK
LSAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBz
ZXQuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS5ibG9jaygpLT52YWx1ZXNBdEhlYWQub3BlcmFu
ZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUg
c3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4gU2V0QXJndW1lbnQgbWVhbnMgdGhhdCBz
b21lb25lIHNldAorICAgICAgICAvLyB0aGUgYXJndW1lbnQgdmFsdWVzIG91dC1vZi1iYW5kLCBh
bmQgY3VycmVudGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8gYQorICAgICAgICAvLyBu
b24tY2xlYXIgdmFsdWUuCisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygp
Lm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAgICAgICBtX3N0YXRlLnZhcmlh
YmxlcygpLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKICAg
ICBjYXNlIEJpdE9yOgpAQCAtMTMxNSw3ICsxMzI2LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3Rl
IHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0byBmb3JjZSBjb25zdGFudCBmb2xkaW5nCiAg
ICAgICAgIC8vIG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBiZWNhdXNlIEdldE15QXJndW1lbnRz
TGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCiAgICAgICAgIC8vIFdlIHBlcmZvcm0g
ZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIgb24uCi0gICAgICAgIGlmIChub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhSW5saW5lQ2Fs
bEZyYW1lOjppc1ZhcmFyZ3Mobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
a2luZCkpIHsKICAgICAgICAgICAgIHNldENvbnN0YW50KAogICAgICAgICAgICAgICAgIG5vZGUs
IGpzTnVtYmVyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkgLSAxKSk7CiAgICAgICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7
IC8vIFByZXRlbmQgdGhhdCB3ZSBjbG9iYmVyZWQgdG8gcHJldmVudCBjb25zdGFudCBmb2xkaW5n
LgpAQCAtMTk2NCw2ICsxOTc2LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBj
YXNlIE5hdGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2Fs
bEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKICAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAzLDYgKzUwMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9k
ZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFy
Z3Mob3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+a2luZCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGtub3cgZXhhY3RseSB3aGF0IHRoaXMgd2lsbCByZXR1cm4uIEJ1dCBvbmx5IGFm
dGVyIHdlIGhhdmUgY2hlY2tlZAogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IG5vYm9keSBo
YXMgZXNjYXBlZCBvdXIgYXJndW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODIsMTIgKzE4MiwxMyBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBjYWxsVGFyZ2V0
LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtTdGF0dXMpOwogICAg
IHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291
bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9u
KiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgaGFu
ZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCk7CiAgICAgdm9pZCBlbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQsIE5v
ZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7CiAgICAgdm9pZCB1bmRvRnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQpOwogICAgIHZvaWQg
ZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHVuc2lnbmVkIGlu
bGluaW5nQ29zdChDYWxsVmFyaWFudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFu
IGlubGluaW5nIGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29z
dCBvZiAxLgogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2Vl
ZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlu
bGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2Fs
bExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxs
RnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOworICAgIGJvb2wgaGFuZGxl
SW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBD
YWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNB
cmd1bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1
bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4
dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIGVudW0gQ2FsbGVyTGlua2FiaWxpdHkgeyBDYWxsZXJE
b2VzTm9ybWFsTGlua2luZywgQ2FsbGVyTGlua3NNYW51YWxseSB9OwogICAgIGJvb2wgYXR0ZW1w
dFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENh
bGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJM
aW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5n
QmFsYW5jZSk7CiAgICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQg
cmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5KTsKQEAgLTUyOCw2ICs1MjksOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
ICAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSkpKTsKKyAgICAgICAgICAgIGlmIChJ
bmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhpbmxpbmVDYWxsRnJhbWUtPmtpbmQpKQorICAgICAg
ICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVTdGFja0VudHJ5LT5tX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gbnVtQXJn
dW1lbnRzOyBhcmd1bWVudC0tID4gMTspCkBAIC02OTEsNyArNjk0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG9wLCBvcEluZm8sIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBw
cmVkaWN0aW9uKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOwog
ICAgICAgICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0KSwgY2FsbCk7CisgICAgICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxs
KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogICAgIApAQCAtMTA0Myw3ICsxMDQ2LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBBU1NFUlQocmVnaXN0ZXJP
ZmZzZXQgPD0gMCk7CiAgICAgCiAgICAgaWYgKGNhbGxUYXJnZXQtPmhhc0NvbnN0YW50KCkpCi0g
ICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXMoY2FsbFRhcmdldC0+YXNKU1Zh
bHVlKCkpLnNldElzUHJvdmVkKHRydWUpOworICAgICAgICBjYWxsTGlua1N0YXR1cy5zZXRQcm92
ZW5Db25zdGFudENhbGxlZShjYWxsVGFyZ2V0LT5hc0pTVmFsdWUoKSk7CiAgICAgCiAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAgICAgZGF0YUxvZygi
ICAgIEhhbmRsaW5nIGNhbGwgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwgY2FsbExp
bmtTdGF0dXMsICJcbiIpOwpAQCAtMTA2MCw3ICsxMDYzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbCgKICAgICAKICAgICBPcEluZm8gY2FsbE9wSW5mbzsKICAgICAKLSAgICBp
ZiAoaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVn
aXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwg
a2luZCwgcHJlZGljdGlvbikpIHsKKyAgICBpZiAoaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwg
cmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSwgVmlydHVhbFJlZ2lzdGVyKCksIDAsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwga2luZCwgcHJlZGljdGlvbikp
IHsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3Jh
cGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTA4OCwxMSArMTA5MSw1MiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAog
ICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbE9wSW5mbywgY2FsbFRhcmdldCwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKIH0KIAotdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwg
Tm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChJbnN0cnVj
dGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0g
ICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGxf
dmFyYXJncykgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFyYXJncykpOworICAgIAor
ICAgIGludCByZXN1bHQgPSBwY1sxXS51Lm9wZXJhbmQ7CisgICAgaW50IGNhbGxlZSA9IHBjWzJd
LnUub3BlcmFuZDsKKyAgICBpbnQgdGhpc1JlZyA9IHBjWzNdLnUub3BlcmFuZDsKKyAgICBpbnQg
YXJndW1lbnRzID0gcGNbNF0udS5vcGVyYW5kOworICAgIGludCBmaXJzdEZyZWVSZWcgPSBwY1s1
XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gcGNbNl0udS5vcGVyYW5k
OworICAgIAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7
CisgICAgCisgICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVl
KSk7CisgICAgCisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Nh
bGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOworICAgIGlmIChjYWxsVGFyZ2V0LT5oYXND
b25zdGFudCgpKQorICAgICAgICBjYWxsTGlua1N0YXR1cy5zZXRQcm92ZW5Db25zdGFudENhbGxl
ZShjYWxsVGFyZ2V0LT5hc0pTVmFsdWUoKSk7CisgICAgCisgICAgaWYgKGNhbGxMaW5rU3RhdHVz
LmNhbk9wdGltaXplKCkKKyAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVz
dWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1Jl
ZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVD
YWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBp
ZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOworICAg
IGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgCisgICAg
Tm9kZSogdGhpc0NoaWxkOwogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICB0
aGlzQXJndW1lbnQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJP
ZmZzZXQpKTsKKyAgICAgICAgdGhpc0NoaWxkID0gZ2V0KHRoaXNSZWcpOworICAgIAorICAgIE5v
ZGUqIGNhbGwgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9u
KSwgY2FsbFRhcmdldCwgZ2V0KGFyZ3VtZW50cyksIHRoaXNDaGlsZCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOworICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQor
ICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKK30KKwordm9pZCBCeXRlQ29kZVBhcnNlcjo6
ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRhcmdldCwg
VmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudFJlZywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQoreworICAgIE5vZGUqIHRoaXNBcmd1bWVudDsKKyAgICBpZiAodGhpc0FyZ3VtZW50UmVn
LmlzVmFsaWQoKSkKKyAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0KHRoaXNBcmd1bWVudFJlZyk7
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICBlbHNl
CiAgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKQEAgLTEzOTMsNyArMTQzNywxMSBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3Rh
dHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
dW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6Oktp
bmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKAorICAgIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3Bl
cmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLAorICAgIGludCByZWdp
c3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LAor
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRz
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCisgICAgdW5zaWduZWQgbmV4
dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICBk
YXRhTG9nKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuIik7CkBAIC0xNDA3LDYgKzE0NTUsMTMgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAorICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhr
aW5kKQorICAgICAgICAmJiBjYWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSA+IE9wdGlv
bnM6Om1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgYmVjYXVzZSBvZiB2YXJhcmdz
LlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAogICAgIHVuc2ln
bmVkIGlubGluaW5nQmFsYW5jZSA9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxp
bmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiAgICAgaWYgKHNwZWNpYWxpemF0aW9uS2lu
ZCA9PSBDb2RlRm9yQ29uc3RydWN0KQogICAgICAgICBpbmxpbmluZ0JhbGFuY2UgPSBzdGQ6Om1p
bihpbmxpbmluZ0JhbGFuY2UsIE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElu
bGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKSk7CkBAIC0xNDE3LDggKzE0NzIsNzQgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNpbXBsaWZp
Y2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGltZXMsIGJ1
dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUgd2UgZG9u
J3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4KICAgICBp
ZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtTdGF0dXMu
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAgICAgICAg
Y2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lh
bGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVz
WzBdLCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50LCBzcGVjaWFsaXphdGlvbktpbmQpOwor
CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldDsKKworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
dmFyYXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFyZ3VtZW50cyByaWdodCBub3cu
CisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgbWFuZGF0b3J5TWluaW11bTsgLy8gZXhjbHVkZXMgInRoaXMiCisgICAg
ICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBjYWxs
TGlua1N0YXR1c1swXS5mdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICBtYW5k
YXRvcnlNaW5pbXVtID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBpbmNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIHVu
c2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IG1heCgKKyAgICAgICAgICAgICAgICBjYWxsTGlua1N0
YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVt
ICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHNvcnQgb2YgcHJldGVuZCB0
aGF0IHRoaXMgKmlzKiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkLgor
ICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBtYXhOdW1Bcmd1bWVudHM7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJPZmZz
ZXRPckZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBtYXhO
dW1Bcmd1bWVudHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICBzdGFj
a0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVy
T2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKKyAgICAgICAg
ICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQgKyAxKTsKKyAg
ICAgICAgICAgIGRhdGEtPmNvdW50ID0gVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsg
SlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBkYXRhLT5vZmZzZXQgPSBhcmd1
bWVudHNPZmZzZXQ7CisgICAgICAgICAgICBkYXRhLT5saW1pdCA9IG1heE51bUFyZ3VtZW50czsK
KyAgICAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5pbXVtOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8o
ZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBJbiBERkcgSVIgYmVmb3JlIFNTQSwgd2UgY2Fubm90IGluc2VydCBjb250cm9sIGZsb3cg
YmV0d2VlbiBhZnRlciB0aGUKKyAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCB0aGUgbGFz
dCBTZXRBcmd1bWVudC4gVGhpcyBpc24ndCBhIHByb2JsZW0gb25jZSB3ZSBnZXQgdG8gREZHCisg
ICAgICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29u
cyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKKyAgICAgICAgICAgIC8vIGJlZm9yZSBT
U0EuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRW
YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKKyAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgZmFsc2Up
OworICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2Ug
dGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKKyAgICAgICAg
ICAgIC8vIG1hdHRlciB2ZXJ5IG11Y2gsIHNpbmNlIG91ciB1c2Ugb2YgYSBTZXRBcmd1bWVudCBh
bmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCisgICAgICAgICAgICAvLyBtb3N0bHkg
anVzdCBhIGZvcm1hbGl0eS4KKyAgICAgICAgICAgIGNvdW50VmFyaWFibGUtPnByZWRpY3QoU3Bl
Y0ludDMyKTsKKyAgICAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9maXRhYmxlVG9V
bmJveCh0cnVlKTsKKyAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dy
YXBoKFNldEFyZ3VtZW50LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOworICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxv
Y2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQg
YXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsKKyAgICAgICAgICAgIGlmIChzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNhbGwp
CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0
KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IG1heE51bUFyZ3VtZW50czsgKythcmd1bWVu
dCkgeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudFN0YXJ0ICsgYXJndW1lbnQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsgLy8gV2UgY3VycmVudGx5IGhhdmUgbm93
aGVyZSB0byBwdXQgdGhlIHR5cGUgY2hlY2sgb24gdGhlIExvYWRWYXJhcmdzLiBMb2FkVmFyYXJn
cyBpcyBlZmZlY3RmdWwsIHNvIGFmdGVyIGl0IGZpbmlzaGVzLCB3ZSBjYW5ub3QgZXhpdC4KKyAg
ICAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQs
IE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgICAgICAK
ICAgICAgICAgYm9vbCByZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVDYWxsKAogICAgICAgICAgICAg
Y2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rl
ck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zm
c2V0LCBraW5kLCBDYWxsZXJEb2VzTm9ybWFsTGlua2luZywgcHJlZGljdGlvbiwKQEAgLTE0Mzcs
MTEgKzE1NTgsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAg
ICAgLy8gZG8gbW9yZSBkZXRhaWxlZCBwb2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7
IGFuZCBzZWNvbmQsIGl0IHJlZHVjZXMgY29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcu
IEFuZCBieSBwb2x5dmFyaWFudCBwcm9maWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxp
bmcgb2YgKnRoaXMqIGNhbGwuIE5vdGUgdGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhh
dCBhc3BlY3Qgb2YgdGhpcyBieSBkb2luZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5n
IHRoZSBwcm9maWxpbmcKLSAgICAvLyBhbHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhp
cywgYnV0IGl0IGNvdWxkIGJlIGludGVyZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5n
IGEKLSAgICAvLyBzZXBhcmF0ZSBub2RlIGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8v
IEZJWE1FOiBJbnRyb2R1Y2UgdGhlIG5vdGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9m
aWxpbmcgbm9kZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM2MDMzCi0gICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9u
czo6ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAg
aWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1v
cnBoaWNDYWxsSW5saW5pbmcoKQorICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJn
cyhraW5kKSkgewogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygi
QmFpbGluZyBpbmxpbmluZyAoaGFyZCkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNr
OiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKQEAgLTE0ODIsNiArMTYwMSw4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygi
U3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAog
ICAgIC8vIFRoaXMgbWFrZXMgbWUgd2lzaCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGlt
ZS4gV2UgbmVlZCB0byBwaWNrIGEgdmFyaWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3Jl
IHRoZSBjYWxsZWUgc28gdGhhdCBpdCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBi
bG9ja3Mgd2UncmUgYWJvdXQgdG8gY3JlYXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9p
bmcgYW4gaW1tZWRpYXRlLXNldCBoZXJlIGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3Jt
ZWQgYW55IHNpZGUgZWZmZWN0cwpAQCAtMzExMyw0MyArMzIzNCw3MCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpbnQgdGhpc1JlZyA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgYXJndW1lbnRz
ID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBmaXJz
dEZyZWVSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZSgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYXJndW1lbnRzLCBhcmd1bWVudHMgPT0gbV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOwotICAg
ICAgICAgICAgQVNTRVJUKCFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFi
bGUoKS0+c2xvd0FyZ3VtZW50cygpKTsKLQotICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Fy
Z3VtZW50c05vdENyZWF0ZWQpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGlu
bGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBMZXQncyBjb21wdXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGgg
dGhlIGxhc3QgdXNlZCByZWdpc3RlciwgYW5kCi0gICAgICAgICAgICAvLyB0aGVuIGFkanVzdCBm
b3IgdGhlIHRoaW5ncyB3ZSB3YW50IGluIHRoZSBjYWxsIGZyYW1lLgotICAgICAgICAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gZmlyc3RGcmVlUmVnICsgMTsKLSAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0IC09IGFyZ0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1bWVudHMu
Ci0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJT
aXplOyAvLyBXZSB3aWxsIHByZXRlbmQgdG8gaGF2ZSBhIGNhbGwgZnJhbWUgaGVhZGVyLgotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KLSAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKLSAgICAg
ICAgICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAotICAgICAgICAgICAgICAgIC1y
ZWdpc3Rlck9mZnNldCk7Ci0KLSAgICAgICAgICAgIGVuc3VyZUxvY2FscygKLSAgICAgICAgICAg
ICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CisgICAgICAgICAg
ICBpZiAoYXJndW1lbnRzID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT51bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpCisgICAgICAgICAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkKKyAgICAgICAgICAgICAg
ICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGlubGluZUNhbGxGcmFtZSgpLT5r
aW5kKQorICAgICAgICAgICAgICAgICAgICAmJiAhZmlyc3RWYXJBcmdPZmZzZXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQpOworCisg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2FsbEZyYW1lKCkt
PmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
TGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LiBXZSBzdGFydCB3aXRoIHRoZSBsYXN0
IHVzZWQgcmVnaXN0ZXIsIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGFkanVzdCBm
b3IgdGhlIHRoaW5ncyB3ZSB3YW50IGluIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICAgICAgICAg
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOworICAgICAgICAgICAg
ICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBwYXNzaW5n
IHNvbWUgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyAvLyBXZSB3aWxsIHByZXRlbmQgdG8gaGF2ZSBh
IGNhbGwgZnJhbWUgaGVhZGVyLgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8v
IEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgorICAgICAgICAgICAgICAgICAgICByZWdpc3Rlck9m
ZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgLXJl
Z2lzdGVyT2Zmc2V0KTsKKworICAgICAgICAgICAgICAgICAgICBlbnN1cmVMb2NhbHMoCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSku
dG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYnl0
ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4gQnV0IHdlJ2xsIGRvIGl0
IGFuZCBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNv
ZGUgaGFkIGRvbmUgaXQuCisgICAgICAgICAgICAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSBy
ZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVh
bFJlZ2lzdGVyKHRoaXNSZWcpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKyth
cmd1bWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4
dFJlZ2lzdGVyKyspLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSwg
SW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGhh
bmRsZUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsIENhbGwsIENvZGVGb3JD
YWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCisgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEVtaXQgQ2FsbEZvcndhcmRWYXJhcmdz
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWVhbnMgd2UgY2Fubm90IGlubGluZSBm
b3J3YXJkZWQgdmFyYXJncyBjYWxscyBpbnNpZGUgYSB2YXJhcmdzCisgICAgICAgICAgICAgICAg
Ly8gY2FsbCBmcmFtZS4gV2Ugd2lsbCBwcm9iYWJseSBmaXggdGhhdCBvbmNlIHdlIGZpbmFsbHkg
Z2V0IHJpZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgb2JqZWN0IHNwZWNp
YWwtY2FzaW5nLgorICAgICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9jYWxsVmFyYXJnc0RhdGEuYWRkKCk7CisgICAgICAgICAgICAgICAgZGF0YS0+Zmlyc3RW
YXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICAgICAg
Q2FsbEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSksIE9wSW5mbyhnZXRQcmVkaWN0aW9uKCkp
LAorICAgICAgICAgICAgICAgICAgICBnZXQoY2FsbGVlKSwgZ2V0KHRoaXNSZWcpKTsKKyAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHNldChy
ZXN1bHRSZWcsIGNhbGwpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFy
YXJncyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBi
eXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8g
aXQgYW5kIG1ha2UgaXQKLSAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNvZGUgaGFk
IGRvbmUgaXQuCi0gICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQg
KyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJ
bW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
MTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKLSAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgICAgICAgICByZXN1bHQsIENhbGwsIENvZGVG
b3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCi0gICAgICAgICAgICAgICAg
Y2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgaGFuZGxlVmFy
YXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsVmFyYXJncywgQ29kZUZvckNhbGwpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAg
ICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0VmFyYXJn
cywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb25zdHJ1
Y3RfdmFyYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2pu
ZXFfcHRyOgogICAgICAgICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9yIG5vdy4gSXQg
bWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCiAgICAgICAgICAgICAv
LyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUgZ2VuZXJh
bCwgc2luY2UgaXQncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE4Miw2ICsxODIsOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlE
CiAgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CiAgICAgY2FzZSBvcF9jYWxsOgogICAg
IGNhc2Ugb3BfY29uc3RydWN0OgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOgogICAgIGNh
c2Ugb3BfY3JlYXRlX2FyZ3VtZW50czoKICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czoK
QEAgLTIyMywxNCArMjI1LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNv
ZGVJRAogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKICAgICB9CiAKLSAgICBj
YXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cygpICYmIHBjWzRdLnUub3BlcmFuZCA9PSBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCku
b2Zmc2V0KCkKLSAgICAgICAgICAgICYmICFwY1s2XS51Lm9wZXJhbmQpCi0gICAgICAgICAgICBy
ZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSB0aGlz
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3
NjI2Ci0gICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwotCiAgICAgY2FzZSBvcF9uZXdfcmVn
ZXhwOiAKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgogICAgIGNhc2Ug
b3BfbmV3X2Z1bmM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOCAr
ODYsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGZ1bmN0aW9uQ2FwYWJpbGl0CiAgICAgICAg
IHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2FuQ29tcGlsZUFuZElubGluZSwgY29tcHV0ZWRDYXBh
YmlsaXR5TGV2ZWwpOwogICAgIGlmIChtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQogICAg
ICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbkNvbXBpbGUsIGNvbXB1dGVkQ2FwYWJpbGl0
eUxldmVsKTsKLSAgICBpZiAoIW1pZ2h0Q29tcGlsZSAmJiBtaWdodElubGluZSkKLSAgICAgICAg
cmV0dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5JbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVs
KTsKICAgICBpZiAoIW1pZ2h0Q29tcGlsZSAmJiAhbWlnaHRJbmxpbmUpCiAgICAgICAgIHJldHVy
biBDYW5ub3RDb21waWxlOwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTc5
OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2NSw2ICszNjUsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgog
ICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgIGNh
c2UgVG9QcmltaXRpdmU6CiAgICAgY2FzZSBJbjoKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVu
Z3RoU2FmZToKQEAgLTQwMSw2ICs0MDQsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0
cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAg
ICAgICAgLy8gVGhpcyBhY3R1YWxseSB3cml0ZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFzIHdlbGwu
IEJ1dCB3aGVuIGl0IHJlYWRzIHRoZSBhcnJheSwgaXQgZG9lcworICAgICAgICAvLyBzbyBpbiBh
IHdheSB0aGF0IG1heSB0cmlnZ2VyIGdldHRlcnMgb3IgdmFyaW91cyB0cmFwcy4KKyAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKICAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSksIG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjkyLDcgKzI5Miw2IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogZW51bSBDYXBhYmlsaXR5TGV2ZWwgewogICAgIENhbm5vdENv
bXBpbGUsCi0gICAgQ2FuSW5saW5lLAogICAgIENhbkNvbXBpbGUsCiAgICAgQ2FuQ29tcGlsZUFu
ZElubGluZSwKICAgICBDYXBhYmlsaXR5TGV2ZWxOb3RTZXQKQEAgLTMxMiw3ICszMTEsNiBAQCBp
bmxpbmUgYm9vbCBjYW5Db21waWxlKENhcGFiaWxpdHlMZXZlbCBsCiBpbmxpbmUgYm9vbCBjYW5J
bmxpbmUoQ2FwYWJpbGl0eUxldmVsIGxldmVsKQogewogICAgIHN3aXRjaCAobGV2ZWwpIHsKLSAg
ICBjYXNlIENhbklubGluZToKICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CkBAIC0zMjUsMTQgKzMyMyw2IEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgbGVhc3RVcHBlckJvdW5kKEMKICAgICBzd2l0Y2ggKGEpIHsKICAgICBj
YXNlIENhbm5vdENvbXBpbGU6CiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwotICAgIGNh
c2UgQ2FuSW5saW5lOgotICAgICAgICBzd2l0Y2ggKGIpIHsKLSAgICAgICAgY2FzZSBDYW5Jbmxp
bmU6Ci0gICAgICAgIGNhc2UgQ2FuQ29tcGlsZUFuZElubGluZToKLSAgICAgICAgICAgIHJldHVy
biBDYW5JbmxpbmU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gQ2Fubm90
Q29tcGlsZTsKLSAgICAgICAgfQogICAgIGNhc2UgQ2FuQ29tcGlsZToKICAgICAgICAgc3dpdGNo
IChiKSB7CiAgICAgICAgIGNhc2UgQ2FuQ29tcGlsZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywx
MCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDb21w
YXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNh
c2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBOYXRpdmVD
YWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgQnJlYWtwb2ludDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3OTk1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
ODIyLDYgKzgyMiw3IEBAIHB1YmxpYzoKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1f
bXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211
bHRpUHV0QnlPZmZzZXREYXRhOwogICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBt
X29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAgQmFyPENhbGxWYXJhcmdzRGF0YT4gbV9j
YWxsVmFyYXJnc0RhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxp
bmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8
RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hh
c0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICAgICAgICAgLy8gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywg
dGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIG1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAg
IG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAjaWYgQ1BVKFg4NikKICAgICAgICAgLy8gRklYTUU6
IHNob3VsZCB1c2UgdGhlIGNhbGwgYWJzdHJhY3Rpb24sIGJ1dCB0aGlzIGlzIGN1cnJlbnRseSBp
biB0aGUgU3BlY3VsYXRpdmVKSVQgbGF5ZXIhCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMjAgQEAgc3RydWN0IFN3aXRj
aERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IENhbGxWYXJh
cmdzRGF0YSB7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0OworfTsKKworc3RydWN0IExvYWRW
YXJhcmdzRGF0YSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0OyAvLyBMb2NhbCBmb3IgdGhl
IGZpcnN0IGVsZW1lbnQuCisgICAgVmlydHVhbFJlZ2lzdGVyIGNvdW50OyAvLyBMb2NhbCBmb3Ig
dGhlIGNvdW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lU3RhcnQ7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG1hY2hpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBvZmZzZXQ7IC8vIFdoaWNoIGFy
cmF5IGVsZW1lbnQgdG8gc3RhcnQgd2l0aC4gVXN1YWxseSB0aGlzIGlzIDAuCisgICAgdW5zaWdu
ZWQgbWFuZGF0b3J5TWluaW11bTsgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBvbiB0aGUgc3Rh
Y2sgdGhhdCBtdXN0IGJlIGluaXRpYWxpemVkOyBpZiB0aGUgYXJyYXkgaXMgdG9vIHNob3J0IHRo
ZW4gdGhlIG1pc3NpbmcgZWxlbWVudHMgbXVzdCBnZXQgdW5kZWZpbmVkLgorICAgIHVuc2lnbmVk
IGxpbWl0OyAvLyBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0byBsb2FkLgorfTsKKwogLy8g
VGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBj
b25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2Fs
bHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAogLy8gYSBjb25z
dGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAgLTg4
OCw2ICs5MDIsMzUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PFdyaXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9v
bCBoYXNDYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7Cisg
ICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdz
OgorICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIENhbGxWYXJhcmdzRGF0YSogY2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChoYXNDYWxsVmFyYXJnc0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8Q2FsbFZhcmFyZ3NEYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBi
b29sIGhhc0xvYWRWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBM
b2FkVmFyYXJnczsKKyAgICB9CisgICAgCisgICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJn
c0RhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0xvYWRWYXJhcmdzRGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxMb2FkVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7Cisg
ICAgfQorICAgIAogICAgIGJvb2wgaGFzUmVzdWx0KCkKICAgICB7CiAgICAgICAgIHJldHVybiAh
IXJlc3VsdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIC8qIHRoaXMgbXVzdCBiZSB0aGUgZGlyZWN0bHkgc3Vic2VxdWVu
dCBwcm9wZXJ0eSBwdXQuIE5vdGUgdGhhdCBQdXRCeVZhbCAqL1wKICAgICAvKiBvcGNvZGVzIHVz
ZSBWYXJBcmdzIGJlYXVzZSB0aGV5IG1heSBoYXZlIHVwIHRvIDQgY2hpbGRyZW4uICovXAogICAg
IG1hY3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZh
bERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8o
UHV0QnlWYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3Jv
KFB1dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApAQCAt
MjE3LDYgKzIxOCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBD
YWxscy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhDYWxsVmFy
YXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENhbGxG
b3J3YXJkVmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1h
Y3JvKENvbnN0cnVjdFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhOYXRpdmVDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhOYXRpdmVDb25zdHJ1Y3QsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBM
b2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChk
YXRhLT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVk
SW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBs
aW1pdDsgaS0tOykgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQorICAgICAgICAg
ICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdp
c3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMTgsNiArMTAx
OCwyNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoCiAgICAgc2V0
LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsICJFeGVjdXRlZCBOb3RpZnlXcml0ZSIpOwogfQogCitp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdP
ZmZzZXQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CisgICAgCisgICAgcmV0dXJuIHNpemVPZlZhcmFy
Z3MoZXhlYywgYXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCk7Cit9CisKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZmly
c3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBv
ZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pCit7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEFyZ3VtZW50cyk7CisgICAgCisgICAgbG9hZFZhcmFyZ3MoZXhlYywgVmlydHVhbFJlZ2lzdGVy
KGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAKKyAg
ICBmb3IgKGludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKKyAg
ICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworfQor
CiBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50
MzJfdCBiKQogewogICAgIHJldHVybiBmbW9kKGEsIGIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEyNSw2ICsxMjUsOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TWFrZVJvcGUzCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJn
ZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4
KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSos
IHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVuY29k
ZWRKU1ZhbHVlKTsKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdz
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFy
Z09mZnNldCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0
YXRlKiwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMs
IGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVt
KTsKIAogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRCb3hlZERvdWJsZVRv
SW50NTIoRW5jb2RlZEpTVmFsdWUpOwogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bnZlcnREb3VibGVUb0ludDUyKGRvdWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMTc5
OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsMTggQEAgcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIHdyaXRlVG9wKCkKICAgICB7CisgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0g
TG9hZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBub3RlIHRoZSB3cml0
ZXMgdG8gdGhlIGxvY2FscyB0aGF0IHdpbGwgc3RvcmUgdGhlIGFycmF5IGVsZW1lbnRzIGFuZAor
ICAgICAgICAgICAgLy8gY291bnQuCisgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgbV93cml0ZShkYXRhLT5j
b3VudCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykK
KyAgICAgICAgICAgICAgICBtX3dyaXRlKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZz
ZXQoKSArIGkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdl
IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgQ2FsbEZvcndhcmRWYXJhcmdz
LCBzaW5jZSBpdCByZWFkcworICAgICAgICAvLyBvdXIgYXJndW1lbnRzIHRoZSBzYW1lIHdheSB0
aGF0IGFueSBlZmZlY3RmdWwgdGhpbmcgbWlnaHQuCisgICAgICAgIAogICAgICAgICBpZiAobV9n
cmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7
KQogICAgICAgICAgICAgICAgIG1fd3JpdGUodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4OSw2ICsxODksMTAgQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVx
OgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJh
cmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgor
ICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNh
c2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjQsMzcgKzYyNCwxNjcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU1pc2NTdHJpY3RFcQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlKQogewotICAgIGJvb2wgaXNDYWxsID0gbm9kZS0+b3AoKSA9PSBDYWxs
OwotICAgIGlmICghaXNDYWxsKQotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKLSAgICAKLSAgICAvLyBGb3IgY29uc3RydWN0
b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ug
c3BhY2UKLSAgICAvLyBmb3IgaXQuCi0gICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gaXNDYWxs
ID8gMCA6IDE7CisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBib29s
IGlzQ2FsbDsKKyAgICBib29sIGlzVmFyYXJnczsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
KyAgICBjYXNlIENhbGw6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOwor
ICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExp
bmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAgICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAgICBpc1Zh
cmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAg
ICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0lu
Zm86OkNhbGxWYXJhcmdzOworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFy
Z3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Cisg
ICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAg
ICBpc0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUs
ICJiYWQgbm9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEVkZ2UgY2Fs
bGVlRWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMCk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZv
OjpDYWxsVHlwZSBjYWxsVHlwZSA9IGlzQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxM
aW5rSW5mbzo6Q29uc3RydWN0OworICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21l
aG93LiBWYXJhcmdzIGlzIHRyaWNraWVyLgorICAgIGlmIChpc1ZhcmFyZ3MpIHsKKyAgICAgICAg
Ly8gMSkgZ2V0IHRoZSBhcmd1bWVudHMKKyAgICAgICAgLy8gMikgZmx1c2ggcmVnaXN0ZXJzCisg
ICAgICAgIC8vIDMpIHNldCB1cCB0aGUgY2FsbCBmcmFtZQorICAgICAgICAvLyA0KSBnZXQgdGhl
IGNhbGxlZSBhbmQgInRoaXMiIGFuZCBoYW5kbGUgdGhlbQorICAgICAgICAvLyA1KSBmbHVzaCBy
ZWdpc3RlcnMgYWdhaW4KKyAgICAgICAgCisgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9
IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworCisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIy
OworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIAorICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIFdlIGF2b2lk
IGNhbGxpbmcgZmx1c2hSZWdpc3RlcnMoKSBpbnNpZGUgdGhlIGNvbnRyb2wgZmxvdyBvZiBDYWxs
Rm9yd2FyZFZhcmFyZ3MuCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBhdXRvIGxvYWRBcmd1bWVudHNHUFIgPSBbJl0gKEdQUlJlZyBy
ZXNlcnZlZEdQUikgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRW
YXJhcmdzKSB7CisgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gSklUQ29tcGlsZXI6OnNl
bGVjdFNjcmF0Y2hHUFIocmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2
NCgKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRz
R1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc2VydmVk
R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIGxvY2socmVzZXJ2ZWRH
UFIpOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdw
cigpOworICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICAgICAgICAgICAgICB1bmxvY2socmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIxID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRz
R1BSLCByZXNlcnZlZEdQUik7CisgICAgICAgICAgICBzY3JhdGNoR1BSMiA9IEpJVENvbXBpbGVy
OjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIHJlc2VydmVkR1BS
KTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hH
UFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHJlc2VydmVkR1BSKTsK
KyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoSW52YWxpZEdQ
UlJlZyk7CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgdGhlIHdo
b2xlIHJlZ2lzdGVyIGZpbGUgdG8gb3Vyc2VsdmVzLCBhbmQgYXJndW1lbnRzR1BSIGhhcyB0aGUK
KyAgICAgICAgLy8gYXJndW1lbnRzIHJlZ2lzdGVyLiBTZWxlY3Qgc29tZSBzY3JhdGNoIHJlZ2lz
dGVycy4KKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdpbGwgdXNlIHNjcmF0Y2hHUFIyIHRvIHBv
aW50IHRvIG91ciBzdGFjayBmcmFtZS4KKworICAgICAgICB1bnNpZ25lZCBudW1Vc2VkU3RhY2tT
bG90cyA9IG1faml0LmdyYXBoKCkubV9uZXh0TWFjaGluZUxvY2FsOworICAgICAgICAKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgaGF2ZUFyZ3VtZW50czsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9y
d2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHko
dGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAgICAgICAvLyBGSVhNRTogZG8g
dGhpcyBvcHRpbWl6YXRpb24gYXQgdGhlIElSIGxldmVsIGluc3RlYWQgb2YgZHluYW1pY2FsbHkg
YnkgdGVzdGluZyB0aGUKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gVGhpcyB3
aWxsIGhhcHBlbiBvbmNlIHdlIGdldCByaWQgb2YgdGhlIGFyZ3VtZW50cyBsYXp5IGNyZWF0aW9u
IGFuZAorICAgICAgICAgICAgLy8gbGF6eSB0ZWFyLW9mZi4KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJndW1l
bnRzR1BSKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKG51bVVzZWRTdGFja1Nsb3RzKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgZW1pdFNl
dHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UobV9qaXQsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgICAgICAgICAg
cmVzdWx0R1BSID0gc2NyYXRjaEdQUjI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhdmVB
cmd1bWVudHMgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIH0KKworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUs
IGlzRmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJpZ2h0IG5vdywgYXJndW1lbnRz
IGlzIGluIGFyZ3VtZW50c0dQUiBhbmQgdGhlIHJlZ2lzdGVyIGZpbGUgaXMgZmx1c2hlZC4KKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzR1BSLCBudW1Vc2VkU3RhY2tTbG90cywgZmlyc3RW
YXJBcmdPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGhhdmUgdGhlIGFyZ3Vt
ZW50IGNvdW50IG9mIHRoZSBjYWxsZWUgZnJhbWUsIGJ1dCB3ZSd2ZSBsb3N0IHRoZSBhcmd1bWVu
dHMgb3BlcmFuZC4KKyAgICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBvcGVyYW5k
IHdoaWxlIHByZXNlcnZpbmcgdGhlIGNhbGxlZSBmcmFtZS4KKyAgICAgICAgbG9hZEFyZ3VtZW50
c0dQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKG51bVVzZWRTdGFja1Nsb3RzKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBlbWl0U2V0
VmFyYXJnc0ZyYW1lKG1faml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHNjcmF0
Y2hHUFIxLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIo
LShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgc2NyYXRjaEdQUjEsIEdQ
UkluZm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUsIHNjcmF0Y2hHUFIxLCBhcmd1bWVudHNH
UFIsIGZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAg
ICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVzdWx0R1BS
LCBHUFJJbmZvOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBERkdf
QVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlzRmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGFyZ3VtZW50cyBhcnJheSBhbnltb3JlLgorICAgICAg
ICB1c2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzQ2FsbCkgewor
ICAgICAgICAgICAgLy8gTm93IHNldCB1cCB0aGUgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdGhpc0FyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAg
ICAgICAgICAgIEdQUlJlZyB0aGlzQXJndW1lbnRHUFIgPSB0aGlzQXJndW1lbnQuZ3ByKCk7Cisg
ICAgICAgICAgICB0aGlzQXJndW1lbnQudXNlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1faml0LnN0b3JlNjQodGhpc0FyZ3VtZW50c0dQUiwgbV9qaXQuY2FsbGVlQXJndW1lbnRTbG90
KDApKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBjb25zdHJ1Y3Rv
cnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBz
cGFjZQorICAgICAgICAvLyBmb3IgaXQuCisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9
IGlzQ2FsbCA/IDAgOiAxOwogICAgIAotICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCldOwotICAgIC8vIFRoZSBjYWxs
IGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVu
dCBjaGlsZHJlbiBhcmUgdGhlCi0gICAgLy8gYXJndW1lbnRzLgotICAgIGludCBudW1QYXNzZWRB
cmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIC8vIFRoZSBjYWxsIGluc3Ry
dWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGls
ZHJlbiBhcmUgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50cy4KKyAgICAgICAgaW50IG51bVBhc3Nl
ZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKICAgICAKLSAgICBpbnQgbnVtQXJncyA9
IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKKyAgICAgICAgaW50IG51bUFyZ3Mg
PSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgCi0gICAgbV9qaXQuc3Rv
cmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBjYWxsZWVGcmFtZVBh
eWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBjYWxsZWVGcmFtZVBheWxv
YWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICAKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2pp
dC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOwot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7Ci0gICAgICAgIEdQUlJl
ZyBhcmdHUFIgPSBhcmcuZ3ByKCk7Ci0gICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgIEVkZ2Ug
YXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxk
KCkgKyAxICsgaV07CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRn
ZSk7CisgICAgICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOworICAgICAgICAgICAg
dXNlKGFyZ0VkZ2UpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIGNh
bGxlZUFyZ3VtZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlNjQoYXJnR1BSLCBjYWxsZWVBcmd1bWVudFNsb3QoaSArIGR1bW15VGhpc0FyZ3Vt
ZW50KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhp
cywgY2FsbGVlRWRnZSk7CiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKLSAg
ICB1c2UoY2FsbGVlRWRnZSk7CisgICAgY2FsbGVlLnVzZSgpOwogICAgIG1faml0LnN0b3JlNjQo
Y2FsbGVlR1BSLCBjYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgCiAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKQEAgLTY5Miw2ICs4MjIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlR1BSID0gY2Fs
bGVlR1BSOwogICAgIAogICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRh
cmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7CisgICAgCisgICAgLy8gSWYgd2Ugd2VyZSB2YXJh
cmdzLCB0aGVuIGFmdGVyIHRoZSBjYWxscyBhcmUgZG9uZSwgd2UgbmVlZCB0byByZWVzdGFibGlz
aCBvdXIgc3RhY2sgcG9pbnRlci4KKyAgICBpZiAoaXNWYXJhcmdzKQorICAgICAgICBtX2ppdC5h
ZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIH0KIAogLy8gQ2xhbmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtb
Y2xhbmc6OmZhbGx0aHJvdWdoXV0gaW4gdGVtcGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0
ZSBleHBhbnNpb24gdXNlcyBpdApAQCAtNDIzMSw5ICs0MzY1LDUyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgZW1pdENhbGwobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAg
ICAgICAKKyAgICAgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICAgICAgeworICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50
c0dQUiwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgbG9jayhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1
bWVudHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OworICAgICAgICB9CisgICAgICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxs
IGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCisg
ICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQg
aXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAgICAvLyBzdGFu
ZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQg
KmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFzdCB0aGUgc2l6
aW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxNDQ4CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAg
ICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgICAgICAgICBUcnVzdGVk
SW1tMzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTY0KEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOwor
ICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgZGF0
YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNldCwgZGF0
YS0+bGVuZ3RoLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgCisgICAgICAgIG5v
UmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2Ug
Q3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgCkBA
IC00MzM4LDkgKzQ1MTUsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1l
bnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsK
LSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAg
JiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUtPmtpbmQpKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKAorICAgICAgICAg
ICAgICAgIFRydXN0ZWRJbW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMSksCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50
UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVh
bFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZXN1bHRHUFIpOworICAgICAgICB9CiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQzNTQsMjAgKzQ1NDIsMjIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IoCiAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAg
ICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAg
ICYmICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lLT5raW5kKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZSgKICAgICAgICAg
ICAgICAgICBJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSksCiAgICAgICAgICAg
ICAgICAgcmVzdWx0R1BSKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0
ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lz
dGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRH
UFIpOwogICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiB0
aGUgc2xvdyBwYXRoIGdlbmVyYXRvciBzaG91bGQgcGVyZm9ybSBhIGZvcndhcmQgc3BlY3VsYXRp
b24gdGhhdCB0aGUKLSAgICAgICAgLy8gcmVzdWx0IGlzIGFuIGludGVnZXIuIEZvciBub3cgd2Ug
cG9zdHBvbmUgdGhlIHNwZWN1bGF0aW9uIGJ5IGhhdmluZyB0aGlzIHJldHVybgotICAgICAgICAv
LyBhIEpTVmFsdWUuCi0gICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBjcmVhdGVkLCB0aGlzLCBv
cGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgsIHJlc3VsdEdQUiwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE3OTk1NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTc4LDcgKzU3OCw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAot
I2lmbmRlZiBOREVCVUcKICAgICAvLyBVc2VkIHRvIEFTU0VSVCBmbHVzaFJlZ2lzdGVycygpIGhh
cyBiZWVuIGNhbGxlZCBwcmlvciB0bwogICAgIC8vIGNhbGxpbmcgb3V0IGZyb20gSklUIGNvZGUg
dG8gYSBDIGhlbHBlciBmdW5jdGlvbi4KICAgICBib29sIGlzRmx1c2hlZCgpCkBAIC01OTMsNyAr
NTkyLDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
LSNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6
OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChOb2RlKiBub2RlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCShyZXZp
c2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
Qml0VmVjdG9yIHVzZWRMb2NhbHM7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3Nl
IHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCi0gICAgICAgIGJvb2wgaGFzR2V0TG9j
YWxVbmxpbmtlZCA9IGZhbHNlOworICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9
IGZhbHNlOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBA
IC04MSw3ICs4MSwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB1c2VkTG9jYWxzLnNldChvcGVyYW5kLnRvTG9jYWwoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGhhc0dldExvY2FsVW5saW5rZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB1c2Vk
TG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRh
dGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkg
KyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ug
c2hvdWxkbid0IGhhcHBlbi4KKyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZp
eHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKQEAgLTExMyw2ICsxMjgsMTEgQEAgcHVibGljOgogICAg
ICAgICAgICAgdXNlZExvY2Fscy5zZXQoYXJndW1lbnRzUmVnaXN0ZXIudG9Mb2NhbCgpKTsKICAg
ICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1
bWVudHNSZWdpc3RlcikudG9Mb2NhbCgpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGlubGluZUNhbGxGcmFtZS0+a2luZCkpIHsKKyAg
ICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAg
ICAgICAgICAgIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpOyBhcmd1bWVudC0tID4gMTspIHsKICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNl
dChWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSArCkBAIC0xNDgsMjQgKzE2OCwyMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltsb2NhbF0gPT0gVUlOVF9NQVgpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAgICAg
ICAgIGFsbG9jYXRpb25bdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpXSk7CisgICAgICAgICAg
ICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUt
PmxvY2FsKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCkt
PnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
c1JlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgYWxs
b2NhdGlvbltjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKS50b0xvY2FsKCldKTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlciA9CisgICAgICAgICAg
ICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3Rlcigp
KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKAotICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bCi0gICAgICAgICAgICAgICAgICAgIHVubW9kaWZp
ZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygp
LT5hcmd1bWVudHNSZWdpc3RlcigpKS50b0xvY2FsKCldKQorICAgICAgICAgICAgICAgIGFzc2ln
bihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoY29kZUJsb2NrKCktPmFy
Z3VtZW50c1JlZ2lzdGVyKCkpKQogICAgICAgICAgICAgICAgID09IHVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpOwogICAgICAgICAgICAgY29kZUJsb2NrKCkt
PnNldEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT51bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0
ZXIoKS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRBY3RpdmF0aW9u
UmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2Nh
dGlvbltjb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkudG9Mb2NhbCgpXSkpOworICAg
ICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+YWN0aXZhdGlvblJl
Z2lzdGVyKCkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gVGhpcyByZWdpc3Rl
ciBpcyBuZXZlciB2YWxpZCBmb3IgREZHIGNvZGUgYmxvY2tzLgpAQCAtMTc2LDE1ICsxOTMsMTkg
QEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW21fZ3JhcGguYXJndW1l
bnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKS50b0xvY2FsKCldKTsKKyAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyID0gYXNzaWduKAorICAgICAg
ICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlu
bGluZUNhbGxGcmFtZSkpOwogCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5h
cmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKS50b0xvY2FsKCldKQorICAgICAg
ICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lz
dGVyKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSkpCiAgICAg
ICAgICAgICAgICAgICAgID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhpbmxpbmVDYWxsRnJh
bWUtPmtpbmQpKSB7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHND
b3VudFJlZ2lzdGVyID0gYXNzaWduKAorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KTsgYXJndW1lbnQtLSA+IDE7KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYg
cG9zaXRpb24gPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAg
ICAgIGRhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjI3LDkgKzI0
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnBhcmFtZXRl
ckNvdW50KCkpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzeW1ib2xUYWJsZS0+
cGFyYW1ldGVyQ291bnQoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJn
dW1lbnRzW2ldID0gc2xvd0FyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1lbnRzW2ldLmluZGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoYWxsb2NhdGlvbltyZWcudG9Mb2NhbCgpXSkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBhc3NpZ24oYWxsb2NhdGlvbiwgVmlydHVh
bFJlZ2lzdGVyKHNsb3dBcmd1bWV0c1tpXS5pbmRleCkpLm9mZnNldCgpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zbG93QXJndW1l
bnRzID0gV1RGOjptb3ZlKG5ld1Nsb3dBcmd1bWVudHMpOwpAQCAtMjM3LDcgKzI1Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRml4IEdldExvY2FsVW5saW5r
ZWQncyB2YXJpYWJsZSByZWZlcmVuY2VzLgotICAgICAgICBpZiAoaGFzR2V0TG9jYWxVbmxpbmtl
ZCkgeworICAgICAgICBpZiAoaGFzTm9kZXNUaGF0TmVlZEZpeHVwKSB7CiAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKQEAgLTI0NiwxMCAr
MjY1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnVubGlua2Vk
TG9jYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoYWxsb2NhdGlvbltvcGVyYW5kLnRvTG9jYWwoKV0pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwob3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1hY2hpbmVMb2NhbChhc3NpZ24oYWxsb2Nh
dGlvbiwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9j
YXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hp
bmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgCkBAIC0yNjIsNiArMjg1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNz
aWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlciBz
cmMpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gc3JjOworICAgICAg
ICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0
aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgpXTsKKyAgICAgICAgICAgIGlmIChteUFs
bG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KIH07CiAKIGJvb2wgcGVyZm9ybVN0YWNrTGF5b3V0KEdyYXBo
JiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsNiArMTIwLDkgQEAg
aW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgU3RvcmVC
YXJyaWVyV2l0aE51bGxDaGVjazoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6
CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAg
Y2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVD
b25zdHJ1Y3Q6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NCw3ICs0
NDQsNiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmNo
ZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgQ2hlY2tJbkRlc2NyaXB0b3ImIGNo
ZWNrSW4gPSBzdGF0ZS5jaGVja0luc1tpXTsKICAgICAgICAgICAgIApAQCAtNDgwLDcgKzQ3OSw2
IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAg
ICAgICBjaGVja0luLm1fZ2VuZXJhdG9ycy5hcHBlbmQoQ2hlY2tJbkdlbmVyYXRvcihzdHViSW5m
bywgc2xvd0NhbGwsIGJlZ2luKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAg
ICAKICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LmxpbmsoJnNsb3dQYXRoSklUKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uSnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDE3
OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBKU0NhbGw6OkpTQ2FsbCh1bnNpZ25lZCBzdGFja21h
cElELCBOb2RlCiAgICAgLCBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKICAgICAsIG1faW5zdHJ1
Y3Rpb25PZmZzZXQoMCkKIHsKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDYWxsIHx8IG5vZGUt
Pm9wKCkgPT0gQ29uc3RydWN0KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCShyZXZpc2lv
biAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAordXNpbmcgbmFtZXNwYWNlIERGRzsKKwogSlNDYWxsQmFzZTo6SlNDYWxs
QmFzZSgpCiAgICAgOiBtX3R5cGUoQ2FsbExpbmtJbmZvOjpOb25lKQogICAgICwgbV9jYWxsTGlu
a0luZm8obnVsbHB0cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
QmFzZS5oCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIExpbmtCdWZmZXI7CiAKK25hbWVzcGFjZSBERkcgeworc3RydWN0IE5v
ZGU7Cit9CisKIG5hbWVzcGFjZSBGVEwgewogCiBjbGFzcyBKU0NhbGxCYXNlIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZU
TEpTQ2FsbFZhcmFyZ3MuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKK0pTQ2FsbFZhcmFy
Z3M6OkpTQ2FsbFZhcmFyZ3MoKQorICAgIDogbV9zdGFja21hcElEKFVJTlRfTUFYKQorICAgICwg
bV9ub2RlKG51bGxwdHIpCisgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KFVJTlRfTUFYKQorewor
fQorCitKU0NhbGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKHVuc2lnbmVkIHN0YWNrbWFwSUQsIE5v
ZGUqIG5vZGUpCisgICAgOiBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKKyAgICAsIG1fbm9kZShu
b2RlKQorICAgICwgbV9jYWxsQmFzZSgKKyAgICAgICAgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RW
YXJhcmdzID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzIDogQ2FsbExpbmtJbmZvOjpD
YWxsVmFyYXJncywKKyAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljKQorICAgICwgbV9pbnN0
cnVjdGlvbk9mZnNldCgwKQoreworICAgIEFTU0VSVChub2RlLT5vcCgpID09IENhbGxWYXJhcmdz
IHx8IG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gQ29u
c3RydWN0VmFyYXJncyk7Cit9CisKK3Vuc2lnbmVkIEpTQ2FsbFZhcmFyZ3M6Om51bVNwaWxsU2xv
dHNOZWVkZWQoKQoreworICAgIHJldHVybiA0OworfQorCit2b2lkIEpTQ2FsbFZhcmFyZ3M6OmVt
aXQoQ0NhbGxIZWxlcHJzJiBqaXQsIGludDMyX3Qgc3BpbGxTbG90c09mZnNldCkKK3sKKyAgICAv
LyBXZSBhcmUgcGFzc2VkIHRocmVlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoKKyAgICAvLyAtIFRo
ZSBjYWxsZWUuCisgICAgLy8gLSBUaGUgYXJndW1lbnRzIG9iamVjdC4KKyAgICAvLyAtIFRoZSAi
dGhpcyIgdmFsdWUsIGlmIGl0J3MgYSBjb25zdHJ1Y3RvciBjYWxsLgorICAgIAorICAgIGJvb2wg
aXNDYWxsID0gbV9ub2RlLT5vcCgpICE9IENvbnN0cnVjdFZhcmFyZ3M7CisgICAgCisgICAgQ2Fs
bFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKKyAgICAKKyAg
ICBHUFJJbmZvIGNhbGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICBHUFJJbmZv
IGFyZ3VtZW50c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBHUFJJbmZvIHRoaXNH
UFI7CisgICAgaWYgKGlzQ2FsbCkKKyAgICAgICAgdGhpc0dQUiA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMjsKKyAgICBlbHNlCisgICAgICAgIHRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIAor
ICAgIGNvbnN0IHVuc2lnbmVkIGNhbGxlZVNwaWxsU2xvdCA9IDA7CisgICAgY29uc3QgdW5zaWdu
ZWQgYXJndW1lbnRzU3BpbGxTbG90ID0gMTsKKyAgICBjb25zdCB1bnNpZ25lZCB0aGlzU3BpbGxT
bG90ID0gMjsKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFja1BvaW50ZXJTcGlsbFNsb3QgPSAzOwor
ICAgIAorICAgIC8vIEdldCBzb21lIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnM7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6c3Rh
Y2tSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6aGFy
ZHdhcmVSZXNlcnZlZFJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMuc2V0KGNh
bGxlZUdQUik7CisgICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsKKyAgICBpZiAo
aXNDYWxsKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKKyAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgIEdQUkluZm8g
c2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgR1BSSW5m
byBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBHUFJJ
bmZvIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFhbGxvY2F0b3IubnVtYmVyT2ZSZXVzZWRSZWdpc3RlcnMoKSk7CisgICAg
CisgICAgYXV0byBjb21wdXRlVXNlZFN0YWNrID0gWyZdIChHUFJJbmZvIHRhcmdldEdQUiwgdW5z
aWduZWQgZXh0cmEpIHsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHRhcmdldEdQUik7CisgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaWYgKGV4dHJhKQorICAgICAgICAg
ICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYSksIHRhcmdldEdQ
Uik7CisgICAgICAgIGppdC51cnNoaWZ0UHRyKEltbTMyKDMpLCB0YXJnZXRHUFIpOworICAgIH07
CisgICAgCisgICAgLy8gQXR0ZW1wdCB0aGUgZm9yd2FyZGluZyBmYXN0IHBhdGgsIGlmIGl0J3Mg
YmVlbiByZXF1ZXN0ZWQuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhhdmVBcmd1bWVudHM7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgIGlmIChtX25vZGUtPm9w
KCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBm
b28uYXBwbHkodGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAgIC8vIEZJWE1F
OiBkbyB0aGlzIG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwuCisgICAgICAgIAorICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikp
OworICAgICAgICAKKyAgICAgICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgMCk7Cisg
ICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsK
KyAgICAgICAgcmVzdWx0R1BSID0gc2NyYXRjaEdQUjI7CisgICAgICAgIAorICAgICAgICBoYXZl
QXJndW1lbnRzID0gaml0Lmp1bXAoKTsKKyAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAg
ICB9CisgICAgCisgICAgLy8gR290dGEgc3BpbGwgdGhlIGNhbGxlZSwgYXJndW1lbnRzLCBhbmQg
dGhpcyBiZWNhdXNlIHdlIHdpbGwgbmVlZCB0aGVtIGxhdGVyIGFuZCB3ZSB3aWxsIGhhdmUgc29t
ZQorICAgIC8vIGNhbGxzIHRoYXQgY2xvYmJlciB0aGVtLgorICAgIGppdC5zdG9yZTY0KGNhbGxl
ZUdQUiwgaml0LmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxlZVNwaWxsU2xvdCkp
OworICAgIGppdC5zdG9yZTY0KGFyZ3VtZW50c0dQUiwgaml0LmFkZHJlc3NGb3Ioc3BpbGxTbG90
c09mZnNldCArIGFyZ3VtZW50c1NwaWxsU2xvdCkpOworICAgIGlmIChpc0NhbGwpCisgICAgICAg
IGppdC5zdG9yZTY0KHRoaXNHUFIsIGppdC5hZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyB0
aGlzU3BpbGxTbG90KSk7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBqaXQuYWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgc3RhY2tQb2ludGVyU3Bp
bGxTbG90KSk7CisgICAgCisgICAgdW5zaWduZWQgZXh0cmFTdGFjayA9IHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSArCisgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdu
bWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKTsKKyAgICBjb21wdXRlVXNlZFN0YWNrKHNj
cmF0Y2hHUFIxLCAwKTsKKyAgICBtX2ppdC5zdWJQdHIoVHJ1c3RlZEltbTMyKGV4dHJhU3RhY2sp
LCBHUFJJbmZvOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCkpOworICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzKSwgR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgIGppdC5jYWxsKEdQUkluZm86
Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICBtX2V4Y2VwdGlvbnMuYXBwZW5kKGpp
dC5lbWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlIZWxwZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVj
aywgQXNzZW1ibHlIZWxlcHJzOjpGYXJKdW1wV2lkdGgpKTsKKyAgICAKKyAgICBqaXQubW92ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjEpOworICAgIGNvbXB1dGVVc2VkU3Rh
Y2soc2NyYXRjaEdQUjIsIGV4dHJhU3RhY2spOworICAgIGppdC5sb2FkNjQoaml0LmFkZHJlc3NG
b3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50c1NwaWxsU2xvdCksIGFyZ3VtZW50c0dQUik7
CisgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hHUFIxLCBmYWxzZSwgc2NyYXRj
aEdQUjIsIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKC1leHRy
YVN0YWNrKSwgc2NyYXRjaEdQUjIsIEdQUkluZm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKHNjcmF0Y2hHUFIyLCBhcmd1bWVudHNH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSwg
R1BSSW5mbzo6c2NyYXRjaEdQUjEpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSksIEdQUkluZm86Om5vblByZXNlcnZl
ZE5vbkFyZ3VtZW50R1BSKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25B
cmd1bWVudEdQUik7CisgICAgbV9leGNlcHRpb25zLmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNo
ZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVsZXBy
czo6RmFySnVtcFdpZHRoKSk7CisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgCisgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZh
cmFyZ3MpCisgICAgICAgIGhhdmVBcmd1bWVudHMubGluaygmaml0KTsKKyAgICAKKyAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSksIHJlc3VsdEdQUiwgR1BSSW5mbzo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIAorICAg
IGlmIChpc0NhbGwpIHsKKyAgICAgICAgaml0LmxvYWQ2NChqaXQuYWRkcmVzc0ZvcihzcGlsbFNs
b3RzT2Zmc2V0ICsgdGhpc1NwaWxsU2xvdCksIHRoaXNHUFIpOworICAgICAgICBqaXQuc3RvcmU2
NCh0aGlzR1BSLCBqaXQuY2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICB9CisgICAgCisgICAg
Ly8gSGVuY2Vmb3J0aCB3ZSBtYWtlIHRoZSBjYWxsLiBUaGUgYmFzZSBGVEwgY2FsbCBtYWNoaW5l
cnkgZXhwZWN0cyB0aGUgY2FsbGVlIGluIHJlZ1QwIGFuZCBmb3IgdGhlCisgICAgLy8gc3RhY2sg
ZnJhbWUgdG8gYWxyZWFkeSBiZSBzZXQgdXAsIHdoaWNoIGl0IGlzLgorICAgIGppdC5sb2FkNjQo
aml0LmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxlZVNwaWxsU2xvdCksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAKKyAgICBtX2NhbGxCYXNlLmVtaXQoaml0KTsKKyAgICAKKyAgICAv
LyBVbmRvIHRoZSBkYW1hZ2Ugd2UndmUgZG9uZS4KKyAgICBqaXQubG9hZFB0cihqaXQuYWRkcmVz
c0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgc3RhY2tQb2ludGVyU3BpbGxTbG90KSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEZUTEpTQ2FsbFZhcmFyZ3NfaAorI2RlZmluZSBGVExKU0NhbGxWYXJhcmdz
X2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTGlua0J1ZmZlcjsKKworbmFtZXNwYWNlIERGRyB7
CitzdHJ1Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbFZhcmFy
Z3MgeworcHVibGljOgorICAgIEpTQ2FsbFZhcmFyZ3MoKTsKKyAgICBKU0NhbGxWYXJhcmdzKHVu
c2lnbmVkIHN0YWNrbWFwSUQsIERGRzo6Tm9kZSopOworICAgIAorICAgIHN0YXRpYyB1bnNpZ25l
ZCBudW1TcGlsbFNsb3RzTmVlZGVkKCk7CisgICAgCisgICAgdm9pZCBlbWl0KENDYWxsSGVscGVy
cyYsIGludDMyX3Qgc3BpbGxTbG90c09mZnNldCk7CisgICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1
ZmZlciYsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIpOworICAgIAorICAgIHVu
c2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7IH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU0NhbGxWYXJhcmdzJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2luc3RydWN0aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVj
dGlvbk9mZnNldDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhY2tt
YXBJRDsKKyAgICBERkc6Ok5vZGUqIG1fbm9kZTsKKyAgICBKU0NhbGxCYXNlIG1fY2FsbEJhc2U7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBtX2V4Y2VwdGlvbnM7CisKK3B1YmxpYzoKKyAg
ICB1aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKU0Nh
bGxWYXJhcmdzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTg2LDgg
KzE5ODYsMjIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGNoZWNrQXJndW1lbnRzTm90Q3Jl
YXRlZCgpOwogCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhbV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQu
YWRkKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpLCBtX291dC5jb25zdEludDMyKC0xKSkpOworICAgICAgICBpZiAobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhSW5saW5lQ2FsbEZy
YW1lOjppc1ZhcmFyZ3MobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLWtp
bmQpKSB7CisgICAgICAgICAgICBzZXRJbnQzMigKKyAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKAorICAgICAgICAgICAgICAgICAgICBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAg
ICAgICAgaWYgKCFtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFy
Z3VtZW50Q291bnRSZWdpc3RlciA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgc2V0SW50MzIoCisgICAg
ICAgICAgICAgICAgbV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJO
b25OZWdhdGl2ZShwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlcikpLAorICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKC0xKSkpOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBKU1ZhbHVlIGV2YWwoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgcmV0dXJuIGludGVycHJldGVyLT5leGVjdXRlKGV2YWws
IGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBjYWxsZXJTY29wZUNoYWluKTsKIH0KIAotdW5zaWduZWQg
c2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTdGFjayogc3RhY2ss
IEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3Qg
Zmlyc3RWYXJBcmdPZmZzZXQpCit1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCiB7
CiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIGlmICghYXJndW1lbnRzKQpAQCAtMTU2LDYgKzE1
NiwxMyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogCiAgICAgZWxz
ZQogICAgICAgICBsZW5ndGggPSAwOwogICAgIAorICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3Vu
c2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU3RhY2sq
IHN0YWNrLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVp
bnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHNpemVP
ZlZhcmFyZ3MoY2FsbEZyYW1lLCBhcmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICAK
ICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbGVlRnJhbWVGb3JWYXJhcmdzKGNhbGxG
cmFtZSwgbnVtVXNlZFN0YWNrU2xvdHMsIGxlbmd0aCArIDEpOwogICAgIGlmIChsZW5ndGggPiBB
cmd1bWVudHM6Ok1heEFyZ3VtZW50cyB8fCAhc3RhY2stPmVuc3VyZUNhcGFjaXR5Rm9yKGNhbGxl
ZUZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3Io
Y2FsbEZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMw
OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUo
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIHBhZGRlZENhbGxlZUZyYW1lT2Zmc2V0KTsKICAgICB9
CiAKKyAgICB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENhbGxGcmFtZSogZXhlYywgSlNWYWx1ZSBh
cmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBzaXpl
RnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogZXhlYywgSlNTdGFjayosIEpTVmFsdWUgYXJndW1l
bnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZz
ZXQpOwogICAgIHZvaWQgbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBWaXJ0dWFs
UmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBzb3VyY2UsIHVpbnQzMl90IG9mZnNl
dCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwVmFyYXJnc0ZyYW1lKENhbGxGcmFt
ZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywg
dWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAko
cmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksMTAgQEAgdm9pZCBT
dGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbAogCiAgICAgICAgIG1fZnJhbWUubV9j
YWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUg
PSBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+
cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hl
ZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKICAg
ICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2soKTsKICAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gY29kZU9yaWdpbi0+
Ynl0ZWNvZGVJbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsMTUgKzIx
MiwyNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooCiAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudEJ5dGVzKCkpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRF
eGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCkKK0Fzc2VtYmx5SGVscGVyczo6
SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tp
bmQga2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewogICAgIGNhbGxFeGNlcHRpb25G
dXp6KCk7CisKKyAgICBpZiAod2lkdGggPT0gRmFySnVtcFdpZHRoKQorICAgICAgICBraW5kID0g
KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrIDog
Tm9ybWFsRXhjZXB0aW9uQ2hlY2spOwogICAgIAorICAgIEp1bXAgcmVzdWx0OwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChraW5kID09IE5vcm1hbEV4Y2VwdGlv
bkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZF
eGNlcHRpb24oKSkpOworICAgIHJlc3VsdCA9IGJyYW5jaFRlc3Q2NChraW5kID09IE5vcm1hbEV4
Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRy
ZXNzT2ZFeGNlcHRpb24oKSkpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICByZXR1cm4g
YnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWws
IEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZF
eGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgcmVzdWx0ID0gYnJhbmNo
MzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29s
dXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRp
b24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAjZW5kaWYKKyAgICAKKyAgICBpZiAoa2lu
ZCA9PSBOb3JtYWxKdW1wV2lkdGgpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAg
UGF0Y2hhYmxlSnVtcCByZWFsSnVtcCA9IGp1bXAoKTsKKyAgICByZXN1bHQubGluayh0aGlzKTsK
KyAgICAKKyAgICByZXR1cm4gcmVhbEp1bXAubV9qdW1wOwogfQogCiB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVscGVycyYgaml0
LCBUcnVzdGVkSW1tUHRyIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCBkZXN0KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNzk5NTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzgsNiArMzM4LDEwIEBAIHB1YmxpYzoKICAgICB9CiAgICAgc3RhdGljIEFk
ZHJlc3MgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsK
KyAgICAgICAgLy8gTkIuIEl0J3MgdGVtcHRpbmcgb24gc29tZSBhcmNoaXRlY3R1cmVzIHRvIHNv
bWV0aW1lcyB1c2UgYW4gb2Zmc2V0IGZyb20gdGhlIHN0YWNrCisgICAgICAgIC8vIHJlZ2lzdGVy
IGJlY2F1c2UgZm9yIHNvbWUgb2Zmc2V0cyB0aGF0IHdpbGwgZW5jb2RlIHRvIGEgc21hbGxlciBp
bnN0cnVjdGlvbi4gQnV0IHdlCisgICAgICAgIC8vIGNhbm5vdCBkbyB0aGlzLiBXZSB1c2UgdGhp
cyBpbiBwbGFjZXMgd2hlcmUgdGhlIHN0YWNrIHBvaW50ZXIgaGFzIGJlZW4gbW92ZWQgdG8gc29t
ZQorICAgICAgICAvLyB1bnByZWRpY3RhYmxlIGxvY2F0aW9uLgogICAgICAgICBBU1NFUlQodmly
dHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKTsKICAgICB9CkBAIC01MzMsNyArNTM3LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2Fs
bEV4Y2VwdGlvbkZ1enooKTsKICAgICAKICAgICBlbnVtIEV4Y2VwdGlvbkNoZWNrS2luZCB7IE5v
cm1hbEV4Y2VwdGlvbkNoZWNrLCBJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrIH07Ci0gICAgSnVtcCBl
bWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQgPSBOb3JtYWxFeGNlcHRp
b25DaGVjayk7CisgICAgZW51bSBFeGNlcHRpb25KdW1wV2lkdGggeyBOb3JtYWxKdW1wV2lkdGgs
IEZhckp1bXBXaWR0aCB9OworICAgIEp1bXAgZW1pdEV4Y2VwdGlvbkNoZWNrKAorICAgICAgICBF
eGNlcHRpb25DaGVja0tpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjaywgRXhjZXB0aW9uSnVtcFdp
ZHRoID0gTm9ybWFsSnVtcFdpZHRoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykK
ICAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJsZXImIGppdCwgQWJzdHJhY3RT
YW1wbGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMyX3QgaW5jcmVtZW50ID0gMSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDYgKzQw
Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0g
WDg2UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1
cm5WYWx1ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6ZXNpOwor
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIgPSBYODZS
ZWdpc3RlcnM6OnIxMDsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHBhdGNocG9pbnRTY3JhdGNo
UmVnaXN0ZXIgPSBNYWNyb0Fzc2VtYmxlcjo6c2NyYXRjaFJlZ2lzdGVyOwogCiAgICAgc3RhdGlj
IEdQUlJlZyB0b1JlZ2lzdGVyKHVuc2lnbmVkIGluZGV4KQpAQCAtNTc3LDYgKzU3OCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gQVJNNjRSZWdp
c3RlcnM6OngwOyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVH
UFIyID0gQVJNNjRSZWdpc3RlcnM6OngxOyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gQVJNNjRSZWdpc3RlcnM6OngyOworICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIgPSBBUk02NFJlZ2lz
dGVyczo6eDg7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRjaFJlZ2lz
dGVyID0gQVJNNjRSZWdpc3RlcnM6OmlwMDsKIAogICAgIC8vIEdQUlJlZyBtYXBwaW5nIGlzIGRp
cmVjdCwgdGhlIG1hY2hpbmUgcmVnc2l0ZXIgbnVtYmVycyBjYW4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDExICs0NjQsNiBAQCBDb21waWxh
dGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgREZHOjpDYW5JbmxpbmU6Ci0gICAgICAgIG1f
Y2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZCA9IHRydWU7Ci0gICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7Ci0gICAgICAg
IGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21w
aWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChPcGNvZGVJRCwgSW5zdHJ1
Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHZvaWQgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlELCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgICAgIHZv
aWQgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQg
Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiwgQ2FsbExpbmtJbmZvKik7CiAg
ICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rp
b24qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24g
MTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoSW5z
dHJ1Y3Rpb24qCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJ
VDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKK3Zv
aWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBDYWxsTGlua0luZm8qIGluZm8pCiB7CiAgICAgaW50IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKICAgICBpbnQgYXJndW1lbnRzID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVy
YW5kOwpAQCAtOTAsNiArOTAsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFt
ZShJbnN0cgogICAgIGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgZW5kLmxpbmsodGhpcyk7CiAg
ICAgCisgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCisgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDEsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKKyAgICBsb2FkOCgmaW5mby0+
bWF4TnVtQXJndW1lbnRzLCByZWdUMCk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIo
QWJvdmUsIHJlZ1QwLCByZWdUMik7CisgICAgSnVtcCBub3RTYXR1cmF0ZWQgPSBicmFuY2gzMihC
ZWxvd09yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoMjU1KSk7CisgICAgbW92ZShUcnVzdGVk
SW1tMzIoMjU1KSwgcmVnVDIpOworICAgIG5vdFNhdHVyYXRlZC5saW5rKHRoaXMpOworICAgIHN0
b3JlOChyZWdUMiwgJmluZm8tPm1heE51bUFyZ3VtZW50cyk7CisgICAgbm90QmlnZ2VzdC5saW5r
KHRoaXMpOworICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCByZWdUMCk7CiAgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhyZWdUMSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKQEAgLTEzNCw3ICsxNDQsOSBAQCB2b2lkIEpJVDo6Y29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1CiAKIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9w
Y29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KQogewotICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5m
bygpOworCisgICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKICAg
ICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIg
dG8gY2FsbGVlIGNhbGxGcmFtZS4KQEAgLTE1Miw3ICsxNjQsMTEgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5H
VEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9j
YWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBDT01QSUxFX0FT
U0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0
X3ZhcmFyZ3MpLCBjYWxsX2FuZF9jb25zdHJ1Y3RfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2Ft
ZV9sZW5ndGgpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCis8PDw8PDw8IC5taW5lCisgICAgICAgIGNvbXBp
bGVMb2FkVmFyYXJncyhpbnN0cnVjdGlvbiwgaW5mbyk7Cis9PT09PT09CiAgICAgICAgIGNvbXBp
bGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbik7Cis+Pj4+Pj4+IC5yMTc5ODYyCiAgICAg
ZWxzZSB7CiAgICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
ICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsK
QEAgLTE3Niw5ICsxOTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNv
ZGVJCiAKICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBK
U1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotCi0gICAgaWYgKG9wY29kZUlEID09IG9w
X2NhbGxfZXZhbCkgeworICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAg
ICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5j
cHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBW
YXJhcmdzRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTEgKzEwMSwzMSBAQCB2b2lk
IGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsCiAKIHZvaWQgZW1pdFNldHVwVmFy
YXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xvdHNH
UFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRj
aEdQUjMsIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSgKLSAgICAg
ICAgaml0LCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRj
aEdQUjMsCi0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFs
UmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJbnQzMiksCi0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKSwKLSAgICAg
ICAgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICBlbWl0U2V0dXBWYXJhcmdzRnJh
bWVGYXN0Q2FzZShqaXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMywgbnVsbHB0ciwgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKK30K
Kwordm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmIGppdCwg
R1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRj
aEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiwgdW5zaWduZWQgZmly
c3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKQoreworICAg
IFZhbHVlUmVjb3ZlcnkgYXJndW1lbnRDb3VudFJlY292ZXJ5OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEFyZ3VtZW50UmVnOworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAg
aWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGlubGluZUNhbGxGcmFtZS0+a2luZCkpIHsK
KyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3Bs
YWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRSZWdpc3RlciwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KAor
ICAgICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSkpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkgPiAxKQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOworICAgIH0gZWxzZSB7
CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNl
ZEluSlNTdGFjaygKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKKyAgICB9CisgICAg
ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0
Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGFyZ3VtZW50Q291bnRSZWNvdmVyeSwg
Zmlyc3RBcmd1bWVudFJlZywgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFy
YXJnc0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1
cFZhcmFyZ3NGcmFtZS5oCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkg
QEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAogLy8gVmFyaWFudCB0
aGF0IGFzc3VtZXMgbm9ybWFsIHN0YWNrIGZyYW1lLgogdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJh
bWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcg
c2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCB1bnNp
Z25lZCBmaXJzdFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2Up
OwogCisvLyBWYXJpYW50IGZvciBwb3RlbnRpYWxseSBpbmxpbmVkIHN0YWNrIGZyYW1lcy4KK3Zv
aWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIG51
bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQ
UlJlZyBzY3JhdGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiwgdW5zaWduZWQgZmlyc3RWYXJBcmdP
ZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKFZN
JiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lLCBBcmd1bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1vZGUpCiAg
ICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFycmF5KCkg
KyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3VtZW50cyhj
YWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFy
cmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJh
bWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3Jl
YXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUsIG1vZGUpOwogICAgICAgICByZXR1cm4g
YXJndW1lbnRzOwogICAgIH0KQEAgLTEyNCw3ICsxMjQsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShFeGVjU3RhdGUqKTsKIAogICAgIHN0
YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1l
KSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpOyB9Ci0gICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0
ZXMoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsgcmV0dXJuIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICogKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IDEpOyB9CisgICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpCisgICAgICAgIHJldHVybiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEp
OworICAgIH0KICAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90KTsKICAgICBib29sIHRyeVNldEFy
Z3VtZW50KFZNJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlKTsKICAgICBKU1ZhbHVlIHRyeUdl
dEFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCk7CkBAIC0zNDAsMTEgKzM0OCwxNSBAQCBpbmxpbmUg
dm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgbV9vdmVycm9kZUNhbGxlZSA9
IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsKICAgICBtX2lzU3RyaWN0TW9k
ZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFi
bGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKLQorICAgIAorICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgIG1fbnVtQXJndW1l
bnRzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVy
Lm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbnVtQXJndW1l
bnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgIG1fbnVtQXJndW1l
bnRzLS07CisgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBOb3JtYWxBcmd1bWVu
dHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICAKICAgICAgICAgaWYgKG1fbnVtQXJn
dW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAg
ICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAt
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpAQCAtMzYxLDcgKzM3Myw2
IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0gICAgICAgIG1f
bnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKICAg
ICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJn
dW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZz
ZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24g
MTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25T
dHJpbmc7CiAgICAgLyogZnJvbSBzdXBlciBsb25nIGNvbXBpbGVzIHRoYXQgdGFrZSBhIGxvdCBv
ZiBtZW1vcnkuICovXAogICAgIHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ0NhbGxlclNpemUs
IDEwMDAwKSBcCiAgICAgXAorICAgIHYodW5zaWduZWQsIG1heGltdW1WYXJhcmdzRm9ySW5saW5p
bmcsIDEwMCkgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50Q2FsbElubGlu
aW5nLCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudEJ5SWRJbmxpbmluZywg
dHJ1ZSkgXAogICAgIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246418</attachid>
            <date>2015-02-11 15:59:28 -0800</date>
            <delta_ts>2015-02-11 20:59:12 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>113539</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcxLDYgKzQ3MSwxNiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBsc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0p
LCBzcmNEZXN0KTsKICAgICB9CisgICAgCisgICAgdm9pZCByc2hpZnRQdHIoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICByc2hpZnQzMih0cnVzdGVkSW1tMzJG
b3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHVyc2hpZnRQdHIoSW1t
MzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICB1cnNoaWZ0MzIodHJ1
c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CisgICAgfQogCiAgICAgdm9pZCBuZWdQ
dHIoUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKQEAgLTc1MCw2ICs3NjAsMTYgQEAgcHVibGljOgog
ICAgICAgICBsc2hpZnQ2NCh0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKICAg
ICB9CiAKKyAgICB2b2lkIHJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkK
KyAgICB7CisgICAgICAgIHJzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rl
c3QpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
c3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVyc2hpZnQ2NCh0cnVzdGVkSW1tMzJGb3JTaGlmdChp
bW0pLCBzcmNEZXN0KTsKKyAgICB9CisKICAgICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBuZWc2NChkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2Vu
CiAgICAgICAgICwgaGFzU2VlblNob3VsZFJlcGF0Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2Vl
bkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2FsbFR5cGUoTm9uZSkKKyAgICAgICAgLCBtYXhO
dW1Bcmd1bWVudHMoMCkKICAgICAgICAgLCBzbG93UGF0aENvdW50KDApCiAgICAgewogICAgIH0K
QEAgLTkxLDYgKzkyLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1Nl
bgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAxOwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDog
NTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBjYWxsZWVHUFIgOiA4OworICAgIHVpbnQ4X3Qg
bWF4TnVtQXJndW1lbnRzOyAvLyBPbmx5IHVzZWQgZm9yIHZhcmFyZ3MgY2FsbHMuCiAgICAgdWlu
dDMyX3Qgc2xvd1BhdGhDb3VudDsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNw
cAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw5IEBAIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFs
bHkgbmVlZCB0aGlzLCBidXQgYW55dGltZSB3ZSBoYXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQg
YmVjb21lcyBpbmRpc3BlbnNhYmxlLgogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsK
ICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZyb21DYWxsTGlua0luZm8obG9ja2VyLCBjYWxsTGlu
a0luZm8pOworICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGcm9tQ2FsbExpbmtJ
bmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICByZXN1bHQubV9tYXhOdW1Bcmd1bWVudHMg
PSBjYWxsTGlua0luZm8ubWF4TnVtQXJndW1lbnRzOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygK
QEAgLTI5MSw2ICsyOTMsMTMgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVGbwogICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCwgYmFzZWxpbmVNYXApOwogfQogCit2b2lkIENhbGxMaW5rU3RhdHVzOjpzZXRQ
cm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFudCB2YXJpYW50KQoreworICAgIG1fdmFyaWFu
dHMgPSBDYWxsVmFyaWFudExpc3R7IHZhcmlhbnQgfTsKKyAgICBtX2NvdWxkVGFrZVNsb3dQYXRo
ID0gZmFsc2U7CisgICAgbV9pc1Byb3ZlZCA9IHRydWU7Cit9CisKIGJvb2wgQ2FsbExpbmtTdGF0
dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENhbGxMaW5r
U3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAgbV9pc1By
b3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAg
IHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApAQCAtMTA4
LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZv
cigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFw
JiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29uc3RhbnRD
YWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAog
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAgLTEyMyw2
ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7
IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIAor
ICAgIGJvb2wgbWF4TnVtQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhOdW1Bcmd1bWVu
dHM7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHBy
aXZhdGU6CkBAIC0xMzcsNiArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBDYWxsVmFyaWFudExpc3Qg
bV92YXJpYW50czsKICAgICBib29sIG1fY291bGRUYWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lz
UHJvdmVkOworICAgIHVuc2lnbmVkIG1fbWF4TnVtQXJndW1lbnRzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBzdHJ1Y3Qg
SW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtpbmQgewogICAgICAgICBDYWxsLAogICAgICAg
ICBDb25zdHJ1Y3QsCisgICAgICAgIENhbGxWYXJhcmdzLAorICAgICAgICBDb25zdHJ1Y3RWYXJh
cmdzLAogICAgICAgICAKICAgICAgICAgLy8gRm9yIHRoZXNlLCB0aGUgc3RhY2tPZmZzZXQgaW5j
b3Jwb3JhdGVzIHRoZSBhcmd1bWVudCBjb3VudCBwbHVzIHRoZSB0cnVlIHJldHVybiBQQwogICAg
ICAgICAvLyBzbG90LgpAQCAtMTQwLDI1ICsxNDIsMzkgQEAgc3RydWN0IElubGluZUNhbGxGcmFt
ZSB7CiAgICAgICAgIHJldHVybiBDYWxsOwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgS2luZCB2
YXJhcmdzS2luZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAg
IHJldHVybiBDYWxsVmFyYXJnczsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAg
ICAgICAgICAgcmV0dXJuIENvbnN0cnVjdFZhcmFyZ3M7CisgICAgICAgIH0KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENhbGw7CisgICAgfQor
ICAgIAogICAgIHN0YXRpYyBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2lu
ZEZvcihLaW5kIGtpbmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAg
Y2FzZSBDYWxsOgorICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIEdldHRl
ckNhbGw6CiAgICAgICAgIGNhc2UgU2V0dGVyQ2FsbDoKICAgICAgICAgICAgIHJldHVybiBDb2Rl
Rm9yQ2FsbDsKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ29uc3RydWN0
VmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ29uc3RydWN0OwogICAgICAgICB9
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBD
b2RlRm9yQ2FsbDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgaXNOb3JtYWxDYWxsKEtp
bmQga2luZCkKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcmFyZ3MoS2luZCBraW5kKQogICAgIHsKICAg
ICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgQ2FsbDoKLSAgICAgICAgY2FzZSBD
b25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcxLDEwICsxODcsMTEgQEAgc3RydWN0IElu
bGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7CiAgICAgQml0VmVjdG9yIGNh
cHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUgbWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFi
bGUgbnVtYmVyaW5nLgogCi0gICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjk7Ci0gICAgdW5zaWdu
ZWQga2luZCA6IDI7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCisgICAgc2lnbmVkIHN0YWNrT2Zmc2V0
IDogMjg7CisgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCiAgICAg
Ym9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93IHRoYXQgY2Fs
bGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2
YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxseS4KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXI7IC8vIFRoaXMgaXMgb25seSBzZXQgaWYg
dGhlIGNvZGUgdXNlcyBhcmd1bWVudHMuIFRoZSB1bm1vZGlmaWVkIGFyZ3VtZW50cyByZWdpc3Rl
ciBmb2xsb3dzIHRoZSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoKSBjb252ZW50aW9uIChz
ZWUgQ29kZUJsb2NrLmgpLgorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0
ZXI7IC8vIE9ubHkgc2V0IHdoZW4gd2UgaW5saW5lIGEgdmFyYXJncyBjYWxsLgogICAgIAogICAg
IC8vIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG5vdGlvbiBvZiBhICJkZWZhdWx0IiBzZXQgb2Yg
dmFsdWVzIGZvcgogICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxkcy4gVGhpcyBjb25zdHJ1
Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCShyZXZpc2lvbiAxNzk5NTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw2ICs2Niw4IEBAIGNvbnN0IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtp
bmQga2kKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHNFc2NhcGVkIjsKICAgICBjYXNlIE5vdFN0
cmluZ09iamVjdDoKICAgICAgICAgcmV0dXJuICJOb3RTdHJpbmdPYmplY3QiOworICAgIGNhc2Ug
VmFyYXJnc092ZXJmbG93OgorICAgICAgICByZXR1cm4gIlZhcmFyZ3NPdmVyZmxvdyI7CiAgICAg
Y2FzZSBVbmNvdW50YWJsZToKICAgICAgICAgcmV0dXJuICJVbmNvdW50YWJsZSI7CiAgICAgY2Fz
ZSBVbmNvdW50YWJsZUludmFsaWRhdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGl0S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGl0S2luZC5oCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBA
QCBlbnVtIEV4aXRLaW5kIDogdWludDhfdCB7CiAgICAgSW5hZGVxdWF0ZUNvdmVyYWdlLCAvLyBX
ZSBleGl0ZWQgYmVjYXVzZSB3ZSBlbmRlZCB1cCBpbiBjb2RlIHRoYXQgZGlkbid0IGhhdmUgcHJv
ZmlsaW5nIGNvdmVyYWdlLgogICAgIEFyZ3VtZW50c0VzY2FwZWQsIC8vIFdlIGV4aXRlZCBiZWNh
dXNlIGFyZ3VtZW50cyBlc2NhcGVkIGJ1dCB3ZSBkaWRuJ3QgZXhwZWN0IHRoZW0gdG8uCiAgICAg
Tm90U3RyaW5nT2JqZWN0LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBzaG91bGRuJ3QgaGF2ZSBh
dHRlbXB0ZWQgdG8gb3B0aW1pemUgc3RyaW5nIG9iamVjdCBhY2Nlc3MuCisgICAgVmFyYXJnc092
ZXJmbG93LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIHZhcmFyZ3MgY2FsbCBwYXNzZWQgbW9yZSBh
cmd1bWVudHMgdGhhbiB3ZSBleHBlY3RlZC4KICAgICBVbmNvdW50YWJsZSwgLy8gV2UgZXhpdGVk
IGZvciBub25lIG9mIHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBp
dC4gTW9zdCB1c2VzIG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBhIEZJWE1FLgogICAgIFVu
Y291bnRhYmxlSW52YWxpZGF0aW9uLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB0aGUgY29kZSBibG9j
ayB3YXMgaW52YWxpZGF0ZWQ7IHRoaXMgbWVhbnMgdGhhdCB3ZSd2ZSBhbHJlYWR5IGNvdW50ZWQg
dGhlIHJlYXNvbnMgd2h5IHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlkYXRlZC4KICAgICBXYXRj
aGRvZ1RpbWVyRmlyZWQsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gc2VydmljZSB0
aGUgd2F0Y2hkb2cgdGltZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzk5
NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9m
b3JtID09IFNTQSk7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBt
X3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpOwot
ICAgICAgICBBU1NFUlQodmFsdWUuaXNIZWFwVG9wKCkpOworICAgICAgICBBU1NFUlQoIXZhbHVl
LmlzQ2xlYXIoKSk7CiAgICAgICAgIEZpbHRyYXRpb25SZXN1bHQgcmVzdWx0ID0KICAgICAgICAg
ICAgIHZhbHVlLmZpbHRlcih0eXBlRmlsdGVyRm9yKHVzZUtpbmRGb3IodmFyaWFibGUtPmZsdXNo
Rm9ybWF0KCkpKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQgPT0gRmls
dHJhdGlvbk9LKTsKQEAgLTIwMyw5ICsyMDMsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoK
LSAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBz
ZXQuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS5ibG9jaygpLT52YWx1ZXNBdEhlYWQub3BlcmFu
ZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUg
c3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4gU2V0QXJndW1lbnQgbWVhbnMgdGhhdCBz
b21lb25lIHNldAorICAgICAgICAvLyB0aGUgYXJndW1lbnQgdmFsdWVzIG91dC1vZi1iYW5kLCBh
bmQgY3VycmVudGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8gYQorICAgICAgICAvLyBu
b24tY2xlYXIgdmFsdWUuCisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0
YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygp
Lm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAgICAgICBtX3N0YXRlLnZhcmlh
YmxlcygpLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKICAg
ICBjYXNlIEJpdE9yOgpAQCAtMTMxNSw3ICsxMzI2LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3Rl
IHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0byBmb3JjZSBjb25zdGFudCBmb2xkaW5nCiAg
ICAgICAgIC8vIG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBiZWNhdXNlIEdldE15QXJndW1lbnRz
TGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCiAgICAgICAgIC8vIFdlIHBlcmZvcm0g
ZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIgb24uCi0gICAgICAgIGlmIChub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhSW5saW5lQ2Fs
bEZyYW1lOjppc1ZhcmFyZ3Mobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
a2luZCkpIHsKICAgICAgICAgICAgIHNldENvbnN0YW50KAogICAgICAgICAgICAgICAgIG5vZGUs
IGpzTnVtYmVyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkgLSAxKSk7CiAgICAgICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7
IC8vIFByZXRlbmQgdGhhdCB3ZSBjbG9iYmVyZWQgdG8gcHJldmVudCBjb25zdGFudCBmb2xkaW5n
LgpAQCAtMTk2NCw2ICsxOTc2LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBj
YXNlIE5hdGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2Fs
bEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKICAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAzLDYgKzUwMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9k
ZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFy
Z3Mob3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+a2luZCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGtub3cgZXhhY3RseSB3aGF0IHRoaXMgd2lsbCByZXR1cm4uIEJ1dCBvbmx5IGFm
dGVyIHdlIGhhdmUgY2hlY2tlZAogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IG5vYm9keSBo
YXMgZXNjYXBlZCBvdXIgYXJndW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODIsMTIgKzE4MiwxMyBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBjYWxsVGFyZ2V0
LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtTdGF0dXMpOwogICAg
IHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291
bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9u
KiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgaGFu
ZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCk7CiAgICAgdm9pZCBlbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQsIE5v
ZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7CiAgICAgdm9pZCB1bmRvRnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQpOwogICAgIHZvaWQg
ZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHVuc2lnbmVkIGlu
bGluaW5nQ29zdChDYWxsVmFyaWFudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFu
IGlubGluaW5nIGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29z
dCBvZiAxLgogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2Vl
ZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlu
bGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2Fs
bExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxs
RnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOworICAgIGJvb2wgaGFuZGxl
SW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBD
YWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNB
cmd1bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1
bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4
dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIGVudW0gQ2FsbGVyTGlua2FiaWxpdHkgeyBDYWxsZXJE
b2VzTm9ybWFsTGlua2luZywgQ2FsbGVyTGlua3NNYW51YWxseSB9OwogICAgIGJvb2wgYXR0ZW1w
dFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENh
bGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJM
aW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5n
QmFsYW5jZSk7CiAgICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQg
cmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5KTsKQEAgLTUyOCw2ICs1MjksOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
ICAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSkpKTsKKyAgICAgICAgICAgIGlmIChJ
bmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhpbmxpbmVDYWxsRnJhbWUtPmtpbmQpKQorICAgICAg
ICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVTdGFja0VudHJ5LT5tX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gbnVtQXJn
dW1lbnRzOyBhcmd1bWVudC0tID4gMTspCkBAIC02OTEsNyArNjk0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG9wLCBvcEluZm8sIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBw
cmVkaWN0aW9uKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOwog
ICAgICAgICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0KSwgY2FsbCk7CisgICAgICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxs
KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogICAgIApAQCAtMTA0Myw3ICsxMDQ2LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBBU1NFUlQocmVnaXN0ZXJP
ZmZzZXQgPD0gMCk7CiAgICAgCiAgICAgaWYgKGNhbGxUYXJnZXQtPmhhc0NvbnN0YW50KCkpCi0g
ICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXMoY2FsbFRhcmdldC0+YXNKU1Zh
bHVlKCkpLnNldElzUHJvdmVkKHRydWUpOworICAgICAgICBjYWxsTGlua1N0YXR1cy5zZXRQcm92
ZW5Db25zdGFudENhbGxlZShjYWxsVGFyZ2V0LT5hc0pTVmFsdWUoKSk7CiAgICAgCiAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAgICAgZGF0YUxvZygi
ICAgIEhhbmRsaW5nIGNhbGwgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwgY2FsbExp
bmtTdGF0dXMsICJcbiIpOwpAQCAtMTA2MCw3ICsxMDYzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbCgKICAgICAKICAgICBPcEluZm8gY2FsbE9wSW5mbzsKICAgICAKLSAgICBp
ZiAoaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVn
aXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwg
a2luZCwgcHJlZGljdGlvbikpIHsKKyAgICBpZiAoaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwg
cmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSwgVmlydHVhbFJlZ2lzdGVyKCksIDAsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwga2luZCwgcHJlZGljdGlvbikp
IHsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3Jh
cGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTA4OCwxMSArMTA5MSw1MiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAog
ICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbE9wSW5mbywgY2FsbFRhcmdldCwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKIH0KIAotdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwg
Tm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChJbnN0cnVj
dGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0g
ICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGxf
dmFyYXJncykgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFyYXJncykpOworICAgIAor
ICAgIGludCByZXN1bHQgPSBwY1sxXS51Lm9wZXJhbmQ7CisgICAgaW50IGNhbGxlZSA9IHBjWzJd
LnUub3BlcmFuZDsKKyAgICBpbnQgdGhpc1JlZyA9IHBjWzNdLnUub3BlcmFuZDsKKyAgICBpbnQg
YXJndW1lbnRzID0gcGNbNF0udS5vcGVyYW5kOworICAgIGludCBmaXJzdEZyZWVSZWcgPSBwY1s1
XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gcGNbNl0udS5vcGVyYW5k
OworICAgIAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7
CisgICAgCisgICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVl
KSk7CisgICAgCisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Nh
bGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOworICAgIGlmIChjYWxsVGFyZ2V0LT5oYXND
b25zdGFudCgpKQorICAgICAgICBjYWxsTGlua1N0YXR1cy5zZXRQcm92ZW5Db25zdGFudENhbGxl
ZShjYWxsVGFyZ2V0LT5hc0pTVmFsdWUoKSk7CisgICAgCisgICAgaWYgKGNhbGxMaW5rU3RhdHVz
LmNhbk9wdGltaXplKCkKKyAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVz
dWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1Jl
ZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVD
YWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBp
ZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOworICAg
IGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgCisgICAg
Tm9kZSogdGhpc0NoaWxkOwogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICB0
aGlzQXJndW1lbnQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJP
ZmZzZXQpKTsKKyAgICAgICAgdGhpc0NoaWxkID0gZ2V0KHRoaXNSZWcpOworICAgIAorICAgIE5v
ZGUqIGNhbGwgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9u
KSwgY2FsbFRhcmdldCwgZ2V0KGFyZ3VtZW50cyksIHRoaXNDaGlsZCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOworICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQor
ICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKK30KKwordm9pZCBCeXRlQ29kZVBhcnNlcjo6
ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRhcmdldCwg
VmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudFJlZywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQoreworICAgIE5vZGUqIHRoaXNBcmd1bWVudDsKKyAgICBpZiAodGhpc0FyZ3VtZW50UmVn
LmlzVmFsaWQoKSkKKyAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0KHRoaXNBcmd1bWVudFJlZyk7
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICBlbHNl
CiAgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKQEAgLTEzOTMsNyArMTQzNywxMSBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3Rh
dHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
dW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6Oktp
bmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKAorICAgIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3Bl
cmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLAorICAgIGludCByZWdp
c3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LAor
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRz
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCisgICAgdW5zaWduZWQgbmV4
dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICBk
YXRhTG9nKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuIik7CkBAIC0xNDA3LDYgKzE0NTUsMTMgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAorICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhr
aW5kKQorICAgICAgICAmJiBjYWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSA+IE9wdGlv
bnM6Om1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgYmVjYXVzZSBvZiB2YXJhcmdz
LlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAogICAgIHVuc2ln
bmVkIGlubGluaW5nQmFsYW5jZSA9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxp
bmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiAgICAgaWYgKHNwZWNpYWxpemF0aW9uS2lu
ZCA9PSBDb2RlRm9yQ29uc3RydWN0KQogICAgICAgICBpbmxpbmluZ0JhbGFuY2UgPSBzdGQ6Om1p
bihpbmxpbmluZ0JhbGFuY2UsIE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElu
bGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKSk7CkBAIC0xNDE3LDggKzE0NzIsNzQgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNpbXBsaWZp
Y2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGltZXMsIGJ1
dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUgd2UgZG9u
J3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4KICAgICBp
ZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtTdGF0dXMu
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAgICAgICAg
Y2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lh
bGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVz
WzBdLCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50LCBzcGVjaWFsaXphdGlvbktpbmQpOwor
CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldDsKKworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
dmFyYXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFyZ3VtZW50cyByaWdodCBub3cu
CisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgbWFuZGF0b3J5TWluaW11bTsgLy8gZXhjbHVkZXMgInRoaXMiCisgICAg
ICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBjYWxs
TGlua1N0YXR1c1swXS5mdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICBtYW5k
YXRvcnlNaW5pbXVtID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBpbmNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIHVu
c2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IG1heCgKKyAgICAgICAgICAgICAgICBjYWxsTGlua1N0
YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVt
ICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHNvcnQgb2YgcHJldGVuZCB0
aGF0IHRoaXMgKmlzKiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkLgor
ICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBtYXhOdW1Bcmd1bWVudHM7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJPZmZz
ZXRPckZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBtYXhO
dW1Bcmd1bWVudHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICBzdGFj
a0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVy
T2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKKyAgICAgICAg
ICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQgKyAxKTsKKyAg
ICAgICAgICAgIGRhdGEtPmNvdW50ID0gVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsg
SlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBkYXRhLT5vZmZzZXQgPSBhcmd1
bWVudHNPZmZzZXQ7CisgICAgICAgICAgICBkYXRhLT5saW1pdCA9IG1heE51bUFyZ3VtZW50czsK
KyAgICAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5pbXVtOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8o
ZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBJbiBERkcgSVIgYmVmb3JlIFNTQSwgd2UgY2Fubm90IGluc2VydCBjb250cm9sIGZsb3cg
YmV0d2VlbiBhZnRlciB0aGUKKyAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCB0aGUgbGFz
dCBTZXRBcmd1bWVudC4gVGhpcyBpc24ndCBhIHByb2JsZW0gb25jZSB3ZSBnZXQgdG8gREZHCisg
ICAgICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29u
cyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKKyAgICAgICAgICAgIC8vIGJlZm9yZSBT
U0EuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRW
YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKKyAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgZmFsc2Up
OworICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2Ug
dGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKKyAgICAgICAg
ICAgIC8vIG1hdHRlciB2ZXJ5IG11Y2gsIHNpbmNlIG91ciB1c2Ugb2YgYSBTZXRBcmd1bWVudCBh
bmQgRmx1c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCisgICAgICAgICAgICAvLyBtb3N0bHkg
anVzdCBhIGZvcm1hbGl0eS4KKyAgICAgICAgICAgIGNvdW50VmFyaWFibGUtPnByZWRpY3QoU3Bl
Y0ludDMyKTsKKyAgICAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9maXRhYmxlVG9V
bmJveCh0cnVlKTsKKyAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dy
YXBoKFNldEFyZ3VtZW50LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOworICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxv
Y2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQg
YXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsKKyAgICAgICAgICAgIGlmIChzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNhbGwp
CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0
KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IG1heE51bUFyZ3VtZW50czsgKythcmd1bWVu
dCkgeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudFN0YXJ0ICsgYXJndW1lbnQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsgLy8gV2UgY3VycmVudGx5IGhhdmUgbm93
aGVyZSB0byBwdXQgdGhlIHR5cGUgY2hlY2sgb24gdGhlIExvYWRWYXJhcmdzLiBMb2FkVmFyYXJn
cyBpcyBlZmZlY3RmdWwsIHNvIGFmdGVyIGl0IGZpbmlzaGVzLCB3ZSBjYW5ub3QgZXhpdC4KKyAg
ICAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQs
IE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgICAgICAK
ICAgICAgICAgYm9vbCByZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVDYWxsKAogICAgICAgICAgICAg
Y2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rl
ck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zm
c2V0LCBraW5kLCBDYWxsZXJEb2VzTm9ybWFsTGlua2luZywgcHJlZGljdGlvbiwKQEAgLTE0Mzcs
MTEgKzE1NTgsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAg
ICAgLy8gZG8gbW9yZSBkZXRhaWxlZCBwb2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7
IGFuZCBzZWNvbmQsIGl0IHJlZHVjZXMgY29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcu
IEFuZCBieSBwb2x5dmFyaWFudCBwcm9maWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxp
bmcgb2YgKnRoaXMqIGNhbGwuIE5vdGUgdGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhh
dCBhc3BlY3Qgb2YgdGhpcyBieSBkb2luZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5n
IHRoZSBwcm9maWxpbmcKLSAgICAvLyBhbHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhp
cywgYnV0IGl0IGNvdWxkIGJlIGludGVyZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5n
IGEKLSAgICAvLyBzZXBhcmF0ZSBub2RlIGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8v
IEZJWE1FOiBJbnRyb2R1Y2UgdGhlIG5vdGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9m
aWxpbmcgbm9kZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM2MDMzCi0gICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9u
czo6ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAg
aWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1v
cnBoaWNDYWxsSW5saW5pbmcoKQorICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJn
cyhraW5kKSkgewogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygi
QmFpbGluZyBpbmxpbmluZyAoaGFyZCkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNr
OiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKQEAgLTE0ODIsNiArMTYwMSw4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygi
U3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAog
ICAgIC8vIFRoaXMgbWFrZXMgbWUgd2lzaCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGlt
ZS4gV2UgbmVlZCB0byBwaWNrIGEgdmFyaWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3Jl
IHRoZSBjYWxsZWUgc28gdGhhdCBpdCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBi
bG9ja3Mgd2UncmUgYWJvdXQgdG8gY3JlYXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9p
bmcgYW4gaW1tZWRpYXRlLXNldCBoZXJlIGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3Jt
ZWQgYW55IHNpZGUgZWZmZWN0cwpAQCAtMzExMyw0MyArMzIzNCw3MCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpbnQgdGhpc1JlZyA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgYXJndW1lbnRz
ID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBmaXJz
dEZyZWVSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZSgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYXJndW1lbnRzLCBhcmd1bWVudHMgPT0gbV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOwotICAg
ICAgICAgICAgQVNTRVJUKCFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFi
bGUoKS0+c2xvd0FyZ3VtZW50cygpKTsKLQotICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Fy
Z3VtZW50c05vdENyZWF0ZWQpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGlu
bGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBMZXQncyBjb21wdXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGgg
dGhlIGxhc3QgdXNlZCByZWdpc3RlciwgYW5kCi0gICAgICAgICAgICAvLyB0aGVuIGFkanVzdCBm
b3IgdGhlIHRoaW5ncyB3ZSB3YW50IGluIHRoZSBjYWxsIGZyYW1lLgotICAgICAgICAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gZmlyc3RGcmVlUmVnICsgMTsKLSAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0IC09IGFyZ0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1bWVudHMu
Ci0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJT
aXplOyAvLyBXZSB3aWxsIHByZXRlbmQgdG8gaGF2ZSBhIGNhbGwgZnJhbWUgaGVhZGVyLgotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KLSAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKLSAgICAg
ICAgICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAotICAgICAgICAgICAgICAgIC1y
ZWdpc3Rlck9mZnNldCk7Ci0KLSAgICAgICAgICAgIGVuc3VyZUxvY2FscygKLSAgICAgICAgICAg
ICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CisgICAgICAgICAg
ICBpZiAoYXJndW1lbnRzID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT51bmNoZWNr
ZWRBcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpCisgICAgICAgICAgICAgICAgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkKKyAgICAgICAgICAgICAg
ICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGlubGluZUNhbGxGcmFtZSgpLT5r
aW5kKQorICAgICAgICAgICAgICAgICAgICAmJiAhZmlyc3RWYXJBcmdPZmZzZXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQpOworCisg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2FsbEZyYW1lKCkt
PmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
TGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LiBXZSBzdGFydCB3aXRoIHRoZSBsYXN0
IHVzZWQgcmVnaXN0ZXIsIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGFkanVzdCBm
b3IgdGhlIHRoaW5ncyB3ZSB3YW50IGluIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICAgICAgICAg
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOworICAgICAgICAgICAg
ICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBwYXNzaW5n
IHNvbWUgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyAvLyBXZSB3aWxsIHByZXRlbmQgdG8gaGF2ZSBh
IGNhbGwgZnJhbWUgaGVhZGVyLgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8v
IEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgorICAgICAgICAgICAgICAgICAgICByZWdpc3Rlck9m
ZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgLXJl
Z2lzdGVyT2Zmc2V0KTsKKworICAgICAgICAgICAgICAgICAgICBlbnN1cmVMb2NhbHMoCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSku
dG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYnl0
ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4gQnV0IHdlJ2xsIGRvIGl0
IGFuZCBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNv
ZGUgaGFkIGRvbmUgaXQuCisgICAgICAgICAgICAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSBy
ZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVh
bFJlZ2lzdGVyKHRoaXNSZWcpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKyth
cmd1bWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4
dFJlZ2lzdGVyKyspLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSwg
SW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGhh
bmRsZUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsIENhbGwsIENvZGVGb3JD
YWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCisgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEVtaXQgQ2FsbEZvcndhcmRWYXJhcmdz
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWVhbnMgd2UgY2Fubm90IGlubGluZSBm
b3J3YXJkZWQgdmFyYXJncyBjYWxscyBpbnNpZGUgYSB2YXJhcmdzCisgICAgICAgICAgICAgICAg
Ly8gY2FsbCBmcmFtZS4gV2Ugd2lsbCBwcm9iYWJseSBmaXggdGhhdCBvbmNlIHdlIGZpbmFsbHkg
Z2V0IHJpZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgb2JqZWN0IHNwZWNp
YWwtY2FzaW5nLgorICAgICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9jYWxsVmFyYXJnc0RhdGEuYWRkKCk7CisgICAgICAgICAgICAgICAgZGF0YS0+Zmlyc3RW
YXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICAgICAg
Q2FsbEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSksIE9wSW5mbyhnZXRQcmVkaWN0aW9uKCkp
LAorICAgICAgICAgICAgICAgICAgICBnZXQoY2FsbGVlKSwgZ2V0KHRoaXNSZWcpKTsKKyAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHNldChy
ZXN1bHRSZWcsIGNhbGwpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFy
YXJncyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBi
eXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8g
aXQgYW5kIG1ha2UgaXQKLSAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNvZGUgaGFk
IGRvbmUgaXQuCi0gICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQg
KyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJ
bW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
MTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKLSAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgICAgICAgICByZXN1bHQsIENhbGwsIENvZGVG
b3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCi0gICAgICAgICAgICAgICAg
Y2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgaGFuZGxlVmFy
YXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsVmFyYXJncywgQ29kZUZvckNhbGwpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAg
ICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0VmFyYXJn
cywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb25zdHJ1
Y3RfdmFyYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2pu
ZXFfcHRyOgogICAgICAgICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9yIG5vdy4gSXQg
bWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCiAgICAgICAgICAgICAv
LyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUgZ2VuZXJh
bCwgc2luY2UgaXQncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE4Miw2ICsxODIsOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlE
CiAgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CiAgICAgY2FzZSBvcF9jYWxsOgogICAg
IGNhc2Ugb3BfY29uc3RydWN0OgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOgogICAgIGNh
c2Ugb3BfY3JlYXRlX2FyZ3VtZW50czoKICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czoK
QEAgLTIyMywxNCArMjI1LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNv
ZGVJRAogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKICAgICB9CiAKLSAgICBj
YXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cygpICYmIHBjWzRdLnUub3BlcmFuZCA9PSBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCku
b2Zmc2V0KCkKLSAgICAgICAgICAgICYmICFwY1s2XS51Lm9wZXJhbmQpCi0gICAgICAgICAgICBy
ZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSB0aGlz
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3
NjI2Ci0gICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwotCiAgICAgY2FzZSBvcF9uZXdfcmVn
ZXhwOiAKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgogICAgIGNhc2Ug
b3BfbmV3X2Z1bmM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOCAr
ODYsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGZ1bmN0aW9uQ2FwYWJpbGl0CiAgICAgICAg
IHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2FuQ29tcGlsZUFuZElubGluZSwgY29tcHV0ZWRDYXBh
YmlsaXR5TGV2ZWwpOwogICAgIGlmIChtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQogICAg
ICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbkNvbXBpbGUsIGNvbXB1dGVkQ2FwYWJpbGl0
eUxldmVsKTsKLSAgICBpZiAoIW1pZ2h0Q29tcGlsZSAmJiBtaWdodElubGluZSkKLSAgICAgICAg
cmV0dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5JbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVs
KTsKICAgICBpZiAoIW1pZ2h0Q29tcGlsZSAmJiAhbWlnaHRJbmxpbmUpCiAgICAgICAgIHJldHVy
biBDYW5ub3RDb21waWxlOwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTc5
OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2NSw2ICszNjUsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgog
ICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgIGNh
c2UgVG9QcmltaXRpdmU6CiAgICAgY2FzZSBJbjoKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVu
Z3RoU2FmZToKQEAgLTQwMSw2ICs0MDQsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0
cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAg
ICAgICAgLy8gVGhpcyBhY3R1YWxseSB3cml0ZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFzIHdlbGwu
IEJ1dCB3aGVuIGl0IHJlYWRzIHRoZSBhcnJheSwgaXQgZG9lcworICAgICAgICAvLyBzbyBpbiBh
IHdheSB0aGF0IG1heSB0cmlnZ2VyIGdldHRlcnMgb3IgdmFyaW91cyB0cmFwcy4KKyAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKICAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSksIG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjkyLDcgKzI5Miw2IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogZW51bSBDYXBhYmlsaXR5TGV2ZWwgewogICAgIENhbm5vdENv
bXBpbGUsCi0gICAgQ2FuSW5saW5lLAogICAgIENhbkNvbXBpbGUsCiAgICAgQ2FuQ29tcGlsZUFu
ZElubGluZSwKICAgICBDYXBhYmlsaXR5TGV2ZWxOb3RTZXQKQEAgLTMxMiw3ICszMTEsNiBAQCBp
bmxpbmUgYm9vbCBjYW5Db21waWxlKENhcGFiaWxpdHlMZXZlbCBsCiBpbmxpbmUgYm9vbCBjYW5J
bmxpbmUoQ2FwYWJpbGl0eUxldmVsIGxldmVsKQogewogICAgIHN3aXRjaCAobGV2ZWwpIHsKLSAg
ICBjYXNlIENhbklubGluZToKICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CkBAIC0zMjUsMTQgKzMyMyw2IEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgbGVhc3RVcHBlckJvdW5kKEMKICAgICBzd2l0Y2ggKGEpIHsKICAgICBj
YXNlIENhbm5vdENvbXBpbGU6CiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwotICAgIGNh
c2UgQ2FuSW5saW5lOgotICAgICAgICBzd2l0Y2ggKGIpIHsKLSAgICAgICAgY2FzZSBDYW5Jbmxp
bmU6Ci0gICAgICAgIGNhc2UgQ2FuQ29tcGlsZUFuZElubGluZToKLSAgICAgICAgICAgIHJldHVy
biBDYW5JbmxpbmU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gQ2Fubm90
Q29tcGlsZTsKLSAgICAgICAgfQogICAgIGNhc2UgQ2FuQ29tcGlsZToKICAgICAgICAgc3dpdGNo
IChiKSB7CiAgICAgICAgIGNhc2UgQ2FuQ29tcGlsZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywx
MCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDb21w
YXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNh
c2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBOYXRpdmVD
YWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgQnJlYWtwb2ludDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3OTk1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
ODIyLDYgKzgyMiw3IEBAIHB1YmxpYzoKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1f
bXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211
bHRpUHV0QnlPZmZzZXREYXRhOwogICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhPiBt
X29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAgQmFyPENhbGxWYXJhcmdzRGF0YT4gbV9j
YWxsVmFyYXJnc0RhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxp
bmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8
RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hh
c0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICAgICAgICAgLy8gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywg
dGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIG1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAg
IG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAjaWYgQ1BVKFg4NikKICAgICAgICAgLy8gRklYTUU6
IHNob3VsZCB1c2UgdGhlIGNhbGwgYWJzdHJhY3Rpb24sIGJ1dCB0aGlzIGlzIGN1cnJlbnRseSBp
biB0aGUgU3BlY3VsYXRpdmVKSVQgbGF5ZXIhCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMjAgQEAgc3RydWN0IFN3aXRj
aERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IENhbGxWYXJh
cmdzRGF0YSB7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0OworfTsKKworc3RydWN0IExvYWRW
YXJhcmdzRGF0YSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0OyAvLyBMb2NhbCBmb3IgdGhl
IGZpcnN0IGVsZW1lbnQuCisgICAgVmlydHVhbFJlZ2lzdGVyIGNvdW50OyAvLyBMb2NhbCBmb3Ig
dGhlIGNvdW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lU3RhcnQ7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG1hY2hpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBvZmZzZXQ7IC8vIFdoaWNoIGFy
cmF5IGVsZW1lbnQgdG8gc3RhcnQgd2l0aC4gVXN1YWxseSB0aGlzIGlzIDAuCisgICAgdW5zaWdu
ZWQgbWFuZGF0b3J5TWluaW11bTsgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBvbiB0aGUgc3Rh
Y2sgdGhhdCBtdXN0IGJlIGluaXRpYWxpemVkOyBpZiB0aGUgYXJyYXkgaXMgdG9vIHNob3J0IHRo
ZW4gdGhlIG1pc3NpbmcgZWxlbWVudHMgbXVzdCBnZXQgdW5kZWZpbmVkLgorICAgIHVuc2lnbmVk
IGxpbWl0OyAvLyBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0byBsb2FkLgorfTsKKwogLy8g
VGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBj
b25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2Fs
bHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAogLy8gYSBjb25z
dGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAgLTg4
OCw2ICs5MDIsMzUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PFdyaXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9v
bCBoYXNDYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7Cisg
ICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdz
OgorICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIENhbGxWYXJhcmdzRGF0YSogY2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChoYXNDYWxsVmFyYXJnc0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8Q2FsbFZhcmFyZ3NEYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBi
b29sIGhhc0xvYWRWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBM
b2FkVmFyYXJnczsKKyAgICB9CisgICAgCisgICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJn
c0RhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0xvYWRWYXJhcmdzRGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxMb2FkVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7Cisg
ICAgfQorICAgIAogICAgIGJvb2wgaGFzUmVzdWx0KCkKICAgICB7CiAgICAgICAgIHJldHVybiAh
IXJlc3VsdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIC8qIHRoaXMgbXVzdCBiZSB0aGUgZGlyZWN0bHkgc3Vic2VxdWVu
dCBwcm9wZXJ0eSBwdXQuIE5vdGUgdGhhdCBQdXRCeVZhbCAqL1wKICAgICAvKiBvcGNvZGVzIHVz
ZSBWYXJBcmdzIGJlYXVzZSB0aGV5IG1heSBoYXZlIHVwIHRvIDQgY2hpbGRyZW4uICovXAogICAg
IG1hY3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZh
bERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8o
UHV0QnlWYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3Jv
KFB1dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApAQCAt
MjE3LDYgKzIxOCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBD
YWxscy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhDYWxsVmFy
YXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENhbGxG
b3J3YXJkVmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1h
Y3JvKENvbnN0cnVjdFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhOYXRpdmVDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhOYXRpdmVDb25zdHJ1Y3QsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBM
b2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChk
YXRhLT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVk
SW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBs
aW1pdDsgaS0tOykgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQorICAgICAgICAg
ICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdp
c3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMTgsNiArMTAx
OCwyNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoCiAgICAgc2V0
LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsICJFeGVjdXRlZCBOb3RpZnlXcml0ZSIpOwogfQogCitp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdP
ZmZzZXQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CisgICAgCisgICAgcmV0dXJuIHNpemVPZlZhcmFy
Z3MoZXhlYywgYXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCk7Cit9CisKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZmly
c3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBv
ZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pCit7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEFyZ3VtZW50cyk7CisgICAgCisgICAgbG9hZFZhcmFyZ3MoZXhlYywgVmlydHVhbFJlZ2lzdGVy
KGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAKKyAg
ICBmb3IgKGludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKKyAg
ICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworfQor
CiBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50
MzJfdCBiKQogewogICAgIHJldHVybiBmbW9kKGEsIGIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEyNSw2ICsxMjUsOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TWFrZVJvcGUzCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJn
ZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4
KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSos
IHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVuY29k
ZWRKU1ZhbHVlKTsKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdz
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFy
Z09mZnNldCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0
YXRlKiwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMs
IGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVt
KTsKIAogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRCb3hlZERvdWJsZVRv
SW50NTIoRW5jb2RlZEpTVmFsdWUpOwogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bnZlcnREb3VibGVUb0ludDUyKGRvdWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMTc5
OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMzLDI1IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKICAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAg
ICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
SlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1Zh
cmFyZ3MoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSkKKyAgICAgICAgICAgICAgICBtX3JlYWQoVmly
dHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1
bWVudENvdW50KSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCB3cml0ZVRvcCgp
CiAgICAgeworICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IExvYWRWYXJhcmdzKSB7CisgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugbm90ZSB0aGUgd3JpdGVzIHRvIHRoZSBsb2NhbHMgdGhh
dCB3aWxsIHN0b3JlIHRoZSBhcnJheSBlbGVtZW50cyBhbmQKKyAgICAgICAgICAgIC8vIGNvdW50
LgorICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJn
c0RhdGEoKTsKKyAgICAgICAgICAgIG1fd3JpdGUoZGF0YS0+Y291bnQpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAgICAgICAgICAgbV93
cml0ZShWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFu
eXRoaW5nIHNwZWNpYWwgZm9yIENhbGxGb3J3YXJkVmFyYXJncywgc2luY2UgaXQgcmVhZHMKKyAg
ICAgICAgLy8gb3VyIGFyZ3VtZW50cyB0aGUgc2FtZSB3YXkgdGhhdCBhbnkgZWZmZWN0ZnVsIHRo
aW5nIG1pZ2h0LgorICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGgubV9jb2RlQmxvY2stPnVz
ZXNBcmd1bWVudHMoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5t
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKICAgICAgICAgICAgICAgICBt
X3dyaXRlKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzk5NTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xODksNiArMTg5LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAg
ICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0
cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNh
c2UgTmV3QXJyYXlXaXRoU2l6ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjI0LDM3ICs2MjQsMTY3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNj
U3RyaWN0RXEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsK
LSAgICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlzQ2FsbCkK
LSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENv
bnN0cnVjdCk7Ci0gICAgCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1l
bnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0
LgotICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOworICAgIENhbGxM
aW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgYm9vbCBpc0NhbGw7CisgICAgYm9vbCBp
c1ZhcmFyZ3M7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDYWxsOgorICAg
ICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbDsKKyAgICAgICAgaXNDYWxsID0gdHJ1
ZTsKKyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q29uc3RydWN0OgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0Owor
ICAgICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZh
cmFyZ3M6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAg
ICAgICAgaXNDYWxsID0gdHJ1ZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENh
bGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7Cisg
ICAgICAgIGlzVmFyYXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2dyYXBoLmNo
aWxkKG5vZGUsIDApOwogICAgIAotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUg
PSBpc0NhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsK
KyAgICAvLyBHb3R0YSBsb2FkIHRoZSBhcmd1bWVudHMgc29tZWhvdy4gVmFyYXJncyBpcyB0cmlj
a2llci4KKyAgICBpZiAoaXNWYXJhcmdzKSB7CisgICAgICAgIC8vIDEpIGdldCB0aGUgYXJndW1l
bnRzCisgICAgICAgIC8vIDIpIGZsdXNoIHJlZ2lzdGVycworICAgICAgICAvLyAzKSBzZXQgdXAg
dGhlIGNhbGwgZnJhbWUKKyAgICAgICAgLy8gNCkgZ2V0IHRoZSBjYWxsZWUgYW5kICJ0aGlzIiBh
bmQgaGFuZGxlIHRoZW0KKyAgICAgICAgLy8gNSkgZmx1c2ggcmVnaXN0ZXJzIGFnYWluCisgICAg
ICAgIAorICAgICAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0Rh
dGEoKTsKKworICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIzOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndh
cmRWYXJhcmdzKSB7CisgICAgICAgICAgICAvLyBXZSBhdm9pZCBjYWxsaW5nIGZsdXNoUmVnaXN0
ZXJzKCkgaW5zaWRlIHRoZSBjb250cm9sIGZsb3cgb2YgQ2FsbEZvcndhcmRWYXJhcmdzLgorICAg
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
YXV0byBsb2FkQXJndW1lbnRzR1BSID0gWyZdIChHUFJSZWcgcmVzZXJ2ZWRHUFIpIHsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAg
ICAgICAgIGFyZ3VtZW50c0dQUiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKHJlc2Vy
dmVkR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQUik7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgICAgICAgICBsb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgICAg
ICBpZiAocmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAg
dW5sb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzY3JhdGNoR1BSMSA9IEpJ
VENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgcmVzZXJ2ZWRHUFIpOwor
ICAgICAgICAgICAgc2NyYXRjaEdQUjIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihh
cmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCByZXNlcnZlZEdQUik7CisgICAgICAgICAgICBzY3Jh
dGNoR1BSMyA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgc2Ny
YXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCByZXNlcnZlZEdQUik7CisgICAgICAgIH07CisgICAgICAg
IAorICAgICAgICBsb2FkQXJndW1lbnRzR1BSKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSB3aG9sZSByZWdpc3RlciBmaWxlIHRv
IG91cnNlbHZlcywgYW5kIGFyZ3VtZW50c0dQUiBoYXMgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50
cyByZWdpc3Rlci4gU2VsZWN0IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgICAgIAorICAg
ICAgICAvLyBXZSB3aWxsIHVzZSBzY3JhdGNoR1BSMiB0byBwb2ludCB0byBvdXIgc3RhY2sgZnJh
bWUuCisKKyAgICAgICAgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMgPSBtX2ppdC5ncmFwaCgp
Lm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGhhdmVBcmd1bWVudHM7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAg
ICAgICAgICAvLyBEbyB0aGUgaG9ycmlmaWMgZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0
aW1pemF0aW9uLgorICAgICAgICAgICAgLy8gRklYTUU6IGRvIHRoaXMgb3B0aW1pemF0aW9uIGF0
IHRoZSBJUiBsZXZlbCBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGJ5IHRlc3RpbmcgdGhlCisgICAg
ICAgICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFRoaXMgd2lsbCBoYXBwZW4gb25jZSB3ZSBn
ZXQgcmlkIG9mIHRoZSBhcmd1bWVudHMgbGF6eSBjcmVhdGlvbiBhbmQKKyAgICAgICAgICAgIC8v
IGxhenkgdGVhci1vZmYuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3RhY2tTbG90
cyksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RD
YXNlKG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNo
R1BSMywgbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RW
YXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiA9IHNjcmF0Y2hH
UFIyOworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzID0gbV9qaXQuanVt
cCgpOworICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgICAgICB9CisKKyAg
ICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBSaWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVudHNHUFIg
YW5kIHRoZSByZWdpc3RlciBmaWxlIGlzIGZsdXNoZWQuCisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFy
Z3VtZW50c0dQUiwgbnVtVXNlZFN0YWNrU2xvdHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICAg
ICAgCisgICAgICAgIC8vIE5vdyB3ZSBoYXZlIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0aGUgY2Fs
bGVlIGZyYW1lLCBidXQgd2UndmUgbG9zdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQuCisgICAgICAg
IC8vIFJlY29uc3RydWN0IHRoZSBhcmd1bWVudHMgb3BlcmFuZCB3aGlsZSBwcmVzZXJ2aW5nIHRo
ZSBjYWxsZWUgZnJhbWUuCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3RhY2tT
bG90cyksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShtX2ppdCwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGZhbHNlLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjEp
OworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
NSAqIHNpemVvZih2b2lkKikpKSksIHNjcmF0Y2hHUFIxLCBHUFJJbmZvOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldHVw
VmFyYXJnc0ZyYW1lLCBzY3JhdGNoR1BSMSwgYXJndW1lbnRzR1BSLCBmaXJzdFZhckFyZ09mZnNl
dCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgaGF2ZUFyZ3VtZW50cy5s
aW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMy
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlc3VsdEdQUiwgR1BSSW5mbzo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgp
LCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IHRoZSBhcmd1bWVudHMgYXJyYXkgYW55bW9yZS4KKyAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0NhbGwpIHsKKyAgICAgICAgICAgIC8vIE5vdyBz
ZXQgdXAgdGhlICJ0aGlzIiBhcmd1bWVudC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRo
aXNBcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBHUFJSZWcgdGhp
c0FyZ3VtZW50R1BSID0gdGhpc0FyZ3VtZW50LmdwcigpOworICAgICAgICAgICAgdGhpc0FyZ3Vt
ZW50LnVzZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHRoaXNB
cmd1bWVudHNHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVu
dCBpcyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKKyAgICAgICAgLy8gZm9y
IGl0LgorICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBpc0NhbGwgPyAwIDogMTsKICAg
ICAKLSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5b
bm9kZS0+Zmlyc3RDaGlsZCgpXTsKLSAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0
IGNoaWxkIGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQot
ICAgIC8vIGFyZ3VtZW50cy4KLSAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxk
cmVuKCkgLSAxOworICAgICAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxk
IGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQorICAgICAg
ICAvLyBhcmd1bWVudHMuCisgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hp
bGRyZW4oKSAtIDE7CiAgICAgCi0gICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVt
bXlUaGlzQXJndW1lbnQ7CisgICAgICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1
bW15VGhpc0FyZ3VtZW50OwogICAgIAotICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihudW1BcmdzKSwgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpB
cmd1bWVudENvdW50KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihudW1BcmdzKSwgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1
bWVudENvdW50KSk7CiAgICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdz
OyBpKyspIHsKLSAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0No
aWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwotICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigp
OwotICAgICAgICB1c2UoYXJnRWRnZSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
UGFzc2VkQXJnczsgaSsrKSB7CisgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFw
aCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOworICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOworICAgICAgICAgICAgR1BS
UmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKICAgICAg
ICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BSLCBjYWxsZWVBcmd1bWVudFNsb3QoaSAr
IGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwg
Y2FsbGVlQXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwogICAg
IEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0gICAgdXNlKGNhbGxlZUVkZ2UpOwor
ICAgIGNhbGxlZS51c2UoKTsKICAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgY2FsbGVlRnJh
bWVTbG90KEpTU3RhY2s6OkNhbGxlZSkpOwogICAgIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBA
IC02OTIsNiArODIyLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKICAgICBjYWxsTGlua0luZm8tPmNhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICAKICAgICBt
X2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBjYWxsTGlu
a0luZm8pOworICAgIAorICAgIC8vIElmIHdlIHdlcmUgdmFyYXJncywgdGhlbiBhZnRlciB0aGUg
Y2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3VyIHN0YWNrIHBvaW50ZXIu
CisgICAgaWYgKGlzVmFyYXJncykKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMiht
X2dyYXBoLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAK
IC8vIENsYW5nIHNob3VsZCBhbGxvdyB1bnJlYWNoYWJsZSBbW2NsYW5nOjpmYWxsdGhyb3VnaF1d
IGluIHRlbXBsYXRlIGZ1bmN0aW9ucyBpZiBhbnkgdGVtcGxhdGUgZXhwYW5zaW9uIHVzZXMgaXQK
QEAgLTQyMzEsOSArNDM2NSw1MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBD
YWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0
cnVjdFZhcmFyZ3M6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJl
ZyBhcmd1bWVudHNHUFI7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFy
Z3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNHUFIg
PSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFy
Z3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIGRhdGEtPmZpcnN0VmFy
QXJnT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRz
LmdwcigpOworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAg
ICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBs
ZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAvLyBmcm9tIHRoZSBz
dGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZy
b20gYSBzcGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29s
dXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92
YXJhcmdzIHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAgICAgICAKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgSlNW
YWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkp
OworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgCisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZz
ZXQoKSwgYXJndW1lbnRzR1BSLCBkYXRhLT5vZmZzZXQsIGRhdGEtPmxlbmd0aCwgZGF0YS0+bWFu
ZGF0b3J5TWluaW11bSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246IHsK
ICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIApAQCAtNDMzOCw5ICs0NTE1LDIwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIERGR19B
U1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
SlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LnN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFJbmxpbmVDYWxsRnJhbWU6
OmlzVmFyYXJncyhub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5raW5kKSkg
eworICAgICAgICAgICAgbV9qaXQubW92ZSgKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIo
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IDEpLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAg
ICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpB
cmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
fQogICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC00MzU0LDIwICs0NTQyLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAg
ICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhSW5saW5lQ2FsbEZyYW1l
Ojppc1ZhcmFyZ3Mobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+a2luZCkp
IHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCiAgICAgICAgICAgICAgICAgSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkgLSAxKSkpLAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYg
KCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVu
dENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50
UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIG1f
aml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogdGhlIHNsb3cgcGF0aCBnZW5lcmF0
b3Igc2hvdWxkIHBlcmZvcm0gYSBmb3J3YXJkIHNwZWN1bGF0aW9uIHRoYXQgdGhlCi0gICAgICAg
IC8vIHJlc3VsdCBpcyBhbiBpbnRlZ2VyLiBGb3Igbm93IHdlIHBvc3Rwb25lIHRoZSBzcGVjdWxh
dGlvbiBieSBoYXZpbmcgdGhpcyByZXR1cm4KLSAgICAgICAgLy8gYSBKU1ZhbHVlLgotICAgICAg
ICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCiAgICAgICAgICAgICAgICAgY3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uR2V0QXJndW1lbnRz
TGVuZ3RoLCByZXN1bHRHUFIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTU3OCw3ICs1
NzgsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAg
Ly8gVXNlZCB0byBBU1NFUlQgZmx1c2hSZWdpc3RlcnMoKSBoYXMgYmVlbiBjYWxsZWQgcHJpb3Ig
dG8KICAgICAvLyBjYWxsaW5nIG91dCBmcm9tIEpJVCBjb2RlIHRvIGEgQyBoZWxwZXIgZnVuY3Rp
b24uCiAgICAgYm9vbCBpc0ZsdXNoZWQoKQpAQCAtNTkzLDcgKzU5Miw2IEBAIHB1YmxpYzoKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKIAogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25z
dGFudEFzSW1tNjQoTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkocmV2aXNpb24gMTc5OTU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxz
OwogICAgICAgICAKICAgICAgICAgLy8gQ29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhhdCBhcmUg
dXNlZCBmcm9tIElSLgotICAgICAgICBib29sIGhhc0dldExvY2FsVW5saW5rZWQgPSBmYWxzZTsK
KyAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSBmYWxzZTsKICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQpAQCAtODEsNyArODEsMjIgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fs
cy5zZXQob3BlcmFuZC50b0xvY2FsKCkpOwotICAgICAgICAgICAgICAgICAgICBoYXNHZXRMb2Nh
bFVubGlua2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZp
eHVwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdz
OiB7CisgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNM
b2NhbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291
bnQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0LmlzTG9j
YWwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxseSByZWxp
ZXMgb24gdGhlIGNvbnRpZ3VpdHkgb2Ygc3RhY2sgbGF5b3V0CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhc3NpZ25tZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChWaXJ0
dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlzTG9j
YWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5s
aW1pdDsgaS0tOykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQo
VmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSAvLyB0aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCisg
ICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCkBAIC0xMTMsNiArMTI4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHVzZWRMb2NhbHMu
c2V0KGFyZ3VtZW50c1JlZ2lzdGVyLnRvTG9jYWwoKSk7CiAgICAgICAgICAgICB1c2VkTG9jYWxz
LnNldCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpLnRvTG9j
YWwoKSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6Omlz
VmFyYXJncyhpbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7CisgICAgICAgICAgICAgICAgdXNlZExv
Y2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgICAgICBKU1N0YWNrOjpB
cmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgYXJndW1lbnQtLSA+
IDE7KSB7CiAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAog
ICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCku
b2Zmc2V0KCkgKwpAQCAtMTQ4LDI0ICsxNjgsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgaWYg
KGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW3Zhcmlh
YmxlLT5sb2NhbCgpLnRvTG9jYWwoKV0pOworICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpID0gYXNzaWduKGFsbG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpIHsK
LSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlciA9IHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bY29kZUJsb2NrKCkt
PmFyZ3VtZW50c1JlZ2lzdGVyKCkudG9Mb2NhbCgpXSk7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPQorICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0
aW9uLCBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCgKLSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxv
Y2F0aW9uWwotICAgICAgICAgICAgICAgICAgICB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIo
KSkudG9Mb2NhbCgpXSkKKyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKSkK
ICAgICAgICAgICAgICAgICA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRz
UmVnaXN0ZXIpKTsKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRBcmd1bWVudHNSZWdpc3Rl
cihhcmd1bWVudHNSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChj
b2RlQmxvY2soKS0+dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7CiAg
ICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0QWN0aXZhdGlvblJlZ2lzdGVyKAotICAgICAgICAg
ICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bY29kZUJsb2NrKCktPmFj
dGl2YXRpb25SZWdpc3RlcigpLnRvTG9jYWwoKV0pKTsKKyAgICAgICAgICAgICAgICBhc3NpZ24o
YWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgcmVnaXN0ZXIgaXMgbmV2ZXIgdmFsaWQgZm9y
IERGRyBjb2RlIGJsb2Nrcy4KQEAgLTE3NiwxNSArMTkzLDE5IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJh
bWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1
dGFibGUtPnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAg
ICAgICAgICAgICAgYWxsb2NhdGlvblttX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGlu
ZUNhbGxGcmFtZSkudG9Mb2NhbCgpXSk7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHNSZWdpc3RlciA9IGFzc2lnbigKKyAgICAgICAgICAgICAgICAgICAgYWxsb2Nh
dGlvbiwgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIAog
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW3VubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rl
cigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Io
aW5saW5lQ2FsbEZyYW1lKSkudG9Mb2NhbCgpXSkKKyAgICAgICAgICAgICAgICAgICAgYXNzaWdu
KGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dyYXBoLmFyZ3VtZW50
c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpKQogICAgICAgICAgICAgICAgICAgICA9PSB1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdp
c3RlcikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoSW5s
aW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3MoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSkgeworICAgICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzQ291bnRSZWdpc3RlciA9IGFzc2ln
bigKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykg
ewogICAgICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFwaC5t
X2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50UG9z
aXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAgLTIyNyw5ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKTsKICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCk7IGkt
LTspIHsKICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXSA9IHNsb3dBcmd1
bWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0
dWFsUmVnaXN0ZXIoc2xvd0FyZ3VtZW50c1tpXS5pbmRleCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChyZWcuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3Vt
ZW50c1tpXS5pbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bcmVnLnRv
TG9jYWwoKV0pLm9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRz
W2ldLmluZGV4ID0gYXNzaWduKGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1l
dHNbaV0uaW5kZXgpKS5vZmZzZXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd0FyZ3VtZW50cyA9IFdURjo6bW92ZShuZXdT
bG93QXJndW1lbnRzKTsKQEAgLTIzNyw3ICsyNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIC8vIEZpeCBHZXRMb2NhbFVubGlua2VkJ3MgdmFyaWFibGUgcmVmZXJl
bmNlcy4KLSAgICAgICAgaWYgKGhhc0dldExvY2FsVW5saW5rZWQpIHsKKyAgICAgICAgaWYgKGhh
c05vZGVzVGhhdE5lZWRGaXh1cCkgewogICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAg
ICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC0yNDYsMTAgKzI2NSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogewotICAgICAgICAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bb3Bl
cmFuZC50b0xvY2FsKCldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFVubGlu
a2VkTWFjaGluZUxvY2FsKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwoYXNzaWduKGFsbG9jYXRpb24sIG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5jb3VudCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24oYWxs
b2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjYyLDYg
KzI4NSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CisKK3ByaXZhdGU6CisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0b3I8dW5z
aWduZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IHNyYzsKKyAgICAgICAgaWYgKHJlc3VsdC5pc0xvY2Fs
KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bcmVz
dWx0LnRvTG9jYWwoKV07CisgICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFY
KQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KG15QWxsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CiB9OwogCiBib29sIHBlcmZvcm1TdGFja0xheW91dChHcmFwaCYgZ3JhcGgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAx
Nzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTIwLDYgKzEyMCw5IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6
CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFy
Z3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAg
ICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2Ug
VmFsdWVUb0ludDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDIwIEBAIHN0YXRpYyB2b2lk
IGR1bXBEYXRhU2VjdGlvbihEYXRhU2VjdGlvbioKICAgICB9CiB9CiAKK3N0YXRpYyBpbnQgb2Zm
c2V0T2ZTdGFja1JlZ2lvbihTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwLCB1aW50MzJf
dCBzdGFja21hcElEKQoreworICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVy
ID0gcmVjb3JkTWFwLmZpbmQoc3RhY2ttYXBJRCk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAh
PSBpdGVyLmVuZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0g
MSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9
PSAxKTsKKyAgICBMb2NhdGlvbiBjYXB0dXJlZExvY2F0aW9uID0KKyAgICAgICAgTG9jYXRpb246
OmZvclN0YWNrbWFwcyhudWxscHRyLCBpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnNbMF0pOworICAg
IFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24ua2luZCgpID09IExvY2F0aW9uOjpSZWdp
c3Rlcik7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExv
Y2F0aW9uLmFkZGVuZCgpICUgc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIHJldHVybiBjYXB0dXJl
ZExvY2F0aW9uLmFkZGVuZCgpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgRGVzY3JpcHRvclR5cGU+CiB2b2lkIGdlbmVyYXRlSUNGYXN0UGF0aCgKICAgICBTdGF0
ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0
ZWRGdW5jdGlvbiwKQEAgLTI0Myw2ICsyNTcsMzIgQEAgc3RhdGljIFJlZ2lzdGVyU2V0IHVzZWRS
ZWdpc3RlcnNGb3IoY29ucwogICAgIHJldHVybiBSZWdpc3RlclNldChyZWNvcmQudXNlZFJlZ2lz
dGVyU2V0KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDYWxsVHlwZT4KK3ZvaWQgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhW
ZWN0b3I8Q2FsbFR5cGU+JiBjYWxscywgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCkK
K3sKKyAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUg
dGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KKyAgICAvLyBnZW5lcmF0ZWQgY29k
ZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBn
ZW5lcmF0ZS4KKworICAgIFZlY3RvcjxDYWxsVHlwZT4gb2xkQ2FsbHM7CisgICAgb2xkQ2FsbHMu
c3dhcChjYWxscyk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhbGxz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIENhbGxUeXBlJiBjYWxsID0gb2xkQ2FsbHNbaV07Cisg
ICAgICAgIAorICAgICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJl
Y29yZE1hcC5maW5kKGNhbGwuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVj
b3JkTWFwLmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2opIHsKKyAgICAg
ICAgICAgIENhbGxUeXBlIGNvcHkgPSBjYWxsOworICAgICAgICAgICAgY29weS5tX2luc3RydWN0
aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWVbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAg
ICBjYWxscy5hcHBlbmQoY29weSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnNvcnQo
c3RhdGUuanNDYWxscy5iZWdpbigpLCBzdGF0ZS5qc0NhbGxzLmVuZCgpKTsKK30KKwogc3RhdGlj
IHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFN0YXRlJiBzdGF0ZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUqIGppdENvZGUsIEdlbmVyYXRlZEZ1bmN0aW9uIGdl
bmVyYXRlZEZ1bmN0aW9uLAogICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXAsIGJv
b2wgZGlkU2VlVW53aW5kSW5mbykKQEAgLTI1MSwxNiArMjkxLDE0IEBAIHN0YXRpYyB2b2lkIGZp
eEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICBWTSYgdm0gPSBncmFwaC5tX3ZtOwogICAg
IFN0YWNrTWFwcyBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CiAgICAgCi0gICAgU3Rh
Y2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5j
YXB0dXJlZFN0YWNrbWFwSUQpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gcmVjb3JkTWFw
LmVuZCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsK
LSAgICBMb2NhdGlvbiBjYXB0dXJlZExvY2F0aW9uID0KLSAgICAgICAgTG9jYXRpb246OmZvclN0
YWNrbWFwcygmaml0Q29kZS0+c3RhY2ttYXBzLCBpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnNbMF0p
OwotICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24ua2luZCgpID09IExvY2F0aW9u
OjpSZWdpc3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9
PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0
dXJlZExvY2F0aW9uLmFkZGVuZCgpICUgc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgIGludDMyX3Qg
bG9jYWxzT2Zmc2V0ID0gY2FwdHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAvIHNpemVvZihSZWdpc3Rl
cikgKyBncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgaW50IGxvY2Fsc09mZnNldCA9Cisg
ICAgICAgIG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNr
bWFwSUQpICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOworICAgIAorICAgIGludCB2YXJhcmdz
U3BpbGxTbG90c09mZnNldDsKKyAgICBpZiAoc3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21h
cElEICE9IFVJTlRfTUFYKQorICAgICAgICB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNl
dE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFw
SUQpOworICAgIGVsc2UKKyAgICAgICAgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQgPSAwOwogICAg
IAogICAgIGZvciAodW5zaWduZWQgaSA9IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNpemUo
KTsgaS0tOykgewogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGdy
YXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldLmlubGluZUNhbGxGcmFtZTsKQEAgLTQ0NCw3ICs0
ODIsNiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmNo
ZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgQ2hlY2tJbkRlc2NyaXB0b3ImIGNo
ZWNrSW4gPSBzdGF0ZS5jaGVja0luc1tpXTsKICAgICAgICAgICAgIApAQCAtNDgwLDcgKzUxNyw2
IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAg
ICAgICBjaGVja0luLm1fZ2VuZXJhdG9ycy5hcHBlbmQoQ2hlY2tJbkdlbmVyYXRvcihzdHViSW5m
bywgc2xvd0NhbGwsIGJlZ2luKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAg
ICAKICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LmxpbmsoJnNsb3dQYXRoSklUKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uSnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsK
QEAgLTUwNywyNSArNTQzLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tN
YXBzKAogICAgICAgICB9IAogICAgIH0KICAgICAKLSAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBp
cyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGlu
IExMVk0KLSAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcg
dGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KLSAgICBWZWN0b3I8SlNDYWxsPiBv
bGRDYWxscyA9IHN0YXRlLmpzQ2FsbHM7Ci0gICAgc3RhdGUuanNDYWxscy5yZXNpemUoMCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIEpTQ2FsbCYgY2FsbCA9IG9sZENhbGxzW2ldOwotICAgICAgICAKLSAgICAgICAgU3RhY2tN
YXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNr
bWFwSUQoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52
YWx1ZS5zaXplKCk7ICsraikgewotICAgICAgICAgICAgSlNDYWxsIGNvcHkgPSBjYWxsOwotICAg
ICAgICAgICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWVbal0uaW5zdHJ1
Y3Rpb25PZmZzZXQ7Ci0gICAgICAgICAgICBzdGF0ZS5qc0NhbGxzLmFwcGVuZChjb3B5KTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGQ6OnNvcnQoc3RhdGUuanNDYWxscy5iZWdpbigp
LCBzdGF0ZS5qc0NhbGxzLmVuZCgpKTsKKyAgICBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0
YXRlLmpzQ2FsbHMsIHJlY29yZE1hcCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3Rh
dGUuanNDYWxscy5zaXplKCk7IGktLTspIHsKICAgICAgICAgSlNDYWxsJiBjYWxsID0gc3RhdGUu
anNDYWxsc1tpXTsKQEAgLTU0Nyw2ICs1NjUsMjggQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIpOwogICAg
IH0KICAgICAKKyAgICBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzQ2FsbHNWYXJh
cmdzZXMsIHJlY29yZE1hcCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuanND
YWxsVmFyYXJnc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICBKU0NhbGxWYXJhcmdzJiBjYWxs
ID0gc3RhdGUuanNDYWxsVmFyYXJnc2VzW2ldOworICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0KGZhc3RQ
YXRoSklULCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCk7CisgICAgICAgIAorICAgICAgICBjaGFy
KiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNh
bGwubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcih2bSwgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mQ2FsbFZhcmFyZ3MoKSk7
CisgICAgICAgIGlmICghbGlua0J1ZmZlci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGRhdGFM
b2coIkZhaWxlZCB0byBpbnNlcnQgaW5saW5lIGNhY2hlIGZvciB2YXJhcmdzIGNhbGwgYmVjYXVz
ZSB3ZSB0aG91Z2h0IHRoZSBzaXplIHdvdWxkIGJlICIsIHNpemVPZkNhbGxWYXJhcmdzKCksICIg
YnV0IGl0IGVuZGVkIHVwIGJlaW5nICIsIGZhc3RQYXRoSklULm1fYXNzZW1ibGVyLmNvZGVTaXpl
KCksICIgcHJpb3IgdG8gY29tcGFjdGlvbi5cbiIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMoCisgICAgICAgICAgICBzdGFydE9mSUMg
KyBsaW5rQnVmZmVyLnNpemUoKSwgc2l6ZU9mQ2FsbFZhcmFyZ3MoKSAtIGxpbmtCdWZmZXIuc2l6
ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgc3RhdGUu
ZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpKTsKKyAg
ICB9CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAK
ICAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2Vw
dGlvblN0YWNrbWFwSUQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
LmNwcAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIEpTQ2FsbDo6SlNDYWxs
KHVuc2lnbmVkIHN0YWNrbWFwSUQsIE5vZGUKICAgICAsIG1fc3RhY2ttYXBJRChzdGFja21hcElE
KQogICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldCgwKQogeworICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
QmFzZS5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCit1c2luZyBuYW1lc3BhY2UgREZHOworCiBK
U0NhbGxCYXNlOjpKU0NhbGxCYXNlKCkKICAgICA6IG1fdHlwZShDYWxsTGlua0luZm86Ok5vbmUp
CiAgICAgLCBtX2NhbGxMaW5rSW5mbyhudWxscHRyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICsz
NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTGlua0J1ZmZlcjsKIAorbmFtZXNwYWNl
IERGRyB7CitzdHJ1Y3QgTm9kZTsKK30KKwogbmFtZXNwYWNlIEZUTCB7CiAKIGNsYXNzIEpTQ2Fs
bEJhc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZh
cmFyZ3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGxWYXJhcmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRlRMSlNDYWxsVmFyYXJncy5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERG
RzsKKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncygpCisgICAgOiBtX3N0YWNrbWFwSUQo
VUlOVF9NQVgpCisgICAgLCBtX25vZGUobnVsbHB0cikKKyAgICAsIG1faW5zdHJ1Y3Rpb25PZmZz
ZXQoVUlOVF9NQVgpCit7Cit9CisKK0pTQ2FsbFZhcmFyZ3M6OkpTQ2FsbFZhcmFyZ3ModW5zaWdu
ZWQgc3RhY2ttYXBJRCwgTm9kZSogbm9kZSkKKyAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElE
KQorICAgICwgbV9ub2RlKG5vZGUpCisgICAgLCBtX2NhbGxCYXNlKAorICAgICAgICBub2RlLT5v
cCgpID09IENvbnN0cnVjdFZhcmFyZ3MgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3Mg
OiBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzLAorICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50
aWMpCisgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCit7CisgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MgfHwg
bm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzKTsKK30KKwordW5zaWduZWQgSlNDYWxsVmFy
YXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpCit7CisgICAgcmV0dXJuIDQ7Cit9CisKK3ZvaWQg
SlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbGVwcnMmIGppdCwgaW50MzJfdCBzcGlsbFNsb3Rz
T2Zmc2V0KQoreworICAgIC8vIFdlIGFyZSBwYXNzZWQgdGhyZWUgcGllY2VzIG9mIGluZm9ybWF0
aW9uOgorICAgIC8vIC0gVGhlIGNhbGxlZS4KKyAgICAvLyAtIFRoZSBhcmd1bWVudHMgb2JqZWN0
LgorICAgIC8vIC0gVGhlICJ0aGlzIiB2YWx1ZSwgaWYgaXQncyBhIGNvbnN0cnVjdG9yIGNhbGwu
CisgICAgCisgICAgYm9vbCBpc0NhbGwgPSBtX25vZGUtPm9wKCkgIT0gQ29uc3RydWN0VmFyYXJn
czsKKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmNhbGxWYXJhcmdz
RGF0YSgpOworICAgIAorICAgIEdQUkluZm8gY2FsbGVlR1BSID0gR1BSSW5mbzo6YXJndW1lbnRH
UFIwOworICAgIEdQUkluZm8gYXJndW1lbnRzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwor
ICAgIEdQUkluZm8gdGhpc0dQUjsKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICB0aGlzR1BSID0g
R1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgIGVsc2UKKyAgICAgICAgdGhpc0dQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgCisgICAgY29uc3QgdW5zaWduZWQgY2FsbGVlU3BpbGxTbG90ID0gMDsK
KyAgICBjb25zdCB1bnNpZ25lZCBhcmd1bWVudHNTcGlsbFNsb3QgPSAxOworICAgIGNvbnN0IHVu
c2lnbmVkIHRoaXNTcGlsbFNsb3QgPSAyOworICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrUG9pbnRl
clNwaWxsU2xvdCA9IDM7CisgICAgCisgICAgLy8gR2V0IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMu
CisgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB1c2VkUmVnaXN0ZXJzLm1lcmdl
KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLm1lcmdl
KFJlZ2lzdGVyU2V0OjpoYXJkd2FyZVJlc2VydmVkUmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdp
c3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgdXNl
ZFJlZ2lzdGVycy5zZXQoY2FsbGVlR1BSKTsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChhcmd1bWVu
dHNHUFIpOworICAgIGlmIChpc0NhbGwpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNH
UFIpOworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNlZFJlZ2lzdGVy
cyk7CisgICAgR1BSSW5mbyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICBHUFJJbmZvIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOworICAgIEdQUkluZm8gc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJldXNlZFJl
Z2lzdGVycygpKTsKKyAgICAKKyAgICBhdXRvIGNvbXB1dGVVc2VkU3RhY2sgPSBbJl0gKEdQUklu
Zm8gdGFyZ2V0R1BSLCB1bnNpZ25lZCBleHRyYSkgeworICAgICAgICBqaXQubW92ZShHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaml0LnN1YlB0cihDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0YXJnZXRHUFIpOworICAgICAgICBpZiAo
ZXh0cmEpCisgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGV4dHJhKSwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaml0LnVyc2hpZnRQdHIoSW1tMzIoMyksIHRh
cmdldEdQUik7CisgICAgfTsKKyAgICAKKyAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sg
PSBbJl0gKHZvaWQqIGNhbGxlZSkgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIp
OworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7
CisgICAgICAgIG1fZXhjZXB0aW9ucy5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3Nl
bWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbGVwcnM6OkZhckp1
bXBXaWR0aCkpOworICAgIH07CisgICAgCisgICAgLy8gQXR0ZW1wdCB0aGUgZm9yd2FyZGluZyBm
YXN0IHBhdGgsIGlmIGl0J3MgYmVlbiByZXF1ZXN0ZWQuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGhhdmVBcmd1bWVudHM7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIGlmIChtX25vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgIC8v
IERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRpb24u
CisgICAgICAgIC8vIEZJWE1FOiBkbyB0aGlzIG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwu
CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOworICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblpl
cm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAKKyAgICAgICAgY29tcHV0ZVVzZWRTdGFjayhz
Y3JhdGNoR1BSMiwgMCk7CisgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGpp
dCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgcmVzdWx0R1BSID0gc2NyYXRjaEdQUjI7CisgICAg
ICAgIAorICAgICAgICBoYXZlQXJndW1lbnRzID0gaml0Lmp1bXAoKTsKKyAgICAgICAgc2xvd0Nh
c2UubGluaygmaml0KTsKKyAgICB9CisgICAgCisgICAgLy8gR290dGEgc3BpbGwgdGhlIGNhbGxl
ZSwgYXJndW1lbnRzLCBhbmQgdGhpcyBiZWNhdXNlIHdlIHdpbGwgbmVlZCB0aGVtIGxhdGVyIGFu
ZCB3ZSB3aWxsIGhhdmUgc29tZQorICAgIC8vIGNhbGxzIHRoYXQgY2xvYmJlciB0aGVtLgorICAg
IGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgaml0LmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCAr
IGNhbGxlZVNwaWxsU2xvdCkpOworICAgIGppdC5zdG9yZTY0KGFyZ3VtZW50c0dQUiwgaml0LmFk
ZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50c1NwaWxsU2xvdCkpOworICAgIGlm
IChpc0NhbGwpCisgICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIsIGppdC5hZGRyZXNzRm9yKHNw
aWxsU2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSk7CisgICAgaml0LnN0b3JlUHRyKEdQUklu
Zm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBqaXQuYWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0
ICsgc3RhY2tQb2ludGVyU3BpbGxTbG90KSk7CisgICAgCisgICAgdW5zaWduZWQgZXh0cmFTdGFj
ayA9IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArCisgICAgICAgIFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKTsKKyAgICBj
b21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hHUFIxLCAwKTsKKyAgICBtX2ppdC5zdWJQdHIoVHJ1c3Rl
ZEltbTMyKGV4dHJhU3RhY2spLCBHUFJJbmZvOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIx
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCkpOwor
ICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncyk7
CisgICAgCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIx
KTsKKyAgICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hHUFIyLCBleHRyYVN0YWNrKTsKKyAgICBq
aXQubG9hZDY0KGppdC5hZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBhcmd1bWVudHNTcGls
bFNsb3QpLCBhcmd1bWVudHNHUFIpOworICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoaml0LCBzY3Jh
dGNoR1BSMSwgZmFsc2UsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMik7CisgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMigtZXh0cmFTdGFjayksIHNjcmF0Y2hHUFIyLCBHUFJJbmZvOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShz
Y3JhdGNoR1BSMiwgYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRh
LT5maXJzdFZhckFyZ09mZnNldCksIEdQUkluZm86OnNjcmF0Y2hHUFIxKTsKKyAgICBjYWxsV2l0
aEV4Y3BldGlvbkNoZWNrKG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lKTsKKyAgICAKKyAgICBq
aXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBp
ZiAobV9ub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgaGF2ZUFyZ3Vt
ZW50cy5saW5rKCZqaXQpOworICAgIAorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVzdWx0R1BSLCBHUFJJbmZvOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAgaWYgKGlzQ2FsbCkgeworICAgICAgICBq
aXQubG9hZDY0KGppdC5hZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90
KSwgdGhpc0dQUik7CisgICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIsIGppdC5jYWxsZWVBcmd1
bWVudFNsb3QoMCkpOworICAgIH0KKyAgICAKKyAgICAvLyBIZW5jZWZvcnRoIHdlIG1ha2UgdGhl
IGNhbGwuIFRoZSBiYXNlIEZUTCBjYWxsIG1hY2hpbmVyeSBleHBlY3RzIHRoZSBjYWxsZWUgaW4g
cmVnVDAgYW5kIGZvciB0aGUKKyAgICAvLyBzdGFjayBmcmFtZSB0byBhbHJlYWR5IGJlIHNldCB1
cCwgd2hpY2ggaXQgaXMuCisgICAgaml0LmxvYWQ2NChqaXQuYWRkcmVzc0ZvcihzcGlsbFNsb3Rz
T2Zmc2V0ICsgY2FsbGVlU3BpbGxTbG90KSwgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIG1f
Y2FsbEJhc2UuZW1pdChqaXQpOworICAgIAorICAgIC8vIFVuZG8gdGhlIGRhbWFnZSB3ZSd2ZSBk
b25lLgorICAgIGppdC5sb2FkUHRyKGppdC5hZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBz
dGFja1BvaW50ZXJTcGlsbFNsb3QpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworfQorCit2b2lkIEpTQ2FsbFZhcmFyZ3M6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyLCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyKQoreworICAgIG1f
Y2FsbEJhc2UubGluayh2bSwgbGlua0J1ZmZlcik7CisgICAgbGlua0J1ZmZlci5saW5rKG1fZXhj
ZXB0aW9ucywgZXhjZXB0aW9uSGFuZGxlcik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBGVExKU0NhbGxWYXJhcmdzX2gKKyNkZWZpbmUgRlRMSlNDYWxsVmFyYXJnc19o
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2UuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIExpbmtCdWZmZXI7CisKK25hbWVzcGFjZSBERkcgewor
c3RydWN0IE5vZGU7Cit9CisKK25hbWVzcGFjZSBGVEwgeworCitjbGFzcyBKU0NhbGxWYXJhcmdz
IHsKK3B1YmxpYzoKKyAgICBKU0NhbGxWYXJhcmdzKCk7CisgICAgSlNDYWxsVmFyYXJncyh1bnNp
Z25lZCBzdGFja21hcElELCBERkc6Ok5vZGUqKTsKKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQg
bnVtU3BpbGxTbG90c05lZWRlZCgpOworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMm
LCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpOworICAgIHZvaWQgbGluayhWTSYsIExpbmtCdWZm
ZXImLCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSlNDYWxsVmFyYXJncyYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5zdHJ1Y3Rp
b25PZmZzZXQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YWNrbWFw
SUQ7CisgICAgREZHOjpOb2RlKiBtX25vZGU7CisgICAgSlNDYWxsQmFzZSBtX2NhbGxCYXNlOwor
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9leGNlcHRpb25zOworCitwdWJsaWM6CisgICAg
dWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMSlNDYWxs
VmFyYXJnc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4
NSwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBt
X291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSwKICAgICAgICAg
ICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2EpOwogICAgICAgICAKKyAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBhbnkgQ2FsbFZhcmFyZ3MgdGhlbiB3ZSBuZWUgdG8gaGF2ZSBhIHNwaWxs
IHNsb3QgZm9yIGl0LgorICAgICAgICBib29sIGhhc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKSB7CisgICAgICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgOiBibG9jaykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBDb250cnVjdFZhcmFy
Z3M6CisgICAgICAgICAgICAgICAgICAgIGhhc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGhhc1ZhcmFyZ3MpIHsKKyAgICAgICAgICAgIExWYWx1ZSB2YXJhcmdzU3Bp
bGxTbG90cyA9IG1fb3V0LmFsbG9jYSgKKyAgICAgICAgICAgICAgICBhcnJheVR5cGUobV9vdXQu
aW50NjQsIEpTQ2FsbFZhcmFyZ3M6Om51bVNwaWxsU2xvdHNOZWVkZWQoKSkpOworICAgICAgICAg
ICAgbV9mdGxTdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURz
Kys7CisgICAgICAgICAgICBtX291dC5jYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LnN0YWNr
bWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxTdGF0ZS52YXJhcmdzU3BpbGxT
bG90c1N0YWNrbWFwSUQpLAorICAgICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgdmFyYXJn
c1NwaWxsU2xvdHMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBtX2NhbGxGcmFtZSA9
IG1fb3V0LnB0clRvSW50KAogICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC5mcmFtZUFkZHJl
c3NJbnRyaW5zaWMoKSwgbV9vdXQuaW50MzJaZXJvKSwgbV9vdXQuaW50UHRyKTsKICAgICAgICAg
bV90YWdUeXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKQEAgLTYz
Niw2ICs2NjAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAg
ICAgICBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Cisg
ICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JD
b25zdHJ1Y3RWYXJhcmdzKCk7CisgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoRlRMX05B
VElWRV9DQUxMX0lOTElOSU5HKQogICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNh
c2UgTmF0aXZlQ29uc3RydWN0OgpAQCAtMTk4Niw4ICsyMDE1LDIyIEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBjaGVja0FyZ3VtZW50c05vdENyZWF0ZWQoKTsKIAotICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG1fbm9kZSwgIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSk7Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmFkZChtX291dC5sb2FkMzJOb25OZWdhdGl2
ZShwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSwgbV9vdXQuY29uc3RJbnQzMigt
MSkpKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZQorICAgICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS1raW5kKSkgeworICAgICAgICAgICAgc2V0SW50
MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigKKyAgICAgICAgICAgICAgICAg
ICAgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRS
ZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
cjsKKyAgICAgICAgICAgIHNldEludDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmFkZCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihhcmd1
bWVudENvdW50UmVnaXN0ZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
MigtMSkpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRNeUFy
Z3VtZW50QnlWYWwoKQpAQCAtMzcwOCw2ICszNzUxLDExIEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVD
YWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKKyAgICB7CisgICAgICAgIEZJWE1FCisgICAgfQogCiAg
ICAgdm9pZCBjb21waWxlSnVtcCgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxMCBAQCBTdGF0
ZTo6U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgICwgY29udGV4dChsbHZtLT5Db250ZXh0Q3JlYXRl
KCkpCiAgICAgLCBtb2R1bGUoMCkKICAgICAsIGZ1bmN0aW9uKDApCisgICAgLCBoYW5kbGVTdGFj
a092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAsIGhhbmRsZUV4Y2Vw
dGlvblN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBjYXB0dXJlZFN0YWNrbWFwSUQoVUlOVF9N
QVgpCisgICAgLCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQoVUlOVF9NQVgpCiAgICAgLCBn
ZW5lcmF0ZWRGdW5jdGlvbigwKQogICAgICwgdW53aW5kRGF0YVNlY3Rpb24oMCkKICAgICAsIHVu
d2luZERhdGFTZWN0aW9uU2l6ZSgwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuaAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRlRMSklU
Q29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgogI2luY2x1ZGUgIkZUTEpTQ2Fs
bC5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKICNpbmNsdWRlICJGVExTdGFja01h
cHMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgpAQCAtNzEsMTAgKzcyLDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBoYW5kbGVTdGFja092
ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRDsKICAgICB1bnNpZ25lZCBoYW5kbGVFeGNlcHRpb25T
dGFja21hcElEOwogICAgIHVuc2lnbmVkIGNhcHR1cmVkU3RhY2ttYXBJRDsKKyAgICB1bnNpZ25l
ZCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQ7CiAgICAgU2VnbWVudGVkVmVjdG9yPEdldEJ5
SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRWZWN0b3I8UHV0QnlJZERlc2Ny
aXB0b3I+IHB1dEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxDaGVja0luRGVzY3JpcHRvcj4g
Y2hlY2tJbnM7CiAgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxsczsKKyAgICBWZWN0b3I8SlNDYWxs
VmFyYXJncz4ganNDYWxsVmFyYXJnc2VzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBjb2RlU2VjdGlv
bk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVzOwogICAgIHZvaWQq
IHVud2luZERhdGFTZWN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzQsNyArMTM0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ICAgIHJldHVybiBpbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNWYWx1
ZSwgY2FsbGVyU2NvcGVDaGFpbik7CiB9CiAKLXVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3Mo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU3RhY2sqIHN0YWNrLCBKU1ZhbHVlIGFyZ3VtZW50cywg
dW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQor
dW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBhcmd1
bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQogewogICAgIHVuc2lnbmVkIGxlbmd0
aDsKICAgICBpZiAoIWFyZ3VtZW50cykKQEAgLTE1Niw2ICsxNTYsMTMgQEAgdW5zaWduZWQgc2l6
ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIAogICAgIGVsc2UKICAgICAgICAgbGVuZ3RoID0g
MDsKICAgICAKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCit1bnNpZ25lZCBzaXplRnJhbWVGb3JW
YXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1N0YWNrKiBzdGFjaywgSlNWYWx1ZSBhcmd1
bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09m
ZnNldCkKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzaXplT2ZWYXJhcmdzKGNhbGxGcmFtZSwg
YXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgCiAgICAgQ2FsbEZyYW1lKiBjYWxs
ZWVGcmFtZSA9IGNhbGxlZUZyYW1lRm9yVmFyYXJncyhjYWxsRnJhbWUsIG51bVVzZWRTdGFja1Ns
b3RzLCBsZW5ndGggKyAxKTsKICAgICBpZiAobGVuZ3RoID4gQXJndW1lbnRzOjpNYXhBcmd1bWVu
dHMgfHwgIXN0YWNrLT5lbnN1cmVDYXBhY2l0eUZvcihjYWxsZWVGcmFtZS0+cmVnaXN0ZXJzKCkp
KSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2
aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgLSBwYWRkZWRDYWxsZWVGcmFtZU9mZnNldCk7CiAgICAgfQogCisgICAgdW5zaWduZWQgc2l6
ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWMsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBm
aXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxs
RnJhbWUqIGV4ZWMsIEpTU3RhY2sqLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNl
ZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB2b2lkIGxvYWRW
YXJhcmdzKENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7
CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxG
cmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJn
T2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDEwIEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5s
aW5lZEZyYW1lKENhbGwKIAogICAgICAgICBtX2ZyYW1lLm1fY2FsbEZyYW1lID0gY2FsbEZyYW1l
OwogICAgICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lOwot
ICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAgICAgIG1fZnJhbWUubV9jb2Rl
QmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCk7CiAgICAgICAgIG1f
ZnJhbWUubV9ieXRlY29kZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJl
dmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDE1ICsyMTIsMjcgQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCi1Bc3NlbWJs
eUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0
aW9uQ2hlY2tLaW5kIGtpbmQpCitBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJz
OjplbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQsIEV4Y2VwdGlvbkp1
bXBXaWR0aCB3aWR0aCkKIHsKICAgICBjYWxsRXhjZXB0aW9uRnV6eigpOworCisgICAgaWYgKHdp
ZHRoID09IEZhckp1bXBXaWR0aCkKKyAgICAgICAga2luZCA9IChraW5kID09IE5vcm1hbEV4Y2Vw
dGlvbkNoZWNrID8gSW52ZXJ0ZWRFeGNlcHRpb25DaGVjayA6IE5vcm1hbEV4Y2VwdGlvbkNoZWNr
KTsKICAgICAKKyAgICBKdW1wIHJlc3VsdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVy
biBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBa
ZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKKyAgICBy
ZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblpl
cm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsK
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmV0dXJuIGJyYW5jaDMyKGtpbmQgPT0gTm9y
bWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpOworICAgIHJlc3VsdCA9IGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhj
ZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpOwogI2VuZGlmCisgICAgCisgICAgaWYgKGtpbmQgPT0gTm9ybWFsSnVtcFdpZHRo
KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgcmVhbEp1
bXAgPSBqdW1wKCk7CisgICAgcmVzdWx0LmxpbmsodGhpcyk7CisgICAgCisgICAgcmV0dXJuIHJl
YWxKdW1wLm1fanVtcDsKIH0KIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRTdG9yZVN0cnVj
dHVyZVdpdGhUeXBlSW5mbyhBc3NlbWJseUhlbHBlcnMmIGppdCwgVHJ1c3RlZEltbVB0ciBzdHJ1
Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDYgKzMz
OCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7CisgICAgICAgIC8vIE5CLiBJdCdz
IHRlbXB0aW5nIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBzb21ldGltZXMgdXNlIGFuIG9mZnNl
dCBmcm9tIHRoZSBzdGFjaworICAgICAgICAvLyByZWdpc3RlciBiZWNhdXNlIGZvciBzb21lIG9m
ZnNldHMgdGhhdCB3aWxsIGVuY29kZSB0byBhIHNtYWxsZXIgaW5zdHJ1Y3Rpb24uIEJ1dCB3ZQor
ICAgICAgICAvLyBjYW5ub3QgZG8gdGhpcy4gV2UgdXNlIHRoaXMgaW4gcGxhY2VzIHdoZXJlIHRo
ZSBzdGFjayBwb2ludGVyIGhhcyBiZWVuIG1vdmVkIHRvIHNvbWUKKyAgICAgICAgLy8gdW5wcmVk
aWN0YWJsZSBsb2NhdGlvbi4KICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlk
KCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
dmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQpAQCAt
NTMzLDcgKzUzNyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CiAg
ICAgCiAgICAgZW51bSBFeGNlcHRpb25DaGVja0tpbmQgeyBOb3JtYWxFeGNlcHRpb25DaGVjaywg
SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayB9OwotICAgIEp1bXAgZW1pdEV4Y2VwdGlvbkNoZWNrKEV4
Y2VwdGlvbkNoZWNrS2luZCBraW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2spOworICAgIGVudW0g
RXhjZXB0aW9uSnVtcFdpZHRoIHsgTm9ybWFsSnVtcFdpZHRoLCBGYXJKdW1wV2lkdGggfTsKKyAg
ICBKdW1wIGVtaXRFeGNlcHRpb25DaGVjaygKKyAgICAgICAgRXhjZXB0aW9uQ2hlY2tLaW5kID0g
Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkp1bXBXaWR0aCA9IE5vcm1hbEp1bXBXaWR0
aCk7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCiAgICAgc3RhdGljIHZvaWQgZW1p
dENvdW50KE1hY3JvQXNzZW1ibGVyJiBqaXQsIEFic3RyYWN0U2FtcGxpbmdDb3VudGVyJiBjb3Vu
dGVyLCBpbnQzMl90IGluY3JlbWVudCA9IDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQ
UkluZm8uaAkocmV2aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9H
UFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAv
LyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gWDg2UmVn
aXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OmVzaTsKKyAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gWDg2UmVnaXN0ZXJzOjpyMTA7CiAgICAg
c3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRjaFJlZ2lzdGVyID0gTWFjcm9Bc3Nl
bWJsZXI6OnNjcmF0Y2hSZWdpc3RlcjsKIAogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdpc3Rlcih1
bnNpZ25lZCBpbmRleCkKQEAgLTU3Nyw2ICs1NzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MDsgLy8gcmVnVDAK
ICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IEFSTTY0UmVnaXN0ZXJz
Ojp4MTsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJl
dHVybkdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MjsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5v
blByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gQVJNNjRSZWdpc3RlcnM6Ong4OwogICAgIHN0YXRp
YyBjb25zdCBHUFJSZWcgcGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJz
OjppcDA7CiAKICAgICAvLyBHUFJSZWcgbWFwcGluZyBpcyBkaXJlY3QsIHRoZSBtYWNoaW5lIHJl
Z3NpdGVyIG51bWJlcnMgY2FuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2NCwxMSArNDY0LDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2
YXRlQ29tcGlsZShKSQogICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7
CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIERGRzo6Q2FuSW5saW5lOgotICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFs
c2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwotICAgICAgICBt
X3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKICAgICBjYXNlIERG
Rzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAg
ICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGwoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNv
ZGVJRCwgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwotICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFy
Z3NGcmFtZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFyZ3NG
cmFtZShJbnN0cnVjdGlvbiosIENhbGxMaW5rSW5mbyopOwogICAgICAgICB2b2lkIGNvbXBpbGVD
YWxsRXZhbChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKgogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFy
Z3NGcmFtZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29tcGlsZVNldHVw
VmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZvKiBpbmZv
KQogewogICAgIGludCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAg
aW50IGFyZ3VtZW50cyA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTkwLDYgKzkwLDE2
IEBAIHZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHIKICAgICBpZiAoY2Fu
T3B0aW1pemUpCiAgICAgICAgIGVuZC5saW5rKHRoaXMpOwogICAgIAorICAgIC8vIFByb2ZpbGUg
dGhlIGFyZ3VtZW50IGNvdW50LgorICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBKU1N0YWNrOjpB
cmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxv
YWRPZmZzZXQpLCByZWdUMik7CisgICAgbG9hZDgoJmluZm8tPm1heE51bUFyZ3VtZW50cywgcmVn
VDApOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIp
OworICAgIEp1bXAgbm90U2F0dXJhdGVkID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCByZWdUMiwg
VHJ1c3RlZEltbTMyKDI1NSkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDI1NSksIHJlZ1QyKTsK
KyAgICBub3RTYXR1cmF0ZWQubGluayh0aGlzKTsKKyAgICBzdG9yZTgocmVnVDIsICZpbmZvLT5t
YXhOdW1Bcmd1bWVudHMpOworICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKKyAgICAKICAgICAv
LyBJbml0aWFsaXplICd0aGlzJy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1
ZSwgcmVnVDApOwogICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSk7CkBAIC0xMzQsNyArMTQ0LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KEluc3RydQogCiB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKLSAg
ICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIENhbGxMaW5rSW5m
byogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAgICBpbnQgY2Fs
bGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgLyogQ2FsbGVyIGFsd2F5czoK
ICAgICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJhbWUu
CkBAIC0xNTIsNyArMTY0LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9w
Y29kZUkKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09E
RV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgY2FsbF9hbmRfY2FsbF92YXJhcmdzX29wY29kZXNf
bXVzdF9iZV9zYW1lX2xlbmd0aCk7CiAgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChv
cF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSwgY2FsbF9hbmRf
Y29uc3RydWN0X3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92
YXJhcmdzKQorPDw8PDw8PCAubWluZQorICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3MoaW5zdHJ1
Y3Rpb24sIGluZm8pOworPT09PT09PQogICAgICAgICBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUo
aW5zdHJ1Y3Rpb24pOworPj4+Pj4+PiAucjE3OTg2MgogICAgIGVsc2UgewogICAgICAgICBpbnQg
YXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByZWdpc3Rl
ck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CkBAIC0xNzYsOSArMTkyLDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgc3RvcmU2NChy
ZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2FsbGVlICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOwogICAgIAotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxs
TGlua0luZm8oKTsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKKyAgIGlm
IChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxFdmFsKGlu
c3RydWN0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCShyZXZpc2lvbiAxNzk5NTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAxLDExICsxMDEsMzEgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJh
bWVGYXN0Q2FzZShDQ2FsbAogCiB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJz
dFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2UpCiB7Ci0gICAg
ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoCi0gICAgICAgIGppdCwgbnVtVXNlZFNsb3Rz
R1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLAotICAgICAgICBWYWx1
ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpLCBEYXRhRm9ybWF0SW50MzIpLAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSksCi0gICAgICAgIGZpcnN0VmFyQXJnT2Zmc2V0
LCBzbG93Q2FzZSk7CisgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1V
c2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG51bGxw
dHIsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7Cit9CisKK3ZvaWQgZW1pdFNldHVwVmFy
YXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xvdHNH
UFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRj
aEdQUjMsIElubGluZUNhbGxGcmFtZSosIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93Q2FzZSkKK3sKKyAgICBWYWx1ZVJlY292ZXJ5IGFyZ3Vt
ZW50Q291bnRSZWNvdmVyeTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RBcmd1bWVudFJlZzsK
KyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6
OmlzVmFyYXJncyhpbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7CisgICAgICAgICAgICBhcmd1bWVu
dENvdW50UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAg
ICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIsIERhdGFG
b3JtYXRJbnQzMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcmd1bWVudENvdW50
UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCgKKyAgICAgICAgICAgICAgICBqc051
bWJlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpID4gMSkKKyAgICAgICAg
ICAgIGZpcnN0QXJndW1lbnRSZWcgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJl
ZyA9IFZpcnR1YWxSZWdpc3RlcigwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudENv
dW50UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJ
bnQzMik7CisgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lOjphcmd1bWVudE9mZnNldCgwKSk7CisgICAgfQorICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFt
ZUZhc3RDYXNlKGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJndW1lbnRSZWcsIGZp
cnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuaAkocmV2
aXNpb24gMTc5OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NG
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIHZvaWQgZW1pdFNldHVwVmFy
YXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwKIC8vIFZhcmlhbnQgdGhhdCBhc3N1bWVzIG5vcm1hbCBz
dGFjayBmcmFtZS4KIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcg
c2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZz
ZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKIAorLy8gVmFyaWFudCBmb3Ig
cG90ZW50aWFsbHkgaW5saW5lZCBzdGFjayBmcmFtZXMuCit2b2lkIGVtaXRTZXR1cFZhcmFyZ3NG
cmFtZUZhc3RDYXNlKENDYWxsSGVscGVycyYsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIElu
bGluZUNhbGxGcmFtZSosIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0JiBzbG93Q2FzZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5oCShyZXZpc2lvbiAxNzk5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBt
b2RlID0gTm9ybWFsQXJndW1lbnRzQ3JlYXRpb25Nb2RlKQogICAgIHsKLSAgICAgICAgQXJndW1l
bnRzKiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KHZt
LmhlYXAsIG9mZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJheVNpemVJ
bkJ5dGVzKGlubGluZUNhbGxGcmFtZSkpKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKKyAgICAgICAg
QXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVu
dHM+KHZtLmhlYXAsIG9mZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJh
eVNpemVJbkJ5dGVzKGNhbGxGcmFtZSwgaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3VtZW50cyhjYWxs
RnJhbWUpOwogICAgICAgICBhcmd1bWVudHMtPmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZSwgaW5s
aW5lQ2FsbEZyYW1lLCBtb2RlKTsKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKICAgICB9CkBA
IC0xMjQsNyArMTI0LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVTdHJpY3RNb2RlQ2Fs
bGVlSWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVy
QXJyYXlTaXplSW5CeXRlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgfQotICAg
IHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAq
IChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsgfQorICAgIHN0YXRpYyBz
aXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKQorICAgICAgICByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikgKiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKKyAgICB9CiAgICAgYm9vbCBp
c0FyZ3VtZW50KHNpemVfdCk7CiAgICAgYm9vbCB0cnlTZXRBcmd1bWVudChWTSYsIHNpemVfdCBh
cmd1bWVudCwgSlNWYWx1ZSk7CiAgICAgSlNWYWx1ZSB0cnlHZXRBcmd1bWVudChzaXplX3QgYXJn
dW1lbnQpOwpAQCAtMzQwLDExICszNDgsMTUgQEAgaW5saW5lIHZvaWQgQXJndW1lbnRzOjpmaW5p
c2hDcmVhdGlvbihDYQogICAgIG1fb3ZlcnJvZGVDYWxsZWUgPSBmYWxzZTsKICAgICBtX292ZXJy
b2RlQ2FsbGVyID0gZmFsc2U7CiAgICAgbV9pc1N0cmljdE1vZGUgPSBqc0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKS0+aXNTdHJpY3RN
b2RlKCk7Ci0KKyAgICAKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICBtX251bUFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+cihp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZElu
dDMyKCk7CisgICAgZWxzZQorICAgICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICBtX251bUFyZ3VtZW50cy0tOworICAgIAogICAgIHN3
aXRjaCAobW9kZSkgewogICAgIGNhc2UgTm9ybWFsQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0g
ICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMTsKLSAgICAgICAgCiAgICAgICAgIGlmIChtX251bUFyZ3VtZW50cykgewogICAgICAgICAg
ICAgaW50IG9mZnNldEZvckFyZ3VtZW50T25lID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNb
MV0udmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgICAgICBtX3JlZ2lzdGVycyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+
cmVnaXN0ZXJzKCkpICsgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgLSB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgxKS5vZmZzZXQoKTsKQEAgLTM2MSw3ICszNzMsNiBAQCBpbmxpbmUgdm9pZCBBcmd1
bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENsb25l
ZEFyZ3VtZW50c0NyZWF0aW9uTW9kZTogewotICAgICAgICBtX251bUFyZ3VtZW50cyA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CiAgICAgICAgIGlmIChtX251bUFyZ3Vt
ZW50cykgewogICAgICAgICAgICAgaW50IG9mZnNldEZvckFyZ3VtZW50T25lID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAg
ICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpICsgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgLSB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE3OTk1NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjExLDYg
KzIxMSw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIC8qIGZyb20g
c3VwZXIgbG9uZyBjb21waWxlcyB0aGF0IHRha2UgYSBsb3Qgb2YgbWVtb3J5LiAqL1wKICAgICB2
KHVuc2lnbmVkLCBtYXhpbXVtSW5saW5pbmdDYWxsZXJTaXplLCAxMDAwMCkgXAogICAgIFwKKyAg
ICB2KHVuc2lnbmVkLCBtYXhpbXVtVmFyYXJnc0ZvcklubGluaW5nLCAxMDApIFwKKyAgICBcCiAg
ICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudENhbGxJbmxpbmluZywgdHJ1ZSkgXAogICAgIHYo
Ym9vbCwgZW5hYmxlUG9seXZhcmlhbnRCeUlkSW5saW5pbmcsIHRydWUpIFwKICAgICBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246423</attachid>
            <date>2015-02-11 20:59:12 -0800</date>
            <delta_ts>2015-02-12 10:19:19 -0800</delta_ts>
            <desc>64-bit might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>120303</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcxLDYgKzQ3MSwxNiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBsc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0p
LCBzcmNEZXN0KTsKICAgICB9CisgICAgCisgICAgdm9pZCByc2hpZnRQdHIoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICByc2hpZnQzMih0cnVzdGVkSW1tMzJG
b3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHVyc2hpZnRQdHIoSW1t
MzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICB1cnNoaWZ0MzIodHJ1
c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CisgICAgfQogCiAgICAgdm9pZCBuZWdQ
dHIoUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKQEAgLTc1MCw2ICs3NjAsMTYgQEAgcHVibGljOgog
ICAgICAgICBsc2hpZnQ2NCh0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKICAg
ICB9CiAKKyAgICB2b2lkIHJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkK
KyAgICB7CisgICAgICAgIHJzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rl
c3QpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
c3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVyc2hpZnQ2NCh0cnVzdGVkSW1tMzJGb3JTaGlmdChp
bW0pLCBzcmNEZXN0KTsKKyAgICB9CisKICAgICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBuZWc2NChkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2Vu
CiAgICAgICAgICwgaGFzU2VlblNob3VsZFJlcGF0Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2Vl
bkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2FsbFR5cGUoTm9uZSkKKyAgICAgICAgLCBtYXhO
dW1Bcmd1bWVudHMoMCkKICAgICAgICAgLCBzbG93UGF0aENvdW50KDApCiAgICAgewogICAgIH0K
QEAgLTkxLDYgKzkyLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1Nl
bgogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAxOwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDog
NTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBjYWxsZWVHUFIgOiA4OworICAgIHVpbnQ4X3Qg
bWF4TnVtQXJndW1lbnRzOyAvLyBPbmx5IHVzZWQgZm9yIHZhcmFyZ3MgY2FsbHMuCiAgICAgdWlu
dDMyX3Qgc2xvd1BhdGhDb3VudDsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNw
cAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw5IEBAIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFs
bHkgbmVlZCB0aGlzLCBidXQgYW55dGltZSB3ZSBoYXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQg
YmVjb21lcyBpbmRpc3BlbnNhYmxlLgogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsK
ICAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZyb21DYWxsTGlua0luZm8obG9ja2VyLCBjYWxsTGlu
a0luZm8pOworICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGcm9tQ2FsbExpbmtJ
bmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICByZXN1bHQubV9tYXhOdW1Bcmd1bWVudHMg
PSBjYWxsTGlua0luZm8ubWF4TnVtQXJndW1lbnRzOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygK
QEAgLTI5MSw2ICsyOTMsMTMgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVGbwogICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCwgYmFzZWxpbmVNYXApOwogfQogCit2b2lkIENhbGxMaW5rU3RhdHVzOjpzZXRQ
cm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFudCB2YXJpYW50KQoreworICAgIG1fdmFyaWFu
dHMgPSBDYWxsVmFyaWFudExpc3R7IHZhcmlhbnQgfTsKKyAgICBtX2NvdWxkVGFrZVNsb3dQYXRo
ID0gZmFsc2U7CisgICAgbV9pc1Byb3ZlZCA9IHRydWU7Cit9CisKIGJvb2wgQ2FsbExpbmtTdGF0
dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0zMjIsNiArMzMxLDkgQEAgdm9pZCBDYWxsTGlua1N0
YXR1czo6ZHVtcChQcmludFN0cmVhbSYgbwogICAgIAogICAgIGlmICghbV92YXJpYW50cy5pc0Vt
cHR5KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgbGlzdER1bXAobV92YXJpYW50cykpOwor
ICAgIAorICAgIGlmIChtX21heE51bUFyZ3VtZW50cykKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAibWF4TnVtQXJndW1lbnRzID0gIiwgbV9tYXhOdW1Bcmd1bWVudHMpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4
LDYgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgQ2FsbExpbmtTdGF0dXMmIHNl
dElzUHJvdmVkKGJvb2wgaXNQcm92ZWQpCi0gICAgewotICAgICAgICBtX2lzUHJvdmVkID0gaXNQ
cm92ZWQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIENh
bGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoCiAgICAgICAgIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYpOwogCkBAIC0xMDgsNiArMTAyLDgg
QEAgcHVibGljOgogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAg
ICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBjb25zdCBDYWxsTGlua0luZm9NYXAmLCBjb25zdCBD
b250ZXh0TWFwJik7CiAgICAgCisgICAgdm9pZCBzZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxs
VmFyaWFudCk7CisgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICFtX3Zhcmlh
bnRzLmlzRW1wdHkoKSB8fCBtX2NvdWxkVGFrZVNsb3dQYXRoOyB9CiAgICAgCiAgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQpAQCAtMTIzLDYgKzExOSw4IEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIGlzQ2xvc3VyZUNhbGwoKSBjb25zdDsgLy8gUmV0dXJu
cyB0cnVlIGlmIGFueSBjYWxsZWUgaXMgYSBjbG9zdXJlIGNhbGwuCiAgICAgCisgICAgYm9vbCBt
YXhOdW1Bcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX21heE51bUFyZ3VtZW50czsgfQorICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKQEAg
LTEzNyw2ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIENhbGxWYXJpYW50TGlzdCBtX3ZhcmlhbnRz
OwogICAgIGJvb2wgbV9jb3VsZFRha2VTbG93UGF0aDsKICAgICBib29sIG1faXNQcm92ZWQ7Cisg
ICAgdW5zaWduZWQgbV9tYXhOdW1Bcmd1bWVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2
aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmln
aW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxs
RnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAgIENvbnN0cnVj
dCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFyZ3MsCiAgICAg
ICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBvcmF0ZXMg
dGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAgICAgIC8vIHNs
b3QuCkBAIC0xNDAsMjUgKzE0MiwzOSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAg
ICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZhcmFyZ3NLaW5k
Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
a2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAgcmV0dXJuIENh
bGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICBy
ZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9CisgICAgCiAgICAg
c3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kRm9yKEtpbmQg
a2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBjYXNlIENhbGw6
CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVyQ2FsbDoKICAg
ICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDYWxsOwog
ICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgog
ICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENvZGVGb3JDYWxs
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2luZCBraW5kKQor
ICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAgICAgICBzd2l0
Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDoK
KyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xNzEsMTAgKzE4NywxMSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZy
YW1lIHsKICAgICBDb2RlT3JpZ2luIGNhbGxlcjsKICAgICBCaXRWZWN0b3IgY2FwdHVyZWRWYXJz
OyAvLyBJbmRleGVkIGJ5IHRoZSBtYWNoaW5lIGNhbGwgZnJhbWUncyB2YXJpYWJsZSBudW1iZXJp
bmcuCiAKLSAgICBzaWduZWQgc3RhY2tPZmZzZXQgOiAyOTsKLSAgICB1bnNpZ25lZCBraW5kIDog
MjsgLy8gcmVhbCB0eXBlIGlzIEtpbmQKKyAgICBzaWduZWQgc3RhY2tPZmZzZXQgOiAyODsKKyAg
ICB1bnNpZ25lZCBraW5kIDogMzsgLy8gcmVhbCB0eXBlIGlzIEtpbmQKICAgICBib29sIGlzQ2xv
c3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVuIHdlIGtub3cgdGhhdCBjYWxsZWUvc2NvcGUg
YXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24ndCB0cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywg
aS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVkIG1hbnVhbGx5LgogICAgIFZpcnR1YWxSZWdp
c3RlciBhcmd1bWVudHNSZWdpc3RlcjsgLy8gVGhpcyBpcyBvbmx5IHNldCBpZiB0aGUgY29kZSB1
c2VzIGFyZ3VtZW50cy4gVGhlIHVubW9kaWZpZWQgYXJndW1lbnRzIHJlZ2lzdGVyIGZvbGxvd3Mg
dGhlIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigpIGNvbnZlbnRpb24gKHNlZSBDb2RlQmxv
Y2suaCkuCisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsgLy8gT25s
eSBzZXQgd2hlbiB3ZSBpbmxpbmUgYSB2YXJhcmdzIGNhbGwuCiAgICAgCiAgICAgLy8gVGhlcmUg
aXMgcmVhbGx5IG5vIGdvb2Qgbm90aW9uIG9mIGEgImRlZmF1bHQiIHNldCBvZiB2YWx1ZXMgZm9y
CiAgICAgLy8gSW5saW5lQ2FsbEZyYW1lJ3MgZmllbGRzLiBUaGlzIGNvbnN0cnVjdG9yIGlzIGhl
cmUganVzdCB0byByZWR1Y2UgY29uZnVzaW9uIGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDYgKzY2LDggQEAgY29uc3QgY2hhciogZXhpdEtpbmRUb1N0cmluZyhFeGl0S2luZCBraQogICAg
ICAgICByZXR1cm4gIkFyZ3VtZW50c0VzY2FwZWQiOwogICAgIGNhc2UgTm90U3RyaW5nT2JqZWN0
OgogICAgICAgICByZXR1cm4gIk5vdFN0cmluZ09iamVjdCI7CisgICAgY2FzZSBWYXJhcmdzT3Zl
cmZsb3c6CisgICAgICAgIHJldHVybiAiVmFyYXJnc092ZXJmbG93IjsKICAgICBjYXNlIFVuY291
bnRhYmxlOgogICAgICAgICByZXR1cm4gIlVuY291bnRhYmxlIjsKICAgICBjYXNlIFVuY291bnRh
YmxlSW52YWxpZGF0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
aXRLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
aXRLaW5kLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGl0S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIGVudW0gRXhp
dEtpbmQgOiB1aW50OF90IHsKICAgICBJbmFkZXF1YXRlQ292ZXJhZ2UsIC8vIFdlIGV4aXRlZCBi
ZWNhdXNlIHdlIGVuZGVkIHVwIGluIGNvZGUgdGhhdCBkaWRuJ3QgaGF2ZSBwcm9maWxpbmcgY292
ZXJhZ2UuCiAgICAgQXJndW1lbnRzRXNjYXBlZCwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYXJndW1l
bnRzIGVzY2FwZWQgYnV0IHdlIGRpZG4ndCBleHBlY3QgdGhlbSB0by4KICAgICBOb3RTdHJpbmdP
YmplY3QsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIHNob3VsZG4ndCBoYXZlIGF0dGVtcHRlZCB0
byBvcHRpbWl6ZSBzdHJpbmcgb2JqZWN0IGFjY2Vzcy4KKyAgICBWYXJhcmdzT3ZlcmZsb3csIC8v
IFdlIGV4aXRlZCBiZWNhdXNlIGEgdmFyYXJncyBjYWxsIHBhc3NlZCBtb3JlIGFyZ3VtZW50cyB0
aGFuIHdlIGV4cGVjdGVkLgogICAgIFVuY291bnRhYmxlLCAvLyBXZSBleGl0ZWQgZm9yIG5vbmUg
b2YgdGhlIGFib3ZlIHJlYXNvbnMsIGFuZCB3ZSBzaG91bGQgbm90IGNvdW50IGl0LiBNb3N0IHVz
ZXMgb2YgdGhpcyBzaG91bGQgYmUgdmlld2VkIGFzIGEgRklYTUUuCiAgICAgVW5jb3VudGFibGVJ
bnZhbGlkYXRpb24sIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZh
bGlkYXRlZDsgdGhpcyBtZWFucyB0aGF0IHdlJ3ZlIGFscmVhZHkgY291bnRlZCB0aGUgcmVhc29u
cyB3aHkgdGhlIGNvZGUgYmxvY2sgd2FzIGludmFsaWRhdGVkLgogICAgIFdhdGNoZG9nVGltZXJG
aXJlZCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBzZXJ2aWNlIHRoZSB3YXRjaGRv
ZyB0aW1lci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNDQsNyArMTQ0LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NB
KTsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFy
aWFibGVzKCkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSk7Ci0gICAgICAgIEFT
U0VSVCh2YWx1ZS5pc0hlYXBUb3AoKSk7CisgICAgICAgIEFTU0VSVCghdmFsdWUuaXNDbGVhcigp
KTsKICAgICAgICAgRmlsdHJhdGlvblJlc3VsdCByZXN1bHQgPQogICAgICAgICAgICAgdmFsdWUu
ZmlsdGVyKHR5cGVGaWx0ZXJGb3IodXNlS2luZEZvcih2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkp
KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSBGaWx0cmF0aW9uT0sp
OwpAQCAtMjAzLDkgKzIwMywyMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldEFyZ3VtZW50OgotICAgICAgICAv
LyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KLSAgICAg
ICAgQVNTRVJUKCFtX3N0YXRlLmJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBh
cmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudCBtZWFucyB0aGF0IHNvbWVvbmUgc2V0
CisgICAgICAgIC8vIHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50
bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCisgICAgICAgIC8vIG5vbi1jbGVhciB2
YWx1ZS4KKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkuaXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChk
YXRhLT5jb3VudCkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLT5saW1pdDsgaS0tOykKKyAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3Bl
cmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0
T3I6CkBAIC0xMzE1LDcgKzEzMjYsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlz
IGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKICAgICAgICAgLy8g
b2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMg
YSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0aGVyIG9w
dGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFJbmxpbmVDYWxsRnJhbWU6Omlz
VmFyYXJncyhub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5raW5kKSkgewog
ICAgICAgICAgICAgc2V0Q29uc3RhbnQoCiAgICAgICAgICAgICAgICAgbm9kZSwganNOdW1iZXIo
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IDEpKTsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsgLy8gUHJldGVu
ZCB0aGF0IHdlIGNsb2JiZXJlZCB0byBwcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCkBAIC0xOTY0
LDYgKzE5NzYsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZl
Q29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZh
cmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDMsNiArNTAzLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9y
aWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhvcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5raW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
a25vdyBleGFjdGx5IHdoYXQgdGhpcyB3aWxsIHJldHVybi4gQnV0IG9ubHkgYWZ0ZXIgd2UgaGF2
ZSBjaGVja2VkCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgbm9ib2R5IGhhcyBlc2NhcGVk
IG91ciBhcmd1bWVudHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miwx
MiArMTgyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdD
b3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDYWxsTGlua1N0YXR1cyk7CiAgICAgdm9pZCBoYW5k
bGVDYWxsKGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCB1
bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsIGludCBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJl
Z2lzdGVyT2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2Rl
VHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgdm9pZCBoYW5kbGVWYXJhcmdz
Q2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKICAgICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRh
cmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB2
b2lkIHVuZG9GdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCk7CiAgICAgdm9pZCBlbWl0QXJndW1l
bnRQaGFudG9tcyhpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgdW5zaWduZWQgaW5saW5pbmdDb3N0
KENhbGxWYXJpYW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOyAvLyBSZXR1cm4gVUlOVF9NQVggaWYgaXQncyBub3QgYW4gaW5saW5pbmcg
Y2FuZGlkYXRlLiBCeSBjb252ZW50aW9uLCBpbnRyaW5zaWNzIGhhdmUgYSBjb3N0IG9mIDEuCiAg
ICAgLy8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNl
IGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9k
ZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1
cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1
bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2lu
ZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CisgICAgYm9vbCBoYW5kbGVJbmxpbmluZyhO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3Rh
dHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVuc2lnbmVkIGFyZ3VtZW50c09mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBO
b2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbik7CiAgICAgZW51bSBDYWxsZXJMaW5rYWJpbGl0eSB7IENhbGxlckRvZXNOb3JtYWxM
aW5raW5nLCBDYWxsZXJMaW5rc01hbnVhbGx5IH07CiAgICAgYm9vbCBhdHRlbXB0VG9JbmxpbmVD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQs
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNp
Z25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlKTsK
ICAgICB2b2lkIGlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVy
YW5kLCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwg
Q2FsbGVyTGlua2FiaWxpdHkpOwpAQCAtNTI4LDYgKzUyOSw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CiAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAg
ICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpOworICAgICAgICAgICAgaWYgKElubGluZUNhbGxG
cmFtZTo6aXNWYXJhcmdzKGlubGluZUNhbGxGcmFtZS0+a2luZCkpCisgICAgICAgICAgICAgICAg
Zmx1c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG51bUFyZ3VtZW50cyA9IGlubGluZVN0YWNrRW50cnktPm1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBudW1Bcmd1bWVudHM7IGFy
Z3VtZW50LS0gPiAxOykKQEAgLTY5MSw3ICs2OTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
b3AsIG9wSW5mbywgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24p
OwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CiAgICAgICAgIGlm
IChyZXN1bHRSZWcuaXNWYWxpZCgpKQotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQpLCBjYWxsKTsKKyAgICAgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOwogICAgICAg
ICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCkBAIC0xMDQzLDcgKzEwNDYsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA8PSAw
KTsKICAgICAKICAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAgY2Fs
bExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0LT5hc0pTVmFsdWUoKSkuc2V0
SXNQcm92ZWQodHJ1ZSk7CisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50
Q2FsbGVlKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxp
bmcgY2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiOiAiLCBjYWxsTGlua1N0YXR1cywg
IlxuIik7CkBAIC0xMDYwLDcgKzEwNjMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVD
YWxsKAogICAgIAogICAgIE9wSW5mbyBjYWxsT3BJbmZvOwogICAgIAotICAgIGlmIChoYW5kbGVJ
bmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNl
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVk
aWN0aW9uKSkgeworICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNh
bGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCwgcmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgewogICAgICAg
ICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOwogICAgICAgICByZXR1cm47CkBAIC0xMDg4LDEx
ICsxMDkxLDUyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2Fs
bChyZXN1bHQsIG9wLCBjYWxsT3BJbmZvLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogfQogCi12b2lkIEJ5dGVDb2Rl
UGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxs
VGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
K3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywg
Tm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBOb2RlKiB0
aGlzQXJndW1lbnQ7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9
PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7CisgICAgCisgICAgaW50IHJl
c3VsdCA9IHBjWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgY2FsbGVlID0gcGNbMl0udS5vcGVyYW5k
OworICAgIGludCB0aGlzUmVnID0gcGNbM10udS5vcGVyYW5kOworICAgIGludCBhcmd1bWVudHMg
PSBwY1s0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJlZVJlZyA9IHBjWzVdLnUub3BlcmFu
ZDsKKyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBwY1s2XS51Lm9wZXJhbmQ7CisgICAgCisg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAKKyAg
ICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsKKyAgICAK
KyAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRm9yKAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJl
bnRDb2RlT3JpZ2luKCksCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZv
cywgbV9jYWxsQ29udGV4dE1hcCk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmhhc0NvbnN0YW50KCkp
CisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2FsbGVlKGNhbGxUYXJn
ZXQtPmFzSlNWYWx1ZSgpKTsKKyAgICAKKyAgICBpZiAoY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1p
emUoKQorICAgICAgICAmJiBoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxM
aW5rU3RhdHVzLCBmaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSwgVmlydHVh
bFJlZ2lzdGVyKGFyZ3VtZW50cyksIGZpcnN0VmFyQXJnT2Zmc2V0LCAwLCBtX2N1cnJlbnRJbmRl
eCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgb3AsIElubGluZUNhbGxGcmFtZTo6
dmFyYXJnc0tpbmRGb3Ioa2luZCksIHByZWRpY3Rpb24pKSB7CisgICAgICAgIGlmIChtX2dyYXBo
LmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGlj
ZUlubGluZWRDYWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQ2FsbFZh
cmFyZ3NEYXRhKiBkYXRhID0gbV9jYWxsVmFyYXJnc0RhdGEuYWRkKCk7CisgICAgZGF0YS0+Zmly
c3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAgICAKKyAgICBOb2RlKiB0aGlz
Q2hpbGQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHRoaXNBcmd1bWVu
dCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwor
ICAgICAgICB0aGlzQ2hpbGQgPSBnZXQodGhpc1JlZyk7CisgICAgCisgICAgTm9kZSogY2FsbCA9
IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBjYWxsVGFy
Z2V0LCBnZXQoYXJndW1lbnRzKSwgdGhpc0NoaWxkKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0UmVnKHJlc3VsdCk7CisgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisgICAgICAgIHNl
dChyZXN1bHRSZWcsIGNhbGwpOworfQorCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rp
b25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc0FyZ3VtZW50UmVnLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7Cisg
ICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIGlmICh0aGlzQXJndW1lbnRSZWcuaXNWYWxpZCgp
KQorICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQodGhpc0FyZ3VtZW50UmVnKTsgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgIGVsc2UKICAgICAgICAg
dGhpc0FyZ3VtZW50ID0gMDsKIApAQCAtMTM5Myw3ICsxNDM3LDExIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCBy
ZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCBy
ZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBu
ZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoCisgICAgTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25z
dCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0
T3JGaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCisgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBO
b2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uKQogewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkhh
bmRsaW5nIGlubGluaW5nLi4uXG4iKTsKQEAgLTE0MDcsNiArMTQ1NSwxMyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCisgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpCisgICAg
ICAgICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9uczo6bWF4aW11
bVZhcmFyZ3NGb3JJbmxpbmluZygpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZhcmFyZ3MuXG4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAgdW5zaWduZWQgaW5saW5p
bmdCYWxhbmNlID0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0
ZUluc3RydWN0aW9uQ291bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpCiAgICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0ZDo6bWluKGlubGluaW5n
QmFsYW5jZSwgT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudCgpKTsKQEAgLTE0MTcsOCArMTQ3Miw3NCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gc2ltcGxpZmljYXRpb24gb24g
dGhlIGZseSBhbmQgdGhpcyBoZWxwcyByZWR1Y2UgY29tcGlsZSB0aW1lcywgYnV0IHdlIGNhbiBv
bmx5IGxldmVyYWdlCiAgICAgLy8gdGhpcyBpbiBjYXNlcyB3aGVyZSB3ZSBkb24ndCBuZWVkIGNv
bnRyb2wgZmxvdyBkaWFtb25kcyB0byBjaGVjayB0aGUgY2FsbGVlLgogICAgIGlmICghY2FsbExp
bmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0g
MSkgewotICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoCi0gICAgICAgICAgICBjYWxsTGlua1N0
YXR1c1swXSwgY2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktp
bmQpOworICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxU
YXJnZXROb2RlLCB0aGlzQXJndW1lbnQsIHNwZWNpYWxpemF0aW9uS2luZCk7CisKKyAgICAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0OworCisgICAgICAgIC8vIElmIHdlIGhhdmUgYSB2YXJhcmdzIGNh
bGwsIHdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgYXJndW1lbnRzIHJpZ2h0IG5vdy4KKyAgICAgICAg
aWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBtYW5kYXRvcnlNaW5pbXVtOyAvLyBleGNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIGlm
IChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IGNhbGxMaW5rU3RhdHVz
WzBdLmZ1bmN0aW9uRXhlY3V0YWJsZSgpKQorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmlt
dW0gPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5TWluaW11bSA9IDA7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgdW5zaWduZWQgbWF4
TnVtQXJndW1lbnRzID0gbWF4KAorICAgICAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzLm1heE51
bUFyZ3VtZW50cygpLAorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gKyAxKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugc29ydCBvZiBwcmV0ZW5kIHRoYXQgdGhpcyAq
aXMqIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgd2VyZSBwYXNzZWQuCisgICAgICAgICAg
ICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IG1heE51bUFyZ3VtZW50czsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RG
cmVlUmVnICsgMTsKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IG1heE51bUFyZ3VtZW50
czsgLy8gaW5jbHVkZXMgInRoaXMiCisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAt
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAgICAgICAgIHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAorICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50
b0xvY2FsKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRh
dGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOworICAgICAgICAgICAgZGF0YS0+
c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCArIDEpOworICAgICAgICAgICAg
ZGF0YS0+Y291bnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpB
cmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGRhdGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNl
dDsKKyAgICAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4TnVtQXJndW1lbnRzOworICAgICAgICAg
ICAgZGF0YS0+bWFuZGF0b3J5TWluaW11bSA9IG1hbmRhdG9yeU1pbmltdW07CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0
KGFyZ3VtZW50c0FyZ3VtZW50KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEluIERG
RyBJUiBiZWZvcmUgU1NBLCB3ZSBjYW5ub3QgaW5zZXJ0IGNvbnRyb2wgZmxvdyBiZXR3ZWVuIGFm
dGVyIHRoZQorICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIHRoZSBsYXN0IFNldEFyZ3Vt
ZW50LiBUaGlzIGlzbid0IGEgcHJvYmxlbSBvbmNlIHdlIGdldCB0byBERkcKKyAgICAgICAgICAg
IC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciByZWFzb25zIGZvciBub3Qg
aW5zZXJ0aW5nIGNvbnRyb2wgZmxvdworICAgICAgICAgICAgLy8gYmVmb3JlIFNTQS4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKAorICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCBmYWxzZSk7CisgICAgICAg
ICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQgd2lsbCBmb3JjZSB0aGUgY291bnQg
dG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24ndAorICAgICAgICAgICAgLy8gbWF0
dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50IGFuZCBGbHVzaGVz
IGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKKyAgICAgICAgICAgIC8vIG1vc3RseSBqdXN0IGEgZm9y
bWFsaXR5LgorICAgICAgICAgICAgY291bnRWYXJpYWJsZS0+cHJlZGljdChTcGVjSW50MzIpOwor
ICAgICAgICAgICAgY291bnRWYXJpYWJsZS0+bWVyZ2VJc1Byb2ZpdGFibGVUb1VuYm94KHRydWUp
OworICAgICAgICAgICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoU2V0QXJn
dW1lbnQsIE9wSW5mbyhjb3VudFZhcmlhYmxlKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+bG9jYWwoKSwgc2V0
QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBhcmd1bWVudFN0
YXJ0ID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAg
ICAgICAgICAgaWYgKHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhpc0FyZ3Vt
ZW50KSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1
bWVudCA9IDE7IGFyZ3VtZW50IDwgbWF4TnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CisgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3Rh
cnQgKyBhcmd1bWVudCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VT
aG91bGROZXZlclVuYm94KHRydWUpOyAvLyBXZSBjdXJyZW50bHkgaGF2ZSBub3doZXJlIHRvIHB1
dCB0aGUgdHlwZSBjaGVjayBvbiB0aGUgTG9hZFZhcmFyZ3MuIExvYWRWYXJhcmdzIGlzIGVmZmVj
dGZ1bCwgc28gYWZ0ZXIgaXQgZmluaXNoZXMsIHdlIGNhbm5vdCBleGl0LgorICAgICAgICAgICAg
ICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKHZh
cmlhYmxlKSk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZWdpc3Rlck9m
ZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7CisgICAgICAgIAogICAgICAgICBi
b29sIHJlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0
Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0LAog
ICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQs
IENhbGxlckRvZXNOb3JtYWxMaW5raW5nLCBwcmVkaWN0aW9uLApAQCAtMTQzNywxMSArMTU1OCw5
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBkbyBt
b3JlIGRldGFpbGVkIHBvbHl2YXJpYW50L3BvbHltb3JwaGljIHByb2ZpbGluZzsgYW5kIHNlY29u
ZCwgaXQgcmVkdWNlcyBjb21waWxlIHRpbWVzIGluCiAgICAgLy8gdGhlIERGRy4gQW5kIGJ5IHBv
bHl2YXJpYW50IHByb2ZpbGluZyB3ZSBtZWFuIHBvbHl2YXJpYW50IHByb2ZpbGluZyBvZiAqdGhp
cyogY2FsbC4gTm90ZSB0aGF0CiAgICAgLy8gd2UgY291bGQgaW1wcm92ZSB0aGF0IGFzcGVjdCBv
ZiB0aGlzIGJ5IGRvaW5nIHBvbHltb3JwaGljIGlubGluaW5nIGJ1dCBoYXZpbmcgdGhlIHByb2Zp
bGluZwotICAgIC8vIGFsc28uIEN1cnJlbnRseSB3ZSBvcHQgYWdhaW5zdCB0aGlzLCBidXQgaXQg
Y291bGQgYmUgaW50ZXJlc3RpbmcuIFRoYXQgd291bGQgcmVxdWlyZSBoYXZpbmcgYQotICAgIC8v
IHNlcGFyYXRlIG5vZGUgZm9yIGNhbGwgZWRnZSBwcm9maWxpbmcuCi0gICAgLy8gRklYTUU6IElu
dHJvZHVjZSB0aGUgbm90aW9uIG9mIGEgc2VwYXJhdGUgY2FsbCBlZGdlIHByb2ZpbGluZyBub2Rl
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYwMzMK
LSAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQ
b2x5bW9ycGhpY0NhbGxJbmxpbmluZygpKSB7CisgICAgLy8gYWxzby4KKyAgICBpZiAoIWlzRlRM
KG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0NhbGxJ
bmxpbmluZygpCisgICAgICAgIHx8IElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpKSB7
CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlu
bGluaW5nIChoYXJkKS5cbiIpOwogICAgICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJl
bnRDb2RlT3JpZ2luKCksICJcbiIpOwpAQCAtMTQ4Miw2ICsxNjAxLDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwg
Y3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgfQogICAgIAorICAgIGludCByZWdpc3Rl
ck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7CisgICAgCiAgICAgLy8gVGhp
cyBtYWtlcyBtZSB3aXNoIHRoYXQgd2Ugd2VyZSBpbiBTU0EgYWxsIHRoZSB0aW1lLiBXZSBuZWVk
IHRvIHBpY2sgYSB2YXJpYWJsZSBpbnRvIHdoaWNoIHRvCiAgICAgLy8gc3RvcmUgdGhlIGNhbGxl
ZSBzbyB0aGF0IGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byBhbGwgb2YgdGhlIGJsb2NrcyB3ZSdy
ZSBhYm91dCB0byBjcmVhdGUuIFdlCiAgICAgLy8gZ2V0IGF3YXkgd2l0aCBkb2luZyBhbiBpbW1l
ZGlhdGUtc2V0IGhlcmUgYmVjYXVzZSB3ZSB3b3VsZG4ndCBoYXZlIHBlcmZvcm1lZCBhbnkgc2lk
ZSBlZmZlY3RzCkBAIC0zMTEzLDQzICszMjM0LDcwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCB0aGlzUmVnID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmd1bWVudHMgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGZpcnN0RnJlZVJlZyA9
IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZmlyc3RW
YXJBcmdPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhcmd1bWVudHMsIGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBB
U1NFUlQoIW1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93
QXJndW1lbnRzKCkpOwotCi0gICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90
Q3JlYXRlZCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2FsbEZy
YW1lKCktPmFyZ3VtZW50cy5zaXplKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIExl
dCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9mZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUgbGFzdCB1
c2VkIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhp
bmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCi0gICAgICAgICAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOwotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0g
YXJnQ291bnQ7IC8vIFdlIHdpbGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KLSAgICAgICAg
ICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7IC8vIFdl
IHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCi0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgotICAgICAgICAgICAgcmVn
aXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAotICAgICAgICAgICAgICAg
IHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCi0gICAgICAgICAgICAgICAgLXJlZ2lzdGVyT2Zm
c2V0KTsKLQotICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGlmIChhcmd1
bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnVuY2hlY2tlZEFyZ3VtZW50
c1JlZ2lzdGVyKCkub2Zmc2V0KCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKQorICAgICAgICAgICAgICAgICAgICAmJiAh
SW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3MoaW5saW5lQ2FsbEZyYW1lKCktPmtpbmQpCisgICAg
ICAgICAgICAgICAgICAgICYmICFmaXJzdFZhckFyZ09mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRz
LnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21w
dXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNlZCByZWdp
c3RlciwgYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhp
bmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCisgICAgICAgICAgICAgICAgICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0IC09IGFyZ0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1
bWVudHMuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFt
ZSBoZWFkZXIuCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBh
bGlnbm1lbnQgcmlnaHQuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZz
ZXQpOworCisgICAgICAgICAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3Vs
ZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2Ug
aXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9u
ZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQor
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVO
YWtlZFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09E
RV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxl
ZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gRW1pdCBDYWxsRm9yd2FyZFZhcmFyZ3MKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB3ZSBjYW5ub3QgaW5saW5lIGZvcndhcmRlZCB2
YXJhcmdzIGNhbGxzIGluc2lkZSBhIHZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBjYWxsIGZy
YW1lLiBXZSB3aWxsIHByb2JhYmx5IGZpeCB0aGF0IG9uY2Ugd2UgZmluYWxseSBnZXQgcmlkIG9m
IHRoZQorICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBvYmplY3Qgc3BlY2lhbC1jYXNpbmcu
CisgICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2NhbGxW
YXJhcmdzRGF0YS5hZGQoKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNl
dCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgICAgICBDYWxsRm9yd2Fy
ZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAg
ICAgICAgICAgICAgIGdldChjYWxsZWUpLCBnZXQodGhpc1JlZykpOworICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0KHJlc3VsdFJlZywg
Y2FsbCk7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVGhlIGJ5dGVjb2RlIHdv
dWxkbid0IGhhdmUgc2V0IHVwIHRoZSBhcmd1bWVudHMuIEJ1dCB3ZSdsbCBkbyBpdCBhbmQgbWFr
ZSBpdAotICAgICAgICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9uZSBpdC4K
LSAgICAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5l
eHRSZWdpc3RlcisrKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSksIEltbWVkaWF0ZU5h
a2VkU2V0KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVu
dCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBo
YW5kbGVDYWxsKAotICAgICAgICAgICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9Q
Q09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwKLSAgICAgICAgICAgICAgICBjYWxsZWUsIGFy
Z0NvdW50LCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIENhbGxWYXJhcmdzLCBDb2RlRm9yQ2FsbCk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3MpOwogICAgICAgICB9CiAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICAgICAgaGFuZGxl
VmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3RWYXJhcmdzLCBDb2RlRm9y
Q29uc3RydWN0KTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvbnN0cnVjdF92YXJhcmdz
KTsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6CiAg
ICAgICAgICAgICAvLyBTdGF0aWNhbGx5IHNwZWN1bGF0ZSBmb3Igbm93LiBJdCBtYWtlcyBzZW5z
ZSB0byBsZXQgc3BlY3VsYXRlLW9ubHkgam5lcV9wdHIKICAgICAgICAgICAgIC8vIHN1cHBvcnQg
c2ltbWVyIGZvciBhIHdoaWxlIGJlZm9yZSBtYWtpbmcgaXQgbW9yZSBnZW5lcmFsLCBzaW5jZSBp
dCdzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTgyLDYgKzE4
Miw4IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNl
IG9wX3Rocm93X3N0YXRpY19lcnJvcjoKICAgICBjYXNlIG9wX2NhbGw6CiAgICAgY2FzZSBvcF9j
b25zdHJ1Y3Q6CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6CiAgICAgY2FzZSBvcF9jcmVh
dGVfYXJndW1lbnRzOgogICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOgpAQCAtMjIzLDE0
ICsyMjUsNiBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAg
ICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogICAgIH0KIAotICAgIGNhc2Ugb3BfY2Fs
bF92YXJhcmdzOgotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgcGNb
NF0udS5vcGVyYW5kID09IGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQot
ICAgICAgICAgICAgJiYgIXBjWzZdLnUub3BlcmFuZCkKLSAgICAgICAgICAgIHJldHVybiBDYW5J
bmxpbmU7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGFuZGxlIHRoaXMuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjYKLSAgICAg
ICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0KICAgICBjYXNlIG9wX25ld19yZWdleHA6IAogICAg
IGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CiAgICAgY2FzZSBvcF9uZXdfZnVu
YzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAko
cmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw4ICs4Niw2IEBAIGlu
bGluZSBDYXBhYmlsaXR5TGV2ZWwgZnVuY3Rpb25DYXBhYmlsaXQKICAgICAgICAgcmV0dXJuIGxl
YXN0VXBwZXJCb3VuZChDYW5Db21waWxlQW5kSW5saW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZl
bCk7CiAgICAgaWYgKG1pZ2h0Q29tcGlsZSAmJiAhbWlnaHRJbmxpbmUpCiAgICAgICAgIHJldHVy
biBsZWFzdFVwcGVyQm91bmQoQ2FuQ29tcGlsZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwot
ICAgIGlmICghbWlnaHRDb21waWxlICYmIG1pZ2h0SW5saW5lKQotICAgICAgICByZXR1cm4gbGVh
c3RVcHBlckJvdW5kKENhbklubGluZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwogICAgIGlm
ICghbWlnaHRDb21waWxlICYmICFtaWdodElubGluZSkKICAgICAgICAgcmV0dXJuIENhbm5vdENv
bXBpbGU7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzY1LDYgKzM2NSw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBO
YXRpdmVDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3
YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgY2FzZSBUb1ByaW1p
dGl2ZToKICAgICBjYXNlIEluOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOgpA
QCAtNDAxLDYgKzQwNCwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICAvLyBU
aGlzIGFjdHVhbGx5IHdyaXRlcyB0byBsb2NhbCB2YXJpYWJsZXMgYXMgd2VsbC4gQnV0IHdoZW4g
aXQgcmVhZHMgdGhlIGFycmF5LCBpdCBkb2VzCisgICAgICAgIC8vIHNvIGluIGEgd2F5IHRoYXQg
bWF5IHRyaWdnZXIgZ2V0dGVycyBvciB2YXJpb3VzIHRyYXBzLgorICAgICAgICByZWFkKFdvcmxk
KTsKKyAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAg
Y2FzZSBHZXRMb2NhbFVubGlua2VkOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZh
cmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkp
KSwgbm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOTIsNyArMjkyLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBlbnVtIENhcGFiaWxpdHlMZXZlbCB7CiAgICAgQ2Fubm90Q29tcGlsZSwKLSAg
ICBDYW5JbmxpbmUsCiAgICAgQ2FuQ29tcGlsZSwKICAgICBDYW5Db21waWxlQW5kSW5saW5lLAog
ICAgIENhcGFiaWxpdHlMZXZlbE5vdFNldApAQCAtMzEyLDcgKzMxMSw2IEBAIGlubGluZSBib29s
IGNhbkNvbXBpbGUoQ2FwYWJpbGl0eUxldmVsIGwKIGlubGluZSBib29sIGNhbklubGluZShDYXBh
YmlsaXR5TGV2ZWwgbGV2ZWwpCiB7CiAgICAgc3dpdGNoIChsZXZlbCkgewotICAgIGNhc2UgQ2Fu
SW5saW5lOgogICAgIGNhc2UgQ2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgZGVmYXVsdDoKQEAgLTMyNSwxNCArMzIzLDYgQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBsZWFzdFVwcGVyQm91bmQoQwogICAgIHN3aXRjaCAoYSkgewogICAgIGNhc2UgQ2Fubm90
Q29tcGlsZToKICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgY2FzZSBDYW5Jbmxp
bmU6Ci0gICAgICAgIHN3aXRjaCAoYikgewotICAgICAgICBjYXNlIENhbklubGluZToKLSAgICAg
ICAgY2FzZSBDYW5Db21waWxlQW5kSW5saW5lOgotICAgICAgICAgICAgcmV0dXJuIENhbklubGlu
ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwot
ICAgICAgICB9CiAgICAgY2FzZSBDYW5Db21waWxlOgogICAgICAgICBzd2l0Y2ggKGIpIHsKICAg
ICAgICAgY2FzZSBDYW5Db21waWxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDEwIEBAIGJvb2wg
ZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENvbXBhcmVTdHJpY3RF
cToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFy
YXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoK
KyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAg
Y2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBCcmVha3BvaW50OgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MjIsNiArODIy
LDcgQEAgcHVibGljOgogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aUdldEJ5
T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQdXRCeU9m
ZnNldERhdGE7CiAgICAgQmFnPE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1fb2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YTsKKyAgICBCYXI8Q2FsbFZhcmFyZ3NEYXRhPiBtX2NhbGxWYXJhcmdz
RGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxl
RGF0YTsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNv
ZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBib29sIG1faGFzQXJndW1lbnRz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25I
YW5kbGVyRnJvbUNhbGxlckZyYW1lIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5k
IHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2
bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMihtX2dyYXBoLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2KQogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHVz
ZSB0aGUgY2FsbCBhYnN0cmFjdGlvbiwgYnV0IHRoaXMgaXMgY3VycmVudGx5IGluIHRoZSBTcGVj
dWxhdGl2ZUpJVCBsYXllciEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywyMCBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAg
ICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7CiB9OwogCitzdHJ1Y3QgQ2FsbFZhcmFyZ3NEYXRhIHsK
KyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQ7Cit9OworCitzdHJ1Y3QgTG9hZFZhcmFyZ3NEYXRh
IHsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhcnQ7IC8vIExvY2FsIGZvciB0aGUgZmlyc3QgZWxl
bWVudC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY291bnQ7IC8vIExvY2FsIGZvciB0aGUgY291bnQu
CisgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVTdGFydDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bWFjaGluZUNvdW50OworICAgIHVuc2lnbmVkIG9mZnNldDsgLy8gV2hpY2ggYXJyYXkgZWxlbWVu
dCB0byBzdGFydCB3aXRoLiBVc3VhbGx5IHRoaXMgaXMgMC4KKyAgICB1bnNpZ25lZCBtYW5kYXRv
cnlNaW5pbXVtOyAvLyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9uIHRoZSBzdGFjayB0aGF0IG11
c3QgYmUgaW5pdGlhbGl6ZWQ7IGlmIHRoZSBhcnJheSBpcyB0b28gc2hvcnQgdGhlbiB0aGUgbWlz
c2luZyBlbGVtZW50cyBtdXN0IGdldCB1bmRlZmluZWQuCisgICAgdW5zaWduZWQgbGltaXQ7IC8v
IE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGxvYWQuCit9OworCiAvLyBUaGlzIHR5cGUg
dXNlZCBpbiBwYXNzaW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9y
OwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRl
eCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCiAvLyBhIGNvbnN0YW50IGluZGV4
LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGUqLgpAQCAtODg4LDYgKzkwMiwz
NSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJy
aWVyPFVua25vd24+Kj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc0NhbGxW
YXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2Fz
ZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAg
IGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgQ2FsbFZhcmFyZ3NEYXRhKiBjYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGhhc0NhbGxWYXJhcmdzRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxD
YWxsVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzTG9h
ZFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IExvYWRWYXJhcmdz
OworICAgIH0KKyAgICAKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJhcmdzRGF0YSgpCisg
ICAgeworICAgICAgICBBU1NFUlQoaGFzTG9hZFZhcmFyZ3NEYXRhKCkpOworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PExvYWRWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAg
CiAgICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKICAgICAgICAgcmV0dXJuICEhcmVzdWx0KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgLyogdGhpcyBtdXN0IGJlIHRoZSBkaXJlY3RseSBzdWJzZXF1ZW50IHByb3BlcnR5
IHB1dC4gTm90ZSB0aGF0IFB1dEJ5VmFsICovXAogICAgIC8qIG9wY29kZXMgdXNlIFZhckFyZ3Mg
YmVhdXNlIHRoZXkgbWF5IGhhdmUgdXAgdG8gNCBjaGlsZHJlbi4gKi9cCiAgICAgbWFjcm8oR2V0
QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhMb2Fk
VmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dEJ5VmFsRGlyZWN0LCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQdXRCeVZhbCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxB
bGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCkBAIC0yMTcsNiArMjE4
LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIENhbGxzLiAqL1wK
ICAgICBtYWNybyhDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKICAgICBtYWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1hY3JvKENhbGxWYXJhcmdzLCBOb2Rl
UmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ2FsbEZvcndhcmRWYXJh
cmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ29uc3Ry
dWN0VmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFy
QXJncykgXAogICAgIG1hY3JvKE5hdGl2ZUNvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUsNiArMTU1LDE3IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpl
eGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdz
OiB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0
YSgpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50
KSA9CisgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0
YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxpbWl0OyBpLS07
KSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKSA9CisgICAgICAgICAgICAgICAgQXZh
aWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEt
Pm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAxOCw2ICsxMDE4LDI3IEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZSgKICAgICBzZXQtPm5vdGlmeVdy
aXRlKHZtLCB2YWx1ZSwgIkV4ZWN1dGVkIE5vdGlmeVdyaXRlIik7CiB9CiAKK2ludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkQXJndW1lbnRzKTsKKyAgICAKKyAgICByZXR1cm4gc2l6ZU9mVmFyYXJncyhleGVjLCBh
cmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBmaXJzdEVsZW1lbnRE
ZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCBpbnQzMl90IG9mZnNldCwgaW50
MzJfdCBsZW5ndGgsIGludDMyX3QgbWFuZGF0b3J5TWluaW11bSkKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRz
KTsKKyAgICAKKyAgICBsb2FkVmFyYXJncyhleGVjLCBWaXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVt
ZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOworICAgIAorICAgIGZvciAoaW50
MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytpKQorICAgICAgICBleGVj
LT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7Cit9CisKIGRvdWJsZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCiB7
CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTI1LDYgKzEyNSw4IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMK
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJs
ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOwogY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRh
YmxlSW5kZXgsIEpTU3RyaW5nKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5
V3JpdGUoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUp
OworaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqLCBpbnQz
Ml90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBv
ZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pOwogCiBpbnQ2
NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydEJveGVkRG91YmxlVG9JbnQ1MihFbmNv
ZGVkSlNWYWx1ZSk7CiBpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydERvdWJs
ZVRvSW50NTIoZG91YmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTMzLDExICsxMzMsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgICAgICBtX3JlYWQo
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpD
YWxsZWUpKTsKKyAgICAgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhpbmxp
bmVDYWxsRnJhbWUtPmtpbmQpKQorICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHdyaXRlVG9wKCkKICAgICB7Cisg
ICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB3ZSBub3RlIHRoZSB3cml0ZXMgdG8gdGhlIGxvY2FscyB0aGF0IHdpbGwgc3Rv
cmUgdGhlIGFycmF5IGVsZW1lbnRzIGFuZAorICAgICAgICAgICAgLy8gY291bnQuCisgICAgICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwor
ICAgICAgICAgICAgbV93cml0ZShkYXRhLT5jb3VudCk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKKyAgICAgICAgICAgICAgICBtX3dyaXRlKFZpcnR1
YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3Bl
Y2lhbCBmb3IgQ2FsbEZvcndhcmRWYXJhcmdzLCBzaW5jZSBpdCByZWFkcworICAgICAgICAvLyBv
dXIgYXJndW1lbnRzIHRoZSBzYW1lIHdheSB0aGF0IGFueSBlZmZlY3RmdWwgdGhpbmcgbWlnaHQu
CisgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7KQogICAgICAgICAgICAgICAgIG1fd3JpdGUodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE4OSw2ICsxODksMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBz
dAogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJn
czoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgog
ICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJh
eVdpdGhTaXplOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjQs
MzcgKzYyNCwxNjcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1pc2NTdHJpY3RFcQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogewotICAgIGJvb2wg
aXNDYWxsID0gbm9kZS0+b3AoKSA9PSBDYWxsOwotICAgIGlmICghaXNDYWxsKQotICAgICAgICBE
RkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsK
LSAgICAKLSAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3Qg
cGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKLSAgICAvLyBmb3IgaXQuCi0gICAgaW50
IGR1bW15VGhpc0FyZ3VtZW50ID0gaXNDYWxsID8gMCA6IDE7CisgICAgQ2FsbExpbmtJbmZvOjpD
YWxsVHlwZSBjYWxsVHlwZTsKKyAgICBib29sIGlzQ2FsbDsKKyAgICBib29sIGlzVmFyYXJnczsK
KyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGw6CisgICAgICAgIGNhbGxU
eXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAg
ICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdHJ1Y3Q6
CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAgICAgIGlz
Q2FsbCA9IGZhbHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAg
ICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOworICAgICAgICBpc0Nh
bGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZv
OjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNW
YXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREZH
X0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwg
MCk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGlzQ2FsbCA/
IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgIC8vIEdv
dHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlzIHRyaWNraWVyLgorICAg
IGlmIChpc1ZhcmFyZ3MpIHsKKyAgICAgICAgLy8gMSkgZ2V0IHRoZSBhcmd1bWVudHMKKyAgICAg
ICAgLy8gMikgZmx1c2ggcmVnaXN0ZXJzCisgICAgICAgIC8vIDMpIHNldCB1cCB0aGUgY2FsbCBm
cmFtZQorICAgICAgICAvLyA0KSBnZXQgdGhlIGNhbGxlZSBhbmQgInRoaXMiIGFuZCBoYW5kbGUg
dGhlbQorICAgICAgICAvLyA1KSBmbHVzaCByZWdpc3RlcnMgYWdhaW4KKyAgICAgICAgCisgICAg
ICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworCisg
ICAgICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7
CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3Mp
IHsKKyAgICAgICAgICAgIC8vIFdlIGF2b2lkIGNhbGxpbmcgZmx1c2hSZWdpc3RlcnMoKSBpbnNp
ZGUgdGhlIGNvbnRyb2wgZmxvdyBvZiBDYWxsRm9yd2FyZFZhcmFyZ3MuCisgICAgICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhdXRvIGxvYWRB
cmd1bWVudHNHUFIgPSBbJl0gKEdQUlJlZyByZXNlcnZlZEdQUikgeworICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICAgICAgYXJn
dW1lbnRzR1BSID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIocmVzZXJ2ZWRHUFIpOwor
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgp
Lm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
ICAgICAgICAgICAgIGxvY2socmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAg
YXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAgICAgICAgICAgIGlmIChyZXNl
cnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICB1bmxvY2socmVz
ZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIxID0gSklUQ29tcGlsZXI6
OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCByZXNlcnZlZEdQUik7CisgICAgICAgICAg
ICBzY3JhdGNoR1BSMiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQ
Uiwgc2NyYXRjaEdQUjEsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0g
SklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAg
IGxvYWRBcmd1bWVudHNHUFIoSW52YWxpZEdQUlJlZyk7CisgICAgICAgIAorICAgICAgICAvLyBB
dCB0aGlzIHBvaW50IHdlIGhhdmUgdGhlIHdob2xlIHJlZ2lzdGVyIGZpbGUgdG8gb3Vyc2VsdmVz
LCBhbmQgYXJndW1lbnRzR1BSIGhhcyB0aGUKKyAgICAgICAgLy8gYXJndW1lbnRzIHJlZ2lzdGVy
LiBTZWxlY3Qgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAgICAgCisgICAgICAgIC8vIFdl
IHdpbGwgdXNlIHNjcmF0Y2hHUFIyIHRvIHBvaW50IHRvIG91ciBzdGFjayBmcmFtZS4KKworICAg
ICAgICB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyA9IG1faml0LmdyYXBoKCkubV9uZXh0TWFj
aGluZUxvY2FsOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGF2ZUFyZ3Vt
ZW50czsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8v
IERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRpb24u
CisgICAgICAgICAgICAvLyBGSVhNRTogZG8gdGhpcyBvcHRpbWl6YXRpb24gYXQgdGhlIElSIGxl
dmVsIGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYnkgdGVzdGluZyB0aGUKKyAgICAgICAgICAgIC8v
IGFyZ3VtZW50cyByZWdpc3Rlci4gVGhpcyB3aWxsIGhhcHBlbiBvbmNlIHdlIGdldCByaWQgb2Yg
dGhlIGFyZ3VtZW50cyBsYXp5IGNyZWF0aW9uIGFuZAorICAgICAgICAgICAgLy8gbGF6eSB0ZWFy
LW9mZi4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChK
SVRDb21waWxlcjo6Tm9uWmVybywgYXJndW1lbnRzR1BSKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKG51bVVzZWRTdGFja1Nsb3RzKSwgc2NyYXRj
aEdQUjIpOworICAgICAgICAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UobV9qaXQs
IHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNl
dCwgc2xvd0Nhc2UpOworICAgICAgICAgICAgcmVzdWx0R1BSID0gc2NyYXRjaEdQUjI7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGhhdmVBcmd1bWVudHMgPSBtX2ppdC5qdW1wKCk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0KKworICAgICAgICBERkdf
QVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlzRmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFJpZ2h0IG5vdywgYXJndW1lbnRzIGlzIGluIGFyZ3VtZW50c0dQUiBhbmQgdGhlIHJl
Z2lzdGVyIGZpbGUgaXMgZmx1c2hlZC4KKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
aXplRnJhbWVGb3JWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzR1BS
LCBudW1Vc2VkU3RhY2tTbG90cywgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgICAgICAKKyAgICAg
ICAgLy8gTm93IHdlIGhhdmUgdGhlIGFyZ3VtZW50IGNvdW50IG9mIHRoZSBjYWxsZWUgZnJhbWUs
IGJ1dCB3ZSd2ZSBsb3N0IHRoZSBhcmd1bWVudHMgb3BlcmFuZC4KKyAgICAgICAgLy8gUmVjb25z
dHJ1Y3QgdGhlIGFyZ3VtZW50cyBvcGVyYW5kIHdoaWxlIHByZXNlcnZpbmcgdGhlIGNhbGxlZSBm
cmFtZS4KKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKG51bVVzZWRTdGFja1Nsb3RzKSwgc2Ny
YXRjaEdQUjEpOworICAgICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKG1faml0LCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMSk7CisgICAgICAg
IG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9m
KHZvaWQqKSkpKSwgc2NyYXRjaEdQUjEsIEdQUkluZm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJh
bWUsIHNjcmF0Y2hHUFIxLCBhcmd1bWVudHNHUFIsIGZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBD
YWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJm1faml0
KTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSwgcmVzdWx0R1BSLCBHUFJJbmZvOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgICAgIAorICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlz
Rmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGFyZ3Vt
ZW50cyBhcnJheSBhbnltb3JlLgorICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGlzQ2FsbCkgeworICAgICAgICAgICAgLy8gTm93IHNldCB1cCB0aGUg
InRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc0FyZ3VtZW50
KHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzQXJndW1lbnRH
UFIgPSB0aGlzQXJndW1lbnQuZ3ByKCk7CisgICAgICAgICAgICB0aGlzQXJndW1lbnQudXNlKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQodGhpc0FyZ3VtZW50c0dQ
UiwgbV9qaXQuY2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBw
YXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQorICAgICAgICAvLyBmb3IgaXQuCisgICAg
ICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOwogICAgIAotICAgIEVk
Z2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJz
dENoaWxkKCldOwotICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMg
dGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlCi0gICAgLy8gYXJn
dW1lbnRzLgotICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7
CisgICAgICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgdGhlIGZ1
bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlCisgICAgICAgIC8vIGFyZ3Vt
ZW50cy4KKyAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0g
MTsKICAgICAKLSAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1
bWVudDsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJn
dW1lbnQ7CiAgICAgCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKTsKICAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFy
Z3M7IGkrKykgewotICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcodGhpcywgYXJnRWRnZSk7Ci0gICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3By
KCk7Ci0gICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1QYXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0Lmdy
YXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7CisgICAgICAgICAgICBH
UFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOworICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwogICAg
ICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50
U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQo
YXJnR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7
CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2Fs
bGVlRWRnZSk7CiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKLSAgICB1c2Uo
Y2FsbGVlRWRnZSk7CisgICAgY2FsbGVlLnVzZSgpOwogICAgIG1faml0LnN0b3JlNjQoY2FsbGVl
R1BSLCBtX2ppdC5jYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgCiAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKQEAgLTY5Miw2ICs4MjIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlR1BSID0gY2Fs
bGVlR1BSOwogICAgIAogICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRh
cmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7CisgICAgCisgICAgLy8gSWYgd2Ugd2VyZSB2YXJh
cmdzLCB0aGVuIGFmdGVyIHRoZSBjYWxscyBhcmUgZG9uZSwgd2UgbmVlZCB0byByZWVzdGFibGlz
aCBvdXIgc3RhY2sgcG9pbnRlci4KKyAgICBpZiAoaXNWYXJhcmdzKQorICAgICAgICBtX2ppdC5h
ZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIH0KIAogLy8gQ2xhbmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtb
Y2xhbmc6OmZhbGx0aHJvdWdoXV0gaW4gdGVtcGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0
ZSBleHBhbnNpb24gdXNlcyBpdApAQCAtNDIzMSw5ICs0MzY1LDUyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgZW1pdENhbGwobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAg
ICAgICAKKyAgICAgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICAgICAgeworICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50
c0dQUiwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgbG9jayhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1
bWVudHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OworICAgICAgICB9CisgICAgICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxs
IGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCisg
ICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQg
aXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAgICAvLyBzdGFu
ZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQg
KmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFzdCB0aGUgc2l6
aW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxNDQ4CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAg
ICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgICAgICAgICBUcnVzdGVk
SW1tMzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTMyKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOwor
ICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgZGF0
YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNldCwgZGF0
YS0+bGVuZ3RoLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgCisgICAgICAgIG5v
UmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2Ug
Q3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgCkBA
IC00MzM4LDkgKzQ1MTUsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1l
bnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsK
LSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAg
JiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUtPmtpbmQpKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKAorICAgICAgICAg
ICAgICAgIFRydXN0ZWRJbW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMSksCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50
UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVh
bFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZXN1bHRHUFIpOworICAgICAgICB9CiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQzNTQsMjAgKzQ1NDIsMjIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IoCiAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAg
ICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAg
ICYmICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lLT5raW5kKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZSgKICAgICAgICAg
ICAgICAgICBJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSksCiAgICAgICAgICAg
ICAgICAgcmVzdWx0R1BSKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0
ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lz
dGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRH
UFIpOwogICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiB0
aGUgc2xvdyBwYXRoIGdlbmVyYXRvciBzaG91bGQgcGVyZm9ybSBhIGZvcndhcmQgc3BlY3VsYXRp
b24gdGhhdCB0aGUKLSAgICAgICAgLy8gcmVzdWx0IGlzIGFuIGludGVnZXIuIEZvciBub3cgd2Ug
cG9zdHBvbmUgdGhlIHNwZWN1bGF0aW9uIGJ5IGhhdmluZyB0aGlzIHJldHVybgotICAgICAgICAv
LyBhIEpTVmFsdWUuCi0gICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBjcmVhdGVkLCB0aGlzLCBv
cGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgsIHJlc3VsdEdQUiwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE3OTk3MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTc4LDcgKzU3OCw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAot
I2lmbmRlZiBOREVCVUcKICAgICAvLyBVc2VkIHRvIEFTU0VSVCBmbHVzaFJlZ2lzdGVycygpIGhh
cyBiZWVuIGNhbGxlZCBwcmlvciB0bwogICAgIC8vIGNhbGxpbmcgb3V0IGZyb20gSklUIGNvZGUg
dG8gYSBDIGhlbHBlciBmdW5jdGlvbi4KICAgICBib29sIGlzRmx1c2hlZCgpCkBAIC01OTMsNyAr
NTkyLDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
LSNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6
OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChOb2RlKiBub2RlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
Qml0VmVjdG9yIHVzZWRMb2NhbHM7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3Nl
IHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCi0gICAgICAgIGJvb2wgaGFzR2V0TG9j
YWxVbmxpbmtlZCA9IGZhbHNlOworICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9
IGZhbHNlOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBA
IC04MSw3ICs4MSwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB1c2VkTG9jYWxzLnNldChvcGVyYW5kLnRvTG9jYWwoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGhhc0dldExvY2FsVW5saW5rZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB1c2Vk
TG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRh
dGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkg
KyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ug
c2hvdWxkbid0IGhhcHBlbi4KKyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZp
eHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKQEAgLTExMyw2ICsxMjgsMTEgQEAgcHVibGljOgogICAg
ICAgICAgICAgdXNlZExvY2Fscy5zZXQoYXJndW1lbnRzUmVnaXN0ZXIudG9Mb2NhbCgpKTsKICAg
ICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1
bWVudHNSZWdpc3RlcikudG9Mb2NhbCgpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGlubGluZUNhbGxGcmFtZS0+a2luZCkpIHsKKyAg
ICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAg
ICAgICAgICAgIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpOyBhcmd1bWVudC0tID4gMTspIHsKICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNl
dChWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSArCkBAIC0xNDgsMjQgKzE2OCwyMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltsb2NhbF0gPT0gVUlOVF9NQVgpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAgICAg
ICAgIGFsbG9jYXRpb25bdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpXSk7CisgICAgICAgICAg
ICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUt
PmxvY2FsKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCkt
PnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
c1JlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgYWxs
b2NhdGlvbltjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKS50b0xvY2FsKCldKTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlciA9CisgICAgICAgICAg
ICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3Rlcigp
KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKAotICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bCi0gICAgICAgICAgICAgICAgICAgIHVubW9kaWZp
ZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygp
LT5hcmd1bWVudHNSZWdpc3RlcigpKS50b0xvY2FsKCldKQorICAgICAgICAgICAgICAgIGFzc2ln
bihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoY29kZUJsb2NrKCktPmFy
Z3VtZW50c1JlZ2lzdGVyKCkpKQogICAgICAgICAgICAgICAgID09IHVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpOwogICAgICAgICAgICAgY29kZUJsb2NrKCkt
PnNldEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT51bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0
ZXIoKS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRBY3RpdmF0aW9u
UmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2Nh
dGlvbltjb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkudG9Mb2NhbCgpXSkpOworICAg
ICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+YWN0aXZhdGlvblJl
Z2lzdGVyKCkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gVGhpcyByZWdpc3Rl
ciBpcyBuZXZlciB2YWxpZCBmb3IgREZHIGNvZGUgYmxvY2tzLgpAQCAtMTc2LDE1ICsxOTMsMTkg
QEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW21fZ3JhcGguYXJndW1l
bnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKS50b0xvY2FsKCldKTsKKyAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyID0gYXNzaWduKAorICAgICAg
ICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlu
bGluZUNhbGxGcmFtZSkpOwogCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5h
cmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKS50b0xvY2FsKCldKQorICAgICAg
ICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lz
dGVyKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSkpCiAgICAg
ICAgICAgICAgICAgICAgID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhpbmxpbmVDYWxsRnJh
bWUtPmtpbmQpKSB7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHND
b3VudFJlZ2lzdGVyID0gYXNzaWduKAorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KTsgYXJndW1lbnQtLSA+IDE7KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYg
cG9zaXRpb24gPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAg
ICAgIGRhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjI3LDkgKzI0
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnBhcmFtZXRl
ckNvdW50KCkpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzeW1ib2xUYWJsZS0+
cGFyYW1ldGVyQ291bnQoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJn
dW1lbnRzW2ldID0gc2xvd0FyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1lbnRzW2ldLmluZGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoYWxsb2NhdGlvbltyZWcudG9Mb2NhbCgpXSkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBhc3NpZ24oYWxsb2NhdGlvbiwgVmlydHVh
bFJlZ2lzdGVyKHNsb3dBcmd1bWV0c1tpXS5pbmRleCkpLm9mZnNldCgpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zbG93QXJndW1l
bnRzID0gV1RGOjptb3ZlKG5ld1Nsb3dBcmd1bWVudHMpOwpAQCAtMjM3LDcgKzI1Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRml4IEdldExvY2FsVW5saW5r
ZWQncyB2YXJpYWJsZSByZWZlcmVuY2VzLgotICAgICAgICBpZiAoaGFzR2V0TG9jYWxVbmxpbmtl
ZCkgeworICAgICAgICBpZiAoaGFzTm9kZXNUaGF0TmVlZEZpeHVwKSB7CiAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKQEAgLTI0NiwxMCAr
MjY1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnVubGlua2Vk
TG9jYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoYWxsb2NhdGlvbltvcGVyYW5kLnRvTG9jYWwoKV0pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwob3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1hY2hpbmVMb2NhbChhc3NpZ24oYWxsb2Nh
dGlvbiwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9j
YXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hp
bmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgCkBAIC0yNjIsNiArMjg1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNz
aWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlciBz
cmMpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gc3JjOworICAgICAg
ICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0
aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgpXTsKKyAgICAgICAgICAgIGlmIChteUFs
bG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KIH07CiAKIGJvb2wgcGVyZm9ybVN0YWNrTGF5b3V0KEdyYXBo
JiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsNiArMTIwLDEwIEBA
IGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFN0b3Jl
QmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0
OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Cisg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2Fz
ZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgVmFsdWVU
b0ludDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShy
ZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDIwIEBAIHN0YXRpYyB2b2lkIGR1bXBE
YXRhU2VjdGlvbihEYXRhU2VjdGlvbioKICAgICB9CiB9CiAKK3N0YXRpYyBpbnQgb2Zmc2V0T2ZT
dGFja1JlZ2lvbihTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwLCB1aW50MzJfdCBzdGFj
a21hcElEKQoreworICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVj
b3JkTWFwLmZpbmQoc3RhY2ttYXBJRCk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBpdGVy
LmVuZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsK
KyAgICBMb2NhdGlvbiBjYXB0dXJlZExvY2F0aW9uID0KKyAgICAgICAgTG9jYXRpb246OmZvclN0
YWNrbWFwcyhudWxscHRyLCBpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnNbMF0pOworICAgIFJFTEVB
U0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24ua2luZCgpID09IExvY2F0aW9uOjpSZWdpc3Rlcik7
CisgICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExvY2F0aW9u
LmFkZGVuZCgpICUgc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIHJldHVybiBjYXB0dXJlZExvY2F0
aW9uLmFkZGVuZCgpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
RGVzY3JpcHRvclR5cGU+CiB2b2lkIGdlbmVyYXRlSUNGYXN0UGF0aCgKICAgICBTdGF0ZSYgc3Rh
dGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5j
dGlvbiwKQEAgLTI0Myw2ICsyNTcsMzIgQEAgc3RhdGljIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnNGb3IoY29ucwogICAgIHJldHVybiBSZWdpc3RlclNldChyZWNvcmQudXNlZFJlZ2lzdGVyU2V0
KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDYWxsVHlwZT4KK3ZvaWQgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhWZWN0b3I8
Q2FsbFR5cGU+JiBjYWxscywgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCkKK3sKKyAg
ICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3
ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KKyAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhh
dCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0
ZS4KKworICAgIFZlY3RvcjxDYWxsVHlwZT4gb2xkQ2FsbHM7CisgICAgb2xkQ2FsbHMuc3dhcChj
YWxscyk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhbGxzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIENhbGxUeXBlJiBjYWxsID0gb2xkQ2FsbHNbaV07CisgICAgICAg
IAorICAgICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1h
cC5maW5kKGNhbGwuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFw
LmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAg
IENhbGxUeXBlIGNvcHkgPSBjYWxsOworICAgICAgICAgICAgY29weS5tX2luc3RydWN0aW9uT2Zm
c2V0ID0gaXRlci0+dmFsdWVbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBjYWxs
cy5hcHBlbmQoY29weSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnNvcnQoc3RhdGUu
anNDYWxscy5iZWdpbigpLCBzdGF0ZS5qc0NhbGxzLmVuZCgpKTsKK30KKwogc3RhdGljIHZvaWQg
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVENvZGUqIGppdENvZGUsIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRl
ZEZ1bmN0aW9uLAogICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXAsIGJvb2wgZGlk
U2VlVW53aW5kSW5mbykKQEAgLTI1MSwxNiArMjkxLDE0IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0
aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICBWTSYgdm0gPSBncmFwaC5tX3ZtOwogICAgIFN0YWNr
TWFwcyBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CiAgICAgCi0gICAgU3RhY2tNYXBz
OjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5jYXB0dXJl
ZFN0YWNrbWFwSUQpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgp
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsKLSAgICBM
b2NhdGlvbiBjYXB0dXJlZExvY2F0aW9uID0KLSAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFw
cygmaml0Q29kZS0+c3RhY2ttYXBzLCBpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnNbMF0pOwotICAg
IFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24ua2luZCgpID09IExvY2F0aW9uOjpSZWdp
c3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExv
Y2F0aW9uLmFkZGVuZCgpICUgc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgIGludDMyX3QgbG9jYWxz
T2Zmc2V0ID0gY2FwdHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAvIHNpemVvZihSZWdpc3RlcikgKyBn
cmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgaW50IGxvY2Fsc09mZnNldCA9CisgICAgICAg
IG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQp
ICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOworICAgIAorICAgIGludCB2YXJhcmdzU3BpbGxT
bG90c09mZnNldDsKKyAgICBpZiAoc3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEICE9
IFVJTlRfTUFYKQorICAgICAgICB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNldE9mU3Rh
Y2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpOwor
ICAgIGVsc2UKKyAgICAgICAgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQgPSAwOwogICAgIAogICAg
IGZvciAodW5zaWduZWQgaSA9IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0t
OykgewogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGdyYXBoLm1f
aW5saW5lVmFyaWFibGVEYXRhW2ldLmlubGluZUNhbGxGcmFtZTsKQEAgLTQ0NCw3ICs0ODIsNiBA
QCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmNoZWNrSW5z
LnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgQ2hlY2tJbkRlc2NyaXB0b3ImIGNoZWNrSW4g
PSBzdGF0ZS5jaGVja0luc1tpXTsKICAgICAgICAgICAgIApAQCAtNDgwLDcgKzUxNyw2IEBAIHN0
YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBj
aGVja0luLm1fZ2VuZXJhdG9ycy5hcHBlbmQoQ2hlY2tJbkdlbmVyYXRvcihzdHViSW5mbywgc2xv
d0NhbGwsIGJlZ2luKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAgICAKICAg
ICAgICAgZXhjZXB0aW9uVGFyZ2V0LmxpbmsoJnNsb3dQYXRoSklUKTsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uSnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsKQEAgLTUw
NywyNSArNTQzLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAog
ICAgICAgICB9IAogICAgIH0KICAgICAKLSAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWly
ZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0K
LSAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9u
ZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KLSAgICBWZWN0b3I8SlNDYWxsPiBvbGRDYWxs
cyA9IHN0YXRlLmpzQ2FsbHM7Ci0gICAgc3RhdGUuanNDYWxscy5yZXNpemUoMCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEpT
Q2FsbCYgY2FsbCA9IG9sZENhbGxzW2ldOwotICAgICAgICAKLSAgICAgICAgU3RhY2tNYXBzOjpS
ZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQo
KSk7Ci0gICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52YWx1ZS5z
aXplKCk7ICsraikgewotICAgICAgICAgICAgSlNDYWxsIGNvcHkgPSBjYWxsOwotICAgICAgICAg
ICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWVbal0uaW5zdHJ1Y3Rpb25P
ZmZzZXQ7Ci0gICAgICAgICAgICBzdGF0ZS5qc0NhbGxzLmFwcGVuZChjb3B5KTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBzdGQ6OnNvcnQoc3RhdGUuanNDYWxscy5iZWdpbigpLCBzdGF0
ZS5qc0NhbGxzLmVuZCgpKTsKKyAgICBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpz
Q2FsbHMsIHJlY29yZE1hcCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuanND
YWxscy5zaXplKCk7IGktLTspIHsKICAgICAgICAgSlNDYWxsJiBjYWxsID0gc3RhdGUuanNDYWxs
c1tpXTsKQEAgLTU0Nyw2ICs1NjUsMjkgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9u
U3RhY2tNYXBzKAogICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIpOwogICAgIH0KICAg
ICAKKyAgICBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzQ2FsbHNWYXJhcmdzZXMs
IHJlY29yZE1hcCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuanNDYWxsVmFy
YXJnc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICBKU0NhbGxWYXJhcmdzJiBjYWxsID0gc3Rh
dGUuanNDYWxsVmFyYXJnc2VzW2ldOworICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGZh
c3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0KGZhc3RQYXRoSklU
LCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCk7CisgICAgICAgIAorICAgICAgICBjaGFyKiBzdGFy
dE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNhbGwubV9p
bnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgc2l6ZV90IHNpemVPZklDID0gc2l6ZU9mSUNGb3Io
Y2FsbC5ub2RlKCkpOworCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgZmFzdFBh
dGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMpOworICAgICAgICBpZiAoIWxpbmtCdWZmZXIuaXNW
YWxpZCgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gaW5zZXJ0IGlubGluZSBj
YWNoZSBmb3IgdmFyYXJncyBjYWxsIGJlY2F1c2Ugd2UgdGhvdWdodCB0aGUgc2l6ZSB3b3VsZCBi
ZSAiLCBzaXplT2ZJQywgIiBidXQgaXQgZW5kZWQgdXAgYmVpbmcgIiwgZmFzdFBhdGhKSVQubV9h
c3NlbWJsZXIuY29kZVNpemUoKSwgIiBwcmlvciB0byBjb21wYWN0aW9uLlxuIik7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9UOjpmaWxsTm9wcygKKyAgICAg
ICAgICAgIHN0YXJ0T2ZJQyArIGxpbmtCdWZmZXIuc2l6ZSgpLCBzaXplT2ZJQyAtIGxpbmtCdWZm
ZXIuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwg
c3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgp
KTsKKyAgICB9CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7CiAKICAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxlU3RhY2tPdmVyZmxv
d0V4Y2VwdGlvblN0YWNrbWFwSUQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI4LDExICsyOCwxNCBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRl
ICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKIC8vIFRoZSBkZWZhdWx0IHNpemVzIGFyZSB4ODYt
NjQtc3BlY2lmaWMsIGFuZCB3ZXJlIGZvdW5kIGVtcGlyaWNhbGx5LiBUaGV5IGhhdmUgdG8gY292
ZXIgdGhlIHdvcnN0CiAvLyBwb3NzaWJsZSBjb21iaW5hdGlvbiBvZiByZWdpc3RlcnMgbGVhZGlu
ZyB0byB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBlbmNvZGluZyBvZiBlYWNoIGluc3RydWN0aW9uIGlu
CiAvLyB0aGUgSUMuCkBAIC02MSwxNyArNjQsMjUgQEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQog
I2VuZGlmCiB9CiAKLXNpemVfdCBzaXplT2ZDaGVja0luKCkKK3NpemVfdCBzaXplT2ZDYWxsKCkK
IHsKICNpZiBDUFUoQVJNNjQpCi0gICAgcmV0dXJuIDQ7CisgICAgcmV0dXJuIDU2OwogI2Vsc2UK
LSAgICByZXR1cm4gNTsgCisgICAgcmV0dXJuIDUzOwogI2VuZGlmCiB9CiAKK3NpemVfdCBzaXpl
T2ZDYWxsVmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiA1NjsKKyNlbHNl
CisgICAgcmV0dXJuIDUzOworI2VuZGlmCit9CiAKLXNpemVfdCBzaXplT2ZDYWxsKCkKK3NpemVf
dCBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKQogewogI2lmIENQVShBUk02NCkKICAgICByZXR1
cm4gNTY7CkBAIC04MCw2ICs5MSw0NyBAQCBzaXplX3Qgc2l6ZU9mQ2FsbCgpCiAjZW5kaWYKIH0K
IAorc2l6ZV90IHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKQoreworI2lmIENQVShBUk02NCkKKyAg
ICByZXR1cm4gNTY7CisjZWxzZQorICAgIHJldHVybiA1MzsKKyNlbmRpZgorfQorCitzaXplX3Qg
c2l6ZU9mSW4oKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1cm4gNDsKKyNlbHNlCisgICAg
cmV0dXJuIDU7IAorI2VuZGlmCit9CisKK3NpemVfdCBzaXplT2ZJQ0ZvcihOb2RlKiBub2RlKQor
eworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAg
cmV0dXJuIHNpemVPZkdldEJ5SWQoKTsKKyAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIHJldHVy
biBzaXplT2ZQdXRCeUlkKCk7CisgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgQ29uc3RydWN0Ogor
ICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbCgpOworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAg
ICAgIHJldHVybiBzaXplT2ZDYWxsVmFyYXJncygpOworICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgorICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCk7CisgICAgY2Fz
ZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICByZXR1cm4gc2l6ZU9mQ29uc3RydWN0VmFyYXJn
cygpOworICAgIGNhc2UgSW46CisgICAgICAgIHJldHVybiBzaXplT2ZJbigpOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHJldmlzaW9uIDE3OTk3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI4LDEyICsyOCwyMyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgREZH
IHsKK3N0cnVjdCBOb2RlOworfQorCituYW1lc3BhY2UgRlRMIHsKIAogc2l6ZV90IHNpemVPZkdl
dEJ5SWQoKTsKIHNpemVfdCBzaXplT2ZQdXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mQ2FsbCgpOwot
c2l6ZV90IHNpemVPZkNoZWNrSW4oKTsKK3NpemVfdCBzaXplT2ZDYWxsVmFyYXJncygpOworc2l6
ZV90IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOworc2l6ZV90IHNpemVPZkNvbnN0cnVjdFZh
cmFyZ3MoKTsKK3NpemVfdCBzaXplT2ZJbigpOworCitzaXplX3Qgc2l6ZU9mSUNGb3IoREZHOjpO
b2RlKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0
OCw3IEBAIEpTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIE5vZGUKICAgICAsIG1f
c3RhY2ttYXBJRChzdGFja21hcElEKQogICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldCgwKQogewor
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3Qp
OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCit1c2lu
ZyBuYW1lc3BhY2UgREZHOworCiBKU0NhbGxCYXNlOjpKU0NhbGxCYXNlKCkKICAgICA6IG1fdHlw
ZShDYWxsTGlua0luZm86Ok5vbmUpCiAgICAgLCBtX2NhbGxMaW5rSW5mbyhudWxscHRyKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJKHJldmlzaW9uIDE3
OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTGlu
a0J1ZmZlcjsKIAorbmFtZXNwYWNlIERGRyB7CitzdHJ1Y3QgTm9kZTsKK30KKwogbmFtZXNwYWNl
IEZUTCB7CiAKIGNsYXNzIEpTQ2FsbEJhc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMSlNDYWxsVmFyYXJncy5oIgor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
KwordXNpbmcgbmFtZXNwYWNlIERGRzsKKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncygp
CisgICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBtX25vZGUobnVsbHB0cikKKyAg
ICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoVUlOVF9NQVgpCit7Cit9CisKK0pTQ2FsbFZhcmFyZ3M6
OkpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZSogbm9kZSkKKyAgICA6IG1f
c3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9ub2RlKG5vZGUpCisgICAgLCBtX2NhbGxC
YXNlKAorICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgPyBDYWxsTGlua0lu
Zm86OkNvbnN0cnVjdFZhcmFyZ3MgOiBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzLAorICAgICAg
ICBub2RlLT5vcmlnaW4uc2VtYW50aWMpCisgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCit7
CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBD
YWxsRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzKTsKK30K
KwordW5zaWduZWQgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpCit7CisgICAg
cmV0dXJuIDQ7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbGVwcnMmIGpp
dCwgaW50MzJfdCBzcGlsbFNsb3RzT2Zmc2V0KQoreworICAgIC8vIFdlIGFyZSBwYXNzZWQgdGhy
ZWUgcGllY2VzIG9mIGluZm9ybWF0aW9uOgorICAgIC8vIC0gVGhlIGNhbGxlZS4KKyAgICAvLyAt
IFRoZSBhcmd1bWVudHMgb2JqZWN0LgorICAgIC8vIC0gVGhlICJ0aGlzIiB2YWx1ZSwgaWYgaXQn
cyBhIGNvbnN0cnVjdG9yIGNhbGwuCisgICAgCisgICAgYm9vbCBpc0NhbGwgPSBtX25vZGUtPm9w
KCkgIT0gQ29uc3RydWN0VmFyYXJnczsKKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEg
PSBtX25vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworICAgIAorICAgIEdQUkluZm8gY2FsbGVlR1BS
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgIEdQUkluZm8gYXJndW1lbnRzR1BSID0gR1BS
SW5mbzo6YXJndW1lbnRHUFIxOworICAgIEdQUkluZm8gdGhpc0dQUjsKKyAgICBpZiAoaXNDYWxs
KQorICAgICAgICB0aGlzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgIGVsc2UKKyAg
ICAgICAgdGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgCisgICAgY29uc3QgdW5zaWduZWQg
Y2FsbGVlU3BpbGxTbG90ID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCBhcmd1bWVudHNTcGlsbFNs
b3QgPSAxOworICAgIGNvbnN0IHVuc2lnbmVkIHRoaXNTcGlsbFNsb3QgPSAyOworICAgIGNvbnN0
IHVuc2lnbmVkIHN0YWNrUG9pbnRlclNwaWxsU2xvdCA9IDM7CisgICAgCisgICAgLy8gR2V0IHNv
bWUgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAg
ICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAg
ICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpoYXJkd2FyZVJlc2VydmVkUmVnaXN0
ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5zZXQoY2FsbGVlR1BSKTsKKyAgICB1c2Vk
UmVnaXN0ZXJzLnNldChhcmd1bWVudHNHUFIpOworICAgIGlmIChpc0NhbGwpCisgICAgICAgIHVz
ZWRSZWdpc3RlcnMuc2V0KHRoaXNHUFIpOworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBh
bGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgR1BSSW5mbyBzY3JhdGNoR1BSMSA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBHUFJJbmZvIHNjcmF0Y2hHUFIyID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIEdQUkluZm8gc2NyYXRjaEdQUjMgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9j
YXRvci5udW1iZXJPZlJldXNlZFJlZ2lzdGVycygpKTsKKyAgICAKKyAgICBhdXRvIGNvbXB1dGVV
c2VkU3RhY2sgPSBbJl0gKEdQUkluZm8gdGFyZ2V0R1BSLCB1bnNpZ25lZCBleHRyYSkgeworICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdGFyZ2V0R1BSKTsKKyAg
ICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0YXJn
ZXRHUFIpOworICAgICAgICBpZiAoZXh0cmEpCisgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhKSwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaml0LnVy
c2hpZnRQdHIoSW1tMzIoMyksIHRhcmdldEdQUik7CisgICAgfTsKKyAgICAKKyAgICBhdXRvIGNh
bGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkgeworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgIG1fZXhjZXB0aW9ucy5hcHBlbmQoaml0LmVt
aXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBB
c3NlbWJseUhlbGVwcnM6OkZhckp1bXBXaWR0aCkpOworICAgIH07CisgICAgCisgICAgLy8gQXR0
ZW1wdCB0aGUgZm9yd2FyZGluZyBmYXN0IHBhdGgsIGlmIGl0J3MgYmVlbiByZXF1ZXN0ZWQuCisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IEdQUkluZm86OnJlZ1QwOworICAgIGlmIChtX25vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRW
YXJhcmdzKSB7CisgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJn
dW1lbnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAgIC8vIEZJWE1FOiBkbyB0aGlzIG9wdGltaXph
dGlvbiBhdCB0aGUgSVIgbGV2ZWwuCisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IHNsb3dDYXNlOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3Q2
NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAKKyAgICAg
ICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgMCk7CisgICAgICAgIGVtaXRTZXR1cFZh
cmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gc2NyYXRjaEdQUjI7CisgICAgICAgIAorICAgICAgICBoYXZlQXJndW1lbnRzID0gaml0Lmp1
bXAoKTsKKyAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAgICB9CisgICAgCisgICAgLy8g
R290dGEgc3BpbGwgdGhlIGNhbGxlZSwgYXJndW1lbnRzLCBhbmQgdGhpcyBiZWNhdXNlIHdlIHdp
bGwgbmVlZCB0aGVtIGxhdGVyIGFuZCB3ZSB3aWxsIGhhdmUgc29tZQorICAgIC8vIGNhbGxzIHRo
YXQgY2xvYmJlciB0aGVtLgorICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgaml0LmFkZHJlc3NG
b3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxlZVNwaWxsU2xvdCkpOworICAgIGppdC5zdG9yZTY0
KGFyZ3VtZW50c0dQUiwgaml0LmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50
c1NwaWxsU2xvdCkpOworICAgIGlmIChpc0NhbGwpCisgICAgICAgIGppdC5zdG9yZTY0KHRoaXNH
UFIsIGppdC5hZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSk7Cisg
ICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBqaXQuYWRkcmVz
c0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgc3RhY2tQb2ludGVyU3BpbGxTbG90KSk7CisgICAgCisg
ICAgdW5zaWduZWQgZXh0cmFTdGFjayA9IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArCisgICAg
ICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBz
aXplb2Yodm9pZCopKTsKKyAgICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hHUFIxLCAwKTsKKyAg
ICBtX2ppdC5zdWJQdHIoVHJ1c3RlZEltbTMyKGV4dHJhU3RhY2spLCBHUFJJbmZvOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmd1
bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5m
aXJzdFZhckFyZ09mZnNldCkpOworICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
U2l6ZUZyYW1lRm9yVmFyYXJncyk7CisgICAgCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIHNjcmF0Y2hHUFIxKTsKKyAgICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hHUFIy
LCBleHRyYVN0YWNrKTsKKyAgICBqaXQubG9hZDY0KGppdC5hZGRyZXNzRm9yKHNwaWxsU2xvdHNP
ZmZzZXQgKyBhcmd1bWVudHNTcGlsbFNsb3QpLCBhcmd1bWVudHNHUFIpOworICAgIGVtaXRTZXRW
YXJhcmdzRnJhbWUoaml0LCBzY3JhdGNoR1BSMSwgZmFsc2UsIHNjcmF0Y2hHUFIyLCBzY3JhdGNo
R1BSMik7CisgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMigtZXh0cmFTdGFjayksIHNjcmF0
Y2hHUFIyLCBHUFJJbmZvOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwgYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCksIEdQUkluZm86OnNjcmF0
Y2hHUFIxKTsKKyAgICBjYWxsV2l0aEV4Y3BldGlvbkNoZWNrKG9wZXJhdGlvblNldHVwVmFyYXJn
c0ZyYW1lKTsKKyAgICAKKyAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKKyAgICAKKyAgICBpZiAobV9ub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJn
cykKKyAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5rKCZqaXQpOworICAgIAorICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwg
cmVzdWx0R1BSLCBHUFJJbmZvOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAgaWYg
KGlzQ2FsbCkgeworICAgICAgICBqaXQubG9hZDY0KGppdC5hZGRyZXNzRm9yKHNwaWxsU2xvdHNP
ZmZzZXQgKyB0aGlzU3BpbGxTbG90KSwgdGhpc0dQUik7CisgICAgICAgIGppdC5zdG9yZTY0KHRo
aXNHUFIsIGppdC5jYWxsZWVBcmd1bWVudFNsb3QoMCkpOworICAgIH0KKyAgICAKKyAgICAvLyBI
ZW5jZWZvcnRoIHdlIG1ha2UgdGhlIGNhbGwuIFRoZSBiYXNlIEZUTCBjYWxsIG1hY2hpbmVyeSBl
eHBlY3RzIHRoZSBjYWxsZWUgaW4gcmVnVDAgYW5kIGZvciB0aGUKKyAgICAvLyBzdGFjayBmcmFt
ZSB0byBhbHJlYWR5IGJlIHNldCB1cCwgd2hpY2ggaXQgaXMuCisgICAgaml0LmxvYWQ2NChqaXQu
YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgY2FsbGVlU3BpbGxTbG90KSwgR1BSSW5mbzo6
cmVnVDApOworICAgIAorICAgIG1fY2FsbEJhc2UuZW1pdChqaXQpOworICAgIAorICAgIC8vIFVu
ZG8gdGhlIGRhbWFnZSB3ZSd2ZSBkb25lLgorICAgIGppdC5sb2FkUHRyKGppdC5hZGRyZXNzRm9y
KHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3QpLCBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworfQorCit2b2lkIEpTQ2FsbFZhcmFyZ3M6Omxpbmso
Vk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRp
b25IYW5kbGVyKQoreworICAgIG1fY2FsbEJhc2UubGluayh2bSwgbGlua0J1ZmZlcik7CisgICAg
bGlua0J1ZmZlci5saW5rKG1fZXhjZXB0aW9ucywgZXhjZXB0aW9uSGFuZGxlcik7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExKU0NhbGxWYXJhcmdzX2gKKyNkZWZp
bmUgRlRMSlNDYWxsVmFyYXJnc19oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUg
IkZUTEpTQ2FsbEJhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIExpbmtCdWZmZXI7
CisKK25hbWVzcGFjZSBERkcgeworc3RydWN0IE5vZGU7Cit9CisKK25hbWVzcGFjZSBGVEwgewor
CitjbGFzcyBKU0NhbGxWYXJhcmdzIHsKK3B1YmxpYzoKKyAgICBKU0NhbGxWYXJhcmdzKCk7Cisg
ICAgSlNDYWxsVmFyYXJncyh1bnNpZ25lZCBzdGFja21hcElELCBERkc6Ok5vZGUqKTsKKyAgICAK
KyAgICBERkc6Ok5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KKyAgICAKKyAg
ICBzdGF0aWMgdW5zaWduZWQgbnVtU3BpbGxTbG90c05lZWRlZCgpOworICAgIAorICAgIHZvaWQg
ZW1pdChDQ2FsbEhlbHBlcnMmLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpOworICAgIHZvaWQg
bGluayhWTSYsIExpbmtCdWZmZXImLCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVy
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFj
a21hcElEOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSlNDYWxsVmFyYXJncyYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8
IG90aGVyLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1
bnNpZ25lZCBtX3N0YWNrbWFwSUQ7CisgICAgREZHOjpOb2RlKiBtX25vZGU7CisgICAgSlNDYWxs
QmFzZSBtX2NhbGxCYXNlOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9leGNlcHRpb25z
OworCitwdWJsaWM6CisgICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisj
ZW5kaWYgLy8gRlRMSlNDYWxsVmFyYXJnc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg1LDYgKzE4NSwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX291dC5zdGFj
a21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFj
a21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2EpOwog
ICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbnkgQ2FsbFZhcmFyZ3MgdGhlbiB3ZSBu
ZWUgdG8gaGF2ZSBhIHNwaWxsIHNsb3QgZm9yIGl0LgorICAgICAgICBib29sIGhhc1ZhcmFyZ3Mg
PSBmYWxzZTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKSB7Cisg
ICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBibG9jaykgeworICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Cisg
ICAgICAgICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICAgICAg
Y2FzZSBDb250cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGhhc1ZhcmFyZ3MgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc1ZhcmFyZ3MpIHsKKyAgICAgICAgICAg
IExWYWx1ZSB2YXJhcmdzU3BpbGxTbG90cyA9IG1fb3V0LmFsbG9jYSgKKyAgICAgICAgICAgICAg
ICBhcnJheVR5cGUobV9vdXQuaW50NjQsIEpTQ2FsbFZhcmFyZ3M6Om51bVNwaWxsU2xvdHNOZWVk
ZWQoKSkpOworICAgICAgICAgICAgbV9mdGxTdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFw
SUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAgICAgICAgICBtX291dC5jYWxsKAorICAgICAgICAg
ICAgICAgIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxT
dGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpLAorICAgICAgICAgICAgICAgIG1fb3V0
LmludDMyWmVybywgdmFyYXJnc1NwaWxsU2xvdHMpOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LnB0clRvSW50KAogICAgICAgICAgICAgbV9vdXQuY2Fs
bChtX291dC5mcmFtZUFkZHJlc3NJbnRyaW5zaWMoKSwgbV9vdXQuaW50MzJaZXJvKSwgbV9vdXQu
aW50UHRyKTsKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdU
eXBlTnVtYmVyKTsKQEAgLTYzNiw2ICs2NjAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBD
b25zdHJ1Y3Q6CiAgICAgICAgICAgICBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDYWxs
Rm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAg
ICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJn
cygpOworICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJ
TklORykKICAgICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0
cnVjdDoKQEAgLTE5ODYsOCArMjAxOCwyMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgY2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkKCk7CiAKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsICFtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAg
ICBzZXRJbnQzMihtX291dC5hZGQobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSksIG1fb3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAg
IGlmIChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAg
ICYmICFJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUta2luZCkpIHsKKyAgICAgICAgICAgIHNldEludDMyKAorICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50
UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAg
ICBzZXRJbnQzMigKKyAgICAgICAgICAgICAgICBtX291dC5hZGQoCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lz
dGVyKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkK
QEAgLTM3MDgsNiArMzc1NCw3OSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc2V0SlNW
YWx1ZShjYWxsKTsKICAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0
VmFyYXJncygpCisgICAgeworICAgICAgICBib29sIGlzQ2FsbDsKKyAgICAgICAgc3dpdGNoICht
X25vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBD
YWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGlz
Q2FsbCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBqc0Nh
bGxlZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBqc0Fy
Z3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1ZSB0
aGlzQXJnOworICAgICAgICBpZiAoaXNDYWxsKQorICAgICAgICAgICAgdGhpc0FyZyA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXNB
cmcgPSBudWxscHRyOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1f
c3RhY2ttYXBJRHMrKzsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3VtZW50
czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQp
KTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKHNpemVPZklDRm9y
KG1fbm9kZSkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQucmVm
OCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoaXNDYWxsID8g
MyA6IDIpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChqc0NhbGxlZSk7CisgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoanNBcmd1bWVudHMpOworICAgICAgICBpZiAoaXNDYWxsKQorICAgICAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzQXJnKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxQ
cmVmbGlnaHQoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbCht
X291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgc2V0
SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQ0NhbGxDb252KTsKKyAgICAg
ICAgCisgICAgICAgIG1fZnRsU3RhdGUuanNDYWxsVmFyYXJnc2VzLmFwcGVuZChKU0NhbGxWYXJh
cmdzKHN0YWNrbWFwSUQsIG1fbm9kZSkpOworICAgICAgICAKKyAgICAgICAgc2V0SlNWYWx1ZShj
YWxsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHsK
KyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCisgICAgICAg
ICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJncyksIG1fY2FsbEZyYW1l
LCBqc0FyZ3VtZW50cywKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+Zmlyc3RW
YXJBcmdPZmZzZXQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNo
YW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNl
LiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0n
cyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNl
CisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3
aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAorICAgICAg
ICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAg
ICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1p
dCkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLCBwYXlsb2FkRm9y
KGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICAKKyAgICAgICAgdm1DYWxsKAorICAgICAg
ICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzKSwgbV9jYWxsRnJhbWUs
CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQo
KSksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCisgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPmxlbmd0aCksIG1fb3V0LmNvbnN0SW50MzIoZGF0
YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUp1bXAoKQog
ICAgIHsKQEAgLTQwMTIsNyArNDEzMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAgICAgICAg
IG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAotICAgICAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkNoZWNr
SW4oKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCks
IG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mSW4oKSksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgY2VsbCk7CiAKICAgICAgICAg
ICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdD
YWxsQ29udik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkocmV2
aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3Jh
cGgpCiAgICAgLCBjb250ZXh0KGxsdm0tPkNvbnRleHRDcmVhdGUoKSkKICAgICAsIG1vZHVsZSgw
KQogICAgICwgZnVuY3Rpb24oMCkKKyAgICAsIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25T
dGFja21hcElEKFVJTlRfTUFYKQorICAgICwgaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRChVSU5U
X01BWCkKKyAgICAsIGNhcHR1cmVkU3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAsIHZhcmFyZ3NT
cGlsbFNsb3RzU3RhY2ttYXBJRChVSU5UX01BWCkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDAp
CiAgICAgLCB1bndpbmREYXRhU2VjdGlvbigwKQogICAgICwgdW53aW5kRGF0YVNlY3Rpb25TaXpl
KDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNzk5
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
RlRMSklURmluYWxpemVyLmgiCiAjaW5jbHVkZSAiRlRMSlNDYWxsLmgiCisjaW5jbHVkZSAiRlRM
SlNDYWxsVmFyYXJncy5oIgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkZU
TFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC03MSwxMCArNzIsMTIg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFj
a21hcElEOwogICAgIHVuc2lnbmVkIGhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQ7CiAgICAgdW5z
aWduZWQgY2FwdHVyZWRTdGFja21hcElEOworICAgIHVuc2lnbmVkIHZhcmFyZ3NTcGlsbFNsb3Rz
U3RhY2ttYXBJRDsKICAgICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5
SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxQdXRCeUlkRGVzY3JpcHRvcj4gcHV0QnlJZHM7CiAg
ICAgU2VnbWVudGVkVmVjdG9yPENoZWNrSW5EZXNjcmlwdG9yPiBjaGVja0luczsKICAgICBWZWN0
b3I8SlNDYWxsPiBqc0NhbGxzOworICAgIFZlY3RvcjxKU0NhbGxWYXJhcmdzPiBqc0NhbGxWYXJh
cmdzZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9y
PENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAgICAgdm9pZCogdW53aW5kRGF0YVNlY3Rpb247
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBA
QCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgcmV0dXJuIGludGVycHJl
dGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBjYWxsZXJTY29wZUNoYWlu
KTsKIH0KIAotdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNTdGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3Rh
Y2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit1bnNpZ25lZCBzaXplT2ZWYXJh
cmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmly
c3RWYXJBcmdPZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIGlmICghYXJndW1l
bnRzKQpAQCAtMTU2LDYgKzE1NiwxMyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENh
bGxGcmFtZSogCiAgICAgZWxzZQogICAgICAgICBsZW5ndGggPSAwOwogICAgIAorICAgIHJldHVy
biBsZW5ndGg7Cit9CisKK3Vuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTU3RhY2sqIHN0YWNrLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVt
VXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHNpemVPZlZhcmFyZ3MoY2FsbEZyYW1lLCBhcmd1bWVudHMsIGZpcnN0VmFy
QXJnT2Zmc2V0KTsKKyAgICAKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbGVlRnJh
bWVGb3JWYXJhcmdzKGNhbGxGcmFtZSwgbnVtVXNlZFN0YWNrU2xvdHMsIGxlbmd0aCArIDEpOwog
ICAgIGlmIChsZW5ndGggPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyB8fCAhc3RhY2stPmVuc3Vy
ZUNhcGFjaXR5Rm9yKGNhbGxlZUZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKICAgICAgICAgdGhyb3dT
dGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzA4LDYgKzMwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4g
Q2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIHBhZGRlZENhbGxlZUZy
YW1lT2Zmc2V0KTsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENhbGxGcmFt
ZSogZXhlYywgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsK
ICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogZXhlYywgSlNTdGFj
ayosIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMy
X3QgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIHZvaWQgbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBl
eGVjQ2FsbGVyLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBzb3Vy
Y2UsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwVmFy
YXJnc0ZyYW1lKENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBK
U1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxl
bmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3
ICsxNDksMTAgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbAogCiAg
ICAgICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUu
bV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIG1fZnJhbWUubV9h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKTsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVy
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
ZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKTsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxG
cmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKTsKICAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zm
c2V0ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTIsMTUgKzIxMiwyNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2Vw
dGlvbkZ1enooCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudEJ5dGVzKCkp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCkK
K0Fzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVj
ayhFeGNlcHRpb25DaGVja0tpbmQga2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewog
ICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7CisKKyAgICBpZiAod2lkdGggPT0gRmFySnVtcFdpZHRo
KQorICAgICAgICBraW5kID0gKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBJbnZlcnRl
ZEV4Y2VwdGlvbkNoZWNrIDogTm9ybWFsRXhjZXB0aW9uQ2hlY2spOwogICAgIAorICAgIEp1bXAg
cmVzdWx0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChraW5k
ID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVz
cyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOworICAgIHJlc3VsdCA9IGJyYW5jaFRlc3Q2
NChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRl
QWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOwogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICByZXR1cm4gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/
IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIq
Pih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Cisg
ICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVx
dWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgp
LT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAjZW5kaWYK
KyAgICAKKyAgICBpZiAoa2luZCA9PSBOb3JtYWxKdW1wV2lkdGgpCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCByZWFsSnVtcCA9IGp1bXAoKTsKKyAgICBy
ZXN1bHQubGluayh0aGlzKTsKKyAgICAKKyAgICByZXR1cm4gcmVhbEp1bXAubV9qdW1wOwogfQog
CiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKEFz
c2VtYmx5SGVscGVycyYgaml0LCBUcnVzdGVkSW1tUHRyIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCBk
ZXN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNiArMzM4LDEwIEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyKQogICAgIHsKKyAgICAgICAgLy8gTkIuIEl0J3MgdGVtcHRpbmcgb24gc29tZSBh
cmNoaXRlY3R1cmVzIHRvIHNvbWV0aW1lcyB1c2UgYW4gb2Zmc2V0IGZyb20gdGhlIHN0YWNrCisg
ICAgICAgIC8vIHJlZ2lzdGVyIGJlY2F1c2UgZm9yIHNvbWUgb2Zmc2V0cyB0aGF0IHdpbGwgZW5j
b2RlIHRvIGEgc21hbGxlciBpbnN0cnVjdGlvbi4gQnV0IHdlCisgICAgICAgIC8vIGNhbm5vdCBk
byB0aGlzLiBXZSB1c2UgdGhpcyBpbiBwbGFjZXMgd2hlcmUgdGhlIHN0YWNrIHBvaW50ZXIgaGFz
IGJlZW4gbW92ZWQgdG8gc29tZQorICAgICAgICAvLyB1bnByZWRpY3RhYmxlIGxvY2F0aW9uLgog
ICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVy
biBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9CkBAIC01NzEsNyArNTc1LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAgICAKICAgICBlbnVtIEV4Y2Vw
dGlvbkNoZWNrS2luZCB7IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBJbnZlcnRlZEV4Y2VwdGlvbkNo
ZWNrIH07Ci0gICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtp
bmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjayk7CisgICAgZW51bSBFeGNlcHRpb25KdW1wV2lkdGgg
eyBOb3JtYWxKdW1wV2lkdGgsIEZhckp1bXBXaWR0aCB9OworICAgIEp1bXAgZW1pdEV4Y2VwdGlv
bkNoZWNrKAorICAgICAgICBFeGNlcHRpb25DaGVja0tpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVj
aywgRXhjZXB0aW9uSnVtcFdpZHRoID0gTm9ybWFsSnVtcFdpZHRoKTsKIAogI2lmIEVOQUJMRShT
QU1QTElOR19DT1VOVEVSUykKICAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJs
ZXImIGppdCwgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMyX3QgaW5jcmVt
ZW50ID0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtNDAyLDYgKzQwMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IHJldHVyblZhbHVlR1BSID0gWDg2UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVn
VDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IFg4
NlJlZ2lzdGVyczo6ZXNpOworICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9u
QXJndW1lbnRHUFIgPSBYODZSZWdpc3RlcnM6OnIxMDsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IHBhdGNocG9pbnRTY3JhdGNoUmVnaXN0ZXIgPSBNYWNyb0Fzc2VtYmxlcjo6c2NyYXRjaFJlZ2lz
dGVyOwogCiAgICAgc3RhdGljIEdQUlJlZyB0b1JlZ2lzdGVyKHVuc2lnbmVkIGluZGV4KQpAQCAt
NTc3LDYgKzU3OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZh
bHVlR1BSID0gQVJNNjRSZWdpc3RlcnM6OngwOyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBH
UFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gQVJNNjRSZWdpc3RlcnM6OngxOyAvLyByZWdUMQogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gQVJNNjRSZWdp
c3RlcnM6OngyOworICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uQXJndW1l
bnRHUFIgPSBBUk02NFJlZ2lzdGVyczo6eDg7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRj
aHBvaW50U2NyYXRjaFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6OmlwMDsKIAogICAgIC8vIEdQ
UlJlZyBtYXBwaW5nIGlzIGRpcmVjdCwgdGhlIG1hY2hpbmUgcmVnc2l0ZXIgbnVtYmVycyBjYW4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDEx
ICs0NjQsNiBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAg
ICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRF
bWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgREZHOjpDYW5J
bmxpbmU6Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5C
ZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7Ci0gICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAg
IGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVk
ID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2
LDcgKzI5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bChPcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAg
ICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlELCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCk7Ci0gICAgICAgIHZvaWQgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9u
Kik7CisgICAgICAgIHZvaWQgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiwg
Q2FsbExpbmtJbmZvKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENh
bGxSZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEpJVDo6ZW1p
dFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCiB7CiAgICAgaW50IHRoaXNW
YWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICBpbnQgYXJndW1lbnRzID0gaW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtOTAsNiArOTAsMTYgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cgogICAgIGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAg
ZW5kLmxpbmsodGhpcyk7CiAgICAgCisgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQu
CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsK
KyAgICBsb2FkOCgmaW5mby0+bWF4TnVtQXJndW1lbnRzLCByZWdUMCk7CisgICAgSnVtcCBub3RC
aWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7CisgICAgSnVtcCBub3RTYXR1
cmF0ZWQgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoMjU1KSk7
CisgICAgbW92ZShUcnVzdGVkSW1tMzIoMjU1KSwgcmVnVDIpOworICAgIG5vdFNhdHVyYXRlZC5s
aW5rKHRoaXMpOworICAgIHN0b3JlOChyZWdUMiwgJmluZm8tPm1heE51bUFyZ3VtZW50cyk7Cisg
ICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOworICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMn
LgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCByZWdUMCk7CiAgICAgc3Rv
cmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKQEAgLTEzNCw3ICsxNDQs
OSBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1CiAKIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAgIGludCBjYWxsZWUgPSBpbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxv
Y2stPmFkZENhbGxMaW5rSW5mbygpOworCisgICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMg
Y2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KQEAgLTE1Miw3ICsxNjQsMTEg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIENPTVBJTEVf
QVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3Zh
cmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3Ro
KTsKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9M
RU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBjYWxsX2FuZF9jb25zdHJ1Y3RfdmFyYXJnc19v
cGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxs
X3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCis8PDw8PDw8IC5t
aW5lCisgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhpbnN0cnVjdGlvbiwgaW5mbyk7Cis9PT09
PT09CiAgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbik7Cis+Pj4+
Pj4+IC5yMTc5ODYyCiAgICAgZWxzZSB7CiAgICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0
aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE3Niw5ICsxOTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotCi0gICAg
aWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgeworICAgaWYgKG9wY29kZUlEID09IG9wX2Nh
bGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZh
cmFyZ3NGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
ZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEs
MTEgKzEwMSwzMSBAQCB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsCiAK
IHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hH
UFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93Q2FzZSkKIHsKLSAgICBlbWl0U2V0dXBWYXJhcmdzRnJh
bWVGYXN0Q2FzZSgKLSAgICAgICAgaml0LCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsCi0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNl
ZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIERhdGFG
b3JtYXRJbnQzMiksCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50
T2Zmc2V0KDApKSwKLSAgICAgICAgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShqaXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgbnVsbHB0ciwgZmlyc3RWYXJBcmdPZmZz
ZXQsIHNsb3dDYXNlKTsKK30KKwordm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hH
UFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgSW5saW5lQ2FsbEZy
YW1lKiwgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3Qm
IHNsb3dDYXNlKQoreworICAgIFZhbHVlUmVjb3ZlcnkgYXJndW1lbnRDb3VudFJlY292ZXJ5Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdEFyZ3VtZW50UmVnOworICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUpIHsKKyAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGlubGluZUNh
bGxGcmFtZS0+a2luZCkpIHsKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZh
bHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVj
b3Zlcnk6OmNvbnN0YW50KAorICAgICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgPiAxKQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJl
ZyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVy
KDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVl
UmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
cihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgZmly
c3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0
KDApKTsKKyAgICB9CisgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1V
c2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGFyZ3Vt
ZW50Q291bnRSZWNvdmVyeSwgZmlyc3RBcmd1bWVudFJlZywgZmlyc3RWYXJBcmdPZmZzZXQsIHNs
b3dDYXNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDkgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShD
Q2FsbAogLy8gVmFyaWFudCB0aGF0IGFzc3VtZXMgbm9ybWFsIHN0YWNrIGZyYW1lLgogdm9pZCBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgbnVtVXNl
ZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVn
IHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJzdFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCYgc2xvd0Nhc2UpOwogCisvLyBWYXJpYW50IGZvciBwb3RlbnRpYWxseSBpbmxpbmVk
IHN0YWNrIGZyYW1lcy4KK3ZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJS
ZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiwgdW5z
aWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNl
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE3OTk3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIEFy
Z3VtZW50cyogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxBcmd1bWVu
dHNDcmVhdGlvbk1vZGUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxp
bmVSZWdpc3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoaW5saW5lQ2FsbEZy
YW1lKSkpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50
cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0
T2ZJbmxpbmVSZWdpc3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoY2FsbEZy
YW1lLCBpbmxpbmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFy
Z3VtZW50cy0+ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUsIG1vZGUp
OwogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KQEAgLTEyNCw3ICsxMjQsMTUgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShFeGVj
U3RhdGUqKTsKIAogICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENh
bGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSAqIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyB9Ci0gICAgc3RhdGljIHNpemVfdCByZWdp
c3RlckFycmF5U2l6ZUluQnl0ZXMoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsg
cmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpOyB9CisgICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5
U2l6ZUluQnl0ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNh
bGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQo
KSkudW5ib3hlZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpCisgICAg
ICAgIHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAtIDEpOworICAgIH0KICAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90KTsK
ICAgICBib29sIHRyeVNldEFyZ3VtZW50KFZNJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlKTsK
ICAgICBKU1ZhbHVlIHRyeUdldEFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCk7CkBAIC0zNDAsMTEg
KzM0OCwxNSBAQCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAg
bV9vdmVycm9kZUNhbGxlZSA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsK
ICAgICBtX2lzU3RyaWN0TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVD
YWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKLQorICAgIAorICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisg
ICAgICAgIG1fbnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
OworICAgIG1fbnVtQXJndW1lbnRzLS07CisgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAg
Y2FzZSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVu
dHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICAKICAg
ICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJn
dW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZz
ZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgp
OwpAQCAtMzYxLDcgKzM3Myw2IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRp
b24oQ2EKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25N
b2RlOiB7Ci0gICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHMuc2l6ZSgpIC0gMTsKICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAg
ICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sx
XS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0g
cmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDEpLm9mZnNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDggQEAgdHlwZWRlZiBj
b25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgLyogZnJvbSBzdXBlciBsb25nIGNvbXBpbGVz
IHRoYXQgdGFrZSBhIGxvdCBvZiBtZW1vcnkuICovXAogICAgIHYodW5zaWduZWQsIG1heGltdW1J
bmxpbmluZ0NhbGxlclNpemUsIDEwMDAwKSBcCiAgICAgXAorICAgIHYodW5zaWduZWQsIG1heGlt
dW1WYXJhcmdzRm9ySW5saW5pbmcsIDEwMCkgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZVBv
bHl2YXJpYW50Q2FsbElubGluaW5nLCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFy
aWFudEJ5SWRJbmxpbmluZywgdHJ1ZSkgXAogICAgIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246451</attachid>
            <date>2015-02-12 10:19:19 -0800</date>
            <delta_ts>2015-02-13 12:43:55 -0800</delta_ts>
            <desc>starting to compile, and reworking CallForwardVarargs in FTL</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>131999</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
MTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFB
OEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAv
KiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAx
NDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2Nh
dGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxs
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAw
MEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8q
IFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICov
LAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAq
LywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
LAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkw
RjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBA
QAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4
NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiAr
NDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRy
dXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVy
c2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNy
Y0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQo
aW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0z
MkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMzEsNiArMzMxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
bXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODc2LDYgKzg3NiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJ
YiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgw
KQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBw
dWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNp
Z25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDog
ODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAg
Ly8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1
ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0o
cHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZv
KGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1f
bWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxs
TGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkK
K3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9j
b3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBi
b29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAo
IW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1w
KG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAg
bV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApA
QCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29u
c3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAg
LTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkg
Y29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgog
ICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAg
IGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0
LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAg
IENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFy
Z3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNv
cnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAg
ICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZh
cmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAg
cmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBpc1Zh
cmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtp
bmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtp
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzRXNjYXBlZCI7CiAgICAgY2FzZSBOb3RTdHJpbmdP
YmplY3Q6CiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKKyAgICBjYXNlIFZhcmFy
Z3NPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZsb3ciOwogICAgIGNhc2Ug
VW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5j
b3VudGFibGVJbnZhbGlkYXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEluYWRlcXVhdGVDb3ZlcmFnZSwgLy8gV2UgZXhp
dGVkIGJlY2F1c2Ugd2UgZW5kZWQgdXAgaW4gY29kZSB0aGF0IGRpZG4ndCBoYXZlIHByb2ZpbGlu
ZyBjb3ZlcmFnZS4KICAgICBBcmd1bWVudHNFc2NhcGVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
cmd1bWVudHMgZXNjYXBlZCBidXQgd2UgZGlkbid0IGV4cGVjdCB0aGVtIHRvLgogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgorICAgIFZhcmFyZ3NPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB2YXJhcmdzIGNhbGwgcGFzc2VkIG1vcmUgYXJndW1l
bnRzIHRoYW4gd2UgZXhwZWN0ZWQuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgV2F0Y2hkb2dU
aW1lckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdh
dGNoZG9nIHRpbWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKLSAgICAg
ICAgQVNTRVJUKHZhbHVlLmlzSGVhcFRvcCgpKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0Ns
ZWFyKCkpOwogICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2
YWx1ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1h
dCgpKSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEZpbHRyYXRp
b25PSyk7CkBAIC0yMDMsOSArMjAzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0Lgot
ICAgICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRl
IG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9u
ZSBzZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1
cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAgLy8gbm9uLWNs
ZWFyIHZhbHVlLgorICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChu
b2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2Fz
ZSBCaXRPcjoKQEAgLTEzMTUsNyArMTMyNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0
IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAg
ICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0
aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRo
ZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBzZXRD
b25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0ZW5kIHRoYXQgd2UgY2xvYmJl
cmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KQEAgLTE5NjQsNiArMTk3Niw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3Ao
KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBC
dXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhh
dCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgyLDEyICsxODIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSog
Y2FsbFRhcmdldCwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3Rh
dHVzKTsKICAgICB2b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwg
aW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJ
bnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAg
ICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB2b2lkIGhh
bmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBO
b2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtbnQpOwogICAgIHZvaWQg
dW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50KTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBo
YW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxpbmluZ0Nvc3QoQ2Fs
bFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7IC8vIFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmluZyBjYW5k
aWRhdGUuIEJ5IGNvbnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4KICAgICAv
LyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYg
d2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBj
YWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2ln
bmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMm
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVU
eXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uKTsKICAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1hbExpbmtp
bmcsIENhbGxlckxpbmtzTWFudWFsbHkgfTsKICAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwo
Tm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVk
IG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpOwogICAg
IHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQs
IENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxs
ZXJMaW5rYWJpbGl0eSk7CkBAIC01MjgsNiArNTI5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAg
ICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlcihKU1N0YWNrOjpDYWxsZWUpKSk7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0Vu
dHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lU3Rh
Y2tFbnRyeS0+bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IG51bUFyZ3VtZW50czsgYXJndW1lbnQtLSA+IDE7KQpAQCAtNjkxLDcg
KzY5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBvcCwgb3BJbmZvLCBjYWxsZWUsIGFyZ0Nv
dW50LCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRSZWcocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOworICAgICAgICAg
ICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAg
ICAKQEAgLTEwNDIsOCArMTA0NSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwo
CiB7CiAgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIAotICAgIGlmIChjYWxs
VGFyZ2V0LT5oYXNDb25zdGFudCgpKQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5r
U3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKKyAgICBp
ZiAoY2FsbFRhcmdldC0+aXNDZWxsQ29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMu
c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQoY2FsbFRhcmdldC0+YXNDZWxsKCkp
KTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQog
ICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CkBAIC0xMDYwLDcgKzEwNjMsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogICAgIE9wSW5mbyBjYWxsT3BJ
bmZvOwogICAgIAotICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNh
bGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgeworICAgIGlmIChoYW5kbGVJbmxp
bmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBr
aW5kLCBwcmVkaWN0aW9uKSkgewogICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQog
ICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOwog
ICAgICAgICByZXR1cm47CkBAIC0xMDcyLDcgKzEwNzUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKAogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5mdW5j
dGlvbigpOwogICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2lu
ZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgICAg
ICBpZiAoZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAg
ICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUsIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0
LCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNh
bGxlZSwgY2FsbFRhcmdldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJP
ZmZzZXQpKTsKICAgICAgICAgICAgIGNhbGxPcEluZm8gPSBPcEluZm8obV9ncmFwaC5mcmVlemUo
ZnVuY3Rpb24pKTsKIAogICAgICAgICAgICAgaWYgKG9wID09IENhbGwpCkBAIC0xMDg4LDExICsx
MDkxLDU0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2FsbChy
ZXN1bHQsIG9wLCBjYWxsT3BJbmZvLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogfQogCi12b2lkIEJ5dGVDb2RlUGFy
c2VyOjplbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFy
Z2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3Zv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9k
ZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBOb2RlKiB0aGlz
QXJndW1lbnQ7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBP
UENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7CisgICAgCisgICAgaW50IHJlc3Vs
dCA9IHBjWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgY2FsbGVlID0gcGNbMl0udS5vcGVyYW5kOwor
ICAgIGludCB0aGlzUmVnID0gcGNbM10udS5vcGVyYW5kOworICAgIGludCBhcmd1bWVudHMgPSBw
Y1s0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJlZVJlZyA9IHBjWzVdLnUub3BlcmFuZDsK
KyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBwY1s2XS51Lm9wZXJhbmQ7CisgICAgCisgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAKKyAgICBO
b2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsKKyAgICAKKyAg
ICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
Rm9yKAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRD
b2RlT3JpZ2luKCksCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywg
bV9jYWxsQ29udGV4dE1hcCk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50KCkp
CisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxWYXJp
YW50KGNhbGxUYXJnZXQtPmFzQ2VsbCgpKSk7CisgICAgCisgICAgaWYgKGNhbGxMaW5rU3RhdHVz
LmNhbk9wdGltaXplKCkKKyAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVz
dWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1Jl
ZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVD
YWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBp
ZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9jYWxsVmFyYXJnc0RhdGEuYWRk
KCk7CisgICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAg
ICAKKyAgICBOb2RlKiB0aGlzQ2hpbGQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0g
ICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCBy
ZWdpc3Rlck9mZnNldCkpOworICAgICAgICB0aGlzQ2hpbGQgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KHRoaXNSZWcpKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXNDaGlsZCA9IG51bGxwdHI7CisgICAg
CisgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBjYWxsVGFyZ2V0LCBnZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLCB0
aGlzQ2hpbGQpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKKyAgICBp
ZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7Cit9
CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBj
YWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnRSZWcp
Cit7CisgICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIGlmICh0aGlzQXJndW1lbnRSZWcuaXNW
YWxpZCgpKQorICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQodGhpc0FyZ3VtZW50UmVnKTsKICAg
ICBlbHNlCiAgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKQEAgLTEzOTMsNyArMTQzOSwxMSBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxU
YXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxM
aW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKK2Jvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUlubGluaW5nKAorICAgIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVz
dWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLAorICAgIGlu
dCByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3Vt
ZW50LAorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJn
dW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCisgICAgdW5zaWdu
ZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2lu
ZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICBkYXRhTG9nKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuIik7CkBAIC0xNDA3LDYgKzE0NTcs
MTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFy
YXJncyhraW5kKQorICAgICAgICAmJiBjYWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSA+
IE9wdGlvbnM6Om1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcoKSkgeworICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgYmVjYXVzZSBvZiB2
YXJhcmdzLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAogICAg
IHVuc2lnbmVkIGlubGluaW5nQmFsYW5jZSA9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNh
bGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiAgICAgaWYgKHNwZWNpYWxpemF0
aW9uS2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KQogICAgICAgICBpbmxpbmluZ0JhbGFuY2UgPSBz
dGQ6Om1pbihpbmxpbmluZ0JhbGFuY2UsIE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0
cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKSk7CkBAIC0xNDE3LDggKzE0NzQs
NzUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNp
bXBsaWZpY2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGlt
ZXMsIGJ1dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUg
d2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4K
ICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtT
dGF0dXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAg
ICAgICAgY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwg
c3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5r
U3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50KTsKKworICAgICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQ7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHZhcmFyZ3MgY2FsbCwg
d2Ugd2FudCB0byBleHRyYWN0IHRoZSBhcmd1bWVudHMgcmlnaHQgbm93LgorICAgICAgICBpZiAo
SW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1hbmRhdG9yeU1pbmltdW07IC8vIGV4Y2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgaWYgKEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gY2FsbExpbmtTdGF0dXNbMF0u
ZnVuY3Rpb25FeGVjdXRhYmxlKCkpCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5TWluaW11bSA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVtID0gMDsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gaW5jbHVkZXMgInRoaXMiCisgICAgICAgICAgICB1bnNpZ25lZCBtYXhOdW1B
cmd1bWVudHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cy5tYXhO
dW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVtICsgMSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHNvcnQgb2YgcHJldGVuZCB0aGF0IHRoaXMg
KmlzKiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkLgorICAgICAgICAg
ICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBtYXhOdW1Bcmd1bWVudHM7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJPZmZzZXRPckZpcnN0
RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBtYXhOdW1Bcmd1bWVu
dHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0g
LVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICBzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSku
dG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQg
PSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2FkVmFyYXJnc0RhdGEu
YWRkKCk7CisgICAgICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dFN0YXJ0ICsgMSk7CisgICAgICAgICAgICBkYXRhLT5jb3VudCA9IFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZGF0
YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OworICAgICAgICAgICAgZGF0YS0+bGltaXQgPSBt
YXhOdW1Bcmd1bWVudHM7CisgICAgICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFu
ZGF0b3J5TWluaW11bTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkVG9HcmFwaChMb2Fk
VmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gSW4gREZHIElSIGJlZm9yZSBTU0EsIHdlIGNhbm5vdCBpbnNl
cnQgY29udHJvbCBmbG93IGJldHdlZW4gYWZ0ZXIgdGhlCisgICAgICAgICAgICAvLyBMb2FkVmFy
YXJncyBhbmQgdGhlIGxhc3QgU2V0QXJndW1lbnQuIFRoaXMgaXNuJ3QgYSBwcm9ibGVtIG9uY2Ug
d2UgZ2V0IHRvIERGRworICAgICAgICAgICAgLy8gU1NBLiBGb3J0dW5hdGVseSwgd2UgYWxzbyBo
YXZlIG90aGVyIHJlYXNvbnMgZm9yIG5vdCBpbnNlcnRpbmcgY29udHJvbCBmbG93CisgICAgICAg
ICAgICAvLyBiZWZvcmUgU1NBLgorICAgICAgICAgICAgCisgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCksIGZhbHNlKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGxhbWUsIGJ1
dCBpdCB3aWxsIGZvcmNlIHRoZSBjb3VudCB0byBiZSBmbHVzaGVkIGFzIGFuIGludC4gVGhpcyBk
b2Vzbid0CisgICAgICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9m
IGEgU2V0QXJndW1lbnQgYW5kIEZsdXNoZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBpcworICAgICAg
ICAgICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCisgICAgICAgICAgICBjb3VudFZhcmlh
YmxlLT5wcmVkaWN0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJn
ZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CisgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVu
dENvdW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsK
KyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChj
b3VudFZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhpc0Fy
Z3VtZW50KSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgbWF4TnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7Cisg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
U3RhcnQgKyBhcmd1bWVudCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWVy
Z2VTaG91bGROZXZlclVuYm94KHRydWUpOyAvLyBXZSBjdXJyZW50bHkgaGF2ZSBub3doZXJlIHRv
IHB1dCB0aGUgdHlwZSBjaGVjayBvbiB0aGUgTG9hZFZhcmFyZ3MuIExvYWRWYXJhcmdzIGlzIGVm
ZmVjdGZ1bCwgc28gYWZ0ZXIgaXQgZmluaXNoZXMsIHdlIGNhbm5vdCBleGl0LgorICAgICAgICAg
ICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZv
KHZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZWdpc3Rl
ck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7CisgICAgICAgIAogICAgICAg
ICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCiAgICAgICAgICAgICBjYWxsVGFy
Z2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0
LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtp
bmQsIENhbGxlckRvZXNOb3JtYWxMaW5raW5nLCBwcmVkaWN0aW9uLApAQCAtMTQzNywxMSArMTU2
MSw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBk
byBtb3JlIGRldGFpbGVkIHBvbHl2YXJpYW50L3BvbHltb3JwaGljIHByb2ZpbGluZzsgYW5kIHNl
Y29uZCwgaXQgcmVkdWNlcyBjb21waWxlIHRpbWVzIGluCiAgICAgLy8gdGhlIERGRy4gQW5kIGJ5
IHBvbHl2YXJpYW50IHByb2ZpbGluZyB3ZSBtZWFuIHBvbHl2YXJpYW50IHByb2ZpbGluZyBvZiAq
dGhpcyogY2FsbC4gTm90ZSB0aGF0CiAgICAgLy8gd2UgY291bGQgaW1wcm92ZSB0aGF0IGFzcGVj
dCBvZiB0aGlzIGJ5IGRvaW5nIHBvbHltb3JwaGljIGlubGluaW5nIGJ1dCBoYXZpbmcgdGhlIHBy
b2ZpbGluZwotICAgIC8vIGFsc28uIEN1cnJlbnRseSB3ZSBvcHQgYWdhaW5zdCB0aGlzLCBidXQg
aXQgY291bGQgYmUgaW50ZXJlc3RpbmcuIFRoYXQgd291bGQgcmVxdWlyZSBoYXZpbmcgYQotICAg
IC8vIHNlcGFyYXRlIG5vZGUgZm9yIGNhbGwgZWRnZSBwcm9maWxpbmcuCi0gICAgLy8gRklYTUU6
IEludHJvZHVjZSB0aGUgbm90aW9uIG9mIGEgc2VwYXJhdGUgY2FsbCBlZGdlIHByb2ZpbGluZyBu
b2RlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYw
MzMKLSAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFi
bGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZygpKSB7CisgICAgLy8gYWxzby4KKyAgICBpZiAoIWlz
RlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0Nh
bGxJbmxpbmluZygpCisgICAgICAgIHx8IElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQp
KSB7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5n
IGlubGluaW5nIChoYXJkKS5cbiIpOwogICAgICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1
cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwpAQCAtMTQ4Miw2ICsxNjA0LDggQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBkYXRhTG9nKCJTdGFjazog
IiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgfQogICAgIAorICAgIGludCByZWdp
c3Rlck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7CisgICAgCiAgICAgLy8g
VGhpcyBtYWtlcyBtZSB3aXNoIHRoYXQgd2Ugd2VyZSBpbiBTU0EgYWxsIHRoZSB0aW1lLiBXZSBu
ZWVkIHRvIHBpY2sgYSB2YXJpYWJsZSBpbnRvIHdoaWNoIHRvCiAgICAgLy8gc3RvcmUgdGhlIGNh
bGxlZSBzbyB0aGF0IGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byBhbGwgb2YgdGhlIGJsb2NrcyB3
ZSdyZSBhYm91dCB0byBjcmVhdGUuIFdlCiAgICAgLy8gZ2V0IGF3YXkgd2l0aCBkb2luZyBhbiBp
bW1lZGlhdGUtc2V0IGhlcmUgYmVjYXVzZSB3ZSB3b3VsZG4ndCBoYXZlIHBlcmZvcm1lZCBhbnkg
c2lkZSBlZmZlY3RzCkBAIC0zMTEzLDQzICszMjM3LDcwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCB0aGlzUmVnID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmd1bWVudHMgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGZpcnN0RnJlZVJl
ZyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZmly
c3RWYXJBcmdPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhcmd1bWVudHMsIGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoIW1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5z
bG93QXJndW1lbnRzKCkpOwotCi0gICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRz
Tm90Q3JlYXRlZCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2Fs
bEZyYW1lKCktPmFyZ3VtZW50cy5zaXplKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9mZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUgbGFz
dCB1c2VkIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUg
dGhpbmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCi0gICAgICAgICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOwotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQg
LT0gYXJnQ291bnQ7IC8vIFdlIHdpbGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KLSAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7IC8v
IFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCi0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgotICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAotICAgICAgICAgICAg
ICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCi0gICAgICAgICAgICAgICAgLXJlZ2lzdGVy
T2Zmc2V0KTsKLQotICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGlmIChh
cmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnVuY2hlY2tlZEFyZ3Vt
ZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKQorICAgICAgICAgICAgICAgICAgICAm
JiAhaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFyYXJncygpCisgICAgICAgICAgICAgICAgICAgICYm
ICFmaXJzdFZhckFyZ09mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21wdXRlIHRoZSByZWdpc3RlciBv
ZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNlZCByZWdpc3RlciwgYW5kCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhl
IGNhbGwgZnJhbWUuCisgICAgICAgICAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZp
cnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IGFy
Z0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1bWVudHMuCisgICAgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7
IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhbGlnbm1lbnQgcmlnaHQuCisg
ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOworCisgICAgICAgICAg
ICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0
aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2UgaXQKKyAgICAgICAgICAgICAg
ICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9uZSBpdC4KKyAgICAgICAgICAg
ICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJbW1lZGlh
dGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQorICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92
YXJhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lz
dGVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJh
cmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gRW1pdCBDYWxsRm9yd2FyZFZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBtZWFucyB3ZSBjYW5ub3QgaW5saW5lIGZvcndhcmRlZCB2YXJhcmdzIGNhbGxzIGluc2lk
ZSBhIHZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBjYWxsIGZyYW1lLiBXZSB3aWxsIHByb2Jh
Ymx5IGZpeCB0aGF0IG9uY2Ugd2UgZmluYWxseSBnZXQgcmlkIG9mIHRoZQorICAgICAgICAgICAg
ICAgIC8vIGFyZ3VtZW50cyBvYmplY3Qgc3BlY2lhbC1jYXNpbmcuCisgICAgICAgICAgICAgICAg
Q2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsK
KyAgICAgICAgICAgICAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNldCA9IGZpcnN0VmFyQXJnT2Zm
c2V0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIGNhbGwgPSBhZGRU
b0dyYXBoKAorICAgICAgICAgICAgICAgICAgICBDYWxsRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhk
YXRhKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgIGdldChW
aXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpKTsK
KyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAg
IHNldChyZXN1bHRSZWcsIGNhbGwpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Nh
bGxfdmFyYXJncyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2Un
bGwgZG8gaXQgYW5kIG1ha2UgaXQKLSAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNv
ZGUgaGFkIGRvbmUgaXQuCi0gICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJP
ZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1Jl
ZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKLSAgICAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgICAgICAgICByZXN1bHQsIENhbGws
IENvZGVGb3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCi0gICAgICAgICAg
ICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgaGFu
ZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsVmFyYXJncywgQ29kZUZvckNh
bGwpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0
VmFyYXJncywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9j
b25zdHJ1Y3RfdmFyYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNl
IG9wX2puZXFfcHRyOgogICAgICAgICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9yIG5v
dy4gSXQgbWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCiAgICAgICAg
ICAgICAvLyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUg
Z2VuZXJhbCwgc2luY2UgaXQncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTk2LDYgKzk2LDggQEAgaW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogY29k
ZUJsbwogCiBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlE
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHBjKQogeworICAgIFVOVVNFRF9Q
QVJBTShjb2RlQmxvY2spOyAvLyBUaGlzIGZ1bmN0aW9uIGRvZXMgc29tZSBieXRlY29kZSBwYXJz
aW5nLiBPcmRpbmFyaWx5IGJ5dGVjb2RlIHBhcnNpbmcgcmVxdWlyZXMgdGhlIG93bmluZyBDb2Rl
QmxvY2suIEl0J3Mgc29ydCBvZiBzdHJhbmdlIHRoYXQgd2UgZG9uJ3QgdXNlIGl0IGhlcmUgcmln
aHQgbm93LgorICAgIAogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX2VudGVy
OgogICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CkBAIC0xODIsNiArMTg0LDggQEAgQ2FwYWJpbGl0
eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGlj
X2Vycm9yOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBj
YXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAg
IGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAg
ICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6CkBAIC0yMjMsMTQgKzIyNyw2IEBAIENhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAgICAgcmV0dXJuIENhbkNv
bXBpbGVBbmRJbmxpbmU7CiAgICAgfQogCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAg
ICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0g
Y29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpCi0gICAgICAgICAgICAmJiAh
cGNbNl0udS5vcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIENhbklubGluZTsKLSAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNgotICAgICAgICByZXR1cm4gQ2Fubm90
Q29tcGlsZTsKLQogICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogCiAgICAgY2FzZSBvcF9jcmVhdGVf
bGV4aWNhbF9lbnZpcm9ubWVudDoKICAgICBjYXNlIG9wX25ld19mdW5jOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDggKzg2LDYgQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBmdW5jdGlvbkNhcGFiaWxpdAogICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENh
bkNvbXBpbGVBbmRJbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKICAgICBpZiAobWln
aHRDb21waWxlICYmICFtaWdodElubGluZSkKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3Vu
ZChDYW5Db21waWxlLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENv
bXBpbGUgJiYgbWlnaHRJbmxpbmUpCi0gICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2Fu
SW5saW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7CiAgICAgaWYgKCFtaWdodENvbXBpbGUg
JiYgIW1pZ2h0SW5saW5lKQogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNiArMzY1LDkg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29u
c3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoK
KyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAg
IGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2Ug
SW46CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CkBAIC00MDEsNiArNDA0LDEz
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgIC8vIFRoaXMgYWN0dWFsbHkgd3Jp
dGVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBpdCByZWFkcyB0aGUgYXJy
YXksIGl0IGRvZXMKKyAgICAgICAgLy8gc28gaW4gYSB3YXkgdGhhdCBtYXkgdHJpZ2dlciBnZXR0
ZXJzIG9yIHZhcmlvdXMgdHJhcHMuCisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0
ZShXb3JsZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5s
aW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5OTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5Miw3ICsyOTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0g
Q2FwYWJpbGl0eUxldmVsIHsKICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwKICAg
ICBDYW5Db21waWxlLAogICAgIENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxl
dmVsTm90U2V0CkBAIC0zMTIsNyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBh
YmlsaXR5TGV2ZWwgbAogaW5saW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZl
bCkKIHsKICAgICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2Fz
ZSBDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0
OgpAQCAtMzI1LDE0ICszMjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJC
b3VuZChDCiAgICAgc3dpdGNoIChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAg
ICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dp
dGNoIChiKSB7Ci0gICAgICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBp
bGVBbmRJbmxpbmU6Ci0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBj
YXNlIENhbkNvbXBpbGU6CiAgICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNv
bXBpbGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2Fs
bDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0
cnVjdDoKICAgICBjYXNlIEJyZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw2ICs4MjIsOCBAQCBwdWJsaWM6CiAg
ICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAg
IEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBC
YWc8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
OworICAgIEJhZzxDYWxsVmFyYXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOworICAgIEJhZzxM
b2FkVmFyYXJnc0RhdGE+IG1fbG9hZFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJp
YWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVu
ZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiw2ICsxMjIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxl
CiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFz
c2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4K
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgICAgICBtX2FkZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1Bv
aW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAjaWYgQ1BVKFg4NikKICAgICAgICAgLy8g
RklYTUU6IHNob3VsZCB1c2UgdGhlIGNhbGwgYWJzdHJhY3Rpb24sIGJ1dCB0aGlzIGlzIGN1cnJl
bnRseSBpbiB0aGUgU3BlY3VsYXRpdmVKSVQgbGF5ZXIhCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMjAgQEAgc3RydWN0
IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IENh
bGxWYXJhcmdzRGF0YSB7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0OworfTsKKworc3RydWN0
IExvYWRWYXJhcmdzRGF0YSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0OyAvLyBMb2NhbCBm
b3IgdGhlIGZpcnN0IGVsZW1lbnQuCisgICAgVmlydHVhbFJlZ2lzdGVyIGNvdW50OyAvLyBMb2Nh
bCBmb3IgdGhlIGNvdW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lU3RhcnQ7CisgICAg
VmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBvZmZzZXQ7IC8vIFdo
aWNoIGFycmF5IGVsZW1lbnQgdG8gc3RhcnQgd2l0aC4gVXN1YWxseSB0aGlzIGlzIDAuCisgICAg
dW5zaWduZWQgbWFuZGF0b3J5TWluaW11bTsgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBvbiB0
aGUgc3RhY2sgdGhhdCBtdXN0IGJlIGluaXRpYWxpemVkOyBpZiB0aGUgYXJyYXkgaXMgdG9vIHNo
b3J0IHRoZW4gdGhlIG1pc3NpbmcgZWxlbWVudHMgbXVzdCBnZXQgdW5kZWZpbmVkLgorICAgIHVu
c2lnbmVkIGxpbWl0OyAvLyBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0byBsb2FkLgorfTsK
KwogLy8gVGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8g
Tm9kZSBjb25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0
eXBpY2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAogLy8g
YSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4K
QEAgLTg4OCw2ICs5MDIsMzUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisg
ICAgYm9vbCBoYXNDYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgp
KSB7CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRW
YXJhcmdzOgorICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEqIGNhbGxWYXJhcmdzRGF0
YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQ2FsbFZhcmFyZ3NEYXRhKCkpOworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PENhbGxWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3M7CisgICAgfQorICAgIAorICAgIExvYWRWYXJhcmdzRGF0
YSogbG9hZFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNMb2FkVmFyYXJn
c0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8TG9hZFZhcmFyZ3NEYXRhKj4o
bV9vcEluZm8pOworICAgIH0KKyAgICAKICAgICBib29sIGhhc1Jlc3VsdCgpCiAgICAgewogICAg
ICAgICByZXR1cm4gISFyZXN1bHQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiB0aGlzIG11c3QgYmUgdGhlIGRpcmVj
dGx5IHN1YnNlcXVlbnQgcHJvcGVydHkgcHV0LiBOb3RlIHRoYXQgUHV0QnlWYWwgKi9cCiAgICAg
Lyogb3Bjb2RlcyB1c2UgVmFyQXJncyBiZWF1c2UgdGhleSBtYXkgaGF2ZSB1cCB0byA0IGNoaWxk
cmVuLiAqL1wKICAgICBtYWNybyhHZXRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAorICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykg
XAogICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3Mp
IFwKICAgICBtYWNybyhQdXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1Zh
ckFyZ3MpIFwKQEAgLTIxNyw2ICsyMTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgLyogQ2FsbHMuICovXAogICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKENvbnN0cnVjdCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAg
bWFjcm8oQ2FsbFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhDYWxsRm9yd2FyZFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhDb25zdHJ1Y3RWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmF0aXZlQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oTmF0aXZlQ29uc3RydWN0
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAg
ICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsMTcgQEAgdm9pZCBMb2NhbE9TUkF2
YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9j
YWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVz
aGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbGltaXQ7IGktLTspIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkp
ID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVl
LCBWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpICsgaSkpKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMDE4LDYgKzEwMTgsMjcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdy
aXRlKAogICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3Jp
dGUiKTsKIH0KIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3Mo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCBpbnQzMl90
IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYXJndW1l
bnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOworICAgIAorICAgIHJldHVy
biBzaXplT2ZWYXJhcmdzKGV4ZWMsIGFyZ3VtZW50cywgZmlyc3RWYXJBcmdPZmZzZXQpOworfQor
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiBleGVj
LCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVu
dHMsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5p
bXVtKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOworICAgIAorICAgIGxvYWRWYXJhcmdzKGV4ZWMsIFZp
cnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnREZXN0KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgCisgICAgZm9yIChpbnQzMl90IGkgPSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5p
bXVtOyArK2kpCisgICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRl
ZmluZWQoKTsKK30KKwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhp
bnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjUsNiArMTI1LDggQEAgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk1ha2VSb3BlMwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5k
U3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXpl
X3QgdGFibGVJbmRleCk7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmlu
ZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqKTsKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7CitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMy
X3QgZmlyc3RWYXJBcmdPZmZzZXQpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRW
YXJhcmdzKEV4ZWNTdGF0ZSosIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFs
dWUgYXJndW1lbnRzLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW5ndGgsIGludDMyX3QgbWFu
ZGF0b3J5TWluaW11bSk7CiAKIGludDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0
Qm94ZWREb3VibGVUb0ludDUyKEVuY29kZWRKU1ZhbHVlKTsKIGludDY0X3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db252ZXJ0RG91YmxlVG9JbnQ1Mihkb3VibGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTEgKzEzMywyNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLm9mZnNl
dCgpKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQog
ICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgd3JpdGVUb3AoKQogICAgIHsK
KyAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncykgeworICAgICAgICAgICAg
Ly8gTWFrZSBzdXJlIHdlIG5vdGUgdGhlIHdyaXRlcyB0byB0aGUgbG9jYWxzIHRoYXQgd2lsbCBz
dG9yZSB0aGUgYXJyYXkgZWxlbWVudHMgYW5kCisgICAgICAgICAgICAvLyBjb3VudC4KKyAgICAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7
CisgICAgICAgICAgICBtX3dyaXRlKGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAgICAgIG1fd3JpdGUoVmly
dHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBz
cGVjaWFsIGZvciBDYWxsRm9yd2FyZFZhcmFyZ3MsIHNpbmNlIGl0IHJlYWRzCisgICAgICAgIC8v
IG91ciBhcmd1bWVudHMgdGhlIHNhbWUgd2F5IHRoYXQgYW55IGVmZmVjdGZ1bCB0aGluZyBtaWdo
dC4KKyAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLm1fY29kZUJsb2NrLT51c2VzQXJndW1l
bnRzKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9jb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCiAgICAgICAgICAgICAgICAgbV93cml0ZSh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTg5LDYgKzE4OSwxMCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2Ug
Q29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6
CiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBjYXNlIE5ld0Fy
cmF5V2l0aFNpemU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjI0LDM3ICs2MjQsMTY4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVNaXNjU3RyaWN0RXEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKIHsKLSAgICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlz
Q2FsbCkKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgp
ID09IENvbnN0cnVjdCk7Ci0gICAgCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMg
YXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8g
Zm9yIGl0LgotICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOworICAg
IENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgYm9vbCBpc0NhbGw7CisgICAg
Ym9vbCBpc1ZhcmFyZ3M7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDYWxs
OgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbDsKKyAgICAgICAgaXNDYWxs
ID0gdHJ1ZTsKKyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3Ry
dWN0OworICAgICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9y
d2FyZFZhcmFyZ3M6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJn
czsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBjYWxsVHlw
ZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gZmFs
c2U7CisgICAgICAgIGlzVmFyYXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlw
ZSIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2dy
YXBoLmNoaWxkKG5vZGUsIDApOwogICAgIAotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2Fs
bFR5cGUgPSBpc0NhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0
cnVjdDsKKyAgICAvLyBHb3R0YSBsb2FkIHRoZSBhcmd1bWVudHMgc29tZWhvdy4gVmFyYXJncyBp
cyB0cmlja2llci4KKyAgICBpZiAoaXNWYXJhcmdzKSB7CisgICAgICAgIC8vIDEpIGdldCB0aGUg
YXJndW1lbnRzCisgICAgICAgIC8vIDIpIGZsdXNoIHJlZ2lzdGVycworICAgICAgICAvLyAzKSBz
ZXQgdXAgdGhlIGNhbGwgZnJhbWUKKyAgICAgICAgLy8gNCkgZ2V0IHRoZSBjYWxsZWUgYW5kICJ0
aGlzIiBhbmQgaGFuZGxlIHRoZW0KKyAgICAgICAgLy8gNSkgZmx1c2ggcmVnaXN0ZXJzIGFnYWlu
CisgICAgICAgIAorICAgICAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFy
YXJnc0RhdGEoKTsKKworICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIzOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2Fs
bEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICAvLyBXZSBhdm9pZCBjYWxsaW5nIGZsdXNo
UmVnaXN0ZXJzKCkgaW5zaWRlIHRoZSBjb250cm9sIGZsb3cgb2YgQ2FsbEZvcndhcmRWYXJhcmdz
LgorICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgYXV0byBsb2FkQXJndW1lbnRzR1BSID0gWyZdIChHUFJSZWcgcmVzZXJ2ZWRHUFIpIHsK
KyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAg
ICAgICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BS
KHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCisgICAgICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQUik7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgICAgICAgICBsb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAg
ICAgICAgICBpZiAocmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAg
ICAgICAgdW5sb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzY3JhdGNoR1BS
MSA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgcmVzZXJ2ZWRH
UFIpOworICAgICAgICAgICAgc2NyYXRjaEdQUjIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRj
aEdQUihhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCByZXNlcnZlZEdQUik7CisgICAgICAgICAg
ICBzY3JhdGNoR1BSMyA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQ
Uiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCByZXNlcnZlZEdQUik7CisgICAgICAgIH07Cisg
ICAgICAgIAorICAgICAgICBsb2FkQXJndW1lbnRzR1BSKEludmFsaWRHUFJSZWcpOworICAgICAg
ICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSB3aG9sZSByZWdpc3RlciBm
aWxlIHRvIG91cnNlbHZlcywgYW5kIGFyZ3VtZW50c0dQUiBoYXMgdGhlCisgICAgICAgIC8vIGFy
Z3VtZW50cyByZWdpc3Rlci4gU2VsZWN0IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgICAg
IAorICAgICAgICAvLyBXZSB3aWxsIHVzZSBzY3JhdGNoR1BSMiB0byBwb2ludCB0byBvdXIgc3Rh
Y2sgZnJhbWUuCisKKyAgICAgICAgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMgPSBtX2ppdC5n
cmFwaCgpLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7
CisgICAgICAgICAgICAvLyBEbyB0aGUgaG9ycmlmaWMgZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cykgb3B0aW1pemF0aW9uLgorICAgICAgICAgICAgLy8gRklYTUU6IGRvIHRoaXMgb3B0aW1pemF0
aW9uIGF0IHRoZSBJUiBsZXZlbCBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGJ5IHRlc3RpbmcgdGhl
CisgICAgICAgICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFRoaXMgd2lsbCBoYXBwZW4gb25j
ZSB3ZSBnZXQgcmlkIG9mIHRoZSBhcmd1bWVudHMgbGF6eSBjcmVhdGlvbiBhbmQKKyAgICAgICAg
ICAgIC8vIGxhenkgdGVhci1vZmYuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3Rh
Y2tTbG90cyksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFt
ZUZhc3RDYXNlKG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBz
Y3JhdGNoR1BSMywgbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+
Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiA9IHNj
cmF0Y2hHUFIyOworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzID0gbV9q
aXQuanVtcCgpOworICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgICAgICB9
CisKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7
CisgICAgICAgIAorICAgICAgICAvLyBSaWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVu
dHNHUFIgYW5kIHRoZSByZWdpc3RlciBmaWxlIGlzIGZsdXNoZWQuCisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIGFyZ3VtZW50c0dQUiwgbnVtVXNlZFN0YWNrU2xvdHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsK
KyAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSBoYXZlIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0
aGUgY2FsbGVlIGZyYW1lLCBidXQgd2UndmUgbG9zdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQuCisg
ICAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBhcmd1bWVudHMgb3BlcmFuZCB3aGlsZSBwcmVzZXJ2
aW5nIHRoZSBjYWxsZWUgZnJhbWUuCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2Vk
U3RhY2tTbG90cyksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSht
X2ppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGZhbHNlLCBzY3JhdGNoR1BSMSwgc2NyYXRj
aEdQUjEpOworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHNjcmF0Y2hHUFIxLCBHUFJJbmZvOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blNldHVwVmFyYXJnc0ZyYW1lLCBzY3JhdGNoR1BSMSwgYXJndW1lbnRzR1BSLCBmaXJzdFZhckFy
Z09mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgaGF2ZUFyZ3Vt
ZW50cy5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3Rl
ZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlc3VsdEdQUiwgR1BSSW5mbzo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5n
cmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBkb24n
dCBuZWVkIHRoZSBhcmd1bWVudHMgYXJyYXkgYW55bW9yZS4KKyAgICAgICAgaWYgKG5vZGUtPm9w
KCkgIT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0NhbGwpIHsKKyAgICAgICAgICAgIC8vIE5vdyBz
ZXQgdXAgdGhlICJ0aGlzIiBhcmd1bWVudC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRo
aXNBcmd1bWVudCh0aGlzLCBub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncyA/IG5vZGUt
PmNoaWxkMigpIDogbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNBcmd1
bWVudEdQUiA9IHRoaXNBcmd1bWVudC5ncHIoKTsKKyAgICAgICAgICAgIHRoaXNBcmd1bWVudC51
c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh0aGlzQXJndW1l
bnRzR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFNsb3QoMCkpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMg
bm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCisgICAgICAgIC8vIGZvciBpdC4K
KyAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gaXNDYWxsID8gMCA6IDE7CiAgICAgCi0g
ICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUt
PmZpcnN0Q2hpbGQoKV07Ci0gICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGls
ZCBpcyB0aGUgZnVuY3Rpb247IHRoZSBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUKLSAgICAv
LyBhcmd1bWVudHMuCi0gICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigp
IC0gMTsKKyAgICAgICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0
aGUgZnVuY3Rpb247IHRoZSBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUKKyAgICAgICAgLy8g
YXJndW1lbnRzLgorICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVu
KCkgLSAxOwogICAgIAotICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhp
c0FyZ3VtZW50OworICAgICAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRo
aXNBcmd1bWVudDsKICAgICAKLSAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIobnVtQXJncyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6
QXJndW1lbnRDb3VudCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIobnVtQXJncyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpOwogICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFz
c2VkQXJnczsgaSsrKSB7Ci0gICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92
YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKLSAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFy
Zy5ncHIoKTsKLSAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgeworICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9q
aXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsK
KyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgICAgICAgICB1c2UoYXJnRWRnZSk7
CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgbV9qaXQuY2FsbGVlQXJn
dW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChhcmdHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1l
bnQpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlz
LCBjYWxsZWVFZGdlKTsKICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwotICAg
IHVzZShjYWxsZWVFZGdlKTsKKyAgICBjYWxsZWUudXNlKCk7CiAgICAgbV9qaXQuc3RvcmU2NChj
YWxsZWVHUFIsIG1faml0LmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKICAgICAK
ICAgICBmbHVzaFJlZ2lzdGVycygpOwpAQCAtNjkyLDYgKzgyMywxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWVHUFIg
PSBjYWxsZWVHUFI7CiAgICAgCiAgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2Fs
bCwgdGFyZ2V0VG9DaGVjaywgY2FsbExpbmtJbmZvKTsKKyAgICAKKyAgICAvLyBJZiB3ZSB3ZXJl
IHZhcmFyZ3MsIHRoZW4gYWZ0ZXIgdGhlIGNhbGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0
YWJsaXNoIG91ciBzdGFjayBwb2ludGVyLgorICAgIGlmIChpc1ZhcmFyZ3MpCisgICAgICAgIG1f
aml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5yZWFjaGFi
bGUgW1tjbGFuZzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYgYW55IHRl
bXBsYXRlIGV4cGFuc2lvbiB1c2VzIGl0CkBAIC00MjMxLDkgKzQzNjYsNTIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBDYWxsOgogICAgIGNh
c2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2Fy
ZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBlbWl0Q2FsbChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsK
KyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7
CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICB7CisgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJn
dW1lbnRzR1BSLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCk7CisgICAgICAgIAorICAgICAgICBs
b2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgeworICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdl
IHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNh
ZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHks
IGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCisgICAgICAgIC8v
IHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4g
ZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAorICAgICAgICAvLyBwYXN0IHRo
ZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAg
ICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFu
Y2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAg
ICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAorICAgICAgICAgICAgICAgIFRy
dXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3Jl
MzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50
KSk7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdz
LCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c0dQUiwgZGF0YS0+b2Zmc2V0
LCBkYXRhLT5sZW5ndGgsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAgICAKKyAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAg
Y2FzZSBDcmVhdGVBY3RpdmF0aW9uOiB7CiAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAg
ICAKQEAgLTQzMzgsOSArNDUxNiwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVB
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRH
UFIpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAg
ICAgICAmJiAhSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Mobm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZS0+a2luZCkpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoCisgICAg
ICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBW
aXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdp
c3RlciksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KICAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDM1NCwyMCArNDU0MywyMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRD
b21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hp
bmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CiAgICAgICAg
IAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgewor
ICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAg
ICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKAogICAg
ICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKSwKICAgICAg
ICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRS
ZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFs
UmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3Rlciks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
c3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVzdWx0R1BSKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklY
TUU6IHRoZSBzbG93IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2FyZCBzcGVj
dWxhdGlvbiB0aGF0IHRoZQotICAgICAgICAvLyByZXN1bHQgaXMgYW4gaW50ZWdlci4gRm9yIG5v
dyB3ZSBwb3N0cG9uZSB0aGUgc3BlY3VsYXRpb24gYnkgaGF2aW5nIHRoaXMgcmV0dXJuCi0gICAg
ICAgIC8vIGEgSlNWYWx1ZS4KLSAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIGNyZWF0ZWQsIHRo
aXMsIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aCwgcmVzdWx0R1BSLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTc5
OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3OCw3ICs1NzgsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgLy8gVXNlZCB0byBBU1NFUlQg
Zmx1c2hSZWdpc3RlcnMoKSBoYXMgYmVlbiBjYWxsZWQgcHJpb3IgdG8KICAgICAvLyBjYWxsaW5n
IG91dCBmcm9tIEpJVCBjb2RlIHRvIGEgQyBoZWxwZXIgZnVuY3Rpb24uCiAgICAgYm9vbCBpc0Zs
dXNoZWQoKQpAQCAtNTkzLDcgKzU5Miw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQoTm9kZSog
bm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xh
eW91dFBoYXNlLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOwogICAgICAgICAKICAgICAg
ICAgLy8gQ29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBmcm9tIElSLgotICAg
ICAgICBib29sIGhhc0dldExvY2FsVW5saW5rZWQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBoYXNO
b2Rlc1RoYXROZWVkRml4dXAgPSBmYWxzZTsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAg
ICAgICBpZiAoIWJsb2NrKQpAQCAtODEsNyArODEsMjIgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQob3BlcmFuZC50b0xv
Y2FsKCkpOwotICAgICAgICAgICAgICAgICAgICBoYXNHZXRMb2NhbFVubGlua2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgICAgICAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0LmlzTG9jYWwoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxseSByZWxpZXMgb24gdGhlIGNvbnRpZ3Vp
dHkgb2Ygc3RhY2sgbGF5b3V0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+
c3RhcnQub2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlzTG9jYWwoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKGRh
dGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
fSAvLyB0aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCisgICAgICAgICAgICAgICAgICAg
IGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMTMsNiArMTI4
LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGFyZ3VtZW50c1JlZ2lz
dGVyLnRvTG9jYWwoKSk7CiAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldCh1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpLnRvTG9jYWwoKSk7CiAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhpbmxpbmVDYWxs
RnJhbWUtPmtpbmQpKSB7CisgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJl
Z2lzdGVyKAorICAgICAgICAgICAgICAgICAgICBKU1N0YWNrOjpBcmd1bWVudENvdW50ICsgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgYXJndW1lbnQtLSA+IDE7KSB7CiAgICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwpAQCAtMTQ4
LDI0ICsxNjgsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxd
ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbCgKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW3ZhcmlhYmxlLT5sb2NhbCgpLnRvTG9j
YWwoKV0pOworICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFs
bG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKGNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAot
ICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVy
KCkudG9Mb2NhbCgpXSk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVn
aXN0ZXIgPQorICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+
YXJndW1lbnRzUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKLSAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uWwotICAgICAgICAg
ICAgICAgICAgICB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkudG9Mb2NhbCgpXSkKKyAg
ICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lz
dGVyKGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKSkKICAgICAgICAgICAgICAgICA9
PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAg
ICAgICAgIGNvZGVCbG9jaygpLT5zZXRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rl
cik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+dW5jaGVj
a2VkQWN0aXZhdGlvblJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBjb2RlQmxv
Y2soKS0+c2V0QWN0aXZhdGlvblJlZ2lzdGVyKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGFsbG9jYXRpb25bY29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3Rlcigp
LnRvTG9jYWwoKV0pKTsKKyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJs
b2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIC8vIFRoaXMgcmVnaXN0ZXIgaXMgbmV2ZXIgdmFsaWQgZm9yIERGRyBjb2RlIGJsb2Nrcy4K
QEAgLTE3NiwxNSArMTkzLDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUtPnVzZXNBcmd1bWVu
dHMoKSkgewotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0
ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICAgICAgYWxsb2Nh
dGlvblttX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkudG9Mb2Nh
bCgpXSk7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3Rl
ciA9IGFzc2lnbigKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgbV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIAogICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChhbGxvY2F0aW9uW3VubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSku
dG9Mb2NhbCgpXSkKKyAgICAgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGlu
ZUNhbGxGcmFtZSkpKQogICAgICAgICAgICAgICAgICAgICA9PSB1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3RlcikpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1Zh
cmFyZ3MoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSkgeworICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzQ291bnRSZWdpc3RlciA9IGFzc2lnbigKKyAgICAgICAgICAgICAg
ICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykgewogICAgICAgICAgICAgICAg
IEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25z
WwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50UG9zaXRpb25TdGFydCArIGFyZ3Vt
ZW50XTsKQEAgLTIyNyw5ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIHN5
bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKTsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCk7IGktLTspIHsKICAgICAgICAgICAg
ICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXSA9IHNsb3dBcmd1bWVudHNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoc2xvd0Fy
Z3VtZW50c1tpXS5pbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWcuaXNMb2NhbCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bcmVnLnRvTG9jYWwoKV0pLm9mZnNldCgp
OworICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmluZGV4ID0gYXNzaWdu
KGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1ldHNbaV0uaW5kZXgpKS5vZmZz
ZXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBt
X2dyYXBoLm1fc2xvd0FyZ3VtZW50cyA9IFdURjo6bW92ZShuZXdTbG93QXJndW1lbnRzKTsKQEAg
LTIzNyw3ICsyNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8v
IEZpeCBHZXRMb2NhbFVubGlua2VkJ3MgdmFyaWFibGUgcmVmZXJlbmNlcy4KLSAgICAgICAgaWYg
KGhhc0dldExvY2FsVW5saW5rZWQpIHsKKyAgICAgICAgaWYgKGhhc05vZGVzVGhhdE5lZWRGaXh1
cCkgewogICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgICAgIGlmICgh
YmxvY2spCkBAIC0yNDYsMTAgKzI2NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWxV
bmxpbmtlZDogewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSBub2RlLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZCA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bb3BlcmFuZC50b0xvY2FsKCldKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFVubGlua2VkTWFjaGluZUxvY2FsKG9w
ZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5l
TG9jYWwoYXNzaWduKGFsbG9jYXRpb24sIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7
CisgICAgICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVD
b3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5jb3VudCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+c3Rh
cnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjYyLDYgKzI4NSwyMCBAQCBwdWJsaWM6
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKK3ByaXZhdGU6CisgICAg
VmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCA9IHNyYzsKKyAgICAgICAgaWYgKHJlc3VsdC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bcmVzdWx0LnRvTG9jYWwoKV07Cisg
ICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiB9OwogCiBib29sIHBlcmZv
cm1TdGFja0xheW91dChHcmFwaCYgZ3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTIwLDYgKzEyMCwxMCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9k
ZSogCiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgIGNhc2UgQ2FsbDoK
ICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2Fs
bEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExv
YWRWYXJhcmdzOgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVj
dDoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKQEAgLTEyOCw2ICsxMjgs
MjAgQEAgc3RhdGljIHZvaWQgZHVtcERhdGFTZWN0aW9uKERhdGFTZWN0aW9uKgogICAgIH0KIH0K
IAorc3RhdGljIGludCBvZmZzZXRPZlN0YWNrUmVnaW9uKFN0YWNrTWFwczo6UmVjb3JkTWFwJiBy
ZWNvcmRNYXAsIHVpbnQzMl90IHN0YWNrbWFwSUQpCit7CisgICAgU3RhY2tNYXBzOjpSZWNvcmRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGFja21hcElEKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChpdGVyICE9IGl0ZXIuZW5kKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIt
PnZhbHVlLnNpemUoKSA9PSAxKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZVswXS5s
b2NhdGlvbnMuc2l6ZSgpID09IDEpOworICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24gPQor
ICAgICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKG51bGxwdHIsIGl0ZXItPnZhbHVlWzBdLmxv
Y2F0aW9uc1swXSk7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5raW5kKCkg
PT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExvY2F0
aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2YoUmVnaXN0ZXIpKSk7Cisg
ICAgcmV0dXJuIGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgLyBzaXplb2YoUmVnaXN0ZXIpOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBEZXNjcmlwdG9yVHlwZT4KIHZvaWQgZ2VuZXJhdGVJQ0Zh
c3RQYXRoKAogICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEdlbmVyYXRl
ZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uLApAQCAtMjQzLDYgKzI1NywzMiBAQCBzdGF0aWMg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyc0Zvcihjb25zCiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0
KHJlY29yZC51c2VkUmVnaXN0ZXJTZXQoKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENhbGxUeXBlPgordm9pZCBhZGp1c3RDYWxs
SUNzRm9yU3RhY2ttYXBzKFZlY3RvcjxDYWxsVHlwZT4mIGNhbGxzLCBTdGFja01hcHM6OlJlY29y
ZE1hcCYgcmVjb3JkTWFwKQoreworICAgIC8vIEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3
ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUgUEMgaW4gTExWTQorICAg
IC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0
aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgorCisgICAgVmVjdG9yPENhbGxUeXBlPiBvbGRDYWxs
czsKKyAgICBvbGRDYWxscy5zd2FwKGNhbGxzKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ2FsbFR5cGUmIGNhbGwg
PSBvbGRDYWxsc1tpXTsKKyAgICAgICAgCisgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjpp
dGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2FsbC5zdGFja21hcElEKCkpOworICAgICAg
ICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52YWx1ZS5zaXpl
KCk7ICsraikgeworICAgICAgICAgICAgQ2FsbFR5cGUgY29weSA9IGNhbGw7CisgICAgICAgICAg
ICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZVtqXS5pbnN0cnVjdGlvbk9m
ZnNldDsKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChjb3B5KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5k
KCkpOworfQorCiBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAg
U3RhdGUmIHN0YXRlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29kZSwgR2Vu
ZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb24sCiAgICAgU3RhY2tNYXBzOjpSZWNvcmRN
YXAmIHJlY29yZE1hcCwgYm9vbCBkaWRTZWVVbndpbmRJbmZvKQpAQCAtMjUxLDE2ICsyOTEsMTQg
QEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFZNJiB2bSA9
IGdyYXBoLm1fdm07CiAgICAgU3RhY2tNYXBzIHN0YWNrbWFwcyA9IGppdENvZGUtPnN0YWNrbWFw
czsKICAgICAKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29y
ZE1hcC5maW5kKHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
aXRlciAhPSByZWNvcmRNYXAuZW5kKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVl
LnNpemUoKSA9PSAxKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZVswXS5sb2NhdGlv
bnMuc2l6ZSgpID09IDEpOwotICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24gPQotICAgICAg
ICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZqaXRDb2RlLT5zdGFja21hcHMsIGl0ZXItPnZhbHVl
WzBdLmxvY2F0aW9uc1swXSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5r
aW5kKCkgPT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJl
ZExvY2F0aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBSRUxF
QVNFX0FTU0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2YoUmVnaXN0ZXIp
KSk7Ci0gICAgaW50MzJfdCBsb2NhbHNPZmZzZXQgPSBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgp
IC8gc2l6ZW9mKFJlZ2lzdGVyKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICBpbnQg
bG9jYWxzT2Zmc2V0ID0KKyAgICAgICAgb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0
YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCkgKyBncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CisgICAg
CisgICAgaW50IHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0OworICAgIGlmIChzdGF0ZS52YXJhcmdz
U3BpbGxTbG90c1N0YWNrbWFwSUQgIT0gVUlOVF9NQVgpCisgICAgICAgIHZhcmFyZ3NTcGlsbFNs
b3RzT2Zmc2V0ID0gb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLnZhcmFyZ3NT
cGlsbFNsb3RzU3RhY2ttYXBJRCk7CisgICAgZWxzZQorICAgICAgICB2YXJhcmdzU3BpbGxTbG90
c09mZnNldCA9IDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubV9pbmxpbmVW
YXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV0uaW5saW5lQ2FsbEZy
YW1lOwpAQCAtNDQ0LDcgKzQ4Miw2IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0
YWNrTWFwcygKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0KICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc3RhdGUuY2hlY2tJbnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBDaGVj
a0luRGVzY3JpcHRvciYgY2hlY2tJbiA9IHN0YXRlLmNoZWNrSW5zW2ldOwogICAgICAgICAgICAg
CkBAIC00ODAsNyArNTE3LDYgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tN
YXBzKAogICAgICAgICAgICAgICAgIGNoZWNrSW4ubV9nZW5lcmF0b3JzLmFwcGVuZChDaGVja0lu
R2VuZXJhdG9yKHN0dWJJbmZvLCBzbG93Q2FsbCwgYmVnaW4pKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotCiAgICAgICAgIAogICAgICAgICBleGNlcHRpb25UYXJnZXQubGluaygmc2xvd1Bh
dGhKSVQpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25KdW1wID0gc2xv
d1BhdGhKSVQuanVtcCgpOwpAQCAtNTA3LDI1ICs1NDMsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIH0gCiAgICAgfQogICAgIAotICAgIC8vIEhh
bmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQg
dGhlbSBieSB0aGUgUEMgaW4gTExWTQotICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxp
ZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgotICAg
IFZlY3RvcjxKU0NhbGw+IG9sZENhbGxzID0gc3RhdGUuanNDYWxsczsKLSAgICBzdGF0ZS5qc0Nh
bGxzLnJlc2l6ZSgwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkQ2FsbHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgSlNDYWxsJiBjYWxsID0gb2xkQ2FsbHNbaV07Ci0gICAgICAg
IAotICAgICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1h
cC5maW5kKGNhbGwuc3RhY2ttYXBJRCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFw
LmVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBKU0NhbGwg
Y29weSA9IGNhbGw7Ci0gICAgICAgICAgICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVy
LT52YWx1ZVtqXS5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgICAgIHN0YXRlLmpzQ2FsbHMu
YXBwZW5kKGNvcHkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6c29ydChzdGF0
ZS5qc0NhbGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5kKCkpOworICAgIGFkanVzdENhbGxJ
Q3NGb3JTdGFja21hcHMoc3RhdGUuanNDYWxscywgcmVjb3JkTWFwKTsKICAgICAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykgewogICAgICAgICBKU0Nh
bGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOwpAQCAtNTQ3LDYgKzU2NSwyOSBAQCBzdGF0aWMg
dm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIGNhbGwubGluayh2bSwg
bGlua0J1ZmZlcik7CiAgICAgfQogICAgIAorICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMo
c3RhdGUuanNDYWxsc1ZhcmFyZ3NlcywgcmVjb3JkTWFwKTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGF0ZS5qc0NhbGxWYXJhcmdzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEpT
Q2FsbFZhcmFyZ3MmIGNhbGwgPSBzdGF0ZS5qc0NhbGxWYXJhcmdzZXNbaV07CisgICAgICAgIAor
ICAgICAgICBDQ2FsbEhlbHBlcnMgZmFzdFBhdGhKSVQoJnZtLCBjb2RlQmxvY2spOworICAgICAg
ICBjYWxsLmVtaXQoZmFzdFBhdGhKSVQsIHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0KTsKKyAgICAg
ICAgCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJh
dGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OworICAgICAgICBzaXplX3Qg
c2l6ZU9mSUMgPSBzaXplT2ZJQ0ZvcihjYWxsLm5vZGUoKSk7CisKKyAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKHZtLCBmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZJQyk7CisgICAg
ICAgIGlmICghbGlua0J1ZmZlci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkZh
aWxlZCB0byBpbnNlcnQgaW5saW5lIGNhY2hlIGZvciB2YXJhcmdzIGNhbGwgYmVjYXVzZSB3ZSB0
aG91Z2h0IHRoZSBzaXplIHdvdWxkIGJlICIsIHNpemVPZklDLCAiIGJ1dCBpdCBlbmRlZCB1cCBi
ZWluZyAiLCBmYXN0UGF0aEpJVC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpLCAiIHByaW9yIHRvIGNv
bXBhY3Rpb24uXG4iKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJU
eXBlX1Q6OmZpbGxOb3BzKAorICAgICAgICAgICAgc3RhcnRPZklDICsgbGlua0J1ZmZlci5zaXpl
KCksIHNpemVPZklDIC0gbGlua0J1ZmZlci5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgY2Fs
bC5saW5rKHZtLCBsaW5rQnVmZmVyLCBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNM
aW5rQnVmZmVyLT5lbnRyeXBvaW50KCkpOworICAgIH0KKyAgICAKICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKIAogICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChz
dGF0ZS5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hl
U2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTEgKzI4LDE0IEBACiAKICNpZiBFTkFC
TEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordXNpbmcgbmFtZXNwYWNlIERGRzsKKwogLy8gVGhl
IGRlZmF1bHQgc2l6ZXMgYXJlIHg4Ni02NC1zcGVjaWZpYywgYW5kIHdlcmUgZm91bmQgZW1waXJp
Y2FsbHkuIFRoZXkgaGF2ZSB0byBjb3ZlciB0aGUgd29yc3QKIC8vIHBvc3NpYmxlIGNvbWJpbmF0
aW9uIG9mIHJlZ2lzdGVycyBsZWFkaW5nIHRvIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGVuY29kaW5n
IG9mIGVhY2ggaW5zdHJ1Y3Rpb24gaW4KIC8vIHRoZSBJQy4KQEAgLTYxLDE3ICs2NCwyNSBAQCBz
aXplX3Qgc2l6ZU9mUHV0QnlJZCgpCiAjZW5kaWYKIH0KIAotc2l6ZV90IHNpemVPZkNoZWNrSW4o
KQorc2l6ZV90IHNpemVPZkNhbGwoKQogewogI2lmIENQVShBUk02NCkKLSAgICByZXR1cm4gNDsK
KyAgICByZXR1cm4gNTY7CiAjZWxzZQotICAgIHJldHVybiA1OyAKKyAgICByZXR1cm4gNTM7CiAj
ZW5kaWYKIH0KIAorc2l6ZV90IHNpemVPZkNhbGxWYXJhcmdzKCkKK3sKKyNpZiBDUFUoQVJNNjQp
CisgICAgcmV0dXJuIDU2OworI2Vsc2UKKyAgICByZXR1cm4gNTM7CisjZW5kaWYKK30KIAotc2l6
ZV90IHNpemVPZkNhbGwoKQorc2l6ZV90IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpCiB7CiAj
aWYgQ1BVKEFSTTY0KQogICAgIHJldHVybiA1NjsKQEAgLTgwLDYgKzkxLDQ3IEBAIHNpemVfdCBz
aXplT2ZDYWxsKCkKICNlbmRpZgogfQogCitzaXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFyYXJncygp
Cit7CisjaWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiA1NjsKKyNlbHNlCisgICAgcmV0dXJuIDUz
OworI2VuZGlmCit9CisKK3NpemVfdCBzaXplT2ZJbigpCit7CisjaWYgQ1BVKEFSTTY0KQorICAg
IHJldHVybiA0OworI2Vsc2UKKyAgICByZXR1cm4gNTsgCisjZW5kaWYKK30KKworc2l6ZV90IHNp
emVPZklDRm9yKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAg
Y2FzZSBHZXRCeUlkOgorICAgICAgICByZXR1cm4gc2l6ZU9mR2V0QnlJZCgpOworICAgIGNhc2Ug
UHV0QnlJZDoKKyAgICAgICAgcmV0dXJuIHNpemVPZlB1dEJ5SWQoKTsKKyAgICBjYXNlIENhbGw6
CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIHJldHVybiBzaXplT2ZDYWxsKCk7CisgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNhbGxWYXJhcmdzKCk7Cisg
ICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIHJldHVybiBzaXplT2ZDYWxsRm9y
d2FyZFZhcmFyZ3MoKTsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIHJldHVy
biBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCk7CisgICAgY2FzZSBJbjoKKyAgICAgICAgcmV0dXJu
IHNpemVPZkluKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUu
aAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxp
bmVDYWNoZVNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTIgKzI4LDIzIEBACiAKICNpZiBFTkFC
TEUoRlRMX0pJVCkKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworbmFtZXNwYWNl
IEpTQyB7CisKK25hbWVzcGFjZSBERkcgeworc3RydWN0IE5vZGU7Cit9CisKK25hbWVzcGFjZSBG
VEwgewogCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpOwogc2l6ZV90IHNpemVPZlB1dEJ5SWQoKTsK
IHNpemVfdCBzaXplT2ZDYWxsKCk7Ci1zaXplX3Qgc2l6ZU9mQ2hlY2tJbigpOworc2l6ZV90IHNp
emVPZkNhbGxWYXJhcmdzKCk7CitzaXplX3Qgc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCk7Citz
aXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpOworc2l6ZV90IHNpemVPZkluKCk7CisKK3Np
emVfdCBzaXplT2ZJQ0ZvcihERkc6Ok5vZGUqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCShyZXZpc2lv
biAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgSlNDYWxsOjpKU0NhbGwodW5zaWduZWQgc3Rh
Y2ttYXBJRCwgTm9kZQogICAgICwgbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCiAgICAgLCBtX2lu
c3RydWN0aW9uT2Zmc2V0KDApCiB7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbCB8fCBu
b2RlLT5vcCgpID09IENvbnN0cnVjdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAkocmV2
aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKIEpTQ2FsbEJhc2U6OkpT
Q2FsbEJhc2UoKQogICAgIDogbV90eXBlKENhbGxMaW5rSW5mbzo6Tm9uZSkKICAgICAsIG1fY2Fs
bExpbmtJbmZvKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbEJhc2UuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU0NhbGxCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBMaW5rQnVmZmVyOwogCituYW1lc3BhY2UgREZHIHsKK3N0cnVj
dCBOb2RlOworfQorCiBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgSlNDYWxsQmFzZSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGVExKU0NhbGxWYXJhcmdzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUg
IkRGR05vZGUuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitK
U0NhbGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKCkKKyAgICA6IG1fc3RhY2ttYXBJRChVSU5UX01B
WCkKKyAgICAsIG1fbm9kZShudWxscHRyKQorICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldChVSU5U
X01BWCkKK3sKK30KKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncyh1bnNpZ25lZCBzdGFj
a21hcElELCBOb2RlKiBub2RlKQorICAgIDogbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCisgICAg
LCBtX25vZGUobm9kZSkKKyAgICAsIG1fY2FsbEJhc2UoCisgICAgICAgIG5vZGUtPm9wKCkgPT0g
Q29uc3RydWN0VmFyYXJncyA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncyA6IENhbGxM
aW5rSW5mbzo6Q2FsbFZhcmFyZ3MsCisgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYykKKyAg
ICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBD
YWxsVmFyYXJncyB8fCBub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncyB8fCBub2RlLT5v
cCgpID09IENvbnN0cnVjdFZhcmFyZ3MpOworfQorCit1bnNpZ25lZCBKU0NhbGxWYXJhcmdzOjpu
dW1TcGlsbFNsb3RzTmVlZGVkKCkKK3sKKyAgICByZXR1cm4gNDsKK30KKwordm9pZCBKU0NhbGxW
YXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgaml0LCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQp
Cit7CisgICAgLy8gV2UgYXJlIHBhc3NlZCB0aHJlZSBwaWVjZXMgb2YgaW5mb3JtYXRpb246Cisg
ICAgLy8gLSBUaGUgY2FsbGVlLgorICAgIC8vIC0gVGhlIGFyZ3VtZW50cyBvYmplY3QuCisgICAg
Ly8gLSBUaGUgInRoaXMiIHZhbHVlLCBpZiBpdCdzIGEgY29uc3RydWN0b3IgY2FsbC4KKyAgICAK
KyAgICBib29sIGlzQ2FsbCA9IG1fbm9kZS0+b3AoKSAhPSBDb25zdHJ1Y3RWYXJhcmdzOworICAg
IAorICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7
CisgICAgCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAg
ICAKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcg
dGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMg
dG8gaGFuZGxlIHRoZSBmYWN0IHRoYXQgZm9yIENhbGxGb3J3YXJkVmFyYXJncywgdGhlIGFyZ3Vt
ZW50cyBhcmUgb24gdGhlIHN0YWNrCisgICAgLy8gaW4gdGhhdCBzdHVwaWQgYXJndW1lbnRzIHJl
Z2lzdGVyIHNsb3QuCisgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGxW
YXJhcmdzOgorICAgICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7Cisg
ICAgICAgIHRoaXNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBhcmd1bWVudHNHUFIgPSAKKyAg
ICB9CisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAg
ICBHUFJSZWcgdGhpc0dQUjsKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICB0aGlzR1BSID0gR1BS
SW5mbzo6YXJndW1lbnRHUFIyOworICAgIGVsc2UKKyAgICAgICAgdGhpc0dQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgCisgICAgY29uc3QgdW5zaWduZWQgY2FsbGVlU3BpbGxTbG90ID0gMDsKKyAg
ICBjb25zdCB1bnNpZ25lZCBhcmd1bWVudHNTcGlsbFNsb3QgPSAxOworICAgIGNvbnN0IHVuc2ln
bmVkIHRoaXNTcGlsbFNsb3QgPSAyOworICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrUG9pbnRlclNw
aWxsU2xvdCA9IDM7CisgICAgCisgICAgLy8gR2V0IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMuCisg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJl
Z2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJl
Z2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3Rl
cnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJl
Z2lzdGVycy5zZXQoY2FsbGVlR1BSKTsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChhcmd1bWVudHNH
UFIpOworICAgIGlmIChpc0NhbGwpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNHUFIp
OworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJldXNlZFJlZ2lzdGVy
cygpKTsKKyAgICAKKyAgICBhdXRvIGNvbXB1dGVVc2VkU3RhY2sgPSBbJl0gKEdQUlJlZyB0YXJn
ZXRHUFIsIHVuc2lnbmVkIGV4dHJhKSB7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCB0YXJnZXRHUFIpOworICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRhcmdldEdQUik7CisgICAgICAgIGlmIChleHRyYSkK
KyAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXh0cmEp
LCB0YXJnZXRHUFIpOworICAgICAgICBqaXQudXJzaGlmdFB0cihJbW0zMigzKSwgdGFyZ2V0R1BS
KTsKKyAgICB9OworICAgIAorICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsmXSAo
dm9pZCogY2FsbGVlKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAg
ICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAg
ICAgbV9leGNlcHRpb25zLmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVs
cGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRo
KSk7CisgICAgfTsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRoZSBmb3J3YXJkaW5nIGZhc3QgcGF0
aCwgaWYgaXQncyBiZWVuIHJlcXVlc3RlZC4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGF2ZUFy
Z3VtZW50czsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgaWYg
KG1fbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgLy8gRG8gdGhl
IGhvcnJpZmljIGZvby5hcHBseSh0aGlzLCBhcmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAg
ICAgLy8gRklYTUU6IGRvIHRoaXMgb3B0aW1pemF0aW9uIGF0IHRoZSBJUiBsZXZlbC4KKyAgICAg
ICAgCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgYXJn
dW1lbnRzR1BSKSk7CisgICAgICAgIAorICAgICAgICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hH
UFIyLCAwKTsKKyAgICAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBzY3Jh
dGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgbV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwg
c2xvd0Nhc2UpOworICAgICAgICByZXN1bHRHUFIgPSBzY3JhdGNoR1BSMjsKKyAgICAgICAgCisg
ICAgICAgIGhhdmVBcmd1bWVudHMgPSBqaXQuanVtcCgpOworICAgICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOworICAgIH0KKyAgICAKKyAgICAvLyBHb3R0YSBzcGlsbCB0aGUgY2FsbGVlLCBhcmd1
bWVudHMsIGFuZCB0aGlzIGJlY2F1c2Ugd2Ugd2lsbCBuZWVkIHRoZW0gbGF0ZXIgYW5kIHdlIHdp
bGwgaGF2ZSBzb21lCisgICAgLy8gY2FsbHMgdGhhdCBjbG9iYmVyIHRoZW0uCisgICAgaml0LnN0
b3JlNjQoY2FsbGVlR1BSLCBqaXQuYWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgY2FsbGVl
U3BpbGxTbG90KSk7CisgICAgaml0LnN0b3JlNjQoYXJndW1lbnRzR1BSLCBqaXQuYWRkcmVzc0Zv
cihzcGlsbFNsb3RzT2Zmc2V0ICsgYXJndW1lbnRzU3BpbGxTbG90KSk7CisgICAgaWYgKGlzQ2Fs
bCkKKyAgICAgICAgaml0LnN0b3JlNjQodGhpc0dQUiwgaml0LmFkZHJlc3NGb3Ioc3BpbGxTbG90
c09mZnNldCArIHRoaXNTcGlsbFNsb3QpKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIGppdC5hZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFj
a1BvaW50ZXJTcGlsbFNsb3QpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrID0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKKyAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpOworICAgIGNvbXB1dGVV
c2VkU3RhY2soc2NyYXRjaEdQUjEsIDApOworICAgIG1faml0LnN1YlB0cihUcnVzdGVkSW1tMzIo
ZXh0cmFTdGFjayksIEdQUkluZm86OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSk7CisgICAgY2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzKTsKKyAgICAK
KyAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjEpOworICAg
IGNvbXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQUjIsIGV4dHJhU3RhY2spOworICAgIGppdC5sb2Fk
NjQoaml0LmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50c1NwaWxsU2xvdCks
IGFyZ3VtZW50c0dQUik7CisgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hHUFIx
LCBmYWxzZSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2ppdC5hZGRQdHIoVHJ1
c3RlZEltbTMyKC1leHRyYVN0YWNrKSwgc2NyYXRjaEdQUjIsIEdQUkluZm86OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKHNjcmF0Y2hH
UFIyLCBhcmd1bWVudHNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0
VmFyQXJnT2Zmc2V0KSwgR1BSSW5mbzo6c2NyYXRjaEdQUjEpOworICAgIGNhbGxXaXRoRXhjcGV0
aW9uQ2hlY2sob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpOworICAgIAorICAgIGppdC5tb3Zl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIAorICAgIGlmIChtX25v
ZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICBoYXZlQXJndW1lbnRzLmxp
bmsoJmppdCk7CisgICAgCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZXN1bHRHUFIsIEdQUkluZm86OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBpZiAoaXNDYWxsKSB7CisgICAgICAgIGppdC5sb2Fk
NjQoaml0LmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpLCB0aGlz
R1BSKTsKKyAgICAgICAgaml0LnN0b3JlNjQodGhpc0dQUiwgaml0LmNhbGxlZUFyZ3VtZW50U2xv
dCgwKSk7CisgICAgfQorICAgIAorICAgIC8vIEhlbmNlZm9ydGggd2UgbWFrZSB0aGUgY2FsbC4g
VGhlIGJhc2UgRlRMIGNhbGwgbWFjaGluZXJ5IGV4cGVjdHMgdGhlIGNhbGxlZSBpbiByZWdUMCBh
bmQgZm9yIHRoZQorICAgIC8vIHN0YWNrIGZyYW1lIHRvIGFscmVhZHkgYmUgc2V0IHVwLCB3aGlj
aCBpdCBpcy4KKyAgICBqaXQubG9hZDY0KGppdC5hZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQg
KyBjYWxsZWVTcGlsbFNsb3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgbV9jYWxsQmFz
ZS5lbWl0KGppdCk7CisgICAgCisgICAgLy8gVW5kbyB0aGUgZGFtYWdlIHdlJ3ZlIGRvbmUuCisg
ICAgaml0LmxvYWRQdHIoaml0LmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHN0YWNrUG9p
bnRlclNwaWxsU2xvdCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9
CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIpCit7CisgICAgbV9jYWxsQmFz
ZS5saW5rKHZtLCBsaW5rQnVmZmVyKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsobV9leGNlcHRpb25z
LCBleGNlcHRpb25IYW5kbGVyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSlNDYWxsVmFyYXJncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEZUTEpTQ2FsbFZhcmFyZ3NfaAorI2RlZmluZSBGVExKU0NhbGxWYXJhcmdzX2gKKworI2lm
IEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgTGlua0J1ZmZlcjsKKworbmFtZXNwYWNlIERGRyB7CitzdHJ1Y3Qg
Tm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbFZhcmFyZ3MgeworcHVi
bGljOgorICAgIEpTQ2FsbFZhcmFyZ3MoKTsKKyAgICBKU0NhbGxWYXJhcmdzKHVuc2lnbmVkIHN0
YWNrbWFwSUQsIERGRzo6Tm9kZSopOworICAgIAorICAgIERGRzo6Tm9kZSogbm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBudW1TcGlsbFNs
b3RzTmVlZGVkKCk7CisgICAgCisgICAgdm9pZCBlbWl0KENDYWxsSGVscGVycyYsIGludDMyX3Qg
c3BpbGxTbG90c09mZnNldCk7CisgICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYsIENvZGVM
b2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIpOworICAgIAorICAgIHVuc2lnbmVkIHN0YWNr
bWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7IH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPChjb25zdCBKU0NhbGxWYXJhcmdzJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2luc3RydWN0aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9mZnNldDsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKKyAgICBE
Rkc6Ok5vZGUqIG1fbm9kZTsKKyAgICBKU0NhbGxCYXNlIG1fY2FsbEJhc2U7CisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBtX2V4Y2VwdGlvbnM7CisKK3B1YmxpYzoKKyAgICB1aW50MzJfdCBt
X2luc3RydWN0aW9uT2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKU0NhbGxWYXJhcmdzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNiArMTg1LDMwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0
SW50NjQobV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9vdXQu
aW50MzJaZXJvLCBjYXB0dXJlZEFsbG9jYSk7CiAgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSBo
YXZlIGFueSBDYWxsVmFyYXJncyB0aGVuIHdlIG5lZSB0byBoYXZlIGEgc3BpbGwgc2xvdCBmb3Ig
aXQuCisgICAgICAgIGJvb2wgaGFzVmFyYXJncyA9IGZhbHNlOworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogcHJlT3JkZXIpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
IGJsb2NrKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIENhbGxGb3J3
YXJkVmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIENvbnRydWN0VmFyYXJnczoKKyAgICAg
ICAgICAgICAgICAgICAgaGFzVmFyYXJncyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoaGFzVmFyYXJncykgeworICAgICAgICAgICAgTFZhbHVlIHZhcmFyZ3NTcGlsbFNsb3RzID0g
bV9vdXQuYWxsb2NhKAorICAgICAgICAgICAgICAgIGFycmF5VHlwZShtX291dC5pbnQ2NCwgSlND
YWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpKSk7CisgICAgICAgICAgICBtX2Z0bFN0
YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAg
ICAgICAgIG1fb3V0LmNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5z
aWMoKSwgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2tt
YXBJRCksCisgICAgICAgICAgICAgICAgbV9vdXQuaW50MzJaZXJvLCB2YXJhcmdzU3BpbGxTbG90
cyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1fY2FsbEZyYW1lID0gbV9vdXQucHRy
VG9JbnQoCiAgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0LmZyYW1lQWRkcmVzc0ludHJpbnNp
YygpLCBtX291dC5pbnQzMlplcm8pLCBtX291dC5pbnRQdHIpOwogICAgICAgICBtX3RhZ1R5cGVO
dW1iZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOwpAQCAtNjM2LDYgKzY2MCwx
NCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgICAgIGNvbXBp
bGVDYWxsT3JDb25zdHJ1Y3QoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENh
bGxWYXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2Fz
ZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZh
cmFyZ3MoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgor
ICAgICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7CisgICAgICAgICAgICBicmVhazsKICNp
ZiBFTkFCTEUoRlRMX05BVElWRV9DQUxMX0lOTElOSU5HKQogICAgICAgICBjYXNlIE5hdGl2ZUNh
bGw6CiAgICAgICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgpAQCAtMTk4Niw4ICsyMDE4LDIyIEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICBjaGVja0FyZ3VtZW50c05vdENyZWF0ZWQoKTsKIAot
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIW1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmFkZChtX291dC5s
b2FkMzJOb25OZWdhdGl2ZShwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSwgbV9v
dXQuY29uc3RJbnQzMigtMSkpKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIUlubGluZUNhbGxGcmFtZTo6aXNWYXJh
cmdzKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS1raW5kKSkgeworICAg
ICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigKKyAg
ICAgICAgICAgICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICgh
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVu
dENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50
UmVnaXN0ZXIgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIHNldEludDMyKAorICAgICAgICAgICAgICAg
IG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUo
cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnQzMigtMSkpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lk
IGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAtMzcwOCw2ICszNzU0LDc5IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKKyAgICB7CisgICAgICAgIExW
YWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAor
ICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBudWxscHRyOworICAgICAgICBMVmFsdWUgdGhp
c0FyZyA9IG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkg
eworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICAgICAganNBcmd1bWVudHMgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgdGhpc0FyZyA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICB0aGlzQXJnID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnN0
cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3Rh
Y2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMVmFs
dWU+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0
KHN0YWNrbWFwSUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMy
KHNpemVPZklDRm9yKG1fbm9kZSkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51
bGwobV9vdXQucmVmOCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50
MzIoMSArICEhanNBcmd1bWVudHMgKyAhIXRoaXNBcmcpKTsKKyAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChqc0NhbGxlZSk7CisgICAgICAgIGlmIChqc0FyZ3VtZW50cykKKyAgICAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoanNBcmd1bWVudHMpOworICAgICAgICBpZiAodGhpc0FyZykKKyAgICAg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodGhpc0FyZyk7CisgICAgICAgIAorICAgICAgICBjYWxs
UHJlZmxpZ2h0KCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwo
bV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7CisgICAgICAgIHNl
dEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUNDYWxsQ29udik7CisgICAg
ICAgIAorICAgICAgICBtX2Z0bFN0YXRlLmpzQ2FsbFZhcmFyZ3Nlcy5hcHBlbmQoSlNDYWxsVmFy
YXJncyhzdGFja21hcElELCBtX25vZGUpKTsKKyAgICAgICAgCisgICAgICAgIHNldEpTVmFsdWUo
Y2FsbCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKCkKKyAgICB7
CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCk7CisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoID0gdm1DYWxsKAorICAgICAg
ICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MpLCBtX2NhbGxGcmFt
ZSwganNBcmd1bWVudHMsCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPmZpcnN0
VmFyQXJnT2Zmc2V0KSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBj
aGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2lj
ZS4gVGhpcyBpcyBzYWZlCisgICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZN
J3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5j
ZQorICAgICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUg
d2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAg
ICAgLy8gcGFzdCB0aGUgc2l6aW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAg
ICAgIG1fb3V0LmFib3ZlT3JFcXVhbChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGlt
aXQpKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aCwgcGF5bG9hZEZv
cihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgCisgICAgICAgIHZtQ2FsbCgKKyAgICAg
ICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncyksIG1fY2FsbEZyYW1l
LAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0
KCkpLCBqc0FyZ3VtZW50cywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpLAorICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5sZW5ndGgpLCBtX291dC5jb25zdEludDMyKGRh
dGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKKyAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVKdW1wKCkK
ICAgICB7CkBAIC00MDEyLDcgKzQxMzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgICAgICAg
ICBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZDaGVj
a0luKCkpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQp
LCBtX291dC5jb25zdEludDMyKHNpemVPZkluKCkpLAogICAgICAgICAgICAgICAgICAgICBjb25z
dE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMSksIGNlbGwpOwogCiAgICAgICAg
ICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVn
Q2FsbENvbnYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OCw2ICs0OCwxMCBAQCBTdGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBo
KQogICAgICwgY29udGV4dChsbHZtLT5Db250ZXh0Q3JlYXRlKCkpCiAgICAgLCBtb2R1bGUoMCkK
ICAgICAsIGZ1bmN0aW9uKDApCisgICAgLCBoYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3Rh
Y2ttYXBJRChVSU5UX01BWCkKKyAgICAsIGhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQoVUlOVF9N
QVgpCisgICAgLCBjYXB0dXJlZFN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCB2YXJhcmdzU3Bp
bGxTbG90c1N0YWNrbWFwSUQoVUlOVF9NQVgpCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQog
ICAgICwgdW53aW5kRGF0YVNlY3Rpb24oMCkKICAgICAsIHVud2luZERhdGFTZWN0aW9uU2l6ZSgw
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTc5OTcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
RlRMSklURmluYWxpemVyLmgiCiAjaW5jbHVkZSAiRlRMSlNDYWxsLmgiCisjaW5jbHVkZSAiRlRM
SlNDYWxsVmFyYXJncy5oIgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkZU
TFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC03MSwxMCArNzIsMTIg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFj
a21hcElEOwogICAgIHVuc2lnbmVkIGhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQ7CiAgICAgdW5z
aWduZWQgY2FwdHVyZWRTdGFja21hcElEOworICAgIHVuc2lnbmVkIHZhcmFyZ3NTcGlsbFNsb3Rz
U3RhY2ttYXBJRDsKICAgICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5
SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxQdXRCeUlkRGVzY3JpcHRvcj4gcHV0QnlJZHM7CiAg
ICAgU2VnbWVudGVkVmVjdG9yPENoZWNrSW5EZXNjcmlwdG9yPiBjaGVja0luczsKICAgICBWZWN0
b3I8SlNDYWxsPiBqc0NhbGxzOworICAgIFZlY3RvcjxKU0NhbGxWYXJhcmdzPiBqc0NhbGxWYXJh
cmdzZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9y
PENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAgICAgdm9pZCogdW53aW5kRGF0YVNlY3Rpb247
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBA
QCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgcmV0dXJuIGludGVycHJl
dGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBjYWxsZXJTY29wZUNoYWlu
KTsKIH0KIAotdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNTdGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3Rh
Y2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit1bnNpZ25lZCBzaXplT2ZWYXJh
cmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmly
c3RWYXJBcmdPZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIGlmICghYXJndW1l
bnRzKQpAQCAtMTU2LDYgKzE1NiwxMyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENh
bGxGcmFtZSogCiAgICAgZWxzZQogICAgICAgICBsZW5ndGggPSAwOwogICAgIAorICAgIHJldHVy
biBsZW5ndGg7Cit9CisKK3Vuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTU3RhY2sqIHN0YWNrLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVt
VXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHNpemVPZlZhcmFyZ3MoY2FsbEZyYW1lLCBhcmd1bWVudHMsIGZpcnN0VmFy
QXJnT2Zmc2V0KTsKKyAgICAKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbGVlRnJh
bWVGb3JWYXJhcmdzKGNhbGxGcmFtZSwgbnVtVXNlZFN0YWNrU2xvdHMsIGxlbmd0aCArIDEpOwog
ICAgIGlmIChsZW5ndGggPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyB8fCAhc3RhY2stPmVuc3Vy
ZUNhcGFjaXR5Rm9yKGNhbGxlZUZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKICAgICAgICAgdGhyb3dT
dGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzA4LDYgKzMwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4g
Q2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIHBhZGRlZENhbGxlZUZy
YW1lT2Zmc2V0KTsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENhbGxGcmFt
ZSogZXhlYywgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsK
ICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogZXhlYywgSlNTdGFj
ayosIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMy
X3QgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIHZvaWQgbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBl
eGVjQ2FsbGVyLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBzb3Vy
Y2UsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwVmFy
YXJnc0ZyYW1lKENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBK
U1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxl
bmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3
ICsxNDksMTAgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbAogCiAg
ICAgICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUu
bV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIG1fZnJhbWUubV9h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKTsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVy
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
ZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKTsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxG
cmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKTsKICAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zm
c2V0ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTIsMTUgKzIxMiwyNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2Vw
dGlvbkZ1enooCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudEJ5dGVzKCkp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCkK
K0Fzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVj
ayhFeGNlcHRpb25DaGVja0tpbmQga2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewog
ICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7CisKKyAgICBpZiAod2lkdGggPT0gRmFySnVtcFdpZHRo
KQorICAgICAgICBraW5kID0gKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBJbnZlcnRl
ZEV4Y2VwdGlvbkNoZWNrIDogTm9ybWFsRXhjZXB0aW9uQ2hlY2spOwogICAgIAorICAgIEp1bXAg
cmVzdWx0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChraW5k
ID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVz
cyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOworICAgIHJlc3VsdCA9IGJyYW5jaFRlc3Q2
NChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRl
QWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOwogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICByZXR1cm4gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/
IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIq
Pih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Cisg
ICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVx
dWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgp
LT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAjZW5kaWYK
KyAgICAKKyAgICBpZiAod2lkdGggPT0gTm9ybWFsSnVtcFdpZHRoKQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgcmVhbEp1bXAgPSBwYXRjaGFibGVKdW1w
KCk7CisgICAgcmVzdWx0LmxpbmsodGhpcyk7CisgICAgCisgICAgcmV0dXJuIHJlYWxKdW1wLm1f
anVtcDsKIH0KIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRTdG9yZVN0cnVjdHVyZVdpdGhU
eXBlSW5mbyhBc3NlbWJseUhlbHBlcnMmIGppdCwgVHJ1c3RlZEltbVB0ciBzdHJ1Y3R1cmUsIFJl
Z2lzdGVySUQgZGVzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDYgKzMzOCwxMCBAQCBw
dWJsaWM6CiAgICAgfQogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7CisgICAgICAgIC8vIE5CLiBJdCdzIHRlbXB0aW5n
IG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBzb21ldGltZXMgdXNlIGFuIG9mZnNldCBmcm9tIHRo
ZSBzdGFjaworICAgICAgICAvLyByZWdpc3RlciBiZWNhdXNlIGZvciBzb21lIG9mZnNldHMgdGhh
dCB3aWxsIGVuY29kZSB0byBhIHNtYWxsZXIgaW5zdHJ1Y3Rpb24uIEJ1dCB3ZQorICAgICAgICAv
LyBjYW5ub3QgZG8gdGhpcy4gV2UgdXNlIHRoaXMgaW4gcGxhY2VzIHdoZXJlIHRoZSBzdGFjayBw
b2ludGVyIGhhcyBiZWVuIG1vdmVkIHRvIHNvbWUKKyAgICAgICAgLy8gdW5wcmVkaWN0YWJsZSBs
b2NhdGlvbi4KICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAg
ICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJl
Z2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQpAQCAtNTcxLDcgKzU3
NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CiAgICAgCiAgICAg
ZW51bSBFeGNlcHRpb25DaGVja0tpbmQgeyBOb3JtYWxFeGNlcHRpb25DaGVjaywgSW52ZXJ0ZWRF
eGNlcHRpb25DaGVjayB9OwotICAgIEp1bXAgZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNo
ZWNrS2luZCBraW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2spOworICAgIGVudW0gRXhjZXB0aW9u
SnVtcFdpZHRoIHsgTm9ybWFsSnVtcFdpZHRoLCBGYXJKdW1wV2lkdGggfTsKKyAgICBKdW1wIGVt
aXRFeGNlcHRpb25DaGVjaygKKyAgICAgICAgRXhjZXB0aW9uQ2hlY2tLaW5kID0gTm9ybWFsRXhj
ZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkp1bXBXaWR0aCA9IE5vcm1hbEp1bXBXaWR0aCk7CiAKICNp
ZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCiAgICAgc3RhdGljIHZvaWQgZW1pdENvdW50KE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIEFic3RyYWN0U2FtcGxpbmdDb3VudGVyJiBjb3VudGVyLCBpbnQz
Ml90IGluY3JlbWVudCA9IDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUklu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAko
cmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gWDg2UmVnaXN0ZXJzOjpl
ZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIgPSBYODZSZWdpc3RlcnM6OmVzaTsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblBy
ZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gWDg2UmVnaXN0ZXJzOjpyMTA7CiAgICAgc3RhdGljIGNv
bnN0IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRjaFJlZ2lzdGVyID0gTWFjcm9Bc3NlbWJsZXI6OnNj
cmF0Y2hSZWdpc3RlcjsKIAogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdpc3Rlcih1bnNpZ25lZCBp
bmRleCkKQEAgLTU3Nyw2ICs1NzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyByZXR1cm5WYWx1ZUdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MDsgLy8gcmVnVDAKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsgLy8g
cmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9
IEFSTTY0UmVnaXN0ZXJzOjp4MjsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZl
ZE5vbkFyZ3VtZW50R1BSID0gQVJNNjRSZWdpc3RlcnM6Ong4OwogICAgIHN0YXRpYyBjb25zdCBH
UFJSZWcgcGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDA7CiAK
ICAgICAvLyBHUFJSZWcgbWFwcGluZyBpcyBkaXJlY3QsIHRoZSBtYWNoaW5lIHJlZ3NpdGVyIG51
bWJlcnMgY2FuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNzk5
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2NCwxMSArNDY0LDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGls
ZShKSQogICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAg
IG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IERGRzo6Q2FuSW5saW5lOgotICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAg
ICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwotICAgICAgICBtX3Nob3VsZEVt
aXRQcm9maWxpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29t
cGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5C
ZU9wdGltaXplZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5Niw3ICsyOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGNv
bXBpbGVPcENhbGwoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCwgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOwotICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJ
bnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0
cnVjdGlvbiosIENhbGxMaW5rSW5mbyopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbChJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0Zy
YW1lKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewogICAg
IGludCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFyZ3Vt
ZW50cyA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTkwLDYgKzkwLDE2IEBAIHZvaWQg
SklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHIKICAgICBpZiAoY2FuT3B0aW1pemUp
CiAgICAgICAgIGVuZC5saW5rKHRoaXMpOwogICAgIAorICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3Vt
ZW50IGNvdW50LgorICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBKU1N0YWNrOjpBcmd1bWVudENv
dW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQp
LCByZWdUMik7CisgICAgbG9hZDgoJmluZm8tPm1heE51bUFyZ3VtZW50cywgcmVnVDApOworICAg
IEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOworICAgIEp1
bXAgbm90U2F0dXJhdGVkID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCByZWdUMiwgVHJ1c3RlZElt
bTMyKDI1NSkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDI1NSksIHJlZ1QyKTsKKyAgICBub3RT
YXR1cmF0ZWQubGluayh0aGlzKTsKKyAgICBzdG9yZTgocmVnVDIsICZpbmZvLT5tYXhOdW1Bcmd1
bWVudHMpOworICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKKyAgICAKICAgICAvLyBJbml0aWFs
aXplICd0aGlzJy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwgcmVnVDAp
OwogICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CkBAIC0x
MzQsNyArMTQ0LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydQog
CiB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKLSAgICBpbnQgY2Fs
bGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAgICBpbnQgY2FsbGVlID0gaW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgLyogQ2FsbGVyIGFsd2F5czoKICAgICAgICAg
LSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJhbWUuCkBAIC0xNTIs
NyArMTY0LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAg
ICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgo
b3BfY2FsbF92YXJhcmdzKSwgY2FsbF9hbmRfY2FsbF92YXJhcmdzX29wY29kZXNfbXVzdF9iZV9z
YW1lX2xlbmd0aCk7CiAgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9
PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSwgY2FsbF9hbmRfY29uc3RydWN0
X3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQor
PDw8PDw8PCAubWluZQorICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3MoaW5zdHJ1Y3Rpb24sIGlu
Zm8pOworPT09PT09PQogICAgICAgICBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoaW5zdHJ1Y3Rp
b24pOworPj4+Pj4+PiAucjE3OTg2MgogICAgIGVsc2UgewogICAgICAgICBpbnQgYXJnQ291bnQg
PSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9
IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CkBAIC0xNzYsOSArMTkyLDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgc3RvcmU2NChyZWdUMCwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAg
IAotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8o
KTsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKKyAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0aW9u
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAxLDExICsxMDEsMzEgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2Fz
ZShDQ2FsbAogCiB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJl
ZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJzdFZhckFyZ09m
ZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdFNldHVw
VmFyYXJnc0ZyYW1lRmFzdENhc2UoCi0gICAgICAgIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLAotICAgICAgICBWYWx1ZVJlY292ZXJ5
OjpkaXNwbGFjZWRJbkpTU3RhY2soVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpLCBEYXRhRm9ybWF0SW50MzIpLAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldCgwKSksCi0gICAgICAgIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2Fz
ZSk7CisgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1Vc2VkU2xvdHNH
UFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG51bGxwdHIsIGZpcnN0
VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7Cit9CisKK3ZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1l
RmFzdENhc2UoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIElu
bGluZUNhbGxGcmFtZSosIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0JiBzbG93Q2FzZSkKK3sKKyAgICBWYWx1ZVJlY292ZXJ5IGFyZ3VtZW50Q291bnRS
ZWNvdmVyeTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RBcmd1bWVudFJlZzsKKyAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJn
cyhpbmxpbmVDYWxsRnJhbWUtPmtpbmQpKSB7CisgICAgICAgICAgICBhcmd1bWVudENvdW50UmVj
b3ZlcnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIsIERhdGFGb3JtYXRJbnQz
Mik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcmd1bWVudENvdW50UmVjb3Zlcnkg
PSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCgKKyAgICAgICAgICAgICAgICBqc051bWJlcihpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIGZpcnN0
QXJndW1lbnRSZWcgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1
YWxSZWdpc3RlcigwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudENvdW50UmVjb3Zl
cnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJbnQzMik7Cisg
ICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldCgwKSk7CisgICAgfQorICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNl
KGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hH
UFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJndW1lbnRSZWcsIGZpcnN0VmFyQXJn
T2Zmc2V0LCBzbG93Q2FzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuaAkocmV2aXNpb24gMTc5
OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1l
RmFzdENhc2UoQ0NhbGwKIC8vIFZhcmlhbnQgdGhhdCBhc3N1bWVzIG5vcm1hbCBzdGFjayBmcmFt
ZS4KIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQ
UjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxs
SGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKIAorLy8gVmFyaWFudCBmb3IgcG90ZW50aWFs
bHkgaW5saW5lZCBzdGFjayBmcmFtZXMuCit2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RD
YXNlKENDYWxsSGVscGVycyYsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJlZyBzY3JhdGNo
R1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIElubGluZUNhbGxG
cmFtZSosIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
JiBzbG93Q2FzZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
IHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlID0gTm9y
bWFsQXJndW1lbnRzQ3JlYXRpb25Nb2RlKQogICAgIHsKLSAgICAgICAgQXJndW1lbnRzKiBhcmd1
bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KHZtLmhlYXAsIG9m
ZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKGlu
bGluZUNhbGxGcmFtZSkpKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKKyAgICAgICAgQXJndW1lbnRz
KiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KHZtLmhl
YXAsIG9mZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJheVNpemVJbkJ5
dGVzKGNhbGxGcmFtZSwgaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOwog
ICAgICAgICBhcmd1bWVudHMtPmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZSwgaW5saW5lQ2FsbEZy
YW1lLCBtb2RlKTsKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKICAgICB9CkBAIC0xMjQsNyAr
MTI0LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVTdHJpY3RNb2RlQ2FsbGVlSWZOZWNl
c3NhcnkoRXhlY1N0YXRlKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXpl
SW5CeXRlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKiBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgfQotICAgIHN0YXRpYyBz
aXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsgfQorICAgIHN0YXRpYyBzaXplX3QgcmVn
aXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0
ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgfQogICAgIGJvb2wgaXNBcmd1bWVu
dChzaXplX3QpOwogICAgIGJvb2wgdHJ5U2V0QXJndW1lbnQoVk0mLCBzaXplX3QgYXJndW1lbnQs
IEpTVmFsdWUpOwogICAgIEpTVmFsdWUgdHJ5R2V0QXJndW1lbnQoc2l6ZV90IGFyZ3VtZW50KTsK
QEAgLTM0MCwxMSArMzQ4LDE1IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRp
b24oQ2EKICAgICBtX292ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAgbV9vdmVycm9kZUNhbGxl
ciA9IGZhbHNlOwogICAgIG1faXNTdHJpY3RNb2RlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmlzU3RyaWN0TW9kZSgpOwot
CisgICAgCisgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlz
VmFsaWQoKSkKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCk7CisgICAgbV9udW1Bcmd1bWVudHMtLTsKKyAgICAKICAgICBzd2l0Y2ggKG1v
ZGUpIHsKICAgICBjYXNlIE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9kZTogewotICAgICAgICBt
X251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7Ci0g
ICAgICAgIAogICAgICAgICBpZiAobV9udW1Bcmd1bWVudHMpIHsKICAgICAgICAgICAgIGludCBv
ZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAgICAgbV9yZWdpc3RlcnMgPSByZWludGVy
cHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVy
cygpKSArIG9mZnNldEZvckFyZ3VtZW50T25lIC0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSkub2Zmc2V0KCk7CkBAIC0zNjEsNyArMzczLDYgQEAgaW5saW5lIHZvaWQgQXJndW1lbnRzOjpm
aW5pc2hDcmVhdGlvbihDYQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDbG9uZWRBcmd1bWVu
dHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwogICAgICAgICBpZiAobV9udW1Bcmd1bWVudHMpIHsK
ICAgICAgICAgICAgIGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAgICAgbV9y
ZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihj
YWxsRnJhbWUtPnJlZ2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50T25lIC0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2ICsyMTEsOCBA
QCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICAvKiBmcm9tIHN1cGVyIGxv
bmcgY29tcGlsZXMgdGhhdCB0YWtlIGEgbG90IG9mIG1lbW9yeS4gKi9cCiAgICAgdih1bnNpZ25l
ZCwgbWF4aW11bUlubGluaW5nQ2FsbGVyU2l6ZSwgMTAwMDApIFwKICAgICBcCisgICAgdih1bnNp
Z25lZCwgbWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZywgMTAwKSBcCisgICAgXAogICAgIHYoYm9v
bCwgZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcsIHRydWUpIFwKICAgICB2KGJvb2wsIGVu
YWJsZVBvbHl2YXJpYW50QnlJZElubGluaW5nLCB0cnVlKSBcCiAgICAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246542</attachid>
            <date>2015-02-13 12:43:55 -0800</date>
            <delta_ts>2015-02-13 14:17:16 -0800</delta_ts>
            <desc>almost compiling</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>138776</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
MTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFB
OEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAv
KiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAx
NDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2Nh
dGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxs
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAw
MEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8q
IFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICov
LAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAq
LywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
LAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkw
RjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBA
QAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4
NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiAr
NDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRy
dXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVy
c2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNy
Y0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQo
aW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0z
MkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMzEsNiArMzMxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
bXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODc2LDYgKzg3NiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJ
YiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgw
KQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBw
dWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNp
Z25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDog
ODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAg
Ly8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1
ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0o
cHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZv
KGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1f
bWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxs
TGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkK
K3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9j
b3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBi
b29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAo
IW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1w
KG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAg
bV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApA
QCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29u
c3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAg
LTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkg
Y29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgog
ICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAg
IGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0
LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAg
IENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFy
Z3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNv
cnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAg
ICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZh
cmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAg
cmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBpc1Zh
cmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtp
bmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtp
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzRXNjYXBlZCI7CiAgICAgY2FzZSBOb3RTdHJpbmdP
YmplY3Q6CiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKKyAgICBjYXNlIFZhcmFy
Z3NPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZsb3ciOwogICAgIGNhc2Ug
VW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5j
b3VudGFibGVJbnZhbGlkYXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEluYWRlcXVhdGVDb3ZlcmFnZSwgLy8gV2UgZXhp
dGVkIGJlY2F1c2Ugd2UgZW5kZWQgdXAgaW4gY29kZSB0aGF0IGRpZG4ndCBoYXZlIHByb2ZpbGlu
ZyBjb3ZlcmFnZS4KICAgICBBcmd1bWVudHNFc2NhcGVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
cmd1bWVudHMgZXNjYXBlZCBidXQgd2UgZGlkbid0IGV4cGVjdCB0aGVtIHRvLgogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgorICAgIFZhcmFyZ3NPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB2YXJhcmdzIGNhbGwgcGFzc2VkIG1vcmUgYXJndW1l
bnRzIHRoYW4gd2UgZXhwZWN0ZWQuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgV2F0Y2hkb2dU
aW1lckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdh
dGNoZG9nIHRpbWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKLSAgICAg
ICAgQVNTRVJUKHZhbHVlLmlzSGVhcFRvcCgpKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0Ns
ZWFyKCkpOwogICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2
YWx1ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1h
dCgpKSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEZpbHRyYXRp
b25PSyk7CkBAIC0yMDMsOSArMjAzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0Lgot
ICAgICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRl
IG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9u
ZSBzZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1
cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAgLy8gbm9uLWNs
ZWFyIHZhbHVlLgorICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChu
b2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2Fz
ZSBCaXRPcjoKQEAgLTEzMTUsNyArMTMyNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0
IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAg
ICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0
aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRo
ZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBzZXRD
b25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0ZW5kIHRoYXQgd2UgY2xvYmJl
cmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KQEAgLTE5NjQsNiArMTk3Niw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3Ao
KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBC
dXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhh
dCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgyLDEyICsxODIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSog
Y2FsbFRhcmdldCwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3Rh
dHVzKTsKICAgICB2b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwg
aW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJ
bnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAg
ICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB2b2lkIGhh
bmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBO
b2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtbnQpOwogICAgIHZvaWQg
dW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50KTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBo
YW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxpbmluZ0Nvc3QoQ2Fs
bFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7IC8vIFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmluZyBjYW5k
aWRhdGUuIEJ5IGNvbnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4KICAgICAv
LyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYg
d2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBj
YWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2ln
bmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMm
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVU
eXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uKTsKICAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1hbExpbmtp
bmcsIENhbGxlckxpbmtzTWFudWFsbHkgfTsKICAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwo
Tm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVk
IG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpOwogICAg
IHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQs
IENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxs
ZXJMaW5rYWJpbGl0eSk7CkBAIC01MjgsNiArNTI5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAg
ICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlcihKU1N0YWNrOjpDYWxsZWUpKSk7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0Vu
dHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lU3Rh
Y2tFbnRyeS0+bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IG51bUFyZ3VtZW50czsgYXJndW1lbnQtLSA+IDE7KQpAQCAtNjkxLDcg
KzY5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBvcCwgb3BJbmZvLCBjYWxsZWUsIGFyZ0Nv
dW50LCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRSZWcocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOworICAgICAgICAg
ICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAg
ICAKQEAgLTEwNDIsOCArMTA0NSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwo
CiB7CiAgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIAotICAgIGlmIChjYWxs
VGFyZ2V0LT5oYXNDb25zdGFudCgpKQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5r
U3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKKyAgICBp
ZiAoY2FsbFRhcmdldC0+aXNDZWxsQ29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMu
c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQoY2FsbFRhcmdldC0+YXNDZWxsKCkp
KTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQog
ICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CkBAIC0xMDYwLDcgKzEwNjMsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogICAgIE9wSW5mbyBjYWxsT3BJ
bmZvOwogICAgIAotICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNh
bGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgeworICAgIGlmIChoYW5kbGVJbmxp
bmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBr
aW5kLCBwcmVkaWN0aW9uKSkgewogICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQog
ICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOwog
ICAgICAgICByZXR1cm47CkBAIC0xMDcyLDcgKzEwNzUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKAogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5mdW5j
dGlvbigpOwogICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2lu
ZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgICAg
ICBpZiAoZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAg
ICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUsIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0
LCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNh
bGxlZSwgY2FsbFRhcmdldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJP
ZmZzZXQpKTsKICAgICAgICAgICAgIGNhbGxPcEluZm8gPSBPcEluZm8obV9ncmFwaC5mcmVlemUo
ZnVuY3Rpb24pKTsKIAogICAgICAgICAgICAgaWYgKG9wID09IENhbGwpCkBAIC0xMDg4LDExICsx
MDkxLDU0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2FsbChy
ZXN1bHQsIG9wLCBjYWxsT3BJbmZvLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogfQogCi12b2lkIEJ5dGVDb2RlUGFy
c2VyOjplbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFy
Z2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3Zv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9k
ZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBOb2RlKiB0aGlz
QXJndW1lbnQ7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBP
UENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7CisgICAgCisgICAgaW50IHJlc3Vs
dCA9IHBjWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgY2FsbGVlID0gcGNbMl0udS5vcGVyYW5kOwor
ICAgIGludCB0aGlzUmVnID0gcGNbM10udS5vcGVyYW5kOworICAgIGludCBhcmd1bWVudHMgPSBw
Y1s0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJlZVJlZyA9IHBjWzVdLnUub3BlcmFuZDsK
KyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBwY1s2XS51Lm9wZXJhbmQ7CisgICAgCisgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAKKyAgICBO
b2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsKKyAgICAKKyAg
ICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
Rm9yKAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRD
b2RlT3JpZ2luKCksCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywg
bV9jYWxsQ29udGV4dE1hcCk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50KCkp
CisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxWYXJp
YW50KGNhbGxUYXJnZXQtPmFzQ2VsbCgpKSk7CisgICAgCisgICAgaWYgKGNhbGxMaW5rU3RhdHVz
LmNhbk9wdGltaXplKCkKKyAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVz
dWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1Jl
ZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVD
YWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBp
ZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9jYWxsVmFyYXJnc0RhdGEuYWRk
KCk7CisgICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAg
ICAKKyAgICBOb2RlKiB0aGlzQ2hpbGQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0g
ICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCBy
ZWdpc3Rlck9mZnNldCkpOworICAgICAgICB0aGlzQ2hpbGQgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KHRoaXNSZWcpKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXNDaGlsZCA9IG51bGxwdHI7CisgICAg
CisgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBjYWxsVGFyZ2V0LCBnZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLCB0
aGlzQ2hpbGQpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKKyAgICBp
ZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7Cit9
CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBj
YWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnRSZWcp
Cit7CisgICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIGlmICh0aGlzQXJndW1lbnRSZWcuaXNW
YWxpZCgpKQorICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQodGhpc0FyZ3VtZW50UmVnKTsKICAg
ICBlbHNlCiAgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKQEAgLTEzOTMsNyArMTQzOSwxMSBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxU
YXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxM
aW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKK2Jvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUlubGluaW5nKAorICAgIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVz
dWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLAorICAgIGlu
dCByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3Vt
ZW50LAorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJn
dW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCisgICAgdW5zaWdu
ZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2lu
ZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICBkYXRhTG9nKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuIik7CkBAIC0xNDA3LDYgKzE0NTcs
MTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFy
YXJncyhraW5kKQorICAgICAgICAmJiBjYWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSA+
IE9wdGlvbnM6Om1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcoKSkgeworICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgYmVjYXVzZSBvZiB2
YXJhcmdzLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAogICAg
IHVuc2lnbmVkIGlubGluaW5nQmFsYW5jZSA9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNh
bGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiAgICAgaWYgKHNwZWNpYWxpemF0
aW9uS2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KQogICAgICAgICBpbmxpbmluZ0JhbGFuY2UgPSBz
dGQ6Om1pbihpbmxpbmluZ0JhbGFuY2UsIE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0
cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKSk7CkBAIC0xNDE3LDggKzE0NzQs
NzUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNp
bXBsaWZpY2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGlt
ZXMsIGJ1dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUg
d2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4K
ICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtT
dGF0dXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAg
ICAgICAgY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwg
c3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5r
U3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50KTsKKworICAgICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQ7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHZhcmFyZ3MgY2FsbCwg
d2Ugd2FudCB0byBleHRyYWN0IHRoZSBhcmd1bWVudHMgcmlnaHQgbm93LgorICAgICAgICBpZiAo
SW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1hbmRhdG9yeU1pbmltdW07IC8vIGV4Y2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgaWYgKEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gY2FsbExpbmtTdGF0dXNbMF0u
ZnVuY3Rpb25FeGVjdXRhYmxlKCkpCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5TWluaW11bSA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVtID0gMDsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gaW5jbHVkZXMgInRoaXMiCisgICAgICAgICAgICB1bnNpZ25lZCBtYXhOdW1B
cmd1bWVudHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cy5tYXhO
dW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVtICsgMSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHNvcnQgb2YgcHJldGVuZCB0aGF0IHRoaXMg
KmlzKiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkLgorICAgICAgICAg
ICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBtYXhOdW1Bcmd1bWVudHM7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJPZmZzZXRPckZpcnN0
RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBtYXhOdW1Bcmd1bWVu
dHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0g
LVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICBzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSku
dG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQg
PSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2FkVmFyYXJnc0RhdGEu
YWRkKCk7CisgICAgICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dFN0YXJ0ICsgMSk7CisgICAgICAgICAgICBkYXRhLT5jb3VudCA9IFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZGF0
YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OworICAgICAgICAgICAgZGF0YS0+bGltaXQgPSBt
YXhOdW1Bcmd1bWVudHM7CisgICAgICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFu
ZGF0b3J5TWluaW11bTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkVG9HcmFwaChMb2Fk
VmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gSW4gREZHIElSIGJlZm9yZSBTU0EsIHdlIGNhbm5vdCBpbnNl
cnQgY29udHJvbCBmbG93IGJldHdlZW4gYWZ0ZXIgdGhlCisgICAgICAgICAgICAvLyBMb2FkVmFy
YXJncyBhbmQgdGhlIGxhc3QgU2V0QXJndW1lbnQuIFRoaXMgaXNuJ3QgYSBwcm9ibGVtIG9uY2Ug
d2UgZ2V0IHRvIERGRworICAgICAgICAgICAgLy8gU1NBLiBGb3J0dW5hdGVseSwgd2UgYWxzbyBo
YXZlIG90aGVyIHJlYXNvbnMgZm9yIG5vdCBpbnNlcnRpbmcgY29udHJvbCBmbG93CisgICAgICAg
ICAgICAvLyBiZWZvcmUgU1NBLgorICAgICAgICAgICAgCisgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCksIGZhbHNlKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGxhbWUsIGJ1
dCBpdCB3aWxsIGZvcmNlIHRoZSBjb3VudCB0byBiZSBmbHVzaGVkIGFzIGFuIGludC4gVGhpcyBk
b2Vzbid0CisgICAgICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9m
IGEgU2V0QXJndW1lbnQgYW5kIEZsdXNoZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBpcworICAgICAg
ICAgICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCisgICAgICAgICAgICBjb3VudFZhcmlh
YmxlLT5wcmVkaWN0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJn
ZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CisgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVu
dENvdW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsK
KyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChj
b3VudFZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhpc0Fy
Z3VtZW50KSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgbWF4TnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7Cisg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
U3RhcnQgKyBhcmd1bWVudCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWVy
Z2VTaG91bGROZXZlclVuYm94KHRydWUpOyAvLyBXZSBjdXJyZW50bHkgaGF2ZSBub3doZXJlIHRv
IHB1dCB0aGUgdHlwZSBjaGVjayBvbiB0aGUgTG9hZFZhcmFyZ3MuIExvYWRWYXJhcmdzIGlzIGVm
ZmVjdGZ1bCwgc28gYWZ0ZXIgaXQgZmluaXNoZXMsIHdlIGNhbm5vdCBleGl0LgorICAgICAgICAg
ICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZv
KHZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZWdpc3Rl
ck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7CisgICAgICAgIAogICAgICAg
ICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCiAgICAgICAgICAgICBjYWxsVGFy
Z2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0
LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtp
bmQsIENhbGxlckRvZXNOb3JtYWxMaW5raW5nLCBwcmVkaWN0aW9uLApAQCAtMTQzNywxMSArMTU2
MSw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBk
byBtb3JlIGRldGFpbGVkIHBvbHl2YXJpYW50L3BvbHltb3JwaGljIHByb2ZpbGluZzsgYW5kIHNl
Y29uZCwgaXQgcmVkdWNlcyBjb21waWxlIHRpbWVzIGluCiAgICAgLy8gdGhlIERGRy4gQW5kIGJ5
IHBvbHl2YXJpYW50IHByb2ZpbGluZyB3ZSBtZWFuIHBvbHl2YXJpYW50IHByb2ZpbGluZyBvZiAq
dGhpcyogY2FsbC4gTm90ZSB0aGF0CiAgICAgLy8gd2UgY291bGQgaW1wcm92ZSB0aGF0IGFzcGVj
dCBvZiB0aGlzIGJ5IGRvaW5nIHBvbHltb3JwaGljIGlubGluaW5nIGJ1dCBoYXZpbmcgdGhlIHBy
b2ZpbGluZwotICAgIC8vIGFsc28uIEN1cnJlbnRseSB3ZSBvcHQgYWdhaW5zdCB0aGlzLCBidXQg
aXQgY291bGQgYmUgaW50ZXJlc3RpbmcuIFRoYXQgd291bGQgcmVxdWlyZSBoYXZpbmcgYQotICAg
IC8vIHNlcGFyYXRlIG5vZGUgZm9yIGNhbGwgZWRnZSBwcm9maWxpbmcuCi0gICAgLy8gRklYTUU6
IEludHJvZHVjZSB0aGUgbm90aW9uIG9mIGEgc2VwYXJhdGUgY2FsbCBlZGdlIHByb2ZpbGluZyBu
b2RlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYw
MzMKLSAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFi
bGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZygpKSB7CisgICAgLy8gYWxzby4KKyAgICBpZiAoIWlz
RlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0Nh
bGxJbmxpbmluZygpCisgICAgICAgIHx8IElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQp
KSB7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5n
IGlubGluaW5nIChoYXJkKS5cbiIpOwogICAgICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1
cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwpAQCAtMTQ4Miw2ICsxNjA0LDggQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBkYXRhTG9nKCJTdGFjazog
IiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgfQogICAgIAorICAgIGludCByZWdp
c3Rlck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7CisgICAgCiAgICAgLy8g
VGhpcyBtYWtlcyBtZSB3aXNoIHRoYXQgd2Ugd2VyZSBpbiBTU0EgYWxsIHRoZSB0aW1lLiBXZSBu
ZWVkIHRvIHBpY2sgYSB2YXJpYWJsZSBpbnRvIHdoaWNoIHRvCiAgICAgLy8gc3RvcmUgdGhlIGNh
bGxlZSBzbyB0aGF0IGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byBhbGwgb2YgdGhlIGJsb2NrcyB3
ZSdyZSBhYm91dCB0byBjcmVhdGUuIFdlCiAgICAgLy8gZ2V0IGF3YXkgd2l0aCBkb2luZyBhbiBp
bW1lZGlhdGUtc2V0IGhlcmUgYmVjYXVzZSB3ZSB3b3VsZG4ndCBoYXZlIHBlcmZvcm1lZCBhbnkg
c2lkZSBlZmZlY3RzCkBAIC0zMTEzLDQzICszMjM3LDcwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCB0aGlzUmVnID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmd1bWVudHMgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGZpcnN0RnJlZVJl
ZyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZmly
c3RWYXJBcmdPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhcmd1bWVudHMsIGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoIW1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5z
bG93QXJndW1lbnRzKCkpOwotCi0gICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRz
Tm90Q3JlYXRlZCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2Fs
bEZyYW1lKCktPmFyZ3VtZW50cy5zaXplKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9mZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUgbGFz
dCB1c2VkIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUg
dGhpbmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCi0gICAgICAgICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOwotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQg
LT0gYXJnQ291bnQ7IC8vIFdlIHdpbGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KLSAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7IC8v
IFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCi0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgotICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAotICAgICAgICAgICAg
ICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCi0gICAgICAgICAgICAgICAgLXJlZ2lzdGVy
T2Zmc2V0KTsKLQotICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGlmIChh
cmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnVuY2hlY2tlZEFyZ3Vt
ZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKQorICAgICAgICAgICAgICAgICAgICAm
JiAhaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFyYXJncygpCisgICAgICAgICAgICAgICAgICAgICYm
ICFmaXJzdFZhckFyZ09mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21wdXRlIHRoZSByZWdpc3RlciBv
ZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNlZCByZWdpc3RlciwgYW5kCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhl
IGNhbGwgZnJhbWUuCisgICAgICAgICAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZp
cnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IGFy
Z0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1bWVudHMuCisgICAgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7
IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhbGlnbm1lbnQgcmlnaHQuCisg
ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOworCisgICAgICAgICAg
ICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0
aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2UgaXQKKyAgICAgICAgICAgICAg
ICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9uZSBpdC4KKyAgICAgICAgICAg
ICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJbW1lZGlh
dGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQorICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92
YXJhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lz
dGVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJh
cmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gRW1pdCBDYWxsRm9yd2FyZFZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBtZWFucyB3ZSBjYW5ub3QgaW5saW5lIGZvcndhcmRlZCB2YXJhcmdzIGNhbGxzIGluc2lk
ZSBhIHZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBjYWxsIGZyYW1lLiBXZSB3aWxsIHByb2Jh
Ymx5IGZpeCB0aGF0IG9uY2Ugd2UgZmluYWxseSBnZXQgcmlkIG9mIHRoZQorICAgICAgICAgICAg
ICAgIC8vIGFyZ3VtZW50cyBvYmplY3Qgc3BlY2lhbC1jYXNpbmcuCisgICAgICAgICAgICAgICAg
Q2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsK
KyAgICAgICAgICAgICAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNldCA9IGZpcnN0VmFyQXJnT2Zm
c2V0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIGNhbGwgPSBhZGRU
b0dyYXBoKAorICAgICAgICAgICAgICAgICAgICBDYWxsRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhk
YXRhKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgIGdldChW
aXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpKTsK
KyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAg
IHNldChyZXN1bHRSZWcsIGNhbGwpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Nh
bGxfdmFyYXJncyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2Un
bGwgZG8gaXQgYW5kIG1ha2UgaXQKLSAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNv
ZGUgaGFkIGRvbmUgaXQuCi0gICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJP
ZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1Jl
ZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKLSAgICAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgICAgICAgICByZXN1bHQsIENhbGws
IENvZGVGb3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCi0gICAgICAgICAg
ICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgaGFu
ZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsVmFyYXJncywgQ29kZUZvckNh
bGwpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0
VmFyYXJncywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9j
b25zdHJ1Y3RfdmFyYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNl
IG9wX2puZXFfcHRyOgogICAgICAgICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9yIG5v
dy4gSXQgbWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCiAgICAgICAg
ICAgICAvLyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUg
Z2VuZXJhbCwgc2luY2UgaXQncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTk2LDYgKzk2LDggQEAgaW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogY29k
ZUJsbwogCiBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlE
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHBjKQogeworICAgIFVOVVNFRF9Q
QVJBTShjb2RlQmxvY2spOyAvLyBUaGlzIGZ1bmN0aW9uIGRvZXMgc29tZSBieXRlY29kZSBwYXJz
aW5nLiBPcmRpbmFyaWx5IGJ5dGVjb2RlIHBhcnNpbmcgcmVxdWlyZXMgdGhlIG93bmluZyBDb2Rl
QmxvY2suIEl0J3Mgc29ydCBvZiBzdHJhbmdlIHRoYXQgd2UgZG9uJ3QgdXNlIGl0IGhlcmUgcmln
aHQgbm93LgorICAgIAogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX2VudGVy
OgogICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CkBAIC0xODIsNiArMTg0LDggQEAgQ2FwYWJpbGl0
eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGlj
X2Vycm9yOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBj
YXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAg
IGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAg
ICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6CkBAIC0yMjMsMTQgKzIyNyw2IEBAIENhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAgICAgcmV0dXJuIENhbkNv
bXBpbGVBbmRJbmxpbmU7CiAgICAgfQogCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAg
ICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0g
Y29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpCi0gICAgICAgICAgICAmJiAh
cGNbNl0udS5vcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIENhbklubGluZTsKLSAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNgotICAgICAgICByZXR1cm4gQ2Fubm90
Q29tcGlsZTsKLQogICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogCiAgICAgY2FzZSBvcF9jcmVhdGVf
bGV4aWNhbF9lbnZpcm9ubWVudDoKICAgICBjYXNlIG9wX25ld19mdW5jOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDggKzg2LDYgQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBmdW5jdGlvbkNhcGFiaWxpdAogICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENh
bkNvbXBpbGVBbmRJbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKICAgICBpZiAobWln
aHRDb21waWxlICYmICFtaWdodElubGluZSkKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3Vu
ZChDYW5Db21waWxlLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENv
bXBpbGUgJiYgbWlnaHRJbmxpbmUpCi0gICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2Fu
SW5saW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7CiAgICAgaWYgKCFtaWdodENvbXBpbGUg
JiYgIW1pZ2h0SW5saW5lKQogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNiArMzY1LDkg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29u
c3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoK
KyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAg
IGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2Ug
SW46CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CkBAIC00MDEsNiArNDA0LDEz
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgIC8vIFRoaXMgYWN0dWFsbHkgd3Jp
dGVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBpdCByZWFkcyB0aGUgYXJy
YXksIGl0IGRvZXMKKyAgICAgICAgLy8gc28gaW4gYSB3YXkgdGhhdCBtYXkgdHJpZ2dlciBnZXR0
ZXJzIG9yIHZhcmlvdXMgdHJhcHMuCisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0
ZShXb3JsZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5s
aW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5OTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5Miw3ICsyOTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0g
Q2FwYWJpbGl0eUxldmVsIHsKICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwKICAg
ICBDYW5Db21waWxlLAogICAgIENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxl
dmVsTm90U2V0CkBAIC0zMTIsNyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBh
YmlsaXR5TGV2ZWwgbAogaW5saW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZl
bCkKIHsKICAgICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2Fz
ZSBDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0
OgpAQCAtMzI1LDE0ICszMjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJC
b3VuZChDCiAgICAgc3dpdGNoIChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAg
ICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dp
dGNoIChiKSB7Ci0gICAgICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBp
bGVBbmRJbmxpbmU6Ci0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBj
YXNlIENhbkNvbXBpbGU6CiAgICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNv
bXBpbGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2Fs
bDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0
cnVjdDoKICAgICBjYXNlIEJyZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw2ICs4MjIsOCBAQCBwdWJsaWM6CiAg
ICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAg
IEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBC
YWc8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
OworICAgIEJhZzxDYWxsVmFyYXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOworICAgIEJhZzxM
b2FkVmFyYXJnc0RhdGE+IG1fbG9hZFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJp
YWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVu
ZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiw2ICsxMjIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxl
CiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFz
c2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4K
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQb2lu
dGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogI2lmIENQVShYODYpCiAgICAgICAgIC8vIEZJ
WE1FOiBzaG91bGQgdXNlIHRoZSBjYWxsIGFic3RyYWN0aW9uLCBidXQgdGhpcyBpcyBjdXJyZW50
bHkgaW4gdGhlIFNwZWN1bGF0aXZlSklUIGxheWVyIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDIwIEBAIHN0cnVjdCBT
d2l0Y2hEYXRhIHsKICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKIH07CiAKK3N0cnVjdCBDYWxs
VmFyYXJnc0RhdGEgeworICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsKK307CisKK3N0cnVjdCBM
b2FkVmFyYXJnc0RhdGEgeworICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydDsgLy8gTG9jYWwgZm9y
IHRoZSBmaXJzdCBlbGVtZW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBjb3VudDsgLy8gTG9jYWwg
Zm9yIHRoZSBjb3VudC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVN0YXJ0OworICAgIFZp
cnR1YWxSZWdpc3RlciBtYWNoaW5lQ291bnQ7CisgICAgdW5zaWduZWQgb2Zmc2V0OyAvLyBXaGlj
aCBhcnJheSBlbGVtZW50IHRvIHN0YXJ0IHdpdGguIFVzdWFsbHkgdGhpcyBpcyAwLgorICAgIHVu
c2lnbmVkIG1hbmRhdG9yeU1pbmltdW07IC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb24gdGhl
IHN0YWNrIHRoYXQgbXVzdCBiZSBpbml0aWFsaXplZDsgaWYgdGhlIGFycmF5IGlzIHRvbyBzaG9y
dCB0aGVuIHRoZSBtaXNzaW5nIGVsZW1lbnRzIG11c3QgZ2V0IHVuZGVmaW5lZC4KKyAgICB1bnNp
Z25lZCBsaW1pdDsgLy8gTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbG9hZC4KK307CisK
IC8vIFRoaXMgdHlwZSB1c2VkIGluIHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5v
ZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlw
aWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEg
Y29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCkBA
IC04ODgsNiArOTAyLDM1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAg
IGJvb2wgaGFzQ2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkg
eworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBjYWxsVmFyYXJnc0RhdGEo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0NhbGxWYXJhcmdzRGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxDYWxsVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBvcCgpID09IExvYWRWYXJhcmdzOworICAgIH0KKyAgICAKKyAgICBMb2FkVmFyYXJnc0RhdGEq
IGxvYWRWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzTG9hZFZhcmFyZ3NE
YXRhKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PExvYWRWYXJhcmdzRGF0YSo+KG1f
b3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuICEhcmVzdWx0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogdGhpcyBtdXN0IGJlIHRoZSBkaXJlY3Rs
eSBzdWJzZXF1ZW50IHByb3BlcnR5IHB1dC4gTm90ZSB0aGF0IFB1dEJ5VmFsICovXAogICAgIC8q
IG9wY29kZXMgdXNlIFZhckFyZ3MgYmVhdXNlIHRoZXkgbWF5IGhhdmUgdXAgdG8gNCBjaGlsZHJl
bi4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhMb2FkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKFB1dEJ5VmFsRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwK
ICAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBc
CiAgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJB
cmdzKSBcCkBAIC0yMTcsNiArMjE4LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIC8qIENhbGxzLiAqL1wKICAgICBtYWNybyhDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhDb25zdHJ1Y3QsIE5v
ZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1h
Y3JvKENhbGxWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oQ2FsbEZvcndhcmRWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgbWFjcm8oQ29uc3RydWN0VmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKE5hdGl2ZUNvbnN0cnVjdCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDE3IEBAIHZvaWQgTG9jYWxPU1JBdmFp
bGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
KyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9CisgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hl
ZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSAr
IGkpKSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNW
YWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBkZWZhdWx0
OgogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTAxOCw2ICsxMDE4LDI3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZSgKICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgIkV4ZWN1dGVkIE5vdGlm
eVdyaXRlIik7CiB9CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJh
cmdzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50
MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGFy
Z3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKKyAgICAKKyAgICBy
ZXR1cm4gc2l6ZU9mVmFyYXJncyhleGVjLCBhcmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsK
K30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSog
ZXhlYywgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJn
dW1lbnRzLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW5ndGgsIGludDMyX3QgbWFuZGF0b3J5
TWluaW11bSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKKyAgICAKKyAgICBsb2FkVmFyYXJncyhleGVj
LCBWaXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBs
ZW5ndGgpOworICAgIAorICAgIGZvciAoaW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5
TWluaW11bTsgKytpKQorICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpz
VW5kZWZpbmVkKCk7Cit9CisKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbklu
dHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc5
OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI1LDYgKzEyNSw4IEBAIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
c2l6ZV90IHRhYmxlSW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hT
dHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRj
aHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOworaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBp
bnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25M
b2FkVmFyYXJncyhFeGVjU3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRK
U1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90
IG1hbmRhdG9yeU1pbmltdW0pOwogCiBpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29u
dmVydEJveGVkRG91YmxlVG9JbnQ1MihFbmNvZGVkSlNWYWx1ZSk7CiBpbnQ2NF90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29udmVydERvdWJsZVRvSW50NTIoZG91YmxlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDExICsxMzMsMjUg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKS5v
ZmZzZXQoKSkpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2Fs
bCkKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHdyaXRlVG9wKCkKICAg
ICB7CisgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MpIHsKKyAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBub3RlIHRoZSB3cml0ZXMgdG8gdGhlIGxvY2FscyB0aGF0IHdp
bGwgc3RvcmUgdGhlIGFycmF5IGVsZW1lbnRzIGFuZAorICAgICAgICAgICAgLy8gY291bnQuCisg
ICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0
YSgpOworICAgICAgICAgICAgbV93cml0ZShkYXRhLT5jb3VudCk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKKyAgICAgICAgICAgICAgICBtX3dyaXRl
KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhp
bmcgc3BlY2lhbCBmb3IgQ2FsbEZvcndhcmRWYXJhcmdzLCBzaW5jZSBpdCByZWFkcworICAgICAg
ICAvLyBvdXIgYXJndW1lbnRzIHRoZSBzYW1lIHdheSB0aGF0IGFueSBlZmZlY3RmdWwgdGhpbmcg
bWlnaHQuCisgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0Fy
Z3VtZW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7KQogICAgICAgICAgICAgICAgIG1fd3Jp
dGUodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE4OSw2ICsxODksMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVU
eXBlJiBzdAogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBj
YXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0
VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBO
ZXdBcnJheVdpdGhTaXplOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJv
dG90eXBlLmgiCisjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTcGls
bFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKIApAQCAtNjI0
LDM4ICs2MjUsMTY5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEK
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBib29s
IGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlzQ2FsbCkKLSAgICAgICAg
REZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7
Ci0gICAgCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90
IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0LgotICAgIGlu
dCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOworICAgIENhbGxMaW5rSW5mbzo6
Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgYm9vbCBpc0NhbGw7CisgICAgYm9vbCBpc1ZhcmFyZ3M7
CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDYWxsOgorICAgICAgICBjYWxs
VHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbDsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsKKyAgICAg
ICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0
OgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgICAgICBp
c0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Cisg
ICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgaXND
YWxsID0gdHJ1ZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5m
bzo6Q29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAgIGlz
VmFyYXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIERG
R19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxk
KG5vZGUsIDApOwogICAgIAotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBp
c0NhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKKyAg
ICAvLyBHb3R0YSBsb2FkIHRoZSBhcmd1bWVudHMgc29tZWhvdy4gVmFyYXJncyBpcyB0cmlja2ll
ci4KKyAgICBpZiAoaXNWYXJhcmdzKSB7CisgICAgICAgIC8vIDEpIGdldCB0aGUgYXJndW1lbnRz
CisgICAgICAgIC8vIDIpIGZsdXNoIHJlZ2lzdGVycworICAgICAgICAvLyAzKSBzZXQgdXAgdGhl
IGNhbGwgZnJhbWUKKyAgICAgICAgLy8gNCkgZ2V0IHRoZSBjYWxsZWUgYW5kICJ0aGlzIiBhbmQg
aGFuZGxlIHRoZW0KKyAgICAgICAgLy8gNSkgZmx1c2ggcmVnaXN0ZXJzIGFnYWluCisgICAgICAg
IAorICAgICAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEo
KTsKKworICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUjE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIzOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRW
YXJhcmdzKSB7CisgICAgICAgICAgICAvLyBXZSBhdm9pZCBjYWxsaW5nIGZsdXNoUmVnaXN0ZXJz
KCkgaW5zaWRlIHRoZSBjb250cm9sIGZsb3cgb2YgQ2FsbEZvcndhcmRWYXJhcmdzLgorICAgICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXV0
byBsb2FkQXJndW1lbnRzR1BSID0gWyZdIChHUFJSZWcgcmVzZXJ2ZWRHUFIpIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKHJlc2VydmVk
R1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
Z3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQUik7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICAgICAgICAgICAgICBsb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgICAgICBp
ZiAocmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgdW5s
b2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzY3JhdGNoR1BSMSA9IEpJVENv
bXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgcmVzZXJ2ZWRHUFIpOworICAg
ICAgICAgICAgc2NyYXRjaEdQUjIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1
bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCByZXNlcnZlZEdQUik7CisgICAgICAgICAgICBzY3JhdGNo
R1BSMyA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyLCByZXNlcnZlZEdQUik7CisgICAgICAgIH07CisgICAgICAgIAor
ICAgICAgICBsb2FkQXJndW1lbnRzR1BSKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSB3aG9sZSByZWdpc3RlciBmaWxlIHRvIG91
cnNlbHZlcywgYW5kIGFyZ3VtZW50c0dQUiBoYXMgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50cyBy
ZWdpc3Rlci4gU2VsZWN0IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgICAgIAorICAgICAg
ICAvLyBXZSB3aWxsIHVzZSBzY3JhdGNoR1BSMiB0byBwb2ludCB0byBvdXIgc3RhY2sgZnJhbWUu
CisKKyAgICAgICAgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMgPSBtX2ppdC5ncmFwaCgpLm1f
bmV4dE1hY2hpbmVMb2NhbDsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhh
dmVBcmd1bWVudHM7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAg
ICAgICAvLyBEbyB0aGUgaG9ycmlmaWMgZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0aW1p
emF0aW9uLgorICAgICAgICAgICAgLy8gRklYTUU6IGRvIHRoaXMgb3B0aW1pemF0aW9uIGF0IHRo
ZSBJUiBsZXZlbCBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGJ5IHRlc3RpbmcgdGhlCisgICAgICAg
ICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFRoaXMgd2lsbCBoYXBwZW4gb25jZSB3ZSBnZXQg
cmlkIG9mIHRoZSBhcmd1bWVudHMgbGF6eSBjcmVhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGxh
enkgdGVhci1vZmYuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3RhY2tTbG90cyks
IHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNl
KG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
Mywgbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJB
cmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiA9IHNjcmF0Y2hHUFIy
OworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzID0gbV9qaXQuanVtcCgp
OworICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgICAgICB9CisKKyAgICAg
ICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAgICAg
IAorICAgICAgICAvLyBSaWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVudHNHUFIgYW5k
IHRoZSByZWdpc3RlciBmaWxlIGlzIGZsdXNoZWQuCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3Vt
ZW50c0dQUiwgbnVtVXNlZFN0YWNrU2xvdHMsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSBoYXZlIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0aGUg
Y2FsbGVlIGZyYW1lLCBidXQgd2UndmUgbG9zdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQuCisgICAg
ICAgIC8vIFJlY29uc3RydWN0IHRoZSBhcmd1bWVudHMgb3BlcmFuZCB3aGlsZSBwcmVzZXJ2aW5n
IHRoZSBjYWxsZWUgZnJhbWUuCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3Rh
Y2tTbG90cyksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShtX2pp
dCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGZhbHNlLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQ
UjEpOworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSwgNSAqIHNpemVvZih2b2lkKikpKSksIHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TZXR1cFZhcmFyZ3NGcmFtZSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIx
LCBhcmd1bWVudHNHUFIsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2Fy
ZFZhcmFyZ3MpCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNo
ZWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBhcmd1bWVudHMg
YXJyYXkgYW55bW9yZS4KKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ2FsbEZvcndhcmRWYXJh
cmdzKQorICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChpc0NhbGwpIHsKKyAgICAgICAgICAgIC8vIE5vdyBzZXQgdXAgdGhlICJ0aGlzIiBhcmd1
bWVudC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNBcmd1bWVudCh0aGlzLCBub2Rl
LT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncyA/IG5vZGUtPmNoaWxkMigpIDogbm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNBcmd1bWVudEdQUiA9IHRoaXNBcmd1bWVu
dC5ncHIoKTsKKyAgICAgICAgICAgIHRoaXNBcmd1bWVudC51c2UoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh0aGlzQXJndW1lbnRHUFIsIEpJVENvbXBpbGVyOjpj
YWxsZWVBcmd1bWVudFNsb3QoMCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQg
d2UgaGF2ZSB0byBtYWtlIHNwYWNlCisgICAgICAgIC8vIGZvciBpdC4KKyAgICAgICAgaW50IGR1
bW15VGhpc0FyZ3VtZW50ID0gaXNDYWxsID8gMCA6IDE7CiAgICAgCi0gICAgRWRnZSBjYWxsZWVF
ZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKV07
Ci0gICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rp
b247IHRoZSBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUKLSAgICAvLyBhcmd1bWVudHMuCi0g
ICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAg
Ly8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247IHRo
ZSBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUKKyAgICAgICAgLy8gYXJndW1lbnRzLgorICAg
ICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogICAgIAot
ICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OworICAg
ICAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKICAg
ICAKLSAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJn
cyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
OworICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVt
QXJncyksIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKTsKICAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7
IGkrKykgewotICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hp
bGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcodGhpcywgYXJnRWRnZSk7Ci0gICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7
Ci0gICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Q
YXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7CisgICAgICAgICAgICBHUFJS
ZWcgYXJnR1BSID0gYXJnLmdwcigpOworICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwogICAgICAg
ICAKLSAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50U2xv
dChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoYXJn
R1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVu
dCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMs
IGNhbGxlZUVkZ2UpOwogICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0gICAg
dXNlKGNhbGxlZUVkZ2UpOwotICAgIG1faml0LnN0b3JlNjQoY2FsbGVlR1BSLCBtX2ppdC5jYWxs
ZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgY2FsbGVlLnVzZSgpOworICAgIG1f
aml0LnN0b3JlNjQoY2FsbGVlR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KEpTU3Rh
Y2s6OkNhbGxlZSkpOwogICAgIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKQEAgLTY5Miw2ICs4
MjQsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIGNh
bGxMaW5rSW5mby0+Y2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIAogICAgIG1faml0LmFkZEpT
Q2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7Cisg
ICAgCisgICAgLy8gSWYgd2Ugd2VyZSB2YXJhcmdzLCB0aGVuIGFmdGVyIHRoZSBjYWxscyBhcmUg
ZG9uZSwgd2UgbmVlZCB0byByZWVzdGFibGlzaCBvdXIgc3RhY2sgcG9pbnRlci4KKyAgICBpZiAo
aXNWYXJhcmdzKQorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmdyYXBo
KCkuc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAK
IC8vIENsYW5nIHNob3VsZCBhbGxvdyB1bnJlYWNoYWJsZSBbW2NsYW5nOjpmYWxsdGhyb3VnaF1d
IGluIHRlbXBsYXRlIGZ1bmN0aW9ucyBpZiBhbnkgdGVtcGxhdGUgZXhwYW5zaW9uIHVzZXMgaXQK
QEAgLTQyMzEsOSArNDM2Nyw1MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBD
YWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0
cnVjdFZhcmFyZ3M6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJl
ZyBhcmd1bWVudHNHUFI7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFy
Z3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNHUFIg
PSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFy
Z3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNldCk7
CisgICAgICAgIAorICAgICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAg
ICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgdW5sb2NrKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVy
ZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3Bl
cnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBv
ZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBj
b21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxk
IGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdo
dAorICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2Uo
KSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BS
LAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKKyAgICAgICAg
CisgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICAKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgZGF0YS0+bWFjaGluZVN0YXJ0Lm9m
ZnNldCgpLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVB
Y3RpdmF0aW9uOiB7CiAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKQEAgLTQzMzgs
OSArNDUxNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwotICAgICAg
ICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSwKKyAg
ICAgICAgICAgICAgICByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICgh
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBh
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRD
b3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJl
Z2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
X2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KICAgICAg
ICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtNDM1NCwyMCArNDU0NCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKAog
ICAgICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKSwKICAg
ICAgICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291
bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3Rl
ciksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8g
RklYTUU6IHRoZSBzbG93IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2FyZCBz
cGVjdWxhdGlvbiB0aGF0IHRoZQotICAgICAgICAvLyByZXN1bHQgaXMgYW4gaW50ZWdlci4gRm9y
IG5vdyB3ZSBwb3N0cG9uZSB0aGUgc3BlY3VsYXRpb24gYnkgaGF2aW5nIHRoaXMgcmV0dXJuCi0g
ICAgICAgIC8vIGEgSlNWYWx1ZS4KLSAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIGNyZWF0ZWQs
IHRoaXMsIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aCwgcmVzdWx0R1BSLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
MTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3OCw3ICs1NzgsNiBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgLy8gVXNlZCB0byBBU1NF
UlQgZmx1c2hSZWdpc3RlcnMoKSBoYXMgYmVlbiBjYWxsZWQgcHJpb3IgdG8KICAgICAvLyBjYWxs
aW5nIG91dCBmcm9tIEpJVCBjb2RlIHRvIGEgQyBoZWxwZXIgZnVuY3Rpb24uCiAgICAgYm9vbCBp
c0ZsdXNoZWQoKQpAQCAtNTkzLDcgKzU5Miw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQoTm9k
ZSogbm9kZSkKQEAgLTExMDksNiArMTEwNywyNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWlog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQgYXJnMiwgdW5z
aWduZWQgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSk7CisgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihG
X0pJVE9wZXJhdGlvbl9FRkpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZElt
bTMyKGFyZzMpLCBhcmc0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcyKQorICAgIHsKKyAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FWkpaWlogb3BlcmF0aW9uLCB1bnNpZ25lZCBhcmcxLCBHUFJS
ZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQsIHVuc2lnbmVkIGFyZzUpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMy
KGFyZzEpLCBhcmcyLCBUcnVzdGVkSW1tMzIoYXJnMyksIGFyZzQsIFRydXN0ZWRJbW0zMihhcmc1
KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgTm9S
ZXN1bHRUYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Rh
Y2tMYXlvdXRQaGFzZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2
LDcgQEAgcHVibGljOgogICAgICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKICAgICAgICAgCiAg
ICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgZnJvbSBJUi4K
LSAgICAgICAgYm9vbCBoYXNHZXRMb2NhbFVubGlua2VkID0gZmFsc2U7CisgICAgICAgIGJvb2wg
aGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAg
ICAgICAgICAgaWYgKCFibG9jaykKQEAgLTgxLDcgKzgxLDIyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KG9wZXJhbmQu
dG9Mb2NhbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzR2V0TG9jYWxVbmxpbmtlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICAg
ICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNvdW50LmlzTG9jYWwoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGRhdGEtPmNvdW50LnRvTG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2FsKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVzIG9uIHRoZSBjb250
aWd1aXR5IG9mIHN0YWNrIGxheW91dAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdu
bWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVhbFJlZ2lzdGVyKGRh
dGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3Rl
cihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0gLy8gdGhlIGVsc2UgY2FzZSBzaG91bGRuJ3QgaGFwcGVuLgorICAgICAgICAgICAgICAg
ICAgICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTEzLDYg
KzEyOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChhcmd1bWVudHNS
ZWdpc3Rlci50b0xvY2FsKCkpOwogICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQodW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKS50b0xvY2FsKCkpOwogICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewor
ICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAg
ICAgICAgICAgICAgSlNTdGFjazo6QXJndW1lbnRDb3VudCArIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykgewogICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMu
c2V0KFZpcnR1YWxSZWdpc3RlcigKICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpICsKQEAgLTE0OCwyNCArMTY4LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFi
bGUtPm1hY2hpbmVMb2NhbCgpID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAg
ICAgICAgYWxsb2NhdGlvblt2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCldKTsKKyAgICAgICAg
ICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJs
ZS0+bG9jYWwoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChjb2RlQmxvY2so
KS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICBh
bGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpLnRvTG9jYWwoKV0pOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0KKyAgICAgICAg
ICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVy
KCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAgICAgdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblsKLSAgICAgICAgICAgICAgICAgICAgdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2Nr
KCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLnRvTG9jYWwoKV0pCisgICAgICAgICAgICAgICAgYXNz
aWduKGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2RlQmxvY2soKS0+
YXJndW1lbnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICBjb2RlQmxvY2so
KS0+c2V0QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCktPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdp
c3RlcigpLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldEFjdGl2YXRp
b25SZWdpc3RlcigKLSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxv
Y2F0aW9uW2NvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS50b0xvY2FsKCldKSk7Cisg
ICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5hY3RpdmF0aW9u
UmVnaXN0ZXIoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIHJlZ2lz
dGVyIGlzIG5ldmVyIHZhbGlkIGZvciBERkcgY29kZSBibG9ja3MuCkBAIC0xNzYsMTUgKzE5Mywx
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bbV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpLnRvTG9jYWwoKV0pOworICAgICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSBhc3NpZ24oCisgICAg
ICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Io
aW5saW5lQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKLSAg
ICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblt1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpLnRvTG9jYWwoKV0pCisgICAg
ICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKSkKICAg
ICAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAg
ICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2ln
bigKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykg
ewogICAgICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFwaC5t
X2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50UG9z
aXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAgLTIyNyw5ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKTsKICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCk7IGkt
LTspIHsKICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXSA9IHNsb3dBcmd1
bWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0
dWFsUmVnaXN0ZXIoc2xvd0FyZ3VtZW50c1tpXS5pbmRleCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChyZWcuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3Vt
ZW50c1tpXS5pbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bcmVnLnRv
TG9jYWwoKV0pLm9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRz
W2ldLmluZGV4ID0gYXNzaWduKGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1l
bnRzW2ldLmluZGV4KSkub2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Nsb3dBcmd1bWVudHMgPSBXVEY6Om1vdmUobmV3
U2xvd0FyZ3VtZW50cyk7CkBAIC0yMzcsNyArMjU2LDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBGaXggR2V0TG9jYWxVbmxpbmtlZCdzIHZhcmlhYmxlIHJlZmVy
ZW5jZXMuCi0gICAgICAgIGlmIChoYXNHZXRMb2NhbFVubGlua2VkKSB7CisgICAgICAgIGlmICho
YXNOb2Rlc1RoYXROZWVkRml4dXApIHsKICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgICAgICAgICBpZiAoIWJsb2NrKQpAQCAtMjQ2LDEwICsyNjUsMTQgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW29w
ZXJhbmQudG9Mb2NhbCgpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRVbmxp
bmtlZE1hY2hpbmVMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldFVubGlua2VkTWFjaGluZUxvY2FsKGFzc2lnbihhbGxvY2F0aW9uLCBub2RlLT51bmxpbmtl
ZExvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWduKGFs
bG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI2Miw2
ICsyODUsMjAgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQorCitwcml2YXRlOgorICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgVmVjdG9yPHVu
c2lnbmVkPiYgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHNyYykKKyAgICB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBzcmM7CisgICAgICAgIGlmIChyZXN1bHQuaXNMb2Nh
bCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW3Jl
c3VsdC50b0xvY2FsKCldOworICAgICAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01B
WCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChteUFsbG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQogfTsKIAogYm9vbCBwZXJmb3JtU3RhY2tMYXlvdXQoR3JhcGgmIGdyYXBoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCw2ICsxMjAsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVj
azoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFy
YXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZh
cmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAg
Y2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5n
IEVsZWN0cm9uaWNzCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQK
ICAqCkBAIC0xMjgsNiArMTI4LDIwIEBAIHN0YXRpYyB2b2lkIGR1bXBEYXRhU2VjdGlvbihEYXRh
U2VjdGlvbioKICAgICB9CiB9CiAKK3N0YXRpYyBpbnQgb2Zmc2V0T2ZTdGFja1JlZ2lvbihTdGFj
a01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwLCB1aW50MzJfdCBzdGFja21hcElEKQoreworICAg
IFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3Rh
Y2ttYXBJRCk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSByZWNvcmRNYXAuZW5kKCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlLnNpemUoKSA9PSAxKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnMuc2l6ZSgpID09IDEpOworICAgIExvY2F0
aW9uIGNhcHR1cmVkTG9jYXRpb24gPQorICAgICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKG51
bGxwdHIsIGl0ZXItPnZhbHVlWzBdLmxvY2F0aW9uc1swXSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FwdHVyZWRMb2NhdGlvbi5raW5kKCkgPT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChjYXB0dXJlZExvY2F0aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkg
JSBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgcmV0dXJuIGNhcHR1cmVkTG9jYXRpb24uYWRkZW5k
KCkgLyBzaXplb2YoUmVnaXN0ZXIpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBEZXNjcmlwdG9y
VHlwZT4KIHZvaWQgZ2VuZXJhdGVJQ0Zhc3RQYXRoKAogICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uLApAQCAt
MjQzLDYgKzI1NywzMiBAQCBzdGF0aWMgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyc0Zvcihjb25z
CiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0KHJlY29yZC51c2VkUmVnaXN0ZXJTZXQoKSwgUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENh
bGxUeXBlPgordm9pZCBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKFZlY3RvcjxDYWxsVHlwZT4m
IGNhbGxzLCBTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwKQoreworICAgIC8vIEhhbmRs
aW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhl
bSBieSB0aGUgUEMgaW4gTExWTQorICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMg
Zmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgorCisgICAg
VmVjdG9yPENhbGxUeXBlPiBvbGRDYWxsczsKKyAgICBvbGRDYWxscy5zd2FwKGNhbGxzKTsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgQ2FsbFR5cGUmIGNhbGwgPSBvbGRDYWxsc1tpXTsKKyAgICAgICAgCisgICAgICAg
IFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2Fs
bC5zdGFja21hcElEKCkpOworICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraikgeworICAgICAgICAgICAgQ2FsbFR5cGUg
Y29weSA9IGNhbGw7CisgICAgICAgICAgICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVy
LT52YWx1ZVtqXS5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChj
b3B5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6c29ydChjYWxscy5iZWdpbigpLCBj
YWxscy5lbmQoKSk7Cit9CisKIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFw
cygKICAgICBTdGF0ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKiBqaXRD
b2RlLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKICAgICBTdGFja01hcHM6
OlJlY29yZE1hcCYgcmVjb3JkTWFwLCBib29sIGRpZFNlZVVud2luZEluZm8pCkBAIC0yNTEsMTYg
KzI5MSwxNCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAg
Vk0mIHZtID0gZ3JhcGgubV92bTsKICAgICBTdGFja01hcHMgc3RhY2ttYXBzID0gaml0Q29kZS0+
c3RhY2ttYXBzOwogICAgIAotICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVy
ID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuY2FwdHVyZWRTdGFja21hcElEKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRl
ci0+dmFsdWUuc2l6ZSgpID09IDEpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlWzBd
LmxvY2F0aW9ucy5zaXplKCkgPT0gMSk7Ci0gICAgTG9jYXRpb24gY2FwdHVyZWRMb2NhdGlvbiA9
Ci0gICAgICAgIExvY2F0aW9uOjpmb3JTdGFja21hcHMoJmppdENvZGUtPnN0YWNrbWFwcywgaXRl
ci0+dmFsdWVbMF0ubG9jYXRpb25zWzBdKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExv
Y2F0aW9uLmtpbmQoKSA9PSBMb2NhdGlvbjo6UmVnaXN0ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJU
KGNhcHR1cmVkTG9jYXRpb24uZ3ByKCkgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKCEoY2FwdHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAlIHNpemVvZihS
ZWdpc3RlcikpKTsKLSAgICBpbnQzMl90IGxvY2Fsc09mZnNldCA9IGNhcHR1cmVkTG9jYXRpb24u
YWRkZW5kKCkgLyBzaXplb2YoUmVnaXN0ZXIpICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwor
ICAgIGludCBsb2NhbHNPZmZzZXQgPQorICAgICAgICBvZmZzZXRPZlN0YWNrUmVnaW9uKHJlY29y
ZE1hcCwgc3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2Nh
bDsKKyAgICAKKyAgICBpbnQgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQ7CisgICAgaWYgKHN0YXRl
LnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCAhPSBVSU5UX01BWCkKKyAgICAgICAgdmFyYXJn
c1NwaWxsU2xvdHNPZmZzZXQgPSBvZmZzZXRPZlN0YWNrUmVnaW9uKHJlY29yZE1hcCwgc3RhdGUu
dmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEKTsKKyAgICBlbHNlCisgICAgICAgIHZhcmFyZ3NT
cGlsbFNsb3RzT2Zmc2V0ID0gMDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5t
X2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YVtpXS5pbmxp
bmVDYWxsRnJhbWU7CkBAIC00NDQsNyArNDgyLDYgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7IGktLTspIHsKICAgICAgICAg
ICAgIENoZWNrSW5EZXNjcmlwdG9yJiBjaGVja0luID0gc3RhdGUuY2hlY2tJbnNbaV07CiAgICAg
ICAgICAgICAKQEAgLTQ4MCw3ICs1MTcsNiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2Vk
T25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5tX2dlbmVyYXRvcnMuYXBwZW5k
KENoZWNrSW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNsb3dDYWxsLCBiZWdpbikpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0KICAgICAgICAgCiAgICAgICAgIGV4Y2VwdGlvblRhcmdldC5saW5r
KCZzbG93UGF0aEpJVCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkp1
bXAgPSBzbG93UGF0aEpJVC5qdW1wKCk7CkBAIC01MDcsMjUgKzU0Myw3IEBAIHN0YXRpYyB2b2lk
IGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgfSAKICAgICB9CiAgICAgCi0g
ICAgLy8gSGFuZGxpbmcgSlMgY2FsbHMgaXMgd2VpcmQ6IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQg
d2Ugc29ydCB0aGVtIGJ5IHRoZSBQQyBpbiBMTFZNCi0gICAgLy8gZ2VuZXJhdGVkIGNvZGUuIFRo
YXQgaW1wbGllcyBmaXJzdCBwcnVuaW5nIHRoZSBvbmVzIHRoYXQgTExWTSBkaWRuJ3QgZ2VuZXJh
dGUuCi0gICAgVmVjdG9yPEpTQ2FsbD4gb2xkQ2FsbHMgPSBzdGF0ZS5qc0NhbGxzOwotICAgIHN0
YXRlLmpzQ2FsbHMucmVzaXplKDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRD
YWxscy5zaXplKCk7ICsraSkgewotICAgICAgICBKU0NhbGwmIGNhbGwgPSBvbGRDYWxsc1tpXTsK
LSAgICAgICAgCi0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0g
cmVjb3JkTWFwLmZpbmQoY2FsbC5zdGFja21hcElEKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBy
ZWNvcmRNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAg
IEpTQ2FsbCBjb3B5ID0gY2FsbDsKLSAgICAgICAgICAgIGNvcHkubV9pbnN0cnVjdGlvbk9mZnNl
dCA9IGl0ZXItPnZhbHVlW2pdLmluc3RydWN0aW9uT2Zmc2V0OwotICAgICAgICAgICAgc3RhdGUu
anNDYWxscy5hcHBlbmQoY29weSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RkOjpz
b3J0KHN0YXRlLmpzQ2FsbHMuYmVnaW4oKSwgc3RhdGUuanNDYWxscy5lbmQoKSk7CisgICAgYWRq
dXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxzLCByZWNvcmRNYXApOwogICAgIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyBpLS07KSB7CiAgICAg
ICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CkBAIC01NDcsNiArNTY1LDI5IEBA
IHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgY2FsbC5s
aW5rKHZtLCBsaW5rQnVmZmVyKTsKICAgICB9CiAgICAgCisgICAgYWRqdXN0Q2FsbElDc0ZvclN0
YWNrbWFwcyhzdGF0ZS5qc0NhbGxzVmFyYXJnc2VzLCByZWNvcmRNYXApOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nlcy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgSlNDYWxsVmFyYXJncyYgY2FsbCA9IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nlc1tpXTsKKyAg
ICAgICAgCisgICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7
CisgICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCwgZ3JhcGgsIHZhcmFyZ3NTcGlsbFNsb3Rz
T2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2Fz
dDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0Owor
ICAgICAgICBzaXplX3Qgc2l6ZU9mSUMgPSBzaXplT2ZJQ0ZvcihjYWxsLm5vZGUoKSk7CisKKyAg
ICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBz
aXplT2ZJQyk7CisgICAgICAgIGlmICghbGlua0J1ZmZlci5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coIkZhaWxlZCB0byBpbnNlcnQgaW5saW5lIGNhY2hlIGZvciB2YXJhcmdzIGNh
bGwgYmVjYXVzZSB3ZSB0aG91Z2h0IHRoZSBzaXplIHdvdWxkIGJlICIsIHNpemVPZklDLCAiIGJ1
dCBpdCBlbmRlZCB1cCBiZWluZyAiLCBmYXN0UGF0aEpJVC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgp
LCAiIHByaW9yIHRvIGNvbXBhY3Rpb24uXG4iKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKAorICAgICAgICAgICAgc3RhcnRPZklDICsg
bGlua0J1ZmZlci5zaXplKCksIHNpemVPZklDIC0gbGlua0J1ZmZlci5zaXplKCkpOworICAgICAg
ICAKKyAgICAgICAgY2FsbC5saW5rKHZtLCBsaW5rQnVmZmVyLCBzdGF0ZS5maW5hbGl6ZXItPmhh
bmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkpOworICAgIH0KKyAgICAKICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKIAogICAgIGl0ZXIgPSBy
ZWNvcmRNYXAuZmluZChzdGF0ZS5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJ
RCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNo
ZVNpemUuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTEgKzI4LDE0
IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNs
dWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordXNpbmcgbmFtZXNwYWNl
IERGRzsKKwogLy8gVGhlIGRlZmF1bHQgc2l6ZXMgYXJlIHg4Ni02NC1zcGVjaWZpYywgYW5kIHdl
cmUgZm91bmQgZW1waXJpY2FsbHkuIFRoZXkgaGF2ZSB0byBjb3ZlciB0aGUgd29yc3QKIC8vIHBv
c3NpYmxlIGNvbWJpbmF0aW9uIG9mIHJlZ2lzdGVycyBsZWFkaW5nIHRvIHRoZSBsYXJnZXN0IHBv
c3NpYmxlIGVuY29kaW5nIG9mIGVhY2ggaW5zdHJ1Y3Rpb24gaW4KIC8vIHRoZSBJQy4KQEAgLTYx
LDE3ICs2NCwyNSBAQCBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpCiAjZW5kaWYKIH0KIAotc2l6ZV90
IHNpemVPZkNoZWNrSW4oKQorc2l6ZV90IHNpemVPZkNhbGwoKQogewogI2lmIENQVShBUk02NCkK
LSAgICByZXR1cm4gNDsKKyAgICByZXR1cm4gNTY7CiAjZWxzZQotICAgIHJldHVybiA1OyAKKyAg
ICByZXR1cm4gNTM7CiAjZW5kaWYKIH0KIAorc2l6ZV90IHNpemVPZkNhbGxWYXJhcmdzKCkKK3sK
KyNpZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDU2OworI2Vsc2UKKyAgICByZXR1cm4gNTM7Cisj
ZW5kaWYKK30KIAotc2l6ZV90IHNpemVPZkNhbGwoKQorc2l6ZV90IHNpemVPZkNhbGxGb3J3YXJk
VmFyYXJncygpCiB7CiAjaWYgQ1BVKEFSTTY0KQogICAgIHJldHVybiA1NjsKQEAgLTgwLDYgKzkx
LDQ3IEBAIHNpemVfdCBzaXplT2ZDYWxsKCkKICNlbmRpZgogfQogCitzaXplX3Qgc2l6ZU9mQ29u
c3RydWN0VmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiA1NjsKKyNlbHNl
CisgICAgcmV0dXJuIDUzOworI2VuZGlmCit9CisKK3NpemVfdCBzaXplT2ZJbigpCit7CisjaWYg
Q1BVKEFSTTY0KQorICAgIHJldHVybiA0OworI2Vsc2UKKyAgICByZXR1cm4gNTsgCisjZW5kaWYK
K30KKworc2l6ZV90IHNpemVPZklDRm9yKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CisgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICByZXR1cm4gc2l6ZU9mR2V0QnlJ
ZCgpOworICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgcmV0dXJuIHNpemVPZlB1dEJ5SWQoKTsK
KyAgICBjYXNlIENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIHJldHVybiBzaXpl
T2ZDYWxsKCk7CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNh
bGxWYXJhcmdzKCk7CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIHJldHVy
biBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6
CisgICAgICAgIHJldHVybiBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCk7CisgICAgY2FzZSBJbjoK
KyAgICAgICAgcmV0dXJuIHNpemVPZkluKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJ
bmxpbmVDYWNoZVNpemUuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTIgKzI4LDIz
IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBERkcgeworc3RydWN0IE5vZGU7Cit9
CisKK25hbWVzcGFjZSBGVEwgewogCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpOwogc2l6ZV90IHNp
emVPZlB1dEJ5SWQoKTsKIHNpemVfdCBzaXplT2ZDYWxsKCk7Ci1zaXplX3Qgc2l6ZU9mQ2hlY2tJ
bigpOworc2l6ZV90IHNpemVPZkNhbGxWYXJhcmdzKCk7CitzaXplX3Qgc2l6ZU9mQ2FsbEZvcndh
cmRWYXJhcmdzKCk7CitzaXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpOworc2l6ZV90IHNp
emVPZkluKCk7CisKK3NpemVfdCBzaXplT2ZJQ0ZvcihERkc6Ok5vZGUqKTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGwuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgSlNDYWxsOjpKU0Nh
bGwodW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZQogICAgICwgbV9zdGFja21hcElEKHN0YWNrbWFw
SUQpCiAgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCiB7CisgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gQ2FsbCB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGxCYXNlLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU0NhbGxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisK
IEpTQ2FsbEJhc2U6OkpTQ2FsbEJhc2UoKQogICAgIDogbV90eXBlKENhbGxMaW5rSW5mbzo6Tm9u
ZSkKICAgICAsIG1fY2FsbExpbmtJbmZvKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBMaW5rQnVmZmVyOwogCituYW1lc3Bh
Y2UgREZHIHsKK3N0cnVjdCBOb2RlOworfQorCiBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgSlND
YWxsQmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFy
Z3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
VmFyYXJncy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1
ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2lu
Y2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERGRzsKKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFy
YXJncygpCisgICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBtX25vZGUobnVsbHB0
cikKKyAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoVUlOVF9NQVgpCit7Cit9CisKK0pTQ2FsbFZh
cmFyZ3M6OkpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZSogbm9kZSkKKyAg
ICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9ub2RlKG5vZGUpCisgICAgLCBt
X2NhbGxCYXNlKAorICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgPyBDYWxs
TGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MgOiBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzLAor
ICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpCisgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0
KDApCit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3Ao
KSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdz
KTsKK30KKwordW5zaWduZWQgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpCit7
CisgICAgcmV0dXJuIDQ7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBl
cnMmIGppdCwgR3JhcGgmIGdyYXBoLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpCit7CisgICAg
Ly8gV2UgYXJlIHBhc3NlZCB0aHJlZSBwaWVjZXMgb2YgaW5mb3JtYXRpb246CisgICAgLy8gLSBU
aGUgY2FsbGVlLgorICAgIC8vIC0gVGhlIGFyZ3VtZW50cyBvYmplY3QuCisgICAgLy8gLSBUaGUg
InRoaXMiIHZhbHVlLCBpZiBpdCdzIGEgY29uc3RydWN0b3IgY2FsbC4KKyAgICAKKyAgICBib29s
IGlzQ2FsbCA9IG1fbm9kZS0+b3AoKSAhPSBDb25zdHJ1Y3RWYXJhcmdzOworICAgIAorICAgIENh
bGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisgICAgCisg
ICAgR1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAKKyAgICBH
UFJSZWcgYXJndW1lbnRzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgdGhpc0dQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgYm9vbCBhcmd1bWVudHNPblN0YWNrID0gZmFsc2U7CisgICAg
CisgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAg
ICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIHRoaXNH
UFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2Fs
bEZvcndhcmRWYXJhcmdzOgorICAgICAgICB0aGlzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIx
OworICAgICAgICBhcmd1bWVudHNPblN0YWNrID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjE7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAg
ICBjb25zdCB1bnNpZ25lZCBjYWxsZWVTcGlsbFNsb3QgPSAwOworICAgIGNvbnN0IHVuc2lnbmVk
IGFyZ3VtZW50c1NwaWxsU2xvdCA9IDE7CisgICAgY29uc3QgdW5zaWduZWQgdGhpc1NwaWxsU2xv
dCA9IDI7CisgICAgY29uc3QgdW5zaWduZWQgc3RhY2tQb2ludGVyU3BpbGxTbG90ID0gMzsKKyAg
ICAKKyAgICAvLyBHZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnJlc2Vy
dmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxs
ZWVHUFIpOworICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
dXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsKKyAgICBpZiAodGhpc0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKKyAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIGlm
IChhcmd1bWVudHNPblN0YWNrKQorICAgICAgICBhcmd1bWVudHNHUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJP
ZlJldXNlZFJlZ2lzdGVycygpKTsKKyAgICAKKyAgICBhdXRvIGxvYWRBcmd1bWVudHMgPSBbJl0g
KGJvb2wgY2xvYmJlcmVkKSB7CisgICAgICAgIGlmIChhcmd1bWVudHNPblN0YWNrKSB7CisgICAg
ICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6YWRkcmVz
c0ZvcihncmFwaC5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3IobV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIpOworICAgICAgICB9IGVsc2Ug
aWYgKGNsb2JiZXJlZCkgeworICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50c1Nw
aWxsU2xvdCksIGFyZ3VtZW50c0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIGF1
dG8gY29tcHV0ZVVzZWRTdGFjayA9IFsmXSAoR1BSUmVnIHRhcmdldEdQUiwgdW5zaWduZWQgZXh0
cmEpIHsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHRhcmdl
dEdQUik7CisgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaWYgKGV4dHJhKQorICAgICAgICAgICAgaml0LnN1
YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYSksIHRhcmdldEdQUik7CisgICAg
ICAgIGppdC51cnNoaWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHRhcmdldEdQUik7Cisg
ICAgfTsKKyAgICAKKyAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQq
IGNhbGxlZSkgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Y2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgIG1f
ZXhjZXB0aW9ucy5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6
Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOwor
ICAgIH07CisgICAgCisgICAgbG9hZEFyZ3VtZW50cyhmYWxzZSk7CisgICAgCisgICAgLy8gQXR0
ZW1wdCB0aGUgZm9yd2FyZGluZyBmYXN0IHBhdGgsIGlmIGl0J3MgYmVlbiByZXF1ZXN0ZWQuCisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IEdQUkluZm86OnJlZ1QwOworICAgIGlmIChtX25vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRW
YXJhcmdzKSB7CisgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJn
dW1lbnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAgIC8vIEZJWE1FOiBkbyB0aGlzIG9wdGltaXph
dGlvbiBhdCB0aGUgSVIgbGV2ZWwuCisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IHNsb3dDYXNlOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3Q2
NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAKKyAgICAg
ICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgMCk7CisgICAgICAgIGVtaXRTZXR1cFZh
cmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgcmVzdWx0R1BS
ID0gc2NyYXRjaEdQUjI7CisgICAgICAgIAorICAgICAgICBoYXZlQXJndW1lbnRzID0gaml0Lmp1
bXAoKTsKKyAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAgICB9CisgICAgCisgICAgLy8g
R290dGEgc3BpbGwgdGhlIGNhbGxlZSwgYXJndW1lbnRzLCBhbmQgdGhpcyBiZWNhdXNlIHdlIHdp
bGwgbmVlZCB0aGVtIGxhdGVyIGFuZCB3ZSB3aWxsIGhhdmUgc29tZQorICAgIC8vIGNhbGxzIHRo
YXQgY2xvYmJlciB0aGVtLgorICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxIZWxwZXJz
OjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3QpKTsKKyAgICBp
ZiAoIWFyZ3VtZW50c09uU3RhY2spCisgICAgICAgIGppdC5zdG9yZTY0KGFyZ3VtZW50c0dQUiwg
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBhcmd1bWVudHNTcGls
bFNsb3QpKTsKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBD
Q2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNsb3Qp
KTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJT
cGlsbFNsb3QpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrID0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpICsKKyAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpOworICAgIGNvbXB1dGVVc2VkU3RhY2so
c2NyYXRjaEdQUjEsIDApOworICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoZXh0cmFTdGFjayksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BS
MSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpKTsK
KyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9u
U2l6ZUZyYW1lRm9yVmFyYXJncykpOworICAgIAorICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBzY3JhdGNoR1BSMSk7CisgICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BS
MiwgZXh0cmFTdGFjayk7CisgICAgbG9hZEFyZ3VtZW50cyh0cnVlKTsKKyAgICBlbWl0U2V0VmFy
YXJnc0ZyYW1lKGppdCwgc2NyYXRjaEdQUjEsIGZhbHNlLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQ
UjIpOworICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWV4dHJhU3Rh
Y2spLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwgYXJndW1lbnRz
R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCks
IHNjcmF0Y2hHUFIxKTsKKyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2
b2lkKj4ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpKTsKKyAgICAKKyAgICBqaXQubW92ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBpZiAobV9ub2Rl
LT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5r
KCZqaXQpOworICAgIAorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVzdWx0R1BSLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBpZiAoaXNDYWxsKSB7CisgICAgICAgIGppdC5s
b2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlzU3Bp
bGxTbG90KSwgdGhpc0dQUik7CisgICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIsIENDYWxsSGVs
cGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICB9CisgICAgCisgICAgLy8gSGVuY2Vm
b3J0aCB3ZSBtYWtlIHRoZSBjYWxsLiBUaGUgYmFzZSBGVEwgY2FsbCBtYWNoaW5lcnkgZXhwZWN0
cyB0aGUgY2FsbGVlIGluIHJlZ1QwIGFuZCBmb3IgdGhlCisgICAgLy8gc3RhY2sgZnJhbWUgdG8g
YWxyZWFkeSBiZSBzZXQgdXAsIHdoaWNoIGl0IGlzLgorICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3QpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgCisgICAgbV9jYWxsQmFzZS5lbWl0KGppdCk7CisgICAgCisgICAg
Ly8gVW5kbyB0aGUgZGFtYWdlIHdlJ3ZlIGRvbmUuCisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3Qp
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKK30KKwordm9pZCBKU0NhbGxW
YXJhcmdzOjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgQ29kZUxvY2F0aW9u
TGFiZWwgZXhjZXB0aW9uSGFuZGxlcikKK3sKKyAgICBtX2NhbGxCYXNlLmxpbmsodm0sIGxpbmtC
dWZmZXIpOworICAgIGxpbmtCdWZmZXIubGluayhtX2V4Y2VwdGlvbnMsIGV4Y2VwdGlvbkhhbmRs
ZXIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJh
cmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxW
YXJhcmdzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbFZhcmFyZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMSlNDYWxsVmFy
YXJnc19oCisjZGVmaW5lIEZUTEpTQ2FsbFZhcmFyZ3NfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJGVExKU0NhbGxCYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBMaW5rQnVmZmVyOworCituYW1lc3BhY2UgREZHIHsKK2NsYXNzIEdyYXBoOworc3RydWN0IE5v
ZGU7Cit9CisKK25hbWVzcGFjZSBGVEwgeworCitjbGFzcyBKU0NhbGxWYXJhcmdzIHsKK3B1Ymxp
YzoKKyAgICBKU0NhbGxWYXJhcmdzKCk7CisgICAgSlNDYWxsVmFyYXJncyh1bnNpZ25lZCBzdGFj
a21hcElELCBERkc6Ok5vZGUqKTsKKyAgICAKKyAgICBERkc6Ok5vZGUqIG5vZGUoKSBjb25zdCB7
IHJldHVybiBtX25vZGU7IH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtU3BpbGxTbG90
c05lZWRlZCgpOworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmLCBERkc6OkdyYXBo
JiwgaW50MzJfdCBzcGlsbFNsb3RzT2Zmc2V0KTsKKyAgICB2b2lkIGxpbmsoVk0mLCBMaW5rQnVm
ZmVyJiwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlcik7CisgICAgCisgICAgdW5z
aWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbFZhcmFyZ3MmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5tX2luc3RydWN0
aW9uT2Zmc2V0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFja21h
cElEOworICAgIERGRzo6Tm9kZSogbV9ub2RlOworICAgIEpTQ2FsbEJhc2UgbV9jYWxsQmFzZTsK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG1fZXhjZXB0aW9uczsKKworcHVibGljOgorICAg
IHVpbnQzMl90IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEpTQ2Fs
bFZhcmFyZ3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2ICsx
ODUsMzAgQEAgcHVibGljOgogICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwg
bV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCiAgICAgICAg
ICAgICBtX291dC5pbnQzMlplcm8sIGNhcHR1cmVkQWxsb2NhKTsKICAgICAgICAgCisgICAgICAg
IC8vIElmIHdlIGhhdmUgYW55IENhbGxWYXJhcmdzIHRoZW4gd2UgbmVlIHRvIGhhdmUgYSBzcGls
bCBzbG90IGZvciBpdC4KKyAgICAgICAgYm9vbCBoYXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcmVPcmRlcikgeworICAgICAgICAgICAgZm9yIChO
b2RlKiBub2RlIDogYmxvY2spIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICAgICAgICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2UgQ29udHJ1Y3RWYXJh
cmdzOgorICAgICAgICAgICAgICAgICAgICBoYXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmIChoYXNWYXJhcmdzKSB7CisgICAgICAgICAgICBMVmFsdWUgdmFyYXJnc1Nw
aWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCisgICAgICAgICAgICAgICAgYXJyYXlUeXBlKG1fb3V0
LmludDY0LCBKU0NhbGxWYXJhcmdzOjpudW1TcGlsbFNsb3RzTmVlZGVkKCkpKTsKKyAgICAgICAg
ICAgIG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEID0gbV9zdGFja21hcElE
cysrOworICAgICAgICAgICAgbV9vdXQuY2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5zdGFj
a21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUudmFyYXJnc1NwaWxs
U2xvdHNTdGFja21hcElEKSwKKyAgICAgICAgICAgICAgICBtX291dC5pbnQzMlplcm8sIHZhcmFy
Z3NTcGlsbFNsb3RzKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUg
PSBtX291dC5wdHJUb0ludCgKICAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQuZnJhbWVBZGRy
ZXNzSW50cmluc2ljKCksIG1fb3V0LmludDMyWmVybyksIG1fb3V0LmludFB0cik7CiAgICAgICAg
IG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7CkBAIC02
MzYsNiArNjYwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAg
ICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxlQ2FsbE9y
Q29uc3RydWN0VmFyYXJncygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3MoKTsKKyAgICAgICAgICAg
IGJyZWFrOwogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5JTkcpCiAgICAgICAgIGNh
c2UgTmF0aXZlQ2FsbDoKICAgICAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CkBAIC0xOTg2LDgg
KzIwMTgsMjIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGNoZWNrQXJndW1lbnRzTm90Q3Jl
YXRlZCgpOwogCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhbV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQu
YWRkKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpLCBtX291dC5jb25zdEludDMyKC0xKSkpOworICAgICAgICBpZiAobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhSW5saW5lQ2FsbEZy
YW1lOjppc1ZhcmFyZ3MobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLWtp
bmQpKSB7CisgICAgICAgICAgICBzZXRJbnQzMigKKyAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKAorICAgICAgICAgICAgICAgICAgICBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAg
ICAgICAgaWYgKCFtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFy
Z3VtZW50Q291bnRSZWdpc3RlciA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgc2V0SW50MzIoCisgICAg
ICAgICAgICAgICAgbV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJO
b25OZWdhdGl2ZShwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlcikpLAorICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKC0xKSkpOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkBAIC0zNzA4LDYgKzM3NTQs
NzkgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CiAgICAg
fQorICAgIAorICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKQorICAgIHsK
KyAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgCisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IG51bGxwdHI7CisgICAgICAg
IExWYWx1ZSB0aGlzQXJnID0gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9u
b2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICBqc0Fy
Z3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICB0aGlz
QXJnID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAgIHRoaXNBcmcgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGpzQXJndW1lbnRzID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgImJhZCBub2RlIHR5
cGUiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAKKyAgICAgICAg
VmVjdG9yPExWYWx1ZT4gYXJndW1lbnRzOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0
LmNvbnN0SW50NjQoc3RhY2ttYXBJRCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0
LmNvbnN0SW50MzIoc2l6ZU9mSUNGb3IobV9ub2RlKSkpOworICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9v
dXQuY29uc3RJbnQzMigxICsgISFqc0FyZ3VtZW50cyArICEhdGhpc0FyZykpOworICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGpzQ2FsbGVlKTsKKyAgICAgICAgaWYgKGpzQXJndW1lbnRzKQorICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChqc0FyZ3VtZW50cyk7CisgICAgICAgIGlmICh0aGlz
QXJnKQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzQXJnKTsKKyAgICAgICAgCisg
ICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBjYWxsID0g
bV9vdXQuY2FsbChtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsK
KyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQ0NhbGxD
b252KTsKKyAgICAgICAgCisgICAgICAgIG1fZnRsU3RhdGUuanNDYWxsVmFyYXJnc2VzLmFwcGVu
ZChKU0NhbGxWYXJhcmdzKHN0YWNrbWFwSUQsIG1fbm9kZSkpOworICAgICAgICAKKyAgICAgICAg
c2V0SlNWYWx1ZShjYWxsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTG9hZFZhcmFy
Z3MoKQorICAgIHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNh
bGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJncyks
IG1fY2FsbEZyYW1lLCBqc0FyZ3VtZW50cywKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIo
ZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBU
aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHBy
b3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2lu
dCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3Bl
YyBjb21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdv
dWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyBy
aWdodAorICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIHNw
ZWN1bGF0ZSgKKyAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRy
LAorICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQz
MihkYXRhLT5saW1pdCkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3Ro
LCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICAKKyAgICAgICAgdm1D
YWxsKAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzKSwg
bV9jYWxsRnJhbWUsCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm1hY2hpbmVT
dGFydC5vZmZzZXQoKSksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNl
dCksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPmxlbmd0aCksIG1fb3V0LmNv
bnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgIH0KIAogICAgIHZvaWQgY29t
cGlsZUp1bXAoKQogICAgIHsKQEAgLTQwMTIsNyArNDEzMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAotICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMy
KHNpemVPZkNoZWNrSW4oKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQo
c3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mSW4oKSksCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgY2VsbCk7
CiAKICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGws
IExMVk1BbnlSZWdDYWxsQ29udik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDYgKzQ4LDEwIEBAIFN0YXRlOjpTdGF0ZShH
cmFwaCYgZ3JhcGgpCiAgICAgLCBjb250ZXh0KGxsdm0tPkNvbnRleHRDcmVhdGUoKSkKICAgICAs
IG1vZHVsZSgwKQogICAgICwgZnVuY3Rpb24oMCkKKyAgICAsIGhhbmRsZVN0YWNrT3ZlcmZsb3dF
eGNlcHRpb25TdGFja21hcElEKFVJTlRfTUFYKQorICAgICwgaGFuZGxlRXhjZXB0aW9uU3RhY2tt
YXBJRChVSU5UX01BWCkKKyAgICAsIGNhcHR1cmVkU3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAs
IHZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRChVSU5UX01BWCkKICAgICAsIGdlbmVyYXRlZEZ1
bmN0aW9uKDApCiAgICAgLCB1bndpbmREYXRhU2VjdGlvbigwKQogICAgICwgdW53aW5kRGF0YVNl
Y3Rpb25TaXplKDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIK
ICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExKU0NhbGwuaCIKKyNp
bmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAj
aW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTcx
LDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaGFuZGxlU3RhY2tPdmVyZmxvd0V4
Y2VwdGlvblN0YWNrbWFwSUQ7CiAgICAgdW5zaWduZWQgaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJ
RDsKICAgICB1bnNpZ25lZCBjYXB0dXJlZFN0YWNrbWFwSUQ7CisgICAgdW5zaWduZWQgdmFyYXJn
c1NwaWxsU2xvdHNTdGFja21hcElEOwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3Jp
cHRvcj4gZ2V0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9yPiBw
dXRCeUlkczsKICAgICBTZWdtZW50ZWRWZWN0b3I8Q2hlY2tJbkRlc2NyaXB0b3I+IGNoZWNrSW5z
OwogICAgIFZlY3RvcjxKU0NhbGw+IGpzQ2FsbHM7CisgICAgVmVjdG9yPEpTQ2FsbFZhcmFyZ3M+
IGpzQ2FsbFZhcmFyZ3NlczsKICAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsK
ICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKICAgICB2b2lkKiB1bndpbmRE
YXRhU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0
LDcgKzEzNCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICByZXR1
cm4gaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxl
clNjb3BlQ2hhaW4pOwogfQogCi11bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU1N0YWNrKiBzdGFjaywgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVk
IG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3Vuc2lnbmVk
IHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1
aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAg
aWYgKCFhcmd1bWVudHMpCkBAIC0xNTYsNiArMTU2LDEzIEBAIHVuc2lnbmVkIHNpemVGcmFtZUZv
clZhcmFyZ3MoQ2FsbEZyYW1lKiAKICAgICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAg
CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwordW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTdGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1lbnRzLCB1
bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit7
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc2l6ZU9mVmFyYXJncyhjYWxsRnJhbWUsIGFyZ3VtZW50
cywgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIAogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUg
PSBjYWxsZWVGcmFtZUZvclZhcmFyZ3MoY2FsbEZyYW1lLCBudW1Vc2VkU3RhY2tTbG90cywgbGVu
Z3RoICsgMSk7CiAgICAgaWYgKGxlbmd0aCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzIHx8ICFz
dGFjay0+ZW5zdXJlQ2FwYWNpdHlGb3IoY2FsbGVlRnJhbWUtPnJlZ2lzdGVycygpKSkgewogICAg
ICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDE3
OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gcGFk
ZGVkQ2FsbGVlRnJhbWVPZmZzZXQpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIHNpemVPZlZhcmFy
Z3MoQ2FsbEZyYW1lKiBleGVjLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJB
cmdPZmZzZXQpOwogICAgIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBl
eGVjLCBKU1N0YWNrKiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Ns
b3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdm9pZCBsb2FkVmFyYXJncyhD
YWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBK
U1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZv
aWQgc2V0dXBWYXJhcmdzRnJhbWUoQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4
ZWNDYWxsZWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwg
dWludDMyX3QgbGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ5LDcgKzE0OSwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFt
ZShDYWxsCiAKICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAg
ICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAg
bV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
aW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpOwogICAgICAgICBtX2ZyYW1lLm1f
Ynl0ZWNvZGVPZmZzZXQgPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMiwxNSArMjEyLDI3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJz
OjpjYWxsRXhjZXB0aW9uRnV6eigKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIH0KIAotQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNr
S2luZCBraW5kKQorQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4
Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2luZCBraW5kLCBFeGNlcHRpb25KdW1wV2lkdGgg
d2lkdGgpCiB7CiAgICAgY2FsbEV4Y2VwdGlvbkZ1enooKTsKKworICAgIGlmICh3aWR0aCA9PSBG
YXJKdW1wV2lkdGgpCisgICAgICAgIGtpbmQgPSAoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVj
ayA/IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgOiBOb3JtYWxFeGNlcHRpb25DaGVjayk7CiAgICAg
CisgICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gYnJhbmNo
VGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVybywgQWJz
b2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CisgICAgcmVzdWx0ID0g
YnJhbmNoVGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVy
bywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CiAjZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIHJldHVybiBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2Vw
dGlvbkNoZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKKyAgICByZXN1bHQgPSBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNo
ZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcp
KTsKICNlbmRpZgorICAgIAorICAgIGlmICh3aWR0aCA9PSBOb3JtYWxKdW1wV2lkdGgpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCByZWFsSnVtcCA9IHBh
dGNoYWJsZUp1bXAoKTsKKyAgICByZXN1bHQubGluayh0aGlzKTsKKyAgICAKKyAgICByZXR1cm4g
cmVhbEp1bXAubV9qdW1wOwogfQogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3Ry
dWN0dXJlV2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVscGVycyYgaml0LCBUcnVzdGVkSW1tUHRyIHN0
cnVjdHVyZSwgUmVnaXN0ZXJJRCBkZXN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNiAr
MzM4LDEwIEBAIHB1YmxpYzoKICAgICB9CiAgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKKyAgICAgICAgLy8gTkIuIEl0
J3MgdGVtcHRpbmcgb24gc29tZSBhcmNoaXRlY3R1cmVzIHRvIHNvbWV0aW1lcyB1c2UgYW4gb2Zm
c2V0IGZyb20gdGhlIHN0YWNrCisgICAgICAgIC8vIHJlZ2lzdGVyIGJlY2F1c2UgZm9yIHNvbWUg
b2Zmc2V0cyB0aGF0IHdpbGwgZW5jb2RlIHRvIGEgc21hbGxlciBpbnN0cnVjdGlvbi4gQnV0IHdl
CisgICAgICAgIC8vIGNhbm5vdCBkbyB0aGlzLiBXZSB1c2UgdGhpcyBpbiBwbGFjZXMgd2hlcmUg
dGhlIHN0YWNrIHBvaW50ZXIgaGFzIGJlZW4gbW92ZWQgdG8gc29tZQorICAgICAgICAvLyB1bnBy
ZWRpY3RhYmxlIGxvY2F0aW9uLgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFs
aWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9CkBA
IC0zNjcsMzkgKzM3MSwzOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91
ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgotICAgIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KGlu
dCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChpbnQgc2xvdCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChzbG90ID49IEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXpl
KTsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gSlNTdGFj
azo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpKTsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIEpTU3RhY2s6OkNhbGxl
ckZyYW1lQW5kUENTaXplKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBj
YWxsZWUgQ2FsbEZyYW1lLgotICAgIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRTbG90KGludCBhcmd1
bWVudCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50IGFyZ3VtZW50
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpOwogICAgIH0KIAotICAgIEFkZHJlc3MgY2Fs
bGVlRnJhbWVUYWdTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1l
VGFnU2xvdChpbnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qo
c2xvdCkud2l0aE9mZnNldChUYWdPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJlc3MgY2FsbGVl
RnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFt
ZVBheWxvYWRTbG90KGludCBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1l
U2xvdChzbG90KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJl
c3MgY2FsbGVlQXJndW1lbnRUYWdTbG90KGludCBhcmd1bWVudCkKKyAgICBzdGF0aWMgQWRkcmVz
cyBjYWxsZWVBcmd1bWVudFRhZ1Nsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKICAgICAgICAgcmV0
dXJuIGNhbGxlZUFyZ3VtZW50U2xvdChhcmd1bWVudCkud2l0aE9mZnNldChUYWdPZmZzZXQpOwog
ICAgIH0KIAotICAgIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChpbnQgYXJndW1l
bnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChpbnQgYXJn
dW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlQXJndW1lbnRTbG90KGFyZ3VtZW50
KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJlc3MgY2FsbGVl
RnJhbWVDYWxsZXJGcmFtZSgpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVDYWxsZXJG
cmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KDApLndpdGhPZmZz
ZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKICAgICB9CkBAIC01NzEsNyArNTc1
LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAgICAKICAgICBl
bnVtIEV4Y2VwdGlvbkNoZWNrS2luZCB7IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBJbnZlcnRlZEV4
Y2VwdGlvbkNoZWNrIH07Ci0gICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hl
Y2tLaW5kIGtpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjayk7CisgICAgZW51bSBFeGNlcHRpb25K
dW1wV2lkdGggeyBOb3JtYWxKdW1wV2lkdGgsIEZhckp1bXBXaWR0aCB9OworICAgIEp1bXAgZW1p
dEV4Y2VwdGlvbkNoZWNrKAorICAgICAgICBFeGNlcHRpb25DaGVja0tpbmQgPSBOb3JtYWxFeGNl
cHRpb25DaGVjaywgRXhjZXB0aW9uSnVtcFdpZHRoID0gTm9ybWFsSnVtcFdpZHRoKTsKIAogI2lm
IEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKICAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFj
cm9Bc3NlbWJsZXImIGppdCwgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMy
X3QgaW5jcmVtZW50ID0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3Nyw2ICsxNzc3LDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZElt
bTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKKyAgICB7CisgICAgICAg
IHNldHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjQ+KGFyZzIsIGFyZzQpOworICAgICAgICBtb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAg
ICAgICAgbW92ZShhcmc1LCBHUFJJbmZvOjphcmd1bWVudEdQUjUpOworICAgICAgICBtb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0K
KwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0ciBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW0zMiBh
cmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKICAgICB7CiAgICAgICAgIHNldHVwVHdvU3R1YkFyZ3NH
UFI8R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjM+KGFyZzIsIGFy
ZzMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE3OTk3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MDIsNiArNDAyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0
dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVn
aXN0ZXJzOjplc2k7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25Bcmd1
bWVudEdQUiA9IFg4NlJlZ2lzdGVyczo6cjEwOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcGF0
Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IE1hY3JvQXNzZW1ibGVyOjpzY3JhdGNoUmVnaXN0ZXI7
CiAKICAgICBzdGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5zaWduZWQgaW5kZXgpCkBAIC01Nzcs
NiArNTc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVH
UFIgPSBBUk02NFJlZ2lzdGVyczo6eDA7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyByZXR1cm5WYWx1ZUdQUjIgPSBBUk02NFJlZ2lzdGVyczo6eDE7IC8vIHJlZ1QxCiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBBUk02NFJlZ2lzdGVy
czo6eDI7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQ
UiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHBhdGNocG9p
bnRTY3JhdGNoUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6aXAwOwogCiAgICAgLy8gR1BSUmVn
IG1hcHBpbmcgaXMgZGlyZWN0LCB0aGUgbWFjaGluZSByZWdzaXRlciBudW1iZXJzIGNhbgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjQsMTEgKzQ2
NCw2IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAg
bV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQ
cm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBERkc6OkNhbklubGlu
ZToKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0
aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2Fz
ZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0
cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNyAr
Mjk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKE9w
Y29kZUlELCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKLSAgICAgICAgdm9pZCBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qKTsK
KyAgICAgICAgdm9pZCBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qLCBDYWxs
TGlua0luZm8qKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklUOjplbWl0UHV0
Q2FsbFJlc3VsdChJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKLXZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQordm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBpbnQgdGhpc1ZhbHVl
ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CkBAIC05MCw2ICs5MCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZVNl
dHVwVmFyYXJnc0ZyYW1lKEluc3RyCiAgICAgaWYgKGNhbk9wdGltaXplKQogICAgICAgICBlbmQu
bGluayh0aGlzKTsKICAgICAKKyAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAg
IGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dl
c3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRl
ZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmso
dGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBu
b3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJlZ1QwKTsKICAgICBzdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwpAQCAtMTM0LDcgKzE0NCw5IEBA
IHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKIAogdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgaW50IGNhbGxlZSA9IGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQ2FsbExpbmtJbmZvKCk7CisKKyAgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBkYXRlcyBjYWxs
RnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpAQCAtMTUyLDcgKzE2NCwxMSBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgQ09NUElMRV9BU1NF
UlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJn
cyksIGNhbGxfYW5kX2NhbGxfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwog
ICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdU
SChvcF9jb25zdHJ1Y3RfdmFyYXJncyksIGNhbGxfYW5kX2NvbnN0cnVjdF92YXJhcmdzX29wY29k
ZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfdmFy
YXJncyB8fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKKzw8PDw8PDwgLm1pbmUK
KyAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKGluc3RydWN0aW9uLCBpbmZvKTsKKz09PT09PT0K
ICAgICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKGluc3RydWN0aW9uKTsKKz4+Pj4+Pj4g
LnIxNzk4NjIKICAgICBlbHNlIHsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kOwpAQCAtMTc2LDkgKzE5Miw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KE9wY29kZUlEIG9wY29kZUkKIAogICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKICAgICAKLSAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0KLSAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CisgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9l
dmFsKSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsNyBAQCB0eXBlZGVmIGlu
dDY0X3QgSklUX09QRVJBVElPTigqUV9KSVRPcGVyCiB0eXBlZGVmIGludDMyX3QgSklUX09QRVJB
VElPTiAoKlpfSklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVmIGludDMyX3QgSklUX09Q
RVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBpbnQzMl90
IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7
Cit0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VKWikoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9P
UEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FSlpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgaW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19K
SVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYg
c2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUpOwpAQCAtMTg5LDYgKzE5MCw3IEBAIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXRpb25fRVZ3c0opKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVuY29kZWRK
U1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVop
KEV4ZWNTdGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJ
VE9wZXJhdGlvbl9FWkopKEV4ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKK3R5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpKWlpaKShFeGVjU3Rh
dGUqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCwgaW50MzJfdCk7
CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWbSkoRXhlY1N0
YXRlKiwgVk0qKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
SikoRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdGlvbl9aKShpbnQzMl90KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0
dXBWYXJhcmdzRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDExICsxMDEsMzEgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2Fs
bAogCiB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3Jh
dGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJzdFZhckFyZ09mZnNldCwg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdFNldHVwVmFyYXJn
c0ZyYW1lRmFzdENhc2UoCi0gICAgICAgIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLAotICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNw
bGFjZWRJbkpTU3RhY2soVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCBE
YXRhRm9ybWF0SW50MzIpLAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldCgwKSksCi0gICAgICAgIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7Cisg
ICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1Vc2VkU2xvdHNHUFIsIHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG51bGxwdHIsIGZpcnN0VmFyQXJn
T2Zmc2V0LCBzbG93Q2FzZSk7Cit9CisKK3ZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENh
c2UoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIElubGluZUNh
bGxGcmFtZSosIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0JiBzbG93Q2FzZSkKK3sKKyAgICBWYWx1ZVJlY292ZXJ5IGFyZ3VtZW50Q291bnRSZWNvdmVy
eTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RBcmd1bWVudFJlZzsKKyAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhpbmxp
bmVDYWxsRnJhbWUtPmtpbmQpKSB7CisgICAgICAgICAgICBhcmd1bWVudENvdW50UmVjb3Zlcnkg
PSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIsIERhdGFGb3JtYXRJbnQzMik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcmd1bWVudENvdW50UmVjb3ZlcnkgPSBWYWx1
ZVJlY292ZXJ5Ojpjb25zdGFudCgKKyAgICAgICAgICAgICAgICBqc051bWJlcihpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIGZpcnN0QXJndW1l
bnRSZWcgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdp
c3RlcigwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudENvdW50UmVjb3ZlcnkgPSBW
YWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJbnQzMik7CisgICAgICAg
IGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldCgwKSk7CisgICAgfQorICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwg
bnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBh
cmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJndW1lbnRSZWcsIGZpcnN0VmFyQXJnT2Zmc2V0
LCBzbG93Q2FzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuaAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENh
c2UoQ0NhbGwKIC8vIFZhcmlhbnQgdGhhdCBhc3N1bWVzIG5vcm1hbCBzdGFjayBmcmFtZS4KIHZv
aWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIG51
bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQ
UlJlZyBzY3JhdGNoR1BSMywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVy
czo6SnVtcExpc3QmIHNsb3dDYXNlKTsKIAorLy8gVmFyaWFudCBmb3IgcG90ZW50aWFsbHkgaW5s
aW5lZCBzdGFjayBmcmFtZXMuCit2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKEND
YWxsSGVscGVycyYsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwg
R1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIElubGluZUNhbGxGcmFtZSos
IHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93
Q2FzZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIHN0YXRp
YyBBcmd1bWVudHMqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2RlID0gTm9ybWFsQXJn
dW1lbnRzQ3JlYXRpb25Nb2RlKQogICAgIHsKLSAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KHZtLmhlYXAsIG9mZnNldE9m
SW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKGlubGluZUNh
bGxGcmFtZSkpKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKKyAgICAgICAgQXJndW1lbnRzKiBhcmd1
bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KHZtLmhlYXAsIG9m
ZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKGNh
bGxGcmFtZSwgaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOwogICAgICAg
ICBhcmd1bWVudHMtPmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZSwgaW5saW5lQ2FsbEZyYW1lLCBt
b2RlKTsKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKICAgICB9CkBAIC0xMjQsNyArMTI0LDE1
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVTdHJpY3RNb2RlQ2FsbGVlSWZOZWNlc3Nhcnko
RXhlY1N0YXRlKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRl
cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikgKiBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgfQotICAgIHN0YXRpYyBzaXplX3Qg
cmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
KSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsgfQorICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJB
cnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zm
c2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsK
KyAgICAgICAgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgfQogICAgIGJvb2wgaXNBcmd1bWVudChzaXpl
X3QpOwogICAgIGJvb2wgdHJ5U2V0QXJndW1lbnQoVk0mLCBzaXplX3QgYXJndW1lbnQsIEpTVmFs
dWUpOwogICAgIEpTVmFsdWUgdHJ5R2V0QXJndW1lbnQoc2l6ZV90IGFyZ3VtZW50KTsKQEAgLTM0
MCwxMSArMzQ4LDE1IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EK
ICAgICBtX292ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAgbV9vdmVycm9kZUNhbGxlciA9IGZh
bHNlOwogICAgIG1faXNTdHJpY3RNb2RlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGlu
bGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmlzU3RyaWN0TW9kZSgpOwotCisgICAg
CisgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQo
KSkKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgIGVs
c2UKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCk7CisgICAgbV9udW1Bcmd1bWVudHMtLTsKKyAgICAKICAgICBzd2l0Y2ggKG1vZGUpIHsK
ICAgICBjYXNlIE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9kZTogewotICAgICAgICBtX251bUFy
Z3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7Ci0gICAgICAg
IAogICAgICAgICBpZiAobV9udW1Bcmd1bWVudHMpIHsKICAgICAgICAgICAgIGludCBvZmZzZXRG
b3JBcmd1bWVudE9uZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdp
c3RlcigpLm9mZnNldCgpOwogICAgICAgICAgICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9j
YXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSAr
IG9mZnNldEZvckFyZ3VtZW50T25lIC0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zm
c2V0KCk7CkBAIC0zNjEsNyArMzczLDYgQEAgaW5saW5lIHZvaWQgQXJndW1lbnRzOjpmaW5pc2hD
cmVhdGlvbihDYQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNDcmVh
dGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkgLSAxOwogICAgICAgICBpZiAobV9udW1Bcmd1bWVudHMpIHsKICAgICAg
ICAgICAgIGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAgICAgbV9yZWdpc3Rl
cnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJh
bWUtPnJlZ2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50T25lIC0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSkub2Zmc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2ICsyMTEsOCBAQCB0eXBl
ZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICAvKiBmcm9tIHN1cGVyIGxvbmcgY29t
cGlsZXMgdGhhdCB0YWtlIGEgbG90IG9mIG1lbW9yeS4gKi9cCiAgICAgdih1bnNpZ25lZCwgbWF4
aW11bUlubGluaW5nQ2FsbGVyU2l6ZSwgMTAwMDApIFwKICAgICBcCisgICAgdih1bnNpZ25lZCwg
bWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZywgMTAwKSBcCisgICAgXAogICAgIHYoYm9vbCwgZW5h
YmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcsIHRydWUpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBv
bHl2YXJpYW50QnlJZElubGluaW5nLCB0cnVlKSBcCiAgICAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246549</attachid>
            <date>2015-02-13 14:17:16 -0800</date>
            <delta_ts>2015-02-13 17:36:55 -0800</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>151015</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
MTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFB
OEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAv
KiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAx
NDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2Nh
dGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxs
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAw
MEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8q
IFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICov
LAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAq
LywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
LAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkw
RjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBA
QAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4
NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiAr
NDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRy
dXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVy
c2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNy
Y0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQo
aW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0z
MkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMzEsNiArMzMxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
bXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODc2LDYgKzg3NiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJ
YiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgw
KQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBw
dWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNp
Z25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDog
ODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAg
Ly8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1
ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0o
cHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZv
KGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1f
bWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxs
TGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkK
K3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9j
b3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBi
b29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAo
IW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1w
KG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAg
bV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApA
QCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29u
c3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAg
LTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkg
Y29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgog
ICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAg
IGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0
LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAg
IENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFy
Z3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNv
cnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAg
ICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZh
cmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAg
cmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBpc1Zh
cmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtp
bmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtp
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzRXNjYXBlZCI7CiAgICAgY2FzZSBOb3RTdHJpbmdP
YmplY3Q6CiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKKyAgICBjYXNlIFZhcmFy
Z3NPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZsb3ciOwogICAgIGNhc2Ug
VW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5j
b3VudGFibGVJbnZhbGlkYXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEluYWRlcXVhdGVDb3ZlcmFnZSwgLy8gV2UgZXhp
dGVkIGJlY2F1c2Ugd2UgZW5kZWQgdXAgaW4gY29kZSB0aGF0IGRpZG4ndCBoYXZlIHByb2ZpbGlu
ZyBjb3ZlcmFnZS4KICAgICBBcmd1bWVudHNFc2NhcGVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
cmd1bWVudHMgZXNjYXBlZCBidXQgd2UgZGlkbid0IGV4cGVjdCB0aGVtIHRvLgogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgorICAgIFZhcmFyZ3NPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB2YXJhcmdzIGNhbGwgcGFzc2VkIG1vcmUgYXJndW1l
bnRzIHRoYW4gd2UgZXhwZWN0ZWQuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgV2F0Y2hkb2dU
aW1lckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdh
dGNoZG9nIHRpbWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKLSAgICAg
ICAgQVNTRVJUKHZhbHVlLmlzSGVhcFRvcCgpKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0Ns
ZWFyKCkpOwogICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2
YWx1ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1h
dCgpKSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEZpbHRyYXRp
b25PSyk7CkBAIC0yMDMsOSArMjAzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0Lgot
ICAgICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRl
IG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9u
ZSBzZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1
cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAgLy8gbm9uLWNs
ZWFyIHZhbHVlLgorICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChu
b2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2Fz
ZSBCaXRPcjoKQEAgLTEzMTUsNyArMTMyNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0
IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAg
ICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0
aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRo
ZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBzZXRD
b25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0ZW5kIHRoYXQgd2UgY2xvYmJl
cmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KQEAgLTE5NjQsNiArMTk3Niw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3Ao
KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBC
dXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhh
dCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgyLDEyICsxODIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSog
Y2FsbFRhcmdldCwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3Rh
dHVzKTsKICAgICB2b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwg
aW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJ
bnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAg
ICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB2b2lkIGhh
bmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBO
b2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtbnQpOwogICAgIHZvaWQg
dW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50KTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBo
YW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxpbmluZ0Nvc3QoQ2Fs
bFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7IC8vIFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmluZyBjYW5k
aWRhdGUuIEJ5IGNvbnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4KICAgICAv
LyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYg
d2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBj
YWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2ln
bmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMm
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVU
eXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uKTsKICAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1hbExpbmtp
bmcsIENhbGxlckxpbmtzTWFudWFsbHkgfTsKICAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwo
Tm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVk
IG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpOwogICAg
IHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQs
IENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxs
ZXJMaW5rYWJpbGl0eSk7CkBAIC01MjgsNiArNTI5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAg
ICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlcihKU1N0YWNrOjpDYWxsZWUpKSk7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0Vu
dHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lU3Rh
Y2tFbnRyeS0+bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IG51bUFyZ3VtZW50czsgYXJndW1lbnQtLSA+IDE7KQpAQCAtNjkxLDcg
KzY5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBvcCwgb3BJbmZvLCBjYWxsZWUsIGFyZ0Nv
dW50LCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRSZWcocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOworICAgICAgICAg
ICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAg
ICAKQEAgLTEwNDIsOCArMTA0NSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwo
CiB7CiAgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIAotICAgIGlmIChjYWxs
VGFyZ2V0LT5oYXNDb25zdGFudCgpKQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5r
U3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKKyAgICBp
ZiAoY2FsbFRhcmdldC0+aXNDZWxsQ29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMu
c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQoY2FsbFRhcmdldC0+YXNDZWxsKCkp
KTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQog
ICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CkBAIC0xMDYwLDcgKzEwNjMsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogICAgIE9wSW5mbyBjYWxsT3BJ
bmZvOwogICAgIAotICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNh
bGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgeworICAgIGlmIChoYW5kbGVJbmxp
bmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFsUmVn
aXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBr
aW5kLCBwcmVkaWN0aW9uKSkgewogICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQog
ICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOwog
ICAgICAgICByZXR1cm47CkBAIC0xMDcyLDcgKzEwNzUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKAogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5mdW5j
dGlvbigpOwogICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2lu
ZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgICAg
ICBpZiAoZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAg
ICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUsIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0
LCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNh
bGxlZSwgY2FsbFRhcmdldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJP
ZmZzZXQpKTsKICAgICAgICAgICAgIGNhbGxPcEluZm8gPSBPcEluZm8obV9ncmFwaC5mcmVlemUo
ZnVuY3Rpb24pKTsKIAogICAgICAgICAgICAgaWYgKG9wID09IENhbGwpCkBAIC0xMDg4LDExICsx
MDkxLDU0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2FsbChy
ZXN1bHQsIG9wLCBjYWxsT3BJbmZvLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogfQogCi12b2lkIEJ5dGVDb2RlUGFy
c2VyOjplbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFy
Z2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3Zv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9k
ZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBOb2RlKiB0aGlz
QXJndW1lbnQ7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBP
UENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7CisgICAgCisgICAgaW50IHJlc3Vs
dCA9IHBjWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgY2FsbGVlID0gcGNbMl0udS5vcGVyYW5kOwor
ICAgIGludCB0aGlzUmVnID0gcGNbM10udS5vcGVyYW5kOworICAgIGludCBhcmd1bWVudHMgPSBw
Y1s0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJlZVJlZyA9IHBjWzVdLnUub3BlcmFuZDsK
KyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBwY1s2XS51Lm9wZXJhbmQ7CisgICAgCisgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAKKyAgICBO
b2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsKKyAgICAKKyAg
ICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
Rm9yKAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRD
b2RlT3JpZ2luKCksCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywg
bV9jYWxsQ29udGV4dE1hcCk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50KCkp
CisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxWYXJp
YW50KGNhbGxUYXJnZXQtPmFzQ2VsbCgpKSk7CisgICAgCisgICAgaWYgKGNhbGxMaW5rU3RhdHVz
LmNhbk9wdGltaXplKCkKKyAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVz
dWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1Jl
ZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVD
YWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBp
ZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9jYWxsVmFyYXJnc0RhdGEuYWRk
KCk7CisgICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAg
ICAKKyAgICBOb2RlKiB0aGlzQ2hpbGQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0g
ICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCBy
ZWdpc3Rlck9mZnNldCkpOworICAgICAgICB0aGlzQ2hpbGQgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KHRoaXNSZWcpKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXNDaGlsZCA9IG51bGxwdHI7CisgICAg
CisgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBjYWxsVGFyZ2V0LCBnZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLCB0
aGlzQ2hpbGQpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKKyAgICBp
ZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7Cit9
CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBj
YWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnRSZWcp
Cit7CisgICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIGlmICh0aGlzQXJndW1lbnRSZWcuaXNW
YWxpZCgpKQorICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQodGhpc0FyZ3VtZW50UmVnKTsKICAg
ICBlbHNlCiAgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKQEAgLTEzOTMsNyArMTQzOSwxMSBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxU
YXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxM
aW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKK2Jvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUlubGluaW5nKAorICAgIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVz
dWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLAorICAgIGlu
dCByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3Vt
ZW50LAorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJn
dW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCisgICAgdW5zaWdu
ZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2lu
ZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICBkYXRhTG9nKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuIik7CkBAIC0xNDA3LDYgKzE0NTcs
MTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFy
YXJncyhraW5kKQorICAgICAgICAmJiBjYWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSA+
IE9wdGlvbnM6Om1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcoKSkgeworICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgYmVjYXVzZSBvZiB2
YXJhcmdzLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAogICAg
IHVuc2lnbmVkIGlubGluaW5nQmFsYW5jZSA9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNh
bGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiAgICAgaWYgKHNwZWNpYWxpemF0
aW9uS2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KQogICAgICAgICBpbmxpbmluZ0JhbGFuY2UgPSBz
dGQ6Om1pbihpbmxpbmluZ0JhbGFuY2UsIE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0
cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKSk7CkBAIC0xNDE3LDggKzE0NzQs
NzUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNp
bXBsaWZpY2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGlt
ZXMsIGJ1dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUg
d2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4K
ICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtT
dGF0dXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAg
ICAgICAgY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwg
c3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5r
U3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50KTsKKworICAgICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQ7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHZhcmFyZ3MgY2FsbCwg
d2Ugd2FudCB0byBleHRyYWN0IHRoZSBhcmd1bWVudHMgcmlnaHQgbm93LgorICAgICAgICBpZiAo
SW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1hbmRhdG9yeU1pbmltdW07IC8vIGV4Y2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgaWYgKEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gY2FsbExpbmtTdGF0dXNbMF0u
ZnVuY3Rpb25FeGVjdXRhYmxlKCkpCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5TWluaW11bSA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVtID0gMDsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gaW5jbHVkZXMgInRoaXMiCisgICAgICAgICAgICB1bnNpZ25lZCBtYXhOdW1B
cmd1bWVudHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cy5tYXhO
dW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5pbXVtICsgMSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHNvcnQgb2YgcHJldGVuZCB0aGF0IHRoaXMg
KmlzKiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkLgorICAgICAgICAg
ICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBtYXhOdW1Bcmd1bWVudHM7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJPZmZzZXRPckZpcnN0
RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBtYXhOdW1Bcmd1bWVu
dHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0g
LVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICBzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSku
dG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQg
PSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAg
ICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2FkVmFyYXJnc0RhdGEu
YWRkKCk7CisgICAgICAgICAgICBkYXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dFN0YXJ0ICsgMSk7CisgICAgICAgICAgICBkYXRhLT5jb3VudCA9IFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZGF0
YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OworICAgICAgICAgICAgZGF0YS0+bGltaXQgPSBt
YXhOdW1Bcmd1bWVudHM7CisgICAgICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFu
ZGF0b3J5TWluaW11bTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkVG9HcmFwaChMb2Fk
VmFyYXJncywgT3BJbmZvKGRhdGEpLCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gSW4gREZHIElSIGJlZm9yZSBTU0EsIHdlIGNhbm5vdCBpbnNl
cnQgY29udHJvbCBmbG93IGJldHdlZW4gYWZ0ZXIgdGhlCisgICAgICAgICAgICAvLyBMb2FkVmFy
YXJncyBhbmQgdGhlIGxhc3QgU2V0QXJndW1lbnQuIFRoaXMgaXNuJ3QgYSBwcm9ibGVtIG9uY2Ug
d2UgZ2V0IHRvIERGRworICAgICAgICAgICAgLy8gU1NBLiBGb3J0dW5hdGVseSwgd2UgYWxzbyBo
YXZlIG90aGVyIHJlYXNvbnMgZm9yIG5vdCBpbnNlcnRpbmcgY29udHJvbCBmbG93CisgICAgICAg
ICAgICAvLyBiZWZvcmUgU1NBLgorICAgICAgICAgICAgCisgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCksIGZhbHNlKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGxhbWUsIGJ1
dCBpdCB3aWxsIGZvcmNlIHRoZSBjb3VudCB0byBiZSBmbHVzaGVkIGFzIGFuIGludC4gVGhpcyBk
b2Vzbid0CisgICAgICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9m
IGEgU2V0QXJndW1lbnQgYW5kIEZsdXNoZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBpcworICAgICAg
ICAgICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCisgICAgICAgICAgICBjb3VudFZhcmlh
YmxlLT5wcmVkaWN0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJn
ZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CisgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVu
dENvdW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsK
KyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChj
b3VudFZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhpc0Fy
Z3VtZW50KSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgbWF4TnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7Cisg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
U3RhcnQgKyBhcmd1bWVudCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWVy
Z2VTaG91bGROZXZlclVuYm94KHRydWUpOyAvLyBXZSBjdXJyZW50bHkgaGF2ZSBub3doZXJlIHRv
IHB1dCB0aGUgdHlwZSBjaGVjayBvbiB0aGUgTG9hZFZhcmFyZ3MuIExvYWRWYXJhcmdzIGlzIGVm
ZmVjdGZ1bCwgc28gYWZ0ZXIgaXQgZmluaXNoZXMsIHdlIGNhbm5vdCBleGl0LgorICAgICAgICAg
ICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZv
KHZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZWdpc3Rl
ck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7CisgICAgICAgIAogICAgICAg
ICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCiAgICAgICAgICAgICBjYWxsVGFy
Z2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0
LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtp
bmQsIENhbGxlckRvZXNOb3JtYWxMaW5raW5nLCBwcmVkaWN0aW9uLApAQCAtMTQzNywxMSArMTU2
MSw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBk
byBtb3JlIGRldGFpbGVkIHBvbHl2YXJpYW50L3BvbHltb3JwaGljIHByb2ZpbGluZzsgYW5kIHNl
Y29uZCwgaXQgcmVkdWNlcyBjb21waWxlIHRpbWVzIGluCiAgICAgLy8gdGhlIERGRy4gQW5kIGJ5
IHBvbHl2YXJpYW50IHByb2ZpbGluZyB3ZSBtZWFuIHBvbHl2YXJpYW50IHByb2ZpbGluZyBvZiAq
dGhpcyogY2FsbC4gTm90ZSB0aGF0CiAgICAgLy8gd2UgY291bGQgaW1wcm92ZSB0aGF0IGFzcGVj
dCBvZiB0aGlzIGJ5IGRvaW5nIHBvbHltb3JwaGljIGlubGluaW5nIGJ1dCBoYXZpbmcgdGhlIHBy
b2ZpbGluZwotICAgIC8vIGFsc28uIEN1cnJlbnRseSB3ZSBvcHQgYWdhaW5zdCB0aGlzLCBidXQg
aXQgY291bGQgYmUgaW50ZXJlc3RpbmcuIFRoYXQgd291bGQgcmVxdWlyZSBoYXZpbmcgYQotICAg
IC8vIHNlcGFyYXRlIG5vZGUgZm9yIGNhbGwgZWRnZSBwcm9maWxpbmcuCi0gICAgLy8gRklYTUU6
IEludHJvZHVjZSB0aGUgbm90aW9uIG9mIGEgc2VwYXJhdGUgY2FsbCBlZGdlIHByb2ZpbGluZyBu
b2RlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYw
MzMKLSAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFi
bGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZygpKSB7CisgICAgLy8gYWxzby4KKyAgICBpZiAoIWlz
RlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0Nh
bGxJbmxpbmluZygpCisgICAgICAgIHx8IElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQp
KSB7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5n
IGlubGluaW5nIChoYXJkKS5cbiIpOwogICAgICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1
cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwpAQCAtMTQ4Miw2ICsxNjA0LDggQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBkYXRhTG9nKCJTdGFjazog
IiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgfQogICAgIAorICAgIGludCByZWdp
c3Rlck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7CisgICAgCiAgICAgLy8g
VGhpcyBtYWtlcyBtZSB3aXNoIHRoYXQgd2Ugd2VyZSBpbiBTU0EgYWxsIHRoZSB0aW1lLiBXZSBu
ZWVkIHRvIHBpY2sgYSB2YXJpYWJsZSBpbnRvIHdoaWNoIHRvCiAgICAgLy8gc3RvcmUgdGhlIGNh
bGxlZSBzbyB0aGF0IGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byBhbGwgb2YgdGhlIGJsb2NrcyB3
ZSdyZSBhYm91dCB0byBjcmVhdGUuIFdlCiAgICAgLy8gZ2V0IGF3YXkgd2l0aCBkb2luZyBhbiBp
bW1lZGlhdGUtc2V0IGhlcmUgYmVjYXVzZSB3ZSB3b3VsZG4ndCBoYXZlIHBlcmZvcm1lZCBhbnkg
c2lkZSBlZmZlY3RzCkBAIC0zMTEzLDQzICszMjM3LDcwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCB0aGlzUmVnID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmd1bWVudHMgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGZpcnN0RnJlZVJl
ZyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZmly
c3RWYXJBcmdPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhcmd1bWVudHMsIGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoIW1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5z
bG93QXJndW1lbnRzKCkpOwotCi0gICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRz
Tm90Q3JlYXRlZCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2Fs
bEZyYW1lKCktPmFyZ3VtZW50cy5zaXplKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9mZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUgbGFz
dCB1c2VkIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUg
dGhpbmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCi0gICAgICAgICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOwotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQg
LT0gYXJnQ291bnQ7IC8vIFdlIHdpbGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KLSAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7IC8v
IFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCi0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgotICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAotICAgICAgICAgICAg
ICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCi0gICAgICAgICAgICAgICAgLXJlZ2lzdGVy
T2Zmc2V0KTsKLQotICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIGlmIChh
cmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnVuY2hlY2tlZEFyZ3Vt
ZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKQorICAgICAgICAgICAgICAgICAgICAm
JiAhaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFyYXJncygpCisgICAgICAgICAgICAgICAgICAgICYm
ICFmaXJzdFZhckFyZ09mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21wdXRlIHRoZSByZWdpc3RlciBv
ZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNlZCByZWdpc3RlciwgYW5kCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhl
IGNhbGwgZnJhbWUuCisgICAgICAgICAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZp
cnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IGFy
Z0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1bWVudHMuCisgICAgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7
IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhbGlnbm1lbnQgcmlnaHQuCisg
ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOworCisgICAgICAgICAg
ICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0
aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2UgaXQKKyAgICAgICAgICAgICAg
ICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9uZSBpdC4KKyAgICAgICAgICAg
ICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJbW1lZGlh
dGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQorICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92
YXJhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lz
dGVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJh
cmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gRW1pdCBDYWxsRm9yd2FyZFZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBtZWFucyB3ZSBjYW5ub3QgaW5saW5lIGZvcndhcmRlZCB2YXJhcmdzIGNhbGxzIGluc2lk
ZSBhIHZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBjYWxsIGZyYW1lLiBXZSB3aWxsIHByb2Jh
Ymx5IGZpeCB0aGF0IG9uY2Ugd2UgZmluYWxseSBnZXQgcmlkIG9mIHRoZQorICAgICAgICAgICAg
ICAgIC8vIGFyZ3VtZW50cyBvYmplY3Qgc3BlY2lhbC1jYXNpbmcuCisgICAgICAgICAgICAgICAg
Q2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsK
KyAgICAgICAgICAgICAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNldCA9IGZpcnN0VmFyQXJnT2Zm
c2V0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIGNhbGwgPSBhZGRU
b0dyYXBoKAorICAgICAgICAgICAgICAgICAgICBDYWxsRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhk
YXRhKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgIGdldChW
aXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpKTsK
KyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAg
IHNldChyZXN1bHRSZWcsIGNhbGwpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Nh
bGxfdmFyYXJncyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2Un
bGwgZG8gaXQgYW5kIG1ha2UgaXQKLSAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNv
ZGUgaGFkIGRvbmUgaXQuCi0gICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJP
ZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1Jl
ZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKLSAgICAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgICAgICAgICByZXN1bHQsIENhbGws
IENvZGVGb3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCi0gICAgICAgICAg
ICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgaGFu
ZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsVmFyYXJncywgQ29kZUZvckNh
bGwpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0
VmFyYXJncywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9j
b25zdHJ1Y3RfdmFyYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNl
IG9wX2puZXFfcHRyOgogICAgICAgICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9yIG5v
dy4gSXQgbWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCiAgICAgICAg
ICAgICAvLyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUg
Z2VuZXJhbCwgc2luY2UgaXQncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTk2LDYgKzk2LDggQEAgaW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogY29k
ZUJsbwogCiBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlE
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHBjKQogeworICAgIFVOVVNFRF9Q
QVJBTShjb2RlQmxvY2spOyAvLyBUaGlzIGZ1bmN0aW9uIGRvZXMgc29tZSBieXRlY29kZSBwYXJz
aW5nLiBPcmRpbmFyaWx5IGJ5dGVjb2RlIHBhcnNpbmcgcmVxdWlyZXMgdGhlIG93bmluZyBDb2Rl
QmxvY2suIEl0J3Mgc29ydCBvZiBzdHJhbmdlIHRoYXQgd2UgZG9uJ3QgdXNlIGl0IGhlcmUgcmln
aHQgbm93LgorICAgIAogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX2VudGVy
OgogICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CkBAIC0xODIsNiArMTg0LDggQEAgQ2FwYWJpbGl0
eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGlj
X2Vycm9yOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBj
YXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAg
IGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAg
ICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6CkBAIC0yMjMsMTQgKzIyNyw2IEBAIENhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAgICAgcmV0dXJuIENhbkNv
bXBpbGVBbmRJbmxpbmU7CiAgICAgfQogCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAg
ICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0g
Y29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpCi0gICAgICAgICAgICAmJiAh
cGNbNl0udS5vcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIENhbklubGluZTsKLSAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNgotICAgICAgICByZXR1cm4gQ2Fubm90
Q29tcGlsZTsKLQogICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogCiAgICAgY2FzZSBvcF9jcmVhdGVf
bGV4aWNhbF9lbnZpcm9ubWVudDoKICAgICBjYXNlIG9wX25ld19mdW5jOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDggKzg2LDYgQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBmdW5jdGlvbkNhcGFiaWxpdAogICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENh
bkNvbXBpbGVBbmRJbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKICAgICBpZiAobWln
aHRDb21waWxlICYmICFtaWdodElubGluZSkKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3Vu
ZChDYW5Db21waWxlLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENv
bXBpbGUgJiYgbWlnaHRJbmxpbmUpCi0gICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2Fu
SW5saW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7CiAgICAgaWYgKCFtaWdodENvbXBpbGUg
JiYgIW1pZ2h0SW5saW5lKQogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNiArMzY1LDkg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29u
c3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoK
KyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAg
IGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2Ug
SW46CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CkBAIC00MDEsNiArNDA0LDEz
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgIC8vIFRoaXMgYWN0dWFsbHkgd3Jp
dGVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBpdCByZWFkcyB0aGUgYXJy
YXksIGl0IGRvZXMKKyAgICAgICAgLy8gc28gaW4gYSB3YXkgdGhhdCBtYXkgdHJpZ2dlciBnZXR0
ZXJzIG9yIHZhcmlvdXMgdHJhcHMuCisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0
ZShXb3JsZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5s
aW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5OTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5Miw3ICsyOTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0g
Q2FwYWJpbGl0eUxldmVsIHsKICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwKICAg
ICBDYW5Db21waWxlLAogICAgIENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxl
dmVsTm90U2V0CkBAIC0zMTIsNyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBh
YmlsaXR5TGV2ZWwgbAogaW5saW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZl
bCkKIHsKICAgICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2Fz
ZSBDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0
OgpAQCAtMzI1LDE0ICszMjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJC
b3VuZChDCiAgICAgc3dpdGNoIChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAg
ICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dp
dGNoIChiKSB7Ci0gICAgICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBp
bGVBbmRJbmxpbmU6Ci0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBj
YXNlIENhbkNvbXBpbGU6CiAgICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNv
bXBpbGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2Fs
bDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0
cnVjdDoKICAgICBjYXNlIEJyZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw2ICs4MjIsOCBAQCBwdWJsaWM6CiAg
ICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAg
IEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBC
YWc8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
OworICAgIEJhZzxDYWxsVmFyYXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOworICAgIEJhZzxM
b2FkVmFyYXJnc0RhdGE+IG1fbG9hZFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJp
YWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVu
ZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiw2ICsxMjIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxl
CiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFz
c2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4K
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQb2lu
dGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogI2lmIENQVShYODYpCiAgICAgICAgIC8vIEZJ
WE1FOiBzaG91bGQgdXNlIHRoZSBjYWxsIGFic3RyYWN0aW9uLCBidXQgdGhpcyBpcyBjdXJyZW50
bHkgaW4gdGhlIFNwZWN1bGF0aXZlSklUIGxheWVyIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDIwIEBAIHN0cnVjdCBT
d2l0Y2hEYXRhIHsKICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKIH07CiAKK3N0cnVjdCBDYWxs
VmFyYXJnc0RhdGEgeworICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsKK307CisKK3N0cnVjdCBM
b2FkVmFyYXJnc0RhdGEgeworICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydDsgLy8gTG9jYWwgZm9y
IHRoZSBmaXJzdCBlbGVtZW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBjb3VudDsgLy8gTG9jYWwg
Zm9yIHRoZSBjb3VudC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVN0YXJ0OworICAgIFZp
cnR1YWxSZWdpc3RlciBtYWNoaW5lQ291bnQ7CisgICAgdW5zaWduZWQgb2Zmc2V0OyAvLyBXaGlj
aCBhcnJheSBlbGVtZW50IHRvIHN0YXJ0IHdpdGguIFVzdWFsbHkgdGhpcyBpcyAwLgorICAgIHVu
c2lnbmVkIG1hbmRhdG9yeU1pbmltdW07IC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb24gdGhl
IHN0YWNrIHRoYXQgbXVzdCBiZSBpbml0aWFsaXplZDsgaWYgdGhlIGFycmF5IGlzIHRvbyBzaG9y
dCB0aGVuIHRoZSBtaXNzaW5nIGVsZW1lbnRzIG11c3QgZ2V0IHVuZGVmaW5lZC4KKyAgICB1bnNp
Z25lZCBsaW1pdDsgLy8gTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbG9hZC4KK307CisK
IC8vIFRoaXMgdHlwZSB1c2VkIGluIHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5v
ZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlw
aWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEg
Y29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCkBA
IC04ODgsNiArOTAyLDM1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAg
IGJvb2wgaGFzQ2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkg
eworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBjYWxsVmFyYXJnc0RhdGEo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0NhbGxWYXJhcmdzRGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxDYWxsVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBvcCgpID09IExvYWRWYXJhcmdzOworICAgIH0KKyAgICAKKyAgICBMb2FkVmFyYXJnc0RhdGEq
IGxvYWRWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzTG9hZFZhcmFyZ3NE
YXRhKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PExvYWRWYXJhcmdzRGF0YSo+KG1f
b3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuICEhcmVzdWx0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogdGhpcyBtdXN0IGJlIHRoZSBkaXJlY3Rs
eSBzdWJzZXF1ZW50IHByb3BlcnR5IHB1dC4gTm90ZSB0aGF0IFB1dEJ5VmFsICovXAogICAgIC8q
IG9wY29kZXMgdXNlIFZhckFyZ3MgYmVhdXNlIHRoZXkgbWF5IGhhdmUgdXAgdG8gNCBjaGlsZHJl
bi4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhMb2FkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKFB1dEJ5VmFsRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwK
ICAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBc
CiAgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJB
cmdzKSBcCkBAIC0yMTcsNiArMjE4LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIC8qIENhbGxzLiAqL1wKICAgICBtYWNybyhDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhDb25zdHJ1Y3QsIE5v
ZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1h
Y3JvKENhbGxWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oQ2FsbEZvcndhcmRWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgbWFjcm8oQ29uc3RydWN0VmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKE5hdGl2ZUNvbnN0cnVjdCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDE3IEBAIHZvaWQgTG9jYWxPU1JBdmFp
bGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
KyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9
IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9CisgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hl
ZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSAr
IGkpKSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNW
YWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBkZWZhdWx0
OgogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTAxOCw2ICsxMDE4LDI3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZSgKICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgIkV4ZWN1dGVkIE5vdGlm
eVdyaXRlIik7CiB9CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJh
cmdzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50
MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGFy
Z3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKKyAgICAKKyAgICBy
ZXR1cm4gc2l6ZU9mVmFyYXJncyhleGVjLCBhcmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsK
K30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSog
ZXhlYywgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJn
dW1lbnRzLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW5ndGgsIGludDMyX3QgbWFuZGF0b3J5
TWluaW11bSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKKyAgICAKKyAgICBsb2FkVmFyYXJncyhleGVj
LCBWaXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBs
ZW5ndGgpOworICAgIAorICAgIGZvciAoaW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5
TWluaW11bTsgKytpKQorICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpz
VW5kZWZpbmVkKCk7Cit9CisKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbklu
dHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc5
OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI1LDYgKzEyNSw4IEBAIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
c2l6ZV90IHRhYmxlSW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hT
dHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRj
aHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOworaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBp
bnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25M
b2FkVmFyYXJncyhFeGVjU3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRK
U1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90
IG1hbmRhdG9yeU1pbmltdW0pOwogCiBpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29u
dmVydEJveGVkRG91YmxlVG9JbnQ1MihFbmNvZGVkSlNWYWx1ZSk7CiBpbnQ2NF90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29udmVydERvdWJsZVRvSW50NTIoZG91YmxlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDExICsxMzMsMjUg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKS5v
ZmZzZXQoKSkpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2Fs
bCkKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHdyaXRlVG9wKCkKICAg
ICB7CisgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MpIHsKKyAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBub3RlIHRoZSB3cml0ZXMgdG8gdGhlIGxvY2FscyB0aGF0IHdp
bGwgc3RvcmUgdGhlIGFycmF5IGVsZW1lbnRzIGFuZAorICAgICAgICAgICAgLy8gY291bnQuCisg
ICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0
YSgpOworICAgICAgICAgICAgbV93cml0ZShkYXRhLT5jb3VudCk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKKyAgICAgICAgICAgICAgICBtX3dyaXRl
KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhp
bmcgc3BlY2lhbCBmb3IgQ2FsbEZvcndhcmRWYXJhcmdzLCBzaW5jZSBpdCByZWFkcworICAgICAg
ICAvLyBvdXIgYXJndW1lbnRzIHRoZSBzYW1lIHdheSB0aGF0IGFueSBlZmZlY3RmdWwgdGhpbmcg
bWlnaHQuCisgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0Fy
Z3VtZW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7KQogICAgICAgICAgICAgICAgIG1fd3Jp
dGUodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE4OSw2ICsxODksMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVU
eXBlJiBzdAogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBj
YXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0
VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBO
ZXdBcnJheVdpdGhTaXplOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJv
dG90eXBlLmgiCisjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTcGls
bFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKIApAQCAtNjI0
LDM4ICs2MjUsMTY5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEK
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBib29s
IGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlzQ2FsbCkKLSAgICAgICAg
REZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7
Ci0gICAgCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90
IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0LgotICAgIGlu
dCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOworICAgIENhbGxMaW5rSW5mbzo6
Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgYm9vbCBpc0NhbGw7CisgICAgYm9vbCBpc1ZhcmFyZ3M7
CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDYWxsOgorICAgICAgICBjYWxs
VHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbDsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsKKyAgICAg
ICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0
OgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgICAgICBp
c0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Cisg
ICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgaXND
YWxsID0gdHJ1ZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5m
bzo6Q29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAgIGlz
VmFyYXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIERG
R19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxk
KG5vZGUsIDApOwogICAgIAotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBp
c0NhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKKyAg
ICAvLyBHb3R0YSBsb2FkIHRoZSBhcmd1bWVudHMgc29tZWhvdy4gVmFyYXJncyBpcyB0cmlja2ll
ci4KKyAgICBpZiAoaXNWYXJhcmdzKSB7CisgICAgICAgIC8vIDEpIGdldCB0aGUgYXJndW1lbnRz
CisgICAgICAgIC8vIDIpIGZsdXNoIHJlZ2lzdGVycworICAgICAgICAvLyAzKSBzZXQgdXAgdGhl
IGNhbGwgZnJhbWUKKyAgICAgICAgLy8gNCkgZ2V0IHRoZSBjYWxsZWUgYW5kICJ0aGlzIiBhbmQg
aGFuZGxlIHRoZW0KKyAgICAgICAgLy8gNSkgZmx1c2ggcmVnaXN0ZXJzIGFnYWluCisgICAgICAg
IAorICAgICAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEo
KTsKKworICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUjE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIzOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRW
YXJhcmdzKSB7CisgICAgICAgICAgICAvLyBXZSBhdm9pZCBjYWxsaW5nIGZsdXNoUmVnaXN0ZXJz
KCkgaW5zaWRlIHRoZSBjb250cm9sIGZsb3cgb2YgQ2FsbEZvcndhcmRWYXJhcmdzLgorICAgICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXV0
byBsb2FkQXJndW1lbnRzR1BSID0gWyZdIChHUFJSZWcgcmVzZXJ2ZWRHUFIpIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c0dQUiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKHJlc2VydmVk
R1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
Z3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQUik7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICAgICAgICAgICAgICBsb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgICAgICBp
ZiAocmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgdW5s
b2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzY3JhdGNoR1BSMSA9IEpJVENv
bXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgcmVzZXJ2ZWRHUFIpOworICAg
ICAgICAgICAgc2NyYXRjaEdQUjIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1
bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCByZXNlcnZlZEdQUik7CisgICAgICAgICAgICBzY3JhdGNo
R1BSMyA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyLCByZXNlcnZlZEdQUik7CisgICAgICAgIH07CisgICAgICAgIAor
ICAgICAgICBsb2FkQXJndW1lbnRzR1BSKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSB3aG9sZSByZWdpc3RlciBmaWxlIHRvIG91
cnNlbHZlcywgYW5kIGFyZ3VtZW50c0dQUiBoYXMgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50cyBy
ZWdpc3Rlci4gU2VsZWN0IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgICAgIAorICAgICAg
ICAvLyBXZSB3aWxsIHVzZSBzY3JhdGNoR1BSMiB0byBwb2ludCB0byBvdXIgc3RhY2sgZnJhbWUu
CisKKyAgICAgICAgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMgPSBtX2ppdC5ncmFwaCgpLm1f
bmV4dE1hY2hpbmVMb2NhbDsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhh
dmVBcmd1bWVudHM7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAg
ICAgICAvLyBEbyB0aGUgaG9ycmlmaWMgZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0aW1p
emF0aW9uLgorICAgICAgICAgICAgLy8gRklYTUU6IGRvIHRoaXMgb3B0aW1pemF0aW9uIGF0IHRo
ZSBJUiBsZXZlbCBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGJ5IHRlc3RpbmcgdGhlCisgICAgICAg
ICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFRoaXMgd2lsbCBoYXBwZW4gb25jZSB3ZSBnZXQg
cmlkIG9mIHRoZSBhcmd1bWVudHMgbGF6eSBjcmVhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGxh
enkgdGVhci1vZmYuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3RhY2tTbG90cyks
IHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNl
KG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
Mywgbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJB
cmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiA9IHNjcmF0Y2hHUFIy
OworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzID0gbV9qaXQuanVtcCgp
OworICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgICAgICB9CisKKyAgICAg
ICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAgICAg
IAorICAgICAgICAvLyBSaWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVudHNHUFIgYW5k
IHRoZSByZWdpc3RlciBmaWxlIGlzIGZsdXNoZWQuCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3Vt
ZW50c0dQUiwgbnVtVXNlZFN0YWNrU2xvdHMsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSBoYXZlIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0aGUg
Y2FsbGVlIGZyYW1lLCBidXQgd2UndmUgbG9zdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQuCisgICAg
ICAgIC8vIFJlY29uc3RydWN0IHRoZSBhcmd1bWVudHMgb3BlcmFuZCB3aGlsZSBwcmVzZXJ2aW5n
IHRoZSBjYWxsZWUgZnJhbWUuCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3Rh
Y2tTbG90cyksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShtX2pp
dCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGZhbHNlLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQ
UjEpOworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSwgNSAqIHNpemVvZih2b2lkKikpKSksIHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TZXR1cFZhcmFyZ3NGcmFtZSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIx
LCBhcmd1bWVudHNHUFIsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2Fy
ZFZhcmFyZ3MpCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNo
ZWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBhcmd1bWVudHMg
YXJyYXkgYW55bW9yZS4KKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ2FsbEZvcndhcmRWYXJh
cmdzKQorICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChpc0NhbGwpIHsKKyAgICAgICAgICAgIC8vIE5vdyBzZXQgdXAgdGhlICJ0aGlzIiBhcmd1
bWVudC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNBcmd1bWVudCh0aGlzLCBub2Rl
LT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncyA/IG5vZGUtPmNoaWxkMigpIDogbm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNBcmd1bWVudEdQUiA9IHRoaXNBcmd1bWVu
dC5ncHIoKTsKKyAgICAgICAgICAgIHRoaXNBcmd1bWVudC51c2UoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh0aGlzQXJndW1lbnRHUFIsIEpJVENvbXBpbGVyOjpj
YWxsZWVBcmd1bWVudFNsb3QoMCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQg
d2UgaGF2ZSB0byBtYWtlIHNwYWNlCisgICAgICAgIC8vIGZvciBpdC4KKyAgICAgICAgaW50IGR1
bW15VGhpc0FyZ3VtZW50ID0gaXNDYWxsID8gMCA6IDE7CiAgICAgCi0gICAgRWRnZSBjYWxsZWVF
ZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKV07
Ci0gICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rp
b247IHRoZSBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUKLSAgICAvLyBhcmd1bWVudHMuCi0g
ICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAg
Ly8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247IHRo
ZSBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUKKyAgICAgICAgLy8gYXJndW1lbnRzLgorICAg
ICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogICAgIAot
ICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OworICAg
ICAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKICAg
ICAKLSAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJn
cyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
OworICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVt
QXJncyksIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKTsKICAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7
IGkrKykgewotICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hp
bGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcodGhpcywgYXJnRWRnZSk7Ci0gICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7
Ci0gICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Q
YXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7CisgICAgICAgICAgICBHUFJS
ZWcgYXJnR1BSID0gYXJnLmdwcigpOworICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwogICAgICAg
ICAKLSAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50U2xv
dChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoYXJn
R1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVu
dCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMs
IGNhbGxlZUVkZ2UpOwogICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0gICAg
dXNlKGNhbGxlZUVkZ2UpOwotICAgIG1faml0LnN0b3JlNjQoY2FsbGVlR1BSLCBtX2ppdC5jYWxs
ZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgY2FsbGVlLnVzZSgpOworICAgIG1f
aml0LnN0b3JlNjQoY2FsbGVlR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KEpTU3Rh
Y2s6OkNhbGxlZSkpOwogICAgIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKQEAgLTY5Miw2ICs4
MjQsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIGNh
bGxMaW5rSW5mby0+Y2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIAogICAgIG1faml0LmFkZEpT
Q2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7Cisg
ICAgCisgICAgLy8gSWYgd2Ugd2VyZSB2YXJhcmdzLCB0aGVuIGFmdGVyIHRoZSBjYWxscyBhcmUg
ZG9uZSwgd2UgbmVlZCB0byByZWVzdGFibGlzaCBvdXIgc3RhY2sgcG9pbnRlci4KKyAgICBpZiAo
aXNWYXJhcmdzKQorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmdyYXBo
KCkuc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAK
IC8vIENsYW5nIHNob3VsZCBhbGxvdyB1bnJlYWNoYWJsZSBbW2NsYW5nOjpmYWxsdGhyb3VnaF1d
IGluIHRlbXBsYXRlIGZ1bmN0aW9ucyBpZiBhbnkgdGVtcGxhdGUgZXhwYW5zaW9uIHVzZXMgaXQK
QEAgLTQyMzEsOSArNDM2Nyw1MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBD
YWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0
cnVjdFZhcmFyZ3M6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJl
ZyBhcmd1bWVudHNHUFI7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFy
Z3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNHUFIg
PSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFy
Z3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNldCk7
CisgICAgICAgIAorICAgICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAg
ICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgdW5sb2NrKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVy
ZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3Bl
cnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBv
ZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBj
b21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxk
IGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdo
dAorICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2Uo
KSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BS
LAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKKyAgICAgICAg
CisgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICAKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgZGF0YS0+bWFjaGluZVN0YXJ0Lm9m
ZnNldCgpLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVB
Y3RpdmF0aW9uOiB7CiAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKQEAgLTQzMzgs
OSArNDUxNywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwotICAgICAg
ICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSwKKyAg
ICAgICAgICAgICAgICByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICgh
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBh
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRD
b3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJl
Z2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
X2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KICAgICAg
ICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtNDM1NCwyMCArNDU0NCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKAog
ICAgICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKSwKICAg
ICAgICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291
bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3Rl
ciksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8g
RklYTUU6IHRoZSBzbG93IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2FyZCBz
cGVjdWxhdGlvbiB0aGF0IHRoZQotICAgICAgICAvLyByZXN1bHQgaXMgYW4gaW50ZWdlci4gRm9y
IG5vdyB3ZSBwb3N0cG9uZSB0aGUgc3BlY3VsYXRpb24gYnkgaGF2aW5nIHRoaXMgcmV0dXJuCi0g
ICAgICAgIC8vIGEgSlNWYWx1ZS4KLSAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIGNyZWF0ZWQs
IHRoaXMsIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aCwgcmVzdWx0R1BSLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
MTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3OCw3ICs1NzgsNiBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgLy8gVXNlZCB0byBBU1NF
UlQgZmx1c2hSZWdpc3RlcnMoKSBoYXMgYmVlbiBjYWxsZWQgcHJpb3IgdG8KICAgICAvLyBjYWxs
aW5nIG91dCBmcm9tIEpJVCBjb2RlIHRvIGEgQyBoZWxwZXIgZnVuY3Rpb24uCiAgICAgYm9vbCBp
c0ZsdXNoZWQoKQpAQCAtNTkzLDcgKzU5Miw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQoTm9k
ZSogbm9kZSkKQEAgLTExMDksNiArMTEwNywyNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWlog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQgYXJnMiwgdW5z
aWduZWQgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSk7CisgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihG
X0pJVE9wZXJhdGlvbl9FRkpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZElt
bTMyKGFyZzMpLCBhcmc0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcyKQorICAgIHsKKyAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FWkpaWlogb3BlcmF0aW9uLCB1bnNpZ25lZCBhcmcxLCBHUFJS
ZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQsIHVuc2lnbmVkIGFyZzUpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMy
KGFyZzEpLCBhcmcyLCBUcnVzdGVkSW1tMzIoYXJnMyksIGFyZzQsIFRydXN0ZWRJbW0zMihhcmc1
KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgTm9S
ZXN1bHRUYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Rh
Y2tMYXlvdXRQaGFzZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2
LDcgQEAgcHVibGljOgogICAgICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKICAgICAgICAgCiAg
ICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgZnJvbSBJUi4K
LSAgICAgICAgYm9vbCBoYXNHZXRMb2NhbFVubGlua2VkID0gZmFsc2U7CisgICAgICAgIGJvb2wg
aGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAg
ICAgICAgICAgaWYgKCFibG9jaykKQEAgLTgxLDcgKzgxLDIyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KG9wZXJhbmQu
dG9Mb2NhbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzR2V0TG9jYWxVbmxpbmtlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICAg
ICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNvdW50LmlzTG9jYWwoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGRhdGEtPmNvdW50LnRvTG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2FsKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVzIG9uIHRoZSBjb250
aWd1aXR5IG9mIHN0YWNrIGxheW91dAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdu
bWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVhbFJlZ2lzdGVyKGRh
dGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3Rl
cihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0gLy8gdGhlIGVsc2UgY2FzZSBzaG91bGRuJ3QgaGFwcGVuLgorICAgICAgICAgICAgICAg
ICAgICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTEzLDYg
KzEyOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChhcmd1bWVudHNS
ZWdpc3Rlci50b0xvY2FsKCkpOwogICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQodW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKS50b0xvY2FsKCkpOwogICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewor
ICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAg
ICAgICAgICAgICAgSlNTdGFjazo6QXJndW1lbnRDb3VudCArIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykgewogICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMu
c2V0KFZpcnR1YWxSZWdpc3RlcigKICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpICsKQEAgLTE0OCwyNCArMTY4LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFi
bGUtPm1hY2hpbmVMb2NhbCgpID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAg
ICAgICAgYWxsb2NhdGlvblt2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCldKTsKKyAgICAgICAg
ICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJs
ZS0+bG9jYWwoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChjb2RlQmxvY2so
KS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICBh
bGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpLnRvTG9jYWwoKV0pOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0KKyAgICAgICAg
ICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVy
KCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAgICAgdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblsKLSAgICAgICAgICAgICAgICAgICAgdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2Nr
KCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLnRvTG9jYWwoKV0pCisgICAgICAgICAgICAgICAgYXNz
aWduKGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2RlQmxvY2soKS0+
YXJndW1lbnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICBjb2RlQmxvY2so
KS0+c2V0QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCktPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdp
c3RlcigpLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldEFjdGl2YXRp
b25SZWdpc3RlcigKLSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxv
Y2F0aW9uW2NvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS50b0xvY2FsKCldKSk7Cisg
ICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5hY3RpdmF0aW9u
UmVnaXN0ZXIoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIHJlZ2lz
dGVyIGlzIG5ldmVyIHZhbGlkIGZvciBERkcgY29kZSBibG9ja3MuCkBAIC0xNzYsMTUgKzE5Mywx
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bbV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpLnRvTG9jYWwoKV0pOworICAgICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSBhc3NpZ24oCisgICAg
ICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Io
aW5saW5lQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKLSAg
ICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblt1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpLnRvTG9jYWwoKV0pCisgICAg
ICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKSkKICAg
ICAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAg
ICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2ln
bigKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykg
ewogICAgICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFwaC5t
X2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50UG9z
aXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAgLTIyNyw5ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKTsKICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCk7IGkt
LTspIHsKICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXSA9IHNsb3dBcmd1
bWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0
dWFsUmVnaXN0ZXIoc2xvd0FyZ3VtZW50c1tpXS5pbmRleCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChyZWcuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3Vt
ZW50c1tpXS5pbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bcmVnLnRv
TG9jYWwoKV0pLm9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRz
W2ldLmluZGV4ID0gYXNzaWduKGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1l
bnRzW2ldLmluZGV4KSkub2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Nsb3dBcmd1bWVudHMgPSBXVEY6Om1vdmUobmV3
U2xvd0FyZ3VtZW50cyk7CkBAIC0yMzcsNyArMjU2LDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBGaXggR2V0TG9jYWxVbmxpbmtlZCdzIHZhcmlhYmxlIHJlZmVy
ZW5jZXMuCi0gICAgICAgIGlmIChoYXNHZXRMb2NhbFVubGlua2VkKSB7CisgICAgICAgIGlmICho
YXNOb2Rlc1RoYXROZWVkRml4dXApIHsKICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgICAgICAgICBpZiAoIWJsb2NrKQpAQCAtMjQ2LDEwICsyNjUsMTQgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW29w
ZXJhbmQudG9Mb2NhbCgpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRVbmxp
bmtlZE1hY2hpbmVMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldFVubGlua2VkTWFjaGluZUxvY2FsKGFzc2lnbihhbGxvY2F0aW9uLCBub2RlLT51bmxpbmtl
ZExvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWduKGFs
bG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI2Miw2
ICsyODUsMjAgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQorCitwcml2YXRlOgorICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgVmVjdG9yPHVu
c2lnbmVkPiYgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHNyYykKKyAgICB7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBzcmM7CisgICAgICAgIGlmIChyZXN1bHQuaXNMb2Nh
bCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW3Jl
c3VsdC50b0xvY2FsKCldOworICAgICAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01B
WCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChteUFsbG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQogfTsKIAogYm9vbCBwZXJmb3JtU3RhY2tMYXlvdXQoR3JhcGgmIGdyYXBoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHJldmlzaW9uIDE3
OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw5IEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgc3RydWN0
VHlwZShMQ29udGV4dCAKICAgICByZXR1cm4gc3RydWN0VHlwZShjb250ZXh0LCBlbGVtZW50cywg
MiwgcGFja2luZyk7CiB9CiAKKy8vIEZJWE1FOiBNYWtlIHRoZSBWYXJpYWRpY2l0eSBhcmd1bWVu
dCBub3QgYmUgdGhlIGxhc3QgYXJndW1lbnQgdG8gZnVuY3Rpb25UeXBlKCkgc28gdGhhdCB0aGlz
IGZ1bmN0aW9uCisvLyBjYW4gdXNlIEMrKzExIHZhcmlhZGljIHRlbXBsYXRlcworLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTU3NQogZW51bSBWYXJpYWRpY2l0
eSB7IE5vdFZhcmlhZGljLCBWYXJpYWRpYyB9Owogc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlv
blR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgY29uc3QgTFR5cGUqIHBhcmFtVHlwZXMsIHVuc2lnbmVk
IHBhcmFtQ291bnQsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5KQogewpAQCAtMTEwLDYgKzExMywx
NiBAQCBzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByCiAgICAgTFR5cGUg
cGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQgfTsKICAgICBy
ZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDQsIHZhcmlhZGljaXR5
KTsKIH0KK3N0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUs
IExUeXBlIHBhcmFtMSwgTFR5cGUgcGFyYW0yLCBMVHlwZSBwYXJhbTMsIExUeXBlIHBhcmFtNCwg
TFR5cGUgcGFyYW01LCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQorewor
ICAgIExUeXBlIHBhcmFtVHlwZXNbXSA9IHsgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00
LCBwYXJhbTUgfTsKKyAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlw
ZXMsIDUsIHZhcmlhZGljaXR5KTsKK30KK3N0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBl
KExUeXBlIHJldHVyblR5cGUsIExUeXBlIHBhcmFtMSwgTFR5cGUgcGFyYW0yLCBMVHlwZSBwYXJh
bTMsIExUeXBlIHBhcmFtNCwgTFR5cGUgcGFyYW01LCBMVHlwZSBwYXJhbTYsIFZhcmlhZGljaXR5
IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCit7CisgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0g
eyBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQsIHBhcmFtNSwgcGFyYW02IH07CisgICAg
cmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCA2LCB2YXJpYWRpY2l0
eSk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgTFR5cGUgdHlwZU9mKExWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gbGx2bS0+VHlwZU9mKHZhbHVlKTsgfQogCkBAIC0yOTgsNDEgKzMxMSwxMyBAQCBzdGF0aWMg
aW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgCiB7CiAgICAgcmV0dXJuIGJ1aWxkQ2Fs
bChidWlsZGVyLCBmdW5jdGlvbiwgJmFyZzEsIDEpOwogfQotc3RhdGljIGlubGluZSBMVmFsdWUg
YnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEs
IExWYWx1ZSBhcmcyKQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIgfTsKLSAg
ICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCAyKTsKLX0KLXN0YXRp
YyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rp
b24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMpCi17Ci0gICAgTFZhbHVl
IGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMyB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVp
bGRlciwgZnVuY3Rpb24sIGFyZ3MsIDMpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRD
YWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1
ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmdzPgorTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24s
IExWYWx1ZSBhcmcxLCBBcmdzLi4uIGFyZ3MpCiB7Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJn
MSwgYXJnMiwgYXJnMywgYXJnNCB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVu
Y3Rpb24sIGFyZ3MsIDQpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWls
ZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBM
VmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1KQotewotICAgIExWYWx1ZSBhcmdz
W10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUgfTsKLSAgICByZXR1cm4gYnVpbGRD
YWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA1KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcx
LCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZh
bHVlIGFyZzYpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJn
NCwgYXJnNSwgYXJnNiB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24s
IGFyZ3MsIDYpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1
aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUg
YXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcp
Ci17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwg
YXJnNiwgYXJnNyB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFy
Z3MsIDcpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxk
ZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJn
MywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcsIExW
YWx1ZSBhcmc4KQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFy
ZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzggfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxk
ZXIsIGZ1bmN0aW9uLCBhcmdzLCA4KTsKKyAgICBMVmFsdWUgYXJnc0FycmF5W10gPSB7IGFyZzEs
IGFyZ3MuLi4gfTsKKyAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdz
QXJyYXksIHNpemVvZihhcmdzQXJyYXkpIC8gc2l6ZW9mKExWYWx1ZSkpOwogfQorCiBzdGF0aWMg
aW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihMVmFsdWUgaW5zdHJ1
Y3Rpb24sIExDYWxsQ29udiBjYWxsaW5nQ29udmVudGlvbikgeyBsbHZtLT5TZXRJbnN0cnVjdGlv
bkNhbGxDb252KGluc3RydWN0aW9uLCBjYWxsaW5nQ29udmVudGlvbik7IH0KIHN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkRXh0cmFjdFZhbHVlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBhZ2dW
YWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBsbHZtLT5CdWlsZEV4dHJhY3RWYWx1ZShidWls
ZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU2Vs
ZWN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExWYWx1ZSB0YWtlbiwgTFZh
bHVlIG5vdFRha2VuKSB7IHJldHVybiBsbHZtLT5CdWlsZFNlbGVjdChidWlsZGVyLCBjb25kaXRp
b24sIHRha2VuLCBub3RUYWtlbiwgIiIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTIwLDYgKzEyMCwxMCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9k
ZSogCiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgIGNhc2UgQ2FsbDoK
ICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2Fs
bEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExv
YWRWYXJhcmdzOgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVj
dDoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKQEAgLTEyOCw2ICsxMjgs
MjAgQEAgc3RhdGljIHZvaWQgZHVtcERhdGFTZWN0aW9uKERhdGFTZWN0aW9uKgogICAgIH0KIH0K
IAorc3RhdGljIGludCBvZmZzZXRPZlN0YWNrUmVnaW9uKFN0YWNrTWFwczo6UmVjb3JkTWFwJiBy
ZWNvcmRNYXAsIHVpbnQzMl90IHN0YWNrbWFwSUQpCit7CisgICAgU3RhY2tNYXBzOjpSZWNvcmRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGFja21hcElEKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
aXRlci0+dmFsdWUuc2l6ZSgpID09IDEpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVl
WzBdLmxvY2F0aW9ucy5zaXplKCkgPT0gMSk7CisgICAgTG9jYXRpb24gY2FwdHVyZWRMb2NhdGlv
biA9CisgICAgICAgIExvY2F0aW9uOjpmb3JTdGFja21hcHMobnVsbHB0ciwgaXRlci0+dmFsdWVb
MF0ubG9jYXRpb25zWzBdKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExvY2F0aW9uLmtp
bmQoKSA9PSBMb2NhdGlvbjo6UmVnaXN0ZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVk
TG9jYXRpb24uZ3ByKCkgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIFJFTEVB
U0VfQVNTRVJUKCEoY2FwdHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAlIHNpemVvZihSZWdpc3Rlcikp
KTsKKyAgICByZXR1cm4gY2FwdHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAvIHNpemVvZihSZWdpc3Rl
cik7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIERlc2NyaXB0b3JUeXBlPgogdm9pZCBnZW5lcmF0
ZUlDRmFzdFBhdGgoCiAgICAgU3RhdGUmIHN0YXRlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgR2Vu
ZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb24sCkBAIC0yNDMsNiArMjU3LDMyIEBAIHN0
YXRpYyBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzRm9yKGNvbnMKICAgICByZXR1cm4gUmVnaXN0
ZXJTZXQocmVjb3JkLnVzZWRSZWdpc3RlclNldCgpLCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2FsbFR5cGU+Cit2b2lkIGFkanVz
dENhbGxJQ3NGb3JTdGFja21hcHMoVmVjdG9yPENhbGxUeXBlPiYgY2FsbHMsIFN0YWNrTWFwczo6
UmVjb3JkTWFwJiByZWNvcmRNYXApCit7CisgICAgLy8gSGFuZGxpbmcgSlMgY2FsbHMgaXMgd2Vp
cmQ6IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugc29ydCB0aGVtIGJ5IHRoZSBQQyBpbiBMTFZN
CisgICAgLy8gZ2VuZXJhdGVkIGNvZGUuIFRoYXQgaW1wbGllcyBmaXJzdCBwcnVuaW5nIHRoZSBv
bmVzIHRoYXQgTExWTSBkaWRuJ3QgZ2VuZXJhdGUuCisKKyAgICBWZWN0b3I8Q2FsbFR5cGU+IG9s
ZENhbGxzOworICAgIG9sZENhbGxzLnN3YXAoY2FsbHMpOworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBvbGRDYWxscy5zaXplKCk7ICsraSkgeworICAgICAgICBDYWxsVHlwZSYg
Y2FsbCA9IG9sZENhbGxzW2ldOworICAgICAgICAKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7Cisg
ICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGl0ZXItPnZhbHVl
LnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBDYWxsVHlwZSBjb3B5ID0gY2FsbDsKKyAgICAg
ICAgICAgIGNvcHkubV9pbnN0cnVjdGlvbk9mZnNldCA9IGl0ZXItPnZhbHVlW2pdLmluc3RydWN0
aW9uT2Zmc2V0OworICAgICAgICAgICAgY2FsbHMuYXBwZW5kKGNvcHkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc3RkOjpzb3J0KGNhbGxzLmJlZ2luKCksIGNhbGxzLmVuZCgpKTsKK30KKwog
c3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFN0YXRlJiBzdGF0
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUqIGppdENvZGUsIEdlbmVyYXRlZEZ1bmN0
aW9uIGdlbmVyYXRlZEZ1bmN0aW9uLAogICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRN
YXAsIGJvb2wgZGlkU2VlVW53aW5kSW5mbykKQEAgLTI1MSwxNiArMjkxLDE0IEBAIHN0YXRpYyB2
b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICBWTSYgdm0gPSBncmFwaC5tX3Zt
OwogICAgIFN0YWNrTWFwcyBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CiAgICAgCi0g
ICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChz
dGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gcmVj
b3JkTWFwLmVuZCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0g
MSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9
PSAxKTsKLSAgICBMb2NhdGlvbiBjYXB0dXJlZExvY2F0aW9uID0KLSAgICAgICAgTG9jYXRpb246
OmZvclN0YWNrbWFwcygmaml0Q29kZS0+c3RhY2ttYXBzLCBpdGVyLT52YWx1ZVswXS5sb2NhdGlv
bnNbMF0pOwotICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24ua2luZCgpID09IExv
Y2F0aW9uOjpSZWdpc3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5n
cHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
IShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUgc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgIGlu
dDMyX3QgbG9jYWxzT2Zmc2V0ID0gY2FwdHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAvIHNpemVvZihS
ZWdpc3RlcikgKyBncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgaW50IGxvY2Fsc09mZnNl
dCA9CisgICAgICAgIG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJl
ZFN0YWNrbWFwSUQpICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOworICAgIAorICAgIGludCB2
YXJhcmdzU3BpbGxTbG90c09mZnNldDsKKyAgICBpZiAoc3RhdGUudmFyYXJnc1NwaWxsU2xvdHNT
dGFja21hcElEICE9IFVJTlRfTUFYKQorICAgICAgICB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9
IG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0
YWNrbWFwSUQpOworICAgIGVsc2UKKyAgICAgICAgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQgPSAw
OwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRh
LnNpemUoKTsgaS0tOykgewogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldLmlubGluZUNhbGxGcmFtZTsKQEAgLTMz
Niw3ICszNzQsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkhhbmRsaW5nIE9TUiBzdGFja21hcCAjIiwgZXhpdC5tX3N0YWNrbWFwSUQs
ICIgZm9yICIsIGV4aXQubV9jb2RlT3JpZ2luLCAiXG4iKTsKIAotICAgICAgICAgICAgaXRlciA9
IHJlY29yZE1hcC5maW5kKGV4aXQubV9zdGFja21hcElEKTsKKyAgICAgICAgICAgIGF1dG8gaXRl
ciA9IHJlY29yZE1hcC5maW5kKGV4aXQubV9zdGFja21hcElEKTsKICAgICAgICAgICAgIGlmIChp
dGVyID09IHJlY29yZE1hcC5lbmQoKSkgewogICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRp
bWl6ZWQgb3V0LgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzc1LDcgKzQxMyw3IEBA
IHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygi
SGFuZGxpbmcgR2V0QnlJZCBzdGFja21hcCAjIiwgZ2V0QnlJZC5zdGFja21hcElEKCksICJcbiIp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJ
ZC5zdGFja21hcElEKCkpOworICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQo
Z2V0QnlJZC5zdGFja21hcElEKCkpOwogICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFw
LmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CkBAIC00MTIsNyArNDUwLDcgQEAgc3RhdGljIHZvaWQgZml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxh
dGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBQdXRCeUlk
IHN0YWNrbWFwICMiLCBwdXRCeUlkLnN0YWNrbWFwSUQoKSwgIlxuIik7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChwdXRCeUlkLnN0YWNrbWFwSUQoKSk7
CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChwdXRCeUlkLnN0YWNrbWFw
SUQoKSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KICAgICAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTQ0NCwxNCArNDgyLDEzIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRP
blN0YWNrTWFwcygKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0KICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gc3RhdGUuY2hlY2tJbnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBD
aGVja0luRGVzY3JpcHRvciYgY2hlY2tJbiA9IHN0YXRlLmNoZWNrSW5zW2ldOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIGNoZWNrSW4gc3RhY2ttYXAgIyIsIGNoZWNrSW4u
c3RhY2ttYXBJRCgpLCAiXG4iKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaXRlciA9IHJl
Y29yZE1hcC5maW5kKGNoZWNrSW4uc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRl
ciA9IHJlY29yZE1hcC5maW5kKGNoZWNrSW4uc3RhY2ttYXBJRCgpKTsKICAgICAgICAgICAgIGlm
IChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgewogICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBv
cHRpbWl6ZWQgb3V0LgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDgwLDcgKzUxNyw2
IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAg
ICAgICBjaGVja0luLm1fZ2VuZXJhdG9ycy5hcHBlbmQoQ2hlY2tJbkdlbmVyYXRvcihzdHViSW5m
bywgc2xvd0NhbGwsIGJlZ2luKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAg
ICAKICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LmxpbmsoJnNsb3dQYXRoSklUKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uSnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsK
QEAgLTUwMywyOSArNTM5LDExIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNr
TWFwcygKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuY2hlY2tJbnMuc2l6ZSgpOyBp
LS07KSB7CiAgICAgICAgICAgICBnZW5lcmF0ZUNoZWNrSW5JQ0Zhc3RQYXRoKAogICAgICAgICAg
ICAgICAgIHN0YXRlLCBjb2RlQmxvY2ssIGdlbmVyYXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0
YXRlLmNoZWNrSW5zW2ldLAotICAgICAgICAgICAgICAgIHNpemVPZkNoZWNrSW4oKSk7IAorICAg
ICAgICAgICAgICAgIHNpemVPZkluKCkpOyAKICAgICAgICAgfSAKICAgICB9CiAgICAgCi0gICAg
Ly8gSGFuZGxpbmcgSlMgY2FsbHMgaXMgd2VpcmQ6IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ug
c29ydCB0aGVtIGJ5IHRoZSBQQyBpbiBMTFZNCi0gICAgLy8gZ2VuZXJhdGVkIGNvZGUuIFRoYXQg
aW1wbGllcyBmaXJzdCBwcnVuaW5nIHRoZSBvbmVzIHRoYXQgTExWTSBkaWRuJ3QgZ2VuZXJhdGUu
Ci0gICAgVmVjdG9yPEpTQ2FsbD4gb2xkQ2FsbHMgPSBzdGF0ZS5qc0NhbGxzOwotICAgIHN0YXRl
LmpzQ2FsbHMucmVzaXplKDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDYWxs
cy5zaXplKCk7ICsraSkgewotICAgICAgICBKU0NhbGwmIGNhbGwgPSBvbGRDYWxsc1tpXTsKLSAg
ICAgICAgCi0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVj
b3JkTWFwLmZpbmQoY2FsbC5zdGFja21hcElEKCkpOwotICAgICAgICBpZiAoaXRlciA9PSByZWNv
cmRNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIEpT
Q2FsbCBjb3B5ID0gY2FsbDsKLSAgICAgICAgICAgIGNvcHkubV9pbnN0cnVjdGlvbk9mZnNldCA9
IGl0ZXItPnZhbHVlW2pdLmluc3RydWN0aW9uT2Zmc2V0OwotICAgICAgICAgICAgc3RhdGUuanND
YWxscy5hcHBlbmQoY29weSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RkOjpzb3J0
KHN0YXRlLmpzQ2FsbHMuYmVnaW4oKSwgc3RhdGUuanNDYWxscy5lbmQoKSk7CisgICAgYWRqdXN0
Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxzLCByZWNvcmRNYXApOwogICAgIAogICAg
IGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAg
IEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CkBAIC01NDcsOSArNTY1LDMyIEBAIHN0
YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgY2FsbC5saW5r
KHZtLCBsaW5rQnVmZmVyKTsKICAgICB9CiAgICAgCisgICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNr
bWFwcyhzdGF0ZS5qc0NhbGxWYXJhcmdzZXMsIHJlY29yZE1hcCk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gc3RhdGUuanNDYWxsVmFyYXJnc2VzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICBKU0NhbGxWYXJhcmdzJiBjYWxsID0gc3RhdGUuanNDYWxsVmFyYXJnc2VzW2ldOworICAgICAg
ICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAg
ICAgICAgY2FsbC5lbWl0KGZhc3RQYXRoSklULCBncmFwaCwgdmFyYXJnc1NwaWxsU2xvdHNPZmZz
ZXQpOworICAgICAgICAKKyAgICAgICAgY2hhciogc3RhcnRPZklDID0gYml0d2lzZV9jYXN0PGNo
YXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAg
ICAgIHNpemVfdCBzaXplT2ZJQyA9IHNpemVPZklDRm9yKGNhbGwubm9kZSgpKTsKKworICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVP
ZklDKTsKKyAgICAgICAgaWYgKCFsaW5rQnVmZmVyLmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
ZGF0YUxvZygiRmFpbGVkIHRvIGluc2VydCBpbmxpbmUgY2FjaGUgZm9yIHZhcmFyZ3MgY2FsbCBi
ZWNhdXNlIHdlIHRob3VnaHQgdGhlIHNpemUgd291bGQgYmUgIiwgc2l6ZU9mSUMsICIgYnV0IGl0
IGVuZGVkIHVwIGJlaW5nICIsIGZhc3RQYXRoSklULm1fYXNzZW1ibGVyLmNvZGVTaXplKCksICIg
cHJpb3IgdG8gY29tcGFjdGlvbi5cbiIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMoCisgICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5r
QnVmZmVyLnNpemUoKSwgc2l6ZU9mSUMgLSBsaW5rQnVmZmVyLnNpemUoKSk7CisgICAgICAgIAor
ICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIsIHN0YXRlLmZpbmFsaXplci0+aGFuZGxl
RXhjZXB0aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7CisgICAgfQorICAgIAogICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCi0gICAgaXRlciA9IHJlY29y
ZE1hcC5maW5kKHN0YXRlLmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEKTsK
KyAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5oYW5kbGVTdGFja092ZXJmbG93
RXhjZXB0aW9uU3RhY2ttYXBJRCk7CiAgICAgLy8gSXQncyBzb3J0IG9mIHJlbW90ZWx5IHBvc3Np
YmxlIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlvbiBoYW5kbGluZwogICAg
IC8vIHBhdGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KICAgICBpZiAoaXRlciAhPSBy
ZWNvcmRNYXAuZW5kKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5s
aW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOCwxMSArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiREZH
Tm9kZS5oIgogI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCit1
c2luZyBuYW1lc3BhY2UgREZHOworCiAvLyBUaGUgZGVmYXVsdCBzaXplcyBhcmUgeDg2LTY0LXNw
ZWNpZmljLCBhbmQgd2VyZSBmb3VuZCBlbXBpcmljYWxseS4gVGhleSBoYXZlIHRvIGNvdmVyIHRo
ZSB3b3JzdAogLy8gcG9zc2libGUgY29tYmluYXRpb24gb2YgcmVnaXN0ZXJzIGxlYWRpbmcgdG8g
dGhlIGxhcmdlc3QgcG9zc2libGUgZW5jb2Rpbmcgb2YgZWFjaCBpbnN0cnVjdGlvbiBpbgogLy8g
dGhlIElDLgpAQCAtNjEsMTcgKzY0LDI1IEBAIHNpemVfdCBzaXplT2ZQdXRCeUlkKCkKICNlbmRp
ZgogfQogCi1zaXplX3Qgc2l6ZU9mQ2hlY2tJbigpCitzaXplX3Qgc2l6ZU9mQ2FsbCgpCiB7CiAj
aWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiA0OworICAgIHJldHVybiA1NjsKICNlbHNlCi0gICAg
cmV0dXJuIDU7IAorICAgIHJldHVybiA1MzsKICNlbmRpZgogfQogCitzaXplX3Qgc2l6ZU9mQ2Fs
bFZhcmFyZ3MoKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1cm4gNTY7CisjZWxzZQorICAg
IHJldHVybiA1MzsKKyNlbmRpZgorfQogCi1zaXplX3Qgc2l6ZU9mQ2FsbCgpCitzaXplX3Qgc2l6
ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCkKIHsKICNpZiBDUFUoQVJNNjQpCiAgICAgcmV0dXJuIDU2
OwpAQCAtODAsNiArOTEsNDcgQEAgc2l6ZV90IHNpemVPZkNhbGwoKQogI2VuZGlmCiB9CiAKK3Np
emVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCkKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgcmV0
dXJuIDU2OworI2Vsc2UKKyAgICByZXR1cm4gNTM7CisjZW5kaWYKK30KKworc2l6ZV90IHNpemVP
ZkluKCkKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDQ7CisjZWxzZQorICAgIHJldHVy
biA1OyAKKyNlbmRpZgorfQorCitzaXplX3Qgc2l6ZU9mSUNGb3IoTm9kZSogbm9kZSkKK3sKKyAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIHJldHVy
biBzaXplT2ZHZXRCeUlkKCk7CisgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICByZXR1cm4gc2l6
ZU9mUHV0QnlJZCgpOworICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAg
ICAgcmV0dXJuIHNpemVPZkNhbGwoKTsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBy
ZXR1cm4gc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoK
KyAgICAgICAgcmV0dXJuIHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOworICAgIGNhc2UgQ29u
c3RydWN0VmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsK
KyAgICBjYXNlIEluOgorICAgICAgICByZXR1cm4gc2l6ZU9mSW4oKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
IAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOCwxMiArMjgsMjMgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCi1uYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIERGRyB7Citz
dHJ1Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CiAKIHNpemVfdCBzaXplT2ZHZXRCeUlk
KCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOwogc2l6ZV90IHNpemVPZkNhbGwoKTsKLXNpemVf
dCBzaXplT2ZDaGVja0luKCk7CitzaXplX3Qgc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKK3NpemVfdCBz
aXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsKK3NpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdz
KCk7CitzaXplX3Qgc2l6ZU9mSW4oKTsKKworc2l6ZV90IHNpemVPZklDRm9yKERGRzo6Tm9kZSop
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxNzk5
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnku
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC05NywxMCArOTcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUo
dm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VD
YiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhW
X0pJVE9wZXJhdGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0
ciwgaW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVpKWlpaLCBmdW5jdGlvblR5
cGUodm9pZFR5cGUsIGludFB0ciwgaW50MzIsIGludDY0LCBpbnQzMiwgaW50MzIsIGludDMyKSkg
XAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50
NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBl
LCBpbnQzMikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUoaW50
MzIsIGRvdWJsZVR5cGUpKSBcCi0gICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9u
VHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKQorICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0VD
LCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyKSkgXAorICAgIG1hY3JvKFpfSklU
T3BlcmF0aW9uX0VKWiwgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGludDY0LCBpbnQzMikp
CiAgICAgCiBjbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5IDogcHVibGljIENvbW1vblZhbHVlcyB7
CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCShy
ZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgSlNDYWxsOjpKU0NhbGwodW5zaWdu
ZWQgc3RhY2ttYXBJRCwgTm9kZQogICAgICwgbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCiAgICAg
LCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCiB7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2Fs
bCB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNw
cAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKIEpTQ2FsbEJh
c2U6OkpTQ2FsbEJhc2UoKQogICAgIDogbV90eXBlKENhbGxMaW5rSW5mbzo6Tm9uZSkKICAgICAs
IG1fY2FsbExpbmtJbmZvKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbEJhc2UuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBMaW5rQnVmZmVyOwogCituYW1lc3BhY2UgREZHIHsK
K3N0cnVjdCBOb2RlOworfQorCiBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgSlNDYWxsQmFzZSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZh
cmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR09w
ZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlNl
dHVwVmFyYXJnc0ZyYW1lLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
dXNpbmcgbmFtZXNwYWNlIERGRzsKKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncygpCisg
ICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBtX25vZGUobnVsbHB0cikKKyAgICAs
IG1faW5zdHJ1Y3Rpb25PZmZzZXQoVUlOVF9NQVgpCit7Cit9CisKK0pTQ2FsbFZhcmFyZ3M6OkpT
Q2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZSogbm9kZSkKKyAgICA6IG1fc3Rh
Y2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9ub2RlKG5vZGUpCisgICAgLCBtX2NhbGxCYXNl
KAorICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgPyBDYWxsTGlua0luZm86
OkNvbnN0cnVjdFZhcmFyZ3MgOiBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzLAorICAgICAgICBu
b2RlLT5vcmlnaW4uc2VtYW50aWMpCisgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCit7Cisg
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDYWxs
Rm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzKTsKK30KKwor
dW5zaWduZWQgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpCit7CisgICAgcmV0
dXJuIDQ7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCwg
R3JhcGgmIGdyYXBoLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpCit7CisgICAgLy8gV2UgYXJl
IHBhc3NlZCB0aHJlZSBwaWVjZXMgb2YgaW5mb3JtYXRpb246CisgICAgLy8gLSBUaGUgY2FsbGVl
LgorICAgIC8vIC0gVGhlIGFyZ3VtZW50cyBvYmplY3QuCisgICAgLy8gLSBUaGUgInRoaXMiIHZh
bHVlLCBpZiBpdCdzIGEgY29uc3RydWN0b3IgY2FsbC4KKyAgICAKKyAgICBib29sIGlzQ2FsbCA9
IG1fbm9kZS0+b3AoKSAhPSBDb25zdHJ1Y3RWYXJhcmdzOworICAgIAorICAgIENhbGxWYXJhcmdz
RGF0YSogZGF0YSA9IG1fbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisgICAgCisgICAgR1BSUmVn
IGNhbGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAKKyAgICBHUFJSZWcgYXJn
dW1lbnRzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgYm9vbCBhcmd1bWVudHNPblN0YWNrID0gZmFsc2U7CisgICAgCisgICAgc3dp
dGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBhcmd1
bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIHRoaXNHUFIgPSBHUFJJ
bmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FsbEZvcndhcmRW
YXJhcmdzOgorICAgICAgICB0aGlzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgICAg
ICBhcmd1bWVudHNPblN0YWNrID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQ
UjE7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBjb25zdCB1
bnNpZ25lZCBjYWxsZWVTcGlsbFNsb3QgPSAwOworICAgIGNvbnN0IHVuc2lnbmVkIGFyZ3VtZW50
c1NwaWxsU2xvdCA9IDE7CisgICAgY29uc3QgdW5zaWduZWQgdGhpc1NwaWxsU2xvdCA9IDI7Cisg
ICAgY29uc3QgdW5zaWduZWQgc3RhY2tQb2ludGVyU3BpbGxTbG90ID0gMzsKKyAgICAKKyAgICAv
LyBHZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJz
KCkpOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdh
cmVSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIpOwor
ICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgdXNlZFJlZ2lz
dGVycy5zZXQoYXJndW1lbnRzR1BSKTsKKyAgICBpZiAodGhpc0dQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKKyAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgIEdQUlJlZyBzY3JhdGNo
R1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBHUFJSZWcgc2NyYXRj
aEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIGlmIChhcmd1bWVu
dHNPblN0YWNrKQorICAgICAgICBhcmd1bWVudHNHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJldXNlZFJl
Z2lzdGVycygpKTsKKyAgICAKKyAgICBhdXRvIGxvYWRBcmd1bWVudHMgPSBbJl0gKGJvb2wgY2xv
YmJlcmVkKSB7CisgICAgICAgIGlmIChhcmd1bWVudHNPblN0YWNrKSB7CisgICAgICAgICAgICBq
aXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihncmFw
aC5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwK
KyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIpOworICAgICAgICB9IGVsc2UgaWYgKGNsb2Ji
ZXJlZCkgeworICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50c1NwaWxsU2xvdCks
IGFyZ3VtZW50c0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIGF1dG8gY29tcHV0
ZVVzZWRTdGFjayA9IFsmXSAoR1BSUmVnIHRhcmdldEdQUiwgdW5zaWduZWQgZXh0cmEpIHsKKyAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHRhcmdldEdQUik7Cisg
ICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGFy
Z2V0R1BSKTsKKyAgICAgICAgaWYgKGV4dHJhKQorICAgICAgICAgICAgaml0LnN1YlB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYSksIHRhcmdldEdQUik7CisgICAgICAgIGppdC51
cnNoaWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHRhcmdldEdQUik7CisgICAgfTsKKyAg
ICAKKyAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkg
eworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwg
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICBqaXQuY2FsbChH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgIG1fZXhjZXB0aW9u
cy5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4
Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAgIH07Cisg
ICAgCisgICAgbG9hZEFyZ3VtZW50cyhmYWxzZSk7CisgICAgCisgICAgLy8gQXR0ZW1wdCB0aGUg
Zm9yd2FyZGluZyBmYXN0IHBhdGgsIGlmIGl0J3MgYmVlbiByZXF1ZXN0ZWQuCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEdQUklu
Zm86OnJlZ1QwOworICAgIGlmIChtX25vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7
CisgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJndW1lbnRzKSBv
cHRpbWl6YXRpb24uCisgICAgICAgIC8vIEZJWE1FOiBkbyB0aGlzIG9wdGltaXphdGlvbiBhdCB0
aGUgSVIgbGV2ZWwuCisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dDYXNlOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhl
bHBlcnM6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAKKyAgICAgICAgY29tcHV0
ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgMCk7CisgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFt
ZUZhc3RDYXNlKGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2Ny
YXRjaEdQUjMsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+
Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgcmVzdWx0R1BSID0gc2NyYXRj
aEdQUjI7CisgICAgICAgIAorICAgICAgICBoYXZlQXJndW1lbnRzID0gaml0Lmp1bXAoKTsKKyAg
ICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAgICB9CisgICAgCisgICAgLy8gR290dGEgc3Bp
bGwgdGhlIGNhbGxlZSwgYXJndW1lbnRzLCBhbmQgdGhpcyBiZWNhdXNlIHdlIHdpbGwgbmVlZCB0
aGVtIGxhdGVyIGFuZCB3ZSB3aWxsIGhhdmUgc29tZQorICAgIC8vIGNhbGxzIHRoYXQgY2xvYmJl
ciB0aGVtLgorICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNz
Rm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3QpKTsKKyAgICBpZiAoIWFyZ3Vt
ZW50c09uU3RhY2spCisgICAgICAgIGppdC5zdG9yZTY0KGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBhcmd1bWVudHNTcGlsbFNsb3QpKTsK
KyAgICBpZiAoaXNDYWxsKQorICAgICAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBl
cnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpKTsKKyAgICBq
aXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3Qp
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrID0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpICsKKyAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpOworICAgIGNvbXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQ
UjEsIDApOworICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXh0cmFT
dGFjayksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpKTsKKyAgICBjYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yVmFyYXJncykpOworICAgIAorICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBzY3JhdGNoR1BSMSk7CisgICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgZXh0cmFT
dGFjayk7CisgICAgbG9hZEFyZ3VtZW50cyh0cnVlKTsKKyAgICBlbWl0U2V0VmFyYXJnc0ZyYW1l
KGppdCwgc2NyYXRjaEdQUjEsIGZhbHNlLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjIpOworICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWV4dHJhU3RhY2spLCBzY3Jh
dGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwgYXJndW1lbnRzR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCksIHNjcmF0Y2hH
UFIxKTsKKyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3Bl
cmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpKTsKKyAgICAKKyAgICBqaXQubW92ZShHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBpZiAobV9ub2RlLT5vcCgpID09
IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5rKCZqaXQpOwor
ICAgIAorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSwgcmVzdWx0R1BSLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAKKyAgICBpZiAoaXNDYWxsKSB7CisgICAgICAgIGppdC5sb2FkNjQoQ0Nh
bGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSwg
dGhpc0dQUik7CisgICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIsIENDYWxsSGVscGVyczo6Y2Fs
bGVlQXJndW1lbnRTbG90KDApKTsKKyAgICB9CisgICAgCisgICAgLy8gSGVuY2Vmb3J0aCB3ZSBt
YWtlIHRoZSBjYWxsLiBUaGUgYmFzZSBGVEwgY2FsbCBtYWNoaW5lcnkgZXhwZWN0cyB0aGUgY2Fs
bGVlIGluIHJlZ1QwIGFuZCBmb3IgdGhlCisgICAgLy8gc3RhY2sgZnJhbWUgdG8gYWxyZWFkeSBi
ZSBzZXQgdXAsIHdoaWNoIGl0IGlzLgorICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRy
ZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3QpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgCisgICAgbV9jYWxsQmFzZS5lbWl0KGppdCk7CisgICAgCisgICAgLy8gVW5kbyB0
aGUgZGFtYWdlIHdlJ3ZlIGRvbmUuCisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjphZGRy
ZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3QpLCBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKK30KKwordm9pZCBKU0NhbGxWYXJhcmdzOjps
aW5rKFZNJiB2bSwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgQ29kZUxvY2F0aW9uTGFiZWwgZXhj
ZXB0aW9uSGFuZGxlcikKK3sKKyAgICBtX2NhbGxCYXNlLmxpbmsodm0sIGxpbmtCdWZmZXIpOwor
ICAgIGxpbmtCdWZmZXIubGluayhtX2V4Y2VwdGlvbnMsIGV4Y2VwdGlvbkhhbmRsZXIpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFy
Z3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMSlNDYWxsVmFyYXJnc19oCisj
ZGVmaW5lIEZUTEpTQ2FsbFZhcmFyZ3NfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJGVExKU0NhbGxCYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBMaW5rQnVm
ZmVyOworCituYW1lc3BhY2UgREZHIHsKK2NsYXNzIEdyYXBoOworc3RydWN0IE5vZGU7Cit9CisK
K25hbWVzcGFjZSBGVEwgeworCitjbGFzcyBKU0NhbGxWYXJhcmdzIHsKK3B1YmxpYzoKKyAgICBK
U0NhbGxWYXJhcmdzKCk7CisgICAgSlNDYWxsVmFyYXJncyh1bnNpZ25lZCBzdGFja21hcElELCBE
Rkc6Ok5vZGUqKTsKKyAgICAKKyAgICBERkc6Ok5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBt
X25vZGU7IH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtU3BpbGxTbG90c05lZWRlZCgp
OworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmLCBERkc6OkdyYXBoJiwgaW50MzJf
dCBzcGlsbFNsb3RzT2Zmc2V0KTsKKyAgICB2b2lkIGxpbmsoVk0mLCBMaW5rQnVmZmVyJiwgQ29k
ZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlcik7CisgICAgCisgICAgdW5zaWduZWQgc3Rh
Y2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IEpTQ2FsbFZhcmFyZ3MmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5tX2luc3RydWN0aW9uT2Zmc2V0
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFja21hcElEOworICAg
IERGRzo6Tm9kZSogbV9ub2RlOworICAgIEpTQ2FsbEJhc2UgbV9jYWxsQmFzZTsKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IG1fZXhjZXB0aW9uczsKKworcHVibGljOgorICAgIHVpbnQzMl90
IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEpTQ2FsbFZhcmFyZ3Nf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMzAgQEAg
cHVibGljOgogICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29u
c3RJbnQ2NChtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBtX291
dC5pbnQzMlplcm8sIGNhcHR1cmVkQWxsb2NhKTsKICAgICAgICAgCisgICAgICAgIC8vIElmIHdl
IGhhdmUgYW55IENhbGxWYXJhcmdzIHRoZW4gd2UgbmVlIHRvIGhhdmUgYSBzcGlsbCBzbG90IGZv
ciBpdC4KKyAgICAgICAgYm9vbCBoYXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBwcmVPcmRlcikgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2Rl
IDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIENhbGxG
b3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Cisg
ICAgICAgICAgICAgICAgICAgIGhhc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGhhc1ZhcmFyZ3MpIHsKKyAgICAgICAgICAgIExWYWx1ZSB2YXJhcmdzU3BpbGxTbG90
cyA9IG1fb3V0LmFsbG9jYSgKKyAgICAgICAgICAgICAgICBhcnJheVR5cGUobV9vdXQuaW50NjQs
IEpTQ2FsbFZhcmFyZ3M6Om51bVNwaWxsU2xvdHNOZWVkZWQoKSkpOworICAgICAgICAgICAgbV9m
dGxTdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Cisg
ICAgICAgICAgICBtX291dC5jYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LnN0YWNrbWFwSW50
cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxTdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0
YWNrbWFwSUQpLAorICAgICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgdmFyYXJnc1NwaWxs
U2xvdHMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0
LnB0clRvSW50KAogICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC5mcmFtZUFkZHJlc3NJbnRy
aW5zaWMoKSwgbV9vdXQuaW50MzJaZXJvKSwgbV9vdXQuaW50UHRyKTsKICAgICAgICAgbV90YWdU
eXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKQEAgLTYzNiw2ICs2
NjAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgICAgICBj
b21waWxlQ2FsbE9yQ29uc3RydWN0KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAg
IGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1
Y3RWYXJhcmdzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkVmFyYXJn
czoKKyAgICAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncygpOworICAgICAgICAgICAgYnJlYWs7
CiAjaWYgRU5BQkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICAgICAgY2FzZSBOYXRp
dmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKQEAgLTE5ODYsOCArMjAxOCwy
MiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgY2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKCk7
CiAKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBzZXRJbnQzMihtX291dC5hZGQobV9v
dXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSks
IG1fb3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIGlmIChtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBzZXRJbnQz
MigKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKAorICAgICAgICAgICAgICAgICAg
ICBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXpl
KCkgLSAxKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJl
Z2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVy
OworICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuYWRkKAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShwYXlsb2FkRm9yKGFyZ3Vt
ZW50Q291bnRSZWdpc3RlcikpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMy
KC0xKSkpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldE15QXJn
dW1lbnRCeVZhbCgpCkBAIC0zNzA4LDYgKzM3NTQsNzkgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNh
bGxPckNvbnN0cnVjdFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBq
c0FyZ3VtZW50cyA9IG51bGxwdHI7CisgICAgICAgIExWYWx1ZSB0aGlzQXJnID0gbnVsbHB0cjsK
KyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2Ug
Q2FsbFZhcmFyZ3M6CisgICAgICAgICAgICBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICB0aGlzQXJnID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKKyAgICAgICAgICAgIHRoaXNBcmcgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAg
ICAgICAgICAgIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgImJhZCBub2RlIHR5cGUiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFj
a21hcElEcysrOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPExWYWx1ZT4gYXJndW1lbnRzOwor
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCkpOwor
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mSUNGb3IobV9u
b2RlKSkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7
CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMigxICsgISFqc0FyZ3Vt
ZW50cyArICEhdGhpc0FyZykpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQ2FsbGVlKTsK
KyAgICAgICAgaWYgKGpzQXJndW1lbnRzKQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChq
c0FyZ3VtZW50cyk7CisgICAgICAgIGlmICh0aGlzQXJnKQorICAgICAgICAgICAgYXJndW1lbnRz
LmFwcGVuZCh0aGlzQXJnKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKKyAg
ICAgICAgCisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5wYXRjaHBvaW50
SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxs
aW5nQ29udmVudGlvbihjYWxsLCBMTFZNQ0NhbGxDb252KTsKKyAgICAgICAgCisgICAgICAgIG1f
ZnRsU3RhdGUuanNDYWxsVmFyYXJnc2VzLmFwcGVuZChKU0NhbGxWYXJhcmdzKHN0YWNrbWFwSUQs
IG1fbm9kZSkpOworICAgICAgICAKKyAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAgTG9hZFZh
cmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgTFZh
bHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
CisgICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJncyksIG1fY2FsbEZyYW1lLCBqc0FyZ3VtZW50cywK
KyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSk7CisgICAgICAgIAor
ICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4g
ZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCisgICAgICAgIC8v
IGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0
bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAgICAvLyBzdGFuZHBvaW50LiBU
aGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRo
ZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4Cisg
ICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChsZW5n
dGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBt
X291dC5zdG9yZTMyKGxlbmd0aCwgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAg
ICAgICAgCisgICAgICAgIHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25Mb2FkVmFyYXJncyksIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLCBqc0FyZ3VtZW50cywgbV9vdXQuY29u
c3RJbnQzMihkYXRhLT5vZmZzZXQpLAorICAgICAgICAgICAgbGVuZ3RoLCBtX291dC5jb25zdElu
dDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKKyAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVK
dW1wKCkKICAgICB7CkBAIC00MDEyLDcgKzQxMzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAg
ICAgICAgICBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXpl
T2ZDaGVja0luKCkpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNr
bWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkluKCkpLAogICAgICAgICAgICAgICAgICAg
ICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMSksIGNlbGwpOwogCiAg
ICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZN
QW55UmVnQ2FsbENvbnYpOwpAQCAtNjQwNSw3ICs2NTI0LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAvLyBCdWZmZXIgaXMgb3V0IG9mIHNwYWNlLCBmbHVzaCBpdC4KICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oYnVmZmVySXNGdWxsLCBjb250aW51YXRpb24pOwotICAgICAgICB2bUNhbGwobV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKSwgbV9jYWxsRnJhbWUs
IGJhc2UsIE5vRXhjZXB0aW9ucyk7CisgICAgICAgIHZtQ2FsbE5vRXhjZXB0aW9ucyhtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpLCBtX2NhbGxGcmFtZSwg
YmFzZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTY0MTQsNDQgKzY1MzMsMjMg
QEAgcHJpdmF0ZToKICNlbmRpZgogICAgIH0KIAotICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tNb2Rl
IHsgTm9FeGNlcHRpb25zLCBDaGVja0V4Y2VwdGlvbnMgfTsKLSAgICAKLSAgICBMVmFsdWUgdm1D
YWxsKExWYWx1ZSBmdW5jdGlvbiwgRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2Vw
dGlvbnMpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBMVmFsdWUgdm1DYWxs
KExWYWx1ZSBmdW5jdGlvbiwgQXJncy4uLiBhcmdzKQogICAgIHsKICAgICAgICAgY2FsbFByZWZs
aWdodCgpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbik7Ci0g
ICAgICAgIGNhbGxDaGVjayhtb2RlKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNh
bGwoZnVuY3Rpb24sIGFyZ3MuLi4pOworICAgICAgICBjYWxsQ2hlY2soKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIExW
YWx1ZSBhcmcxLCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKLSAg
ICB7Ci0gICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1f
b3V0LmNhbGwoZnVuY3Rpb24sIGFyZzEpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0
aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0g
Q2hlY2tFeGNlcHRpb25zKQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSwgYXJnMik7Ci0gICAg
ICAgIGNhbGxDaGVjayhtb2RlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
TFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwg
TFZhbHVlIGFyZzMsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQot
ICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
bV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMyk7Ci0gICAgICAgIGNhbGxDaGVj
ayhtb2RlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgTFZhbHVlIHZtQ2Fs
bChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMs
IExWYWx1ZSBhcmc0LCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykK
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSB2bUNhbGxO
b0V4Y2VwdGlvbnMoTFZhbHVlIGZ1bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgewogICAgICAg
ICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1
bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUp
OworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJncy4uLik7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBjYWxsUHJl
ZmxpZ2h0KENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIG1fb3V0LnN0b3Jl
MzIoCkBAIC02NDY1LDExICs2NTYzLDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FsbFByZWZsaWdo
dChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2FsbENo
ZWNrKEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQorICAgIHZvaWQg
Y2FsbENoZWNrKCkKICAgICB7Ci0gICAgICAgIGlmIChtb2RlID09IE5vRXhjZXB0aW9ucykKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjplbmFibGVF
eGNlcHRpb25GdXp6KCkpCiAgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25FeGNlcHRpb25GdXp6KSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsMTMgKzM0Nyw4IEBA
IHB1YmxpYzoKICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5
cGUmIHZlY3RvcikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rv
cik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJuIGJ1aWxkQ2Fs
bChtX2J1aWxkZXIsIGZ1bmN0aW9uKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlv
biwgTFZhbHVlIGFyZzEpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBh
cmcxKTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExW
YWx1ZSBhcmcyKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwg
YXJnMik7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBM
VmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1
bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczKTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5j
dGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQp
IHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmcz
LCBhcmc0KTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEs
IExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1KSB7IHJl
dHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJn
NCwgYXJnNSk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcx
LCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZh
bHVlIGFyZzYpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBh
cmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBm
dW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFy
ZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcpIHsgcmV0dXJuIGJ1aWxk
Q2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBh
cmc2LCBhcmc3KTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFy
ZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBM
VmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcsIExWYWx1ZSBhcmc4KSB7IHJldHVybiBidWlsZENhbGwo
bV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwg
YXJnNywgYXJnOCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1
ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykgeyByZXR1
cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZ3MuLi4pOyB9CiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgogICAgIExWYWx1ZSBvcGVyYXRp
b24oRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw2ICs0OSwxMCBAQCBTdGF0ZTo6U3Rh
dGUoR3JhcGgmIGdyYXBoKQogICAgICwgbW9kdWxlKDApCiAgICAgLCBmdW5jdGlvbigwKQogICAg
ICwgZ2VuZXJhdGVkRnVuY3Rpb24oMCkKKyAgICAsIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRp
b25TdGFja21hcElEKFVJTlRfTUFYKQorICAgICwgaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRChV
SU5UX01BWCkKKyAgICAsIGNhcHR1cmVkU3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAsIHZhcmFy
Z3NTcGlsbFNsb3RzU3RhY2ttYXBJRChVSU5UX01BWCkKICAgICAsIHVud2luZERhdGFTZWN0aW9u
KDApCiAgICAgLCB1bndpbmREYXRhU2VjdGlvblNpemUoMCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgog
I2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKICNp
bmNsdWRlICJGVExTdGFja01hcHMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNzEsMTAgKzcyLDEyIEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBoYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRDsKICAgICB1bnNpZ25l
ZCBoYW5kbGVFeGNlcHRpb25TdGFja21hcElEOwogICAgIHVuc2lnbmVkIGNhcHR1cmVkU3RhY2tt
YXBJRDsKKyAgICB1bnNpZ25lZCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQ7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRW
ZWN0b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxD
aGVja0luRGVzY3JpcHRvcj4gY2hlY2tJbnM7CiAgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxsczsK
KyAgICBWZWN0b3I8SlNDYWxsVmFyYXJncz4ganNDYWxsVmFyYXJnc2VzOwogICAgIFZlY3RvcjxD
U3RyaW5nPiBjb2RlU2VjdGlvbk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlv
bk5hbWVzOwogICAgIHZvaWQqIHVud2luZERhdGFTZWN0aW9uOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgIHJldHVybiBpbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBj
YWxsRnJhbWUsIHRoaXNWYWx1ZSwgY2FsbGVyU2NvcGVDaGFpbik7CiB9CiAKLXVuc2lnbmVkIHNp
emVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU3RhY2sqIHN0YWNrLCBK
U1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZp
cnN0VmFyQXJnT2Zmc2V0KQordW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQogewog
ICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICBpZiAoIWFyZ3VtZW50cykKQEAgLTE1Niw2ICsxNTYs
MTMgQEAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIAogICAgIGVsc2UK
ICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCit1bnNp
Z25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1N0YWNrKiBz
dGFjaywgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50
MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzaXplT2ZW
YXJhcmdzKGNhbGxGcmFtZSwgYXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgCiAg
ICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxlZUZyYW1lRm9yVmFyYXJncyhjYWxsRnJh
bWUsIG51bVVzZWRTdGFja1Nsb3RzLCBsZW5ndGggKyAxKTsKICAgICBpZiAobGVuZ3RoID4gQXJn
dW1lbnRzOjpNYXhBcmd1bWVudHMgfHwgIXN0YWNrLT5lbnN1cmVDYXBhY2l0eUZvcihjYWxsZWVG
cmFtZS0+cmVnaXN0ZXJzKCkpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNh
bGxGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBwYWRkZWRDYWxsZWVGcmFtZU9mZnNldCk7CiAgICAgfQog
CisgICAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWMsIEpTVmFsdWUgYXJn
dW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5zaWduZWQgc2l6ZUZy
YW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWMsIEpTU3RhY2sqLCBKU1ZhbHVlIGFyZ3VtZW50
cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0
KTsKICAgICB2b2lkIGxvYWRWYXJhcmdzKENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShDYWxsRnJhbWUq
IGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVp
bnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDEwIEBAIHZvaWQgU3Rh
Y2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbGwKIAogICAgICAgICBtX2ZyYW1lLm1fY2Fs
bEZyYW1lID0gY2FsbEZyYW1lOwogICAgICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0g
aW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIo
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJ
bnQzMigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAg
ICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJs
b2NrKCk7CiAgICAgICAgIG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXg7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDE1ICsyMTIs
MjcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KAogICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogfQogCi1Bc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0RXhj
ZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQpCitBc3NlbWJseUhlbHBlcnM6Okp1
bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5k
IGtpbmQsIEV4Y2VwdGlvbkp1bXBXaWR0aCB3aWR0aCkKIHsKICAgICBjYWxsRXhjZXB0aW9uRnV6
eigpOworCisgICAgaWYgKHdpZHRoID09IEZhckp1bXBXaWR0aCkKKyAgICAgICAga2luZCA9IChr
aW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gSW52ZXJ0ZWRFeGNlcHRpb25DaGVjayA6IE5v
cm1hbEV4Y2VwdGlvbkNoZWNrKTsKICAgICAKKyAgICBKdW1wIHJlc3VsdDsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25D
aGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhj
ZXB0aW9uKCkpKTsKKyAgICByZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNl
cHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVz
c09mRXhjZXB0aW9uKCkpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmV0dXJuIGJy
YW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhj
ZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIHJlc3VsdCA9IGJyYW5jaDMy
KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhjZXB0aW9u
KCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCisgICAgCisgICAgaWYgKHdpZHRo
ID09IE5vcm1hbEp1bXBXaWR0aCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBQ
YXRjaGFibGVKdW1wIHJlYWxKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOworICAgIHJlc3VsdC5saW5r
KHRoaXMpOworICAgIAorICAgIHJldHVybiByZWFsSnVtcC5tX2p1bXA7CiB9CiAKIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oQXNzZW1ibHlIZWxw
ZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICszMzgsMTAgQEAgcHVibGljOgogICAgIH0KICAgICBz
dGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIp
CiAgICAgeworICAgICAgICAvLyBOQi4gSXQncyB0ZW1wdGluZyBvbiBzb21lIGFyY2hpdGVjdHVy
ZXMgdG8gc29tZXRpbWVzIHVzZSBhbiBvZmZzZXQgZnJvbSB0aGUgc3RhY2sKKyAgICAgICAgLy8g
cmVnaXN0ZXIgYmVjYXVzZSBmb3Igc29tZSBvZmZzZXRzIHRoYXQgd2lsbCBlbmNvZGUgdG8gYSBz
bWFsbGVyIGluc3RydWN0aW9uLiBCdXQgd2UKKyAgICAgICAgLy8gY2Fubm90IGRvIHRoaXMuIFdl
IHVzZSB0aGlzIGluIHBsYWNlcyB3aGVyZSB0aGUgc3RhY2sgcG9pbnRlciBoYXMgYmVlbiBtb3Zl
ZCB0byBzb21lCisgICAgICAgIC8vIHVucHJlZGljdGFibGUgbG9jYXRpb24uCiAgICAgICAgIEFT
U0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpOwogICAgIH0KQEAgLTM2NywzOSArMzcxLDM5IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCi0gICAg
QWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2Fs
bGVlRnJhbWVTbG90KGludCBzbG90KQogICAgIHsKICAgICAgICAgQVNTRVJUKHNsb3QgPj0gSlNT
dGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpOwotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2Yo
UmVnaXN0ZXIpICogKHNsb3QgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpOworICAg
ICAgICByZXR1cm4gQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVy
KSAqIChzbG90IC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpKTsKICAgICB9CiAKICAg
ICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCi0gICAgQWRkcmVzcyBj
YWxsZWVBcmd1bWVudFNsb3QoaW50IGFyZ3VtZW50KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVl
RnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7
CiAgICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCisgICAg
c3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KGludCBzbG90KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAg
ICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KGludCBzbG90KQorICAg
IHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoaW50IHNsb3QpCiAgICAgewog
ICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoUGF5bG9hZE9m
ZnNldCk7CiAgICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFRhZ1Nsb3QoaW50IGFy
Z3VtZW50KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50VGFnU2xvdChpbnQgYXJn
dW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlQXJndW1lbnRTbG90KGFyZ3VtZW50
KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAgICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVBcmd1
bWVudFBheWxvYWRTbG90KGludCBhcmd1bWVudCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVB
cmd1bWVudFBheWxvYWRTbG90KGludCBhcmd1bWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBj
YWxsZWVBcmd1bWVudFNsb3QoYXJndW1lbnQpLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCk7CiAg
ICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVGcmFtZUNhbGxlckZyYW1lKCkKKyAgICBzdGF0aWMg
QWRkcmVzcyBjYWxsZWVGcmFtZUNhbGxlckZyYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiBj
YWxsZWVGcmFtZVNsb3QoMCkud2l0aE9mZnNldChDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0
KCkpOwogICAgIH0KQEAgLTU3MSw3ICs1NzUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsRXhj
ZXB0aW9uRnV6eigpOwogICAgIAogICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsgTm9ybWFs
RXhjZXB0aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKLSAgICBKdW1wIGVtaXRF
eGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNo
ZWNrKTsKKyAgICBlbnVtIEV4Y2VwdGlvbkp1bXBXaWR0aCB7IE5vcm1hbEp1bXBXaWR0aCwgRmFy
SnVtcFdpZHRoIH07CisgICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soCisgICAgICAgIEV4Y2Vw
dGlvbkNoZWNrS2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25KdW1wV2lkdGgg
PSBOb3JtYWxKdW1wV2lkdGgpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAg
IHN0YXRpYyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBs
aW5nQ291bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzc3LDYgKzE3NzcsMTUgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0KIAorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFy
ZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJ
bW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjph
cmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSND4oYXJnMiwgYXJnNCk7CisgICAgICAg
IG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShhcmczLCBH
UFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBtb3ZlKGFyZzUsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcyLCBH
UFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQogICAgIHsK
ICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMz4oYXJnMiwgYXJnMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0dQUkluZm8uaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6ZWF4
OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gWDg2
UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVz
ZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OmVzaTsKKyAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gWDg2UmVnaXN0ZXJzOjpyMTA7CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRjaFJlZ2lzdGVyID0gTWFjcm9B
c3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3RlcjsKIAogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdpc3Rl
cih1bnNpZ25lZCBpbmRleCkKQEAgLTU3Nyw2ICs1NzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MDsgLy8gcmVn
VDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IEFSTTY0UmVnaXN0
ZXJzOjp4MTsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5v
blJldHVybkdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MjsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gQVJNNjRSZWdpc3RlcnM6Ong4OwogICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgcGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IEFSTTY0UmVnaXN0
ZXJzOjppcDA7CiAKICAgICAvLyBHUFJSZWcgbWFwcGluZyBpcyBkaXJlY3QsIHRoZSBtYWNoaW5l
IHJlZ3NpdGVyIG51bWJlcnMgY2FuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2NCwxMSArNDY0LDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpw
cml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFs
c2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIERGRzo6Q2FuSW5saW5lOgotICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0g
ZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwotICAgICAg
ICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKICAgICBjYXNl
IERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAg
ICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIGNvbXBpbGVPcENhbGwoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShP
cGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwotICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZh
cmFyZ3NGcmFtZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFy
Z3NGcmFtZShJbnN0cnVjdGlvbiosIENhbGxMaW5rSW5mbyopOwogICAgICAgICB2b2lkIGNvbXBp
bGVDYWxsRXZhbChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcg
KzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKgogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZh
cmFyZ3NGcmFtZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29tcGlsZVNl
dHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZvKiBp
bmZvKQogewogICAgIGludCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAg
ICAgaW50IGFyZ3VtZW50cyA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTkwLDYgKzkw
LDE2IEBAIHZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHIKICAgICBpZiAo
Y2FuT3B0aW1pemUpCiAgICAgICAgIGVuZC5saW5rKHRoaXMpOwogICAgIAorICAgIC8vIFByb2Zp
bGUgdGhlIGFyZ3VtZW50IGNvdW50LgorICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBKU1N0YWNr
OjpBcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBh
eWxvYWRPZmZzZXQpLCByZWdUMik7CisgICAgbG9hZDgoJmluZm8tPm1heE51bUFyZ3VtZW50cywg
cmVnVDApOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVn
VDIpOworICAgIEp1bXAgbm90U2F0dXJhdGVkID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCByZWdU
MiwgVHJ1c3RlZEltbTMyKDI1NSkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDI1NSksIHJlZ1Qy
KTsKKyAgICBub3RTYXR1cmF0ZWQubGluayh0aGlzKTsKKyAgICBzdG9yZTgocmVnVDIsICZpbmZv
LT5tYXhOdW1Bcmd1bWVudHMpOworICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKKyAgICAKICAg
ICAvLyBJbml0aWFsaXplICd0aGlzJy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNW
YWx1ZSwgcmVnVDApOwogICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpKSk7CkBAIC0xMzQsNyArMTQ0LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKEluc3RydQogCiB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsK
LSAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAgICBpbnQg
Y2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgLyogQ2FsbGVyIGFsd2F5
czoKICAgICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJh
bWUuCkBAIC0xNTIsNyArMTY0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSQogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BD
T0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rl
c19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RI
KG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBjYWxsX2Fu
ZF9jb25zdHJ1Y3RfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MpCi0gICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbik7
CisgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbiwgaW5mbyk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZDsKQEAgLTE3Niw5ICsxODgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBv
cGNvZGVJCiAKICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotCi0gICAgaWYgKG9wY29kZUlEID09
IG9wX2NhbGxfZXZhbCkgeworICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAg
ICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgdHlwZWRlZiBpbnQ2NF90IEpJVF9P
UEVSQVRJT04oKlFfSklUT3BlcgogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJ
VE9wZXJhdGlvbl9EKShkb3VibGUpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpa
X0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFU
SU9OICgqWl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlwZWRlZiBp
bnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FSlopKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgq
Wl9KSVRPcGVyYXRpb25fRUpaWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3Qs
IGludDMyX3QpOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9u
X0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBKSVRf
T1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
KTsKQEAgLTE4OSw2ICsxOTAsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklU
T3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWd3NK
KShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUq
LCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
RVpKKShFeGVjU3RhdGUqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaSlpaWikoRXhlY1N0YXRlKiwgaW50MzJf
dCwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiB2
b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNTdGF0ZSosIFZNKik7
CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0opKEVuY29kZWRK
U1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fWiko
aW50MzJfdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0Zy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFy
YXJnc0ZyYW1lLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMSArMTAx
LDMxIEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwKIAogdm9pZCBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51
bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQ
UlJlZyBzY3JhdGNoR1BSMywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVy
czo6SnVtcExpc3QmIHNsb3dDYXNlKQogewotICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RD
YXNlKAotICAgICAgICBqaXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hH
UFIyLCBzY3JhdGNoR1BSMywKLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdElu
dDMyKSwKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
MCkpLAotICAgICAgICBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgIGVtaXRTZXR1
cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBudWxscHRyLCBmaXJzdFZhckFyZ09mZnNldCwgc2xv
d0Nhc2UpOworfQorCit2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQ
UlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6
SnVtcExpc3QmIHNsb3dDYXNlKQoreworICAgIFZhbHVlUmVjb3ZlcnkgYXJndW1lbnRDb3VudFJl
Y292ZXJ5OworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdEFyZ3VtZW50UmVnOworICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdz
KCkpIHsKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRSZWdpc3RlciwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0
YW50KAorICAgICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkgPiAxKQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpB
cmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgZmlyc3RBcmd1bWVudFJl
ZyA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKKyAgICB9
CisgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1Vc2VkU2xvdHNHUFIs
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGFyZ3VtZW50Q291bnRSZWNv
dmVyeSwgZmlyc3RBcmd1bWVudFJlZywgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TZXR1cFZhcmFyZ3NGcmFtZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDkgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAogLy8gVmFy
aWFudCB0aGF0IGFzc3VtZXMgbm9ybWFsIHN0YWNrIGZyYW1lLgogdm9pZCBlbWl0U2V0dXBWYXJh
cmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIz
LCB1bnNpZ25lZCBmaXJzdFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xv
d0Nhc2UpOwogCisvLyBWYXJpYW50IGZvciBwb3RlbnRpYWxseSBpbmxpbmVkIHN0YWNrIGZyYW1l
cy4KK3ZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQ
UjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiwgdW5zaWduZWQgZmlyc3RW
YXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIEFyZ3VtZW50cyogY3Jl
YXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1v
ZGUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFy
cmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3Vt
ZW50cyhjYWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdp
c3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoY2FsbEZyYW1lLCBpbmxpbmVD
YWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+Zmlu
aXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUsIG1vZGUpOwogICAgICAgICBy
ZXR1cm4gYXJndW1lbnRzOwogICAgIH0KQEAgLTEyNCw3ICsxMjQsMTUgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShFeGVjU3RhdGUqKTsKIAog
ICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpOyB9Ci0gICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6
ZUluQnl0ZXMoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsgcmV0dXJuIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKSAtIDEpOyB9CisgICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkp
CisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZElu
dDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICByZXR1cm4g
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxKTsKKyAgICB9CiAgICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCk7CiAgICAgYm9vbCB0
cnlTZXRBcmd1bWVudChWTSYsIHNpemVfdCBhcmd1bWVudCwgSlNWYWx1ZSk7CiAgICAgSlNWYWx1
ZSB0cnlHZXRBcmd1bWVudChzaXplX3QgYXJndW1lbnQpOwpAQCAtMzQwLDExICszNDgsMTUgQEAg
aW5saW5lIHZvaWQgQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogICAgIG1fb3ZlcnJvZGVD
YWxsZWUgPSBmYWxzZTsKICAgICBtX292ZXJyb2RlQ2FsbGVyID0gZmFsc2U7CiAgICAgbV9pc1N0
cmljdE1vZGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oaW5saW5lQ2FsbEZyYW1lLT5l
eGVjdXRhYmxlLmdldCgpKS0+aXNTdHJpY3RNb2RlKCk7Ci0KKyAgICAKKyAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICBtX251
bUFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgZWxzZQorICAgICAgICBtX251
bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICBtX251
bUFyZ3VtZW50cy0tOworICAgIAogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgTm9ybWFs
QXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0gICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKLSAgICAgICAgCiAgICAgICAgIGlmICht
X251bUFyZ3VtZW50cykgewogICAgICAgICAgICAgaW50IG9mZnNldEZvckFyZ3VtZW50T25lID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7
CiAgICAgICAgICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpICsgb2Zmc2V0Rm9yQXJndW1l
bnRPbmUgLSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKTsKQEAgLTM2MSw3
ICszNzMsNiBAQCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIENsb25lZEFyZ3VtZW50c0NyZWF0aW9uTW9kZTogewotICAg
ICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IDE7CiAgICAgICAgIGlmIChtX251bUFyZ3VtZW50cykgewogICAgICAgICAgICAgaW50IG9mZnNl
dEZvckFyZ3VtZW50T25lID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkp
ICsgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgLSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5v
ZmZzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciog
b3B0aW9uU3RyaW5nOwogICAgIC8qIGZyb20gc3VwZXIgbG9uZyBjb21waWxlcyB0aGF0IHRha2Ug
YSBsb3Qgb2YgbWVtb3J5LiAqL1wKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtSW5saW5pbmdDYWxs
ZXJTaXplLCAxMDAwMCkgXAogICAgIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhpbXVtVmFyYXJnc0Zv
cklubGluaW5nLCAxMDApIFwKKyAgICBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudENh
bGxJbmxpbmluZywgdHJ1ZSkgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRCeUlkSW5s
aW5pbmcsIHRydWUpIFwKICAgICBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246561</attachid>
            <date>2015-02-13 17:36:55 -0800</date>
            <delta_ts>2015-02-13 22:04:03 -0800</delta_ts>
            <desc>it passes some of our tests!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>154586</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
MTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFB
OEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAv
KiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAx
NDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2Nh
dGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxs
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAw
MEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8q
IFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICov
LAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAq
LywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
LAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkw
RjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBA
QAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4
NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiAr
NDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRy
dXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVy
c2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNy
Y0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQo
aW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0z
MkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMzEsNiArMzMxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
bXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODc2LDYgKzg3NiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJ
YiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgw
KQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBw
dWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNp
Z25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDog
ODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAg
Ly8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1
ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0o
cHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZv
KGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1f
bWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxs
TGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkK
K3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9j
b3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBi
b29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAo
IW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1w
KG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAg
bV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApA
QCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29u
c3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAg
LTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkg
Y29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgog
ICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAg
IGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0
LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAg
IENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFy
Z3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNv
cnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAg
ICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZh
cmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAg
cmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBpc1Zh
cmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtp
bmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtp
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzRXNjYXBlZCI7CiAgICAgY2FzZSBOb3RTdHJpbmdP
YmplY3Q6CiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKKyAgICBjYXNlIFZhcmFy
Z3NPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZsb3ciOwogICAgIGNhc2Ug
VW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5j
b3VudGFibGVJbnZhbGlkYXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEluYWRlcXVhdGVDb3ZlcmFnZSwgLy8gV2UgZXhp
dGVkIGJlY2F1c2Ugd2UgZW5kZWQgdXAgaW4gY29kZSB0aGF0IGRpZG4ndCBoYXZlIHByb2ZpbGlu
ZyBjb3ZlcmFnZS4KICAgICBBcmd1bWVudHNFc2NhcGVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
cmd1bWVudHMgZXNjYXBlZCBidXQgd2UgZGlkbid0IGV4cGVjdCB0aGVtIHRvLgogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgorICAgIFZhcmFyZ3NPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB2YXJhcmdzIGNhbGwgcGFzc2VkIG1vcmUgYXJndW1l
bnRzIHRoYW4gd2UgZXhwZWN0ZWQuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgV2F0Y2hkb2dU
aW1lckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdh
dGNoZG9nIHRpbWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKLSAgICAg
ICAgQVNTRVJUKHZhbHVlLmlzSGVhcFRvcCgpKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0Ns
ZWFyKCkpOwogICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2
YWx1ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1h
dCgpKSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEZpbHRyYXRp
b25PSyk7CkBAIC0yMDMsOSArMjAzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0Lgot
ICAgICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRl
IG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9u
ZSBzZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1
cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAgLy8gbm9uLWNs
ZWFyIHZhbHVlLgorICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChu
b2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2Fz
ZSBCaXRPcjoKQEAgLTEzMTUsNyArMTMyNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0
IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAg
ICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0
aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRo
ZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBzZXRD
b25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0ZW5kIHRoYXQgd2UgY2xvYmJl
cmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KQEAgLTE5NjQsNiArMTk3Niw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3Ao
KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBC
dXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhh
dCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgyLDEyICsxODIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSog
Y2FsbFRhcmdldCwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3Rh
dHVzKTsKICAgICB2b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwg
aW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJ
bnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAg
ICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIHVu
ZG9GdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCk7CisgICAgdm9pZCBoYW5kbGVWYXJhcmdzQ2Fs
bChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsK
KyAgICBOb2RlKiBlbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQsIE5vZGUqIGNhbGxUYXJn
ZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1udCk7CisgICAgdm9pZCB1bmRvRnVuY3Rpb25D
aGVja3MoQ2FsbFZhcmlhbnQsIE5vZGUqKTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21z
KGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxpbmluZ0Nvc3QoQ2FsbFZhcmlh
bnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7IC8vIFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmluZyBjYW5kaWRhdGUu
IEJ5IGNvbnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4KICAgICAvLyBIYW5k
bGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVl
ZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5l
eHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxU
YXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIFZpcnR1YWxSZWdp
c3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNh
bGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsK
ICAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIENh
bGxlckxpbmtzTWFudWFsbHkgfTsKICAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRP
ZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpOwogICAgIHZvaWQg
aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxW
YXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5r
YWJpbGl0eSk7CkBAIC01MjgsNiArNTI5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG51bUFy
Z3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAgICAgZmx1
c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihK
U1N0YWNrOjpDYWxsZWUpKSk7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5y
ZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lU3RhY2tFbnRy
eS0+bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IG51bUFyZ3VtZW50czsgYXJndW1lbnQtLSA+IDE7KQpAQCAtNjU0LDExICs2NTcs
MTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAg
dm9pZCByZW1vdmVMYXN0Tm9kZUZyb21HcmFwaChOb2RlVHlwZSBleHBlY3RlZE5vZGVUeXBlKQor
ICAgIHZvaWQgcmVtb3ZlTm9kZUZyb21HcmFwaChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT50YWtlTGFzdCgpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChub2RlLT5vcCgpID09IGV4cGVjdGVkTm9kZVR5cGUpOwotICAgICAgICBtX2dyYXBo
Lm1fYWxsb2NhdG9yLmZyZWUobm9kZSk7CisgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jay0+bGFz
dCgpID09IG5vZGUpIHsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT50YWtlTGFzdCgpOwor
ICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKG5vZGUpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNl
dCgpOworICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgfQogCiAgICAgdm9p
ZCBhZGRWYXJBcmdDaGlsZChOb2RlKiBjaGlsZCkKQEAgLTY5MSw3ICs2OTksNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgb3AsIG9wSW5mbywgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZz
ZXQsIHByZWRpY3Rpb24pOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3Vs
dCk7CiAgICAgICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQotICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQpLCBjYWxsKTsKKyAgICAgICAgICAgIHNldChyZXN1bHRSZWcs
IGNhbGwpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCkBAIC0xMDQyLDggKzEw
NTAsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogewogICAgIEFTU0VSVChy
ZWdpc3Rlck9mZnNldCA8PSAwKTsKICAgICAKLSAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3Rh
bnQoKSkKLSAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0
LT5hc0pTVmFsdWUoKSkuc2V0SXNQcm92ZWQodHJ1ZSk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmlz
Q2VsbENvbnN0YW50KCkpCisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50
Q2FsbGVlKENhbGxWYXJpYW50KGNhbGxUYXJnZXQtPmFzQ2VsbCgpKSk7CiAgICAgCiAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAgICAgZGF0YUxvZygi
ICAgIEhhbmRsaW5nIGNhbGwgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwgY2FsbExp
bmtTdGF0dXMsICJcbiIpOwpAQCAtMTA2MCw3ICsxMDY4LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbCgKICAgICAKICAgICBPcEluZm8gY2FsbE9wSW5mbzsKICAgICAKLSAgICBp
ZiAoaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVn
aXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwg
a2luZCwgcHJlZGljdGlvbikpIHsKKyAgICBpZiAoaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwg
cmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSwgVmlydHVhbFJlZ2lzdGVyKCksIDAsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwga2luZCwgcHJlZGljdGlvbikp
IHsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3Jh
cGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTA3Miw3ICsxMDgwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAg
ICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUuZnVuY3Rpb24oKTsKICAgICAgICAg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJh
bWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKICAgICAgICAgaWYgKGZ1bmN0aW9uICYm
IGZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBlbWl0RnVuY3Rpb25D
aGVja3MoY2FsbGVlLCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25L
aW5kKTsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUsIGNhbGxUYXJnZXQs
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAg
ICAgICBjYWxsT3BJbmZvID0gT3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CiAKICAg
ICAgICAgICAgIGlmIChvcCA9PSBDYWxsKQpAQCAtMTA4OCwxMSArMTA5Niw1NCBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbE9w
SW5mbywgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zm
c2V0LCBwcmVkaWN0aW9uKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9u
Q2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVWYXJhcmdzQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0gICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIEFT
U0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncykgPT0gT1BDT0RFX0xFTkdUSChvcF9j
b25zdHJ1Y3RfdmFyYXJncykpOworICAgIAorICAgIGludCByZXN1bHQgPSBwY1sxXS51Lm9wZXJh
bmQ7CisgICAgaW50IGNhbGxlZSA9IHBjWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgdGhpc1JlZyA9
IHBjWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgYXJndW1lbnRzID0gcGNbNF0udS5vcGVyYW5kOwor
ICAgIGludCBmaXJzdEZyZWVSZWcgPSBwY1s1XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0VmFy
QXJnT2Zmc2V0ID0gcGNbNl0udS5vcGVyYW5kOworICAgIAorICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CisgICAgCisgICAgTm9kZSogY2FsbFRhcmdldCA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSk7CisgICAgCisgICAgQ2FsbExpbmtTdGF0dXMg
Y2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLAorICAg
ICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXAp
OworICAgIGlmIChjYWxsVGFyZ2V0LT5pc0NlbGxDb25zdGFudCgpKQorICAgICAgICBjYWxsTGlu
a1N0YXR1cy5zZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFudChjYWxsVGFyZ2V0LT5h
c0NlbGwoKSkpOworICAgIAorICAgIGlmIChjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpCisg
ICAgICAgICYmIGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0
dXMsIGZpcnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpLCBWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzKSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1fY3VycmVudEluZGV4ICsgT1BD
T0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5lQ2FsbEZyYW1lOjp2YXJhcmdz
S2luZEZvcihraW5kKSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGls
YXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5l
ZENhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDYWxsVmFyYXJnc0Rh
dGEqIGRhdGEgPSBtX2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOworICAgIGRhdGEtPmZp
cnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgCisgICAgTm9kZSogdGhp
c0NoaWxkOwogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICB0aGlzQXJndW1l
bnQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsK
KyAgICAgICAgdGhpc0NoaWxkID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSk7CisgICAg
ZWxzZQorICAgICAgICB0aGlzQ2hpbGQgPSBudWxscHRyOworICAgIAorICAgIE5vZGUqIGNhbGwg
PSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgY2FsbFRh
cmdldCwgZ2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKSwgdGhpc0NoaWxkKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CisgICAgaWYgKHJlc3VsdFJlZy5pc1Zh
bGlkKCkpCisgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOworfQorCitOb2RlKiBCeXRlQ29k
ZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2Fs
bFRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudFJlZykKK3sKKyAgICBOb2RlKiB0
aGlzQXJndW1lbnQ7CisgICAgaWYgKHRoaXNBcmd1bWVudFJlZy5pc1ZhbGlkKCkpCisgICAgICAg
IHRoaXNBcmd1bWVudCA9IGdldCh0aGlzQXJndW1lbnRSZWcpOwogICAgIGVsc2UKICAgICAgICAg
dGhpc0FyZ3VtZW50ID0gMDsKIApAQCAtMTEwNywxNCArMTE1OCwxOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoCiAgICAgfQogICAgIAogICAgIEFTU0VSVChjYWxs
ZWVDZWxsKTsKLSAgICBhZGRUb0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKG1fZ3JhcGguZnJlZXpl
KGNhbGxlZUNlbGwpKSwgY2FsbFRhcmdldEZvckNoZWNrLCB0aGlzQXJndW1lbnQpOworICAgIHJl
dHVybiBhZGRUb0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGNhbGxlZUNl
bGwpKSwgY2FsbFRhcmdldEZvckNoZWNrLCB0aGlzQXJndW1lbnQpOwogfQogCi12b2lkIEJ5dGVD
b2RlUGFyc2VyOjp1bmRvRnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlKQordm9pZCBC
eXRlQ29kZVBhcnNlcjo6dW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwgTm9k
ZSogY2hlY2spCiB7Ci0gICAgcmVtb3ZlTGFzdE5vZGVGcm9tR3JhcGgoQ2hlY2tDZWxsKTsKLSAg
ICBpZiAoY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSkKLSAgICAgICAgcmVtb3ZlTGFzdE5vZGVGcm9t
R3JhcGgoR2V0RXhlY3V0YWJsZSk7CisgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsK
KyAgICAgICAgTm9kZSogZ2V0RXhlY3V0YWJsZSA9IGNoZWNrLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGdldEV4ZWN1dGFibGUtPm9wKCkgPT0gR2V0RXhlY3V0YWJs
ZSk7CisgICAgICAgIHJlbW92ZU5vZGVGcm9tR3JhcGgoZ2V0RXhlY3V0YWJsZSk7CisgICAgfQor
ICAgIAorICAgIHJlbW92ZU5vZGVGcm9tR3JhcGgoY2hlY2spOwogfQogCiB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjplbWl0QXJndW1lbnRQaGFudG9tcyhpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAt
MTM5Myw3ICsxNDQ4LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNh
bGwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxs
TGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxs
T3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
KQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCisgICAgTm9kZSogY2FsbFRh
cmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExp
bmtTdGF0dXMsCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWcsIFZpcnR1YWxS
ZWdpc3RlciB0aGlzQXJndW1lbnQsCisgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3Vt
ZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywKKyAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNh
bGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIGlm
ICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIGlubGluaW5nLi4uXG4iKTsK
QEAgLTE0MDcsNiArMTQ2NiwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmlu
ZyhOb2RlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCisgICAgaWYgKElubGlu
ZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpCisgICAgICAgICYmIGNhbGxMaW5rU3RhdHVzLm1h
eE51bUFyZ3VtZW50cygpID4gT3B0aW9uczo6bWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZygpKSB7
CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxp
bmluZyBiZWNhdXNlIG9mIHZhcmFyZ3MuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAgICAgCiAgICAgdW5zaWduZWQgaW5saW5pbmdCYWxhbmNlID0gT3B0aW9uczo6bWF4
aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKICAg
ICBpZiAoc3BlY2lhbGl6YXRpb25LaW5kID09IENvZGVGb3JDb25zdHJ1Y3QpCiAgICAgICAgIGlu
bGluaW5nQmFsYW5jZSA9IHN0ZDo6bWluKGlubGluaW5nQmFsYW5jZSwgT3B0aW9uczo6bWF4aW11
bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpKTsK
QEAgLTE0MTcsMTQgKzE0ODMsODEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5p
bmcoTm9kZQogICAgIC8vIHNpbXBsaWZpY2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMg
cmVkdWNlIGNvbXBpbGUgdGltZXMsIGJ1dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRo
aXMgaW4gY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8g
Y2hlY2sgdGhlIGNhbGxlZS4KICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQ
YXRoKCkgJiYgY2FsbExpbmtTdGF0dXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0
aW9uQ2hlY2tzKAotICAgICAgICAgICAgY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2Rl
LCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgTm9kZSogY2hl
Y2sgPSBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2Rl
LCBzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNhbGwgPyB0aGlzQXJndW1lbnQgOiBWaXJ0
dWFsUmVnaXN0ZXIoKSk7CisKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0OworCisgICAgICAg
IC8vIElmIHdlIGhhdmUgYSB2YXJhcmdzIGNhbGwsIHdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgYXJn
dW1lbnRzIHJpZ2h0IG5vdy4KKyAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdz
KGtpbmQpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBtYW5kYXRvcnlNaW5pbXVtOyAvLyBleGNs
dWRlcyAidGhpcyIKKyAgICAgICAgICAgIGlmIChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RXhlY3V0YWJsZSA9IGNhbGxMaW5rU3RhdHVzWzBdLmZ1bmN0aW9uRXhlY3V0YWJsZSgpKQorICAg
ICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnBhcmFt
ZXRlckNvdW50KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5
TWluaW11bSA9IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGluY2x1ZGVzICJ0aGlz
IgorICAgICAgICAgICAgdW5zaWduZWQgbWF4TnVtQXJndW1lbnRzID0gc3RkOjptYXgoCisgICAg
ICAgICAgICAgICAgY2FsbExpbmtTdGF0dXMubWF4TnVtQXJndW1lbnRzKCksCisgICAgICAgICAg
ICAgICAgbWFuZGF0b3J5TWluaW11bSArIDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBXZSBzb3J0IG9mIHByZXRlbmQgdGhhdCB0aGlzICppcyogdGhlIG51bWJlciBvZiBhcmd1bWVu
dHMgdGhhdCB3ZXJlIHBhc3NlZC4KKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzID0gbWF4TnVtQXJndW1lbnRzOworICAgICAgICAgICAgCisgICAgICAgICAgICByZWdpc3Rl
ck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWcgKyAxOworICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgLT0gbWF4TnVtQXJndW1lbnRzOyAvLyBpbmNsdWRlcyAidGhpcyIKKyAg
ICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7
CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
CisgICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAg
ICAgICAtcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBlbnN1cmVM
b2NhbHMoCisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplOworCisgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRh
dGEgPSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOworICAgICAgICAgICAgZGF0YS0+
c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCArIDEpOworICAgICAgICAgICAg
ZGF0YS0+Y291bnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpB
cmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGRhdGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNl
dDsKKyAgICAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4TnVtQXJndW1lbnRzOworICAgICAgICAg
ICAgZGF0YS0+bWFuZGF0b3J5TWluaW11bSA9IG1hbmRhdG9yeU1pbmltdW07CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0
KGFyZ3VtZW50c0FyZ3VtZW50KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEluIERG
RyBJUiBiZWZvcmUgU1NBLCB3ZSBjYW5ub3QgaW5zZXJ0IGNvbnRyb2wgZmxvdyBiZXR3ZWVuIGFm
dGVyIHRoZQorICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIHRoZSBsYXN0IFNldEFyZ3Vt
ZW50LiBUaGlzIGlzbid0IGEgcHJvYmxlbSBvbmNlIHdlIGdldCB0byBERkcKKyAgICAgICAgICAg
IC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciByZWFzb25zIGZvciBub3Qg
aW5zZXJ0aW5nIGNvbnRyb2wgZmxvdworICAgICAgICAgICAgLy8gYmVmb3JlIFNTQS4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKAorICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCBmYWxzZSk7CisgICAgICAg
ICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQgd2lsbCBmb3JjZSB0aGUgY291bnQg
dG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24ndAorICAgICAgICAgICAgLy8gbWF0
dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50IGFuZCBGbHVzaGVz
IGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKKyAgICAgICAgICAgIC8vIG1vc3RseSBqdXN0IGEgZm9y
bWFsaXR5LgorICAgICAgICAgICAgY291bnRWYXJpYWJsZS0+cHJlZGljdChTcGVjSW50MzIpOwor
ICAgICAgICAgICAgY291bnRWYXJpYWJsZS0+bWVyZ2VJc1Byb2ZpdGFibGVUb1VuYm94KHRydWUp
OworICAgICAgICAgICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoU2V0QXJn
dW1lbnQsIE9wSW5mbyhjb3VudFZhcmlhYmxlKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+bG9jYWwoKSwgc2V0
QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzcGVjaWFsaXph
dGlvbktpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IG1h
eE51bUFyZ3VtZW50czsgKythcmd1bWVudCkgeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0ICsgYXJndW1lbnQpLCBmYWxzZSk7
CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsg
Ly8gV2UgY3VycmVudGx5IGhhdmUgbm93aGVyZSB0byBwdXQgdGhlIHR5cGUgY2hlY2sgb24gdGhl
IExvYWRWYXJhcmdzLiBMb2FkVmFyYXJncyBpcyBlZmZlY3RmdWwsIHNvIGFmdGVyIGl0IGZpbmlz
aGVzLCB3ZSBjYW5ub3QgZXhpdC4KKyAgICAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9
IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9y
Rmlyc3RGcmVlUmVnOworICAgICAgICAKICAgICAgICAgYm9vbCByZXN1bHQgPSBhdHRlbXB0VG9J
bmxpbmVDYWxsKAogICAgICAgICAgICAgY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNh
bGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJEb2VzTm9ybWFsTGlua2lu
ZywgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAgICAgIGlm
ICghcmVzdWx0ICYmICFjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQotICAgICAgICAgICAgdW5k
b0Z1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdKTsKKyAgICAgICAgICAgIHVuZG9GdW5j
dGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSwgY2hlY2spOwogICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiRG9uZSBpbmxpbmluZyAoc2ltcGxlKS5cbiIpOwog
ICAgICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIp
OwpAQCAtMTQzNywxMSArMTU3MCw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKE5vZGUKICAgICAvLyBkbyBtb3JlIGRldGFpbGVkIHBvbHl2YXJpYW50L3BvbHltb3JwaGlj
IHByb2ZpbGluZzsgYW5kIHNlY29uZCwgaXQgcmVkdWNlcyBjb21waWxlIHRpbWVzIGluCiAgICAg
Ly8gdGhlIERGRy4gQW5kIGJ5IHBvbHl2YXJpYW50IHByb2ZpbGluZyB3ZSBtZWFuIHBvbHl2YXJp
YW50IHByb2ZpbGluZyBvZiAqdGhpcyogY2FsbC4gTm90ZSB0aGF0CiAgICAgLy8gd2UgY291bGQg
aW1wcm92ZSB0aGF0IGFzcGVjdCBvZiB0aGlzIGJ5IGRvaW5nIHBvbHltb3JwaGljIGlubGluaW5n
IGJ1dCBoYXZpbmcgdGhlIHByb2ZpbGluZwotICAgIC8vIGFsc28uIEN1cnJlbnRseSB3ZSBvcHQg
YWdhaW5zdCB0aGlzLCBidXQgaXQgY291bGQgYmUgaW50ZXJlc3RpbmcuIFRoYXQgd291bGQgcmVx
dWlyZSBoYXZpbmcgYQotICAgIC8vIHNlcGFyYXRlIG5vZGUgZm9yIGNhbGwgZWRnZSBwcm9maWxp
bmcuCi0gICAgLy8gRklYTUU6IEludHJvZHVjZSB0aGUgbm90aW9uIG9mIGEgc2VwYXJhdGUgY2Fs
bCBlZGdlIHByb2ZpbGluZyBub2RlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzYwMzMKLSAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUp
IHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZygpKSB7CisgICAgLy8g
YWxzby4KKyAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjpl
bmFibGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZygpCisgICAgICAgIHx8IElubGluZUNhbGxGcmFt
ZTo6aXNWYXJhcmdzKGtpbmQpKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAg
ICBkYXRhTG9nKCJCYWlsaW5nIGlubGluaW5nIChoYXJkKS5cbiIpOwogICAgICAgICAgICAgZGF0
YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwpAQCAtMTQ4Miw2ICsx
NjEzLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAg
ICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgfQog
ICAgIAorICAgIGludCByZWdpc3Rlck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVS
ZWc7CisgICAgCiAgICAgLy8gVGhpcyBtYWtlcyBtZSB3aXNoIHRoYXQgd2Ugd2VyZSBpbiBTU0Eg
YWxsIHRoZSB0aW1lLiBXZSBuZWVkIHRvIHBpY2sgYSB2YXJpYWJsZSBpbnRvIHdoaWNoIHRvCiAg
ICAgLy8gc3RvcmUgdGhlIGNhbGxlZSBzbyB0aGF0IGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byBh
bGwgb2YgdGhlIGJsb2NrcyB3ZSdyZSBhYm91dCB0byBjcmVhdGUuIFdlCiAgICAgLy8gZ2V0IGF3
YXkgd2l0aCBkb2luZyBhbiBpbW1lZGlhdGUtc2V0IGhlcmUgYmVjYXVzZSB3ZSB3b3VsZG4ndCBo
YXZlIHBlcmZvcm1lZCBhbnkgc2lkZSBlZmZlY3RzCkBAIC0zMTEzLDQzICszMjQ2LDcwIEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCB0
aGlzUmVnID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGlu
dCBhcmd1bWVudHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICAg
ICAgaW50IGZpcnN0RnJlZVJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0u
dS5vcGVyYW5kOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZy
YW1lKCkpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhcmd1bWVudHMsIGFyZ3VtZW50cyA9
PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZz
ZXQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCkpOwotCi0gICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGFy
Z0NvdW50ID0gaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50cy5zaXplKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9mZnNldC4gV2Ug
c3RhcnQgd2l0aCB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgICAgIC8vIHRo
ZW4gYWRqdXN0IGZvciB0aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCi0gICAg
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOwotICAgICAgICAg
ICAgcmVnaXN0ZXJPZmZzZXQgLT0gYXJnQ291bnQ7IC8vIFdlIHdpbGwgYmUgcGFzc2luZyBzb21l
IGFyZ3VtZW50cy4KLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBo
ZWFkZXIuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJp
Z2h0LgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKAotICAgICAgICAgICAgICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCi0gICAgICAg
ICAgICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsKLQotICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAot
ICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKLSAgICAgICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsK
KyAgICAgICAgICAgIGlmIChhcmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKKyAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dB
cmd1bWVudHMoKSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKQorICAg
ICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFyYXJncygpCisgICAg
ICAgICAgICAgICAgICAgICYmICFmaXJzdFZhckFyZ09mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRz
LnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21w
dXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNlZCByZWdp
c3RlciwgYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhp
bmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCisgICAgICAgICAgICAgICAgICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0IC09IGFyZ0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1
bWVudHMuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFt
ZSBoZWFkZXIuCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBh
bGlnbm1lbnQgcmlnaHQuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZz
ZXQpOworCisgICAgICAgICAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3Vs
ZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2Ug
aXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9u
ZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQor
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVO
YWtlZFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09E
RV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxl
ZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gRW1pdCBDYWxsRm9yd2FyZFZhcmFyZ3MKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB3ZSBjYW5ub3QgaW5saW5lIGZvcndhcmRlZCB2
YXJhcmdzIGNhbGxzIGluc2lkZSBhIHZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBjYWxsIGZy
YW1lLiBXZSB3aWxsIHByb2JhYmx5IGZpeCB0aGF0IG9uY2Ugd2UgZmluYWxseSBnZXQgcmlkIG9m
IHRoZQorICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBvYmplY3Qgc3BlY2lhbC1jYXNpbmcu
CisgICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2NhbGxW
YXJhcmdzRGF0YS5hZGQoKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNl
dCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgICAgICBDYWxsRm9yd2Fy
ZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAg
ICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSksIGdldChWaXJ0dWFsUmVn
aXN0ZXIodGhpc1JlZykpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
UmVnKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOworICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0aGUg
YXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2UgaXQKLSAgICAgICAgICAgIC8vIGxv
b2sgbGlrZSB0aGUgYnl0ZWNvZGUgaGFkIGRvbmUgaXQuCi0gICAgICAgICAgICBpbnQgbmV4dFJl
Z2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwot
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0
dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVu
dCkKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwg
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2Vk
U2V0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgICAg
ICAgICByZXN1bHQsIENhbGwsIENvZGVGb3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFy
YXJncyksCi0gICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQp
OworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxs
VmFyYXJncywgQ29kZUZvckNhbGwpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92
YXJhcmdzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY29uc3Ry
dWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgQ29uc3RydWN0VmFyYXJncywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgogICAgICAgICAgICAgLy8gU3RhdGljYWxs
eSBzcGVjdWxhdGUgZm9yIG5vdy4gSXQgbWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1bGF0ZS1vbmx5
IGpuZXFfcHRyCiAgICAgICAgICAgICAvLyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3aGlsZSBiZWZv
cmUgbWFraW5nIGl0IG1vcmUgZ2VuZXJhbCwgc2luY2UgaXQncwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk2LDYgKzk2LDggQEAgaW5saW5lIHZvaWQgZGVidWdG
YWlsKENvZGVCbG9jayogY29kZUJsbwogCiBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVs
KE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHBj
KQogeworICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOyAvLyBUaGlzIGZ1bmN0aW9uIGRvZXMg
c29tZSBieXRlY29kZSBwYXJzaW5nLiBPcmRpbmFyaWx5IGJ5dGVjb2RlIHBhcnNpbmcgcmVxdWly
ZXMgdGhlIG93bmluZyBDb2RlQmxvY2suIEl0J3Mgc29ydCBvZiBzdHJhbmdlIHRoYXQgd2UgZG9u
J3QgdXNlIGl0IGhlcmUgcmlnaHQgbm93LgorICAgIAogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsK
ICAgICBjYXNlIG9wX2VudGVyOgogICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CkBAIC0xODIsNiAr
MTg0LDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNh
c2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9w
X2NvbnN0cnVjdDoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2NvbnN0
cnVjdF92YXJhcmdzOgogICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKICAgICBjYXNlIG9wX2Ny
ZWF0ZV9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6CkBAIC0yMjMs
MTQgKzIyNyw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAg
ICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAgICAgfQogCi0gICAgY2FzZSBvcF9j
YWxsX3ZhcmFyZ3M6Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBw
Y1s0XS51Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgp
Ci0gICAgICAgICAgICAmJiAhcGNbNl0udS5vcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIENh
bklubGluZTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgdGhpcy4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNgotICAg
ICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLQogICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogCiAg
ICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKICAgICBjYXNlIG9wX25ld19m
dW5jOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5o
CShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDkgKzg2LDcgQEAg
aW5saW5lIENhcGFiaWxpdHlMZXZlbCBmdW5jdGlvbkNhcGFiaWxpdAogICAgICAgICByZXR1cm4g
bGVhc3RVcHBlckJvdW5kKENhbkNvbXBpbGVBbmRJbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxl
dmVsKTsKICAgICBpZiAobWlnaHRDb21waWxlICYmICFtaWdodElubGluZSkKICAgICAgICAgcmV0
dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5Db21waWxlLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7
Ci0gICAgaWYgKCFtaWdodENvbXBpbGUgJiYgbWlnaHRJbmxpbmUpCi0gICAgICAgIHJldHVybiBs
ZWFzdFVwcGVyQm91bmQoQ2FuSW5saW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAg
aWYgKCFtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQorICAgIGlmICghbWlnaHRDb21waWxl
KQogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIHJldHVybiBDYW5ub3RDb21waWxlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjUsNiArMzY1LDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQog
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2
ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRW
YXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIFRvUHJpbWl0aXZl
OgogICAgIGNhc2UgSW46CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CkBAIC00
MDEsNiArNDA0LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlh
Ymxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgIC8vIFRoaXMg
YWN0dWFsbHkgd3JpdGVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBpdCBy
ZWFkcyB0aGUgYXJyYXksIGl0IGRvZXMKKyAgICAgICAgLy8gc28gaW4gYSB3YXkgdGhhdCBtYXkg
dHJpZ2dlciBnZXR0ZXJzIG9yIHZhcmlvdXMgdHJhcHMuCisgICAgICAgIHJlYWQoV29ybGQpOwor
ICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2Fz
ZSBHZXRMb2NhbFVubGlua2VkOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlh
YmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKSwg
bm9kZSk7CkBAIC04ODEsNyArODkxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgREZHX0NSQVNIKGdyYXBoLCBub2RlLCB0b0NTdHJpbmco
IlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3AoKSkpLmRh
dGEoKSk7CiB9CiAKIGNsYXNzIE5vT3BDbG9iYmVyaXplIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Miw3ICsyOTIsNiBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0gQ2FwYWJpbGl0eUxldmVs
IHsKICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwKICAgICBDYW5Db21waWxlLAog
ICAgIENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxldmVsTm90U2V0CkBAIC0z
MTIsNyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBhYmlsaXR5TGV2ZWwgbAog
aW5saW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZlbCkKIHsKICAgICBzd2l0
Y2ggKGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2FzZSBDYW5Db21waWxlQW5k
SW5saW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMzI1LDE0ICsz
MjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJCb3VuZChDCiAgICAgc3dp
dGNoIChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAgICByZXR1cm4gQ2Fubm90
Q29tcGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dpdGNoIChiKSB7Ci0gICAg
ICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6Ci0g
ICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBjYXNlIENhbkNvbXBpbGU6
CiAgICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNvbXBpbGU6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNyw2ICsxMTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
KQogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJn
czoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgog
ICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNl
IEJyZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgyMiw2ICs4MjIsOCBAQCBwdWJsaWM6CiAgICAgQmFnPE11bHRpR2V0
QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIEJhZzxNdWx0aVB1dEJ5
T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8T2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOworICAgIEJhZzxDYWxs
VmFyYXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOworICAgIEJhZzxMb2FkVmFyYXJnc0RhdGE+
IG1fbG9hZFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1f
aW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVf
cHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wg
bV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsNyBA
QCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAgICAgICAgIC8vIGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVu
dHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBtb3Zl
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKIAogI2lmIENQVShYODYpCiAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdXNl
IHRoZSBjYWxsIGFic3RyYWN0aW9uLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgaW4gdGhlIFNwZWN1
bGF0aXZlSklUIGxheWVyIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDIwIEBAIHN0cnVjdCBTd2l0Y2hEYXRhIHsKICAg
ICBib29sIGRpZFVzZUp1bXBUYWJsZTsKIH07CiAKK3N0cnVjdCBDYWxsVmFyYXJnc0RhdGEgewor
ICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsKK307CisKK3N0cnVjdCBMb2FkVmFyYXJnc0RhdGEg
eworICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydDsgLy8gTG9jYWwgZm9yIHRoZSBmaXJzdCBlbGVt
ZW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBjb3VudDsgLy8gTG9jYWwgZm9yIHRoZSBjb3VudC4K
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVN0YXJ0OworICAgIFZpcnR1YWxSZWdpc3RlciBt
YWNoaW5lQ291bnQ7CisgICAgdW5zaWduZWQgb2Zmc2V0OyAvLyBXaGljaCBhcnJheSBlbGVtZW50
IHRvIHN0YXJ0IHdpdGguIFVzdWFsbHkgdGhpcyBpcyAwLgorICAgIHVuc2lnbmVkIG1hbmRhdG9y
eU1pbmltdW07IC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb24gdGhlIHN0YWNrIHRoYXQgbXVz
dCBiZSBpbml0aWFsaXplZDsgaWYgdGhlIGFycmF5IGlzIHRvbyBzaG9ydCB0aGVuIHRoZSBtaXNz
aW5nIGVsZW1lbnRzIG11c3QgZ2V0IHVuZGVmaW5lZC4KKyAgICB1bnNpZ25lZCBsaW1pdDsgLy8g
TWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbG9hZC4KK307CisKIC8vIFRoaXMgdHlwZSB1
c2VkIGluIHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7
CiAvLyBkaXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4
IGludG8gYSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgs
IGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCkBAIC04ODgsNiArOTAyLDM1
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzQ2FsbFZh
cmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNl
IENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAg
Y2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBjYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0NhbGxWYXJhcmdzRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxDYWxsVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aGFzTG9hZFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IExvYWRW
YXJhcmdzOworICAgIH0KKyAgICAKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJhcmdzRGF0
YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzTG9hZFZhcmFyZ3NEYXRhKCkpOworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PExvYWRWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9
CisgICAgCiAgICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKICAgICAgICAgcmV0dXJuICEhcmVz
dWx0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgLyogdGhpcyBtdXN0IGJlIHRoZSBkaXJlY3RseSBzdWJzZXF1ZW50IHBy
b3BlcnR5IHB1dC4gTm90ZSB0aGF0IFB1dEJ5VmFsICovXAogICAgIC8qIG9wY29kZXMgdXNlIFZh
ckFyZ3MgYmVhdXNlIHRoZXkgbWF5IGhhdmUgdXAgdG8gNCBjaGlsZHJlbi4gKi9cCiAgICAgbWFj
cm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhMb2FkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dEJ5VmFsRGly
ZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQdXRC
eVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oUHV0
QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCkBAIC0yMTcs
NiArMjE4LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIENhbGxz
LiAqL1wKICAgICBtYWNybyhDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1hY3JvKENhbGxWYXJhcmdz
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ2FsbEZvcndh
cmRWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
Q29uc3RydWN0VmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncykgXAogICAgIG1hY3JvKE5hdGl2ZUNvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTUsNiArMTU1LDE3IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxh
dG9yOjpleGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIExvYWRW
YXJhcmdzOiB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJh
cmdzRGF0YSgpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEt
PmNvdW50KSA9CisgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQz
MiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEt
PmxpbWl0OyBpLS07KSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKSA9CisgICAgICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJl
Z2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAxOCw2ICsx
MDE4LDI3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZSgKICAgICBz
ZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgIkV4ZWN1dGVkIE5vdGlmeVdyaXRlIik7CiB9CiAK
K2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFy
Z09mZnNldCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKKyAgICAKKyAgICByZXR1cm4gc2l6ZU9mVmFy
YXJncyhleGVjLCBhcmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKK30KKwordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBm
aXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCBpbnQzMl90
IG9mZnNldCwgaW50MzJfdCBsZW5ndGgsIGludDMyX3QgbWFuZGF0b3J5TWluaW11bSkKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQXJndW1lbnRzKTsKKyAgICAKKyAgICBsb2FkVmFyYXJncyhleGVjLCBWaXJ0dWFsUmVnaXN0
ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOworICAgIAor
ICAgIGZvciAoaW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytpKQor
ICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7Cit9
CisKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBp
bnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTI1LDYgKzEyNSw4IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25NYWtlUm9wZTMKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRh
cmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxlSW5k
ZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRl
Kiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiwgRW5j
b2RlZEpTVmFsdWUpOworaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFy
Z3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFy
QXJnT2Zmc2V0KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVj
U3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50
cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmlt
dW0pOwogCiBpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydEJveGVkRG91Ymxl
VG9JbnQ1MihFbmNvZGVkSlNWYWx1ZSk7CiBpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29udmVydERvdWJsZVRvSW50NTIoZG91YmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDExICsxMzMsMjUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKS5vZmZzZXQoKSkpOwogICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAg
ICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKQorICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHdyaXRlVG9wKCkKICAgICB7CisgICAgICAgIGlm
IChtX25vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSBub3RlIHRoZSB3cml0ZXMgdG8gdGhlIGxvY2FscyB0aGF0IHdpbGwgc3RvcmUgdGhlIGFy
cmF5IGVsZW1lbnRzIGFuZAorICAgICAgICAgICAgLy8gY291bnQuCisgICAgICAgICAgICBMb2Fk
VmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAg
ICAgbV93cml0ZShkYXRhLT5jb3VudCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBk
YXRhLT5saW1pdDsgaS0tOykKKyAgICAgICAgICAgICAgICBtX3dyaXRlKFZpcnR1YWxSZWdpc3Rl
cihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCBmb3Ig
Q2FsbEZvcndhcmRWYXJhcmdzLCBzaW5jZSBpdCByZWFkcworICAgICAgICAvLyBvdXIgYXJndW1l
bnRzIHRoZSBzYW1lIHdheSB0aGF0IGFueSBlZmZlY3RmdWwgdGhpbmcgbWlnaHQuCisgICAgICAg
IAogICAgICAgICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCk7IGktLSA+IDE7KQogICAgICAgICAgICAgICAgIG1fd3JpdGUodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4OSw2ICsx
ODksMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNh
c2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoK
KyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBj
YXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2Ug
TmV3T2JqZWN0OgogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXpl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCisjaW5j
bHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUu
aCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKIApAQCAtNjI0LDM4ICs2MjUsMTY5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEKIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBib29sIGlzQ2FsbCA9IG5vZGUt
Pm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlzQ2FsbCkKLSAgICAgICAgREZHX0FTU0VSVChtX2pp
dC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7Ci0gICAgCi0gICAgLy8g
Rm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2Ug
aGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0LgotICAgIGludCBkdW1teVRoaXNBcmd1
bWVudCA9IGlzQ2FsbCA/IDAgOiAxOworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5
cGU7CisgICAgYm9vbCBpc0NhbGw7CisgICAgYm9vbCBpc1ZhcmFyZ3M7CisgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgY2FzZSBDYWxsOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5r
SW5mbzo6Q2FsbDsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsKKyAgICAgICAgaXNWYXJhcmdzID0g
ZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYWxs
VHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgICAgICBpc0NhbGwgPSBmYWxzZTsK
KyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2Fs
bFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhbGxUeXBl
ID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsKKyAg
ICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFy
YXJnczsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAgIGlzVmFyYXJncyA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIERGR19DUkFTSChtX2ppdC5n
cmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOwogICAg
IAotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBpc0NhbGwgPyBDYWxsTGlu
a0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKKyAgICAvLyBHb3R0YSBsb2Fk
IHRoZSBhcmd1bWVudHMgc29tZWhvdy4gVmFyYXJncyBpcyB0cmlja2llci4KKyAgICBpZiAoaXNW
YXJhcmdzKSB7CisgICAgICAgIC8vIDEpIGdldCB0aGUgYXJndW1lbnRzCisgICAgICAgIC8vIDIp
IGZsdXNoIHJlZ2lzdGVycworICAgICAgICAvLyAzKSBzZXQgdXAgdGhlIGNhbGwgZnJhbWUKKyAg
ICAgICAgLy8gNCkgZ2V0IHRoZSBjYWxsZWUgYW5kICJ0aGlzIiBhbmQgaGFuZGxlIHRoZW0KKyAg
ICAgICAgLy8gNSkgZmx1c2ggcmVnaXN0ZXJzIGFnYWluCisgICAgICAgIAorICAgICAgICBDYWxs
VmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKKworICAgICAgICBH
UFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjE7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzOworICAgICAg
ICAKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAg
ICAgICAgICAvLyBXZSBhdm9pZCBjYWxsaW5nIGZsdXNoUmVnaXN0ZXJzKCkgaW5zaWRlIHRoZSBj
b250cm9sIGZsb3cgb2YgQ2FsbEZvcndhcmRWYXJhcmdzLgorICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXV0byBsb2FkQXJndW1lbnRz
R1BSID0gWyZdIChHUFJSZWcgcmVzZXJ2ZWRHUFIpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQ
UiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKHJlc2VydmVkR1BSKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5l
QXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksCisgICAgICAgICAg
ICAgICAgICAgIGFyZ3VtZW50c0dQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAg
ICAgICBsb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGFyZ3VtZW50
c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRHUFIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgdW5sb2NrKHJlc2VydmVkR1BS
KTsKKyAgICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBzY3JhdGNoR1BSMSA9IEpJVENvbXBpbGVyOjpzZWxlY3RT
Y3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgcmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgc2NyYXRj
aEdQUjIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNHUFIsIHNjcmF0
Y2hHUFIxLCByZXNlcnZlZEdQUik7CisgICAgICAgICAgICBzY3JhdGNoR1BSMyA9IEpJVENvbXBp
bGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hH
UFIyLCByZXNlcnZlZEdQUik7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBsb2FkQXJn
dW1lbnRzR1BSKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCB3ZSBoYXZlIHRoZSB3aG9sZSByZWdpc3RlciBmaWxlIHRvIG91cnNlbHZlcywgYW5kIGFy
Z3VtZW50c0dQUiBoYXMgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gU2VsZWN0
IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgICAgIAorICAgICAgICAvLyBXZSB3aWxsIHVz
ZSBzY3JhdGNoR1BSMiB0byBwb2ludCB0byBvdXIgc3RhY2sgZnJhbWUuCisKKyAgICAgICAgdW5z
aWduZWQgbnVtVXNlZFN0YWNrU2xvdHMgPSBtX2ppdC5ncmFwaCgpLm1fbmV4dE1hY2hpbmVMb2Nh
bDsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVBcmd1bWVudHM7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICAvLyBEbyB0aGUg
aG9ycmlmaWMgZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0aW1pemF0aW9uLgorICAgICAg
ICAgICAgLy8gRklYTUU6IGRvIHRoaXMgb3B0aW1pemF0aW9uIGF0IHRoZSBJUiBsZXZlbCBpbnN0
ZWFkIG9mIGR5bmFtaWNhbGx5IGJ5IHRlc3RpbmcgdGhlCisgICAgICAgICAgICAvLyBhcmd1bWVu
dHMgcmVnaXN0ZXIuIFRoaXMgd2lsbCBoYXBwZW4gb25jZSB3ZSBnZXQgcmlkIG9mIHRoZSBhcmd1
bWVudHMgbGF6eSBjcmVhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGxhenkgdGVhci1vZmYuCisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGls
ZXI6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3RhY2tTbG90cyksIHNjcmF0Y2hHUFIyKTsK
KyAgICAgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKG1faml0LCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dD
YXNlKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiA9IHNjcmF0Y2hHUFIyOworICAgICAgICAgICAg
CisgICAgICAgICAgICBoYXZlQXJndW1lbnRzID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAg
c2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgICAgICB9CisKKyAgICAgICAgREZHX0FTU0VSVCht
X2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBS
aWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVudHNHUFIgYW5kIHRoZSByZWdpc3RlciBm
aWxlIGlzIGZsdXNoZWQuCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c0dQUiwgbnVtVXNl
ZFN0YWNrU2xvdHMsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAg
IC8vIE5vdyB3ZSBoYXZlIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0aGUgY2FsbGVlIGZyYW1lLCBi
dXQgd2UndmUgbG9zdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQuCisgICAgICAgIC8vIFJlY29uc3Ry
dWN0IHRoZSBhcmd1bWVudHMgb3BlcmFuZCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBjYWxsZWUgZnJh
bWUuCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3RhY2tTbG90cyksIHNjcmF0
Y2hHUFIxKTsKKyAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShtX2ppdCwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIGZhbHNlLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjEpOworICAgICAgICBt
X2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2
b2lkKikpKSksIHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXR1cFZhcmFyZ3NG
cmFtZSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIxLCBhcmd1bWVudHNHUFIs
IGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAg
ICAgICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIG1f
aml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVzdWx0
R1BSLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAg
ICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAgICAg
IAorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBhcmd1bWVudHMgYXJyYXkgYW55bW9yZS4K
KyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICAg
ICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0NhbGwpIHsK
KyAgICAgICAgICAgIC8vIE5vdyBzZXQgdXAgdGhlICJ0aGlzIiBhcmd1bWVudC4KKyAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNBcmd1bWVudCh0aGlzLCBub2RlLT5vcCgpID09IENhbGxG
b3J3YXJkVmFyYXJncyA/IG5vZGUtPmNoaWxkMigpIDogbm9kZS0+Y2hpbGQzKCkpOworICAgICAg
ICAgICAgR1BSUmVnIHRoaXNBcmd1bWVudEdQUiA9IHRoaXNBcmd1bWVudC5ncHIoKTsKKyAgICAg
ICAgICAgIHRoaXNBcmd1bWVudC51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NCh0aGlzQXJndW1lbnRHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFNs
b3QoMCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRm9yIGNvbnN0cnVj
dG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtl
IHNwYWNlCisgICAgICAgIC8vIGZvciBpdC4KKyAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50
ID0gaXNDYWxsID8gMCA6IDE7CiAgICAgCi0gICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3Jh
cGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKV07Ci0gICAgLy8gVGhlIGNh
bGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247IHRoZSBzdWJzZXF1
ZW50IGNoaWxkcmVuIGFyZSB0aGUKLSAgICAvLyBhcmd1bWVudHMuCi0gICAgaW50IG51bVBhc3Nl
ZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgLy8gVGhlIGNhbGwgaW5z
dHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247IHRoZSBzdWJzZXF1ZW50IGNo
aWxkcmVuIGFyZSB0aGUKKyAgICAgICAgLy8gYXJndW1lbnRzLgorICAgICAgICBpbnQgbnVtUGFz
c2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogICAgIAotICAgIGludCBudW1Bcmdz
ID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OworICAgICAgICBpbnQgbnVtQXJn
cyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKICAgICAKLSAgICBtX2ppdC5z
dG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyksIG1faml0LmNhbGxl
ZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgICAgICBtX2pp
dC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyksIEpJVENvbXBp
bGVyOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAg
ICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAg
ICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmly
c3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJn
RWRnZSk7Ci0gICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7Ci0gICAgICAgIHVzZShh
cmdFZGdlKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKysp
IHsKKyAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGls
ZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcodGhpcywgYXJnRWRnZSk7CisgICAgICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJn
LmdwcigpOworICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQuc3RvcmU2NChhcmdHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50U2xvdChpICsgZHVtbXlUaGlz
QXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BSLCBKSVRDb21waWxl
cjo6Y2FsbGVlQXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICB9
CiAgICAgfQogCiAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwog
ICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0gICAgdXNlKGNhbGxlZUVkZ2Up
OwotICAgIG1faml0LnN0b3JlNjQoY2FsbGVlR1BSLCBtX2ppdC5jYWxsZWVGcmFtZVNsb3QoSlNT
dGFjazo6Q2FsbGVlKSk7CisgICAgY2FsbGVlLnVzZSgpOworICAgIG1faml0LnN0b3JlNjQoY2Fs
bGVlR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlZSkpOwog
ICAgIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKQEAgLTY5Miw2ICs4MjQsMTAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIGNhbGxMaW5rSW5mby0+Y2Fs
bGVlR1BSID0gY2FsbGVlR1BSOwogICAgIAogICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwg
c2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7CisgICAgCisgICAgLy8gSWYg
d2Ugd2VyZSB2YXJhcmdzLCB0aGVuIGFmdGVyIHRoZSBjYWxscyBhcmUgZG9uZSwgd2UgbmVlZCB0
byByZWVzdGFibGlzaCBvdXIgc3RhY2sgcG9pbnRlci4KKyAgICBpZiAoaXNWYXJhcmdzKQorICAg
ICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmdyYXBoKCkuc3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKIC8vIENsYW5nIHNob3Vs
ZCBhbGxvdyB1bnJlYWNoYWJsZSBbW2NsYW5nOjpmYWxsdGhyb3VnaF1dIGluIHRlbXBsYXRlIGZ1
bmN0aW9ucyBpZiBhbnkgdGVtcGxhdGUgZXhwYW5zaW9uIHVzZXMgaXQKQEAgLTQyMzEsOSArNDM2
Nyw1MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBj
YXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAg
ICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAg
ICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2Fz
ZSBMb2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7
CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHMuZ3By
KCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNldCk7CisgICAgICAgIAorICAg
ICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgeworICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgdW5sb2NrKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0
aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlz
IGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRl
Z3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCisgICAg
ICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3
ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAorICAgICAgICAvLyBw
YXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisg
ICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2pp
dC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAorICAgICAgICAgICAg
ICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0
LnN0b3JlMzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Mb2FkVmFyYXJncywgZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVu
dHNHUFIsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRh
dG9yeU1pbmltdW0pOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOiB7CiAg
ICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKQEAgLTQzMzgsOSArNDUxNywyMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBERkdfQVNT
RVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSwKKyAgICAgICAgICAgICAgICBy
ZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVn
aXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwor
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50
Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KICAgICAgICAgaW50MzJSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDM1NCwyMCArNDU0
NCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAgICAgICBtX2ppdC5ncmFw
aCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7
CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKAogICAgICAgICAgICAgICAg
IEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKSwKICAgICAgICAgICAgICAgICBy
ZXN1bHRHUFIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAg
ICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNT
dGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVz
dWx0R1BSKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IHRoZSBzbG93
IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2FyZCBzcGVjdWxhdGlvbiB0aGF0
IHRoZQotICAgICAgICAvLyByZXN1bHQgaXMgYW4gaW50ZWdlci4gRm9yIG5vdyB3ZSBwb3N0cG9u
ZSB0aGUgc3BlY3VsYXRpb24gYnkgaGF2aW5nIHRoaXMgcmV0dXJuCi0gICAgICAgIC8vIGEgSlNW
YWx1ZS4KLSAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIGNyZWF0ZWQsIHRoaXMsIG9wZXJhdGlv
bkdldEFyZ3VtZW50c0xlbmd0aCwgcmVzdWx0R1BSLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU3OCw3ICs1NzgsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgLy8gVXNlZCB0byBBU1NFUlQgZmx1c2hSZWdpc3Rl
cnMoKSBoYXMgYmVlbiBjYWxsZWQgcHJpb3IgdG8KICAgICAvLyBjYWxsaW5nIG91dCBmcm9tIEpJ
VCBjb2RlIHRvIGEgQyBoZWxwZXIgZnVuY3Rpb24uCiAgICAgYm9vbCBpc0ZsdXNoZWQoKQpAQCAt
NTkzLDcgKzU5Miw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9Ci0jZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQoTm9kZSogbm9kZSkKQEAgLTEx
MDksNiArMTEwNywyNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWlogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQgYXJnMiwgdW5zaWduZWQgYXJnMykKKyAg
ICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVz
dGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSk7CisgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAg
ICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihGX0pJVE9wZXJhdGlvbl9F
RkpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
dW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbTMyKGFyZzMpLCBhcmc0
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCB1bnNpZ25lZCBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSk7CisgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJh
dGlvbl9FWkpaWlogb3BlcmF0aW9uLCB1bnNpZ25lZCBhcmcxLCBHUFJSZWcgYXJnMiwgdW5zaWdu
ZWQgYXJnMywgR1BSUmVnIGFyZzQsIHVuc2lnbmVkIGFyZzUpCisgICAgeworICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpLCBhcmcyLCBU
cnVzdGVkSW1tMzIoYXJnMyksIGFyZzQsIFRydXN0ZWRJbW0zMihhcmc1KSk7CisgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgTm9SZXN1bHRUYWcpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5j
cHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Rh
Y2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgog
ICAgICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxl
Y3QgdGhvc2UgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgZnJvbSBJUi4KLSAgICAgICAgYm9vbCBo
YXNHZXRMb2NhbFVubGlua2VkID0gZmFsc2U7CisgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVl
ZEZpeHVwID0gZmFsc2U7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9n
cmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFi
bG9jaykKQEAgLTgxLDcgKzgxLDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KG9wZXJhbmQudG9Mb2NhbCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaGFzR2V0TG9jYWxVbmxpbmtlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICAgICAgICAgICAgICBMb2Fk
VmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGRhdGEtPmNvdW50LmlzTG9jYWwoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZWRMb2NhbHMuc2V0KGRhdGEtPmNvdW50LnRvTG9jYWwoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVzIG9uIHRoZSBjb250aWd1aXR5IG9mIHN0YWNr
IGxheW91dAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWdubWVudHMuCisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNl
dCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5v
ZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIH0gLy8gdGhlIGVs
c2UgY2FzZSBzaG91bGRuJ3QgaGFwcGVuLgorICAgICAgICAgICAgICAgICAgICBoYXNOb2Rlc1Ro
YXROZWVkRml4dXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTEzLDYgKzEyOCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChhcmd1bWVudHNSZWdpc3Rlci50b0xvY2Fs
KCkpOwogICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lz
dGVyKGFyZ3VtZW50c1JlZ2lzdGVyKS50b0xvY2FsKCkpOwogICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAg
IHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICAgICAgSlNT
dGFjazo6QXJndW1lbnRDb3VudCArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9j
YWwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGFyZ3Vt
ZW50LS0gPiAxOykgewogICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdp
c3RlcigKICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJn
dW1lbnQpLm9mZnNldCgpICsKQEAgLTE0OCwyNCArMTY4LDIxIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2Nh
bCgpID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlv
blt2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCldKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5t
YWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJsZS0+bG9jYWwoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50
cygpKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW2NvZGVC
bG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpLnRvTG9jYWwoKV0pOworICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0KKyAgICAgICAgICAgICAgICBhc3NpZ24o
YWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoYWxsb2NhdGlvblsKLSAgICAgICAgICAgICAgICAgICAgdW5tb2RpZmllZEFyZ3VtZW50c1Jl
Z2lzdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCktPmFyZ3VtZW50c1Jl
Z2lzdGVyKCkpLnRvTG9jYWwoKV0pCisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24s
IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0
ZXIoKSkpCiAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFy
Z3VtZW50c1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0QXJndW1lbnRz
UmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBpZiAoY29kZUJsb2NrKCktPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpLmlzVmFsaWQo
KSkgewogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldEFjdGl2YXRpb25SZWdpc3RlcigKLSAg
ICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW2NvZGVCbG9j
aygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS50b0xvY2FsKCldKSk7CisgICAgICAgICAgICAgICAg
YXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIHJlZ2lzdGVyIGlzIG5ldmVyIHZh
bGlkIGZvciBERkcgY29kZSBibG9ja3MuCkBAIC0xNzYsMTUgKzE5MywxOSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5l
Q2FsbEZyYW1lOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5leGVjdXRhYmxlLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0g
ICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZv
cihpbmxpbmVDYWxsRnJhbWUpLnRvTG9jYWwoKV0pOworICAgICAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSBhc3NpZ24oCisgICAgICAgICAgICAgICAgICAg
IGFsbG9jYXRpb24sIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1l
KSk7CiAKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKLSAgICAgICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblt1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKGlubGluZUNhbGxGcmFtZSkpLnRvTG9jYWwoKV0pCisgICAgICAgICAgICAgICAgICAg
IGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5h
cmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKSkKICAgICAgICAgICAgICAgICAg
ICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgICAgICBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbigKKyAgICAgICAgICAg
ICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykgewogICAgICAgICAgICAg
ICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRp
b25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50UG9zaXRpb25TdGFydCArIGFy
Z3VtZW50XTsKQEAgLTIyNyw5ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IHN5bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKTsKICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCk7IGktLTspIHsKICAgICAgICAg
ICAgICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXSA9IHNsb3dBcmd1bWVudHNbaV07Ci0gICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoc2xv
d0FyZ3VtZW50c1tpXS5pbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWcuaXNMb2Nh
bCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bcmVnLnRvTG9jYWwoKV0pLm9mZnNl
dCgpOworICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmluZGV4ID0gYXNz
aWduKGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1lbnRzW2ldLmluZGV4KSku
b2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5tX3Nsb3dBcmd1bWVudHMgPSBXVEY6Om1vdmUobmV3U2xvd0FyZ3VtZW50cyk7
CkBAIC0yMzcsNyArMjU2LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyBGaXggR2V0TG9jYWxVbmxpbmtlZCdzIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi0gICAgICAg
IGlmIChoYXNHZXRMb2NhbFVubGlua2VkKSB7CisgICAgICAgIGlmIChoYXNOb2Rlc1RoYXROZWVk
Rml4dXApIHsKICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgICAgICBp
ZiAoIWJsb2NrKQpAQCAtMjQ2LDEwICsyNjUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExv
Y2FsVW5saW5rZWQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
bmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW29wZXJhbmQudG9Mb2NhbCgp
XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1hY2hpbmVMb2Nh
bChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFVubGlua2VkTWFj
aGluZUxvY2FsKGFzc2lnbihhbGxvY2F0aW9uLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJn
czogeworICAgICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNo
aW5lQ291bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+Y291bnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEt
PnN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI2Miw2ICsyODUsMjAgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCitwcml2YXRlOgor
ICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2Nh
dGlvbiwgVmlydHVhbFJlZ2lzdGVyIHNyYykKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQgPSBzcmM7CisgICAgICAgIGlmIChyZXN1bHQuaXNMb2NhbCgpKSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9uW3Jlc3VsdC50b0xvY2FsKCld
OworICAgICAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24p
OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogfTsKIAogYm9vbCBw
ZXJmb3JtU3RhY2tMYXlvdXQoR3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiAr
NDU1LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9
IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU2V0
QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQuIEl0J3Mgb2sgdG8gaGF2
ZSBhIHNlY29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2FtZQorICAgICAgICAgICAg
ICAgICAgICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudCBmb3IgdGhhdCBsb2NhbC4K
KyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJy
ZXZpYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YmJyZXZpYXRpb25zLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw5IEBA
IHN0YXRpYyBpbmxpbmUgTFR5cGUgc3RydWN0VHlwZShMQ29udGV4dCAKICAgICByZXR1cm4gc3Ry
dWN0VHlwZShjb250ZXh0LCBlbGVtZW50cywgMiwgcGFja2luZyk7CiB9CiAKKy8vIEZJWE1FOiBN
YWtlIHRoZSBWYXJpYWRpY2l0eSBhcmd1bWVudCBub3QgYmUgdGhlIGxhc3QgYXJndW1lbnQgdG8g
ZnVuY3Rpb25UeXBlKCkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uCisvLyBjYW4gdXNlIEMrKzExIHZh
cmlhZGljIHRlbXBsYXRlcworLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTU3NQogZW51bSBWYXJpYWRpY2l0eSB7IE5vdFZhcmlhZGljLCBWYXJpYWRpYyB9Owog
c3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgY29uc3Qg
TFR5cGUqIHBhcmFtVHlwZXMsIHVuc2lnbmVkIHBhcmFtQ291bnQsIFZhcmlhZGljaXR5IHZhcmlh
ZGljaXR5KQogewpAQCAtMTEwLDYgKzExMywxNiBAQCBzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0
aW9uVHlwZShMVHlwZSByCiAgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFt
MiwgcGFyYW0zLCBwYXJhbTQgfTsKICAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUs
IHBhcmFtVHlwZXMsIDQsIHZhcmlhZGljaXR5KTsKIH0KK3N0YXRpYyBpbmxpbmUgTFR5cGUgZnVu
Y3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIExUeXBlIHBhcmFtMSwgTFR5cGUgcGFyYW0yLCBM
VHlwZSBwYXJhbTMsIExUeXBlIHBhcmFtNCwgTFR5cGUgcGFyYW01LCBWYXJpYWRpY2l0eSB2YXJp
YWRpY2l0eSA9IE5vdFZhcmlhZGljKQoreworICAgIExUeXBlIHBhcmFtVHlwZXNbXSA9IHsgcGFy
YW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJhbTUgfTsKKyAgICByZXR1cm4gZnVuY3Rp
b25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDUsIHZhcmlhZGljaXR5KTsKK30KK3N0YXRp
YyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIExUeXBlIHBhcmFt
MSwgTFR5cGUgcGFyYW0yLCBMVHlwZSBwYXJhbTMsIExUeXBlIHBhcmFtNCwgTFR5cGUgcGFyYW01
LCBMVHlwZSBwYXJhbTYsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCit7
CisgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJh
bTQsIHBhcmFtNSwgcGFyYW02IH07CisgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBl
LCBwYXJhbVR5cGVzLCA2LCB2YXJpYWRpY2l0eSk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgTFR5cGUg
dHlwZU9mKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbGx2bS0+VHlwZU9mKHZhbHVlKTsgfQogCkBA
IC0yOTgsNDEgKzMxMSwxMyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxk
ZXIgCiB7CiAgICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgJmFyZzEsIDEp
OwogfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExW
YWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKQotewotICAgIExWYWx1ZSBh
cmdzW10gPSB7IGFyZzEsIGFyZzIgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1
bmN0aW9uLCBhcmdzLCAyKTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVp
bGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwg
TFZhbHVlIGFyZzMpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMyB9
OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDMpOwotfQot
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBm
dW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFy
ZzQpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRl
ciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBBcmdzLi4uIGFyZ3MpCiB7
Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCB9OwotICAgIHJl
dHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDQpOwotfQotc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwg
TFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1
ZSBhcmc1KQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQs
IGFyZzUgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA1
KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBM
VmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExW
YWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYpCi17Ci0gICAgTFZhbHVlIGFyZ3Nb
XSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiB9OwotICAgIHJldHVybiBi
dWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDYpOwotfQotc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVl
IGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1
LCBMVmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJn
MSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyB9OwotICAgIHJldHVybiBidWls
ZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDcpOwotfQotc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFy
ZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBM
VmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcsIExWYWx1ZSBhcmc4KQotewotICAgIExWYWx1ZSBhcmdz
W10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzggfTsK
LSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA4KTsKKyAgICBM
VmFsdWUgYXJnc0FycmF5W10gPSB7IGFyZzEsIGFyZ3MuLi4gfTsKKyAgICByZXR1cm4gYnVpbGRD
YWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzQXJyYXksIHNpemVvZihhcmdzQXJyYXkpIC8gc2l6
ZW9mKExWYWx1ZSkpOwogfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25DYWxs
aW5nQ29udmVudGlvbihMVmFsdWUgaW5zdHJ1Y3Rpb24sIExDYWxsQ29udiBjYWxsaW5nQ29udmVu
dGlvbikgeyBsbHZtLT5TZXRJbnN0cnVjdGlvbkNhbGxDb252KGluc3RydWN0aW9uLCBjYWxsaW5n
Q29udmVudGlvbik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRXh0cmFjdFZhbHVlKExC
dWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBs
bHZtLT5CdWlsZEV4dHJhY3RWYWx1ZShidWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7IH0KIHN0
YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU2VsZWN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBj
b25kaXRpb24sIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBsbHZtLT5C
dWlsZFNlbGVjdChidWlsZGVyLCBjb25kaXRpb24sIHRha2VuLCBub3RUYWtlbiwgIiIpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIwLDYgKzEyMCwxMCBAQCBpbmxpbmUgQ2Fw
YWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRo
TnVsbENoZWNrOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNl
IENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29u
c3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgTmF0aXZlQ2Fs
bDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTc5
OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0
IFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAogICoKQEAgLTEyOCw2ICsxMjgsMjAgQEAgc3RhdGljIHZvaWQgZHVtcERhdGFTZWN0
aW9uKERhdGFTZWN0aW9uKgogICAgIH0KIH0KIAorc3RhdGljIGludCBvZmZzZXRPZlN0YWNrUmVn
aW9uKFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXAsIHVpbnQzMl90IHN0YWNrbWFwSUQp
Cit7CisgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChzdGFja21hcElEKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVyICE9IHJlY29yZE1hcC5l
bmQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWUuc2l6ZSgpID09IDEpOworICAg
IFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlWzBdLmxvY2F0aW9ucy5zaXplKCkgPT0gMSk7Cisg
ICAgTG9jYXRpb24gY2FwdHVyZWRMb2NhdGlvbiA9CisgICAgICAgIExvY2F0aW9uOjpmb3JTdGFj
a21hcHMobnVsbHB0ciwgaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zWzBdKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChjYXB0dXJlZExvY2F0aW9uLmtpbmQoKSA9PSBMb2NhdGlvbjo6UmVnaXN0ZXIpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24uZ3ByKCkgPT0gR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKCEoY2FwdHVyZWRMb2NhdGlvbi5h
ZGRlbmQoKSAlIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICByZXR1cm4gY2FwdHVyZWRMb2NhdGlv
bi5hZGRlbmQoKSAvIHNpemVvZihSZWdpc3Rlcik7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIERl
c2NyaXB0b3JUeXBlPgogdm9pZCBnZW5lcmF0ZUlDRmFzdFBhdGgoCiAgICAgU3RhdGUmIHN0YXRl
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rp
b24sCkBAIC0yNDMsNiArMjU3LDMyIEBAIHN0YXRpYyBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
Rm9yKGNvbnMKICAgICByZXR1cm4gUmVnaXN0ZXJTZXQocmVjb3JkLnVzZWRSZWdpc3RlclNldCgp
LCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgQ2FsbFR5cGU+Cit2b2lkIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoVmVjdG9yPENh
bGxUeXBlPiYgY2FsbHMsIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXApCit7CisgICAg
Ly8gSGFuZGxpbmcgSlMgY2FsbHMgaXMgd2VpcmQ6IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ug
c29ydCB0aGVtIGJ5IHRoZSBQQyBpbiBMTFZNCisgICAgLy8gZ2VuZXJhdGVkIGNvZGUuIFRoYXQg
aW1wbGllcyBmaXJzdCBwcnVuaW5nIHRoZSBvbmVzIHRoYXQgTExWTSBkaWRuJ3QgZ2VuZXJhdGUu
CisKKyAgICBWZWN0b3I8Q2FsbFR5cGU+IG9sZENhbGxzOworICAgIG9sZENhbGxzLnN3YXAoY2Fs
bHMpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDYWxscy5zaXplKCk7
ICsraSkgeworICAgICAgICBDYWxsVHlwZSYgY2FsbCA9IG9sZENhbGxzW2ldOworICAgICAgICAK
KyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7CisgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5l
bmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBD
YWxsVHlwZSBjb3B5ID0gY2FsbDsKKyAgICAgICAgICAgIGNvcHkubV9pbnN0cnVjdGlvbk9mZnNl
dCA9IGl0ZXItPnZhbHVlW2pdLmluc3RydWN0aW9uT2Zmc2V0OworICAgICAgICAgICAgY2FsbHMu
YXBwZW5kKGNvcHkpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjpzb3J0KGNhbGxzLmJl
Z2luKCksIGNhbGxzLmVuZCgpKTsKK30KKwogc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9u
U3RhY2tNYXBzKAogICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENv
ZGUqIGppdENvZGUsIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uLAogICAgIFN0
YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXAsIGJvb2wgZGlkU2VlVW53aW5kSW5mbykKQEAg
LTI1MSwxNiArMjkxLDE0IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFw
cygKICAgICBWTSYgdm0gPSBncmFwaC5tX3ZtOwogICAgIFN0YWNrTWFwcyBzdGFja21hcHMgPSBq
aXRDb2RlLT5zdGFja21hcHM7CiAgICAgCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpOwotICAg
IFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+
dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsKLSAgICBMb2NhdGlvbiBjYXB0dXJlZExv
Y2F0aW9uID0KLSAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFwcygmaml0Q29kZS0+c3RhY2tt
YXBzLCBpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnNbMF0pOwotICAgIFJFTEVBU0VfQVNTRVJUKGNh
cHR1cmVkTG9jYXRpb24ua2luZCgpID09IExvY2F0aW9uOjpSZWdpc3Rlcik7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUg
c2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgIGludDMyX3QgbG9jYWxzT2Zmc2V0ID0gY2FwdHVyZWRM
b2NhdGlvbi5hZGRlbmQoKSAvIHNpemVvZihSZWdpc3RlcikgKyBncmFwaC5tX25leHRNYWNoaW5l
TG9jYWw7CisgICAgaW50IGxvY2Fsc09mZnNldCA9CisgICAgICAgIG9mZnNldE9mU3RhY2tSZWdp
b24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpICsgZ3JhcGgubV9uZXh0TWFj
aGluZUxvY2FsOworICAgIAorICAgIGludCB2YXJhcmdzU3BpbGxTbG90c09mZnNldDsKKyAgICBp
ZiAoc3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEICE9IFVJTlRfTUFYKQorICAgICAg
ICB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFw
LCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpOworICAgIGVsc2UKKyAgICAgICAg
dmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQgPSAwOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9
IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0tOykgewogICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRh
W2ldLmlubGluZUNhbGxGcmFtZTsKQEAgLTMzNiw3ICszNzQsNyBAQCBzdGF0aWMgdm9pZCBmaXhG
dW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIE9TUiBzdGFj
a21hcCAjIiwgZXhpdC5tX3N0YWNrbWFwSUQsICIgZm9yICIsIGV4aXQubV9jb2RlT3JpZ2luLCAi
XG4iKTsKIAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5kKGV4aXQubV9zdGFja21h
cElEKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKGV4aXQubV9zdGFj
a21hcElEKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgewogICAg
ICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMzc1LDcgKzQxMyw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRP
blN0YWNrTWFwcygKICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkp
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgR2V0QnlJZCBzdGFja21hcCAjIiwg
Z2V0QnlJZC5zdGFja21hcElEKCksICJcbiIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
dGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElEKCkpOworICAgICAgICAgICAg
YXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElEKCkpOwogICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
SXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00MTIs
NyArNDUwLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAg
ICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJIYW5kbGluZyBQdXRCeUlkIHN0YWNrbWFwICMiLCBwdXRCeUlkLnN0YWNrbWFw
SUQoKSwgIlxuIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChwdXRCeUlkLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNv
cmRNYXAuZmluZChwdXRCeUlkLnN0YWNrbWFwSUQoKSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9
PSByZWNvcmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVk
IG91dC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ0NCwxNCArNDgyLDEzIEBAIHN0
YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuY2hlY2tJbnMuc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBDaGVja0luRGVzY3JpcHRvciYgY2hlY2tJbiA9IHN0
YXRlLmNoZWNrSW5zW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIGNo
ZWNrSW4gc3RhY2ttYXAgIyIsIGNoZWNrSW4uc3RhY2ttYXBJRCgpLCAiXG4iKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5kKGNoZWNrSW4uc3RhY2ttYXBJ
RCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKGNoZWNrSW4uc3Rh
Y2ttYXBJRCgpKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgewog
ICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtNDgwLDcgKzUxNyw2IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFz
ZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBjaGVja0luLm1fZ2VuZXJhdG9ycy5hcHBl
bmQoQ2hlY2tJbkdlbmVyYXRvcihzdHViSW5mbywgc2xvd0NhbGwsIGJlZ2luKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLQogICAgICAgICAKICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0Lmxp
bmsoJnNsb3dQYXRoSklUKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9u
SnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsKQEAgLTUwMywyOSArNTM5LDExIEBAIHN0YXRpYyB2
b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhdGUuY2hlY2tJbnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBnZW5lcmF0ZUNo
ZWNrSW5JQ0Zhc3RQYXRoKAogICAgICAgICAgICAgICAgIHN0YXRlLCBjb2RlQmxvY2ssIGdlbmVy
YXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0YXRlLmNoZWNrSW5zW2ldLAotICAgICAgICAgICAg
ICAgIHNpemVPZkNoZWNrSW4oKSk7IAorICAgICAgICAgICAgICAgIHNpemVPZkluKCkpOyAKICAg
ICAgICAgfSAKICAgICB9CiAgICAgCi0gICAgLy8gSGFuZGxpbmcgSlMgY2FsbHMgaXMgd2VpcmQ6
IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugc29ydCB0aGVtIGJ5IHRoZSBQQyBpbiBMTFZNCi0g
ICAgLy8gZ2VuZXJhdGVkIGNvZGUuIFRoYXQgaW1wbGllcyBmaXJzdCBwcnVuaW5nIHRoZSBvbmVz
IHRoYXQgTExWTSBkaWRuJ3QgZ2VuZXJhdGUuCi0gICAgVmVjdG9yPEpTQ2FsbD4gb2xkQ2FsbHMg
PSBzdGF0ZS5qc0NhbGxzOwotICAgIHN0YXRlLmpzQ2FsbHMucmVzaXplKDApOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDYWxscy5zaXplKCk7ICsraSkgewotICAgICAgICBKU0Nh
bGwmIGNhbGwgPSBvbGRDYWxsc1tpXTsKLSAgICAgICAgCi0gICAgICAgIFN0YWNrTWFwczo6UmVj
b3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2FsbC5zdGFja21hcElEKCkp
OwotICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaXRlci0+dmFsdWUuc2l6
ZSgpOyArK2opIHsKLSAgICAgICAgICAgIEpTQ2FsbCBjb3B5ID0gY2FsbDsKLSAgICAgICAgICAg
IGNvcHkubV9pbnN0cnVjdGlvbk9mZnNldCA9IGl0ZXItPnZhbHVlW2pdLmluc3RydWN0aW9uT2Zm
c2V0OwotICAgICAgICAgICAgc3RhdGUuanNDYWxscy5hcHBlbmQoY29weSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgc3RkOjpzb3J0KHN0YXRlLmpzQ2FsbHMuYmVnaW4oKSwgc3RhdGUu
anNDYWxscy5lbmQoKSk7CisgICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0Nh
bGxzLCByZWNvcmRNYXApOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2Fs
bHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNb
aV07CkBAIC01NDcsOSArNTY1LDMyIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0
YWNrTWFwcygKICAgICAgICAgY2FsbC5saW5rKHZtLCBsaW5rQnVmZmVyKTsKICAgICB9CiAgICAg
CisgICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxWYXJhcmdzZXMsIHJl
Y29yZE1hcCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuanNDYWxsVmFyYXJn
c2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICBKU0NhbGxWYXJhcmdzJiBjYWxsID0gc3RhdGUu
anNDYWxsVmFyYXJnc2VzW2ldOworICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQ
YXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0KGZhc3RQYXRoSklULCBn
cmFwaCwgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgY2hhciog
c3RhcnRPZklDID0gYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyBjYWxs
Lm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIHNpemVfdCBzaXplT2ZJQyA9IHNpemVPZklD
Rm9yKGNhbGwubm9kZSgpKTsKKworICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGZh
c3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDKTsKKyAgICAgICAgaWYgKCFsaW5rQnVmZmVy
LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiRmFpbGVkIHRvIGluc2VydCBpbmxp
bmUgY2FjaGUgZm9yIHZhcmFyZ3MgY2FsbCBiZWNhdXNlIHdlIHRob3VnaHQgdGhlIHNpemUgd291
bGQgYmUgIiwgc2l6ZU9mSUMsICIgYnV0IGl0IGVuZGVkIHVwIGJlaW5nICIsIGZhc3RQYXRoSklU
Lm1fYXNzZW1ibGVyLmNvZGVTaXplKCksICIgcHJpb3IgdG8gY29tcGFjdGlvbi5cbiIpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMoCisg
ICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5rQnVmZmVyLnNpemUoKSwgc2l6ZU9mSUMgLSBsaW5r
QnVmZmVyLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZm
ZXIsIHN0YXRlLmZpbmFsaXplci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9p
bnQoKSk7CisgICAgfQorICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwogCi0gICAgaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YXRlLmhhbmRsZVN0YWNrT3Zl
cmZsb3dFeGNlcHRpb25TdGFja21hcElEKTsKKyAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmlu
ZChzdGF0ZS5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCk7CiAgICAgLy8g
SXQncyBzb3J0IG9mIHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1i
YW5kIGV4Y2VwdGlvbiBoYW5kbGluZwogICAgIC8vIHBhdGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1
bmN0aW9ucy4KICAgICBpZiAoaXRlciAhPSByZWNvcmRNYXAuZW5kKCkpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMSArMjgsMTQgQEAKIAogI2lmIEVOQUJM
RShGVExfSklUKQogCisjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkpJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCit1c2luZyBuYW1lc3BhY2UgREZHOworCiAvLyBUaGUg
ZGVmYXVsdCBzaXplcyBhcmUgeDg2LTY0LXNwZWNpZmljLCBhbmQgd2VyZSBmb3VuZCBlbXBpcmlj
YWxseS4gVGhleSBoYXZlIHRvIGNvdmVyIHRoZSB3b3JzdAogLy8gcG9zc2libGUgY29tYmluYXRp
b24gb2YgcmVnaXN0ZXJzIGxlYWRpbmcgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgZW5jb2Rpbmcg
b2YgZWFjaCBpbnN0cnVjdGlvbiBpbgogLy8gdGhlIElDLgpAQCAtNjEsMTcgKzY0LDM0IEBAIHNp
emVfdCBzaXplT2ZQdXRCeUlkKCkKICNlbmRpZgogfQogCi1zaXplX3Qgc2l6ZU9mQ2hlY2tJbigp
CitzaXplX3Qgc2l6ZU9mQ2FsbCgpCiB7CiAjaWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiA0Owor
ICAgIHJldHVybiA1NjsKICNlbHNlCi0gICAgcmV0dXJuIDU7IAorICAgIHJldHVybiA1MzsKICNl
bmRpZgogfQogCitzaXplX3Qgc2l6ZU9mQ2FsbFZhcmFyZ3MoKQoreworI2lmIENQVShBUk02NCkK
KyAgICByZXR1cm4gNTY7CisjZWxzZQorICAgIHJldHVybiA1MzsKKyNlbmRpZgorfQogCi1zaXpl
X3Qgc2l6ZU9mQ2FsbCgpCitzaXplX3Qgc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCkKK3sKKyNp
ZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDU2OworI2Vsc2UKKyAgICByZXR1cm4gMzY0OworI2Vu
ZGlmCit9CisKK3NpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCkKIHsKICNpZiBDUFUoQVJN
NjQpCiAgICAgcmV0dXJuIDU2OwpAQCAtODAsNiArMTAwLDM4IEBAIHNpemVfdCBzaXplT2ZDYWxs
KCkKICNlbmRpZgogfQogCitzaXplX3Qgc2l6ZU9mSW4oKQoreworI2lmIENQVShBUk02NCkKKyAg
ICByZXR1cm4gNDsKKyNlbHNlCisgICAgcmV0dXJuIDU7IAorI2VuZGlmCit9CisKK3NpemVfdCBz
aXplT2ZJQ0ZvcihOb2RlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
IGNhc2UgR2V0QnlJZDoKKyAgICAgICAgcmV0dXJuIHNpemVPZkdldEJ5SWQoKTsKKyAgICBjYXNl
IFB1dEJ5SWQ6CisgICAgICAgIHJldHVybiBzaXplT2ZQdXRCeUlkKCk7CisgICAgY2FzZSBDYWxs
OgorICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbCgpOworICAg
IGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIHJldHVybiBzaXplT2ZDYWxsVmFyYXJncygpOwor
ICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbEZv
cndhcmRWYXJhcmdzKCk7CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICByZXR1
cm4gc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpOworICAgIGNhc2UgSW46CisgICAgICAgIHJldHVy
biBzaXplT2ZJbigpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30K
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXpl
LmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5s
aW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEyICsyOCwyMyBAQAogCiAjaWYgRU5B
QkxFKEZUTF9KSVQpCiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKK25hbWVzcGFj
ZSBKU0MgeworCituYW1lc3BhY2UgREZHIHsKK3N0cnVjdCBOb2RlOworfQorCituYW1lc3BhY2Ug
RlRMIHsKIAogc2l6ZV90IHNpemVPZkdldEJ5SWQoKTsKIHNpemVfdCBzaXplT2ZQdXRCeUlkKCk7
CiBzaXplX3Qgc2l6ZU9mQ2FsbCgpOwotc2l6ZV90IHNpemVPZkNoZWNrSW4oKTsKK3NpemVfdCBz
aXplT2ZDYWxsVmFyYXJncygpOworc2l6ZV90IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOwor
c2l6ZV90IHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsKK3NpemVfdCBzaXplT2ZJbigpOworCitz
aXplX3Qgc2l6ZU9mSUNGb3IoREZHOjpOb2RlKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0
b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5z
aWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk3LDEw
ICs5NywxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oVl9K
SVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBc
CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGlu
dFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VWd3NKLCBmdW5jdGlv
blR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJ
VE9wZXJhdGlvbl9FWkpaWlosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnQzMiwg
aW50NjQsIGludDMyLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
SiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCkpIFwKICAgICBtYWNybyhWX0pJVE9wZXJh
dGlvbl9aLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklU
T3BlcmF0aW9uX0QsIGZ1bmN0aW9uVHlwZShpbnQzMiwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNy
byhaX0pJVE9wZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGludFB0cikp
CisgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRy
LCBpbnRQdHIpKSBcCisgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUpaLCBmdW5jdGlvblR5cGUo
aW50MzIsIGludFB0ciwgaW50NjQsIGludDMyKSkKICAgICAKIGNsYXNzIEludHJpbnNpY1JlcG9z
aXRvcnkgOiBwdWJsaWMgQ29tbW9uVmFsdWVzIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQCBKU0NhbGw6OkpTQ2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBOb2RlCiAgICAgLCBt
X3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKICAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKIHsK
KyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDYWxsIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordXNp
bmcgbmFtZXNwYWNlIERGRzsKKwogSlNDYWxsQmFzZTo6SlNDYWxsQmFzZSgpCiAgICAgOiBtX3R5
cGUoQ2FsbExpbmtJbmZvOjpOb25lKQogICAgICwgbV9jYWxsTGlua0luZm8obnVsbHB0cikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIExp
bmtCdWZmZXI7CiAKK25hbWVzcGFjZSBERkcgeworc3RydWN0IE5vZGU7Cit9CisKIG5hbWVzcGFj
ZSBGVEwgewogCiBjbGFzcyBKU0NhbGxCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIK
KworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitKU0Nh
bGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKCkKKyAgICA6IG1fc3RhY2ttYXBJRChVSU5UX01BWCkK
KyAgICAsIG1fbm9kZShudWxscHRyKQorICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldChVSU5UX01B
WCkKK3sKK30KKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncyh1bnNpZ25lZCBzdGFja21h
cElELCBOb2RlKiBub2RlKQorICAgIDogbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCisgICAgLCBt
X25vZGUobm9kZSkKKyAgICAsIG1fY2FsbEJhc2UoCisgICAgICAgIG5vZGUtPm9wKCkgPT0gQ29u
c3RydWN0VmFyYXJncyA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncyA6IENhbGxMaW5r
SW5mbzo6Q2FsbFZhcmFyZ3MsCisgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYykKKyAgICAs
IG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDYWxs
VmFyYXJncyB8fCBub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncyB8fCBub2RlLT5vcCgp
ID09IENvbnN0cnVjdFZhcmFyZ3MpOworfQorCit1bnNpZ25lZCBKU0NhbGxWYXJhcmdzOjpudW1T
cGlsbFNsb3RzTmVlZGVkKCkKK3sKKyAgICByZXR1cm4gNDsKK30KKwordm9pZCBKU0NhbGxWYXJh
cmdzOjplbWl0KENDYWxsSGVscGVycyYgaml0LCBHcmFwaCYgZ3JhcGgsIGludDMyX3Qgc3BpbGxT
bG90c09mZnNldCkKK3sKKyAgICAvLyBXZSBhcmUgcGFzc2VkIHRocmVlIHBpZWNlcyBvZiBpbmZv
cm1hdGlvbjoKKyAgICAvLyAtIFRoZSBjYWxsZWUuCisgICAgLy8gLSBUaGUgYXJndW1lbnRzIG9i
amVjdC4KKyAgICAvLyAtIFRoZSAidGhpcyIgdmFsdWUsIGlmIGl0J3MgYSBjb25zdHJ1Y3RvciBj
YWxsLgorICAgIAorICAgIGJvb2wgaXNDYWxsID0gbV9ub2RlLT5vcCgpICE9IENvbnN0cnVjdFZh
cmFyZ3M7CisgICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5jYWxsVmFy
YXJnc0RhdGEoKTsKKyAgICAKKyAgICBHUFJSZWcgY2FsbGVlR1BSID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIwOworICAgIAorICAgIEdQUlJlZyBhcmd1bWVudHNHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgIEdQUlJlZyB0aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBib29sIGFyZ3VtZW50c09u
U3RhY2sgPSBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgeworICAgIGNh
c2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMTsKKyAgICAgICAgdGhpc0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIHRoaXNHUFIgPSBH
UFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIGFyZ3VtZW50c09uU3RhY2sgPSB0cnVlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIGFyZ3Vt
ZW50c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIGNvbnN0IHVuc2lnbmVkIGNhbGxlZVNwaWxsU2xvdCA9IDA7
CisgICAgY29uc3QgdW5zaWduZWQgYXJndW1lbnRzU3BpbGxTbG90ID0gMTsKKyAgICBjb25zdCB1
bnNpZ25lZCB0aGlzU3BpbGxTbG90ID0gMjsKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFja1BvaW50
ZXJTcGlsbFNsb3QgPSAzOworICAgIAorICAgIC8vIEdldCBzb21lIHNjcmF0Y2ggcmVnaXN0ZXJz
LgorICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJn
ZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJn
ZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVn
aXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIHVz
ZWRSZWdpc3RlcnMuc2V0KGNhbGxlZUdQUik7CisgICAgaWYgKGFyZ3VtZW50c0dQUiAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChhcmd1bWVudHNHUFIpOworICAg
IGlmICh0aGlzR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0
KHRoaXNHUFIpOworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNlZFJl
Z2lzdGVycyk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CisgICAgaWYgKGFyZ3VtZW50c09uU3RhY2spCisgICAgICAgIGFyZ3VtZW50
c0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghYWxsb2NhdG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJzKCkpOworICAgIAorICAgIGF1dG8g
bG9hZEFyZ3VtZW50cyA9IFsmXSAoYm9vbCBjbG9iYmVyZWQpIHsKKyAgICAgICAgaWYgKGFyZ3Vt
ZW50c09uU3RhY2spIHsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKGdyYXBoLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZv
cihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQ
Uik7CisgICAgICAgIH0gZWxzZSBpZiAoY2xvYmJlcmVkKSB7CisgICAgICAgICAgICBqaXQubG9h
ZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3Rz
T2Zmc2V0ICsgYXJndW1lbnRzU3BpbGxTbG90KSwgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgCisgICAgYXV0byBjb21wdXRlVXNlZFN0YWNrID0gWyZdIChHUFJSZWcgdGFy
Z2V0R1BSLCB1bnNpZ25lZCBleHRyYSkgeworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0YXJnZXRHUFIpOworICAgICAgICBpZiAoZXh0cmEp
CisgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJh
KSwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaml0LnVyc2hpZnRQdHIoQ0NhbGxIZWxwZXJzOjpJbW0z
MigzKSwgdGFyZ2V0R1BSKTsKKyAgICB9OworICAgIAorICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRp
b25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1
bWVudEdQUik7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3Vt
ZW50R1BSKTsKKyAgICAgICAgbV9leGNlcHRpb25zLmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNo
ZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVy
czo6RmFySnVtcFdpZHRoKSk7CisgICAgfTsKKyAgICAKKyAgICBsb2FkQXJndW1lbnRzKGZhbHNl
KTsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRoZSBmb3J3YXJkaW5nIGZhc3QgcGF0aCwgaWYgaXQn
cyBiZWVuIHJlcXVlc3RlZC4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGF2ZUFyZ3VtZW50czsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgaWYgKG1fbm9kZS0+
b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgLy8gRG8gdGhlIGhvcnJpZmlj
IGZvby5hcHBseSh0aGlzLCBhcmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAgICAgLy8gRklY
TUU6IGRvIHRoaXMgb3B0aW1pemF0aW9uIGF0IHRoZSBJUiBsZXZlbC4KKyAgICAgICAgCisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgYXJndW1lbnRzR1BS
KSk7CisgICAgICAgIAorICAgICAgICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hHUFIyLCAwKTsK
KyAgICAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBzY3JhdGNoR1BSMiwg
c2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgbV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2Up
OworICAgICAgICByZXN1bHRHUFIgPSBzY3JhdGNoR1BSMjsKKyAgICAgICAgCisgICAgICAgIGhh
dmVBcmd1bWVudHMgPSBqaXQuanVtcCgpOworICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBHb3R0YSBzcGlsbCB0aGUgY2FsbGVlLCBhcmd1bWVudHMsIGFu
ZCB0aGlzIGJlY2F1c2Ugd2Ugd2lsbCBuZWVkIHRoZW0gbGF0ZXIgYW5kIHdlIHdpbGwgaGF2ZSBz
b21lCisgICAgLy8gY2FsbHMgdGhhdCBjbG9iYmVyIHRoZW0uCisgICAgaml0LnN0b3JlNjQoY2Fs
bGVlR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxl
ZVNwaWxsU2xvdCkpOworICAgIGlmICghYXJndW1lbnRzT25TdGFjaykKKyAgICAgICAgaml0LnN0
b3JlNjQoYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09m
ZnNldCArIGFyZ3VtZW50c1NwaWxsU2xvdCkpOworICAgIGlmIChpc0NhbGwpCisgICAgICAgIGpp
dC5zdG9yZTY0KHRoaXNHUFIsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zm
c2V0ICsgdGhpc1NwaWxsU2xvdCkpOworICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09m
ZnNldCArIHN0YWNrUG9pbnRlclNwaWxsU2xvdCkpOworICAgIAorICAgIHVuc2lnbmVkIGV4dHJh
U3RhY2sgPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKworICAgICAgICBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSk7Cisg
ICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMSwgMCk7CisgICAgaml0LnN1YlB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYVN0YWNrKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmd1
bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5m
aXJzdFZhckFyZ09mZnNldCkpOworICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lzZV9j
YXN0PHZvaWQqPihvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzKSk7CisgICAgCisgICAgaml0
Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIxKTsKKyAgICBjb21wdXRl
VXNlZFN0YWNrKHNjcmF0Y2hHUFIyLCBleHRyYVN0YWNrKTsKKyAgICBsb2FkQXJndW1lbnRzKHRy
dWUpOworICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoaml0LCBzY3JhdGNoR1BSMSwgZmFsc2UsIHNj
cmF0Y2hHUFIyLCBzY3JhdGNoR1BSMik7CisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigtZXh0cmFTdGFjayksIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKHNj
cmF0Y2hHUFIyLCBhcmd1bWVudHNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEt
PmZpcnN0VmFyQXJnT2Zmc2V0KSwgc2NyYXRjaEdQUjEpOworICAgIGNhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSkpOwor
ICAgIAorICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwor
ICAgIAorICAgIGlmIChtX25vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAg
ICBoYXZlQXJndW1lbnRzLmxpbmsoJmppdCk7CisgICAgCisgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZXN1bHRHUFIs
IENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIAorICAgIGlmIChpc0Nh
bGwpIHsKKyAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxT
bG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpLCB0aGlzR1BSKTsKKyAgICAgICAgaml0LnN0b3Jl
NjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworICAgIH0K
KyAgICAKKyAgICAvLyBIZW5jZWZvcnRoIHdlIG1ha2UgdGhlIGNhbGwuIFRoZSBiYXNlIEZUTCBj
YWxsIG1hY2hpbmVyeSBleHBlY3RzIHRoZSBjYWxsZWUgaW4gcmVnVDAgYW5kIGZvciB0aGUKKyAg
ICAvLyBzdGFjayBmcmFtZSB0byBhbHJlYWR5IGJlIHNldCB1cCwgd2hpY2ggaXQgaXMuCisgICAg
aml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNh
bGxlZVNwaWxsU2xvdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBtX2NhbGxCYXNlLmVt
aXQoaml0KTsKKyAgICAKKyAgICAvLyBVbmRvIHRoZSBkYW1hZ2Ugd2UndmUgZG9uZS4KKyAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHN0
YWNrUG9pbnRlclNwaWxsU2xvdCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworfQorCit2b2lkIEpTQ2FsbFZhcmFyZ3M6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyLCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyKQoreworICAgIG1fY2Fs
bEJhc2UubGluayh2bSwgbGlua0J1ZmZlcik7CisgICAgbGlua0J1ZmZlci5saW5rKG1fZXhjZXB0
aW9ucywgZXhjZXB0aW9uSGFuZGxlcik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBGVExKU0NhbGxWYXJhcmdzX2gKKyNkZWZpbmUgRlRMSlNDYWxsVmFyYXJnc19oCisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2UuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIExpbmtCdWZmZXI7CisKK25hbWVzcGFjZSBERkcgeworY2xh
c3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpT
Q2FsbFZhcmFyZ3MgeworcHVibGljOgorICAgIEpTQ2FsbFZhcmFyZ3MoKTsKKyAgICBKU0NhbGxW
YXJhcmdzKHVuc2lnbmVkIHN0YWNrbWFwSUQsIERGRzo6Tm9kZSopOworICAgIAorICAgIERGRzo6
Tm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIAorICAgIHN0YXRpYyB1
bnNpZ25lZCBudW1TcGlsbFNsb3RzTmVlZGVkKCk7CisgICAgCisgICAgdm9pZCBlbWl0KENDYWxs
SGVscGVycyYsIERGRzo6R3JhcGgmLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpOworICAgIHZv
aWQgbGluayhWTSYsIExpbmtCdWZmZXImLCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5k
bGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFja21hcElEOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSlNDYWxsVmFyYXJn
cyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNl
dCA8IG90aGVyLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7CisgICAgREZHOjpOb2RlKiBtX25vZGU7CisgICAgSlND
YWxsQmFzZSBtX2NhbGxCYXNlOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9leGNlcHRp
b25zOworCitwdWJsaWM6CisgICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CisjZW5kaWYgLy8gRlRMSlNDYWxsVmFyYXJnc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzk5NzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX291dC5z
dGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRT
dGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2Ep
OwogICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbnkgQ2FsbFZhcmFyZ3MgdGhlbiB3
ZSBuZWUgdG8gaGF2ZSBhIHNwaWxsIHNsb3QgZm9yIGl0LgorICAgICAgICBib29sIGhhc1ZhcmFy
Z3MgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKSB7
CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdz
OgorICAgICAgICAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAg
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgaGFzVmFyYXJn
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzVmFyYXJncykgeworICAgICAg
ICAgICAgTFZhbHVlIHZhcmFyZ3NTcGlsbFNsb3RzID0gbV9vdXQuYWxsb2NhKAorICAgICAgICAg
ICAgICAgIGFycmF5VHlwZShtX291dC5pbnQ2NCwgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90
c05lZWRlZCgpKSk7CisgICAgICAgICAgICBtX2Z0bFN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3Rh
Y2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgICAgIG1fb3V0LmNhbGwoCisgICAg
ICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NCht
X2Z0bFN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCksCisgICAgICAgICAgICAgICAg
bV9vdXQuaW50MzJaZXJvLCB2YXJhcmdzU3BpbGxTbG90cyk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIG1fY2FsbEZyYW1lID0gbV9vdXQucHRyVG9JbnQoCiAgICAgICAgICAgICBtX291
dC5jYWxsKG1fb3V0LmZyYW1lQWRkcmVzc0ludHJpbnNpYygpLCBtX291dC5pbnQzMlplcm8pLCBt
X291dC5pbnRQdHIpOwogICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0
KFRhZ1R5cGVOdW1iZXIpOwpAQCAtNjM2LDYgKzY2MCwxNCBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIENvbnN0cnVjdDoKICAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNl
IENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAg
ICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICAgICAgY29tcGlsZUxvYWRW
YXJhcmdzKCk7CisgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoRlRMX05BVElWRV9DQUxM
X0lOTElOSU5HKQogICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZl
Q29uc3RydWN0OgpAQCAtOTgyLDcgKzEwMTQsNiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpOwotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgb3BlcmFuZC5pc0Fy
Z3VtZW50KCkpOwogCiAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJl
c3NGb3Iob3BlcmFuZCkpOwogCkBAIC0xOTg2LDggKzIwMTcsMjIgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIGNoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCgpOwogCi0gICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCAhbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQuYWRkKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZl
KHBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLCBtX291dC5jb25zdEludDMyKC0x
KSkpOworICAgICAgICBpZiAobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
CisgICAgICAgICAgICAmJiAhbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnQzMigKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3Rl
cjsKKyAgICAgICAgICAgIGlmICghbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdp
c3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIHNldElu
dDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsKKyAgICAgICAgfQog
ICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAtMzcw
OCw2ICszNzUzLDc5IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBzZXRKU1ZhbHVlKGNh
bGwpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdz
KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBudWxscHRy
OworICAgICAgICBMVmFsdWUgdGhpc0FyZyA9IG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBz
d2l0Y2ggKG1fbm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAg
ICAgICAganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICB0
aGlzQXJnID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICBqc0FyZ3VtZW50
cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJi
YWQgbm9kZSB0eXBlIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAg
CisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChtX291dC5jb25zdEludDMyKHNpemVPZklDRm9yKG1fbm9kZSkpKTsKKyAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQucmVmOCkpOworICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoMSArICEhanNBcmd1bWVudHMgKyAhIXRoaXNBcmcpKTsK
KyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChqc0NhbGxlZSk7CisgICAgICAgIGlmIChqc0FyZ3Vt
ZW50cykKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNBcmd1bWVudHMpOworICAgICAg
ICBpZiAodGhpc0FyZykKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodGhpc0FyZyk7Cisg
ICAgICAgIAorICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7CisgICAgICAgIAorICAgICAgICBMVmFs
dWUgY2FsbCA9IG1fb3V0LmNhbGwobV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksIGFy
Z3VtZW50cyk7CisgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwg
TExWTUNDYWxsQ29udik7CisgICAgICAgIAorICAgICAgICBtX2Z0bFN0YXRlLmpzQ2FsbFZhcmFy
Z3Nlcy5hcHBlbmQoSlNDYWxsVmFyYXJncyhzdGFja21hcElELCBtX25vZGUpKTsKKyAgICAgICAg
CisgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGls
ZUxvYWRWYXJhcmdzKCkKKyAgICB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1f
bm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVu
Z3RoID0gdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblNpemVP
ZlZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwganNBcmd1bWVudHMsCisgICAgICAgICAgICBtX291dC5j
b25zdEludDMyKGRhdGEtPm9mZnNldCkpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRo
ZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJv
cGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50
IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVj
IGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291
bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJp
Z2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAgICAgICAKKyAgICAgICAgc3Bl
Y3VsYXRlKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
CisgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwobGVuZ3RoLCBtX291dC5jb25zdEludDMy
KGRhdGEtPmxpbWl0KSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgs
IHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICB2bUNh
bGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MpLCBt
X2NhbGxGcmFtZSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFjaGluZVN0
YXJ0Lm9mZnNldCgpKSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0
KSwKKyAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlN
aW5pbXVtKSk7CisgICAgfQogCiAgICAgdm9pZCBjb21waWxlSnVtcCgpCiAgICAgewpAQCAtNDAx
Miw3ICs0MTMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExW
YWx1ZSBjYWxsID0gbV9vdXQuY2FsbCgKICAgICAgICAgICAgICAgICAgICAgbV9vdXQucGF0Y2hw
b2ludEludDY0SW50cmluc2ljKCksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mQ2hlY2tJbigpKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJ
bnQzMihzaXplT2ZJbigpKSwKICAgICAgICAgICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJl
ZjgpLCBtX291dC5jb25zdEludDMyKDEpLCBjZWxsKTsKIAogICAgICAgICAgICAgICAgIHNldElu
c3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKQEAg
LTY0MDUsNyArNjUyMyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQnVmZmVyIGlzIG91dCBv
ZiBzcGFjZSwgZmx1c2ggaXQuCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1ZmZlcklzRnVsbCwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25G
bHVzaFdyaXRlQmFycmllckJ1ZmZlciksIG1fY2FsbEZyYW1lLCBiYXNlLCBOb0V4Y2VwdGlvbnMp
OworICAgICAgICB2bUNhbGxOb0V4Y2VwdGlvbnMobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkZs
dXNoV3JpdGVCYXJyaWVyQnVmZmVyKSwgbV9jYWxsRnJhbWUsIGJhc2UpOwogICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CkBAIC02NDE0LDQ0ICs2NTMyLDIzIEBAIHByaXZhdGU6CiAjZW5kaWYK
ICAgICB9CiAKLSAgICBlbnVtIEV4Y2VwdGlvbkNoZWNrTW9kZSB7IE5vRXhjZXB0aW9ucywgQ2hl
Y2tFeGNlcHRpb25zIH07Ci0gICAgCi0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24s
IEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIEFy
Z3MuLi4gYXJncykKICAgICB7CiAgICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rpb24pOwotICAgICAgICBjYWxsQ2hlY2sobW9k
ZSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmdzLi4u
KTsKKyAgICAgICAgY2FsbENoZWNrKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQot
ICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgRXhjZXB0aW9u
Q2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0gICAgewotICAgICAgICBjYWxsUHJl
ZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBh
cmcxKTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExW
YWx1ZSBhcmcyLCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKLSAg
ICB7Ci0gICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1f
b3V0LmNhbGwoZnVuY3Rpb24sIGFyZzEsIGFyZzIpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVl
IGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBFeGNlcHRp
b25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKLSAgICB7Ci0gICAgICAgIGNhbGxQ
cmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rpb24s
IGFyZzEsIGFyZzIsIGFyZzMpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBM
VmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgRXhjZXB0
aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJncz4KKyAgICBMVmFsdWUgdm1DYWxsTm9FeGNlcHRpb25zKExWYWx1ZSBm
dW5jdGlvbiwgQXJncy4uLiBhcmdzKQogICAgIHsKICAgICAgICAgY2FsbFByZWZsaWdodCgpOwot
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSwgYXJnMiwg
YXJnMywgYXJnNCk7Ci0gICAgICAgIGNhbGxDaGVjayhtb2RlKTsKKyAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rpb24sIGFyZ3MuLi4pOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgY2FsbFByZWZsaWdodChDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCiAgICAgewogICAgICAgICBtX291dC5zdG9yZTMyKApAQCAtNjQ2NSwxMSArNjU2
Miw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhbGxQcmVmbGlnaHQobV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNhbGxDaGVjayhFeGNlcHRpb25DaGVja01v
ZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKKyAgICB2b2lkIGNhbGxDaGVjaygpCiAgICAgewot
ICAgICAgICBpZiAobW9kZSA9PSBOb0V4Y2VwdGlvbnMpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6ZW5hYmxlRXhjZXB0aW9uRnV6eigpKQogICAg
ICAgICAgICAgbV9vdXQuY2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRXhjZXB0aW9uRnV6
eikpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAko
cmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDEzICszNDcsOCBAQCBwdWJsaWM6CiAgICAgTFZhbHVl
IGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJu
IGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IpOyB9CiAgICAgTFZhbHVlIGNh
bGwoTFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlv
bik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxKSB7IHJl
dHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSk7IH0KLSAgICBMVmFsdWUg
Y2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikgeyByZXR1cm4g
YnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIpOyB9Ci0gICAgTFZhbHVl
IGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBh
cmczKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwg
YXJnMyk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBM
VmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0KSB7IHJldHVybiBidWlsZENhbGwo
bV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7IH0KLSAgICBMVmFs
dWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVl
IGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVp
bGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOyB9Ci0gICAgTFZh
bHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1
ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2KSB7IHJldHVybiBi
dWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJn
NSwgYXJnNik7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcx
LCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZh
bHVlIGFyZzYsIExWYWx1ZSBhcmc3KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5j
dGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyk7IH0KLSAgICBM
VmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZh
bHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1ZSBh
cmc3LCBMVmFsdWUgYXJnOCkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24s
IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzgpOyB9CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rp
b24sIExWYWx1ZSBhcmcxLCBBcmdzLi4uIGFyZ3MpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxk
ZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmdzLi4uKTsgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZT4KICAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5j
dGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lv
biAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDksNiArNDksMTAgQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAg
ICAsIG1vZHVsZSgwKQogICAgICwgZnVuY3Rpb24oMCkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9u
KDApCisgICAgLCBoYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRChVSU5UX01B
WCkKKyAgICAsIGhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBjYXB0
dXJlZFN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFw
SUQoVUlOVF9NQVgpCiAgICAgLCB1bndpbmREYXRhU2VjdGlvbigwKQogICAgICwgdW53aW5kRGF0
YVNlY3Rpb25TaXplKDApCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5o
CShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZUTEpJVENv
ZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExKU0NhbGwu
aCIKKyNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBz
LmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
QEAgLTcxLDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaGFuZGxlU3RhY2tPdmVy
Zmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQ7CiAgICAgdW5zaWduZWQgaGFuZGxlRXhjZXB0aW9uU3Rh
Y2ttYXBJRDsKICAgICB1bnNpZ25lZCBjYXB0dXJlZFN0YWNrbWFwSUQ7CisgICAgdW5zaWduZWQg
dmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEOwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlk
RGVzY3JpcHRvcj4gZ2V0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlw
dG9yPiBwdXRCeUlkczsKICAgICBTZWdtZW50ZWRWZWN0b3I8Q2hlY2tJbkRlc2NyaXB0b3I+IGNo
ZWNrSW5zOwogICAgIFZlY3RvcjxKU0NhbGw+IGpzQ2FsbHM7CisgICAgVmVjdG9yPEpTQ2FsbFZh
cmFyZ3M+IGpzQ2FsbFZhcmFyZ3NlczsKICAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25O
YW1lczsKICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKICAgICB2b2lkKiB1
bndpbmREYXRhU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM0LDcgKzEzNCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAg
ICByZXR1cm4gaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUs
IGNhbGxlclNjb3BlQ2hhaW4pOwogfQogCi11bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU1N0YWNrKiBzdGFjaywgSlNWYWx1ZSBhcmd1bWVudHMsIHVu
c2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3Vu
c2lnbmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYXJndW1l
bnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGg7
CiAgICAgaWYgKCFhcmd1bWVudHMpCkBAIC0xNTYsNiArMTU2LDEzIEBAIHVuc2lnbmVkIHNpemVG
cmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiAKICAgICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IDA7
CiAgICAgCisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwordW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFy
YXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTdGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1l
bnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZz
ZXQpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc2l6ZU9mVmFyYXJncyhjYWxsRnJhbWUsIGFy
Z3VtZW50cywgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIAogICAgIENhbGxGcmFtZSogY2FsbGVl
RnJhbWUgPSBjYWxsZWVGcmFtZUZvclZhcmFyZ3MoY2FsbEZyYW1lLCBudW1Vc2VkU3RhY2tTbG90
cywgbGVuZ3RoICsgMSk7CiAgICAgaWYgKGxlbmd0aCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRz
IHx8ICFzdGFjay0+ZW5zdXJlQ2FwYWNpdHlGb3IoY2FsbGVlRnJhbWUtPnJlZ2lzdGVycygpKSkg
ewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygp
IC0gcGFkZGVkQ2FsbGVlRnJhbWVPZmZzZXQpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIHNpemVP
ZlZhcmFyZ3MoQ2FsbEZyYW1lKiBleGVjLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmly
c3RWYXJBcmdPZmZzZXQpOwogICAgIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZy
YW1lKiBleGVjLCBKU1N0YWNrKiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRT
dGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdm9pZCBsb2FkVmFy
YXJncyhDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnRE
ZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwog
ICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJh
bWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09m
ZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGlu
ZWRGcmFtZShDYWxsCiAKICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsK
ICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKLSAg
ICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJs
b2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpOwogICAgICAgICBtX2Zy
YW1lLm1fYnl0ZWNvZGVPZmZzZXQgPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiwxNSArMjEyLDI3IEBAIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjpjYWxsRXhjZXB0aW9uRnV6eigKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
QWxpZ25tZW50Qnl0ZXMoKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIH0KIAotQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlv
bkNoZWNrS2luZCBraW5kKQorQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6
ZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2luZCBraW5kLCBFeGNlcHRpb25KdW1w
V2lkdGggd2lkdGgpCiB7CiAgICAgY2FsbEV4Y2VwdGlvbkZ1enooKTsKKworICAgIGlmICh3aWR0
aCA9PSBGYXJKdW1wV2lkdGgpCisgICAgICAgIGtpbmQgPSAoa2luZCA9PSBOb3JtYWxFeGNlcHRp
b25DaGVjayA/IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgOiBOb3JtYWxFeGNlcHRpb25DaGVjayk7
CiAgICAgCisgICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4g
YnJhbmNoVGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVy
bywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CisgICAgcmVz
dWx0ID0gYnJhbmNoVGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJv
IDogWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CiAj
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHJldHVybiBicmFuY2gzMihraW5kID09IE5vcm1h
bEV4Y2VwdGlvbkNoZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVt
cHR5VmFsdWVUYWcpKTsKKyAgICByZXN1bHQgPSBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2Vw
dGlvbkNoZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKICNlbmRpZgorICAgIAorICAgIGlmICh3aWR0aCA9PSBOb3JtYWxKdW1wV2lkdGgp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCByZWFsSnVt
cCA9IHBhdGNoYWJsZUp1bXAoKTsKKyAgICByZXN1bHQubGluayh0aGlzKTsKKyAgICAKKyAgICBy
ZXR1cm4gcmVhbEp1bXAubV9qdW1wOwogfQogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0
b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVscGVycyYgaml0LCBUcnVzdGVkSW1t
UHRyIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCBkZXN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzgsNiArMzM4LDEwIEBAIHB1YmxpYzoKICAgICB9CiAgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKKyAgICAgICAgLy8g
TkIuIEl0J3MgdGVtcHRpbmcgb24gc29tZSBhcmNoaXRlY3R1cmVzIHRvIHNvbWV0aW1lcyB1c2Ug
YW4gb2Zmc2V0IGZyb20gdGhlIHN0YWNrCisgICAgICAgIC8vIHJlZ2lzdGVyIGJlY2F1c2UgZm9y
IHNvbWUgb2Zmc2V0cyB0aGF0IHdpbGwgZW5jb2RlIHRvIGEgc21hbGxlciBpbnN0cnVjdGlvbi4g
QnV0IHdlCisgICAgICAgIC8vIGNhbm5vdCBkbyB0aGlzLiBXZSB1c2UgdGhpcyBpbiBwbGFjZXMg
d2hlcmUgdGhlIHN0YWNrIHBvaW50ZXIgaGFzIGJlZW4gbW92ZWQgdG8gc29tZQorICAgICAgICAv
LyB1bnByZWRpY3RhYmxlIGxvY2F0aW9uLgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVy
LmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAg
ICB9CkBAIC0zNjcsMzkgKzM3MSwzOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gQWNjZXNz
IHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgotICAgIEFkZHJlc3MgY2FsbGVlRnJhbWVT
bG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChpbnQgc2xv
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChzbG90ID49IEpTU3RhY2s6OkNhbGxlckZyYW1lQW5k
UENTaXplKTsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0g
SlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpKTsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIEpTU3RhY2s6
OkNhbGxlckZyYW1lQW5kUENTaXplKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBm
aXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgotICAgIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRTbG90KGlu
dCBhcmd1bWVudCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50IGFy
Z3VtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpOwogICAgIH0KIAotICAgIEFkZHJl
c3MgY2FsbGVlRnJhbWVUYWdTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFt
ZVNsb3Qoc2xvdCkud2l0aE9mZnNldChUYWdPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJlc3Mg
Y2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxs
ZWVGcmFtZVBheWxvYWRTbG90KGludCBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxl
ZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KIAotICAg
IEFkZHJlc3MgY2FsbGVlQXJndW1lbnRUYWdTbG90KGludCBhcmd1bWVudCkKKyAgICBzdGF0aWMg
QWRkcmVzcyBjYWxsZWVBcmd1bWVudFRhZ1Nsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGNhbGxlZUFyZ3VtZW50U2xvdChhcmd1bWVudCkud2l0aE9mZnNldChUYWdPZmZz
ZXQpOwogICAgIH0KIAotICAgIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChpbnQg
YXJndW1lbnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChp
bnQgYXJndW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlQXJndW1lbnRTbG90KGFy
Z3VtZW50KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJlc3Mg
Y2FsbGVlRnJhbWVDYWxsZXJGcmFtZSgpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVD
YWxsZXJGcmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KDApLndp
dGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKICAgICB9CkBAIC01NzEs
NyArNTc1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAgICAK
ICAgICBlbnVtIEV4Y2VwdGlvbkNoZWNrS2luZCB7IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBJbnZl
cnRlZEV4Y2VwdGlvbkNoZWNrIH07Ci0gICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0
aW9uQ2hlY2tLaW5kIGtpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjayk7CisgICAgZW51bSBFeGNl
cHRpb25KdW1wV2lkdGggeyBOb3JtYWxKdW1wV2lkdGgsIEZhckp1bXBXaWR0aCB9OworICAgIEp1
bXAgZW1pdEV4Y2VwdGlvbkNoZWNrKAorICAgICAgICBFeGNlcHRpb25DaGVja0tpbmQgPSBOb3Jt
YWxFeGNlcHRpb25DaGVjaywgRXhjZXB0aW9uSnVtcFdpZHRoID0gTm9ybWFsSnVtcFdpZHRoKTsK
IAogI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKICAgICBzdGF0aWMgdm9pZCBlbWl0Q291
bnQoTWFjcm9Bc3NlbWJsZXImIGppdCwgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIs
IGludDMyX3QgaW5jcmVtZW50ID0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3Nyw2ICsxNzc3LDE1IEBA
IHB1YmxpYzoKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1
c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKKyAgICB7Cisg
ICAgICAgIHNldHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjQ+KGFyZzIsIGFyZzQpOworICAgICAgICBtb3ZlKGFyZzEsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKKyAgICAgICAgbW92ZShhcmc1LCBHUFJJbmZvOjphcmd1bWVudEdQUjUpOworICAgICAgICBt
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0ciBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJ
bW0zMiBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKICAgICB7CiAgICAgICAgIHNldHVwVHdvU3R1
YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjM+KGFy
ZzIsIGFyZzMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MDIsNiArNDAyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgcmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyBy
ZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0g
WDg2UmVnaXN0ZXJzOjplc2k7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWRO
b25Bcmd1bWVudEdQUiA9IFg4NlJlZ2lzdGVyczo6cjEwOwogICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgcGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IE1hY3JvQXNzZW1ibGVyOjpzY3JhdGNoUmVn
aXN0ZXI7CiAKICAgICBzdGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5zaWduZWQgaW5kZXgpCkBA
IC01NzcsNiArNTc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJu
VmFsdWVHUFIgPSBBUk02NFJlZ2lzdGVyczo6eDA7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBBUk02NFJlZ2lzdGVyczo6eDE7IC8vIHJlZ1QxCiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBBUk02NFJl
Z2lzdGVyczo6eDI7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25Bcmd1
bWVudEdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHBh
dGNocG9pbnRTY3JhdGNoUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6aXAwOwogCiAgICAgLy8g
R1BSUmVnIG1hcHBpbmcgaXMgZGlyZWN0LCB0aGUgbWFjaGluZSByZWdzaXRlciBudW1iZXJzIGNh
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjQs
MTEgKzQ2NCw2IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAg
ICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3Vs
ZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBERkc6OkNh
bklubGluZToKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAg
ICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTYsNyArMjk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjb21waWxlT3BD
YWxsKE9wY29kZUlELCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsK
ICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQsIEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKLSAgICAgICAgdm9pZCBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rp
b24qKTsKKyAgICAgICAgdm9pZCBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24q
LCBDYWxsTGlua0luZm8qKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0UHV0
Q2FsbFJlc3VsdChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklUOjpl
bWl0UHV0Q2FsbFJlc3VsdChJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uKQordm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBpbnQgdGhp
c1ZhbHVlID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBhcmd1bWVudHMgPSBp
bnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CkBAIC05MCw2ICs5MCwxNiBAQCB2b2lkIEpJVDo6Y29t
cGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RyCiAgICAgaWYgKGNhbk9wdGltaXplKQogICAgICAg
ICBlbmQubGluayh0aGlzKTsKICAgICAKKyAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3Vu
dC4KKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIp
OworICAgIGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5v
dEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNh
dHVyYXRlZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUp
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAgbm90U2F0dXJhdGVk
LmxpbmsodGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsK
KyAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhp
cycuCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJlZ1QwKTsKICAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNl
dCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwpAQCAtMTM0LDcgKzE0
NCw5IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKIAogdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgaW50IGNhbGxlZSA9IGlu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CisKKyAgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBkYXRl
cyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpAQCAtMTUyLDcgKzE2NCw3
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICBDT01QSUxF
X0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY2FsbF92
YXJhcmdzKSwgY2FsbF9hbmRfY2FsbF92YXJhcmdzX29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0
aCk7CiAgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVf
TEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSwgY2FsbF9hbmRfY29uc3RydWN0X3ZhcmFyZ3Nf
b3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQotICAgICAgICBj
b21waWxlU2V0dXBWYXJhcmdzRnJhbWUoaW5zdHJ1Y3Rpb24pOworICAgICAgICBjb21waWxlU2V0
dXBWYXJhcmdzRnJhbWUoaW5zdHJ1Y3Rpb24sIGluZm8pOwogICAgIGVsc2UgewogICAgICAgICBp
bnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CkBAIC0xNzYsOSArMTg4LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgc3RvcmU2
NChyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2FsbGVlICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpOwogICAgIAotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRD
YWxsTGlua0luZm8oKTsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKKyAg
IGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxFdmFs
KGluc3RydWN0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTUwLDYgKzE1MCw3IEBAIHR5cGVkZWYgaW50NjRfdCBKSVRfT1BFUkFUSU9OKCpRX0pJVE9wZXIK
IHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRCkoZG91Ymxl
KTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRSkoRXhl
Y1N0YXRlKik7CiB0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9u
X0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9O
ICgqWl9KSVRPcGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJf
dCk7CiB0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VKWlop
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYg
c2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIEpTQ2VsbCopOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3Bl
cmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0xODksNiArMTkwLDcg
QEAgdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lk
IEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVndzSikoRXhlY1N0YXRlKiwgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaSikoRXhlY1N0YXRlKiwgaW50
MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJ
VE9wZXJhdGlvbl9FWkpaWlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlLCBp
bnQzMl90LCBpbnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fRVZtKShFeGVjU3RhdGUqLCBWTSopOwogdHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZv
aWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX1opKGludDMyX3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTEgKzEwMSwzMSBAQCB2b2lkIGVtaXRTZXR1
cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsCiAKIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1l
RmFzdENhc2UoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIHVu
c2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93Q2Fz
ZSkKIHsKLSAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSgKLSAgICAgICAgaml0LCBu
dW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsCi0g
ICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIo
SlNTdGFjazo6QXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJbnQzMiksCi0gICAgICAgIFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKSwKLSAgICAgICAgZmlyc3RW
YXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2Fz
ZShqaXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNo
R1BSMywgbnVsbHB0ciwgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKK30KKwordm9pZCBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51
bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQ
UlJlZyBzY3JhdGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2ln
bmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93Q2FzZSkK
K3sKKyAgICBWYWx1ZVJlY292ZXJ5IGFyZ3VtZW50Q291bnRSZWNvdmVyeTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZmlyc3RBcmd1bWVudFJlZzsKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Cisg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBh
cmd1bWVudENvdW50UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2so
CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIs
IERhdGFGb3JtYXRJbnQzMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcmd1bWVu
dENvdW50UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCgKKyAgICAgICAgICAgICAg
ICBqc051bWJlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpID4gMSkKKyAg
ICAgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sx
XS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlyc3RBcmd1
bWVudFJlZyA9IFZpcnR1YWxSZWdpc3RlcigwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1
bWVudENvdW50UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIERhdGFG
b3JtYXRJbnQzMik7CisgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSk7CisgICAgfQorICAgIGVtaXRTZXR1cFZhcmFy
Z3NGcmFtZUZhc3RDYXNlKGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRj
aEdQUjIsIHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJndW1lbnRS
ZWcsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUu
aAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZh
cmFyZ3NGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIHZvaWQgZW1pdFNl
dHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwKIC8vIFZhcmlhbnQgdGhhdCBhc3N1bWVzIG5v
cm1hbCBzdGFjayBmcmFtZS4KIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0Nh
bGxIZWxwZXJzJiwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBH
UFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgdW5zaWduZWQgZmlyc3RWYXJB
cmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKIAorLy8gVmFyaWFu
dCBmb3IgcG90ZW50aWFsbHkgaW5saW5lZCBzdGFjayBmcmFtZXMuCit2b2lkIGVtaXRTZXR1cFZh
cmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsSGVscGVycyYsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIs
IEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQ
UjMsIElubGluZUNhbGxGcmFtZSosIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0JiBzbG93Q2FzZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z3VtZW50cy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIAogICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRz
TW9kZSBtb2RlID0gTm9ybWFsQXJndW1lbnRzQ3JlYXRpb25Nb2RlKQogICAgIHsKLSAgICAgICAg
QXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVu
dHM+KHZtLmhlYXAsIG9mZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJh
eVNpemVJbkJ5dGVzKGlubGluZUNhbGxGcmFtZSkpKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKKyAg
ICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxB
cmd1bWVudHM+KHZtLmhlYXAsIG9mZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0
ZXJBcnJheVNpemVJbkJ5dGVzKGNhbGxGcmFtZSwgaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3VtZW50
cyhjYWxsRnJhbWUpOwogICAgICAgICBhcmd1bWVudHMtPmZpbmlzaENyZWF0aW9uKGNhbGxGcmFt
ZSwgaW5saW5lQ2FsbEZyYW1lLCBtb2RlKTsKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKICAg
ICB9CkBAIC0xMjQsNyArMTI0LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVTdHJpY3RN
b2RlQ2FsbGVlSWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IHJl
Z2lzdGVyQXJyYXlTaXplSW5CeXRlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsg
fQotICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSAqIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsgfQorICAgIHN0
YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pICogKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgfQogICAg
IGJvb2wgaXNBcmd1bWVudChzaXplX3QpOwogICAgIGJvb2wgdHJ5U2V0QXJndW1lbnQoVk0mLCBz
aXplX3QgYXJndW1lbnQsIEpTVmFsdWUpOwogICAgIEpTVmFsdWUgdHJ5R2V0QXJndW1lbnQoc2l6
ZV90IGFyZ3VtZW50KTsKQEAgLTM0MCwxMSArMzQ4LDE1IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50
czo6ZmluaXNoQ3JlYXRpb24oQ2EKICAgICBtX292ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAg
bV9vdmVycm9kZUNhbGxlciA9IGZhbHNlOwogICAgIG1faXNTdHJpY3RNb2RlID0ganNDYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmlz
U3RyaWN0TW9kZSgpOwotCisgICAgCisgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBjYWxsRnJh
bWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVu
Ym94ZWRJbnQzMigpOworICAgIGVsc2UKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgbV9udW1Bcmd1bWVudHMtLTsKKyAgICAK
ICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9k
ZTogewotICAgICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSAtIDE7Ci0gICAgICAgIAogICAgICAgICBpZiAobV9udW1Bcmd1bWVudHMpIHsKICAg
ICAgICAgICAgIGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAgICAgbV9yZWdp
c3RlcnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxs
RnJhbWUtPnJlZ2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50T25lIC0gdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCk7CkBAIC0zNjEsNyArMzczLDYgQEAgaW5saW5lIHZv
aWQgQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBDbG9uZWRBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwogICAgICAgICBpZiAobV9u
dW1Bcmd1bWVudHMpIHsKICAgICAgICAgICAgIGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwog
ICAgICAgICAgICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50
T25lIC0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxMSw2ICsyMTEsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICAv
KiBmcm9tIHN1cGVyIGxvbmcgY29tcGlsZXMgdGhhdCB0YWtlIGEgbG90IG9mIG1lbW9yeS4gKi9c
CiAgICAgdih1bnNpZ25lZCwgbWF4aW11bUlubGluaW5nQ2FsbGVyU2l6ZSwgMTAwMDApIFwKICAg
ICBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZywgMTAwKSBcCisg
ICAgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcsIHRydWUpIFwK
ICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50QnlJZElubGluaW5nLCB0cnVlKSBcCiAgICAg
XAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246585</attachid>
            <date>2015-02-13 22:04:03 -0800</date>
            <delta_ts>2015-02-14 10:11:00 -0800</delta_ts>
            <desc>now passes more tests than ever!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>177375</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
MTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFB
OEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAv
KiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAx
NDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2Nh
dGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxs
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAw
MEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8q
IFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICov
LAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAq
LywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
LAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkw
RjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBA
QAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4
NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiAr
NDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRy
dXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVy
c2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNy
Y0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQo
aW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0z
MkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMzEsNiArMzMxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
bXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODc2LDYgKzg3NiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJ
YiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgw
KQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBw
dWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNp
Z25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDog
ODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAg
Ly8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1
ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0o
cHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZv
KGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1f
bWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxs
TGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkK
K3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9j
b3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBi
b29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAo
IW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1w
KG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAg
bV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApA
QCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29u
c3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAg
LTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkg
Y29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgog
ICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAg
IGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0
LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAg
IENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFy
Z3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNv
cnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAg
ICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZh
cmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAg
cmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBpc1Zh
cmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtp
bmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtp
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzRXNjYXBlZCI7CiAgICAgY2FzZSBOb3RTdHJpbmdP
YmplY3Q6CiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKKyAgICBjYXNlIFZhcmFy
Z3NPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZsb3ciOwogICAgIGNhc2Ug
VW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5j
b3VudGFibGVJbnZhbGlkYXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEluYWRlcXVhdGVDb3ZlcmFnZSwgLy8gV2UgZXhp
dGVkIGJlY2F1c2Ugd2UgZW5kZWQgdXAgaW4gY29kZSB0aGF0IGRpZG4ndCBoYXZlIHByb2ZpbGlu
ZyBjb3ZlcmFnZS4KICAgICBBcmd1bWVudHNFc2NhcGVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
cmd1bWVudHMgZXNjYXBlZCBidXQgd2UgZGlkbid0IGV4cGVjdCB0aGVtIHRvLgogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgorICAgIFZhcmFyZ3NPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB2YXJhcmdzIGNhbGwgcGFzc2VkIG1vcmUgYXJndW1l
bnRzIHRoYW4gd2UgZXhwZWN0ZWQuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgV2F0Y2hkb2dU
aW1lckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdh
dGNoZG9nIHRpbWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKLSAgICAg
ICAgQVNTRVJUKHZhbHVlLmlzSGVhcFRvcCgpKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0Ns
ZWFyKCkpOwogICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2
YWx1ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1h
dCgpKSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEZpbHRyYXRp
b25PSyk7CkBAIC0yMDMsOSArMjAzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0Lgot
ICAgICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRl
IG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9u
ZSBzZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1
cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAgLy8gbm9uLWNs
ZWFyIHZhbHVlLgorICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChu
b2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2Fz
ZSBCaXRPcjoKQEAgLTEzMTUsNyArMTMyNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0
IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAg
ICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0
aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRo
ZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBzZXRD
b25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0ZW5kIHRoYXQgd2UgY2xvYmJl
cmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KQEAgLTE5NjQsNiArMTk3Niw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3Ao
KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBC
dXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhh
dCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw4IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8g
SGVscGVyIGZvciBtaW4gYW5kIG1heC4KLSAgICBib29sIGhhbmRsZU1pbk1heChpbnQgcmVzdWx0
T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgor
ICAgIGJvb2wgaGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENo
ZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgCiAgICAgLy8gSGFuZGxlIGNhbGxzLiBU
aGlzIHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmluc2ljcy4K
ICAgICB2b2lkIGhhbmRsZUNhbGwoCkBAIC0xODIsMjAgKzE4MywyNSBAQCBwcml2YXRlOgogICAg
ICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwg
Q2FsbExpbmtTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlw
ZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBp
bnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAgICAgdm9pZCBo
YW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQpOwotICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBj
YWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwot
ICAgIHZvaWQgdW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50KTsKKyAgICB2b2lkIGhhbmRs
ZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2Rl
KiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtbnQpOwogICAgIHZvaWQgZW1p
dEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHVuc2lnbmVkIGlubGlu
aW5nQ29zdChDYWxsVmFyaWFudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFuIGlu
bGluaW5nIGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29zdCBv
ZiAxLgogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVk
LCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlubGlu
aW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExp
bmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOworICAgIGJvb2wgaGFuZGxlSW5s
aW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxs
TGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1
bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVu
dHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9m
ZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24pOwogICAgIGVudW0gQ2FsbGVyTGlua2FiaWxpdHkgeyBDYWxsZXJEb2Vz
Tm9ybWFsTGlua2luZywgQ2FsbGVyTGlua3NNYW51YWxseSB9OwotICAgIGJvb2wgYXR0ZW1wdFRv
SW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxW
YXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5r
YWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFs
YW5jZSk7Ci0gICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVz
dWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQsIENhbGxlckxpbmthYmlsaXR5KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NG
dW5jdG9yPgorICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5z
ZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIHZv
aWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENh
bGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJM
aW5rYWJpbGl0eSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB2b2lk
IGNhbmNlbExpbmtpbmdGb3JCbG9jayhJbmxpbmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAv
LyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdpdmVuIGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZl
IGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5saW5lIHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBp
bnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlm
IHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKLSAgICBib29s
IGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxG
dW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVu
Y3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICBib29sIGhh
bmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0
cnVjdG9yKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlLCBj
b25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24o
aW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwg
Y29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRC
eU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwg
Tm9kZSogdmFsdWUpOwogICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
LCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CiAgICAgdm9p
ZCBoYW5kbGVHZXRCeUlkKApAQCAtNTI4LDYgKzUzNCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAg
ICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpOworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tF
bnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KSkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZVN0
YWNrRW50cnktPm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSBudW1Bcmd1bWVudHM7IGFyZ3VtZW50LS0gPiAxOykKQEAgLTY1NCwx
MyArNjYyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCByZW1vdmVMYXN0Tm9kZUZyb21HcmFwaChOb2RlVHlwZSBleHBlY3RlZE5vZGVU
eXBlKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT50YWtlTGFz
dCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IGV4cGVjdGVkTm9kZVR5
cGUpOwotICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUobm9kZSk7Ci0gICAgfQotCiAg
ICAgdm9pZCBhZGRWYXJBcmdDaGlsZChOb2RlKiBjaGlsZCkKICAgICB7CiAgICAgICAgIG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoRWRnZShjaGlsZCkpOwpAQCAtNjkxLDcgKzY5Miw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBvcCwgb3BJbmZvLCBjYWxsZWUsIGFyZ0NvdW50LCBy
ZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRSZWcocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOworICAgICAgICAgICAgc2V0
KHJlc3VsdFJlZywgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKQEAg
LTEwNDIsOCArMTA0Myw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiB7CiAg
ICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIAotICAgIGlmIChjYWxsVGFyZ2V0
LT5oYXNDb25zdGFudCgpKQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVz
KGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKKyAgICBpZiAoY2Fs
bFRhcmdldC0+aXNDZWxsQ29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJv
dmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQoY2FsbFRhcmdldC0+YXNDZWxsKCkpKTsKICAg
ICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAg
ICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAi
OiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CkBAIC0xMDYwLDcgKzEwNjEsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogICAgIE9wSW5mbyBjYWxsT3BJbmZvOwog
ICAgIAotICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5r
U3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRP
ZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgeworICAgIGlmIChoYW5kbGVJbmxpbmluZyhj
YWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFsUmVnaXN0ZXIo
KSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBw
cmVkaWN0aW9uKSkgewogICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAg
ICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOwogICAgICAg
ICByZXR1cm47CkBAIC0xMDcyLDcgKzEwNzMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVDYWxsKAogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5mdW5jdGlvbigp
OwogICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElu
bGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgICAgICBpZiAo
ZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGVt
aXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUsIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVj
aWFsaXphdGlvbktpbmQpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxlZSwg
Y2FsbFRhcmdldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQp
KTsKICAgICAgICAgICAgIGNhbGxPcEluZm8gPSBPcEluZm8obV9ncmFwaC5mcmVlemUoZnVuY3Rp
b24pKTsKIAogICAgICAgICAgICAgaWYgKG9wID09IENhbGwpCkBAIC0xMDg4LDExICsxMDg5LDU0
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2FsbChyZXN1bHQs
IG9wLCBjYWxsT3BJbmZvLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
cmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpl
bWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFyZ2V0LCBp
bnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUg
b3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBOb2RlKiB0aGlzQXJndW1l
bnQ7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBPUENPREVf
TEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7CisgICAgCisgICAgaW50IHJlc3VsdCA9IHBj
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgY2FsbGVlID0gcGNbMl0udS5vcGVyYW5kOworICAgIGlu
dCB0aGlzUmVnID0gcGNbM10udS5vcGVyYW5kOworICAgIGludCBhcmd1bWVudHMgPSBwY1s0XS51
Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJlZVJlZyA9IHBjWzVdLnUub3BlcmFuZDsKKyAgICBp
bnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBwY1s2XS51Lm9wZXJhbmQ7CisgICAgCisgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAKKyAgICBOb2RlKiBj
YWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsKKyAgICAKKyAgICBDYWxs
TGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAor
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3Jp
Z2luKCksCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxs
Q29udGV4dE1hcCk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50KCkpCisgICAg
ICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxWYXJpYW50KGNh
bGxUYXJnZXQtPmFzQ2VsbCgpKSk7CisgICAgCisgICAgaWYgKGNhbGxMaW5rU3RhdHVzLmNhbk9w
dGltaXplKCkKKyAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBj
YWxsTGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZyksIFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVDYWxsRnJh
bWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBpZiAobV9n
cmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5u
b3RpY2VJbmxpbmVkQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIENh
bGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9jYWxsVmFyYXJnc0RhdGEuYWRkKCk7Cisg
ICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAgICAKKyAg
ICBOb2RlKiB0aGlzQ2hpbGQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAg
IHRoaXNBcmd1bWVudCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rl
ck9mZnNldCkpOworICAgICAgICB0aGlzQ2hpbGQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNS
ZWcpKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXNDaGlsZCA9IG51bGxwdHI7CisgICAgCisgICAg
Tm9kZSogY2FsbCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBjYWxsVGFyZ2V0LCBnZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLCB0aGlzQ2hp
bGQpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKKyAgICBpZiAocmVz
dWx0UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7Cit9CisKK3Zv
aWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBjYWxsZWUs
IE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnRSZWcpCit7Cisg
ICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIGlmICh0aGlzQXJndW1lbnRSZWcuaXNWYWxpZCgp
KQorICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQodGhpc0FyZ3VtZW50UmVnKTsKICAgICBlbHNl
CiAgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKQEAgLTExMTAsMTMgKzExNTQsNiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoCiAgICAgYWRkVG9HcmFwaChDaGVj
a0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjYWxsZWVDZWxsKSksIGNhbGxUYXJnZXRGb3JD
aGVjaywgdGhpc0FyZ3VtZW50KTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6dW5kb0Z1bmN0
aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSkKLXsKLSAgICByZW1vdmVMYXN0Tm9kZUZyb21H
cmFwaChDaGVja0NlbGwpOwotICAgIGlmIChjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpKQotICAgICAg
ICByZW1vdmVMYXN0Tm9kZUZyb21HcmFwaChHZXRFeGVjdXRhYmxlKTsKLX0KLQogdm9pZCBCeXRl
Q29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
IHsKICAgICBmb3IgKGludCBpID0ga2luZCA9PSBDb2RlRm9yQ2FsbCA/IDAgOiAxOyBpIDwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkKQEAgLTEyMTAsMTMgKzEyNDcsMTUgQEAgdW5z
aWduZWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29zdChDYQogICAgIHJldHVybiBjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5l
Q2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50
IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBDYWxs
ZXJMaW5rYWJpbGl0eSBjYWxsZXJMaW5rYWJpbGl0eSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNr
c0Z1bmN0b3I+Cit2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9m
ZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxl
ckxpbmthYmlsaXR5LCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpCiB7CiAgICAg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJh
bWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKICAgICAKICAgICBBU1NFUlQoaW5saW5p
bmdDb3N0KGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9u
S2luZCkgIT0gVUlOVF9NQVgpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpLT5iYXNlbGluZUNvZGVCbG9ja0ZvcihzcGVjaWFsaXph
dGlvbktpbmQpOworICAgIGluc2VydENoZWNrcyhjb2RlQmxvY2spOwogCiAgICAgLy8gRklYTUU6
IERvbid0IGZsdXNoIGNvbnN0YW50cyEKICAgICAKQEAgLTEzNTYsNDQgKzEzOTUsNTkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6Y2FuY2VsTGlua2luZ0ZvckJsbwogICAgIH0KIH0KIAotYm9vbCBC
eXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
aW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElu
bGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBDYWxsZXJMaW5rYWJpbGl0eSBjYWxsZXJMaW5rYWJp
bGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5j
ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+Citib29sIEJ5dGVDb2RlUGFyc2Vy
OjphdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3Bl
cmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1l
OjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBjb25zdCBDaGVj
a3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpCiB7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBz
cGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZv
cihraW5kKTsKICAgICAKICAgICBpZiAoIWlubGluaW5nQmFsYW5jZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAorICAgIGJvb2wgZGlkSW5zZXJ0Q2hlY2tzID0gZmFsc2U7CisgICAgYXV0
byBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZyA9IFsmXSAoKSB7CisgICAgICAgIGluc2VydENo
ZWNrcyhudWxscHRyKTsKKyAgICAgICAgZGlkSW5zZXJ0Q2hlY2tzID0gdHJ1ZTsKKyAgICB9Owor
ICAgIAogICAgIGlmIChJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5pbnRlcm5h
bEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlv
bihyZXN1bHRPcGVyYW5kLCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQpKSB7CisgICAgICAgIGlmIChoYW5kbGVD
b25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kLCBp
bnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGRpZEluc2VydENoZWNrcyk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxU
YXJnZXROb2RlKTsKICAgICAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zm
c2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAg
ICAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghZGlk
SW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBJ
bnRyaW5zaWMgaW50cmluc2ljID0gY2FsbGVlLmludHJpbnNpY0ZvcihzcGVjaWFsaXphdGlvbktp
bmQpOwogICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpIHsKLSAgICAgICAgaWYgKGhh
bmRsZUludHJpbnNpYyhyZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lzdGVyT2Zmc2V0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgaWYgKGhh
bmRsZUludHJpbnNpYyhyZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lzdGVyT2Zmc2V0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbiwgaW5zZXJ0Q2hlY2tzV2l0aEFj
Y291bnRpbmcpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRJbnNlcnRDaGVja3Mp
OwogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0Tm9kZSk7CiAgICAg
ICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBpbmxpbmlu
Z0JhbGFuY2UtLTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENoZWNrcyk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbXlJbmxpbmlu
Z0Nvc3QgPSBpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
c3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpZiAobXlJbmxpbmluZ0Nvc3QgPiBpbmxpbmluZ0Jh
bGFuY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpbmxpbmVDYWxsKGNhbGxU
YXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsZWUsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgY2FsbGVyTGlua2FiaWxpdHkp
OworCisgICAgaW5saW5lQ2FsbChjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbGVl
LCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQs
IGtpbmQsIGNhbGxlckxpbmthYmlsaXR5LCBpbnNlcnRDaGVja3MpOwogICAgIGlubGluaW5nQmFs
YW5jZSAtPSBteUlubGluaW5nQ29zdDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1
bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5p
bmcoCisgICAgTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBD
YWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0T3JG
aXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCisgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2Rl
VHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKQogewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkhhbmRs
aW5nIGlubGluaW5nLi4uXG4iKTsKQEAgLTE0MDcsNiArMTQ2MSwxMyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCisgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpCisgICAgICAg
ICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9uczo6bWF4aW11bVZh
cmFyZ3NGb3JJbmxpbmluZygpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZhcmFyZ3MuXG4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAgdW5zaWduZWQgaW5saW5pbmdC
YWxhbmNlID0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUlu
c3RydWN0aW9uQ291bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpCiAgICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0ZDo6bWluKGlubGluaW5nQmFs
YW5jZSwgT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRl
SW5zdHJ1Y3Rpb25Db3VudCgpKTsKQEAgLTE0MTcsMTcgKzE0NzgsMTAzIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBzaW1wbGlmaWNhdGlvbiBvbiB0
aGUgZmx5IGFuZCB0aGlzIGhlbHBzIHJlZHVjZSBjb21waWxlIHRpbWVzLCBidXQgd2UgY2FuIG9u
bHkgbGV2ZXJhZ2UKICAgICAvLyB0aGlzIGluIGNhc2VzIHdoZXJlIHdlIGRvbid0IG5lZWQgY29u
dHJvbCBmbG93IGRpYW1vbmRzIHRvIGNoZWNrIHRoZSBjYWxsZWUuCiAgICAgaWYgKCFjYWxsTGlu
a1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVzLnNpemUoKSA9PSAx
KSB7Ci0gICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcygKLSAgICAgICAgICAgIGNhbGxMaW5rU3Rh
dHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2lu
ZCk7CisgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSwgY2FsbFRh
cmdldE5vZGUsIHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCA/IHRoaXNBcmd1bWVu
dCA6IFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQ7Cisg
ICAgICAgIAorICAgICAgICAvLyBPbmx5IHVzZWQgZm9yIHZhcmFyZ3MgY2FsbHMuCisgICAgICAg
IHVuc2lnbmVkIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAgICAgICB1bnNpZ25lZCBtYXhOdW1B
cmd1bWVudHMgPSAwOworCisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhr
aW5kKSkgeworICAgICAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVj
dXRhYmxlID0gY2FsbExpbmtTdGF0dXNbMF0uZnVuY3Rpb25FeGVjdXRhYmxlKCkpCisgICAgICAg
ICAgICAgICAgbWFuZGF0b3J5TWluaW11bSA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cGFyYW1ldGVy
Q291bnQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5p
bXVtID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gaW5jbHVkZXMgInRoaXMiCisg
ICAgICAgICAgICBtYXhOdW1Bcmd1bWVudHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgICAgICBj
YWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBtYW5kYXRv
cnlNaW5pbXVtICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHNvcnQgb2Yg
cHJldGVuZCB0aGF0IHRoaXMgKmlzKiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IHdlcmUg
cGFzc2VkLgorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBtYXhOdW1B
cmd1bWVudHM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVn
aXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNl
dCAtPSBtYXhOdW1Bcmd1bWVudHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgcmVn
aXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAg
IHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAg
ICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgIC1yZWdpc3Rl
ck9mZnNldCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSBy
ZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgICAgICAKICAgICAgICAgYm9vbCByZXN1
bHQgPSBhdHRlbXB0VG9JbmxpbmVDYWxsKAogICAgICAgICAgICAgY2FsbFRhcmdldE5vZGUsIHJl
c3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAg
ICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJE
b2VzTm9ybWFsTGlua2luZywgcHJlZGljdGlvbiwKLSAgICAgICAgICAgIGlubGluaW5nQmFsYW5j
ZSk7Ci0gICAgICAgIGlmICghcmVzdWx0ICYmICFjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQot
ICAgICAgICAgICAgdW5kb0Z1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdKTsKKyAgICAg
ICAgICAgIGlubGluaW5nQmFsYW5jZSwgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAg
ICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSwgY2FsbFRh
cmdldE5vZGUsIHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCA/IHRoaXNBcmd1bWVu
dCA6IFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUg
YSB2YXJhcmdzIGNhbGwsIHdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgYXJndW1lbnRzIHJpZ2h0IG5v
dy4KKyAgICAgICAgICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdpc3Rlck9mZnNl
dCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAgICAgICAgICAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRTdGFydCArIDEpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5jb3VudCA9IFZpcnR1YWxS
ZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhLT5vZmZzZXQgPSBhcmd1bWVudHNPZmZzZXQ7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4TnVtQXJndW1lbnRzOworICAgICAgICAgICAgICAg
ICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11bTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8o
ZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIC8vIEluIERGRyBJUiBiZWZvcmUgU1NBLCB3ZSBjYW5ub3QgaW5zZXJ0IGNvbnRy
b2wgZmxvdyBiZXR3ZWVuIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFy
YXJncyBhbmQgdGhlIGxhc3QgU2V0QXJndW1lbnQuIFRoaXMgaXNuJ3QgYSBwcm9ibGVtIG9uY2Ug
d2UgZ2V0IHRvIERGRworICAgICAgICAgICAgICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3
ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cK
KyAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIFNTQS4KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIo
cmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgZmFsc2UpOworICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQgd2lsbCBmb3JjZSB0
aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24ndAorICAgICAgICAg
ICAgICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0QXJn
dW1lbnQgYW5kIEZsdXNoZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBpcworICAgICAgICAgICAgICAg
ICAgICAvLyBtb3N0bHkganVzdCBhIGZvcm1hbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgY291
bnRWYXJpYWJsZS0+cHJlZGljdChTcGVjSW50MzIpOworICAgICAgICAgICAgICAgICAgICBjb3Vu
dFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBP
cEluZm8oY291bnRWYXJpYWJsZSkpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+bG9jYWwoKSwgc2V0
QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNw
ZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlzQXJndW1lbnQpLCBJ
bW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSAxOyBhcmd1bWVudCA8IG1heE51bUFyZ3VtZW50czsgKythcmd1bWVudCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRTdGFydCArIGFyZ3VtZW50KSwgZmFsc2UpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsgLy8gV2UgY3Vy
cmVudGx5IGhhdmUgbm93aGVyZSB0byBwdXQgdGhlIHR5cGUgY2hlY2sgb24gdGhlIExvYWRWYXJh
cmdzLiBMb2FkVmFyYXJncyBpcyBlZmZlY3RmdWwsIHNvIGFmdGVyIGl0IGZpbmlzaGVzLCB3ZSBj
YW5ub3QgZXhpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRm9yIGEgd2hpbGUgaXQgaGFkIGJlZW4gbXkgaW50ZW50aW9uIHRvIGRvIHRoaW5n
cyBsaWtlIHRoaXMgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJlZGlj
dGlvbiBpbmplY3Rpb24gcGhhc2UuIEJ1dCBpbiB0aGlzIGNhc2UgaXQncyByZWFsbHkgYmVzdCB0
byBkbyBpdCBoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBpdCdzIGhl
cmUgdGhhdCB3ZSBoYXZlIGFjY2VzcyB0byB0aGUgdmFyaWFibGUgYWNjZXNzIGRhdGFzIGZvciB0
aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlubGluaW5nIHdlJ3JlIGFib3V0IHRvIGRv
LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNvbWV0aGluZyBlbHNlIHRoYXQncyBpbnRlcmVzdGluZyBoZXJlIGlzIHRoYXQgd2UnZCByZWFs
bHkgbG92ZSB0byBnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZWRpY3Rpb25zIGZy
b20gdGhlIGFyZ3VtZW50cyBsb2FkZWQgYXQgdGhlIGNhbGxzaXRlLCByYXRoZXIgdGhhbiB0aGUK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyByZWNlaXZlZCBpbnNpZGUgdGhl
IGNhbGxlZS4gQnV0IHRoYXQgcHJvYmFibHkgd29uJ3QgbWF0dGVyIGZvciBtb3N0CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjYWxscy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
b2RlQmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGNvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9y
QXJndW1lbnQoYXJndW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRB
cmd1bWVudCwgT3BJbmZvKHZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCks
IHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nKCJEb25lIGlubGluaW5nIChzaW1wbGUpLlxuIik7CiAgICAgICAg
ICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CisgICAg
ICAgICAgICBkYXRhTG9nKCJSZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0xNDM3LDExICsxNTg0LDkgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIGRvIG1vcmUgZGV0YWls
ZWQgcG9seXZhcmlhbnQvcG9seW1vcnBoaWMgcHJvZmlsaW5nOyBhbmQgc2Vjb25kLCBpdCByZWR1
Y2VzIGNvbXBpbGUgdGltZXMgaW4KICAgICAvLyB0aGUgREZHLiBBbmQgYnkgcG9seXZhcmlhbnQg
cHJvZmlsaW5nIHdlIG1lYW4gcG9seXZhcmlhbnQgcHJvZmlsaW5nIG9mICp0aGlzKiBjYWxsLiBO
b3RlIHRoYXQKICAgICAvLyB3ZSBjb3VsZCBpbXByb3ZlIHRoYXQgYXNwZWN0IG9mIHRoaXMgYnkg
ZG9pbmcgcG9seW1vcnBoaWMgaW5saW5pbmcgYnV0IGhhdmluZyB0aGUgcHJvZmlsaW5nCi0gICAg
Ly8gYWxzby4gQ3VycmVudGx5IHdlIG9wdCBhZ2FpbnN0IHRoaXMsIGJ1dCBpdCBjb3VsZCBiZSBp
bnRlcmVzdGluZy4gVGhhdCB3b3VsZCByZXF1aXJlIGhhdmluZyBhCi0gICAgLy8gc2VwYXJhdGUg
bm9kZSBmb3IgY2FsbCBlZGdlIHByb2ZpbGluZy4KLSAgICAvLyBGSVhNRTogSW50cm9kdWNlIHRo
ZSBub3Rpb24gb2YgYSBzZXBhcmF0ZSBjYWxsIGVkZ2UgcHJvZmlsaW5nIG5vZGUuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjAzMwotICAgIGlmICgh
aXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGlj
Q2FsbElubGluaW5nKCkpIHsKKyAgICAvLyBhbHNvLgorICAgIGlmICghaXNGVEwobV9ncmFwaC5t
X3BsYW4ubW9kZSkgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nKCkK
KyAgICAgICAgfHwgSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkpIHsKICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgKGhh
cmQpLlxuIik7CiAgICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmln
aW4oKSwgIlxuIik7CkBAIC0xNDgyLDYgKzE2MjcsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29k
ZU9yaWdpbigpLCAiXG4iKTsKICAgICB9CiAgICAgCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
cmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAKICAgICAvLyBUaGlzIG1ha2VzIG1l
IHdpc2ggdGhhdCB3ZSB3ZXJlIGluIFNTQSBhbGwgdGhlIHRpbWUuIFdlIG5lZWQgdG8gcGljayBh
IHZhcmlhYmxlIGludG8gd2hpY2ggdG8KICAgICAvLyBzdG9yZSB0aGUgY2FsbGVlIHNvIHRoYXQg
aXQgd2lsbCBiZSBhY2Nlc3NpYmxlIHRvIGFsbCBvZiB0aGUgYmxvY2tzIHdlJ3JlIGFib3V0IHRv
IGNyZWF0ZS4gV2UKICAgICAvLyBnZXQgYXdheSB3aXRoIGRvaW5nIGFuIGltbWVkaWF0ZS1zZXQg
aGVyZSBiZWNhdXNlIHdlIHdvdWxkbid0IGhhdmUgcGVyZm9ybWVkIGFueSBzaWRlIGVmZmVjdHMK
QEAgLTE1MjYsNyArMTY3Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5n
KE5vZGUKICAgICAgICAgYm9vbCBpbmxpbmluZ1Jlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwo
CiAgICAgICAgICAgICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0
YXR1c1tpXSwgcmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyTGlua3NNYW51YWxseSwgcHJlZGljdGlv
biwKLSAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CisgICAgICAgICAgICBpbmxpbmluZ0Jh
bGFuY2UsIFsmXSAoQ29kZUJsb2NrKikgeyB9KTsKICAgICAgICAgCiAgICAgICAgIGlmICghaW5s
aW5pbmdSZXN1bHQpIHsKICAgICAgICAgICAgIC8vIFRoYXQgZmFpbGVkIHNvIHdlIGxldCB0aGUg
YmxvY2sgZGllLiBOb3RoaW5nIGludGVyZXN0aW5nIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgdG8K
QEAgLTE2MTAsMTQgKzE3NTcsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5p
bmcoTm9kZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVNaW5NYXgoaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKK3RlbXBsYXRlPHR5cGVuYW1lIENo
ZWNrc0Z1bmN0b3I+Citib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlc3Vs
dE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewog
ICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGgubWluKCkK
KyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4p
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgCiAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsgLy8gTWF0aC5taW4oeCkKKyAgICAgICAgaW5zZXJ0
Q2hlY2tzKCk7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgRWRnZShyZXN1bHQsIE51bWJlclVzZSkpOwogICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOwpAQCAtMTYyNSw2ICsxNzc1
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZQogICAgIH0KICAg
ICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMykgeyAvLyBNYXRoLm1p
bih4LCB5KQorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChvcCwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgyLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTE2MzMsMTEgKzE3ODQsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4
KGludCByZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+Citib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJp
bnNpYyBpbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBDaGVja3NGdW5jdG9y
JiBpbnNlcnRDaGVja3MpCiB7CiAgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKICAgICBjYXNlIEFi
c0ludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0g
MSkgeyAvLyBNYXRoLmFicygpCisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25z
dGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQpAQCAtMTY0NSw2ICsxNzk4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zs
b2F0aW5nUG9pbnRBYnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBp
bnNlcnRDaGVja3MoKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoQXJpdGhBYnMs
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAg
ICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIE92ZXJmbG93KSkKICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9k
ZU1heU92ZXJmbG93SW5ERkcpOwpAQCAtMTY1MywxNSArMTgwNywxNiBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgfQogCiAgICAgY2FzZSBNaW5JbnRyaW5z
aWM6Ci0gICAgICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4s
IHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIHJl
dHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4sIHJlZ2lzdGVyT2Zmc2V0
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgCiAg
ICAgY2FzZSBNYXhJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0
T3BlcmFuZCwgQXJpdGhNYXgsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk7CisgICAgICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhN
YXgsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW5zZXJ0Q2hl
Y2tzKTsKICAgICAgICAgCiAgICAgY2FzZSBTcXJ0SW50cmluc2ljOgogICAgIGNhc2UgQ29zSW50
cmluc2ljOgogICAgIGNhc2UgU2luSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgo
SlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQpAQCAtMTY3MSwxNCArMTgyNiwxNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVy
OjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgCisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhT
cXJ0LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBD
b3NJbnRyaW5zaWM6CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhDb3MsIGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNpbkludHJp
bnNpYzoKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChBcml0aFNpbiwgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgCkBAIC0xNzAxLDYgKzE4NTksNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAg
ICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlN
b2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwgYXJyYXlQdXNoKTsKICAgICAgICAgICAgIApAQCAtMTcyNCw2ICsx
ODgzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgaW5zZXJ0Q2hl
Y2tzKCk7CiAgICAgICAgICAgICBOb2RlKiBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3As
IE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFycmF5UG9wKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMTczOCw2ICsxODk4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNlcnRD
aGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVyYW5kID0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgaW5kZXhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0
ZXJPZmZzZXQpOwogICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hh
ckNvZGVBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0
aGlzT3BlcmFuZCksIGdldChpbmRleE9wZXJhbmQpKTsKQEAgLTE3NTAsNiArMTkxMSw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzT3Bl
cmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRU
b0dyYXBoKFN0cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dv
cmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldChpbmRleE9wZXJhbmQpKTsKQEAgLTE3NjEsNiAr
MTkyMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAg
ICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBpbmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rl
ck9mZnNldCk7CiAgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdGcm9t
Q2hhckNvZGUsIGdldChpbmRleE9wZXJhbmQpKTsKIApAQCAtMTc3Myw2ICsxOTM2LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBOb2RlKiByZWdFeHBFeGVj
ID0gYWRkVG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVnRXhwRXhlYyk7CiAgICAgICAg
IApAQCAtMTc4Myw2ICsxOTQ3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAgIGluc2VydENoZWNrcygp
OwogICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBUZXN0LCBPcElu
Zm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCBy
ZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgcmVnRXhwRXhlYyk7CiAgICAgICAgIApAQCAtMTc5Miw2ICsxOTU3LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNhc2UgSU11bEludHJpbnNp
YzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMykKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBsZWZ0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJpZ2h0T3BlcmFuZCA9
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAg
Tm9kZSogbGVmdCA9IGdldChsZWZ0T3BlcmFuZCk7CkBAIC0xODAzLDI5ICsxOTY5LDM0IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICBjYXNlIEZSb3VuZElu
dHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRoRlJvdW5kLCBnZXQob3BlcmFuZCkpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIERGR1RydWVJbnRyaW5zaWM6
IHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0T3BlcmFuZCksIGpzQ29uc3RhbnQoanNCb29sZWFuKHRydWUpKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBPU1JFeGl0SW50cmluc2ljOiB7
CisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhp
dCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3Jh
cGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnRVbmRlZmluZWQpKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJc0ZpbmFsVGllckludHJpbnNp
YzogeworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgICAgIGpzQ29uc3RhbnQoanNCb29sZWFuKE9wdGlv
bnM6OnVzZUZUTEpJVCgpID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgOiB0cnVlKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0SW50MzJI
ZWFwUHJlZGljdGlvbkludHJpbnNpYzogeworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAg
ICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKSB7
CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGksIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzSGVhcFByZWRp
Y3Rpb24oKSkKQEAgLTE4MzgsNiArMjAwOSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpYyhpbnQKICAgICBjYXNlIEZpYXRJbnQ1MkludHJpbnNpYzogewogICAgICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwog
ICAgICAgICBpZiAoZW5hYmxlSW50NTIoKSkKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoRmlhdEludDUyLCBnZXQob3BlcmFuZCkpKTsK
QEAgLTE4NTEsOSArMjAyMywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoaW50CiAgICAgfQogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAogICAgIGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgaW50IHJlZ2lzdGVyT2Zm
c2V0LAotICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUg
dHlwZSkKKyAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBl
IHR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBpZiAoIWlz
VHlwZWRWaWV3KHR5cGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xODk3LDE1ICsyMDcw
LDE3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVR5cGVkQXJyYXlDb24KICAgICAKICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAorCisgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgYWRkVG9HcmFwaChOZXdUeXBlZEFycmF5LCBPcElu
Zm8odHlwZSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNl
dCkpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1
bmN0b3I+CiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rp
b24oCiAgICAgaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBp
bnQgcmVnaXN0ZXJPZmZzZXQsCi0gICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3Im
IGluc2VydENoZWNrcykKIHsKICAgICAvLyBJZiB3ZSBldmVyIGZpbmQgdGhhdCB3ZSBoYXZlIGEg
bG90IG9mIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IHdlIHNwZWNpYWxpemUgZm9yLAogICAgIC8v
IHRoZW4gd2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgc29tZSBzb3J0IG9mIGhhc2h0YWJsZSBkaXNw
YXRjaCwgb3IgbWF5YmUgZXZlbgpAQCAtMTkxOCw2ICsyMDkzLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgICAgICBpZiAoZnVuY3Rpb24tPmdsb2JhbE9i
amVjdCgpICE9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAgIGluc2VydENoZWNr
cygpOwogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgewogICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKE5ld0FycmF5V2l0aFNpemUsIE9wSW5mbyhBcnJheVdpdGhVbmRlY2lk
ZWQpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkp
OwpAQCAtMTkzMiw2ICsyMTA4LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3Rh
bnRJbnRlcgogICAgIH0KICAgICAKICAgICBpZiAoZnVuY3Rpb24tPmNsYXNzSW5mbygpID09IFN0
cmluZ0NvbnN0cnVjdG9yOjppbmZvKCkpIHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAg
ICAgIAogICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gMSkKQEAgLTE5NDcsMTEgKzIxMjUsOSBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgfQogICAgIAogICAgIGZvciAo
dW5zaWduZWQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgTlVNQkVSX09GX1RZUEVEX0FSUkFZ
X1RZUEVTOyArK3R5cGVJbmRleCkgewotICAgICAgICBib29sIHJlc3VsdCA9IGhhbmRsZVR5cGVk
QXJyYXlDb25zdHJ1Y3RvcigKKyAgICAgICAgcmV0dXJuIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1
Y3RvcigKICAgICAgICAgICAgIHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNl
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCi0gICAgICAgICAgICBpbmRleFRvVHlwZWRB
cnJheVR5cGUodHlwZUluZGV4KSk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGluZGV4VG9UeXBlZEFycmF5VHlwZSh0eXBlSW5kZXgp
LCBpbnNlcnRDaGVja3MpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTEz
LDQzICszMjg5LDcwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIGludCB0aGlzUmVnID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKICAgICAgICAgICAgIGludCBhcmd1bWVudHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kOwogICAgICAgICAgICAgaW50IGZpcnN0RnJlZVJlZyA9IGN1cnJlbnRJbnN0cnVjdGlv
bls1XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBB
U1NFUlQoaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhcmd1
bWVudHMsIGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+YXJndW1l
bnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCkpOwotCi0g
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7Ci0KLSAgICAg
ICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50cy5z
aXplKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIExldCdzIGNvbXB1dGUgdGhlIHJl
Z2lzdGVyIG9mZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyLCBhbmQK
LSAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhl
IGNhbGwgZnJhbWUuCi0gICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBmaXJzdEZyZWVS
ZWcgKyAxOwotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gYXJnQ291bnQ7IC8vIFdlIHdp
bGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0
IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwgcHJldGVuZCB0byBo
YXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCisgICAgICAgICAgICBpZiAoYXJndW1lbnRzID09IG1f
aW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3Rlcigp
Lm9mZnNldCgpCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWlubGluZUNhbGxG
cmFtZSgpLT5pc1ZhcmFyZ3MoKQorICAgICAgICAgICAgICAgICAgICAmJiAhZmlyc3RWYXJBcmdP
ZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0FyZ3VtZW50c05v
dENyZWF0ZWQpOworCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5s
aW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LiBXZSBzdGFy
dCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAorICAgICAgICAgICAgICAgICAgICAv
LyB0aGVuIGFkanVzdCBmb3IgdGhlIHRoaW5ncyB3ZSB3YW50IGluIHRoZSBjYWxsIGZyYW1lLgor
ICAgICAgICAgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAx
OworICAgICAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ug
d2lsbCBiZSBwYXNzaW5nIHNvbWUgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgICAgICByZWdp
c3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyAvLyBXZSB3aWxsIHBy
ZXRlbmQgdG8gaGF2ZSBhIGNhbGwgZnJhbWUgaGVhZGVyLgorICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgorICAgICAgICAgICAgICAg
ICAgICByZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsKKworICAgICAgICAgICAgICAgICAgICBlbnN1
cmVMb2NhbHMoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgYnl0ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4g
QnV0IHdlJ2xsIGRvIGl0IGFuZCBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAgIC8vIGxvb2sg
bGlrZSB0aGUgYnl0ZWNvZGUgaGFkIGRvbmUgaXQuCisgICAgICAgICAgICAgICAgICAgIGludCBu
ZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emU7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVy
KyspLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQg
PCBhcmdDb3VudDsgKythcmd1bWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoYXJndW1lbnQpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQs
IENhbGwsIENvZGVGb3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCisgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCk7Cisg
ICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEVtaXQgQ2Fs
bEZvcndhcmRWYXJhcmdzCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWVhbnMgd2Ug
Y2Fubm90IGlubGluZSBmb3J3YXJkZWQgdmFyYXJncyBjYWxscyBpbnNpZGUgYSB2YXJhcmdzCisg
ICAgICAgICAgICAgICAgLy8gY2FsbCBmcmFtZS4gV2Ugd2lsbCBwcm9iYWJseSBmaXggdGhhdCBv
bmNlIHdlIGZpbmFsbHkgZ2V0IHJpZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBhcmd1bWVu
dHMgb2JqZWN0IHNwZWNpYWwtY2FzaW5nLgorICAgICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0
YSogZGF0YSA9IG1fZ3JhcGgubV9jYWxsVmFyYXJnc0RhdGEuYWRkKCk7CisgICAgICAgICAgICAg
ICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaCgKKyAgICAg
ICAgICAgICAgICAgICAgQ2FsbEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSksIE9wSW5mbyhn
ZXRQcmVkaWN0aW9uKCkpLAorICAgICAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVy
KGNhbGxlZSkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKSk7CisgICAgICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOworICAgICAgICAgICAgICAgIGlm
IChyZXN1bHRSZWcuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBzZXQocmVzdWx0UmVn
LCBjYWxsKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3MpOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdu
bWVudCByaWdodC4KLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZigKLSAgICAgICAgICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAot
ICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7Ci0KLSAgICAgICAgICAgIGVuc3VyZUxv
Y2FscygKLSAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCi0g
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9j
YWwoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3VsZG4n
dCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2UgaXQK
LSAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNvZGUgaGFkIGRvbmUgaXQuCi0gICAg
ICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVn
aXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJbW1lZGlhdGVOYWtlZFNl
dCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBh
cmdDb3VudDsgKythcmd1bWVudCkKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50
KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxl
Q2FsbCgKLSAgICAgICAgICAgICAgICByZXN1bHQsIENhbGwsIENvZGVGb3JDYWxsLCBPUENPREVf
TEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCi0gICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3Vu
dCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVu
dEluc3RydWN0aW9uLCBDYWxsVmFyYXJncywgQ29kZUZvckNhbGwpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAg
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGhhbmRsZVZhcmFy
Z3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0VmFyYXJncywgQ29kZUZvckNvbnN0
cnVjdCk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb25zdHJ1Y3RfdmFyYXJncyk7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgogICAgICAg
ICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9yIG5vdy4gSXQgbWFrZXMgc2Vuc2UgdG8g
bGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCiAgICAgICAgICAgICAvLyBzdXBwb3J0IHNpbW1l
ciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUgZ2VuZXJhbCwgc2luY2UgaXQncwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAko
cmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk2LDYgKzk2LDggQEAg
aW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogY29kZUJsbwogCiBDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSW5zdHJ1Y3Rpb24qIHBjKQogeworICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOyAvLyBU
aGlzIGZ1bmN0aW9uIGRvZXMgc29tZSBieXRlY29kZSBwYXJzaW5nLiBPcmRpbmFyaWx5IGJ5dGVj
b2RlIHBhcnNpbmcgcmVxdWlyZXMgdGhlIG93bmluZyBDb2RlQmxvY2suIEl0J3Mgc29ydCBvZiBz
dHJhbmdlIHRoYXQgd2UgZG9uJ3QgdXNlIGl0IGhlcmUgcmlnaHQgbm93LgorICAgIAogICAgIHN3
aXRjaCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX2VudGVyOgogICAgIGNhc2Ugb3BfdG91Y2hf
ZW50cnk6CkBAIC0xODIsNiArMTg0LDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZl
bChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgogICAgIGNhc2Ugb3Bf
Y2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoK
KyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3Jl
ZzoKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF90ZWFyX29mZl9h
cmd1bWVudHM6CkBAIC0yMjMsMTQgKzIyNyw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWwoT3Bjb2RlSUQKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAgICAg
fQogCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVz
ZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVudHNS
ZWdpc3RlcigpLm9mZnNldCgpCi0gICAgICAgICAgICAmJiAhcGNbNl0udS5vcGVyYW5kKQotICAg
ICAgICAgICAgcmV0dXJuIENhbklubGluZTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBo
YW5kbGUgdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNzYyNgotICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLQogICAgIGNhc2Ug
b3BfbmV3X3JlZ2V4cDogCiAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoK
ICAgICBjYXNlIG9wX25ld19mdW5jOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTg2LDkgKzg2LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBmdW5jdGlvbkNhcGFiaWxp
dAogICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbkNvbXBpbGVBbmRJbmxpbmUsIGNv
bXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKICAgICBpZiAobWlnaHRDb21waWxlICYmICFtaWdodElu
bGluZSkKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5Db21waWxlLCBjb21wdXRl
ZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENvbXBpbGUgJiYgbWlnaHRJbmxpbmUp
Ci0gICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2FuSW5saW5lLCBjb21wdXRlZENhcGFi
aWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQorICAg
IGlmICghbWlnaHRDb21waWxlKQogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBDYW5ub3RDb21waWxlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjUsNiArMzY1LDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2Fs
bDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAg
IGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAg
ICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2UgSW46CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
c0xlbmd0aFNhZmU6CkBAIC00MDEsNiArNDA0LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywg
QWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6
CisgICAgICAgIC8vIFRoaXMgYWN0dWFsbHkgd3JpdGVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcyB3
ZWxsLiBCdXQgd2hlbiBpdCByZWFkcyB0aGUgYXJyYXksIGl0IGRvZXMKKyAgICAgICAgLy8gc28g
aW4gYSB3YXkgdGhhdCBtYXkgdHJpZ2dlciBnZXR0ZXJzIG9yIHZhcmlvdXMgdHJhcHMuCisgICAg
ICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgogICAgICAgICByZWFkKEFic3Ry
YWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOwogICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51
bmxpbmtlZExvY2FsKCkpKSwgbm9kZSk7CkBAIC04ODEsNyArODkxLDcgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgREZHX0NSQVNIKGdyYXBo
LCBub2RlLCB0b0NTdHJpbmcoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIsIEdyYXBoOjpvcE5h
bWUobm9kZS0+b3AoKSkpLmRhdGEoKSk7CiB9CiAKIGNsYXNzIE5vT3BDbG9iYmVyaXplIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI5Miw3ICsyOTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVu
dW0gQ2FwYWJpbGl0eUxldmVsIHsKICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwK
ICAgICBDYW5Db21waWxlLAogICAgIENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0
eUxldmVsTm90U2V0CkBAIC0zMTIsNyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShD
YXBhYmlsaXR5TGV2ZWwgbAogaW5saW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBs
ZXZlbCkKIHsKICAgICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAg
Y2FzZSBDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZh
dWx0OgpAQCAtMzI1LDE0ICszMjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBw
ZXJCb3VuZChDCiAgICAgc3dpdGNoIChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAg
ICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAg
c3dpdGNoIChiKSB7Ci0gICAgICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNv
bXBpbGVBbmRJbmxpbmU6Ci0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAg
ICBjYXNlIENhbkNvbXBpbGU6CiAgICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENh
bkNvbXBpbGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShy
ZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2Ug
Q2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNh
c2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2Fs
bEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNv
bnN0cnVjdDoKICAgICBjYXNlIEJyZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzEsNiArMTIzMSwzNiBA
QCB2b2lkIEdyYXBoOjpoYW5kbGVBc3NlcnRpb25GYWlsdXJlKAogICAgIGNyYXNoKCp0aGlzLCB0
b0NTdHJpbmcoIldoaWxlIGhhbmRsaW5nIGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxu
XG4iKSwgZmlsZSwgbGluZSwgZnVuY3Rpb24sIGFzc2VydGlvbik7CiB9CiAKK1ZhbHVlUHJvZmls
ZSogR3JhcGg6OnZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgICAgIAorICAgIGlmIChub2RlLT5vcCgpID09IEdldEFyZ3VtZW50KSB7CisgICAgICAgIGlm
IChub2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBwcm9maWxl
ZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQo
KSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKG5v
ZGUtPmhhc0xvY2FsKCp0aGlzKSkgeworICAgICAgICBpZiAobV9mb3JtID09IFNTQSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1
bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGludCBhcmd1bWVu
dCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOworICAgICAgICBpZiAobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkgIT0gbV9hcmd1bWVudHNbYXJndW1lbnRdLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gcHJvZmls
ZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOworICAgIH0KKyAgICAg
ICAgCisgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgIHJldHVybiBw
cm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgIHJldHVybiBudWxscHRyOwor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3OTk3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtNDcyLDMyICs0NzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3Byb2ZpbGVk
QmxvY2stPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpOwogICAgIH0KICAgICAKLSAgICBW
YWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAg
aWYgKCFub2RlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAotICAgICAgICBDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QXJndW1l
bnQpCi0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJn
dW1lbnQobm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KG5vZGUtPmhhc0xvY2FsKCp0aGlzKSkgewotICAgICAgICAgICAgaWYgKG1fZm9ybSA9PSBTU0Ep
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmxvY2Fs
KCkuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
aW50IGFyZ3VtZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gbV9hcmd1bWVudHNbYXJndW1lbnRdLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVu
dCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGlj
dGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBWYWx1ZVByb2ZpbGUqIHZhbHVl
UHJvZmlsZUZvcihOb2RlKiBub2RlKTsKICAgICAKICAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlIG1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkKICAgICB7
CkBAIC04MjIsNiArNzk3LDggQEAgcHVibGljOgogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0
YT4gbV9tdWx0aUdldEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+
IG1fbXVsdGlQdXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGE+IG1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKKyAgICBCYWc8Q2FsbFZhcmFyZ3NEYXRh
PiBtX2NhbGxWYXJhcmdzRGF0YTsKKyAgICBCYWc8TG9hZFZhcmFyZ3NEYXRhPiBtX2xvYWRWYXJh
cmdzRGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlh
YmxlRGF0YTsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0
ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBib29sIG1faGFzQXJndW1l
bnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDcgQEAgdm9pZCBKSVRD
b21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAgICAgICAvLyBsb29rdXBFeGNlcHRp
b25IYW5kbGVyRnJvbUNhbGxlckZyYW1lIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0g
YW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihtX2dyYXBoLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAKICNpZiBDUFUoWDg2KQogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGUgY2FsbCBh
YnN0cmFjdGlvbiwgYnV0IHRoaXMgaXMgY3VycmVudGx5IGluIHRoZSBTcGVjdWxhdGl2ZUpJVCBs
YXllciEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzk5
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTgzLDYgKzE4MywyMCBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAgYm9vbCBkaWRV
c2VKdW1wVGFibGU7CiB9OwogCitzdHJ1Y3QgQ2FsbFZhcmFyZ3NEYXRhIHsKKyAgICBpbnQgZmly
c3RWYXJBcmdPZmZzZXQ7Cit9OworCitzdHJ1Y3QgTG9hZFZhcmFyZ3NEYXRhIHsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3RhcnQ7IC8vIExvY2FsIGZvciB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgY291bnQ7IC8vIExvY2FsIGZvciB0aGUgY291bnQuCisgICAgVmlydHVh
bFJlZ2lzdGVyIG1hY2hpbmVTdGFydDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUNvdW50
OworICAgIHVuc2lnbmVkIG9mZnNldDsgLy8gV2hpY2ggYXJyYXkgZWxlbWVudCB0byBzdGFydCB3
aXRoLiBVc3VhbGx5IHRoaXMgaXMgMC4KKyAgICB1bnNpZ25lZCBtYW5kYXRvcnlNaW5pbXVtOyAv
LyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9uIHRoZSBzdGFjayB0aGF0IG11c3QgYmUgaW5pdGlh
bGl6ZWQ7IGlmIHRoZSBhcnJheSBpcyB0b28gc2hvcnQgdGhlbiB0aGUgbWlzc2luZyBlbGVtZW50
cyBtdXN0IGdldCB1bmRlZmluZWQuCisgICAgdW5zaWduZWQgbGltaXQ7IC8vIE1heGltdW0gbnVt
YmVyIG9mIGVsZW1lbnRzIHRvIGxvYWQuCit9OworCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNz
aW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGlu
Z3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29k
ZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCiAvLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwg
b3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGUqLgpAQCAtODg4LDYgKzkwMiwzNSBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+
Kj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc0NhbGxWYXJhcmdzRGF0YSgp
CisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJn
czoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIENh
bGxWYXJhcmdzRGF0YSogY2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCho
YXNDYWxsVmFyYXJnc0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Q2FsbFZh
cmFyZ3NEYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc0xvYWRWYXJh
cmdzRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJnczsKKyAg
ICB9CisgICAgCisgICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJnc0RhdGEoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGhhc0xvYWRWYXJhcmdzRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxMb2FkVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAogICAg
IGJvb2wgaGFzUmVzdWx0KCkKICAgICB7CiAgICAgICAgIHJldHVybiAhIXJlc3VsdCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTc5OTcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIC8qIHRoaXMgbXVzdCBiZSB0aGUgZGlyZWN0bHkgc3Vic2VxdWVudCBwcm9wZXJ0eSBwdXQu
IE5vdGUgdGhhdCBQdXRCeVZhbCAqL1wKICAgICAvKiBvcGNvZGVzIHVzZSBWYXJBcmdzIGJlYXVz
ZSB0aGV5IG1heSBoYXZlIHVwIHRvIDQgY2hpbGRyZW4uICovXAogICAgIG1hY3JvKEdldEJ5VmFs
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oTG9hZFZhcmFy
Z3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oUHV0QnlWYWwsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1dEJ5VmFsQWxpYXMs
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApAQCAtMjE3LDYgKzIxOCw5IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBDYWxscy4gKi9cCiAgICAg
bWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJB
cmdzKSBcCiAgICAgbWFjcm8oQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhDYWxsVmFyYXJncywgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENhbGxGb3J3YXJkVmFyYXJncywg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENvbnN0cnVjdFZh
cmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOYXRp
dmVDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3Mp
IFwKICAgICBtYWNybyhOYXRpdmVDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1
LDYgKzE1NSwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczogewor
ICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
KyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPQor
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1h
Y2hpbmVDb3VudCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0t
OykgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQorICAgICAgICAgICAgICAgIEF2
YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3RlcihkYXRh
LT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMTgsNiArMTAxOCwyNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoCiAgICAgc2V0LT5ub3RpZnlX
cml0ZSh2bSwgdmFsdWUsICJFeGVjdXRlZCBOb3RpZnlXcml0ZSIpOwogfQogCitpbnQzMl90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEFyZ3VtZW50cyk7CisgICAgCisgICAgcmV0dXJuIHNpemVPZlZhcmFyZ3MoZXhlYywg
YXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZmlyc3RFbGVtZW50
RGVzdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGlu
dDMyX3QgbGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50
cyk7CisgICAgCisgICAgbG9hZFZhcmFyZ3MoZXhlYywgVmlydHVhbFJlZ2lzdGVyKGZpcnN0RWxl
bWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKGlu
dDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgZXhl
Yy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworfQorCiBkb3VibGUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQog
ewogICAgIHJldHVybiBmbW9kKGEsIGIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEyNSw2ICsxMjUsOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUz
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3Vi
bGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0
YWJsZUluZGV4LCBKU1N0cmluZyopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlm
eVdyaXRlKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVuY29kZWRKU1ZhbHVl
KTsKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiwgaW50
MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3Qg
b2Zmc2V0LCBpbnQzMl90IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKTsKIAogaW50
NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRCb3hlZERvdWJsZVRvSW50NTIoRW5j
b2RlZEpTVmFsdWUpOwogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnREb3Vi
bGVUb0ludDUyKGRvdWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMTc5OTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMzLDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAgICAgbV9yZWFk
KFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6
Q2FsbGVlKSk7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkK
KyAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCiAgICAgdm9pZCB3cml0ZVRvcCgpCiAgICAgeworICAgICAgICBpZiAobV9ub2RlLT5v
cCgpID09IExvYWRWYXJhcmdzKSB7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugbm90ZSB0
aGUgd3JpdGVzIHRvIHRoZSBsb2NhbHMgdGhhdCB3aWxsIHN0b3JlIHRoZSBhcnJheSBlbGVtZW50
cyBhbmQKKyAgICAgICAgICAgIC8vIGNvdW50LgorICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRh
KiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgIG1fd3JpdGUo
ZGF0YS0+Y291bnQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7
IGktLTspCisgICAgICAgICAgICAgICAgbV93cml0ZShWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3Rh
cnQub2Zmc2V0KCkgKyBpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vdGUg
dGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIENhbGxGb3J3YXJk
VmFyYXJncywgc2luY2UgaXQgcmVhZHMKKyAgICAgICAgLy8gb3VyIGFyZ3VtZW50cyB0aGUgc2Ft
ZSB3YXkgdGhhdCBhbnkgZWZmZWN0ZnVsIHRoaW5nIG1pZ2h0LgorICAgICAgICAKICAgICAgICAg
aWYgKG1fZ3JhcGgubV9jb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkgewogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBp
LS0gPiAxOykKICAgICAgICAgICAgICAgICBtX3dyaXRlKHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODksNiArMTg5LDEwIEBAIGJv
b2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIENvbXBhcmVT
dHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBD
YWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFy
YXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIE5ld09iamVjdDoK
ICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
cmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlNldHVw
VmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVk
ZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAKQEAgLTYyNCwzOCArNjI1LDE2OSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENh
bGw7Ci0gICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QpOwotICAgIAotICAgIC8vIEZvciBjb25zdHJ1
Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFr
ZSBzcGFjZQotICAgIC8vIGZvciBpdC4KLSAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBpc0Nh
bGwgPyAwIDogMTsKKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAgIGJv
b2wgaXNDYWxsOworICAgIGJvb2wgaXNWYXJhcmdzOworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGw7
CisgICAgICAgIGlzQ2FsbCA9IHRydWU7CisgICAgICAgIGlzVmFyYXJncyA9IGZhbHNlOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxs
TGlua0luZm86OkNvbnN0cnVjdDsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAgIGlz
VmFyYXJncyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgor
ICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5r
SW5mbzo6Q2FsbFZhcmFyZ3M7CisgICAgICAgIGlzQ2FsbCA9IHRydWU7CisgICAgICAgIGlzVmFy
YXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
KyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3M7CisgICAg
ICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9k
ZSwgImJhZCBub2RlIHR5cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgRWRnZSBj
YWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKICAgICAKLSAgICBDYWxs
TGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlID0gaXNDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxs
IDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAgLy8gR290dGEgbG9hZCB0aGUgYXJndW1l
bnRzIHNvbWVob3cuIFZhcmFyZ3MgaXMgdHJpY2tpZXIuCisgICAgaWYgKGlzVmFyYXJncykgewor
ICAgICAgICAvLyAxKSBnZXQgdGhlIGFyZ3VtZW50cworICAgICAgICAvLyAyKSBmbHVzaCByZWdp
c3RlcnMKKyAgICAgICAgLy8gMykgc2V0IHVwIHRoZSBjYWxsIGZyYW1lCisgICAgICAgIC8vIDQp
IGdldCB0aGUgY2FsbGVlIGFuZCAidGhpcyIgYW5kIGhhbmRsZSB0aGVtCisgICAgICAgIC8vIDUp
IGZsdXNoIHJlZ2lzdGVycyBhZ2FpbgorICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmFyZ3NEYXRh
KiBkYXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisKKyAgICAgICAgR1BSUmVnIGFyZ3Vt
ZW50c0dQUjsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjI7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICAgICAgCisgICAgICAg
IGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8g
V2UgYXZvaWQgY2FsbGluZyBmbHVzaFJlZ2lzdGVycygpIGluc2lkZSB0aGUgY29udHJvbCBmbG93
IG9mIENhbGxGb3J3YXJkVmFyYXJncy4KKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGF1dG8gbG9hZEFyZ3VtZW50c0dQUiA9IFsmXSAo
R1BSUmVnIHJlc2VydmVkR1BSKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxs
Rm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBKSVRDb21w
aWxlcjo6c2VsZWN0U2NyYXRjaEdQUihyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAgbV9q
aXQubG9hZDY0KAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBh
cmd1bWVudHNHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
cmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgbG9jayhy
ZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1
bWVudHMuZ3ByKCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHVubG9jayhyZXNlcnZlZEdQUik7CisgICAgICAg
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc2NyYXRjaEdQUjEgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihh
cmd1bWVudHNHUFIsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIyID0gSklU
Q29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgcmVz
ZXJ2ZWRHUFIpOworICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBKSVRDb21waWxlcjo6c2VsZWN0
U2NyYXRjaEdQUihhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgcmVzZXJ2
ZWRHUFIpOworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihJ
bnZhbGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2
ZSB0aGUgd2hvbGUgcmVnaXN0ZXIgZmlsZSB0byBvdXJzZWx2ZXMsIGFuZCBhcmd1bWVudHNHUFIg
aGFzIHRoZQorICAgICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFNlbGVjdCBzb21lIHNjcmF0
Y2ggcmVnaXN0ZXJzLgorICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lsbCB1c2Ugc2NyYXRjaEdQ
UjIgdG8gcG9pbnQgdG8gb3VyIHN0YWNrIGZyYW1lLgorCisgICAgICAgIHVuc2lnbmVkIG51bVVz
ZWRTdGFja1Nsb3RzID0gbV9qaXQuZ3JhcGgoKS5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgICAg
IAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZlQXJndW1lbnRzOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8gRG8gdGhlIGhvcnJpZmljIGZv
by5hcHBseSh0aGlzLCBhcmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBkbyB0aGlzIG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwgaW5zdGVhZCBvZiBkeW5h
bWljYWxseSBieSB0ZXN0aW5nIHRoZQorICAgICAgICAgICAgLy8gYXJndW1lbnRzIHJlZ2lzdGVy
LiBUaGlzIHdpbGwgaGFwcGVuIG9uY2Ugd2UgZ2V0IHJpZCBvZiB0aGUgYXJndW1lbnRzIGxhenkg
Y3JlYXRpb24gYW5kCisgICAgICAgICAgICAvLyBsYXp5IHRlYXItb2ZmLgorICAgICAgICAgICAg
CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJv
LCBhcmd1bWVudHNHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAg
ICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShtX2ppdCwgc2NyYXRjaEdQUjIsIHNjcmF0
Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAg
ICAgICAgICByZXN1bHRHUFIgPSBzY3JhdGNoR1BSMjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaGF2ZUFyZ3VtZW50cyA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmxp
bmsoJm1faml0KTsKKyAgICAgICAgfQorCisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gUmlnaHQgbm93LCBh
cmd1bWVudHMgaXMgaW4gYXJndW1lbnRzR1BSIGFuZCB0aGUgcmVnaXN0ZXIgZmlsZSBpcyBmbHVz
aGVkLgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3Ms
IEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIG51bVVzZWRTdGFja1Nsb3Rz
LCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgd2Ug
aGF2ZSB0aGUgYXJndW1lbnQgY291bnQgb2YgdGhlIGNhbGxlZSBmcmFtZSwgYnV0IHdlJ3ZlIGxv
c3QgdGhlIGFyZ3VtZW50cyBvcGVyYW5kLgorICAgICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgYXJn
dW1lbnRzIG9wZXJhbmQgd2hpbGUgcHJlc2VydmluZyB0aGUgY2FsbGVlIGZyYW1lLgorICAgICAg
ICBsb2FkQXJndW1lbnRzR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMSk7Cisg
ICAgICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUobV9qaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBmYWxzZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgbV9qaXQuYWRkUHRy
KFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCBz
Y3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAg
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSwgYXJndW1lbnRzR1BSLCBkYXRhLT5maXJz
dFZhckFyZ09mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgaGF2
ZUFyZ3VtZW50cy5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlc3VsdEdQUiwgSklUQ29t
cGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIERGR19BU1NF
UlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAgICAg
Ly8gV2UgZG9uJ3QgbmVlZCB0aGUgYXJndW1lbnRzIGFycmF5IGFueW1vcmUuCisgICAgICAgIGlm
IChub2RlLT5vcCgpICE9IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgIHVzZShub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNDYWxsKSB7CisgICAgICAgICAg
ICAvLyBOb3cgc2V0IHVwIHRoZSAidGhpcyIgYXJndW1lbnQuCisgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB0aGlzQXJndW1lbnQodGhpcywgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFy
Z3MgPyBub2RlLT5jaGlsZDIoKSA6IG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQUlJl
ZyB0aGlzQXJndW1lbnRHUFIgPSB0aGlzQXJndW1lbnQuZ3ByKCk7CisgICAgICAgICAgICB0aGlz
QXJndW1lbnQudXNlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQo
dGhpc0FyZ3VtZW50R1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0
aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQorICAg
ICAgICAvLyBmb3IgaXQuCisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/
IDAgOiAxOwogICAgIAotICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJB
cmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCldOwotICAgIC8vIFRoZSBjYWxsIGluc3RydWN0
aW9uJ3MgZmlyc3QgY2hpbGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJl
biBhcmUgdGhlCi0gICAgLy8gYXJndW1lbnRzLgotICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9k
ZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3Mg
Zmlyc3QgY2hpbGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUg
dGhlCisgICAgICAgIC8vIGFyZ3VtZW50cy4KKyAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBu
b2RlLT5udW1DaGlsZHJlbigpIC0gMTsKICAgICAKLSAgICBpbnQgbnVtQXJncyA9IG51bVBhc3Nl
ZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNz
ZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgCi0gICAgbV9qaXQuc3RvcmUzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxv
YWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBKSVRDb21waWxlcjo6Y2FsbGVl
RnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgRWRnZSBhcmdF
ZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSAr
IDEgKyBpXTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwotICAg
ICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOwotICAgICAgICB1c2UoYXJnRWRnZSk7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7CisgICAgICAg
ICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+
Zmlyc3RDaGlsZCgpICsgMSArIGldOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRo
aXMsIGFyZ0VkZ2UpOworICAgICAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAg
ICAgICAgICAgIHVzZShhcmdFZGdlKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQo
YXJnR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFy
Z3VtZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgfQogICAgIH0KIAog
ICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKICAgICBHUFJSZWcg
Y2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwotICAgIHVzZShjYWxsZWVFZGdlKTsKLSAgICBtX2pp
dC5zdG9yZTY0KGNhbGxlZUdQUiwgbV9qaXQuY2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxl
ZSkpOworICAgIGNhbGxlZS51c2UoKTsKKyAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklU
Q29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKICAgICAKICAgICBm
bHVzaFJlZ2lzdGVycygpOwogCkBAIC02OTIsNiArODI0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICBjYWxsTGlua0luZm8tPmNhbGxlZUdQUiA9IGNh
bGxlZUdQUjsKICAgICAKICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0
YXJnZXRUb0NoZWNrLCBjYWxsTGlua0luZm8pOworICAgIAorICAgIC8vIElmIHdlIHdlcmUgdmFy
YXJncywgdGhlbiBhZnRlciB0aGUgY2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxp
c2ggb3VyIHN0YWNrIHBvaW50ZXIuCisgICAgaWYgKGlzVmFyYXJncykKKyAgICAgICAgbV9qaXQu
YWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5y
ZWFjaGFibGUgW1tjbGFuZzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYg
YW55IHRlbXBsYXRlIGV4cGFuc2lvbiB1c2VzIGl0CkBAIC00MjMxLDkgKzQzNjcsNTIgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBDYWxsOgog
ICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxs
Rm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBlbWl0
Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFy
Z3M6IHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NE
YXRhKCk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICB7
CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgYXJndW1lbnRzR1BSLCBkYXRhLT5vZmZzZXQpOworICAgICAgICAKKyAgICAgICAgbG9jayhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1
bWVudHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OworICAgICAgICB9CisgICAgICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxs
IGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCisg
ICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQg
aXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAgICAvLyBzdGFu
ZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQg
KmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFzdCB0aGUgc2l6
aW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxNDQ4CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAg
VmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAg
ICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgICAgICAgICBUcnVzdGVk
SW1tMzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTMyKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNo
aW5lQ291bnQpKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9h
ZFZhcmFyZ3MsIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzR1BSLCBkYXRh
LT5vZmZzZXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVt
KTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICBERkdf
QVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKTsKICAgICAgICAgCkBAIC00MzM4LDkgKzQ1MTcsMjAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSkpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5n
cmFwaCgpLCBub2RlLCAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0g
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1
bWVudENvdW50KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCByZXN1bHRHUFIpOworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKAorICAgICAg
ICAgICAgICAgIFRydXN0ZWRJbW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSksCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENv
dW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmly
dHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0
ZXIpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZXN1bHRHUFIpOworICAgICAgICB9CiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQzNTQsMjAgKzQ1NDQsMjIgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IoCiAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5l
QXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwogICAgICAgICAK
LSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAg
ICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAg
ICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewogICAgICAgICAgICAgbV9qaXQubW92ZSgKICAgICAgICAgICAgICAgICBJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSksCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
bV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiB0aGUgc2xvdyBwYXRoIGdlbmVy
YXRvciBzaG91bGQgcGVyZm9ybSBhIGZvcndhcmQgc3BlY3VsYXRpb24gdGhhdCB0aGUKLSAgICAg
ICAgLy8gcmVzdWx0IGlzIGFuIGludGVnZXIuIEZvciBub3cgd2UgcG9zdHBvbmUgdGhlIHNwZWN1
bGF0aW9uIGJ5IGhhdmluZyB0aGlzIHJldHVybgotICAgICAgICAvLyBhIEpTVmFsdWUuCi0gICAg
ICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKICAgICAgICAgICAgICAgICBjcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25HZXRBcmd1bWVu
dHNMZW5ndGgsIHJlc3VsdEdQUiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01NzgsNyArNTc4LDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0jaWZu
ZGVmIE5ERUJVRwogICAgIC8vIFVzZWQgdG8gQVNTRVJUIGZsdXNoUmVnaXN0ZXJzKCkgaGFzIGJl
ZW4gY2FsbGVkIHByaW9yIHRvCiAgICAgLy8gY2FsbGluZyBvdXQgZnJvbSBKSVQgY29kZSB0byBh
IEMgaGVscGVyIGZ1bmN0aW9uLgogICAgIGJvb2wgaXNGbHVzaGVkKCkKQEAgLTU5Myw3ICs1OTIs
NiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotI2Vu
ZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SW1t
NjQgdmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KE5vZGUqIG5vZGUpCkBAIC0xMTA5LDYgKzExMDcs
MjYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSlpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIHVuc2lnbmVkIGFyZzIsIHVuc2lnbmVkIGFyZzMpCisgICAgeworICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbTMyKGFy
ZzIpLCBUcnVzdGVkSW1tMzIoYXJnMykpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRl9KSVRPcGVyYXRpb25fRUZKWlogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHVuc2lnbmVkIGFy
ZzMsIEdQUlJlZyBhcmc0KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW0zMihhcmczKSwgYXJnNCk7CisgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJ
VE9wZXJhdGlvbl9FSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5z
aWduZWQgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVpKWlpa
IG9wZXJhdGlvbiwgdW5zaWduZWQgYXJnMSwgR1BSUmVnIGFyZzIsIHVuc2lnbmVkIGFyZzMsIEdQ
UlJlZyBhcmc0LCB1bnNpZ25lZCBhcmc1KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihhcmcxKSwgYXJnMiwgVHJ1c3RlZEltbTMy
KGFyZzMpLCBhcmc0LCBUcnVzdGVkSW1tMzIoYXJnNSkpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEZ1bmN0aW9uVHlwZSBvcGVyYXRpb24sIE5vUmVzdWx0VGFnKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCShyZXZpc2lv
biAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgQml0
VmVjdG9yIHVzZWRMb2NhbHM7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZh
cmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCi0gICAgICAgIGJvb2wgaGFzR2V0TG9jYWxV
bmxpbmtlZCA9IGZhbHNlOworICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IGZh
bHNlOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC04
MSw3ICs4MSwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlz
QXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICB1c2VkTG9jYWxzLnNldChvcGVyYW5kLnRvTG9jYWwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGhhc0dldExvY2FsVW5saW5rZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBo
YXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRh
KiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
ZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgorICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEt
PmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBp
KS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ugc2hv
dWxkbid0IGhhcHBlbi4KKyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVw
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKQEAgLTExMyw2ICsxMjgsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQoYXJndW1lbnRzUmVnaXN0ZXIudG9Mb2NhbCgpKTsKICAgICAg
ICAgICAgIHVzZWRMb2NhbHMuc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVu
dHNSZWdpc3RlcikudG9Mb2NhbCgpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYWxz
LnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBhcmd1bWVudC0tID4gMTsp
IHsKICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCiAgICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZz
ZXQoKSArCkBAIC0xNDgsMjQgKzE2OCwyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoYWxs
b2NhdGlvbltsb2NhbF0gPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bdmFyaWFibGUt
PmxvY2FsKCkudG9Mb2NhbCgpXSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2Fs
KCkgPSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSkgewotICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvbltjb2RlQmxvY2soKS0+YXJn
dW1lbnRzUmVnaXN0ZXIoKS50b0xvY2FsKCldKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHNSZWdpc3RlciA9CisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24s
IGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRp
b25bCi0gICAgICAgICAgICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKS50
b0xvY2FsKCldKQorICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIoY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKQogICAg
ICAgICAgICAgICAgID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdp
c3RlcikpOwogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldEFyZ3VtZW50c1JlZ2lzdGVyKGFy
Z3VtZW50c1JlZ2lzdGVyKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvZGVC
bG9jaygpLT51bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpIHsKICAgICAg
ICAgICAgIGNvZGVCbG9jaygpLT5zZXRBY3RpdmF0aW9uUmVnaXN0ZXIoCi0gICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltjb2RlQmxvY2soKS0+YWN0aXZh
dGlvblJlZ2lzdGVyKCkudG9Mb2NhbCgpXSkpOworICAgICAgICAgICAgICAgIGFzc2lnbihhbGxv
Y2F0aW9uLCBjb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgLy8gVGhpcyByZWdpc3RlciBpcyBuZXZlciB2YWxpZCBmb3IgREZH
IGNvZGUgYmxvY2tzLgpAQCAtMTc2LDE1ICsxOTMsMTkgQEAgcHVibGljOgogICAgICAgICAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFtZTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJs
ZS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHNSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAgICAg
ICAgICAgICBhbGxvY2F0aW9uW21fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2Fs
bEZyYW1lKS50b0xvY2FsKCldKTsKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50c1JlZ2lzdGVyID0gYXNzaWduKAorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9u
LCBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpOwogCiAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxp
bmVDYWxsRnJhbWUpKS50b0xvY2FsKCldKQorICAgICAgICAgICAgICAgICAgICBhc3NpZ24oYWxs
b2NhdGlvbiwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG1fZ3JhcGguYXJndW1lbnRzUmVn
aXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSkpCiAgICAgICAgICAgICAgICAgICAgID09IHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVy
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24oCisgICAgICAgICAgICAgICAgICAgIGFs
bG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHMuc2l6ZSgpOyBhcmd1bWVudC0tID4gMTspIHsKICAgICAgICAgICAgICAgICBBcmd1bWVu
dFBvc2l0aW9uJiBwb3NpdGlvbiA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9uc1sKICAgICAg
ICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQgKyBhcmd1bWVudF07CkBA
IC0yMjcsOSArMjQ4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJs
ZS0+cGFyYW1ldGVyQ291bnQoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHN5
bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAg
IG5ld1Nsb3dBcmd1bWVudHNbaV0gPSBzbG93QXJndW1lbnRzW2ldOwotICAgICAgICAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKHNsb3dBcmd1bWVudHNb
aV0uaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSB2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW3JlZy50b0xvY2FsKCldKS5vZmZzZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IGFzc2lnbihhbGxvY2F0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoc2xvd0FyZ3VtZW50c1tpXS5pbmRleCkpLm9mZnNldCgpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKG5ld1Nsb3dBcmd1bWVudHMpOwpAQCAtMjM3LDcg
KzI1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRml4IEdl
dExvY2FsVW5saW5rZWQncyB2YXJpYWJsZSByZWZlcmVuY2VzLgotICAgICAgICBpZiAoaGFzR2V0
TG9jYWxVbmxpbmtlZCkgeworICAgICAgICBpZiAoaGFzTm9kZXNUaGF0TmVlZEZpeHVwKSB7CiAg
ICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykK
QEAgLTI0NiwxMCArMjY1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2Vk
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5v
ZGUtPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzTG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kID0gdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltvcGVyYW5kLnRvTG9jYWwoKV0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwob3BlcmFuZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1hY2hpbmVMb2NhbChh
c3NpZ24oYWxsb2NhdGlvbiwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJh
cmdzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0g
YXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0yNjIsNiArMjg1LDIwIEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZpcnR1
YWxSZWdpc3RlciBzcmMpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0g
c3JjOworICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgeworICAgICAgICAgICAgdW5zaWdu
ZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgpXTsKKyAgICAgICAg
ICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIH07CiAKIGJvb2wgcGVyZm9ybVN0YWNr
TGF5b3V0KEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1NSw2ICs0NTUsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZlIGEgc2Vjb25k
IEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIC8v
IGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50IGZvciB0aGF0IGxvY2FsLgorICAgICAgICAg
ICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90
U2V0OworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlv
bnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDkgQEAgc3RhdGljIGlu
bGluZSBMVHlwZSBzdHJ1Y3RUeXBlKExDb250ZXh0IAogICAgIHJldHVybiBzdHJ1Y3RUeXBlKGNv
bnRleHQsIGVsZW1lbnRzLCAyLCBwYWNraW5nKTsKIH0KIAorLy8gRklYTUU6IE1ha2UgdGhlIFZh
cmlhZGljaXR5IGFyZ3VtZW50IG5vdCBiZSB0aGUgbGFzdCBhcmd1bWVudCB0byBmdW5jdGlvblR5
cGUoKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24KKy8vIGNhbiB1c2UgQysrMTEgdmFyaWFkaWMgdGVt
cGxhdGVzCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTc1
CiBlbnVtIFZhcmlhZGljaXR5IHsgTm90VmFyaWFkaWMsIFZhcmlhZGljIH07CiBzdGF0aWMgaW5s
aW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBjb25zdCBMVHlwZSogcGFy
YW1UeXBlcywgdW5zaWduZWQgcGFyYW1Db3VudCwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkpCiB7
CkBAIC0xMTAsNiArMTEzLDE2IEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExU
eXBlIHIKICAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMs
IHBhcmFtNCB9OwogICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBl
cywgNCwgdmFyaWFkaWNpdHkpOwogfQorc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUo
TFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFt
MywgTFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0g
Tm90VmFyaWFkaWMpCit7CisgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFt
MiwgcGFyYW0zLCBwYXJhbTQsIHBhcmFtNSB9OworICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0
dXJuVHlwZSwgcGFyYW1UeXBlcywgNSwgdmFyaWFkaWNpdHkpOworfQorc3RhdGljIGlubGluZSBM
VHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBw
YXJhbTIsIExUeXBlIHBhcmFtMywgTFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIExUeXBlIHBh
cmFtNiwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKK3sKKyAgICBMVHlw
ZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01
LCBwYXJhbTYgfTsKKyAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlw
ZXMsIDYsIHZhcmlhZGljaXR5KTsKK30KIAogc3RhdGljIGlubGluZSBMVHlwZSB0eXBlT2YoTFZh
bHVlIHZhbHVlKSB7IHJldHVybiBsbHZtLT5UeXBlT2YodmFsdWUpOyB9CiAKQEAgLTI5OCw0MSAr
MzExLDEzIEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIHsKICAg
ICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCAmYXJnMSwgMSk7CiB9Ci1zdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0
aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsg
YXJnMSwgYXJnMiB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFy
Z3MsIDIpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxk
ZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJn
MykKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczIH07Ci0gICAgcmV0
dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgMyk7Ci19Ci1zdGF0aWMgaW5s
aW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBM
VmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkKK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+CitMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykKIHsKLSAgICBMVmFs
dWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0IH07Ci0gICAgcmV0dXJuIGJ1aWxk
Q2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgNCk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1
ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJn
MSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUpCi17
Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSB9Owot
ICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDUpOwotfQotc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5j
dGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQs
IExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNikKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcx
LCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChi
dWlsZGVyLCBmdW5jdGlvbiwgYXJncywgNik7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZh
bHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBh
cmc2LCBMVmFsdWUgYXJnNykKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBh
cmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWls
ZGVyLCBmdW5jdGlvbiwgYXJncywgNyk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENh
bGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVl
IGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2
LCBMVmFsdWUgYXJnNywgTFZhbHVlIGFyZzgpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJn
MSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCB9OwotICAgIHJldHVy
biBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDgpOworICAgIExWYWx1ZSBhcmdz
QXJyYXlbXSA9IHsgYXJnMSwgYXJncy4uLiB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRl
ciwgZnVuY3Rpb24sIGFyZ3NBcnJheSwgc2l6ZW9mKGFyZ3NBcnJheSkgLyBzaXplb2YoTFZhbHVl
KSk7CiB9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50
aW9uKExWYWx1ZSBpbnN0cnVjdGlvbiwgTENhbGxDb252IGNhbGxpbmdDb252ZW50aW9uKSB7IGxs
dm0tPlNldEluc3RydWN0aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxpbmdDb252ZW50aW9u
KTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVp
bGRlciwgTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1aWxk
RXh0cmFjdFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQogc3RhdGljIGlubGlu
ZSBMVmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwg
TFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2VsZWN0
KGJ1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3
OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMjAsNiArMTIwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6
CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFy
Z3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNh
c2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgVmFsdWVUb0ludDMyOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBF
bGVjdHJvbmljcwogICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAg
KgpAQCAtMTI4LDYgKzEyOCwyMCBAQCBzdGF0aWMgdm9pZCBkdW1wRGF0YVNlY3Rpb24oRGF0YVNl
Y3Rpb24qCiAgICAgfQogfQogCitzdGF0aWMgaW50IG9mZnNldE9mU3RhY2tSZWdpb24oU3RhY2tN
YXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgdWludDMyX3Qgc3RhY2ttYXBJRCkKK3sKKyAgICBT
dGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YWNr
bWFwSUQpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsKKyAgICBMb2NhdGlv
biBjYXB0dXJlZExvY2F0aW9uID0KKyAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFwcyhudWxs
cHRyLCBpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnNbMF0pOworICAgIFJFTEVBU0VfQVNTRVJUKGNh
cHR1cmVkTG9jYXRpb24ua2luZCgpID09IExvY2F0aW9uOjpSZWdpc3Rlcik7CisgICAgUkVMRUFT
RV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUg
c2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIHJldHVybiBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgp
IC8gc2l6ZW9mKFJlZ2lzdGVyKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRGVzY3JpcHRvclR5
cGU+CiB2b2lkIGdlbmVyYXRlSUNGYXN0UGF0aCgKICAgICBTdGF0ZSYgc3RhdGUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKQEAgLTI0
Myw2ICsyNTcsMzIgQEAgc3RhdGljIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnNGb3IoY29ucwog
ICAgIHJldHVybiBSZWdpc3RlclNldChyZWNvcmQudXNlZFJlZ2lzdGVyU2V0KCksIFJlZ2lzdGVy
U2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxs
VHlwZT4KK3ZvaWQgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhWZWN0b3I8Q2FsbFR5cGU+JiBj
YWxscywgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCkKK3sKKyAgICAvLyBIYW5kbGlu
ZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0g
YnkgdGhlIFBDIGluIExMVk0KKyAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZp
cnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KKworICAgIFZl
Y3RvcjxDYWxsVHlwZT4gb2xkQ2FsbHM7CisgICAgb2xkQ2FsbHMuc3dhcChjYWxscyk7CisgICAg
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIENhbGxUeXBlJiBjYWxsID0gb2xkQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBT
dGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwu
c3RhY2ttYXBJRCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIENhbGxUeXBlIGNv
cHkgPSBjYWxsOworICAgICAgICAgICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+
dmFsdWVbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoY29w
eSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnNvcnQoY2FsbHMuYmVnaW4oKSwgY2Fs
bHMuZW5kKCkpOworfQorCiBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMo
CiAgICAgU3RhdGUmIHN0YXRlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29k
ZSwgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb24sCiAgICAgU3RhY2tNYXBzOjpS
ZWNvcmRNYXAmIHJlY29yZE1hcCwgYm9vbCBkaWRTZWVVbndpbmRJbmZvKQpAQCAtMjUxLDE2ICsy
OTEsMTQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFZN
JiB2bSA9IGdyYXBoLm1fdm07CiAgICAgU3RhY2tNYXBzIHN0YWNrbWFwcyA9IGppdENvZGUtPnN0
YWNrbWFwczsKICAgICAKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9
IHJlY29yZE1hcC5maW5kKHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoaXRlciAhPSByZWNvcmRNYXAuZW5kKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIt
PnZhbHVlLnNpemUoKSA9PSAxKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZVswXS5s
b2NhdGlvbnMuc2l6ZSgpID09IDEpOwotICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24gPQot
ICAgICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZqaXRDb2RlLT5zdGFja21hcHMsIGl0ZXIt
PnZhbHVlWzBdLmxvY2F0aW9uc1swXSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2Nh
dGlvbi5raW5kKCkgPT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChj
YXB0dXJlZExvY2F0aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2YoUmVn
aXN0ZXIpKSk7Ci0gICAgaW50MzJfdCBsb2NhbHNPZmZzZXQgPSBjYXB0dXJlZExvY2F0aW9uLmFk
ZGVuZCgpIC8gc2l6ZW9mKFJlZ2lzdGVyKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAg
ICBpbnQgbG9jYWxzT2Zmc2V0ID0KKyAgICAgICAgb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRN
YXAsIHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCkgKyBncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7
CisgICAgCisgICAgaW50IHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0OworICAgIGlmIChzdGF0ZS52
YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQgIT0gVUlOVF9NQVgpCisgICAgICAgIHZhcmFyZ3NT
cGlsbFNsb3RzT2Zmc2V0ID0gb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLnZh
cmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCk7CisgICAgZWxzZQorICAgICAgICB2YXJhcmdzU3Bp
bGxTbG90c09mZnNldCA9IDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubV9p
bmxpbmVWYXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV0uaW5saW5l
Q2FsbEZyYW1lOwpAQCAtMzM2LDcgKzM3NCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFz
ZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVk
KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgT1NSIHN0YWNrbWFwICMiLCBl
eGl0Lm1fc3RhY2ttYXBJRCwgIiBmb3IgIiwgZXhpdC5tX2NvZGVPcmlnaW4sICJcbiIpOwogCi0g
ICAgICAgICAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZXhpdC5tX3N0YWNrbWFwSUQpOworICAg
ICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZXhpdC5tX3N0YWNrbWFwSUQpOwog
ICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBA
IC0zNzUsNyArNDEzLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBz
KAogICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBHZXRCeUlkIHN0YWNrbWFwICMiLCBnZXRCeUlkLnN0
YWNrbWFwSUQoKSwgIlxuIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNv
cmRNYXAuZmluZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIg
PSByZWNvcmRNYXAuZmluZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7CiAgICAgICAgICAgICBpZiAo
aXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0
aW1pemVkIG91dC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQxMiw3ICs0NTAsNyBA
QCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICBp
ZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
IkhhbmRsaW5nIFB1dEJ5SWQgc3RhY2ttYXAgIyIsIHB1dEJ5SWQuc3RhY2ttYXBJRCgpLCAiXG4i
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5kKHB1dEJ5
SWQuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5k
KHB1dEJ5SWQuc3RhY2ttYXBJRCgpKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1h
cC5lbmQoKSkgewogICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDQ0LDE0ICs0ODIsMTMgQEAgc3RhdGljIHZvaWQg
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgICAgIENoZWNrSW5EZXNjcmlwdG9yJiBjaGVja0luID0gc3RhdGUuY2hlY2tJ
bnNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25F
bmFibGVkKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgY2hlY2tJbiBzdGFj
a21hcCAjIiwgY2hlY2tJbi5zdGFja21hcElEKCksICJcbiIpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2hlY2tJbi5zdGFja21hcElEKCkpOworICAg
ICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2hlY2tJbi5zdGFja21hcElEKCkp
OwogICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC00ODAsNyArNTE3LDYgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tN
YXBzKAogICAgICAgICAgICAgICAgIGNoZWNrSW4ubV9nZW5lcmF0b3JzLmFwcGVuZChDaGVja0lu
R2VuZXJhdG9yKHN0dWJJbmZvLCBzbG93Q2FsbCwgYmVnaW4pKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotCiAgICAgICAgIAogICAgICAgICBleGNlcHRpb25UYXJnZXQubGluaygmc2xvd1Bh
dGhKSVQpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25KdW1wID0gc2xv
d1BhdGhKSVQuanVtcCgpOwpAQCAtNTAzLDI5ICs1MzksMTEgQEAgc3RhdGljIHZvaWQgZml4RnVu
Y3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5j
aGVja0lucy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGdlbmVyYXRlQ2hlY2tJbklDRmFz
dFBhdGgoCiAgICAgICAgICAgICAgICAgc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rp
b24sIHJlY29yZE1hcCwgc3RhdGUuY2hlY2tJbnNbaV0sCi0gICAgICAgICAgICAgICAgc2l6ZU9m
Q2hlY2tJbigpKTsgCisgICAgICAgICAgICAgICAgc2l6ZU9mSW4oKSk7IAogICAgICAgICB9IAog
ICAgIH0KICAgICAKLSAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0
byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KLSAgICAvLyBnZW5l
cmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZN
IGRpZG4ndCBnZW5lcmF0ZS4KLSAgICBWZWN0b3I8SlNDYWxsPiBvbGRDYWxscyA9IHN0YXRlLmpz
Q2FsbHM7Ci0gICAgc3RhdGUuanNDYWxscy5yZXNpemUoMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEpTQ2FsbCYgY2FsbCA9
IG9sZENhbGxzW2ldOwotICAgICAgICAKLSAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7Ci0gICAgICAg
IGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraikg
ewotICAgICAgICAgICAgSlNDYWxsIGNvcHkgPSBjYWxsOwotICAgICAgICAgICAgY29weS5tX2lu
c3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWVbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAg
ICAgICAgICBzdGF0ZS5qc0NhbGxzLmFwcGVuZChjb3B5KTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICBzdGQ6OnNvcnQoc3RhdGUuanNDYWxscy5iZWdpbigpLCBzdGF0ZS5qc0NhbGxzLmVu
ZCgpKTsKKyAgICBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzQ2FsbHMsIHJlY29y
ZE1hcCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuanNDYWxscy5zaXplKCk7
IGktLTspIHsKICAgICAgICAgSlNDYWxsJiBjYWxsID0gc3RhdGUuanNDYWxsc1tpXTsKQEAgLTU0
Nyw5ICs1NjUsMzIgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAog
ICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIpOwogICAgIH0KICAgICAKKyAgICBhZGp1
c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzQ2FsbFZhcmFyZ3NlcywgcmVjb3JkTWFwKTsK
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxWYXJhcmdzZXMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgIEpTQ2FsbFZhcmFyZ3MmIGNhbGwgPSBzdGF0ZS5qc0NhbGxWYXJh
cmdzZXNbaV07CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnMgZmFzdFBhdGhKSVQoJnZt
LCBjb2RlQmxvY2spOworICAgICAgICBjYWxsLmVtaXQoZmFzdFBhdGhKSVQsIGdyYXBoLCB2YXJh
cmdzU3BpbGxTbG90c09mZnNldCk7CisgICAgICAgIAorICAgICAgICBjaGFyKiBzdGFydE9mSUMg
PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNhbGwubV9pbnN0cnVj
dGlvbk9mZnNldDsKKyAgICAgICAgc2l6ZV90IHNpemVPZklDID0gc2l6ZU9mSUNGb3IoY2FsbC5u
b2RlKCkpOworCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgZmFzdFBhdGhKSVQs
IHN0YXJ0T2ZJQywgc2l6ZU9mSUMpOworICAgICAgICBpZiAoIWxpbmtCdWZmZXIuaXNWYWxpZCgp
KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gaW5zZXJ0IGlubGluZSBjYWNoZSBm
b3IgdmFyYXJncyBjYWxsIChzcGVjaWZpY2FsbHksICIsIEdyYXBoOjpvcE5hbWUoY2FsbC5ub2Rl
KCktPm9wKCkpLCAiKSBiZWNhdXNlIHdlIHRob3VnaHQgdGhlIHNpemUgd291bGQgYmUgIiwgc2l6
ZU9mSUMsICIgYnV0IGl0IGVuZGVkIHVwIGJlaW5nICIsIGZhc3RQYXRoSklULm1fYXNzZW1ibGVy
LmNvZGVTaXplKCksICIgcHJpb3IgdG8gY29tcGFjdGlvbi5cbiIpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMoCisgICAgICAgICAgICBz
dGFydE9mSUMgKyBsaW5rQnVmZmVyLnNpemUoKSwgc2l6ZU9mSUMgLSBsaW5rQnVmZmVyLnNpemUo
KSk7CisgICAgICAgIAorICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIsIHN0YXRlLmZp
bmFsaXplci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7CisgICAg
fQorICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCi0g
ICAgaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YXRlLmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRp
b25TdGFja21hcElEKTsKKyAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5oYW5k
bGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCk7CiAgICAgLy8gSXQncyBzb3J0IG9m
IHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlv
biBoYW5kbGluZwogICAgIC8vIHBhdGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KICAg
ICBpZiAoaXRlciAhPSByZWNvcmRNYXAuZW5kKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE3OTk3MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCwxMSArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQog
CisjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCit1c2luZyBuYW1lc3BhY2UgREZHOworCiAvLyBUaGUgZGVmYXVsdCBzaXpl
cyBhcmUgeDg2LTY0LXNwZWNpZmljLCBhbmQgd2VyZSBmb3VuZCBlbXBpcmljYWxseS4gVGhleSBo
YXZlIHRvIGNvdmVyIHRoZSB3b3JzdAogLy8gcG9zc2libGUgY29tYmluYXRpb24gb2YgcmVnaXN0
ZXJzIGxlYWRpbmcgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgZW5jb2Rpbmcgb2YgZWFjaCBpbnN0
cnVjdGlvbiBpbgogLy8gdGhlIElDLgpAQCAtNjEsMTcgKzY0LDM0IEBAIHNpemVfdCBzaXplT2ZQ
dXRCeUlkKCkKICNlbmRpZgogfQogCi1zaXplX3Qgc2l6ZU9mQ2hlY2tJbigpCitzaXplX3Qgc2l6
ZU9mQ2FsbCgpCiB7CiAjaWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiA0OworICAgIHJldHVybiA1
NjsKICNlbHNlCi0gICAgcmV0dXJuIDU7IAorICAgIHJldHVybiA1MzsKICNlbmRpZgogfQogCitz
aXplX3Qgc2l6ZU9mQ2FsbFZhcmFyZ3MoKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1cm4g
NTY7CisjZWxzZQorICAgIHJldHVybiAyNDM7CisjZW5kaWYKK30KIAotc2l6ZV90IHNpemVPZkNh
bGwoKQorc2l6ZV90IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0
KQorICAgIHJldHVybiA1NjsKKyNlbHNlCisgICAgcmV0dXJuIDM2NDsKKyNlbmRpZgorfQorCitz
aXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpCiB7CiAjaWYgQ1BVKEFSTTY0KQogICAgIHJl
dHVybiA1NjsKQEAgLTgwLDYgKzEwMCwzOCBAQCBzaXplX3Qgc2l6ZU9mQ2FsbCgpCiAjZW5kaWYK
IH0KIAorc2l6ZV90IHNpemVPZkluKCkKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDQ7
CisjZWxzZQorICAgIHJldHVybiA1OyAKKyNlbmRpZgorfQorCitzaXplX3Qgc2l6ZU9mSUNGb3Io
Tm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIEdldEJ5
SWQ6CisgICAgICAgIHJldHVybiBzaXplT2ZHZXRCeUlkKCk7CisgICAgY2FzZSBQdXRCeUlkOgor
ICAgICAgICByZXR1cm4gc2l6ZU9mUHV0QnlJZCgpOworICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNl
IENvbnN0cnVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNhbGwoKTsKKyAgICBjYXNlIENhbGxW
YXJhcmdzOgorICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKKyAgICBjYXNlIENh
bGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNhbGxGb3J3YXJkVmFyYXJn
cygpOworICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNv
bnN0cnVjdFZhcmFyZ3MoKTsKKyAgICBjYXNlIEluOgorICAgICAgICByZXR1cm4gc2l6ZU9mSW4o
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lv
biAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCwxMiArMjgsMjMgQEAKIAogI2lmIEVOQUJMRShGVExfSklU
KQogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CituYW1lc3BhY2UgSlNDIHsKKwor
bmFtZXNwYWNlIERGRyB7CitzdHJ1Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CiAKIHNp
emVfdCBzaXplT2ZHZXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOwogc2l6ZV90IHNp
emVPZkNhbGwoKTsKLXNpemVfdCBzaXplT2ZDaGVja0luKCk7CitzaXplX3Qgc2l6ZU9mQ2FsbFZh
cmFyZ3MoKTsKK3NpemVfdCBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsKK3NpemVfdCBzaXpl
T2ZDb25zdHJ1Y3RWYXJhcmdzKCk7CitzaXplX3Qgc2l6ZU9mSW4oKTsKKworc2l6ZV90IHNpemVP
ZklDRm9yKERGRzo6Tm9kZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9y
eS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NywxMCArOTcsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9u
X0VDLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3Jv
KFZfSklUT3BlcmF0aW9uX0VDYiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0
cikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRU
eXBlLCBpbnRQdHIsIGludFB0ciwgaW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
RVpKWlpaLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50MzIsIGludDY0LCBpbnQz
MiwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVu
Y3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQzMikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9E
LCBmdW5jdGlvblR5cGUoaW50MzIsIGRvdWJsZVR5cGUpKSBcCi0gICAgbWFjcm8oWl9KSVRPcGVy
YXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKQorICAgIG1hY3Jv
KFpfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyKSkg
XAorICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0VKWiwgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQ
dHIsIGludDY0LCBpbnQzMikpCiAgICAgCiBjbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5IDogcHVi
bGljIENvbW1vblZhbHVlcyB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU0NhbGwuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgSlND
YWxsOjpKU0NhbGwodW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZQogICAgICwgbV9zdGFja21hcElE
KHN0YWNrbWFwSUQpCiAgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCiB7CisgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gQ2FsbCB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU0NhbGxCYXNlLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
OCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFj
ZSBERkc7CisKIEpTQ2FsbEJhc2U6OkpTQ2FsbEJhc2UoKQogICAgIDogbV90eXBlKENhbGxMaW5r
SW5mbzo6Tm9uZSkKICAgICAsIG1fY2FsbExpbmtJbmZvKG51bGxwdHIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAkocmV2aXNpb24gMTc5OTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBMaW5rQnVmZmVyOwog
CituYW1lc3BhY2UgREZHIHsKK3N0cnVjdCBOb2RlOworfQorCiBuYW1lc3BhY2UgRlRMIHsKIAog
Y2xhc3MgSlNDYWxsQmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbFZhcmFyZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsVmFyYXJncy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5o
IgorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgorI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERGRzsKKworSlNDYWxsVmFyYXJnczo6
SlNDYWxsVmFyYXJncygpCisgICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBtX25v
ZGUobnVsbHB0cikKKyAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoVUlOVF9NQVgpCit7Cit9CisK
K0pTQ2FsbFZhcmFyZ3M6OkpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZSog
bm9kZSkKKyAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9ub2RlKG5vZGUp
CisgICAgLCBtX2NhbGxCYXNlKAorICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFy
Z3MgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MgOiBDYWxsTGlua0luZm86OkNhbGxW
YXJhcmdzLAorICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpCisgICAgLCBtX2luc3RydWN0
aW9uT2Zmc2V0KDApCit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwg
bm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1
Y3RWYXJhcmdzKTsKK30KKwordW5zaWduZWQgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05l
ZWRlZCgpCit7CisgICAgcmV0dXJuIDQ7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChD
Q2FsbEhlbHBlcnMmIGppdCwgR3JhcGgmIGdyYXBoLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQp
Cit7CisgICAgLy8gV2UgYXJlIHBhc3NlZCB0aHJlZSBwaWVjZXMgb2YgaW5mb3JtYXRpb246Cisg
ICAgLy8gLSBUaGUgY2FsbGVlLgorICAgIC8vIC0gVGhlIGFyZ3VtZW50cyBvYmplY3QuCisgICAg
Ly8gLSBUaGUgInRoaXMiIHZhbHVlLCBpZiBpdCdzIGEgY29uc3RydWN0b3IgY2FsbC4KKyAgICAK
KyAgICBib29sIGlzQ2FsbCA9IG1fbm9kZS0+b3AoKSAhPSBDb25zdHJ1Y3RWYXJhcmdzOworICAg
IAorICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7
CisgICAgCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAg
ICAKKyAgICBHUFJSZWcgYXJndW1lbnRzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcg
dGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgYm9vbCBhcmd1bWVudHNPblN0YWNrID0gZmFs
c2U7CisgICAgCisgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGxWYXJh
cmdzOgorICAgICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAg
ICAgIHRoaXNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICB0aGlzR1BSID0gR1BSSW5mbzo6YXJn
dW1lbnRHUFIxOworICAgICAgICBhcmd1bWVudHNPblN0YWNrID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBhcmd1bWVudHNHUFIgPSBH
UFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBjb25zdCB1bnNpZ25lZCBjYWxsZWVTcGlsbFNsb3QgPSAwOworICAgIGNvbnN0
IHVuc2lnbmVkIGFyZ3VtZW50c1NwaWxsU2xvdCA9IDE7CisgICAgY29uc3QgdW5zaWduZWQgdGhp
c1NwaWxsU2xvdCA9IDI7CisgICAgY29uc3QgdW5zaWduZWQgc3RhY2tQb2ludGVyU3BpbGxTbG90
ID0gMzsKKyAgICAKKyAgICAvLyBHZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJT
ZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJT
ZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJn
ZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJz
LnNldChjYWxsZWVHUFIpOworICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsKKyAgICBpZiAodGhpc0dQ
UiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsK
KyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OworICAgIGlmIChhcmd1bWVudHNPblN0YWNrKQorICAgICAgICBhcmd1bWVudHNHUFIgPSBhbGxv
Y2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRv
ci5udW1iZXJPZlJldXNlZFJlZ2lzdGVycygpKTsKKyAgICAKKyAgICBhdXRvIGxvYWRBcmd1bWVu
dHMgPSBbJl0gKGJvb2wgY2xvYmJlcmVkKSB7CisgICAgICAgIGlmIChhcmd1bWVudHNPblN0YWNr
KSB7CisgICAgICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6YWRkcmVzc0ZvcihncmFwaC5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIpOworICAgICAg
ICB9IGVsc2UgaWYgKGNsb2JiZXJlZCkgeworICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFy
Z3VtZW50c1NwaWxsU2xvdCksIGFyZ3VtZW50c0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAg
IAorICAgIGF1dG8gY29tcHV0ZVVzZWRTdGFjayA9IFsmXSAoR1BSUmVnIHRhcmdldEdQUiwgdW5z
aWduZWQgZXh0cmEpIHsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHRhcmdldEdQUik7CisgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaWYgKGV4dHJhKQorICAgICAgICAg
ICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYSksIHRhcmdldEdQ
Uik7CisgICAgICAgIGppdC51cnNoaWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHRhcmdl
dEdQUik7CisgICAgfTsKKyAgICAKKyAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBb
Jl0gKHZvaWQqIGNhbGxlZSkgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOwor
ICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7Cisg
ICAgICAgIG1fZXhjZXB0aW9ucy5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJs
eUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBX
aWR0aCkpOworICAgIH07CisgICAgCisgICAgbG9hZEFyZ3VtZW50cyhmYWxzZSk7CisgICAgCisg
ICAgLy8gQXR0ZW1wdCB0aGUgZm9yd2FyZGluZyBmYXN0IHBhdGgsIGlmIGl0J3MgYmVlbiByZXF1
ZXN0ZWQuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgIGlmIChtX25vZGUtPm9wKCkgPT0gQ2Fs
bEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHko
dGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAgIC8vIEZJWE1FOiBkbyB0aGlz
IG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwuCisgICAgICAgIAorICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAg
ICAKKyAgICAgICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgMCk7CisgICAgICAgIGVt
aXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIx
LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAg
cmVzdWx0R1BSID0gc2NyYXRjaEdQUjI7CisgICAgICAgIAorICAgICAgICBoYXZlQXJndW1lbnRz
ID0gaml0Lmp1bXAoKTsKKyAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAgICB9CisgICAg
CisgICAgLy8gR290dGEgc3BpbGwgdGhlIGNhbGxlZSwgYXJndW1lbnRzLCBhbmQgdGhpcyBiZWNh
dXNlIHdlIHdpbGwgbmVlZCB0aGVtIGxhdGVyIGFuZCB3ZSB3aWxsIGhhdmUgc29tZQorICAgIC8v
IGNhbGxzIHRoYXQgY2xvYmJlciB0aGVtLgorICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0Nh
bGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3Qp
KTsKKyAgICBpZiAoIWFyZ3VtZW50c09uU3RhY2spCisgICAgICAgIGppdC5zdG9yZTY0KGFyZ3Vt
ZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBhcmd1
bWVudHNTcGlsbFNsb3QpKTsKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICBqaXQuc3RvcmU2NCh0
aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNT
cGlsbFNsb3QpKTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFj
a1BvaW50ZXJTcGlsbFNsb3QpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrID0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKKyAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpOworICAgIGNvbXB1dGVV
c2VkU3RhY2soc2NyYXRjaEdQUjEsIDApOworICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoZXh0cmFTdGFjayksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzR1BSLCBz
Y3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQpKTsKKyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4o
b3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncykpOworICAgIAorICAgIGppdC5tb3ZlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSk7CisgICAgY29tcHV0ZVVzZWRTdGFjayhz
Y3JhdGNoR1BSMiwgZXh0cmFTdGFjayk7CisgICAgbG9hZEFyZ3VtZW50cyh0cnVlKTsKKyAgICBl
bWl0U2V0VmFyYXJnc0ZyYW1lKGppdCwgc2NyYXRjaEdQUjEsIGZhbHNlLCBzY3JhdGNoR1BSMiwg
c2NyYXRjaEdQUjIpOworICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
LWV4dHJhU3RhY2spLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwg
YXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFy
Z09mZnNldCksIHNjcmF0Y2hHUFIxKTsKKyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdp
c2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpKTsKKyAgICAKKyAgICBq
aXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBp
ZiAobV9ub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgaGF2ZUFyZ3Vt
ZW50cy5saW5rKCZqaXQpOworICAgIAorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVzdWx0R1BSLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBpZiAoaXNDYWxsKSB7CisgICAg
ICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQg
KyB0aGlzU3BpbGxTbG90KSwgdGhpc0dQUik7CisgICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIs
IENDYWxsSGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICB9CisgICAgCisgICAg
Ly8gSGVuY2Vmb3J0aCB3ZSBtYWtlIHRoZSBjYWxsLiBUaGUgYmFzZSBGVEwgY2FsbCBtYWNoaW5l
cnkgZXhwZWN0cyB0aGUgY2FsbGVlIGluIHJlZ1QwIGFuZCBmb3IgdGhlCisgICAgLy8gc3RhY2sg
ZnJhbWUgdG8gYWxyZWFkeSBiZSBzZXQgdXAsIHdoaWNoIGl0IGlzLgorICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNs
b3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgbV9jYWxsQmFzZS5lbWl0KGppdCk7Cisg
ICAgCisgICAgLy8gVW5kbyB0aGUgZGFtYWdlIHdlJ3ZlIGRvbmUuCisgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJT
cGlsbFNsb3QpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKK30KKwordm9p
ZCBKU0NhbGxWYXJhcmdzOjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgQ29k
ZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlcikKK3sKKyAgICBtX2NhbGxCYXNlLmxpbmso
dm0sIGxpbmtCdWZmZXIpOworICAgIGxpbmtCdWZmZXIubGluayhtX2V4Y2VwdGlvbnMsIGV4Y2Vw
dGlvbkhhbmRsZXIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGxWYXJhcmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKU0NhbGxWYXJhcmdzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRM
SlNDYWxsVmFyYXJnc19oCisjZGVmaW5lIEZUTEpTQ2FsbFZhcmFyZ3NfaAorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExKU0NhbGxCYXNlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBMaW5rQnVmZmVyOworCituYW1lc3BhY2UgREZHIHsKK2NsYXNzIEdyYXBoOwor
c3RydWN0IE5vZGU7Cit9CisKK25hbWVzcGFjZSBGVEwgeworCitjbGFzcyBKU0NhbGxWYXJhcmdz
IHsKK3B1YmxpYzoKKyAgICBKU0NhbGxWYXJhcmdzKCk7CisgICAgSlNDYWxsVmFyYXJncyh1bnNp
Z25lZCBzdGFja21hcElELCBERkc6Ok5vZGUqKTsKKyAgICAKKyAgICBERkc6Ok5vZGUqIG5vZGUo
KSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVt
U3BpbGxTbG90c05lZWRlZCgpOworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmLCBE
Rkc6OkdyYXBoJiwgaW50MzJfdCBzcGlsbFNsb3RzT2Zmc2V0KTsKKyAgICB2b2lkIGxpbmsoVk0m
LCBMaW5rQnVmZmVyJiwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlcik7CisgICAg
CisgICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbFZhcmFyZ3MmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5t
X2luc3RydWN0aW9uT2Zmc2V0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQg
bV9zdGFja21hcElEOworICAgIERGRzo6Tm9kZSogbV9ub2RlOworICAgIEpTQ2FsbEJhc2UgbV9j
YWxsQmFzZTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG1fZXhjZXB0aW9uczsKKworcHVi
bGljOgorICAgIHVpbnQzMl90IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8v
IEZUTEpTQ2FsbFZhcmFyZ3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4NSw2ICsxODUsMzAgQEAgcHVibGljOgogICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRy
aW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCks
CiAgICAgICAgICAgICBtX291dC5pbnQzMlplcm8sIGNhcHR1cmVkQWxsb2NhKTsKICAgICAgICAg
CisgICAgICAgIC8vIElmIHdlIGhhdmUgYW55IENhbGxWYXJhcmdzIHRoZW4gd2UgbmVlIHRvIGhh
dmUgYSBzcGlsbCBzbG90IGZvciBpdC4KKyAgICAgICAgYm9vbCBoYXNWYXJhcmdzID0gZmFsc2U7
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcmVPcmRlcikgeworICAgICAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAg
ICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIENv
bnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGhhc1ZhcmFyZ3MgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc1ZhcmFyZ3MpIHsKKyAgICAgICAgICAgIExWYWx1
ZSB2YXJhcmdzU3BpbGxTbG90cyA9IG1fb3V0LmFsbG9jYSgKKyAgICAgICAgICAgICAgICBhcnJh
eVR5cGUobV9vdXQuaW50NjQsIEpTQ2FsbFZhcmFyZ3M6Om51bVNwaWxsU2xvdHNOZWVkZWQoKSkp
OworICAgICAgICAgICAgbV9mdGxTdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQgPSBt
X3N0YWNrbWFwSURzKys7CisgICAgICAgICAgICBtX291dC5jYWxsKAorICAgICAgICAgICAgICAg
IG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxTdGF0ZS52
YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpLAorICAgICAgICAgICAgICAgIG1fb3V0LmludDMy
WmVybywgdmFyYXJnc1NwaWxsU2xvdHMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBt
X2NhbGxGcmFtZSA9IG1fb3V0LnB0clRvSW50KAogICAgICAgICAgICAgbV9vdXQuY2FsbChtX291
dC5mcmFtZUFkZHJlc3NJbnRyaW5zaWMoKSwgbV9vdXQuaW50MzJaZXJvKSwgbV9vdXQuaW50UHRy
KTsKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVt
YmVyKTsKQEAgLTYzNiw2ICs2NjAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CiAgICAgICAgICAgICBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCk7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2Fy
ZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGNv
bXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncygpOwor
ICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykK
ICAgICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoK
QEAgLTk4Miw3ICsxMDE0LDYgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKTsKLSAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG9wZXJhbmQuaXNBcmd1bWVudCgpKTsK
IAogICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJh
bmQpKTsKIApAQCAtMTk4Niw4ICsyMDE3LDIyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBj
aGVja0FyZ3VtZW50c05vdENyZWF0ZWQoKTsKIAotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAg
ICAgIHNldEludDMyKG1fb3V0LmFkZChtX291dC5sb2FkMzJOb25OZWdhdGl2ZShwYXlsb2FkRm9y
KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSwgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsKKyAgICAg
ICAgaWYgKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAg
ICAgJiYgIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdz
KCkpIHsKKyAgICAgICAgICAgIHNldEludDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50MzIoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAg
ICAgICBpZiAoIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFj
azo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJn
dW1lbnRDb3VudFJlZ2lzdGVyID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBzZXRJbnQzMigKKyAgICAg
ICAgICAgICAgICBtX291dC5hZGQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5v
bk5lZ2F0aXZlKHBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksCisgICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIH0KICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkKQEAgLTM3MDgsNiArMzc1Myw3
OSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpCisgICAgewor
ICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbnVsbHB0cjsKKyAgICAgICAg
TFZhbHVlIHRoaXNBcmcgPSBudWxscHRyOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX25v
ZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgICAgIGpzQXJn
dW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHRoaXNB
cmcgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAgdGhpc0FyZyA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAganNBcmd1bWVudHMgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiYmFkIG5vZGUgdHlw
ZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAgICAgIAorICAgICAgICBW
ZWN0b3I8TFZhbHVlPiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQu
Y29uc3RJbnQ2NChzdGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQu
Y29uc3RJbnQzMihzaXplT2ZJQ0ZvcihtX25vZGUpKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQoY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291
dC5jb25zdEludDMyKDEgKyAhIWpzQXJndW1lbnRzICsgISF0aGlzQXJnKSk7CisgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoanNDYWxsZWUpOworICAgICAgICBpZiAoanNBcmd1bWVudHMpCisgICAg
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQXJndW1lbnRzKTsKKyAgICAgICAgaWYgKHRoaXNB
cmcpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNBcmcpOworICAgICAgICAKKyAg
ICAgICAgY2FsbFByZWZsaWdodCgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBt
X291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVudHMpOwor
ICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1DQ2FsbENv
bnYpOworICAgICAgICAKKyAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxWYXJhcmdzZXMuYXBwZW5k
KEpTQ2FsbFZhcmFyZ3Moc3RhY2ttYXBJRCwgbV9ub2RlKSk7CisgICAgICAgIAorICAgICAgICBz
ZXRKU1ZhbHVlKGNhbGwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJn
cygpCisgICAgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IHZtQ2Fs
bCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzKSwg
bV9jYWxsRnJhbWUsIGpzQXJndW1lbnRzLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihk
YXRhLT5vZmZzZXQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNo
YW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNl
LiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0n
cyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNl
CisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3
aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAorICAgICAg
ICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAg
ICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1p
dCkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLCBwYXlsb2FkRm9y
KGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICAKKyAgICAgICAgdm1DYWxsKAorICAgICAg
ICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzKSwgbV9jYWxsRnJhbWUs
CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQo
KSksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCisgICAgICAg
ICAgICBsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOwor
ICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUp1bXAoKQogICAgIHsKQEAgLTQwMTIsNyArNDEzMCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMVmFsdWUgY2FsbCA9
IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NElu
dHJpbnNpYygpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFw
SUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkNoZWNrSW4oKSksCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9m
SW4oKSksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQu
Y29uc3RJbnQzMigxKSwgY2VsbCk7CiAKICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvbkNh
bGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CkBAIC02NDA1LDcgKzY1
MjMsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIEJ1ZmZlciBpcyBvdXQgb2Ygc3BhY2UsIGZs
dXNoIGl0LgogICAgICAgICBtX291dC5hcHBlbmRUbyhidWZmZXJJc0Z1bGwsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJh
cnJpZXJCdWZmZXIpLCBtX2NhbGxGcmFtZSwgYmFzZSwgTm9FeGNlcHRpb25zKTsKKyAgICAgICAg
dm1DYWxsTm9FeGNlcHRpb25zKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdyaXRlQmFy
cmllckJ1ZmZlciksIG1fY2FsbEZyYW1lLCBiYXNlKTsKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwpAQCAtNjQxNCw0NCArNjUzMiwyMyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogCi0g
ICAgZW51bSBFeGNlcHRpb25DaGVja01vZGUgeyBOb0V4Y2VwdGlvbnMsIENoZWNrRXhjZXB0aW9u
cyB9OwotICAgIAotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBFeGNlcHRpb25D
aGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmdzPgorICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBBcmdzLi4uIGFyZ3Mp
CiAgICAgewogICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQg
PSBtX291dC5jYWxsKGZ1bmN0aW9uKTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOworICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJncy4uLik7CisgICAgICAg
IGNhbGxDaGVjaygpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBMVmFsdWUg
dm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEV4Y2VwdGlvbkNoZWNrTW9kZSBt
b2RlID0gQ2hlY2tFeGNlcHRpb25zKQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwot
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSk7Ci0gICAg
ICAgIGNhbGxDaGVjayhtb2RlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
TFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwg
RXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0gICAgewotICAgICAg
ICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1
bmN0aW9uLCBhcmcxLCBhcmcyKTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwg
TFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgRXhjZXB0aW9uQ2hlY2tNb2Rl
IG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0gICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7
Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxLCBhcmcy
LCBhcmczKTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEs
IExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIEV4Y2VwdGlvbkNoZWNrTW9k
ZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgTFZhbHVlIHZtQ2FsbE5vRXhjZXB0aW9ucyhMVmFsdWUgZnVuY3Rpb24sIEFy
Z3MuLi4gYXJncykKICAgICB7CiAgICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQp
OwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5jYWxsKGZ1bmN0aW9uLCBhcmdzLi4uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
Ci0gICAgCisKICAgICB2b2lkIGNhbGxQcmVmbGlnaHQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQog
ICAgIHsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKQEAgLTY0NjUsMTEgKzY1NjIsOCBAQCBwcml2
YXRlOgogICAgICAgICBjYWxsUHJlZmxpZ2h0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBjYWxsQ2hlY2soRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBD
aGVja0V4Y2VwdGlvbnMpCisgICAgdm9pZCBjYWxsQ2hlY2soKQogICAgIHsKLSAgICAgICAgaWYg
KG1vZGUgPT0gTm9FeGNlcHRpb25zKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAg
ICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZUV4Y2VwdGlvbkZ1enooKSkKICAgICAgICAgICAgIG1f
b3V0LmNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enopKTsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE3
OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0NywxMyArMzQ3LDggQEAgcHVibGljOgogICAgIExWYWx1ZSBjYWxsKExWYWx1
ZSBmdW5jdGlvbiwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBidWlsZENhbGwo
bV9idWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBm
dW5jdGlvbikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24pOyB9CiAgICAg
TFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gYnVpbGRD
YWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVl
IGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpIHsgcmV0dXJuIGJ1aWxkQ2FsbCht
X2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyKTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1
ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMykgeyByZXR1
cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMpOyB9Ci0g
ICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIs
IExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwg
ZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZh
bHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFs
dWUgYXJnNCwgTFZhbHVlIGFyZzUpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0
aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsgfQotICAgIExWYWx1ZSBjYWxsKExW
YWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZh
bHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNikgeyByZXR1cm4gYnVpbGRDYWxsKG1f
YnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpOyB9
Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFy
ZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBM
VmFsdWUgYXJnNykgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEs
IGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcpOyB9Ci0gICAgTFZhbHVlIGNhbGwo
TFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBM
VmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBMVmFsdWUgYXJnNywgTFZhbHVl
IGFyZzgpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcy
LCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBhcmc4KTsgfQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUg
YXJnMSwgQXJncy4uLiBhcmdzKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlv
biwgYXJnMSwgYXJncy4uLik7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
blR5cGU+CiAgICAgTFZhbHVlIG9wZXJhdGlvbihGdW5jdGlvblR5cGUgZnVuY3Rpb24pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ5LDYgKzQ5LDEwIEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgLCBtb2R1bGUo
MCkKICAgICAsIGZ1bmN0aW9uKDApCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQorICAgICwg
aGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBo
YW5kbGVFeGNlcHRpb25TdGFja21hcElEKFVJTlRfTUFYKQorICAgICwgY2FwdHVyZWRTdGFja21h
cElEKFVJTlRfTUFYKQorICAgICwgdmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEKFVJTlRfTUFY
KQogICAgICwgdW53aW5kRGF0YVNlY3Rpb24oMCkKICAgICAsIHVud2luZERhdGFTZWN0aW9uU2l6
ZSgwKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24g
MTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5j
bHVkZSAiRlRMSklURmluYWxpemVyLmgiCiAjaW5jbHVkZSAiRlRMSlNDYWxsLmgiCisjaW5jbHVk
ZSAiRlRMSlNDYWxsVmFyYXJncy5oIgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1
ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC03MSwxMCAr
NzIsMTIgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRp
b25TdGFja21hcElEOwogICAgIHVuc2lnbmVkIGhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQ7CiAg
ICAgdW5zaWduZWQgY2FwdHVyZWRTdGFja21hcElEOworICAgIHVuc2lnbmVkIHZhcmFyZ3NTcGls
bFNsb3RzU3RhY2ttYXBJRDsKICAgICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0b3I+
IGdldEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxQdXRCeUlkRGVzY3JpcHRvcj4gcHV0QnlJ
ZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPENoZWNrSW5EZXNjcmlwdG9yPiBjaGVja0luczsKICAg
ICBWZWN0b3I8SlNDYWxsPiBqc0NhbGxzOworICAgIFZlY3RvcjxKU0NhbGxWYXJhcmdzPiBqc0Nh
bGxWYXJhcmdzZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAg
VmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAgICAgdm9pZCogdW53aW5kRGF0YVNl
Y3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsx
MzQsNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgcmV0dXJuIGlu
dGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBjYWxsZXJTY29w
ZUNoYWluKTsKIH0KIAotdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNTdGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1V
c2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit1bnNpZ25lZCBzaXpl
T2ZWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMy
X3QgZmlyc3RWYXJBcmdPZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIGlmICgh
YXJndW1lbnRzKQpAQCAtMTU2LDYgKzE1NiwxMyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJh
cmdzKENhbGxGcmFtZSogCiAgICAgZWxzZQogICAgICAgICBsZW5ndGggPSAwOwogICAgIAorICAg
IHJldHVybiBsZW5ndGg7Cit9CisKK3Vuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTU3RhY2sqIHN0YWNrLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHNpemVPZlZhcmFyZ3MoY2FsbEZyYW1lLCBhcmd1bWVudHMsIGZp
cnN0VmFyQXJnT2Zmc2V0KTsKKyAgICAKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2Fs
bGVlRnJhbWVGb3JWYXJhcmdzKGNhbGxGcmFtZSwgbnVtVXNlZFN0YWNrU2xvdHMsIGxlbmd0aCAr
IDEpOwogICAgIGlmIChsZW5ndGggPiBBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyB8fCAhc3RhY2st
PmVuc3VyZUNhcGFjaXR5Rm9yKGNhbGxlZUZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKICAgICAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBy
ZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAtIHBhZGRlZENh
bGxlZUZyYW1lT2Zmc2V0KTsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENh
bGxGcmFtZSogZXhlYywgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zm
c2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogZXhlYywg
SlNTdGFjayosIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywg
dWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIHZvaWQgbG9hZFZhcmFyZ3MoQ2FsbEZy
YW1lKiBleGVjQ2FsbGVyLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1
ZSBzb3VyY2UsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNl
dHVwVmFyYXJnc0ZyYW1lKENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2Fs
bGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQz
Ml90IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3Rh
Y2tWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0OSw3ICsxNDksMTAgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2Fs
bAogCiAgICAgICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1f
ZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIG1fZnJh
bWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKTsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJl
Z2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKTsKICAgICAgICAgbV9mcmFtZS5tX2J5dGVj
b2RlT2Zmc2V0ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleDsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMTc5OTcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTIsMTUgKzIxMiwyNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2Fs
bEV4Y2VwdGlvbkZ1enooCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudEJ5
dGVzKCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6SnVt
cCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQg
a2luZCkKK0Fzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRp
b25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRo
KQogewogICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7CisKKyAgICBpZiAod2lkdGggPT0gRmFySnVt
cFdpZHRoKQorICAgICAgICBraW5kID0gKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBJ
bnZlcnRlZEV4Y2VwdGlvbkNoZWNrIDogTm9ybWFsRXhjZXB0aW9uQ2hlY2spOwogICAgIAorICAg
IEp1bXAgcmVzdWx0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJyYW5jaFRlc3Q2
NChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRl
QWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOworICAgIHJlc3VsdCA9IGJyYW5j
aFRlc3Q2NChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFi
c29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOwogI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICByZXR1cm4gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25D
aGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0
PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7CisgICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/
IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIq
Pih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAj
ZW5kaWYKKyAgICAKKyAgICBpZiAod2lkdGggPT0gTm9ybWFsSnVtcFdpZHRoKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgcmVhbEp1bXAgPSBwYXRjaGFi
bGVKdW1wKCk7CisgICAgcmVzdWx0LmxpbmsodGhpcyk7CisgICAgCisgICAgcmV0dXJuIHJlYWxK
dW1wLm1fanVtcDsKIH0KIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRTdG9yZVN0cnVjdHVy
ZVdpdGhUeXBlSW5mbyhBc3NlbWJseUhlbHBlcnMmIGppdCwgVHJ1c3RlZEltbVB0ciBzdHJ1Y3R1
cmUsIFJlZ2lzdGVySUQgZGVzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDYgKzMzOCwx
MCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7CisgICAgICAgIC8vIE5CLiBJdCdzIHRl
bXB0aW5nIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBzb21ldGltZXMgdXNlIGFuIG9mZnNldCBm
cm9tIHRoZSBzdGFjaworICAgICAgICAvLyByZWdpc3RlciBiZWNhdXNlIGZvciBzb21lIG9mZnNl
dHMgdGhhdCB3aWxsIGVuY29kZSB0byBhIHNtYWxsZXIgaW5zdHJ1Y3Rpb24uIEJ1dCB3ZQorICAg
ICAgICAvLyBjYW5ub3QgZG8gdGhpcy4gV2UgdXNlIHRoaXMgaW4gcGxhY2VzIHdoZXJlIHRoZSBz
dGFjayBwb2ludGVyIGhhcyBiZWVuIG1vdmVkIHRvIHNvbWUKKyAgICAgICAgLy8gdW5wcmVkaWN0
YWJsZSBsb2NhdGlvbi4KICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkp
OwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdmly
dHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQpAQCAtMzY3
LDM5ICszNzEsMzkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4
ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChpbnQgc2xv
dCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IHNsb3QpCiAgICAgewog
ICAgICAgICBBU1NFUlQoc2xvdCA+PSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSk7Ci0g
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIEpTU3RhY2s6OkNh
bGxlckZyYW1lQW5kUENTaXplKSk7CisgICAgICAgIHJldHVybiBBZGRyZXNzKHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBKU1N0YWNrOjpDYWxsZXJGcmFt
ZUFuZFBDU2l6ZSkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVl
IENhbGxGcmFtZS4KLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQp
CisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRTbG90KGludCBhcmd1bWVudCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZy
YW1lVGFnU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Ns
b3QoaW50IHNsb3QpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3Qp
LndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1l
UGF5bG9hZFNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXls
b2FkU2xvdChpbnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qo
c2xvdCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNh
bGxlZUFyZ3VtZW50VGFnU2xvdChpbnQgYXJndW1lbnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2Fs
bGVlQXJndW1lbnRUYWdTbG90KGludCBhcmd1bWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBj
YWxsZWVBcmd1bWVudFNsb3QoYXJndW1lbnQpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9
CiAKLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50UGF5bG9hZFNsb3QoaW50IGFyZ3VtZW50KQor
ICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50UGF5bG9hZFNsb3QoaW50IGFyZ3VtZW50
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUFyZ3VtZW50U2xvdChhcmd1bWVudCkud2l0
aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1l
Q2FsbGVyRnJhbWUoKQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENh
bGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgfQpAQCAtNTcxLDcgKzU3NSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CiAgICAgCiAgICAgZW51bSBF
eGNlcHRpb25DaGVja0tpbmQgeyBOb3JtYWxFeGNlcHRpb25DaGVjaywgSW52ZXJ0ZWRFeGNlcHRp
b25DaGVjayB9OwotICAgIEp1bXAgZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2lu
ZCBraW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2spOworICAgIGVudW0gRXhjZXB0aW9uSnVtcFdp
ZHRoIHsgTm9ybWFsSnVtcFdpZHRoLCBGYXJKdW1wV2lkdGggfTsKKyAgICBKdW1wIGVtaXRFeGNl
cHRpb25DaGVjaygKKyAgICAgICAgRXhjZXB0aW9uQ2hlY2tLaW5kID0gTm9ybWFsRXhjZXB0aW9u
Q2hlY2ssIEV4Y2VwdGlvbkp1bXBXaWR0aCA9IE5vcm1hbEp1bXBXaWR0aCk7CiAKICNpZiBFTkFC
TEUoU0FNUExJTkdfQ09VTlRFUlMpCiAgICAgc3RhdGljIHZvaWQgZW1pdENvdW50KE1hY3JvQXNz
ZW1ibGVyJiBqaXQsIEFic3RyYWN0U2FtcGxpbmdDb3VudGVyJiBjb3VudGVyLCBpbnQzMl90IGlu
Y3JlbWVudCA9IDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NzcsNiArMTc3NywxNSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBh
cmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCisgICAgeworICAgICAgICBzZXR1
cFR3b1N0dWJBcmdzR1BSPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRH
UFI0PihhcmcyLCBhcmc0KTsKKyAgICAgICAgbW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgICAgICBtb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAg
IG1vdmUoYXJnNSwgR1BSSW5mbzo6YXJndW1lbnRHUFI1KTsKKyAgICAgICAgbW92ZShHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB9CisKICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVkSW1tMzIgYXJnNCwg
VHJ1c3RlZEltbTMyIGFyZzUpCiAgICAgewogICAgICAgICBzZXR1cFR3b1N0dWJBcmdzR1BSPEdQ
UkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzPihhcmcyLCBhcmczKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxNzk5NzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NDAyLDYgKzQwMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZh
bHVlR1BSID0gWDg2UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQ
UlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBz
dGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVy
czo6ZXNpOworICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uQXJndW1lbnRH
UFIgPSBYODZSZWdpc3RlcnM6OnIxMDsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHBhdGNocG9p
bnRTY3JhdGNoUmVnaXN0ZXIgPSBNYWNyb0Fzc2VtYmxlcjo6c2NyYXRjaFJlZ2lzdGVyOwogCiAg
ICAgc3RhdGljIEdQUlJlZyB0b1JlZ2lzdGVyKHVuc2lnbmVkIGluZGV4KQpAQCAtNTc3LDYgKzU3
OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0g
QVJNNjRSZWdpc3RlcnM6OngwOyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0
dXJuVmFsdWVHUFIyID0gQVJNNjRSZWdpc3RlcnM6OngxOyAvLyByZWdUMQogICAgIHN0YXRpYyBj
b25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gQVJNNjRSZWdpc3RlcnM6Ongy
OworICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIgPSBB
Uk02NFJlZ2lzdGVyczo6eDg7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBvaW50U2Ny
YXRjaFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6OmlwMDsKIAogICAgIC8vIEdQUlJlZyBtYXBw
aW5nIGlzIGRpcmVjdCwgdGhlIG1hY2hpbmUgcmVnc2l0ZXIgbnVtYmVycyBjYW4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDExICs0NjQsNiBA
QCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgIG1fY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgREZHOjpDYW5JbmxpbmU6Ci0g
ICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCA9IHRydWU7Ci0gICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7
Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZH
OjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChPcGNvZGVJ
RCwgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHZv
aWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlELCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Ci0g
ICAgICAgIHZvaWQgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKik7CisgICAg
ICAgIHZvaWQgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiwgQ2FsbExpbmtJ
bmZvKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQo
SW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dENhbGxS
ZXN1bHQoSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
Ci12b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKK3ZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCiB7CiAgICAgaW50IHRoaXNWYWx1ZSA9IGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICBpbnQgYXJndW1lbnRzID0gaW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kOwpAQCAtOTAsNiArOTAsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZh
cmFyZ3NGcmFtZShJbnN0cgogICAgIGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgZW5kLmxpbmso
dGhpcyk7CiAgICAgCisgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCisgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDEsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKKyAgICBsb2Fk
OCgmaW5mby0+bWF4TnVtQXJndW1lbnRzLCByZWdUMCk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0g
YnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7CisgICAgSnVtcCBub3RTYXR1cmF0ZWQgPSBi
cmFuY2gzMihCZWxvd09yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoMjU1KSk7CisgICAgbW92
ZShUcnVzdGVkSW1tMzIoMjU1KSwgcmVnVDIpOworICAgIG5vdFNhdHVyYXRlZC5saW5rKHRoaXMp
OworICAgIHN0b3JlOChyZWdUMiwgJmluZm8tPm1heE51bUFyZ3VtZW50cyk7CisgICAgbm90Qmln
Z2VzdC5saW5rKHRoaXMpOworICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCByZWdUMCk7CiAgICAgc3RvcmU2NChyZWdU
MCwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKQEAgLTEzNCw3ICsxNDQsOSBAQCB2b2lk
IEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1CiAKIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENh
bGxMaW5rSW5mbygpOworCisgICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1l
UmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KQEAgLTE1Miw3ICsxNjQsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgQ09NUElMRV9BU1NFUlQoT1BD
T0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIGNh
bGxfYW5kX2NhbGxfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIENP
TVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9j
b25zdHJ1Y3RfdmFyYXJncyksIGNhbGxfYW5kX2NvbnN0cnVjdF92YXJhcmdzX29wY29kZXNfbXVz
dF9iZV9zYW1lX2xlbmd0aCk7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8
fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKLSAgICAgICAgY29tcGlsZVNldHVw
VmFyYXJnc0ZyYW1lKGluc3RydWN0aW9uKTsKKyAgICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0Zy
YW1lKGluc3RydWN0aW9uLCBpbmZvKTsKICAgICBlbHNlIHsKICAgICAgICAgaW50IGFyZ0NvdW50
ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtMTc2LDkgKzE4OCw3IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKIAogICAgIHN0b3JlNjQocmVnVDAsIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKICAg
ICAKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZv
KCk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CisgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfY2FsbF9ldmFsKSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlv
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAs
NyBAQCB0eXBlZGVmIGludDY0X3QgSklUX09QRVJBVElPTigqUV9KSVRPcGVyCiB0eXBlZGVmIGlu
dDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVm
IGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwog
dHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0
YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3Bl
cmF0aW9uX0VKWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwogdHlwZWRl
ZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FSlpaKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIHNpemVfdCBKSVRf
T1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0Nl
bGwqKTsKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSiko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTg5LDYgKzE5MCw3IEBAIHR5cGVkZWYg
dm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRVZ3c0opKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWkopKEV4ZWNTdGF0ZSosIGludDMyX3QsIEVuY29k
ZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
RVpKWlpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50
MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
aW9uX0VWbSkoRXhlY1N0YXRlKiwgVk0qKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9aKShpbnQzMl90KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAxLDExICsxMDEsMzEgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJh
bWVGYXN0Q2FzZShDQ2FsbAogCiB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJz
dFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2UpCiB7Ci0gICAg
ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoCi0gICAgICAgIGppdCwgbnVtVXNlZFNsb3Rz
R1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLAotICAgICAgICBWYWx1
ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpLCBEYXRhRm9ybWF0SW50MzIpLAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSksCi0gICAgICAgIGZpcnN0VmFyQXJnT2Zmc2V0
LCBzbG93Q2FzZSk7CisgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1V
c2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG51bGxw
dHIsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7Cit9CisKK3ZvaWQgZW1pdFNldHVwVmFy
YXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xvdHNH
UFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRj
aEdQUjMsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBmaXJzdFZh
ckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2UpCit7CisgICAgVmFs
dWVSZWNvdmVyeSBhcmd1bWVudENvdW50UmVjb3Zlcnk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0QXJndW1lbnRSZWc7CisgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dFJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLCBEYXRhRm9ybWF0
SW50MzIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlY292
ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoCisgICAgICAgICAgICAgICAganNOdW1iZXIo
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSA+IDEpCisgICAgICAgICAgICBm
aXJzdEFyZ3VtZW50UmVnID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBW
aXJ0dWFsUmVnaXN0ZXIoMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJndW1lbnRDb3VudFJl
Y292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCBEYXRhRm9ybWF0SW50MzIp
OworICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXQoMCkpOworICAgIH0KKyAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0
Q2FzZShqaXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3Jh
dGNoR1BSMywgYXJndW1lbnRDb3VudFJlY292ZXJ5LCBmaXJzdEFyZ3VtZW50UmVnLCBmaXJzdFZh
ckFyZ09mZnNldCwgc2xvd0Nhc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NG
cmFtZUZhc3RDYXNlKENDYWxsCiAvLyBWYXJpYW50IHRoYXQgYXNzdW1lcyBub3JtYWwgc3RhY2sg
ZnJhbWUuCiB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsSGVscGVycyYs
IEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0
Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93Q2FzZSk7CiAKKy8vIFZhcmlhbnQgZm9yIHBvdGVu
dGlhbGx5IGlubGluZWQgc3RhY2sgZnJhbWVzLgordm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVG
YXN0Q2FzZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2Ny
YXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCBJbmxpbmVD
YWxsRnJhbWUqLCB1bnNpZ25lZCBmaXJzdFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCYgc2xvd0Nhc2UpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAko
cmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICBzdGF0aWMgQXJndW1lbnRzKiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSA9
IE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9kZSkKICAgICB7Ci0gICAgICAgIEFyZ3VtZW50cyog
YXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFw
LCBvZmZzZXRPZklubGluZVJlZ2lzdGVyQXJyYXkoKSArIHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRl
cyhpbmxpbmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgIEFyZ3Vt
ZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJndW1lbnRzPih2
bS5oZWFwLCBvZmZzZXRPZklubGluZVJlZ2lzdGVyQXJyYXkoKSArIHJlZ2lzdGVyQXJyYXlTaXpl
SW5CeXRlcyhjYWxsRnJhbWUsIGlubGluZUNhbGxGcmFtZSkpKSBBcmd1bWVudHMoY2FsbEZyYW1l
KTsKICAgICAgICAgYXJndW1lbnRzLT5maW5pc2hDcmVhdGlvbihjYWxsRnJhbWUsIGlubGluZUNh
bGxGcmFtZSwgbW9kZSk7CiAgICAgICAgIHJldHVybiBhcmd1bWVudHM7CiAgICAgfQpAQCAtMTI0
LDcgKzEyNCwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlU3RyaWN0TW9kZUNhbGxlZUlm
TmVjZXNzYXJ5KEV4ZWNTdGF0ZSopOwogCiAgICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5
U2l6ZUluQnl0ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICogY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7IH0KLSAgICBzdGF0
aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSkgeyByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiAoaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSk7IH0KKyAgICBzdGF0aWMgc2l6ZV90
IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAgICB1bnNpZ25lZCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJl
Z2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCk7CisgICAgICAgIHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAq
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOworICAgIH0KICAgICBib29sIGlzQXJn
dW1lbnQoc2l6ZV90KTsKICAgICBib29sIHRyeVNldEFyZ3VtZW50KFZNJiwgc2l6ZV90IGFyZ3Vt
ZW50LCBKU1ZhbHVlKTsKICAgICBKU1ZhbHVlIHRyeUdldEFyZ3VtZW50KHNpemVfdCBhcmd1bWVu
dCk7CkBAIC0zNDAsMTEgKzM0OCwxNSBAQCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENy
ZWF0aW9uKENhCiAgICAgbV9vdmVycm9kZUNhbGxlZSA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVD
YWxsZXIgPSBmYWxzZTsKICAgICBtX2lzU3RyaWN0TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUo
KTsKLQorICAgIAorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ci5pc1ZhbGlkKCkpCisgICAgICAgIG1fbnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIo
KTsKKyAgICBlbHNlCisgICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpOworICAgIG1fbnVtQXJndW1lbnRzLS07CisgICAgCiAgICAgc3dpdGNo
IChtb2RlKSB7CiAgICAgY2FzZSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAg
ICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAx
OwotICAgICAgICAKICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBp
bnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVp
bnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEpLm9mZnNldCgpOwpAQCAtMzYxLDcgKzM3Myw2IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50
czo6ZmluaXNoQ3JlYXRpb24oQ2EKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2xvbmVkQXJn
dW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0gICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRz
KSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAg
IG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjEx
LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgLyogZnJvbSBzdXBl
ciBsb25nIGNvbXBpbGVzIHRoYXQgdGFrZSBhIGxvdCBvZiBtZW1vcnkuICovXAogICAgIHYodW5z
aWduZWQsIG1heGltdW1JbmxpbmluZ0NhbGxlclNpemUsIDEwMDAwKSBcCiAgICAgXAorICAgIHYo
dW5zaWduZWQsIG1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcsIDEwMCkgXAorICAgIFwKICAgICB2
KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50Q2FsbElubGluaW5nLCB0cnVlKSBcCiAgICAgdihib29s
LCBlbmFibGVQb2x5dmFyaWFudEJ5SWRJbmxpbmluZywgdHJ1ZSkgXAogICAgIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246598</attachid>
            <date>2015-02-14 10:11:00 -0800</date>
            <delta_ts>2015-02-15 18:08:52 -0800</delta_ts>
            <desc>it&apos;s passing so many tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>177662</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
MTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFB
OEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAv
KiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAx
NDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2Nh
dGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxs
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAw
MEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8q
IFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICov
LAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAq
LywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
LAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkw
RjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBA
QAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4
NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiAr
NDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRy
dXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVy
c2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNy
Y0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQo
aW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0z
MkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMzEsNiArMzMxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
bXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODc2LDYgKzg3NiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJ
YiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgw
KQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBw
dWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNp
Z25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDog
ODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAg
Ly8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1
ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0o
cHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZv
KGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1f
bWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxs
TGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkK
K3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9j
b3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBi
b29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAo
IW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1w
KG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAg
bV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApA
QCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29u
c3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAg
LTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkg
Y29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgog
ICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAg
IGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0
LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAg
IENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFy
Z3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNv
cnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAg
ICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZh
cmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAg
cmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBpc1Zh
cmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtp
bmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtp
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzRXNjYXBlZCI7CiAgICAgY2FzZSBOb3RTdHJpbmdP
YmplY3Q6CiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKKyAgICBjYXNlIFZhcmFy
Z3NPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZsb3ciOwogICAgIGNhc2Ug
VW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5j
b3VudGFibGVJbnZhbGlkYXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEluYWRlcXVhdGVDb3ZlcmFnZSwgLy8gV2UgZXhp
dGVkIGJlY2F1c2Ugd2UgZW5kZWQgdXAgaW4gY29kZSB0aGF0IGRpZG4ndCBoYXZlIHByb2ZpbGlu
ZyBjb3ZlcmFnZS4KICAgICBBcmd1bWVudHNFc2NhcGVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
cmd1bWVudHMgZXNjYXBlZCBidXQgd2UgZGlkbid0IGV4cGVjdCB0aGVtIHRvLgogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgorICAgIFZhcmFyZ3NPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB2YXJhcmdzIGNhbGwgcGFzc2VkIG1vcmUgYXJndW1l
bnRzIHRoYW4gd2UgZXhwZWN0ZWQuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgV2F0Y2hkb2dU
aW1lckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdh
dGNoZG9nIHRpbWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5OTcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKTsKLSAgICAg
ICAgQVNTRVJUKHZhbHVlLmlzSGVhcFRvcCgpKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc0Ns
ZWFyKCkpOwogICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICAgICB2
YWx1ZS5maWx0ZXIodHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1h
dCgpKSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IEZpbHRyYXRp
b25PSyk7CkBAIC0yMDMsOSArMjAzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0Lgot
ICAgICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRl
IG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9u
ZSBzZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1
cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAgLy8gbm9uLWNs
ZWFyIHZhbHVlLgorICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChu
b2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVy
YW5kKGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2Fz
ZSBCaXRPcjoKQEAgLTEzMTUsNyArMTMyNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0
IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAg
ICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0
aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRo
ZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBzZXRD
b25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0ZW5kIHRoYXQgd2UgY2xvYmJl
cmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KQEAgLTE5NjQsNiArMTk3Niw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3Ao
KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBC
dXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhh
dCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw4IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8g
SGVscGVyIGZvciBtaW4gYW5kIG1heC4KLSAgICBib29sIGhhbmRsZU1pbk1heChpbnQgcmVzdWx0
T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgor
ICAgIGJvb2wgaGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENo
ZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgCiAgICAgLy8gSGFuZGxlIGNhbGxzLiBU
aGlzIHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmluc2ljcy4K
ICAgICB2b2lkIGhhbmRsZUNhbGwoCkBAIC0xODIsMjAgKzE4MywyNSBAQCBwcml2YXRlOgogICAg
ICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwg
Q2FsbExpbmtTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlw
ZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBp
bnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAgICAgdm9pZCBo
YW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQpOwotICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBj
YWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwot
ICAgIHZvaWQgdW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50KTsKKyAgICB2b2lkIGhhbmRs
ZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2Rl
KiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtbnQpOwogICAgIHZvaWQgZW1p
dEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHVuc2lnbmVkIGlubGlu
aW5nQ29zdChDYWxsVmFyaWFudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFuIGlu
bGluaW5nIGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29zdCBv
ZiAxLgogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVk
LCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlubGlu
aW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExp
bmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOworICAgIGJvb2wgaGFuZGxlSW5s
aW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxs
TGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1
bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVu
dHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9m
ZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24pOwogICAgIGVudW0gQ2FsbGVyTGlua2FiaWxpdHkgeyBDYWxsZXJEb2Vz
Tm9ybWFsTGlua2luZywgQ2FsbGVyTGlua3NNYW51YWxseSB9OwotICAgIGJvb2wgYXR0ZW1wdFRv
SW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxW
YXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5r
YWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFs
YW5jZSk7Ci0gICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVz
dWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQsIENhbGxlckxpbmthYmlsaXR5KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NG
dW5jdG9yPgorICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5z
ZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIHZv
aWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENh
bGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJM
aW5rYWJpbGl0eSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB2b2lk
IGNhbmNlbExpbmtpbmdGb3JCbG9jayhJbmxpbmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAv
LyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdpdmVuIGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZl
IGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5saW5lIHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBp
bnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlm
IHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKLSAgICBib29s
IGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxG
dW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVu
Y3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICBib29sIGhh
bmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0
cnVjdG9yKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlLCBj
b25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24o
aW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwg
Y29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRC
eU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwg
Tm9kZSogdmFsdWUpOwogICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
LCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CiAgICAgdm9p
ZCBoYW5kbGVHZXRCeUlkKApAQCAtNTI4LDYgKzUzNCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAg
ICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpOworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tF
bnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KSkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZVN0
YWNrRW50cnktPm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSBudW1Bcmd1bWVudHM7IGFyZ3VtZW50LS0gPiAxOykKQEAgLTY1NCwx
MyArNjYyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCByZW1vdmVMYXN0Tm9kZUZyb21HcmFwaChOb2RlVHlwZSBleHBlY3RlZE5vZGVU
eXBlKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT50YWtlTGFz
dCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IGV4cGVjdGVkTm9kZVR5
cGUpOwotICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUobm9kZSk7Ci0gICAgfQotCiAg
ICAgdm9pZCBhZGRWYXJBcmdDaGlsZChOb2RlKiBjaGlsZCkKICAgICB7CiAgICAgICAgIG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoRWRnZShjaGlsZCkpOwpAQCAtNjkxLDcgKzY5Miw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBvcCwgb3BJbmZvLCBjYWxsZWUsIGFyZ0NvdW50LCBy
ZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRSZWcocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOworICAgICAgICAgICAgc2V0
KHJlc3VsdFJlZywgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKQEAg
LTEwNDIsOCArMTA0Myw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiB7CiAg
ICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIAotICAgIGlmIChjYWxsVGFyZ2V0
LT5oYXNDb25zdGFudCgpKQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVz
KGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKKyAgICBpZiAoY2Fs
bFRhcmdldC0+aXNDZWxsQ29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJv
dmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQoY2FsbFRhcmdldC0+YXNDZWxsKCkpKTsKICAg
ICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAg
ICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAi
OiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CkBAIC0xMDYwLDcgKzEwNjEsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogICAgIE9wSW5mbyBjYWxsT3BJbmZvOwog
ICAgIAotICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5r
U3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRP
ZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgeworICAgIGlmIChoYW5kbGVJbmxpbmluZyhj
YWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFsUmVnaXN0ZXIo
KSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBw
cmVkaWN0aW9uKSkgewogICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAg
ICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOwogICAgICAg
ICByZXR1cm47CkBAIC0xMDcyLDcgKzEwNzMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVDYWxsKAogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5mdW5jdGlvbigp
OwogICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElu
bGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgICAgICBpZiAo
ZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGVt
aXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUsIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVj
aWFsaXphdGlvbktpbmQpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxlZSwg
Y2FsbFRhcmdldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQp
KTsKICAgICAgICAgICAgIGNhbGxPcEluZm8gPSBPcEluZm8obV9ncmFwaC5mcmVlemUoZnVuY3Rp
b24pKTsKIAogICAgICAgICAgICAgaWYgKG9wID09IENhbGwpCkBAIC0xMDg4LDExICsxMDg5LDU0
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2FsbChyZXN1bHQs
IG9wLCBjYWxsT3BJbmZvLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
cmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpl
bWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFyZ2V0LCBp
bnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUg
b3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBOb2RlKiB0aGlzQXJndW1l
bnQ7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBPUENPREVf
TEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7CisgICAgCisgICAgaW50IHJlc3VsdCA9IHBj
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgY2FsbGVlID0gcGNbMl0udS5vcGVyYW5kOworICAgIGlu
dCB0aGlzUmVnID0gcGNbM10udS5vcGVyYW5kOworICAgIGludCBhcmd1bWVudHMgPSBwY1s0XS51
Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJlZVJlZyA9IHBjWzVdLnUub3BlcmFuZDsKKyAgICBp
bnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBwY1s2XS51Lm9wZXJhbmQ7CisgICAgCisgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAKKyAgICBOb2RlKiBj
YWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsKKyAgICAKKyAgICBDYWxs
TGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAor
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3Jp
Z2luKCksCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxs
Q29udGV4dE1hcCk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50KCkpCisgICAg
ICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxWYXJpYW50KGNh
bGxUYXJnZXQtPmFzQ2VsbCgpKSk7CisgICAgCisgICAgaWYgKGNhbGxMaW5rU3RhdHVzLmNhbk9w
dGltaXplKCkKKyAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBj
YWxsTGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZyksIFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVDYWxsRnJh
bWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBpZiAobV9n
cmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5u
b3RpY2VJbmxpbmVkQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIENh
bGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9jYWxsVmFyYXJnc0RhdGEuYWRkKCk7Cisg
ICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAgICAKKyAg
ICBOb2RlKiB0aGlzQ2hpbGQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAg
IHRoaXNBcmd1bWVudCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rl
ck9mZnNldCkpOworICAgICAgICB0aGlzQ2hpbGQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNS
ZWcpKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXNDaGlsZCA9IG51bGxwdHI7CisgICAgCisgICAg
Tm9kZSogY2FsbCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBjYWxsVGFyZ2V0LCBnZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLCB0aGlzQ2hp
bGQpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKKyAgICBpZiAocmVz
dWx0UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7Cit9CisKK3Zv
aWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBjYWxsZWUs
IE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnRSZWcpCit7Cisg
ICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIGlmICh0aGlzQXJndW1lbnRSZWcuaXNWYWxpZCgp
KQorICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQodGhpc0FyZ3VtZW50UmVnKTsKICAgICBlbHNl
CiAgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKQEAgLTExMTAsMTMgKzExNTQsNiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoCiAgICAgYWRkVG9HcmFwaChDaGVj
a0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjYWxsZWVDZWxsKSksIGNhbGxUYXJnZXRGb3JD
aGVjaywgdGhpc0FyZ3VtZW50KTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6dW5kb0Z1bmN0
aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSkKLXsKLSAgICByZW1vdmVMYXN0Tm9kZUZyb21H
cmFwaChDaGVja0NlbGwpOwotICAgIGlmIChjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpKQotICAgICAg
ICByZW1vdmVMYXN0Tm9kZUZyb21HcmFwaChHZXRFeGVjdXRhYmxlKTsKLX0KLQogdm9pZCBCeXRl
Q29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
IHsKICAgICBmb3IgKGludCBpID0ga2luZCA9PSBDb2RlRm9yQ2FsbCA/IDAgOiAxOyBpIDwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkKQEAgLTEyMTAsMTMgKzEyNDcsMTUgQEAgdW5z
aWduZWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29zdChDYQogICAgIHJldHVybiBjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5l
Q2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50
IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBDYWxs
ZXJMaW5rYWJpbGl0eSBjYWxsZXJMaW5rYWJpbGl0eSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNr
c0Z1bmN0b3I+Cit2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9m
ZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxl
ckxpbmthYmlsaXR5LCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpCiB7CiAgICAg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJh
bWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKICAgICAKICAgICBBU1NFUlQoaW5saW5p
bmdDb3N0KGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9u
S2luZCkgIT0gVUlOVF9NQVgpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpLT5iYXNlbGluZUNvZGVCbG9ja0ZvcihzcGVjaWFsaXph
dGlvbktpbmQpOworICAgIGluc2VydENoZWNrcyhjb2RlQmxvY2spOwogCiAgICAgLy8gRklYTUU6
IERvbid0IGZsdXNoIGNvbnN0YW50cyEKICAgICAKQEAgLTEzNTYsNDQgKzEzOTUsNTkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6Y2FuY2VsTGlua2luZ0ZvckJsbwogICAgIH0KIH0KIAotYm9vbCBC
eXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
aW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElu
bGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBDYWxsZXJMaW5rYWJpbGl0eSBjYWxsZXJMaW5rYWJp
bGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5j
ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+Citib29sIEJ5dGVDb2RlUGFyc2Vy
OjphdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3Bl
cmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1l
OjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBjb25zdCBDaGVj
a3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpCiB7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBz
cGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZv
cihraW5kKTsKICAgICAKICAgICBpZiAoIWlubGluaW5nQmFsYW5jZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAorICAgIGJvb2wgZGlkSW5zZXJ0Q2hlY2tzID0gZmFsc2U7CisgICAgYXV0
byBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZyA9IFsmXSAoKSB7CisgICAgICAgIGluc2VydENo
ZWNrcyhudWxscHRyKTsKKyAgICAgICAgZGlkSW5zZXJ0Q2hlY2tzID0gdHJ1ZTsKKyAgICB9Owor
ICAgIAogICAgIGlmIChJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5pbnRlcm5h
bEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlv
bihyZXN1bHRPcGVyYW5kLCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQpKSB7CisgICAgICAgIGlmIChoYW5kbGVD
b25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kLCBp
bnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGRpZEluc2VydENoZWNrcyk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxU
YXJnZXROb2RlKTsKICAgICAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zm
c2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAg
ICAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghZGlk
SW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBJ
bnRyaW5zaWMgaW50cmluc2ljID0gY2FsbGVlLmludHJpbnNpY0ZvcihzcGVjaWFsaXphdGlvbktp
bmQpOwogICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpIHsKLSAgICAgICAgaWYgKGhh
bmRsZUludHJpbnNpYyhyZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lzdGVyT2Zmc2V0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgaWYgKGhh
bmRsZUludHJpbnNpYyhyZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lzdGVyT2Zmc2V0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbiwgaW5zZXJ0Q2hlY2tzV2l0aEFj
Y291bnRpbmcpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRJbnNlcnRDaGVja3Mp
OwogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0Tm9kZSk7CiAgICAg
ICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBpbmxpbmlu
Z0JhbGFuY2UtLTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENoZWNrcyk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbXlJbmxpbmlu
Z0Nvc3QgPSBpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
c3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpZiAobXlJbmxpbmluZ0Nvc3QgPiBpbmxpbmluZ0Jh
bGFuY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpbmxpbmVDYWxsKGNhbGxU
YXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsZWUsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgY2FsbGVyTGlua2FiaWxpdHkp
OworCisgICAgaW5saW5lQ2FsbChjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbGVl
LCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQs
IGtpbmQsIGNhbGxlckxpbmthYmlsaXR5LCBpbnNlcnRDaGVja3MpOwogICAgIGlubGluaW5nQmFs
YW5jZSAtPSBteUlubGluaW5nQ29zdDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1
bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5p
bmcoCisgICAgTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBD
YWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0T3JG
aXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCisgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2Rl
VHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKQogewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkhhbmRs
aW5nIGlubGluaW5nLi4uXG4iKTsKQEAgLTE0MDcsNiArMTQ2MSwxMyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCisgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpCisgICAgICAg
ICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9uczo6bWF4aW11bVZh
cmFyZ3NGb3JJbmxpbmluZygpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZhcmFyZ3MuXG4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAgdW5zaWduZWQgaW5saW5pbmdC
YWxhbmNlID0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUlu
c3RydWN0aW9uQ291bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpCiAgICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0ZDo6bWluKGlubGluaW5nQmFs
YW5jZSwgT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRl
SW5zdHJ1Y3Rpb25Db3VudCgpKTsKQEAgLTE0MTcsMTcgKzE0NzgsMTAwIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBzaW1wbGlmaWNhdGlvbiBvbiB0
aGUgZmx5IGFuZCB0aGlzIGhlbHBzIHJlZHVjZSBjb21waWxlIHRpbWVzLCBidXQgd2UgY2FuIG9u
bHkgbGV2ZXJhZ2UKICAgICAvLyB0aGlzIGluIGNhc2VzIHdoZXJlIHdlIGRvbid0IG5lZWQgY29u
dHJvbCBmbG93IGRpYW1vbmRzIHRvIGNoZWNrIHRoZSBjYWxsZWUuCiAgICAgaWYgKCFjYWxsTGlu
a1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVzLnNpemUoKSA9PSAx
KSB7Ci0gICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcygKLSAgICAgICAgICAgIGNhbGxMaW5rU3Rh
dHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2lu
ZCk7CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldDsKKyAgICAgICAgCisgICAgICAgIC8vIE9u
bHkgdXNlZCBmb3IgdmFyYXJncyBjYWxscy4KKyAgICAgICAgdW5zaWduZWQgbWFuZGF0b3J5TWlu
aW11bSA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IDA7CisKKyAgICAg
ICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpKSB7CisgICAgICAgICAgICBp
ZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBjYWxsTGlua1N0YXR1
c1swXS5mdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlNaW5p
bXVtID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBpbmNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIG1heE51bUFyZ3Vt
ZW50cyA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzLm1heE51bUFy
Z3VtZW50cygpLAorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gKyAxKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugc29ydCBvZiBwcmV0ZW5kIHRoYXQgdGhpcyAqaXMq
IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgd2VyZSBwYXNzZWQuCisgICAgICAgICAgICBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IG1heE51bUFyZ3VtZW50czsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVl
UmVnICsgMTsKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IG1heE51bUFyZ3VtZW50czsg
Ly8gaW5jbHVkZXMgInRoaXMiCisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAgICAgICAgIHN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCksCisgICAgICAgICAgICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZy
ZWVSZWc7CisgICAgICAgIAogICAgICAgICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNh
bGwoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtT
dGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxlckRvZXNOb3JtYWxMaW5raW5nLCBwcmVk
aWN0aW9uLAotICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlKTsKLSAgICAgICAgaWYgKCFyZXN1
bHQgJiYgIWNhbGxMaW5rU3RhdHVzLmlzUHJvdmVkKCkpCi0gICAgICAgICAgICB1bmRvRnVuY3Rp
b25DaGVja3MoY2FsbExpbmtTdGF0dXNbMF0pOworICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNl
LCBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgc3BlY2lhbGl6YXRp
b25LaW5kID09IENvZGVGb3JDYWxsID8gdGhpc0FyZ3VtZW50IDogVmlydHVhbFJlZ2lzdGVyKCkp
OworCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHZhcmFyZ3MgY2FsbCwgd2Ugd2Fu
dCB0byBleHRyYWN0IHRoZSBhcmd1bWVudHMgcmlnaHQgbm93LgorICAgICAgICAgICAgICAgIGlm
IChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgeworICAgICAgICAgICAgICAgICAg
ICBpbnQgYXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZTsKKworICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBtX2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOworICAgICAgICAgICAgICAgICAgICBk
YXRhLT5zdGFydCA9IFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0ICsgMSk7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPmNvdW50ID0gVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0
ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPm9m
ZnNldCA9IGFyZ3VtZW50c09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+bGltaXQg
PSBtYXhOdW1Bcmd1bWVudHM7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1p
bmltdW0gPSBtYW5kYXRvcnlNaW5pbXVtOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0KGFyZ3VtZW50c0Fy
Z3VtZW50KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gREZHIElS
IGJlZm9yZSBTU0EsIHdlIGNhbm5vdCBpbnNlcnQgY29udHJvbCBmbG93IGJldHdlZW4gYWZ0ZXIg
dGhlCisgICAgICAgICAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCB0aGUgbGFzdCBTZXRB
cmd1bWVudC4gVGhpcyBpc24ndCBhIHByb2JsZW0gb25jZSB3ZSBnZXQgdG8gREZHCisgICAgICAg
ICAgICAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciByZWFz
b25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdworICAgICAgICAgICAgICAgICAgICAv
LyBiZWZvcmUgU1NBLgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgcHJldHR5IGxhbWUsIGJ1dCBpdCB3aWxsIGZvcmNlIHRoZSBjb3VudCB0byBiZSBmbHVzaGVk
IGFzIGFuIGludC4gVGhpcyBkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgIC8vIG1hdHRlciB2
ZXJ5IG11Y2gsIHNpbmNlIG91ciB1c2Ugb2YgYSBTZXRBcmd1bWVudCBhbmQgRmx1c2hlcyBmb3Ig
dGhpcyBsb2NhbCBzbG90IGlzCisgICAgICAgICAgICAgICAgICAgIC8vIG1vc3RseSBqdXN0IGEg
Zm9ybWFsaXR5LgorICAgICAgICAgICAgICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0KFNw
ZWNJbnQzMik7CisgICAgICAgICAgICAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9m
aXRhYmxlVG9VbmJveCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0QXJndW1l
bnRDb3VudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhjb3VudFZhcmlhYmxlKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0
T3BlcmFuZChjb3VudFZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudENvdW50KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5kID09IENv
ZGVGb3JDYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwg
bWF4TnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0ICsg
YXJndW1lbnQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWVy
Z2VTaG91bGROZXZlclVuYm94KHRydWUpOyAvLyBXZSBjdXJyZW50bHkgaGF2ZSBub3doZXJlIHRv
IHB1dCB0aGUgdHlwZSBjaGVjayBvbiB0aGUgTG9hZFZhcmFyZ3MuIExvYWRWYXJhcmdzIGlzIGVm
ZmVjdGZ1bCwgc28gYWZ0ZXIgaXQgZmluaXNoZXMsIHdlIGNhbm5vdCBleGl0LgorICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgYSB3aGlsZSBp
dCBoYWQgYmVlbiBteSBpbnRlbnRpb24gdG8gZG8gdGhpbmdzIGxpa2UgdGhpcyBpbnNpZGUgdGhl
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmVkaWN0aW9uIGluamVjdGlvbiBwaGFzZS4g
QnV0IGluIHRoaXMgY2FzZSBpdCdzIHJlYWxseSBiZXN0IHRvIGRvIGl0IGhlcmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIGl0J3MgaGVyZSB0aGF0IHdlIGhhdmUgYWNjZXNz
IHRvIHRoZSB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaW5saW5pbmcgd2UncmUgYWJvdXQgdG8gZG8uCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIGVsc2UgdGhhdCdz
IGludGVyZXN0aW5nIGhlcmUgaXMgdGhhdCB3ZSdkIHJlYWxseSBsb3ZlIHRvIGdldAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcHJlZGljdGlvbnMgZnJvbSB0aGUgYXJndW1lbnRzIGxvYWRl
ZCBhdCB0aGUgY2FsbHNpdGUsIHJhdGhlciB0aGFuIHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYXJndW1lbnRzIHJlY2VpdmVkIGluc2lkZSB0aGUgY2FsbGVlLiBCdXQgdGhhdCBwcm9i
YWJseSB3b24ndCBtYXR0ZXIgZm9yIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNh
bGxzLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBhcmd1bWVudCA8
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVlUHJv
ZmlsZSogcHJvZmlsZSA9IGNvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1l
bnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+cHJlZGljdChw
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZv
KHZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0p
OwogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiRG9uZSBpbmxp
bmluZyAoc2ltcGxlKS5cbiIpOwogICAgICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJl
bnRDb2RlT3JpZ2luKCksICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiUmVzdWx0OiAiLCBy
ZXN1bHQsICJcbiIpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpA
QCAtMTQzNywxMSArMTU4MSw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5n
KE5vZGUKICAgICAvLyBkbyBtb3JlIGRldGFpbGVkIHBvbHl2YXJpYW50L3BvbHltb3JwaGljIHBy
b2ZpbGluZzsgYW5kIHNlY29uZCwgaXQgcmVkdWNlcyBjb21waWxlIHRpbWVzIGluCiAgICAgLy8g
dGhlIERGRy4gQW5kIGJ5IHBvbHl2YXJpYW50IHByb2ZpbGluZyB3ZSBtZWFuIHBvbHl2YXJpYW50
IHByb2ZpbGluZyBvZiAqdGhpcyogY2FsbC4gTm90ZSB0aGF0CiAgICAgLy8gd2UgY291bGQgaW1w
cm92ZSB0aGF0IGFzcGVjdCBvZiB0aGlzIGJ5IGRvaW5nIHBvbHltb3JwaGljIGlubGluaW5nIGJ1
dCBoYXZpbmcgdGhlIHByb2ZpbGluZwotICAgIC8vIGFsc28uIEN1cnJlbnRseSB3ZSBvcHQgYWdh
aW5zdCB0aGlzLCBidXQgaXQgY291bGQgYmUgaW50ZXJlc3RpbmcuIFRoYXQgd291bGQgcmVxdWly
ZSBoYXZpbmcgYQotICAgIC8vIHNlcGFyYXRlIG5vZGUgZm9yIGNhbGwgZWRnZSBwcm9maWxpbmcu
Ci0gICAgLy8gRklYTUU6IEludHJvZHVjZSB0aGUgbm90aW9uIG9mIGEgc2VwYXJhdGUgY2FsbCBl
ZGdlIHByb2ZpbGluZyBub2RlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzYwMzMKLSAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8
ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZygpKSB7CisgICAgLy8gYWxz
by4KKyAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFi
bGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZygpCisgICAgICAgIHx8IElubGluZUNhbGxGcmFtZTo6
aXNWYXJhcmdzKGtpbmQpKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBk
YXRhTG9nKCJCYWlsaW5nIGlubGluaW5nIChoYXJkKS5cbiIpOwogICAgICAgICAgICAgZGF0YUxv
ZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwpAQCAtMTQ4Miw2ICsxNjI0
LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBk
YXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgfQogICAg
IAorICAgIGludCByZWdpc3Rlck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7
CisgICAgCiAgICAgLy8gVGhpcyBtYWtlcyBtZSB3aXNoIHRoYXQgd2Ugd2VyZSBpbiBTU0EgYWxs
IHRoZSB0aW1lLiBXZSBuZWVkIHRvIHBpY2sgYSB2YXJpYWJsZSBpbnRvIHdoaWNoIHRvCiAgICAg
Ly8gc3RvcmUgdGhlIGNhbGxlZSBzbyB0aGF0IGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byBhbGwg
b2YgdGhlIGJsb2NrcyB3ZSdyZSBhYm91dCB0byBjcmVhdGUuIFdlCiAgICAgLy8gZ2V0IGF3YXkg
d2l0aCBkb2luZyBhbiBpbW1lZGlhdGUtc2V0IGhlcmUgYmVjYXVzZSB3ZSB3b3VsZG4ndCBoYXZl
IHBlcmZvcm1lZCBhbnkgc2lkZSBlZmZlY3RzCkBAIC0xNTI2LDcgKzE2NzAsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIGJvb2wgaW5saW5pbmdS
ZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVDYWxsKAogICAgICAgICAgICAgbXlDYWxsVGFyZ2V0Tm9k
ZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbaV0sIHJlZ2lzdGVyT2Zmc2V0LAogICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENh
bGxlckxpbmtzTWFudWFsbHksIHByZWRpY3Rpb24sCi0gICAgICAgICAgICBpbmxpbmluZ0JhbGFu
Y2UpOworICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLCBbJl0gKENvZGVCbG9jayopIHsgfSk7
CiAgICAgICAgIAogICAgICAgICBpZiAoIWlubGluaW5nUmVzdWx0KSB7CiAgICAgICAgICAgICAv
LyBUaGF0IGZhaWxlZCBzbyB3ZSBsZXQgdGhlIGJsb2NrIGRpZS4gTm90aGluZyBpbnRlcmVzdGlu
ZyBzaG91bGQgaGF2ZSBiZWVuIGFkZGVkIHRvCkBAIC0xNjEwLDE0ICsxNzU0LDE3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBO
b2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENoZWNr
c0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPT0gMSkgeyAvLyBNYXRoLm1pbigpCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7IC8v
IE1hdGgubWluKHgpCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBOb2RlKiByZXN1
bHQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJl
Z2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIEVkZ2UocmVzdWx0
LCBOdW1iZXJVc2UpKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5k
KSwgcmVzdWx0KTsKQEAgLTE2MjUsNiArMTc3Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZU1pbk1heChpbnQgcmUKICAgICB9CiAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID09IDMpIHsgLy8gTWF0aC5taW4oeCwgeSkKKyAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3Jh
cGgob3AsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkp
LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNjMzLDExICsxNzgxLDEzIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChpbnQgcmUKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFu
ZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIHN3aXRj
aCAoaW50cmluc2ljKSB7CiAgICAgY2FzZSBBYnNJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5hYnMoKQorICAgICAgICAg
ICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE2NDUsNiArMTc5NSw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgaWYg
KCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIE5vZGUq
IG5vZGUgPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykpCiAgICAg
ICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvd0luREZHKTsKQEAgLTE2NTMs
MTUgKzE4MDQsMTYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAog
ICAgIH0KIAogICAgIGNhc2UgTWluSW50cmluc2ljOgotICAgICAgICByZXR1cm4gaGFuZGxlTWlu
TWF4KHJlc3VsdE9wZXJhbmQsIEFyaXRoTWluLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpOworICAgICAgICByZXR1cm4gaGFuZGxlTWluTWF4KHJlc3VsdE9wZXJh
bmQsIEFyaXRoTWluLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IGluc2VydENoZWNrcyk7CiAgICAgICAgIAogICAgIGNhc2UgTWF4SW50cmluc2ljOgotICAgICAg
ICByZXR1cm4gaGFuZGxlTWluTWF4KHJlc3VsdE9wZXJhbmQsIEFyaXRoTWF4LCByZWdpc3Rlck9m
ZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICByZXR1cm4gaGFuZGxl
TWluTWF4KHJlc3VsdE9wZXJhbmQsIEFyaXRoTWF4LCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIGluc2VydENoZWNrcyk7CiAgICAgICAgIAogICAgIGNhc2UgU3Fy
dEludHJpbnNpYzoKICAgICBjYXNlIENvc0ludHJpbnNpYzoKICAgICBjYXNlIFNpbkludHJpbnNp
YzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeworICAg
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50
TmFOKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE2NzEsMTQg
KzE4MjMsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAg
ICAgICAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIAorICAgICAgICAg
ICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRoU3FydCwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ29zSW50cmluc2ljOgorICAgICAgICAgICAgaW5z
ZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJh
bmQpLCBhZGRUb0dyYXBoKEFyaXRoQ29zLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBTaW5JbnRyaW5zaWM6CisgICAgICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFk
ZFRvR3JhcGgoQXJpdGhTaW4sIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdp
c3Rlck9mZnNldCkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIApA
QCAtMTcwMSw2ICsxODU2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGludAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAg
ICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBOb2RlKiBhcnJheVB1c2ggPSBhZGRUb0dy
YXBoKEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSks
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFycmF5UHVzaCk7
CiAgICAgICAgICAgICAKQEAgLTE3MjQsNiArMTg4MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6IHsKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgTm9kZSogYXJy
YXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVn
aXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCBhcnJheVBvcCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3MzgsNiAr
MTg5NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAg
ICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB0aGlzT3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVy
T2Zmc2V0KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgTm9kZSogY2hh
ckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJDb2RlQXQsIE9wSW5mbyhBcnJheU1vZGUoQXJy
YXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBnZXQoaW5kZXhPcGVyYW5k
KSk7CkBAIC0xNzUwLDYgKzE5MDgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRy
aW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9w
ZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAg
ICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQsIE9wSW5mbyhB
cnJheU1vZGUoQXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBnZXQo
aW5kZXhPcGVyYW5kKSk7CkBAIC0xNzYxLDYgKzE5MjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIGluc2VydENo
ZWNrcygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXhPcGVyYW5kID0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBOb2RlKiBjaGFy
Q29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nRnJvbUNoYXJDb2RlLCBnZXQoaW5kZXhPcGVyYW5kKSk7
CiAKQEAgLTE3NzMsNiArMTkzMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKICAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwRXhlYywgT3BJ
bmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwg
cmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3Bl
cmFuZCksIHJlZ0V4cEV4ZWMpOwogICAgICAgICAKQEAgLTE3ODMsNiArMTk0NCw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIAorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9
IGFkZFRvR3JhcGgoUmVnRXhwVGVzdCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlZ0V4cEV4ZWMpOwogICAgICAgICAK
QEAgLTE3OTIsNiArMTk1NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNp
YyhpbnQKICAgICBjYXNlIElNdWxJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICE9IDMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGluc2VydENoZWNrcygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbGVmdE9wZXJhbmQgPSB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciByaWdodE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgy
LCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIE5vZGUqIGxlZnQgPSBnZXQobGVmdE9wZXJhbmQp
OwpAQCAtMTgwMywyOSArMTk2NiwzNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRy
aW5zaWMoaW50CiAgICAgY2FzZSBGUm91bmRJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChBcml0aEZSb3Vu
ZCwgZ2V0KG9wZXJhbmQpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBERkdUcnVlSW50cmluc2ljOiB7CisgICAgICAgIGluc2VydENoZWNrcygpOwog
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBqc0NvbnN0YW50KGpz
Qm9vbGVhbih0cnVlKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgT1NSRXhpdEludHJpbnNpYzogeworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAg
ICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0
YW50VW5kZWZpbmVkKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgSXNGaW5hbFRpZXJJbnRyaW5zaWM6IHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksCiAgICAgICAgICAg
ICBqc0NvbnN0YW50KGpzQm9vbGVhbihPcHRpb25zOjp1c2VGVExKSVQoKSA/IGlzRlRMKG1fZ3Jh
cGgubV9wbGFuLm1vZGUpIDogdHJ1ZSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIFNldEludDMySGVhcFByZWRpY3Rpb25JbnRyaW5zaWM6IHsKKyAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAg
ICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCkBAIC0xODM4LDYgKzIwMDYsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgY2FzZSBGaWF0
SW50NTJJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGluc2VydENoZWNrcygp
OwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgaWYgKGVuYWJsZUludDUyKCkpCiAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBo
KEZpYXRJbnQ1MiwgZ2V0KG9wZXJhbmQpKSk7CkBAIC0xODUxLDkgKzIwMjAsMTAgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIH0KIH0KIAordGVtcGxhdGU8
dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVR5cGVk
QXJyYXlDb25zdHJ1Y3RvcigKICAgICBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlv
biogZnVuY3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKLSAgICBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCisgICAgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBDaGVja3NGdW5jdG9yJiBp
bnNlcnRDaGVja3MpCiB7CiAgICAgaWYgKCFpc1R5cGVkVmlldyh0eXBlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTg5NywxNSArMjA2NywxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVUeXBlZEFycmF5Q29uCiAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICE9IDIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIGluc2VydENoZWNr
cygpOwogICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksCiAgICAgICAgIGFk
ZFRvR3JhcGgoTmV3VHlwZWRBcnJheSwgT3BJbmZvKHR5cGUpLCBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgIHJldHVybiB0cnVlOwogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgIGludCByZXN1bHRPcGVyYW5kLCBJ
bnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgaW50IHJlZ2lzdGVyT2Zmc2V0LAotICAgIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQor
ICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpCiB7CiAgICAgLy8gSWYg
d2UgZXZlciBmaW5kIHRoYXQgd2UgaGF2ZSBhIGxvdCBvZiBpbnRlcm5hbCBmdW5jdGlvbnMgdGhh
dCB3ZSBzcGVjaWFsaXplIGZvciwKICAgICAvLyB0aGVuIHdlIHNob3VsZCBwcm9iYWJseSBoYXZl
IHNvbWUgc29ydCBvZiBoYXNodGFibGUgZGlzcGF0Y2gsIG9yIG1heWJlIGV2ZW4KQEAgLTE5MTgs
NiArMjA5MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAg
ICAgICAgaWYgKGZ1bmN0aW9uLT5nbG9iYWxPYmplY3QoKSAhPSBtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID09IDIpIHsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0T3BlcmFuZCksCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdBcnJheVdpdGhT
aXplLCBPcEluZm8oQXJyYXlXaXRoVW5kZWNpZGVkKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKQEAgLTE5MzIsNiArMjEwNSw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICB9CiAgICAgCiAgICAgaWYg
KGZ1bmN0aW9uLT5jbGFzc0luZm8oKSA9PSBTdHJpbmdDb25zdHJ1Y3Rvcjo6aW5mbygpKSB7Cisg
ICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAKICAgICAgICAgTm9kZSogcmVzdWx0Owog
ICAgICAgICAKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDw9IDEpCkBA
IC0xOTQ3LDExICsyMTIyLDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJ
bnRlcgogICAgIH0KICAgICAKICAgICBmb3IgKHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5cGVJ
bmRleCA8IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgKyt0eXBlSW5kZXgpIHsKLSAgICAg
ICAgYm9vbCByZXN1bHQgPSBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoCisgICAgICAgIHJl
dHVybiBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoCiAgICAgICAgICAgICByZXN1bHRPcGVy
YW5kLCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LAotICAgICAgICAgICAgaW5kZXhUb1R5cGVkQXJyYXlUeXBlKHR5cGVJbmRleCkpOwotICAgICAg
ICBpZiAocmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpbmRl
eFRvVHlwZWRBcnJheVR5cGUodHlwZUluZGV4KSwgaW5zZXJ0Q2hlY2tzKTsKICAgICB9CiAgICAg
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzExMyw0MyArMzI4Niw3MCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpbnQgdGhpc1JlZyA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgYXJndW1lbnRz
ID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBmaXJz
dEZyZWVSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZSgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYXJndW1lbnRzLCBhcmd1bWVudHMgPT0gbV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOwotICAg
ICAgICAgICAgQVNTRVJUKCFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFi
bGUoKS0+c2xvd0FyZ3VtZW50cygpKTsKLQotICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Fy
Z3VtZW50c05vdENyZWF0ZWQpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGlu
bGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBMZXQncyBjb21wdXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGgg
dGhlIGxhc3QgdXNlZCByZWdpc3RlciwgYW5kCi0gICAgICAgICAgICAvLyB0aGVuIGFkanVzdCBm
b3IgdGhlIHRoaW5ncyB3ZSB3YW50IGluIHRoZSBjYWxsIGZyYW1lLgotICAgICAgICAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gZmlyc3RGcmVlUmVnICsgMTsKLSAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0IC09IGFyZ0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1bWVudHMu
Ci0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJT
aXplOyAvLyBXZSB3aWxsIHByZXRlbmQgdG8gaGF2ZSBhIGNhbGwgZnJhbWUgaGVhZGVyLgorICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+
dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQorICAgICAgICAgICAgICAgICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xvd0FyZ3Vt
ZW50cygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpCisgICAgICAg
ICAgICAgICAgICAgICYmICFpbmxpbmVDYWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkKKyAgICAgICAg
ICAgICAgICAgICAgJiYgIWZpcnN0VmFyQXJnT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKKworICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6
ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIExldCdzIGNvbXB1dGUg
dGhlIHJlZ2lzdGVyIG9mZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVy
LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mg
d2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4KKyAgICAgICAgICAgICAgICAgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gZmlyc3RGcmVlUmVnICsgMTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQgLT0gYXJnQ291bnQ7IC8vIFdlIHdpbGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50
cy4KKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhl
YWRlci4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdu
bWVudCByaWdodC4KKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7
CisKKyAgICAgICAgICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0
IGhhdmUgc2V0IHVwIHRoZSBhcmd1bWVudHMuIEJ1dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAor
ICAgICAgICAgICAgICAgICAgICAvLyBsb29rIGxpa2UgdGhlIGJ5dGVjb2RlIGhhZCBkb25lIGl0
LgorICAgICAgICAgICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQg
KyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlz
UmVnKSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwg
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2Vk
U2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBoYW5kbGVDYWxsKAorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBDYWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xF
TkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVlLCBh
cmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAvLyBFbWl0IENhbGxGb3J3YXJkVmFyYXJncworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIG1lYW5zIHdlIGNhbm5vdCBpbmxpbmUgZm9yd2FyZGVkIHZhcmFy
Z3MgY2FsbHMgaW5zaWRlIGEgdmFyYXJncworICAgICAgICAgICAgICAgIC8vIGNhbGwgZnJhbWUu
IFdlIHdpbGwgcHJvYmFibHkgZml4IHRoYXQgb25jZSB3ZSBmaW5hbGx5IGdldCByaWQgb2YgdGhl
CisgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRzIG9iamVjdCBzcGVjaWFsLWNhc2luZy4KKyAg
ICAgICAgICAgICAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fY2FsbFZhcmFy
Z3NEYXRhLmFkZCgpOworICAgICAgICAgICAgICAgIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0g
Zmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9k
ZSogY2FsbCA9IGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgICAgIENhbGxGb3J3YXJkVmFy
YXJncywgT3BJbmZvKGRhdGEpLCBPcEluZm8oZ2V0UHJlZGljdGlvbigpKSwKKyAgICAgICAgICAg
ICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rl
cih0aGlzUmVnKSkpOworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWco
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CisgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gR2V0IHRoZSBhbGlnbm1lbnQgcmlnaHQuCi0gICAgICAgICAgICByZWdp
c3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCi0gICAgICAgICAgICAgICAg
c3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZz
ZXQpOwotCi0gICAgICAgICAgICBlbnN1cmVMb2NhbHMoCi0gICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBUaGUgYnl0ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4g
QnV0IHdlJ2xsIGRvIGl0IGFuZCBtYWtlIGl0Ci0gICAgICAgICAgICAvLyBsb29rIGxpa2UgdGhl
IGJ5dGVjb2RlIGhhZCBkb25lIGl0LgotICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJl
Z2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVhbFJlZ2lzdGVy
KHRoaXNSZWcpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCi0gICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGhhbmRsZUNhbGwoCi0gICAgICAgICAgICAgICAgcmVzdWx0
LCBDYWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAotICAg
ICAgICAgICAgICAgIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAg
ICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbFZhcmFyZ3MsIENv
ZGVGb3JDYWxsKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdz
OiB7CisgICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENv
bnN0cnVjdFZhcmFyZ3MsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfY29uc3RydWN0X3ZhcmFyZ3MpOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICAgICAgICAgIC8vIFN0YXRpY2FsbHkgc3BlY3VsYXRl
IGZvciBub3cuIEl0IG1ha2VzIHNlbnNlIHRvIGxldCBzcGVjdWxhdGUtb25seSBqbmVxX3B0cgog
ICAgICAgICAgICAgLy8gc3VwcG9ydCBzaW1tZXIgZm9yIGEgd2hpbGUgYmVmb3JlIG1ha2luZyBp
dCBtb3JlIGdlbmVyYWwsIHNpbmNlIGl0J3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05Niw2ICs5Niw4IEBAIGlubGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxv
Y2sqIGNvZGVCbG8KIAogQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBv
cGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiBwYykKIHsKKyAgICBV
TlVTRURfUEFSQU0oY29kZUJsb2NrKTsgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIHNvbWUgYnl0ZWNv
ZGUgcGFyc2luZy4gT3JkaW5hcmlseSBieXRlY29kZSBwYXJzaW5nIHJlcXVpcmVzIHRoZSBvd25p
bmcgQ29kZUJsb2NrLiBJdCdzIHNvcnQgb2Ygc3RyYW5nZSB0aGF0IHdlIGRvbid0IHVzZSBpdCBo
ZXJlIHJpZ2h0IG5vdy4KKyAgICAKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgY2FzZSBv
cF9lbnRlcjoKICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgpAQCAtMTgyLDYgKzE4NCw4IEBAIENh
cGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX3Rocm93
X3N0YXRpY19lcnJvcjoKICAgICBjYXNlIG9wX2NhbGw6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6
CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJn
czoKICAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6CiAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1l
bnRzOgogICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOgpAQCAtMjIzLDE0ICsyMjcsNiBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgICAgIHJldHVy
biBDYW5Db21waWxlQW5kSW5saW5lOwogICAgIH0KIAotICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OgotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgcGNbNF0udS5vcGVy
YW5kID09IGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQotICAgICAgICAg
ICAgJiYgIXBjWzZdLnUub3BlcmFuZCkKLSAgICAgICAgICAgIHJldHVybiBDYW5JbmxpbmU7Ci0g
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGFuZGxlIHRoaXMuCi0gICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjYKLSAgICAgICAgcmV0dXJu
IENhbm5vdENvbXBpbGU7Ci0KICAgICBjYXNlIG9wX25ld19yZWdleHA6IAogICAgIGNhc2Ugb3Bf
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CiAgICAgY2FzZSBvcF9uZXdfZnVuYzoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24g
MTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Niw5ICs4Niw3IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgZnVuY3Rpb25DYXBhYmlsaXQKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJC
b3VuZChDYW5Db21waWxlQW5kSW5saW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7CiAgICAg
aWYgKG1pZ2h0Q29tcGlsZSAmJiAhbWlnaHRJbmxpbmUpCiAgICAgICAgIHJldHVybiBsZWFzdFVw
cGVyQm91bmQoQ2FuQ29tcGlsZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwotICAgIGlmICgh
bWlnaHRDb21waWxlICYmIG1pZ2h0SW5saW5lKQotICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJv
dW5kKENhbklubGluZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwotICAgIGlmICghbWlnaHRD
b21waWxlICYmICFtaWdodElubGluZSkKKyAgICBpZiAoIW1pZ2h0Q29tcGlsZSkKICAgICAgICAg
cmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDYgKzM2NSw5
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENv
bnN0cnVjdDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6
CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAg
ICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKICAgICBjYXNl
IEluOgogICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOgpAQCAtNDAxLDYgKzQwNCwx
MyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUt
PmxvY2FsKCkpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICAvLyBUaGlzIGFjdHVhbGx5IHdy
aXRlcyB0byBsb2NhbCB2YXJpYWJsZXMgYXMgd2VsbC4gQnV0IHdoZW4gaXQgcmVhZHMgdGhlIGFy
cmF5LCBpdCBkb2VzCisgICAgICAgIC8vIHNvIGluIGEgd2F5IHRoYXQgbWF5IHRyaWdnZXIgZ2V0
dGVycyBvciB2YXJpb3VzIHRyYXBzLgorICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3Jp
dGUoV29ybGQpOworICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxV
bmxpbmtlZDoKICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxp
bmtlZExvY2FsKCkpKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJz
dHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSksIG5vZGUpOwpAQCAt
ODgxLDcgKzg5MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIERGR19DUkFTSChncmFwaCwgbm9kZSwgdG9DU3RyaW5nKCJVbnJlY29nbml6
ZWQgbm9kZSB0eXBlOiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUtPm9wKCkpKS5kYXRhKCkpOwogfQog
CiBjbGFzcyBOb09wQ2xvYmJlcml6ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTIsNyArMjkyLDYgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBlbnVtIENhcGFiaWxpdHlMZXZlbCB7CiAgICAgQ2Fu
bm90Q29tcGlsZSwKLSAgICBDYW5JbmxpbmUsCiAgICAgQ2FuQ29tcGlsZSwKICAgICBDYW5Db21w
aWxlQW5kSW5saW5lLAogICAgIENhcGFiaWxpdHlMZXZlbE5vdFNldApAQCAtMzEyLDcgKzMxMSw2
IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoQ2FwYWJpbGl0eUxldmVsIGwKIGlubGluZSBib29s
IGNhbklubGluZShDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwpCiB7CiAgICAgc3dpdGNoIChsZXZlbCkg
ewotICAgIGNhc2UgQ2FuSW5saW5lOgogICAgIGNhc2UgQ2FuQ29tcGlsZUFuZElubGluZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTMyNSwxNCArMzIzLDYgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBsZWFzdFVwcGVyQm91bmQoQwogICAgIHN3aXRjaCAoYSkgewog
ICAgIGNhc2UgQ2Fubm90Q29tcGlsZToKICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0g
ICAgY2FzZSBDYW5JbmxpbmU6Ci0gICAgICAgIHN3aXRjaCAoYikgewotICAgICAgICBjYXNlIENh
bklubGluZToKLSAgICAgICAgY2FzZSBDYW5Db21waWxlQW5kSW5saW5lOgotICAgICAgICAgICAg
cmV0dXJuIENhbklubGluZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBD
YW5ub3RDb21waWxlOwotICAgICAgICB9CiAgICAgY2FzZSBDYW5Db21waWxlOgogICAgICAgICBz
d2l0Y2ggKGIpIHsKICAgICAgICAgY2FzZSBDYW5Db21waWxlOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiAr
MTE3LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNl
IENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Cisg
ICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIE5h
dGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBCcmVha3BvaW50
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3
OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjMxLDYgKzEyMzEsMzYgQEAgdm9pZCBHcmFwaDo6aGFuZGxlQXNzZXJ0aW9u
RmFpbHVyZSgKICAgICBjcmFzaCgqdGhpcywgdG9DU3RyaW5nKCJXaGlsZSBoYW5kbGluZyBibG9j
ayAiLCBwb2ludGVyRHVtcChibG9jayksICJcblxuIiksIGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBh
c3NlcnRpb24pOwogfQogCitWYWx1ZVByb2ZpbGUqIEdyYXBoOjp2YWx1ZVByb2ZpbGVGb3IoTm9k
ZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICBpZiAobm9kZS0+b3AoKSA9
PSBHZXRBcmd1bWVudCkgeworICAgICAgICBpZiAobm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkp
CisgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQobm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgICAgIAorICAgIGlmIChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKKyAgICAg
ICAgaWYgKG1fZm9ybSA9PSBTU0EpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgaWYgKCFub2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQo
KTsKKyAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IG1fYXJndW1lbnRz
W2FyZ3VtZW50XS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3Vt
ZW50KGFyZ3VtZW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmIChub2RlLT5oYXNIZWFwUHJl
ZGljdGlvbigpKQorICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcyLDMyICs0
NzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2stPnVuY2hlY2tl
ZEFjdGl2YXRpb25SZWdpc3RlcigpOwogICAgIH0KICAgICAKLSAgICBWYWx1ZVByb2ZpbGUqIHZh
bHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QXJndW1lbnQpCi0gICAgICAgICAg
ICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQobm9kZS0+bG9j
YWwoKS50b0FyZ3VtZW50KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0xvY2Fs
KCp0aGlzKSkgewotICAgICAgICAgICAgaWYgKG1fZm9ybSA9PSBTU0EpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0g
bm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkgIT0gbV9hcmd1bWVudHNbYXJndW1lbnRdLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBwcm9m
aWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQotICAgICAg
ICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAg
IHJldHVybiAwOwotICAgIH0KKyAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2Rl
KiBub2RlKTsKICAgICAKICAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkKICAgICB7CkBAIC04MjIsNiArNzk3
LDggQEAgcHVibGljOgogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aUdldEJ5
T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQdXRCeU9m
ZnNldERhdGE7CiAgICAgQmFnPE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1fb2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YTsKKyAgICBCYWc8Q2FsbFZhcmFyZ3NEYXRhPiBtX2NhbGxWYXJhcmdz
RGF0YTsKKyAgICBCYWc8TG9hZFZhcmFyZ3NEYXRhPiBtX2xvYWRWYXJhcmdzRGF0YTsKICAgICBW
ZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+
IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBib29sIG1faGFzQXJndW1lbnRzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE3
OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGls
ZUV4Y2VwdGlvbkhhbmRsZQogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNh
bGxlckZyYW1lIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0
aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMiht
X2dyYXBoLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2
KQogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGUgY2FsbCBhYnN0cmFjdGlvbiwgYnV0
IHRoaXMgaXMgY3VycmVudGx5IGluIHRoZSBTcGVjdWxhdGl2ZUpJVCBsYXllciEKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4
MywyMCBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7CiB9
OwogCitzdHJ1Y3QgQ2FsbFZhcmFyZ3NEYXRhIHsKKyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQ7
Cit9OworCitzdHJ1Y3QgTG9hZFZhcmFyZ3NEYXRhIHsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Rh
cnQ7IC8vIExvY2FsIGZvciB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y291bnQ7IC8vIExvY2FsIGZvciB0aGUgY291bnQuCisgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hp
bmVTdGFydDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUNvdW50OworICAgIHVuc2lnbmVk
IG9mZnNldDsgLy8gV2hpY2ggYXJyYXkgZWxlbWVudCB0byBzdGFydCB3aXRoLiBVc3VhbGx5IHRo
aXMgaXMgMC4KKyAgICB1bnNpZ25lZCBtYW5kYXRvcnlNaW5pbXVtOyAvLyBUaGUgbnVtYmVyIG9m
IGVsZW1lbnRzIG9uIHRoZSBzdGFjayB0aGF0IG11c3QgYmUgaW5pdGlhbGl6ZWQ7IGlmIHRoZSBh
cnJheSBpcyB0b28gc2hvcnQgdGhlbiB0aGUgbWlzc2luZyBlbGVtZW50cyBtdXN0IGdldCB1bmRl
ZmluZWQuCisgICAgdW5zaWduZWQgbGltaXQ7IC8vIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRz
IHRvIGxvYWQuCit9OworCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGltbWVkaWF0
ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBpbW1l
ZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEgc3Ry
dWN0dXJlIC0gCiAvLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikg
ZnJvbSBhIE5vZGUqLgpAQCAtODg4LDYgKzkwMiwzNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obV9vcEluZm8pOwog
ICAgIH0KICAgICAKKyAgICBib29sIGhhc0NhbGxWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIENhbGxWYXJhcmdzRGF0YSog
Y2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNDYWxsVmFyYXJnc0Rh
dGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Q2FsbFZhcmFyZ3NEYXRhKj4obV9v
cEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc0xvYWRWYXJhcmdzRGF0YSgpCisgICAg
eworICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJnczsKKyAgICB9CisgICAgCisgICAg
TG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGhhc0xvYWRWYXJhcmdzRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxMb2Fk
VmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzUmVzdWx0
KCkKICAgICB7CiAgICAgICAgIHJldHVybiAhIXJlc3VsdCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiAr
MTQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIHRoaXMgbXVz
dCBiZSB0aGUgZGlyZWN0bHkgc3Vic2VxdWVudCBwcm9wZXJ0eSBwdXQuIE5vdGUgdGhhdCBQdXRC
eVZhbCAqL1wKICAgICAvKiBvcGNvZGVzIHVzZSBWYXJBcmdzIGJlYXVzZSB0aGV5IG1heSBoYXZl
IHVwIHRvIDQgY2hpbGRyZW4uICovXAogICAgIG1hY3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oUHV0QnlWYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlSGFzVmFyQXJncykgXApAQCAtMjE3LDYgKzIxOCw5IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBDYWxscy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFj
cm8oQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1Zh
ckFyZ3MpIFwKKyAgICBtYWNybyhDYWxsVmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAorICAgIG1hY3JvKENhbGxGb3J3YXJkVmFyYXJncywgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENvbnN0cnVjdFZhcmFyZ3MsIE5vZGVSZXN1
bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOYXRpdmVDYWxsLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhO
YXRpdmVDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFz
VmFyQXJncykgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNp
b24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSwxNyBAQCB2
b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFy
YXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPQorICAgICAgICAgICAgQXZh
aWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgeworICAgICAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+
c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVz
aGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQu
b2Zmc2V0KCkgKyBpKSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMTgsNiArMTAxOCwyNyBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoCiAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUs
ICJFeGVjdXRlZCBOb3RpZnlXcml0ZSIpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRBcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50
cyk7CisgICAgCisgICAgcmV0dXJuIHNpemVPZlZhcmFyZ3MoZXhlYywgYXJndW1lbnRzLCBmaXJz
dFZhckFyZ09mZnNldCk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFy
YXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBp
bnQzMl90IG1hbmRhdG9yeU1pbmltdW0pCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBh
cmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CisgICAgCisgICAg
bG9hZFZhcmFyZ3MoZXhlYywgVmlydHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVudERlc3QpLCBhcmd1
bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKGludDMyX3QgaSA9IGxlbmd0
aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1l
bnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworfQorCiBkb3VibGUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQogewogICAgIHJldHVybiBm
bW9kKGEsIGIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNSw2ICsxMjUsOCBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzCiBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0
cmluZyopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0
ZSosIFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVuY29kZWRKU1ZhbHVlKTsKK2ludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiwgaW50MzJfdCBmaXJzdEVsZW1l
bnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90
IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKTsKIAogaW50NjRfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbnZlcnRCb3hlZERvdWJsZVRvSW50NTIoRW5jb2RlZEpTVmFsdWUpOwog
aW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnREb3VibGVUb0ludDUyKGRvdWJs
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2Ji
ZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMywxMSArMTMzLDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1
YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAg
ICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBK
U1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9p
ZCB3cml0ZVRvcCgpCiAgICAgeworICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IExvYWRWYXJh
cmdzKSB7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugbm90ZSB0aGUgd3JpdGVzIHRvIHRo
ZSBsb2NhbHMgdGhhdCB3aWxsIHN0b3JlIHRoZSBhcnJheSBlbGVtZW50cyBhbmQKKyAgICAgICAg
ICAgIC8vIGNvdW50LgorICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgIG1fd3JpdGUoZGF0YS0+Y291bnQpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAg
ICAgICAgICAgbV93cml0ZShWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBp
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBu
ZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIENhbGxGb3J3YXJkVmFyYXJncywgc2luY2Ug
aXQgcmVhZHMKKyAgICAgICAgLy8gb3VyIGFyZ3VtZW50cyB0aGUgc2FtZSB3YXkgdGhhdCBhbnkg
ZWZmZWN0ZnVsIHRoaW5nIG1pZ2h0LgorICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGgubV9j
b2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKICAgICAg
ICAgICAgICAgICBtX3dyaXRlKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lv
biAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xODksNiArMTg5LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0
ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBj
YXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAg
ICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICBjYXNl
IENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0Fy
cmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTc5OTcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2lu
Y2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgi
CiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVy
TG9nLmgiCiAKQEAgLTYyNCwzOCArNjI1LDE2OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGw7Ci0gICAgaWYgKCFp
c0NhbGwpCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3Ao
KSA9PSBDb25zdHJ1Y3QpOwotICAgIAotICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlz
IGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQotICAgIC8v
IGZvciBpdC4KLSAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBpc0NhbGwgPyAwIDogMTsKKyAg
ICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAgIGJvb2wgaXNDYWxsOworICAg
IGJvb2wgaXNWYXJhcmdzOworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgQ2Fs
bDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGw7CisgICAgICAgIGlzQ2Fs
bCA9IHRydWU7CisgICAgICAgIGlzVmFyYXJncyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0
cnVjdDsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAgIGlzVmFyYXJncyA9IGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFy
Z3M7CisgICAgICAgIGlzQ2FsbCA9IHRydWU7CisgICAgICAgIGlzVmFyYXJncyA9IHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgY2FsbFR5
cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3M7CisgICAgICAgIGlzQ2FsbCA9IGZh
bHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgImJhZCBub2RlIHR5
cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9q
aXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKICAgICAKLSAgICBDYWxsTGlua0luZm86OkNhbGxU
eXBlIGNhbGxUeXBlID0gaXNDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZv
OjpDb25zdHJ1Y3Q7CisgICAgLy8gR290dGEgbG9hZCB0aGUgYXJndW1lbnRzIHNvbWVob3cuIFZh
cmFyZ3MgaXMgdHJpY2tpZXIuCisgICAgaWYgKGlzVmFyYXJncykgeworICAgICAgICAvLyAxKSBn
ZXQgdGhlIGFyZ3VtZW50cworICAgICAgICAvLyAyKSBmbHVzaCByZWdpc3RlcnMKKyAgICAgICAg
Ly8gMykgc2V0IHVwIHRoZSBjYWxsIGZyYW1lCisgICAgICAgIC8vIDQpIGdldCB0aGUgY2FsbGVl
IGFuZCAidGhpcyIgYW5kIGhhbmRsZSB0aGVtCisgICAgICAgIC8vIDUpIGZsdXNoIHJlZ2lzdGVy
cyBhZ2FpbgorICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+
Y2FsbFZhcmFyZ3NEYXRhKCk7CisKKyAgICAgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIxOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjI7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8gV2UgYXZvaWQgY2FsbGlu
ZyBmbHVzaFJlZ2lzdGVycygpIGluc2lkZSB0aGUgY29udHJvbCBmbG93IG9mIENhbGxGb3J3YXJk
VmFyYXJncy4KKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGF1dG8gbG9hZEFyZ3VtZW50c0dQUiA9IFsmXSAoR1BSUmVnIHJlc2VydmVk
R1BSKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3Mp
IHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2Ny
YXRjaEdQUihyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KAorICAg
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRHUFIgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgbG9jayhyZXNlcnZlZEdQUik7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
ICAgICAgICAgICAgIHVubG9jayhyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2Ny
YXRjaEdQUjEgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNHUFIsIHJl
c2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIyID0gSklUQ29tcGlsZXI6OnNlbGVj
dFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgcmVzZXJ2ZWRHUFIpOworICAg
ICAgICAgICAgc2NyYXRjaEdQUjMgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1
bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgcmVzZXJ2ZWRHUFIpOworICAgICAg
ICB9OworICAgICAgICAKKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihJbnZhbGlkR1BSUmVnKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGUgd2hvbGUgcmVn
aXN0ZXIgZmlsZSB0byBvdXJzZWx2ZXMsIGFuZCBhcmd1bWVudHNHUFIgaGFzIHRoZQorICAgICAg
ICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFNlbGVjdCBzb21lIHNjcmF0Y2ggcmVnaXN0ZXJzLgor
ICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lsbCB1c2Ugc2NyYXRjaEdQUjIgdG8gcG9pbnQgdG8g
b3VyIHN0YWNrIGZyYW1lLgorCisgICAgICAgIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzID0g
bV9qaXQuZ3JhcGgoKS5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgICAgIAorICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBoYXZlQXJndW1lbnRzOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFy
YXJncykgeworICAgICAgICAgICAgLy8gRG8gdGhlIGhvcnJpZmljIGZvby5hcHBseSh0aGlzLCBh
cmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBkbyB0aGlzIG9w
dGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBieSB0ZXN0
aW5nIHRoZQorICAgICAgICAgICAgLy8gYXJndW1lbnRzIHJlZ2lzdGVyLiBUaGlzIHdpbGwgaGFw
cGVuIG9uY2Ugd2UgZ2V0IHJpZCBvZiB0aGUgYXJndW1lbnRzIGxhenkgY3JlYXRpb24gYW5kCisg
ICAgICAgICAgICAvLyBsYXp5IHRlYXItb2ZmLgorICAgICAgICAgICAgCisgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmd1bWVudHNHUFIp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIobnVt
VXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBlbWl0U2V0dXBWYXJh
cmdzRnJhbWVGYXN0Q2FzZShtX2ppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUs
IGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgICAgICAgICByZXN1bHRH
UFIgPSBzY3JhdGNoR1BSMjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGF2ZUFyZ3VtZW50
cyA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVz
aGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gUmlnaHQgbm93LCBhcmd1bWVudHMgaXMgaW4g
YXJndW1lbnRzR1BSIGFuZCB0aGUgcmVnaXN0ZXIgZmlsZSBpcyBmbHVzaGVkLgorICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIG51bVVzZWRTdGFja1Nsb3RzLCBkYXRhLT5maXJzdFZh
ckFyZ09mZnNldCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgd2UgaGF2ZSB0aGUgYXJndW1l
bnQgY291bnQgb2YgdGhlIGNhbGxlZSBmcmFtZSwgYnV0IHdlJ3ZlIGxvc3QgdGhlIGFyZ3VtZW50
cyBvcGVyYW5kLgorICAgICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQg
d2hpbGUgcHJlc2VydmluZyB0aGUgY2FsbGVlIGZyYW1lLgorICAgICAgICBsb2FkQXJndW1lbnRz
R1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIGVtaXRTZXRW
YXJhcmdzRnJhbWUobV9qaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBmYWxzZSwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMigt
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCBzY3JhdGNoR1BSMSwgSklU
Q29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBzY3JhdGNoR1BSMSwgYXJndW1lbnRzR1BSLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5r
KCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0aGUgYXJndW1lbnRzIGFycmF5IGFueW1vcmUuCisgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoaXNDYWxsKSB7CisgICAgICAgICAgICAvLyBOb3cgc2V0IHVw
IHRoZSAidGhpcyIgYXJndW1lbnQuCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzQXJn
dW1lbnQodGhpcywgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MgPyBub2RlLT5jaGls
ZDIoKSA6IG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzQXJndW1lbnRH
UFIgPSB0aGlzQXJndW1lbnQuZ3ByKCk7CisgICAgICAgICAgICB0aGlzQXJndW1lbnQudXNlKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQodGhpc0FyZ3VtZW50R1BS
LCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlz
IG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQorICAgICAgICAvLyBmb3IgaXQu
CisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOwogICAgIAot
ICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2Rl
LT5maXJzdENoaWxkKCldOwotICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hp
bGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlCi0gICAg
Ly8gYXJndW1lbnRzLgotICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4o
KSAtIDE7CisgICAgICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMg
dGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlCisgICAgICAgIC8v
IGFyZ3VtZW50cy4KKyAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJl
bigpIC0gMTsKICAgICAKLSAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRo
aXNBcmd1bWVudDsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlU
aGlzQXJndW1lbnQ7CiAgICAgCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVQYXlsb2FkU2xv
dChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3Jh
cGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwotICAgICAgICBHUFJSZWcgYXJn
R1BSID0gYXJnLmdwcigpOwotICAgICAgICB1c2UoYXJnRWRnZSk7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7CisgICAgICAgICAgICBFZGdlIGFyZ0Vk
Z2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsg
MSArIGldOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwor
ICAgICAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAgICAgICAgIHVzZShh
cmdFZGdlKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BSLCBtX2ppdC5j
YWxsZWVBcmd1bWVudFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KGFyZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xvdChpICsg
ZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEpTVmFsdWVPcGVy
YW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2Fs
bGVlLmdwcigpOwotICAgIHVzZShjYWxsZWVFZGdlKTsKLSAgICBtX2ppdC5zdG9yZTY0KGNhbGxl
ZUdQUiwgbV9qaXQuY2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlZSkpOworICAgIGNhbGxl
ZS51c2UoKTsKKyAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6OmNhbGxl
ZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKICAgICAKICAgICBmbHVzaFJlZ2lzdGVycygp
OwogCkBAIC02OTIsNiArODI0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICBjYWxsTGlua0luZm8tPmNhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICAK
ICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBj
YWxsTGlua0luZm8pOworICAgIAorICAgIC8vIElmIHdlIHdlcmUgdmFyYXJncywgdGhlbiBhZnRl
ciB0aGUgY2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3VyIHN0YWNrIHBv
aW50ZXIuCisgICAgaWYgKGlzVmFyYXJncykKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJ
bW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5yZWFjaGFibGUgW1tjbGFu
Zzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYgYW55IHRlbXBsYXRlIGV4
cGFuc2lvbiB1c2VzIGl0CkBAIC00MjMxLDkgKzQzNjcsNTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3Ry
dWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6
CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAg
IAorICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICB7CisgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzR1BS
LCBkYXRhLT5vZmZzZXQpOworICAgICAgICAKKyAgICAgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50
cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1
bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9Cisg
ICAgICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIAorICAgICAg
ICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0
ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCisgICAgICAgIC8vIGZyb20g
dGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3Jv
bmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVz
dCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9j
YWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4CisgICAgICAg
IAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93
LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGlt
aXQpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAg
ICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIGRhdGEt
Pm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzR1BSLCBkYXRhLT5vZmZzZXQsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgCisg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAog
ICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICBERkdfQVNTRVJUKG1faml0Lmdy
YXBoKCksIG5vZGUsICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgCkBAIC00MzM4LDkgKzQ1MTcsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNo
aW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAh
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVz
dWx0R1BSKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIp
OworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAg
ICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKAorICAgICAgICAgICAgICAgIFRydXN0
ZWRJbW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpIC0gMSksCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwor
ICAgICAgICB9CiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTQzNTQsMjAgKzQ1NDQsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IoCiAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAg
ICAgbV9qaXQubW92ZSgKICAgICAgICAgICAgICAgICBJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKSAtIDEpKSksCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0
YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
cjsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1
bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIC8vIEZJWE1FOiB0aGUgc2xvdyBwYXRoIGdlbmVyYXRvciBzaG91bGQgcGVy
Zm9ybSBhIGZvcndhcmQgc3BlY3VsYXRpb24gdGhhdCB0aGUKLSAgICAgICAgLy8gcmVzdWx0IGlz
IGFuIGludGVnZXIuIEZvciBub3cgd2UgcG9zdHBvbmUgdGhlIHNwZWN1bGF0aW9uIGJ5IGhhdmlu
ZyB0aGlzIHJldHVybgotICAgICAgICAvLyBhIEpTVmFsdWUuCi0gICAgICAgIAogICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAg
ICAgICAgICBjcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgsIHJlc3Vs
dEdQUiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NzgsNyAr
NTc4LDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0jaWZuZGVmIE5ERUJVRwogICAg
IC8vIFVzZWQgdG8gQVNTRVJUIGZsdXNoUmVnaXN0ZXJzKCkgaGFzIGJlZW4gY2FsbGVkIHByaW9y
IHRvCiAgICAgLy8gY2FsbGluZyBvdXQgZnJvbSBKSVQgY29kZSB0byBhIEMgaGVscGVyIGZ1bmN0
aW9uLgogICAgIGJvb2wgaXNGbHVzaGVkKCkKQEAgLTU5Myw3ICs1OTIsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotI2VuZGlmCiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQgdmFsdWVPZkpTQ29u
c3RhbnRBc0ltbTY0KE5vZGUqIG5vZGUpCkBAIC0xMTA5LDYgKzExMDcsMjYgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJ
VE9wZXJhdGlvbl9FSlpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHVu
c2lnbmVkIGFyZzIsIHVuc2lnbmVkIGFyZzMpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbTMyKGFyZzIpLCBUcnVzdGVkSW1t
MzIoYXJnMykpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oRl9KSVRPcGVyYXRpb25fRUZKWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIHVuc2lnbmVkIGFyZzMsIEdQUlJlZyBhcmc0
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIsIFRydXN0ZWRJbW0zMihhcmczKSwgYXJnNCk7CisgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSlog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQgYXJnMikKKyAg
ICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVz
dGVkSW1tMzIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVpKWlpaIG9wZXJhdGlvbiwgdW5z
aWduZWQgYXJnMSwgR1BSUmVnIGFyZzIsIHVuc2lnbmVkIGFyZzMsIEdQUlJlZyBhcmc0LCB1bnNp
Z25lZCBhcmc1KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW0zMihhcmcxKSwgYXJnMiwgVHJ1c3RlZEltbTMyKGFyZzMpLCBhcmc0LCBU
cnVzdGVkSW1tMzIoYXJnNSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhvcGVyYXRpb24pOworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZT4KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEZ1bmN0aW9uVHlw
ZSBvcGVyYXRpb24sIE5vUmVzdWx0VGFnKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgQml0VmVjdG9yIHVzZWRMb2Nh
bHM7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFy
ZSB1c2VkIGZyb20gSVIuCi0gICAgICAgIGJvb2wgaGFzR2V0TG9jYWxVbmxpbmtlZCA9IGZhbHNl
OworICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IGZhbHNlOwogICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC04MSw3ICs4MSwyMiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChvcGVyYW5kLnRvTG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0dldExv
Y2FsVW5saW5rZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBoYXNOb2Rlc1RoYXROZWVk
Rml4dXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFy
Z3M6IHsKKyAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5p
c0xvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5j
b3VudC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNM
b2NhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJl
bGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGFzc2lnbm1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZp
cnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNM
b2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEt
PmxpbWl0OyBpLS07KSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNl
dChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOwor
ICAgICAgICAgICAgICAgICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4K
KyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAKQEAgLTExMyw2ICsxMjgsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgdXNlZExvY2Fs
cy5zZXQoYXJndW1lbnRzUmVnaXN0ZXIudG9Mb2NhbCgpKTsKICAgICAgICAgICAgIHVzZWRMb2Nh
bHMuc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikudG9M
b2NhbCgpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVn
aXN0ZXIoCisgICAgICAgICAgICAgICAgICAgIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBhcmd1bWVudC0tID4gMTspIHsKICAgICAgICAgICAg
ICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAgICAgICAg
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSArCkBAIC0xNDgs
MjQgKzE2OCwyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltsb2NhbF0g
PT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bdmFyaWFibGUtPmxvY2FsKCkudG9Mb2Nh
bCgpXSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24oYWxs
b2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBpZiAoY29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0g
ICAgICAgICAgICAgICAgYWxsb2NhdGlvbltjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIo
KS50b0xvY2FsKCldKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdp
c3RlciA9CisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5h
cmd1bWVudHNSZWdpc3RlcigpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKAotICAgICAg
ICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bCi0gICAgICAgICAg
ICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKS50b0xvY2FsKCldKQorICAg
ICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0
ZXIoY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKQogICAgICAgICAgICAgICAgID09
IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpOwogICAgICAg
ICAgICAgY29kZUJsb2NrKCktPnNldEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVy
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT51bmNoZWNr
ZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIGNvZGVCbG9j
aygpLT5zZXRBY3RpdmF0aW9uUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoYWxsb2NhdGlvbltjb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCku
dG9Mb2NhbCgpXSkpOworICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxv
Y2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gVGhpcyByZWdpc3RlciBpcyBuZXZlciB2YWxpZCBmb3IgREZHIGNvZGUgYmxvY2tzLgpA
QCAtMTc2LDE1ICsxOTMsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS0+dXNlc0FyZ3VtZW50
cygpKSB7Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3Rl
ciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0
aW9uW21fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKS50b0xvY2Fs
KCldKTsKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVy
ID0gYXNzaWduKAorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBtX2dyYXBoLmFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpOwogCiAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGFsbG9jYXRpb25bdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKS50
b0xvY2FsKCldKQorICAgICAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgdW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5l
Q2FsbEZyYW1lKSkpCiAgICAgICAgICAgICAgICAgICAgID09IHVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKSB7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
UmVnaXN0ZXIgPSBhc3NpZ24oCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIFZpcnR1
YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBh
cmd1bWVudC0tID4gMTspIHsKICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBwb3Np
dGlvbiA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9uc1sKICAgICAgICAgICAgICAgICAgICAg
ZGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQgKyBhcmd1bWVudF07CkBAIC0yMjcsOSArMjQ4LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cGFyYW1ldGVyQ291
bnQoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHN5bWJvbFRhYmxlLT5wYXJh
bWV0ZXJDb3VudCgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dBcmd1bWVu
dHNbaV0gPSBzbG93QXJndW1lbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKHNsb3dBcmd1bWVudHNbaV0uaW5kZXgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChh
bGxvY2F0aW9uW3JlZy50b0xvY2FsKCldKS5vZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
bmV3U2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IGFzc2lnbihhbGxvY2F0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIoc2xvd0FyZ3VtZW50c1tpXS5pbmRleCkpLm9mZnNldCgpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zbG93QXJndW1lbnRz
ID0gV1RGOjptb3ZlKG5ld1Nsb3dBcmd1bWVudHMpOwpAQCAtMjM3LDcgKzI1Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRml4IEdldExvY2FsVW5saW5rZWQn
cyB2YXJpYWJsZSByZWZlcmVuY2VzLgotICAgICAgICBpZiAoaGFzR2V0TG9jYWxVbmxpbmtlZCkg
eworICAgICAgICBpZiAoaGFzTm9kZXNUaGF0TmVlZEZpeHVwKSB7CiAgICAgICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgt
LTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKQEAgLTI0NiwxMCArMjY1
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnVubGlua2VkTG9j
YWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoYWxsb2NhdGlvbltvcGVyYW5kLnRvTG9jYWwoKV0pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwob3BlcmFuZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1hY2hpbmVMb2NhbChhc3NpZ24oYWxsb2NhdGlv
biwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9jYXRp
b24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVT
dGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgCkBAIC0yNjIsNiArMjg1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXNzaWdu
KGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlciBzcmMp
CisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gc3JjOworICAgICAgICBp
ZiAocmVzdWx0LmlzTG9jYWwoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9u
ID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgpXTsKKyAgICAgICAgICAgIGlmIChteUFsbG9j
YXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lz
dGVyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KIH07CiAKIGJvb2wgcGVyZm9ybVN0YWNrTGF5b3V0KEdyYXBoJiBn
cmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1NSw2ICs0NTUsMTQgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBh
Y3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZlIGEgc2Vjb25kIEdldExvY2FsIGZvciBh
IGxvY2FsIGluIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlmIHdlIGhh
ZCBhIFNldEFyZ3VtZW50IGZvciB0aGF0IGxvY2FsLgorICAgICAgICAgICAgICAgICAgICBnZXRM
b2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OworICAgICAgICAg
ICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90
U2V0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkocmV2aXNpb24g
MTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDkgQEAgc3RhdGljIGlubGluZSBMVHlwZSBzdHJ1
Y3RUeXBlKExDb250ZXh0IAogICAgIHJldHVybiBzdHJ1Y3RUeXBlKGNvbnRleHQsIGVsZW1lbnRz
LCAyLCBwYWNraW5nKTsKIH0KIAorLy8gRklYTUU6IE1ha2UgdGhlIFZhcmlhZGljaXR5IGFyZ3Vt
ZW50IG5vdCBiZSB0aGUgbGFzdCBhcmd1bWVudCB0byBmdW5jdGlvblR5cGUoKSBzbyB0aGF0IHRo
aXMgZnVuY3Rpb24KKy8vIGNhbiB1c2UgQysrMTEgdmFyaWFkaWMgdGVtcGxhdGVzCisvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTc1CiBlbnVtIFZhcmlhZGlj
aXR5IHsgTm90VmFyaWFkaWMsIFZhcmlhZGljIH07CiBzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0
aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBjb25zdCBMVHlwZSogcGFyYW1UeXBlcywgdW5zaWdu
ZWQgcGFyYW1Db3VudCwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkpCiB7CkBAIC0xMTAsNiArMTEz
LDE2IEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHIKICAgICBMVHlw
ZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCB9OwogICAg
IHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgNCwgdmFyaWFkaWNp
dHkpOwogfQorc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlw
ZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFtMywgTFR5cGUgcGFyYW00
LCBMVHlwZSBwYXJhbTUsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCit7
CisgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJh
bTQsIHBhcmFtNSB9OworICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1U
eXBlcywgNSwgdmFyaWFkaWNpdHkpOworfQorc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5
cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBh
cmFtMywgTFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIExUeXBlIHBhcmFtNiwgVmFyaWFkaWNp
dHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKK3sKKyAgICBMVHlwZSBwYXJhbVR5cGVzW10g
PSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01LCBwYXJhbTYgfTsKKyAg
ICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDYsIHZhcmlhZGlj
aXR5KTsKK30KIAogc3RhdGljIGlubGluZSBMVHlwZSB0eXBlT2YoTFZhbHVlIHZhbHVlKSB7IHJl
dHVybiBsbHZtLT5UeXBlT2YodmFsdWUpOyB9CiAKQEAgLTI5OCw0MSArMzExLDEzIEBAIHN0YXRp
YyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIHsKICAgICByZXR1cm4gYnVpbGRD
YWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCAmYXJnMSwgMSk7CiB9Ci1zdGF0aWMgaW5saW5lIExWYWx1
ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJn
MSwgTFZhbHVlIGFyZzIpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiB9Owot
ICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDIpOwotfQotc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5j
dGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMykKLXsKLSAgICBMVmFs
dWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczIH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChi
dWlsZGVyLCBmdW5jdGlvbiwgYXJncywgMyk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZh
bHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkKK3RlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3M+CitMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlv
biwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykKIHsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBh
cmcxLCBhcmcyLCBhcmczLCBhcmc0IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBm
dW5jdGlvbiwgYXJncywgNCk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1
aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIs
IExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUpCi17Ci0gICAgTFZhbHVlIGFy
Z3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSB9OwotICAgIHJldHVybiBidWls
ZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDUpOwotfQotc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFy
ZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBM
VmFsdWUgYXJnNikKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBh
cmc0LCBhcmc1LCBhcmc2IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlv
biwgYXJncywgNik7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIg
YnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1
ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBMVmFsdWUgYXJn
NykKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1
LCBhcmc2LCBhcmc3IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwg
YXJncywgNyk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVp
bGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBh
cmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBMVmFsdWUgYXJnNywg
TFZhbHVlIGFyZzgpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywg
YXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVp
bGRlciwgZnVuY3Rpb24sIGFyZ3MsIDgpOworICAgIExWYWx1ZSBhcmdzQXJyYXlbXSA9IHsgYXJn
MSwgYXJncy4uLiB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFy
Z3NBcnJheSwgc2l6ZW9mKGFyZ3NBcnJheSkgLyBzaXplb2YoTFZhbHVlKSk7CiB9CisKIHN0YXRp
YyBpbmxpbmUgdm9pZCBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKExWYWx1ZSBpbnN0
cnVjdGlvbiwgTENhbGxDb252IGNhbGxpbmdDb252ZW50aW9uKSB7IGxsdm0tPlNldEluc3RydWN0
aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxpbmdDb252ZW50aW9uKTsgfQogc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGFn
Z1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRXh0cmFjdFZhbHVlKGJ1
aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRT
ZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZhbHVlIHRha2VuLCBM
VmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2VsZWN0KGJ1aWxkZXIsIGNvbmRp
dGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMjAsNiArMTIwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShO
b2RlKiAKICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgY2FzZSBDYWxs
OgogICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBD
YWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3Ry
dWN0OgogICAgIGNhc2UgVmFsdWVUb0ludDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwogICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgpAQCAtMTI4LDYgKzEy
OCwyMCBAQCBzdGF0aWMgdm9pZCBkdW1wRGF0YVNlY3Rpb24oRGF0YVNlY3Rpb24qCiAgICAgfQog
fQogCitzdGF0aWMgaW50IG9mZnNldE9mU3RhY2tSZWdpb24oU3RhY2tNYXBzOjpSZWNvcmRNYXAm
IHJlY29yZE1hcCwgdWludDMyX3Qgc3RhY2ttYXBJRCkKK3sKKyAgICBTdGFja01hcHM6OlJlY29y
ZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YWNrbWFwSUQpOworICAgIFJF
TEVBU0VfQVNTRVJUKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFs
dWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsKKyAgICBMb2NhdGlvbiBjYXB0dXJlZExvY2F0
aW9uID0KKyAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFwcyhudWxscHRyLCBpdGVyLT52YWx1
ZVswXS5sb2NhdGlvbnNbMF0pOworICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24u
a2luZCgpID09IExvY2F0aW9uOjpSZWdpc3Rlcik7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVy
ZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgUkVM
RUFTRV9BU1NFUlQoIShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUgc2l6ZW9mKFJlZ2lzdGVy
KSkpOworICAgIHJldHVybiBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpIC8gc2l6ZW9mKFJlZ2lz
dGVyKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRGVzY3JpcHRvclR5cGU+CiB2b2lkIGdlbmVy
YXRlSUNGYXN0UGF0aCgKICAgICBTdGF0ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBH
ZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKQEAgLTI0Myw2ICsyNTcsMzIgQEAg
c3RhdGljIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnNGb3IoY29ucwogICAgIHJldHVybiBSZWdp
c3RlclNldChyZWNvcmQudXNlZFJlZ2lzdGVyU2V0KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsVHlwZT4KK3ZvaWQgYWRq
dXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhWZWN0b3I8Q2FsbFR5cGU+JiBjYWxscywgU3RhY2tNYXBz
OjpSZWNvcmRNYXAmIHJlY29yZE1hcCkKK3sKKyAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3
ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExM
Vk0KKyAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhl
IG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KKworICAgIFZlY3RvcjxDYWxsVHlwZT4g
b2xkQ2FsbHM7CisgICAgb2xkQ2FsbHMuc3dhcChjYWxscyk7CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIENhbGxUeXBl
JiBjYWxsID0gb2xkQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBTdGFja01hcHM6OlJlY29y
ZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3RhY2ttYXBJRCgpKTsK
KyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaXRlci0+dmFs
dWUuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIENhbGxUeXBlIGNvcHkgPSBjYWxsOworICAg
ICAgICAgICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWVbal0uaW5zdHJ1
Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoY29weSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzdGQ6OnNvcnQoY2FsbHMuYmVnaW4oKSwgY2FsbHMuZW5kKCkpOworfQor
CiBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgU3RhdGUmIHN0
YXRlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29kZSwgR2VuZXJhdGVkRnVu
Y3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb24sCiAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29y
ZE1hcCwgYm9vbCBkaWRTZWVVbndpbmRJbmZvKQpAQCAtMjUxLDE2ICsyOTEsMTQgQEAgc3RhdGlj
IHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFZNJiB2bSA9IGdyYXBoLm1f
dm07CiAgICAgU3RhY2tNYXBzIHN0YWNrbWFwcyA9IGppdENvZGUtPnN0YWNrbWFwczsKICAgICAK
LSAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5k
KHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBy
ZWNvcmRNYXAuZW5kKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlLnNpemUoKSA9
PSAxKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnMuc2l6ZSgp
ID09IDEpOwotICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24gPQotICAgICAgICBMb2NhdGlv
bjo6Zm9yU3RhY2ttYXBzKCZqaXRDb2RlLT5zdGFja21hcHMsIGl0ZXItPnZhbHVlWzBdLmxvY2F0
aW9uc1swXSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5raW5kKCkgPT0g
TG9jYXRpb246OlJlZ2lzdGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExvY2F0aW9u
LmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAg
aW50MzJfdCBsb2NhbHNPZmZzZXQgPSBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpIC8gc2l6ZW9m
KFJlZ2lzdGVyKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICBpbnQgbG9jYWxzT2Zm
c2V0ID0KKyAgICAgICAgb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLmNhcHR1
cmVkU3RhY2ttYXBJRCkgKyBncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgCisgICAgaW50
IHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0OworICAgIGlmIChzdGF0ZS52YXJhcmdzU3BpbGxTbG90
c1N0YWNrbWFwSUQgIT0gVUlOVF9NQVgpCisgICAgICAgIHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0
ID0gb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLnZhcmFyZ3NTcGlsbFNsb3Rz
U3RhY2ttYXBJRCk7CisgICAgZWxzZQorICAgICAgICB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9
IDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURh
dGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV0uaW5saW5lQ2FsbEZyYW1lOwpAQCAt
MzM2LDcgKzM3NCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygK
ICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSGFuZGxpbmcgT1NSIHN0YWNrbWFwICMiLCBleGl0Lm1fc3RhY2ttYXBJ
RCwgIiBmb3IgIiwgZXhpdC5tX2NvZGVPcmlnaW4sICJcbiIpOwogCi0gICAgICAgICAgICBpdGVy
ID0gcmVjb3JkTWFwLmZpbmQoZXhpdC5tX3N0YWNrbWFwSUQpOworICAgICAgICAgICAgYXV0byBp
dGVyID0gcmVjb3JkTWFwLmZpbmQoZXhpdC5tX3N0YWNrbWFwSUQpOwogICAgICAgICAgICAgaWYg
KGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9w
dGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zNzUsNyArNDEzLDcg
QEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAg
aWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJIYW5kbGluZyBHZXRCeUlkIHN0YWNrbWFwICMiLCBnZXRCeUlkLnN0YWNrbWFwSUQoKSwgIlxu
Iik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChnZXRC
eUlkLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmlu
ZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRN
YXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQxMiw3ICs0NTAsNyBAQCBzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBp
bGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIFB1dEJ5
SWQgc3RhY2ttYXAgIyIsIHB1dEJ5SWQuc3RhY2ttYXBJRCgpLCAiXG4iKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5kKHB1dEJ5SWQuc3RhY2ttYXBJRCgp
KTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKHB1dEJ5SWQuc3RhY2tt
YXBJRCgpKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgewogICAg
ICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtNDQ0LDE0ICs0ODIsMTMgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNl
ZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAg
IENoZWNrSW5EZXNjcmlwdG9yJiBjaGVja0luID0gc3RhdGUuY2hlY2tJbnNbaV07CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgY2hlY2tJbiBzdGFja21hcCAjIiwgY2hlY2tJ
bi5zdGFja21hcElEKCksICJcbiIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpdGVyID0g
cmVjb3JkTWFwLmZpbmQoY2hlY2tJbi5zdGFja21hcElEKCkpOworICAgICAgICAgICAgYXV0byBp
dGVyID0gcmVjb3JkTWFwLmZpbmQoY2hlY2tJbi5zdGFja21hcElEKCkpOwogICAgICAgICAgICAg
aWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSXQgd2Fz
IG9wdGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00ODAsNyArNTE3
LDYgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAg
ICAgICAgIGNoZWNrSW4ubV9nZW5lcmF0b3JzLmFwcGVuZChDaGVja0luR2VuZXJhdG9yKHN0dWJJ
bmZvLCBzbG93Q2FsbCwgYmVnaW4pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCiAgICAg
ICAgIAogICAgICAgICBleGNlcHRpb25UYXJnZXQubGluaygmc2xvd1BhdGhKSVQpOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25KdW1wID0gc2xvd1BhdGhKSVQuanVtcCgp
OwpAQCAtNTAzLDI5ICs1MzksMTEgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7
IGktLTspIHsKICAgICAgICAgICAgIGdlbmVyYXRlQ2hlY2tJbklDRmFzdFBhdGgoCiAgICAgICAg
ICAgICAgICAgc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJlY29yZE1hcCwg
c3RhdGUuY2hlY2tJbnNbaV0sCi0gICAgICAgICAgICAgICAgc2l6ZU9mQ2hlY2tJbigpKTsgCisg
ICAgICAgICAgICAgICAgc2l6ZU9mSW4oKSk7IAogICAgICAgICB9IAogICAgIH0KICAgICAKLSAg
ICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3
ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KLSAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhh
dCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0
ZS4KLSAgICBWZWN0b3I8SlNDYWxsPiBvbGRDYWxscyA9IHN0YXRlLmpzQ2FsbHM7Ci0gICAgc3Rh
dGUuanNDYWxscy5yZXNpemUoMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENh
bGxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEpTQ2FsbCYgY2FsbCA9IG9sZENhbGxzW2ldOwot
ICAgICAgICAKLSAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBy
ZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IHJl
Y29yZE1hcC5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraikgewotICAgICAgICAgICAg
SlNDYWxsIGNvcHkgPSBjYWxsOwotICAgICAgICAgICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0
ID0gaXRlci0+dmFsdWVbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgICAgICAgICBzdGF0ZS5q
c0NhbGxzLmFwcGVuZChjb3B5KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGQ6OnNv
cnQoc3RhdGUuanNDYWxscy5iZWdpbigpLCBzdGF0ZS5qc0NhbGxzLmVuZCgpKTsKKyAgICBhZGp1
c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzQ2FsbHMsIHJlY29yZE1hcCk7CiAgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuanNDYWxscy5zaXplKCk7IGktLTspIHsKICAgICAg
ICAgSlNDYWxsJiBjYWxsID0gc3RhdGUuanNDYWxsc1tpXTsKQEAgLTU0Nyw5ICs1NjUsMzIgQEAg
c3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBjYWxsLmxp
bmsodm0sIGxpbmtCdWZmZXIpOwogICAgIH0KICAgICAKKyAgICBhZGp1c3RDYWxsSUNzRm9yU3Rh
Y2ttYXBzKHN0YXRlLmpzQ2FsbFZhcmFyZ3NlcywgcmVjb3JkTWFwKTsKKyAgICAKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxWYXJhcmdzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgIEpTQ2FsbFZhcmFyZ3MmIGNhbGwgPSBzdGF0ZS5qc0NhbGxWYXJhcmdzZXNbaV07CisgICAg
ICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnMgZmFzdFBhdGhKSVQoJnZtLCBjb2RlQmxvY2spOwor
ICAgICAgICBjYWxsLmVtaXQoZmFzdFBhdGhKSVQsIGdyYXBoLCB2YXJhcmdzU3BpbGxTbG90c09m
ZnNldCk7CisgICAgICAgIAorICAgICAgICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNhbGwubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAg
ICAgICAgc2l6ZV90IHNpemVPZklDID0gc2l6ZU9mSUNGb3IoY2FsbC5ub2RlKCkpOworCisgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6
ZU9mSUMpOworICAgICAgICBpZiAoIWxpbmtCdWZmZXIuaXNWYWxpZCgpKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJGYWlsZWQgdG8gaW5zZXJ0IGlubGluZSBjYWNoZSBmb3IgdmFyYXJncyBjYWxs
IChzcGVjaWZpY2FsbHksICIsIEdyYXBoOjpvcE5hbWUoY2FsbC5ub2RlKCktPm9wKCkpLCAiKSBi
ZWNhdXNlIHdlIHRob3VnaHQgdGhlIHNpemUgd291bGQgYmUgIiwgc2l6ZU9mSUMsICIgYnV0IGl0
IGVuZGVkIHVwIGJlaW5nICIsIGZhc3RQYXRoSklULm1fYXNzZW1ibGVyLmNvZGVTaXplKCksICIg
cHJpb3IgdG8gY29tcGFjdGlvbi5cbiIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMoCisgICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5r
QnVmZmVyLnNpemUoKSwgc2l6ZU9mSUMgLSBsaW5rQnVmZmVyLnNpemUoKSk7CisgICAgICAgIAor
ICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIsIHN0YXRlLmZpbmFsaXplci0+aGFuZGxl
RXhjZXB0aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7CisgICAgfQorICAgIAogICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCi0gICAgaXRlciA9IHJlY29y
ZE1hcC5maW5kKHN0YXRlLmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEKTsK
KyAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5oYW5kbGVTdGFja092ZXJmbG93
RXhjZXB0aW9uU3RhY2ttYXBJRCk7CiAgICAgLy8gSXQncyBzb3J0IG9mIHJlbW90ZWx5IHBvc3Np
YmxlIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlvbiBoYW5kbGluZwogICAg
IC8vIHBhdGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KICAgICBpZiAoaXRlciAhPSBy
ZWNvcmRNYXAuZW5kKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5s
aW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOCwxMSArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiREZH
Tm9kZS5oIgogI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCit1
c2luZyBuYW1lc3BhY2UgREZHOworCiAvLyBUaGUgZGVmYXVsdCBzaXplcyBhcmUgeDg2LTY0LXNw
ZWNpZmljLCBhbmQgd2VyZSBmb3VuZCBlbXBpcmljYWxseS4gVGhleSBoYXZlIHRvIGNvdmVyIHRo
ZSB3b3JzdAogLy8gcG9zc2libGUgY29tYmluYXRpb24gb2YgcmVnaXN0ZXJzIGxlYWRpbmcgdG8g
dGhlIGxhcmdlc3QgcG9zc2libGUgZW5jb2Rpbmcgb2YgZWFjaCBpbnN0cnVjdGlvbiBpbgogLy8g
dGhlIElDLgpAQCAtNjEsMTcgKzY0LDM0IEBAIHNpemVfdCBzaXplT2ZQdXRCeUlkKCkKICNlbmRp
ZgogfQogCi1zaXplX3Qgc2l6ZU9mQ2hlY2tJbigpCitzaXplX3Qgc2l6ZU9mQ2FsbCgpCiB7CiAj
aWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiA0OworICAgIHJldHVybiA1NjsKICNlbHNlCi0gICAg
cmV0dXJuIDU7IAorICAgIHJldHVybiA1MzsKICNlbmRpZgogfQogCitzaXplX3Qgc2l6ZU9mQ2Fs
bFZhcmFyZ3MoKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1cm4gNTY7CisjZWxzZQorICAg
IHJldHVybiAyNjk7CisjZW5kaWYKK30KIAotc2l6ZV90IHNpemVPZkNhbGwoKQorc2l6ZV90IHNp
emVPZkNhbGxGb3J3YXJkVmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiA1
NjsKKyNlbHNlCisgICAgcmV0dXJuIDM3MjsKKyNlbmRpZgorfQorCitzaXplX3Qgc2l6ZU9mQ29u
c3RydWN0VmFyYXJncygpCiB7CiAjaWYgQ1BVKEFSTTY0KQogICAgIHJldHVybiA1NjsKQEAgLTgw
LDYgKzEwMCwzOCBAQCBzaXplX3Qgc2l6ZU9mQ2FsbCgpCiAjZW5kaWYKIH0KIAorc2l6ZV90IHNp
emVPZkluKCkKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDQ7CisjZWxzZQorICAgIHJl
dHVybiA1OyAKKyNlbmRpZgorfQorCitzaXplX3Qgc2l6ZU9mSUNGb3IoTm9kZSogbm9kZSkKK3sK
KyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIHJl
dHVybiBzaXplT2ZHZXRCeUlkKCk7CisgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICByZXR1cm4g
c2l6ZU9mUHV0QnlJZCgpOworICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAg
ICAgICAgcmV0dXJuIHNpemVPZkNhbGwoKTsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAg
ICByZXR1cm4gc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJn
czoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOworICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNvbnN0cnVjdFZhcmFyZ3Mo
KTsKKyAgICBjYXNlIEluOgorICAgICAgICByZXR1cm4gc2l6ZU9mSW4oKTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCwxMiArMjgsMjMgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIERGRyB7
CitzdHJ1Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CiAKIHNpemVfdCBzaXplT2ZHZXRC
eUlkKCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOwogc2l6ZV90IHNpemVPZkNhbGwoKTsKLXNp
emVfdCBzaXplT2ZDaGVja0luKCk7CitzaXplX3Qgc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKK3NpemVf
dCBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsKK3NpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJh
cmdzKCk7CitzaXplX3Qgc2l6ZU9mSW4oKTsKKworc2l6ZV90IHNpemVPZklDRm9yKERGRzo6Tm9k
ZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NywxMCArOTcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5
cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9u
X0VDYiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNy
byhWX0pJVE9wZXJhdGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGlu
dFB0ciwgaW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVpKWlpaLCBmdW5jdGlv
blR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50MzIsIGludDY0LCBpbnQzMiwgaW50MzIsIGludDMy
KSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwg
aW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVuY3Rpb25UeXBlKHZvaWRU
eXBlLCBpbnQzMikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUo
aW50MzIsIGRvdWJsZVR5cGUpKSBcCi0gICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0
aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKQorICAgIG1hY3JvKFpfSklUT3BlcmF0aW9u
X0VDLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyKSkgXAorICAgIG1hY3JvKFpf
SklUT3BlcmF0aW9uX0VKWiwgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGludDY0LCBpbnQz
MikpCiAgICAgCiBjbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5IDogcHVibGljIENvbW1vblZhbHVl
cyB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3Bw
CShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2Fs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgSlNDYWxsOjpKU0NhbGwodW5z
aWduZWQgc3RhY2ttYXBJRCwgTm9kZQogICAgICwgbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCiAg
ICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCiB7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0g
Q2FsbCB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNl
LmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKIEpTQ2Fs
bEJhc2U6OkpTQ2FsbEJhc2UoKQogICAgIDogbV90eXBlKENhbGxMaW5rSW5mbzo6Tm9uZSkKICAg
ICAsIG1fY2FsbExpbmtJbmZvKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbEJhc2UuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBMaW5rQnVmZmVyOwogCituYW1lc3BhY2UgREZH
IHsKK3N0cnVjdCBOb2RlOworfQorCiBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgSlNDYWxsQmFz
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJn
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2Fs
bFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRG
R09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUg
IlNldHVwVmFyYXJnc0ZyYW1lLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
KwordXNpbmcgbmFtZXNwYWNlIERGRzsKKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncygp
CisgICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBtX25vZGUobnVsbHB0cikKKyAg
ICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoVUlOVF9NQVgpCit7Cit9CisKK0pTQ2FsbFZhcmFyZ3M6
OkpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZSogbm9kZSkKKyAgICA6IG1f
c3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9ub2RlKG5vZGUpCisgICAgLCBtX2NhbGxC
YXNlKAorICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgPyBDYWxsTGlua0lu
Zm86OkNvbnN0cnVjdFZhcmFyZ3MgOiBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzLAorICAgICAg
ICBub2RlLT5vcmlnaW4uc2VtYW50aWMpCisgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCit7
CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBD
YWxsRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzKTsKK30K
KwordW5zaWduZWQgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpCit7CisgICAg
cmV0dXJuIDQ7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBlcnMmIGpp
dCwgR3JhcGgmIGdyYXBoLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpCit7CisgICAgLy8gV2Ug
YXJlIHBhc3NlZCB0aHJlZSBwaWVjZXMgb2YgaW5mb3JtYXRpb246CisgICAgLy8gLSBUaGUgY2Fs
bGVlLgorICAgIC8vIC0gVGhlIGFyZ3VtZW50cyBvYmplY3QuCisgICAgLy8gLSBUaGUgInRoaXMi
IHZhbHVlLCBpZiBpdCdzIGEgY29uc3RydWN0b3IgY2FsbC4KKyAgICAKKyAgICBib29sIGlzQ2Fs
bCA9IG1fbm9kZS0+b3AoKSAhPSBDb25zdHJ1Y3RWYXJhcmdzOworICAgIAorICAgIENhbGxWYXJh
cmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisgICAgCisgICAgR1BS
UmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAKKyAgICBHUFJSZWcg
YXJndW1lbnRzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgYm9vbCBhcmd1bWVudHNPblN0YWNrID0gZmFsc2U7CisgICAgCisgICAg
c3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBh
cmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIHRoaXNHUFIgPSBH
UFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FsbEZvcndh
cmRWYXJhcmdzOgorICAgICAgICB0aGlzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAg
ICAgICBhcmd1bWVudHNPblN0YWNrID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
b25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjE7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBjb25z
dCB1bnNpZ25lZCBjYWxsZWVTcGlsbFNsb3QgPSAwOworICAgIGNvbnN0IHVuc2lnbmVkIGFyZ3Vt
ZW50c1NwaWxsU2xvdCA9IDE7CisgICAgY29uc3QgdW5zaWduZWQgdGhpc1NwaWxsU2xvdCA9IDI7
CisgICAgY29uc3QgdW5zaWduZWQgc3RhY2tQb2ludGVyU3BpbGxTbG90ID0gMzsKKyAgICAKKyAg
ICAvLyBHZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICBSZWdpc3RlclNldCB1c2VkUmVn
aXN0ZXJzOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFy
ZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIp
OworICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgdXNlZFJl
Z2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsKKyAgICBpZiAodGhpc0dQUiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKKyAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIGlmIChhcmd1
bWVudHNPblN0YWNrKQorICAgICAgICBhcmd1bWVudHNHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJldXNl
ZFJlZ2lzdGVycygpKTsKKyAgICAKKyAgICBhdXRvIGxvYWRBcmd1bWVudHMgPSBbJl0gKGJvb2wg
Y2xvYmJlcmVkKSB7CisgICAgICAgIGlmIChhcmd1bWVudHNPblN0YWNrKSB7CisgICAgICAgICAg
ICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6YWRkcmVzc0Zvcihn
cmFwaC5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIpOworICAgICAgICB9IGVsc2UgaWYgKGNs
b2JiZXJlZCkgeworICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50c1NwaWxsU2xv
dCksIGFyZ3VtZW50c0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIGF1dG8gY29t
cHV0ZVVzZWRTdGFjayA9IFsmXSAoR1BSUmVnIHRhcmdldEdQUiwgdW5zaWduZWQgZXh0cmEpIHsK
KyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHRhcmdldEdQUik7
CisgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
dGFyZ2V0R1BSKTsKKyAgICAgICAgaWYgKGV4dHJhKQorICAgICAgICAgICAgaml0LnN1YlB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYSksIHRhcmdldEdQUik7CisgICAgICAgIGpp
dC51cnNoaWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHRhcmdldEdQUik7CisgICAgfTsK
KyAgICAKKyAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxl
ZSkgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVl
KSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICBqaXQuY2Fs
bChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgIG1fZXhjZXB0
aW9ucy5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1h
bEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAgIH07
CisgICAgCisgICAgbG9hZEFyZ3VtZW50cyhmYWxzZSk7CisKKyAgICBqaXQuc3RvcmVQdHIoQ0Nh
bGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9y
KHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3QpKTsKKyAgICAKKyAgICAv
LyBBdHRlbXB0IHRoZSBmb3J3YXJkaW5nIGZhc3QgcGF0aCwgaWYgaXQncyBiZWVuIHJlcXVlc3Rl
ZC4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGF2ZUFyZ3VtZW50czsKKyAgICBpZiAobV9ub2Rl
LT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAvLyBEbyB0aGUgaG9ycmlm
aWMgZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0aW1pemF0aW9uLgorICAgICAgICAvLyBG
SVhNRTogZG8gdGhpcyBvcHRpbWl6YXRpb24gYXQgdGhlIElSIGxldmVsLgorICAgICAgICAKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBhcmd1bWVudHNH
UFIpKTsKKyAgICAgICAgCisgICAgICAgIGNvbXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQUjIsIDAp
OworICAgICAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShqaXQsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2Fz
ZSk7CisgICAgICAgIAorICAgICAgICBqaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgaGF2ZUFyZ3VtZW50cyA9IGppdC5qdW1wKCk7CisgICAgICAgIHNsb3dDYXNl
LmxpbmsoJmppdCk7CisgICAgfQorICAgIAorICAgIC8vIEdvdHRhIHNwaWxsIHRoZSBjYWxsZWUs
IGFyZ3VtZW50cywgYW5kIHRoaXMgYmVjYXVzZSB3ZSB3aWxsIG5lZWQgdGhlbSBsYXRlciBhbmQg
d2Ugd2lsbCBoYXZlIHNvbWUKKyAgICAvLyBjYWxscyB0aGF0IGNsb2JiZXIgdGhlbS4KKyAgICBq
aXQuc3RvcmU2NChjYWxsZWVHUFIsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3Rz
T2Zmc2V0ICsgY2FsbGVlU3BpbGxTbG90KSk7CisgICAgaWYgKCFhcmd1bWVudHNPblN0YWNrKQor
ICAgICAgICBqaXQuc3RvcmU2NChhcmd1bWVudHNHUFIsIENDYWxsSGVscGVyczo6YWRkcmVzc0Zv
cihzcGlsbFNsb3RzT2Zmc2V0ICsgYXJndW1lbnRzU3BpbGxTbG90KSk7CisgICAgaWYgKGlzQ2Fs
bCkKKyAgICAgICAgaml0LnN0b3JlNjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9y
KHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSk7CisgICAgCisgICAgdW5zaWduZWQg
ZXh0cmFTdGFjayA9IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArCisgICAgICAgIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCop
KTsKKyAgICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hHUFIxLCAwKTsKKyAgICBqaXQuc3ViUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2spLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRh
dGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSk7CisgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3
aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MpKTsKKyAgICAKKyAg
ICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjEpOworICAgIGNv
bXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQUjIsIGV4dHJhU3RhY2spOworICAgIGxvYWRBcmd1bWVu
dHModHJ1ZSk7CisgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hHUFIxLCBmYWxz
ZSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIyKTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKC1leHRyYVN0YWNrKSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoc2NyYXRjaEdQUjIsIGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
ZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpLCBzY3JhdGNoR1BSMSk7CisgICAgY2FsbFdpdGhFeGNl
cHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1l
KSk7CisgICAgCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hH
UFIyKTsKKyAgICAKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVs
cGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgdGhpc1NwaWxsU2xvdCksIHRoaXNH
UFIpOworICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNP
ZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgaWYg
KG1fbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgIGhhdmVBcmd1bWVu
dHMubGluaygmaml0KTsKKyAgICAKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBpZiAoaXNDYWxsKQorICAgICAg
ICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgw
KSk7CisgICAgCisgICAgLy8gSGVuY2Vmb3J0aCB3ZSBtYWtlIHRoZSBjYWxsLiBUaGUgYmFzZSBG
VEwgY2FsbCBtYWNoaW5lcnkgZXhwZWN0cyB0aGUgY2FsbGVlIGluIHJlZ1QwIGFuZCBmb3IgdGhl
CisgICAgLy8gc3RhY2sgZnJhbWUgdG8gYWxyZWFkeSBiZSBzZXQgdXAsIHdoaWNoIGl0IGlzLgor
ICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1l
U2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAKKyAgICBtX2NhbGxCYXNlLmVtaXQoaml0KTsK
KyAgICAKKyAgICAvLyBVbmRvIHRoZSBkYW1hZ2Ugd2UndmUgZG9uZS4KKyAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHN0YWNrUG9pbnRl
clNwaWxsU2xvdCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworfQorCit2
b2lkIEpTQ2FsbFZhcmFyZ3M6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBD
b2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyKQoreworICAgIG1fY2FsbEJhc2UubGlu
ayh2bSwgbGlua0J1ZmZlcik7CisgICAgbGlua0J1ZmZlci5saW5rKG1fZXhjZXB0aW9ucywgZXhj
ZXB0aW9uSGFuZGxlcik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbFZhcmFyZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbFZhcmFyZ3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExKU0NhbGxWYXJhcmdzX2gKKyNkZWZpbmUgRlRMSlNDYWxsVmFyYXJnc19oCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2UuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIExpbmtCdWZmZXI7CisKK25hbWVzcGFjZSBERkcgeworY2xhc3MgR3JhcGg7
CitzdHJ1Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbFZhcmFy
Z3MgeworcHVibGljOgorICAgIEpTQ2FsbFZhcmFyZ3MoKTsKKyAgICBKU0NhbGxWYXJhcmdzKHVu
c2lnbmVkIHN0YWNrbWFwSUQsIERGRzo6Tm9kZSopOworICAgIAorICAgIERGRzo6Tm9kZSogbm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBu
dW1TcGlsbFNsb3RzTmVlZGVkKCk7CisgICAgCisgICAgdm9pZCBlbWl0KENDYWxsSGVscGVycyYs
IERGRzo6R3JhcGgmLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpOworICAgIHZvaWQgbGluayhW
TSYsIExpbmtCdWZmZXImLCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElE
OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSlNDYWxsVmFyYXJncyYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVy
Lm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25l
ZCBtX3N0YWNrbWFwSUQ7CisgICAgREZHOjpOb2RlKiBtX25vZGU7CisgICAgSlNDYWxsQmFzZSBt
X2NhbGxCYXNlOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9leGNlcHRpb25zOworCitw
dWJsaWM6CisgICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYg
Ly8gRlRMSlNDYWxsVmFyYXJnc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg1LDYgKzE4NSwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX291dC5zdGFja21hcElu
dHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElE
KSwKICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2EpOwogICAgICAg
ICAKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbnkgQ2FsbFZhcmFyZ3MgdGhlbiB3ZSBuZWUgdG8g
aGF2ZSBhIHNwaWxsIHNsb3QgZm9yIGl0LgorICAgICAgICBib29sIGhhc1ZhcmFyZ3MgPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKSB7CisgICAgICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAg
ICAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgaGFzVmFyYXJncyA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzVmFyYXJncykgeworICAgICAgICAgICAgTFZh
bHVlIHZhcmFyZ3NTcGlsbFNsb3RzID0gbV9vdXQuYWxsb2NhKAorICAgICAgICAgICAgICAgIGFy
cmF5VHlwZShtX291dC5pbnQ2NCwgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgp
KSk7CisgICAgICAgICAgICBtX2Z0bFN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCA9
IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgICAgIG1fb3V0LmNhbGwoCisgICAgICAgICAgICAg
ICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRl
LnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCksCisgICAgICAgICAgICAgICAgbV9vdXQuaW50
MzJaZXJvLCB2YXJhcmdzU3BpbGxTbG90cyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAg
IG1fY2FsbEZyYW1lID0gbV9vdXQucHRyVG9JbnQoCiAgICAgICAgICAgICBtX291dC5jYWxsKG1f
b3V0LmZyYW1lQWRkcmVzc0ludHJpbnNpYygpLCBtX291dC5pbnQzMlplcm8pLCBtX291dC5pbnRQ
dHIpOwogICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVO
dW1iZXIpOwpAQCAtNjM2LDYgKzY2MCwxNCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbnN0
cnVjdDoKICAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3
YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAg
Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7
CisgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoRlRMX05BVElWRV9DQUxMX0lOTElOSU5H
KQogICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0
OgpAQCAtOTgyLDcgKzEwMTQsNiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpOwot
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgb3BlcmFuZC5pc0FyZ3VtZW50KCkp
OwogCiAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3Bl
cmFuZCkpOwogCkBAIC0xOTg2LDggKzIwMTcsMjIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IGNoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCgpOwogCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCAhbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAg
ICAgICAgc2V0SW50MzIobV9vdXQuYWRkKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBheWxvYWRG
b3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLCBtX291dC5jb25zdEludDMyKC0xKSkpOworICAg
ICAgICBpZiAobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAg
ICAgICAmJiAhbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkgeworICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMigKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAg
ICAgICAgIGlmICghbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0
YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBh
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIHNldEludDMyKAorICAg
ICAgICAgICAgICAgIG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMy
Tm9uTmVnYXRpdmUocGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsKKyAgICAgICAgfQogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAtMzcwOCw2ICszNzUz
LDc5IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKKyAgICB7
CisgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIAorICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBudWxscHRyOworICAgICAg
ICBMVmFsdWUgdGhpc0FyZyA9IG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1f
bm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICAgICAganNB
cmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgdGhp
c0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICB0aGlzQXJnID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICBqc0FyZ3VtZW50cyA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJiYWQgbm9kZSB0
eXBlIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxMVmFsdWU+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291
dC5jb25zdEludDY0KHN0YWNrbWFwSUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291
dC5jb25zdEludDMyKHNpemVPZklDRm9yKG1fbm9kZSkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChjb25zdE51bGwobV9vdXQucmVmOCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1f
b3V0LmNvbnN0SW50MzIoMSArICEhanNBcmd1bWVudHMgKyAhIXRoaXNBcmcpKTsKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChqc0NhbGxlZSk7CisgICAgICAgIGlmIChqc0FyZ3VtZW50cykKKyAg
ICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNBcmd1bWVudHMpOworICAgICAgICBpZiAodGhp
c0FyZykKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodGhpc0FyZyk7CisgICAgICAgIAor
ICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgY2FsbCA9
IG1fb3V0LmNhbGwobV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7
CisgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUNDYWxs
Q29udik7CisgICAgICAgIAorICAgICAgICBtX2Z0bFN0YXRlLmpzQ2FsbFZhcmFyZ3Nlcy5hcHBl
bmQoSlNDYWxsVmFyYXJncyhzdGFja21hcElELCBtX25vZGUpKTsKKyAgICAgICAgCisgICAgICAg
IHNldEpTVmFsdWUoY2FsbCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJh
cmdzKCkKKyAgICB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoID0gdm1D
YWxsKAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3Mp
LCBtX2NhbGxGcmFtZSwganNBcmd1bWVudHMsCisgICAgICAgICAgICBtX291dC5jb25zdEludDMy
KGRhdGEtPm9mZnNldCkpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEg
Y2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdp
Y2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBW
TSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFu
Y2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25l
IHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0CisgICAg
ICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAg
ICAgICBtX291dC5hYm92ZU9yRXF1YWwobGVuZ3RoLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxp
bWl0KSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgsIHBheWxvYWRG
b3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICB2bUNhbGwoCisgICAg
ICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MpLCBtX2NhbGxGcmFt
ZSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNl
dCgpKSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSwKKyAgICAg
ICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKSk7
CisgICAgfQogCiAgICAgdm9pZCBjb21waWxlSnVtcCgpCiAgICAgewpAQCAtNDAxMiw3ICs0MTMw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExWYWx1ZSBjYWxs
ID0gbV9vdXQuY2FsbCgKICAgICAgICAgICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0
SW50cmluc2ljKCksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2tt
YXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mQ2hlY2tJbigpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXpl
T2ZJbigpKSwKICAgICAgICAgICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291
dC5jb25zdEludDMyKDEpLCBjZWxsKTsKIAogICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9u
Q2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKQEAgLTY0MDUsNyAr
NjUyMyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQnVmZmVyIGlzIG91dCBvZiBzcGFjZSwg
Zmx1c2ggaXQuCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1ZmZlcklzRnVsbCwgY29udGludWF0
aW9uKTsKLSAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdyaXRl
QmFycmllckJ1ZmZlciksIG1fY2FsbEZyYW1lLCBiYXNlLCBOb0V4Y2VwdGlvbnMpOworICAgICAg
ICB2bUNhbGxOb0V4Y2VwdGlvbnMobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVC
YXJyaWVyQnVmZmVyKSwgbV9jYWxsRnJhbWUsIGJhc2UpOwogICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CkBAIC02NDE0LDQ0ICs2NTMyLDIzIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAK
LSAgICBlbnVtIEV4Y2VwdGlvbkNoZWNrTW9kZSB7IE5vRXhjZXB0aW9ucywgQ2hlY2tFeGNlcHRp
b25zIH07Ci0gICAgCi0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIEV4Y2VwdGlv
bkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIEFyZ3MuLi4gYXJn
cykKICAgICB7CiAgICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IG1fb3V0LmNhbGwoZnVuY3Rpb24pOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7CisgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmdzLi4uKTsKKyAgICAg
ICAgY2FsbENoZWNrKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIExWYWx1
ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgRXhjZXB0aW9uQ2hlY2tNb2Rl
IG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0gICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7
Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxKTsKLSAg
ICAgICAgY2FsbENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAg
ICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcy
LCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKLSAgICB7Ci0gICAg
ICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwo
ZnVuY3Rpb24sIGFyZzEsIGFyZzIpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9u
LCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBFeGNlcHRpb25DaGVja01v
ZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKLSAgICB7Ci0gICAgICAgIGNhbGxQcmVmbGlnaHQo
KTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rpb24sIGFyZzEsIGFy
ZzIsIGFyZzMpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJn
MSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgRXhjZXB0aW9uQ2hlY2tN
b2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJncz4KKyAgICBMVmFsdWUgdm1DYWxsTm9FeGNlcHRpb25zKExWYWx1ZSBmdW5jdGlvbiwg
QXJncy4uLiBhcmdzKQogICAgIHsKICAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJn
NCk7Ci0gICAgICAgIGNhbGxDaGVjayhtb2RlKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1f
b3V0LmNhbGwoZnVuY3Rpb24sIGFyZ3MuLi4pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KLSAgICAKKwogICAgIHZvaWQgY2FsbFByZWZsaWdodChDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CiAgICAgewogICAgICAgICBtX291dC5zdG9yZTMyKApAQCAtNjQ2NSwxMSArNjU2Miw4IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhbGxQcmVmbGlnaHQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNhbGxDaGVjayhFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9
IENoZWNrRXhjZXB0aW9ucykKKyAgICB2b2lkIGNhbGxDaGVjaygpCiAgICAgewotICAgICAgICBp
ZiAobW9kZSA9PSBOb0V4Y2VwdGlvbnMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAog
ICAgICAgICBpZiAoT3B0aW9uczo6ZW5hYmxlRXhjZXB0aW9uRnV6eigpKQogICAgICAgICAgICAg
bV9vdXQuY2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRXhjZXB0aW9uRnV6eikpOwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24g
MTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ3LDEzICszNDcsOCBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGNhbGwoTFZh
bHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIGJ1aWxkQ2Fs
bChtX2J1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IpOyB9CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVl
IGZ1bmN0aW9uKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbik7IH0KICAg
ICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxKSB7IHJldHVybiBidWls
ZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFs
dWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikgeyByZXR1cm4gYnVpbGRDYWxs
KG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZh
bHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczKSB7IHJl
dHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMyk7IH0K
LSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJn
MiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVy
LCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7IH0KLSAgICBMVmFsdWUgY2FsbChM
VmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExW
YWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVu
Y3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOyB9Ci0gICAgTFZhbHVlIGNhbGwo
TFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBM
VmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2KSB7IHJldHVybiBidWlsZENhbGwo
bV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNik7
IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUg
YXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYs
IExWYWx1ZSBhcmc3KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJn
MSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyk7IH0KLSAgICBMVmFsdWUgY2Fs
bChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMs
IExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1ZSBhcmc3LCBMVmFs
dWUgYXJnOCkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFy
ZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzgpOyB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJncz4KKyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1
ZSBhcmcxLCBBcmdzLi4uIGFyZ3MpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0
aW9uLCBhcmcxLCBhcmdzLi4uKTsgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZT4KICAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5jdGlvbikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAxNzk5NzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDksNiArNDksMTAgQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICAsIG1vZHVs
ZSgwKQogICAgICwgZnVuY3Rpb24oMCkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDApCisgICAg
LCBoYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAs
IGhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBjYXB0dXJlZFN0YWNr
bWFwSUQoVUlOVF9NQVgpCisgICAgLCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQoVUlOVF9N
QVgpCiAgICAgLCB1bndpbmREYXRhU2VjdGlvbigwKQogICAgICwgdW53aW5kRGF0YVNlY3Rpb25T
aXplKDApCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lv
biAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNp
bmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExKU0NhbGwuaCIKKyNpbmNs
dWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5j
bHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTcxLDEw
ICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2Vw
dGlvblN0YWNrbWFwSUQ7CiAgICAgdW5zaWduZWQgaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRDsK
ICAgICB1bnNpZ25lZCBjYXB0dXJlZFN0YWNrbWFwSUQ7CisgICAgdW5zaWduZWQgdmFyYXJnc1Nw
aWxsU2xvdHNTdGFja21hcElEOwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3JpcHRv
cj4gZ2V0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9yPiBwdXRC
eUlkczsKICAgICBTZWdtZW50ZWRWZWN0b3I8Q2hlY2tJbkRlc2NyaXB0b3I+IGNoZWNrSW5zOwog
ICAgIFZlY3RvcjxKU0NhbGw+IGpzQ2FsbHM7CisgICAgVmVjdG9yPEpTQ2FsbFZhcmFyZ3M+IGpz
Q2FsbFZhcmFyZ3NlczsKICAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsKICAg
ICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKICAgICB2b2lkKiB1bndpbmREYXRh
U2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcg
KzEzNCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICByZXR1cm4g
aW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxlclNj
b3BlQ2hhaW4pOwogfQogCi11bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU1N0YWNrKiBzdGFjaywgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51
bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3Vuc2lnbmVkIHNp
emVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50
MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgaWYg
KCFhcmd1bWVudHMpCkBAIC0xNTYsNiArMTU2LDEzIEBAIHVuc2lnbmVkIHNpemVGcmFtZUZvclZh
cmFyZ3MoQ2FsbEZyYW1lKiAKICAgICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAgCisg
ICAgcmV0dXJuIGxlbmd0aDsKK30KKwordW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNTdGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNp
Z25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit7Cisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc2l6ZU9mVmFyYXJncyhjYWxsRnJhbWUsIGFyZ3VtZW50cywg
Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgIAogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBj
YWxsZWVGcmFtZUZvclZhcmFyZ3MoY2FsbEZyYW1lLCBudW1Vc2VkU3RhY2tTbG90cywgbGVuZ3Ro
ICsgMSk7CiAgICAgaWYgKGxlbmd0aCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzIHx8ICFzdGFj
ay0+ZW5zdXJlQ2FwYWNpdHlGb3IoY2FsbGVlRnJhbWUtPnJlZ2lzdGVycygpKSkgewogICAgICAg
ICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDE3OTk3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gcGFkZGVk
Q2FsbGVlRnJhbWVPZmZzZXQpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3Mo
Q2FsbEZyYW1lKiBleGVjLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdP
ZmZzZXQpOwogICAgIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBleGVj
LCBKU1N0YWNrKiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3Rz
LCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdm9pZCBsb2FkVmFyYXJncyhDYWxs
RnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1Zh
bHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQg
c2V0dXBWYXJhcmdzRnJhbWUoQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWND
YWxsZWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWlu
dDMyX3QgbGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
dGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ5LDcgKzE0OSwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZShD
YWxsCiAKICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAg
bV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgbV9m
cmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHMuc2l6ZSgpOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5s
aW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpOwogICAgICAgICBtX2ZyYW1lLm1fYnl0
ZWNvZGVPZmZzZXQgPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxNzk5
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMiwxNSArMjEyLDI3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpj
YWxsRXhjZXB0aW9uRnV6eigKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIH0KIAotQXNzZW1ibHlIZWxwZXJzOjpK
dW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2lu
ZCBraW5kKQorQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2Vw
dGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2luZCBraW5kLCBFeGNlcHRpb25KdW1wV2lkdGggd2lk
dGgpCiB7CiAgICAgY2FsbEV4Y2VwdGlvbkZ1enooKTsKKworICAgIGlmICh3aWR0aCA9PSBGYXJK
dW1wV2lkdGgpCisgICAgICAgIGtpbmQgPSAoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/
IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgOiBOb3JtYWxFeGNlcHRpb25DaGVjayk7CiAgICAgCisg
ICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gYnJhbmNoVGVz
dDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVybywgQWJzb2x1
dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CisgICAgcmVzdWx0ID0gYnJh
bmNoVGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVybywg
QWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CiAjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgIHJldHVybiBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2VwdGlv
bkNoZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWcpKTsKKyAgICByZXN1bHQgPSBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNr
ID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsK
ICNlbmRpZgorICAgIAorICAgIGlmICh3aWR0aCA9PSBOb3JtYWxKdW1wV2lkdGgpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCByZWFsSnVtcCA9IHBhdGNo
YWJsZUp1bXAoKTsKKyAgICByZXN1bHQubGluayh0aGlzKTsKKyAgICAKKyAgICByZXR1cm4gcmVh
bEp1bXAubV9qdW1wOwogfQogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0
dXJlV2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVscGVycyYgaml0LCBUcnVzdGVkSW1tUHRyIHN0cnVj
dHVyZSwgUmVnaXN0ZXJJRCBkZXN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNiArMzM4
LDEwIEBAIHB1YmxpYzoKICAgICB9CiAgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKKyAgICAgICAgLy8gTkIuIEl0J3Mg
dGVtcHRpbmcgb24gc29tZSBhcmNoaXRlY3R1cmVzIHRvIHNvbWV0aW1lcyB1c2UgYW4gb2Zmc2V0
IGZyb20gdGhlIHN0YWNrCisgICAgICAgIC8vIHJlZ2lzdGVyIGJlY2F1c2UgZm9yIHNvbWUgb2Zm
c2V0cyB0aGF0IHdpbGwgZW5jb2RlIHRvIGEgc21hbGxlciBpbnN0cnVjdGlvbi4gQnV0IHdlCisg
ICAgICAgIC8vIGNhbm5vdCBkbyB0aGlzLiBXZSB1c2UgdGhpcyBpbiBwbGFjZXMgd2hlcmUgdGhl
IHN0YWNrIHBvaW50ZXIgaGFzIGJlZW4gbW92ZWQgdG8gc29tZQorICAgICAgICAvLyB1bnByZWRp
Y3RhYmxlIGxvY2F0aW9uLgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQo
KSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2
aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9CkBAIC0z
NjcsMzkgKzM3MSwzOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBm
aXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgotICAgIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KGludCBz
bG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChpbnQgc2xvdCkKICAgICB7
CiAgICAgICAgIEFTU0VSVChzbG90ID49IEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKTsK
LSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gSlNTdGFjazo6
Q2FsbGVyRnJhbWVBbmRQQ1NpemUpKTsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIEpTU3RhY2s6OkNhbGxlckZy
YW1lQW5kUENTaXplKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBjYWxs
ZWUgQ2FsbEZyYW1lLgotICAgIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRTbG90KGludCBhcmd1bWVu
dCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50IGFyZ3VtZW50KQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpOwogICAgIH0KIAotICAgIEFkZHJlc3MgY2FsbGVl
RnJhbWVUYWdTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lVGFn
U2xvdChpbnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qoc2xv
dCkud2l0aE9mZnNldChUYWdPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJlc3MgY2FsbGVlRnJh
bWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVBh
eWxvYWRTbG90KGludCBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xv
dChzbG90KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJlc3Mg
Y2FsbGVlQXJndW1lbnRUYWdTbG90KGludCBhcmd1bWVudCkKKyAgICBzdGF0aWMgQWRkcmVzcyBj
YWxsZWVBcmd1bWVudFRhZ1Nsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJu
IGNhbGxlZUFyZ3VtZW50U2xvdChhcmd1bWVudCkud2l0aE9mZnNldChUYWdPZmZzZXQpOwogICAg
IH0KIAotICAgIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChpbnQgYXJndW1lbnQp
CisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChpbnQgYXJndW1l
bnQpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlQXJndW1lbnRTbG90KGFyZ3VtZW50KS53
aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJlc3MgY2FsbGVlRnJh
bWVDYWxsZXJGcmFtZSgpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVDYWxsZXJGcmFt
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KDApLndpdGhPZmZzZXQo
Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKICAgICB9CkBAIC01NzEsNyArNTc1LDkg
QEAgcHVibGljOgogICAgIHZvaWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAgICAKICAgICBlbnVt
IEV4Y2VwdGlvbkNoZWNrS2luZCB7IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBJbnZlcnRlZEV4Y2Vw
dGlvbkNoZWNrIH07Ci0gICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tL
aW5kIGtpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjayk7CisgICAgZW51bSBFeGNlcHRpb25KdW1w
V2lkdGggeyBOb3JtYWxKdW1wV2lkdGgsIEZhckp1bXBXaWR0aCB9OworICAgIEp1bXAgZW1pdEV4
Y2VwdGlvbkNoZWNrKAorICAgICAgICBFeGNlcHRpb25DaGVja0tpbmQgPSBOb3JtYWxFeGNlcHRp
b25DaGVjaywgRXhjZXB0aW9uSnVtcFdpZHRoID0gTm9ybWFsSnVtcFdpZHRoKTsKIAogI2lmIEVO
QUJMRShTQU1QTElOR19DT1VOVEVSUykKICAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFjcm9B
c3NlbWJsZXImIGppdCwgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMyX3Qg
aW5jcmVtZW50ID0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3Nyw2ICsxNzc3LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMy
IGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKKyAgICB7CisgICAgICAgIHNl
dHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjQ+KGFyZzIsIGFyZzQpOworICAgICAgICBtb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAg
ICAgbW92ZShhcmc1LCBHUFJJbmZvOjphcmd1bWVudEdQUjUpOworICAgICAgICBtb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKwog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0ciBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0
LCBUcnVzdGVkSW1tMzIgYXJnNSkKICAgICB7CiAgICAgICAgIHNldHVwVHdvU3R1YkFyZ3NHUFI8
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjM+KGFyZzIsIGFyZzMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE3OTk3MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MDIsNiArNDAyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJu
VmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVnaXN0
ZXJzOjplc2k7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25Bcmd1bWVu
dEdQUiA9IFg4NlJlZ2lzdGVyczo6cjEwOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcGF0Y2hw
b2ludFNjcmF0Y2hSZWdpc3RlciA9IE1hY3JvQXNzZW1ibGVyOjpzY3JhdGNoUmVnaXN0ZXI7CiAK
ICAgICBzdGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5zaWduZWQgaW5kZXgpCkBAIC01NzcsNiAr
NTc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIg
PSBBUk02NFJlZ2lzdGVyczo6eDA7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBy
ZXR1cm5WYWx1ZUdQUjIgPSBBUk02NFJlZ2lzdGVyczo6eDE7IC8vIHJlZ1QxCiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBBUk02NFJlZ2lzdGVyczo6
eDI7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUiA9
IEFSTTY0UmVnaXN0ZXJzOjp4ODsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHBhdGNocG9pbnRT
Y3JhdGNoUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6aXAwOwogCiAgICAgLy8gR1BSUmVnIG1h
cHBpbmcgaXMgZGlyZWN0LCB0aGUgbWFjaGluZSByZWdzaXRlciBudW1iZXJzIGNhbgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjQsMTEgKzQ2NCw2
IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAgbV9j
YW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9m
aWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBERkc6OkNhbklubGluZToK
LSAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBE
Rkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNyArMjk2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKE9wY29k
ZUlELCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsK
LSAgICAgICAgdm9pZCBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qKTsKKyAg
ICAgICAgdm9pZCBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qLCBDYWxsTGlu
a0luZm8qKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3Vs
dChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklUOjplbWl0UHV0Q2Fs
bFJlc3VsdChJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKLXZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBpbnQgdGhpc1ZhbHVlID0g
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQ7CkBAIC05MCw2ICs5MCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZVNldHVw
VmFyYXJnc0ZyYW1lKEluc3RyCiAgICAgaWYgKGNhbk9wdGltaXplKQogICAgICAgICBlbmQubGlu
ayh0aGlzKTsKICAgICAKKyAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAgIGxv
YWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3Qg
PSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRlZCA9
IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmsodGhp
cyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBub3RC
aWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJlZ1QwKTsKICAgICBzdG9yZTY0KHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwpAQCAtMTM0LDcgKzE0NCw5IEBAIHZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKIAogdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRk
Q2FsbExpbmtJbmZvKCk7CisKKyAgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBkYXRlcyBjYWxsRnJh
bWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpAQCAtMTUyLDcgKzE2NCw3IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICBDT01QSUxFX0FTU0VSVChP
UENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwg
Y2FsbF9hbmRfY2FsbF92YXJhcmdzX29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CiAgICAg
Q09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9w
X2NvbnN0cnVjdF92YXJhcmdzKSwgY2FsbF9hbmRfY29uc3RydWN0X3ZhcmFyZ3Nfb3Bjb2Rlc19t
dXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQotICAgICAgICBjb21waWxlU2V0
dXBWYXJhcmdzRnJhbWUoaW5zdHJ1Y3Rpb24pOworICAgICAgICBjb21waWxlU2V0dXBWYXJhcmdz
RnJhbWUoaW5zdHJ1Y3Rpb24sIGluZm8pOwogICAgIGVsc2UgewogICAgICAgICBpbnQgYXJnQ291
bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByZWdpc3Rlck9mZnNl
dCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CkBAIC0xNzYsOSArMTg4LDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgc3RvcmU2NChyZWdUMCwg
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwog
ICAgIAotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oKTsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKKyAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0
aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCw3IEBAIHR5cGVkZWYgaW50NjRfdCBKSVRfT1BFUkFUSU9OKCpRX0pJVE9wZXIKIHR5cGVkZWYg
aW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRCkoZG91YmxlKTsKIHR5cGVk
ZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7
CiB0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VDKShFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRP
cGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CiB0eXBl
ZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VKWlopKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYgc2l6ZV90IEpJ
VF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpT
Q2VsbCopOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VK
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0xODksNiArMTkwLDcgQEAgdHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVndzSikoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRjaHBv
aW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpW
X0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaSikoRXhlY1N0YXRlKiwgaW50MzJfdCwgRW5j
b2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FWkpaWlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBp
bnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXRpb25fRVZtKShFeGVjU3RhdGUqLCBWTSopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04g
KCpWX0pJVE9wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX1opKGludDMyX3QpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHJldmlzaW9uIDE3OTk3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDEsMTEgKzEwMSwzMSBAQCB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NG
cmFtZUZhc3RDYXNlKENDYWxsCiAKIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJlZyBzY3JhdGNo
R1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIHVuc2lnbmVkIGZp
cnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93Q2FzZSkKIHsKLSAg
ICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSgKLSAgICAgICAgaml0LCBudW1Vc2VkU2xv
dHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsCi0gICAgICAgIFZh
bHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6
QXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJbnQzMiksCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKSwKLSAgICAgICAgZmlyc3RWYXJBcmdPZmZz
ZXQsIHNsb3dDYXNlKTsKKyAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShqaXQsIG51
bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgbnVs
bHB0ciwgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKK30KKwordm9pZCBlbWl0U2V0dXBW
YXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90
c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3Jh
dGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIGZpcnN0
VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93Q2FzZSkKK3sKKyAgICBW
YWx1ZVJlY292ZXJ5IGFyZ3VtZW50Q291bnRSZWNvdmVyeTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RBcmd1bWVudFJlZzsKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBhcmd1bWVudENv
dW50UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIsIERhdGFGb3Jt
YXRJbnQzMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcmd1bWVudENvdW50UmVj
b3ZlcnkgPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCgKKyAgICAgICAgICAgICAgICBqc051bWJl
cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpID4gMSkKKyAgICAgICAgICAg
IGZpcnN0QXJndW1lbnRSZWcgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9
IFZpcnR1YWxSZWdpc3RlcigwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudENvdW50
UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJbnQz
Mik7CisgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldCgwKSk7CisgICAgfQorICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZh
c3RDYXNlKGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJndW1lbnRSZWcsIGZpcnN0
VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuaAkocmV2aXNp
b24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIHZvaWQgZW1pdFNldHVwVmFyYXJn
c0ZyYW1lRmFzdENhc2UoQ0NhbGwKIC8vIFZhcmlhbnQgdGhhdCBhc3N1bWVzIG5vcm1hbCBzdGFj
ayBmcmFtZS4KIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2Ny
YXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQs
IENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKIAorLy8gVmFyaWFudCBmb3IgcG90
ZW50aWFsbHkgaW5saW5lZCBzdGFjayBmcmFtZXMuCit2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFt
ZUZhc3RDYXNlKENDYWxsSGVscGVycyYsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIElubGlu
ZUNhbGxGcmFtZSosIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0JiBzbG93Q2FzZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5o
CShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1
bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBtb2Rl
ID0gTm9ybWFsQXJndW1lbnRzQ3JlYXRpb25Nb2RlKQogICAgIHsKLSAgICAgICAgQXJndW1lbnRz
KiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KHZtLmhl
YXAsIG9mZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJheVNpemVJbkJ5
dGVzKGlubGluZUNhbGxGcmFtZSkpKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKKyAgICAgICAgQXJn
dW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+
KHZtLmhlYXAsIG9mZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJheVNp
emVJbkJ5dGVzKGNhbGxGcmFtZSwgaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3VtZW50cyhjYWxsRnJh
bWUpOwogICAgICAgICBhcmd1bWVudHMtPmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZSwgaW5saW5l
Q2FsbEZyYW1lLCBtb2RlKTsKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKICAgICB9CkBAIC0x
MjQsNyArMTI0LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVTdHJpY3RNb2RlQ2FsbGVl
SWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJy
YXlTaXplSW5CeXRlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikgKiBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgfQotICAgIHN0
YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsgfQorICAgIHN0YXRpYyBzaXpl
X3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
ICogKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgfQogICAgIGJvb2wgaXNB
cmd1bWVudChzaXplX3QpOwogICAgIGJvb2wgdHJ5U2V0QXJndW1lbnQoVk0mLCBzaXplX3QgYXJn
dW1lbnQsIEpTVmFsdWUpOwogICAgIEpTVmFsdWUgdHJ5R2V0QXJndW1lbnQoc2l6ZV90IGFyZ3Vt
ZW50KTsKQEAgLTM0MCwxMSArMzQ4LDE1IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNo
Q3JlYXRpb24oQ2EKICAgICBtX292ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAgbV9vdmVycm9k
ZUNhbGxlciA9IGZhbHNlOwogICAgIG1faXNTdHJpY3RNb2RlID0ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmlzU3RyaWN0TW9k
ZSgpOwotCisgICAgCisgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lz
dGVyLmlzVmFsaWQoKSkKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBjYWxsRnJhbWUtPnIoaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQz
MigpOworICAgIGVsc2UKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCk7CisgICAgbV9udW1Bcmd1bWVudHMtLTsKKyAgICAKICAgICBzd2l0
Y2ggKG1vZGUpIHsKICAgICBjYXNlIE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9kZTogewotICAg
ICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IDE7Ci0gICAgICAgIAogICAgICAgICBpZiAobV9udW1Bcmd1bWVudHMpIHsKICAgICAgICAgICAg
IGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFd
LnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAgICAgbV9yZWdpc3RlcnMgPSBy
ZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJhbWUtPnJl
Z2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50T25lIC0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSkub2Zmc2V0KCk7CkBAIC0zNjEsNyArMzczLDYgQEAgaW5saW5lIHZvaWQgQXJndW1l
bnRzOjpmaW5pc2hDcmVhdGlvbihDYQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDbG9uZWRB
cmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwogICAgICAgICBpZiAobV9udW1Bcmd1bWVu
dHMpIHsKICAgICAgICAgICAgIGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAg
ICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50T25lIC0gdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2ICsy
MTEsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICAvKiBmcm9tIHN1
cGVyIGxvbmcgY29tcGlsZXMgdGhhdCB0YWtlIGEgbG90IG9mIG1lbW9yeS4gKi9cCiAgICAgdih1
bnNpZ25lZCwgbWF4aW11bUlubGluaW5nQ2FsbGVyU2l6ZSwgMTAwMDApIFwKICAgICBcCisgICAg
dih1bnNpZ25lZCwgbWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZywgMTAwKSBcCisgICAgXAogICAg
IHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcsIHRydWUpIFwKICAgICB2KGJv
b2wsIGVuYWJsZVBvbHl2YXJpYW50QnlJZElubGluaW5nLCB0cnVlKSBcCiAgICAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246629</attachid>
            <date>2015-02-15 18:08:52 -0800</date>
            <delta_ts>2015-02-16 12:58:49 -0800</delta_ts>
            <desc>almost passing all tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>187728</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
MTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFB
OEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAv
KiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAx
NDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2Nh
dGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxs
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAw
MEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8q
IFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICov
LAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAq
LywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
LAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkw
RjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBA
QAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4
NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiAr
NDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRy
dXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVy
c2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNy
Y0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQo
aW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0z
MkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMzEsNiArMzMxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
bXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODc2LDYgKzg3NiwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJ
YiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgw
KQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBw
dWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNp
Z25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDog
ODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAg
Ly8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1
ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0o
cHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZv
KGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1f
bWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxs
TGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkK
K3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9j
b3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBi
b29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAo
IW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1w
KG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAg
bV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApA
QCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29u
c3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAg
LTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkg
Y29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgog
ICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAg
IGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0
LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAg
IENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFy
Z3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNv
cnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAg
ICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZh
cmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAg
cmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBpc1Zh
cmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtp
bmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtp
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzRXNjYXBlZCI7CiAgICAgY2FzZSBOb3RTdHJpbmdP
YmplY3Q6CiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKKyAgICBjYXNlIFZhcmFy
Z3NPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZsb3ciOwogICAgIGNhc2Ug
VW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5j
b3VudGFibGVJbnZhbGlkYXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEluYWRlcXVhdGVDb3ZlcmFnZSwgLy8gV2UgZXhp
dGVkIGJlY2F1c2Ugd2UgZW5kZWQgdXAgaW4gY29kZSB0aGF0IGRpZG4ndCBoYXZlIHByb2ZpbGlu
ZyBjb3ZlcmFnZS4KICAgICBBcmd1bWVudHNFc2NhcGVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
cmd1bWVudHMgZXNjYXBlZCBidXQgd2UgZGlkbid0IGV4cGVjdCB0aGVtIHRvLgogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgorICAgIFZhcmFyZ3NPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB2YXJhcmdzIGNhbGwgcGFzc2VkIG1vcmUgYXJndW1l
bnRzIHRoYW4gd2UgZXhwZWN0ZWQuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgV2F0Y2hkb2dU
aW1lckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdh
dGNoZG9nIHRpbWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05MiwyNSArOTIsMjUgQEAgdm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wSW5Db250ZXh0KFBy
aW50UwogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgb3V0LnByaW50ZigiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkp
OworICAgICAgICBvdXQucHJpbnQoIioiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJp
bnRmKCIqaW50MzIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBv
dXQucHJpbnQoIippbnQzMigiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmlu
dGYoIippbnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CisgICAgICAgIG91
dC5wcmludCgiKmludDUyKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgb3V0
LnByaW50ZigiKnN0cmljdEludDUyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsK
KyAgICAgICAgb3V0LnByaW50KCIqc3RyaWN0SW50NTIoIiwgdmlydHVhbFJlZ2lzdGVyKCksICIp
Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgb3V0LnByaW50ZigiKmRvdWJsZSglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKmRvdWJsZSgiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwg
IikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgb3V0LnByaW50ZigiKmNlbGwoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkpOworICAgICAgICBvdXQucHJpbnQoIipjZWxsKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICBvdXQucHJpbnRmKCIqYm9vbCglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQo
KSk7CisgICAgICAgIG91dC5wcmludCgiKmJvb2woIiwgdmlydHVhbFJlZ2lzdGVyKCksICIpIik7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoK
ICAgICAgICAgb3V0LnByaW50ZigiYXJndW1lbnRzIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ0LDcgKzE0NCw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkub2Zmc2V0KCkpOwotICAgICAgICBBU1NFUlQodmFsdWUuaXNIZWFwVG9wKCkpOworICAgICAg
ICBBU1NFUlQoIXZhbHVlLmlzQ2xlYXIoKSk7CiAgICAgICAgIEZpbHRyYXRpb25SZXN1bHQgcmVz
dWx0ID0KICAgICAgICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRmlsdGVyRm9yKHVzZUtpbmRGb3Io
dmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQgPT0gRmlsdHJhdGlvbk9LKTsKQEAgLTIwMyw5ICsyMDMsMjAgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKLSAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3Vt
ZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS5ibG9jaygpLT52YWx1
ZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICAvLyBB
c3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4gU2V0QXJndW1l
bnQgbWVhbnMgdGhhdCBzb21lb25lIHNldAorICAgICAgICAvLyB0aGUgYXJndW1lbnQgdmFsdWVz
IG91dC1vZi1iYW5kLCBhbmQgY3VycmVudGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8g
YQorICAgICAgICAvLyBub24tY2xlYXIgdmFsdWUuCisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS52
YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIExvYWRW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBtX3N0
YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldFR5cGUoU3BlY0ludDMyKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAgICAg
ICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5t
YWtlSGVhcFRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBj
YXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgpAQCAtMTMxNSw3ICsxMzI2LDggQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyB0aGUgYXJndW1l
bnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0byBmb3JjZSBjb25z
dGFudCBmb2xkaW5nCiAgICAgICAgIC8vIG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBiZWNhdXNl
IEdldE15QXJndW1lbnRzTGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCiAgICAgICAg
IC8vIFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIgb24uCi0g
ICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAg
ICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAg
ICAmJiAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
IHsKICAgICAgICAgICAgIHNldENvbnN0YW50KAogICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVt
YmVyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXpl
KCkgLSAxKSk7CiAgICAgICAgICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7IC8vIFBy
ZXRlbmQgdGhhdCB3ZSBjbG9iYmVyZWQgdG8gcHJldmVudCBjb25zdGFudCBmb2xkaW5nLgpAQCAt
MTk2NCw2ICsxOTc2LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5h
dGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndh
cmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAzLDYgKzUwMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9kZU9yaWdp
biBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgICAgICAgICAgICAgIGlmICghb3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgZXhhY3RseSB3aGF0
IHRoaXMgd2lsbCByZXR1cm4uIEJ1dCBvbmx5IGFmdGVyIHdlIGhhdmUgY2hlY2tlZAogICAgICAg
ICAgICAgICAgICAgICAvLyB0aGF0IG5vYm9keSBoYXMgZXNjYXBlZCBvdXIgYXJndW1lbnRzLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDggQEAgcHJpdmF0
ZToKICAgICB9CiAKICAgICAvLyBIZWxwZXIgZm9yIG1pbiBhbmQgbWF4LgotICAgIGJvb2wgaGFu
ZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJh
bmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICAKICAg
ICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGlu
aW5nIGFuZCBpbnRyaW5zaWNzLgogICAgIHZvaWQgaGFuZGxlQ2FsbCgKQEAgLTE4MiwyMCArMTgz
LDI1IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBDYWxsTGlua1N0YXR1cyk7CiAgICAgdm9pZCBoYW5kbGVDYWxs
KGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCB1bnNpZ25l
ZCBpbnN0cnVjdGlvblNpemUsIGludCBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVy
T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBv
cCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci0gICAgdm9pZCBlbWl0RnVuY3Rpb25DaGVja3Mo
Q2FsbFZhcmlhbnQsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7Ci0gICAgdm9pZCB1bmRvRnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlh
bnQpOworICAgIHZvaWQgaGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlw
ZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgdm9pZCBlbWl0RnVuY3Rpb25DaGVj
a3MoQ2FsbFZhcmlhbnQsIE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJn
dW1udCk7CiAgICAgdm9pZCBlbWl0QXJndW1lbnRQaGFudG9tcyhpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7
CiAgICAgdW5zaWduZWQgaW5saW5pbmdDb3N0KENhbGxWYXJpYW50LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOyAvLyBSZXR1cm4gVUlOVF9N
QVggaWYgaXQncyBub3QgYW4gaW5saW5pbmcgY2FuZGlkYXRlLiBCeSBjb252ZW50aW9uLCBpbnRy
aW5zaWNzIGhhdmUgYSBjb3N0IG9mIDEuCiAgICAgLy8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4g
dHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgot
ICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRP
cGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBj
YWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7
CisgICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3Vs
dE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJndW1l
bnQsIHVuc2lnbmVkIGFyZ3VtZW50c09mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFt
ZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgZW51bSBDYWxsZXJMaW5r
YWJpbGl0eSB7IENhbGxlckRvZXNOb3JtYWxMaW5raW5nLCBDYWxsZXJMaW5rc01hbnVhbGx5IH07
Ci0gICAgYm9vbCBhdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQg
cmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1
bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlKTsKLSAgICB2b2lkIGlubGluZUNhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZz
ZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHkpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBhdHRlbXB0VG9JbmxpbmVDYWxs
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25l
ZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5LCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBjb25z
dCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
ZWNrc0Z1bmN0b3I+CisgICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBp
bnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxs
RnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5LCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNl
cnRDaGVja3MpOwogICAgIHZvaWQgY2FuY2VsTGlua2luZ0ZvckJsb2NrKElubGluZVN0YWNrRW50
cnkqLCBCYXNpY0Jsb2NrKik7IC8vIE9ubHkgd29ya3Mgd2hlbiB0aGUgZ2l2ZW4gYmxvY2sgaXMg
dGhlIGxhc3Qgb25lIHRvIGhhdmUgYmVlbiBhZGRlZCBmb3IgdGhhdCBpbmxpbmUgc3RhY2sgZW50
cnkuCiAgICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlmIGl0
IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBo
YW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYywgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24pOwotICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGludCByZXN1
bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlKTsKLSAgICBib29sIGhhbmRs
ZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5j
dGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NG
dW5jdG9yPgorICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRy
aW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRD
aGVja3MpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBo
YW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVu
Y3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgVHlwZWRBcnJheVR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICBib29sIGhhbmRsZUNvbnN0
YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbios
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwog
ICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7CiAgICAgTm9kZSogaGFuZGxlR2V0QnlP
ZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSBvcCA9IEdl
dEJ5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdldEJ5SWQoCkBAIC01MjgsNiArNTM0LDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwpCiAgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVt
YXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKSk7CisgICAgICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBmbHVz
aERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbnVt
QXJndW1lbnRzID0gaW5saW5lU3RhY2tFbnRyeS0+bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IG51bUFyZ3VtZW50czsgYXJndW1l
bnQtLSA+IDE7KQpAQCAtNjU0LDEzICs2NjIsNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlbW92ZUxhc3ROb2RlRnJvbUdyYXBoKE5v
ZGVUeXBlIGV4cGVjdGVkTm9kZVR5cGUpCi0gICAgewotICAgICAgICBOb2RlKiBub2RlID0gbV9j
dXJyZW50QmxvY2stPnRha2VMYXN0KCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9w
KCkgPT0gZXhwZWN0ZWROb2RlVHlwZSk7Ci0gICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJl
ZShub2RlKTsKLSAgICB9Ci0KICAgICB2b2lkIGFkZFZhckFyZ0NoaWxkKE5vZGUqIGNoaWxkKQog
ICAgIHsKICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChFZGdlKGNoaWxk
KSk7CkBAIC02OTEsNyArNjkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG9wLCBvcEluZm8s
IGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOwogICAgICAgICBpZiAocmVzdWx0UmVn
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KSwgY2Fs
bCk7CisgICAgICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKICAgICAgICAgcmV0dXJuIGNh
bGw7CiAgICAgfQogICAgIApAQCAtMTA0Miw4ICsxMDQzLDggQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbCgKIHsKICAgICBBU1NFUlQocmVnaXN0ZXJPZmZzZXQgPD0gMCk7CiAgICAg
Ci0gICAgaWYgKGNhbGxUYXJnZXQtPmhhc0NvbnN0YW50KCkpCi0gICAgICAgIGNhbGxMaW5rU3Rh
dHVzID0gQ2FsbExpbmtTdGF0dXMoY2FsbFRhcmdldC0+YXNKU1ZhbHVlKCkpLnNldElzUHJvdmVk
KHRydWUpOworICAgIGlmIChjYWxsVGFyZ2V0LT5pc0NlbGxDb25zdGFudCgpKQorICAgICAgICBj
YWxsTGlua1N0YXR1cy5zZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFudChjYWxsVGFy
Z2V0LT5hc0NlbGwoKSkpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNv
ZGVQYXJzaW5nKCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBIYW5kbGluZyBjYWxsIGF0ICIsIGN1
cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKQEAgLTEwNjAs
NyArMTA2MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgCiAgICAg
T3BJbmZvIGNhbGxPcEluZm87CiAgICAgCi0gICAgaWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJn
ZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwgb3AsIGtpbmQsIHByZWRpY3Rpb24pKSB7CisgICAg
aWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJl
Z2lzdGVyT2Zmc2V0LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNl
dCksIFZpcnR1YWxSZWdpc3RlcigpLCAwLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4
dE9mZnNldCwgb3AsIGtpbmQsIHByZWRpY3Rpb24pKSB7CiAgICAgICAgIGlmIChtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlu
bGluZWRDYWxsKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNzIsNyArMTA3Myw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gY2FsbGVlLmZ1bmN0aW9uKCk7CiAgICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3Bl
Y2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Io
a2luZCk7CiAgICAgICAgIGlmIChmdW5jdGlvbiAmJiBmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24o
KSkgewotICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxlZSwgY2FsbFRhcmdldCwg
cmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgICAgICAgICBlbWl0RnVu
Y3Rpb25DaGVja3MoY2FsbGVlLCBjYWxsVGFyZ2V0LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgwLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgY2FsbE9wSW5mbyA9IE9wSW5mbyht
X2dyYXBoLmZyZWV6ZShmdW5jdGlvbikpOwogCiAgICAgICAgICAgICBpZiAob3AgPT0gQ2FsbCkK
QEAgLTEwODgsMTEgKzEwODksNTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgK
ICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxPcEluZm8sIGNhbGxUYXJnZXQsIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiB9CiAKLXZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBjYWxsZWUs
IE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1
Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewot
ICAgIE5vZGUqIHRoaXNBcmd1bWVudDsKKyAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxs
X3ZhcmFyZ3MpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpKTsKKyAgICAK
KyAgICBpbnQgcmVzdWx0ID0gcGNbMV0udS5vcGVyYW5kOworICAgIGludCBjYWxsZWUgPSBwY1sy
XS51Lm9wZXJhbmQ7CisgICAgaW50IHRoaXNSZWcgPSBwY1szXS51Lm9wZXJhbmQ7CisgICAgaW50
IGFyZ3VtZW50cyA9IHBjWzRdLnUub3BlcmFuZDsKKyAgICBpbnQgZmlyc3RGcmVlUmVnID0gcGNb
NV0udS5vcGVyYW5kOworICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IHBjWzZdLnUub3BlcmFu
ZDsKKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigp
OworICAgIAorICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxl
ZSkpOworICAgIAorICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsTGlua0luZm9zLCBtX2NhbGxDb250ZXh0TWFwKTsKKyAgICBpZiAoY2FsbFRhcmdldC0+aXND
ZWxsQ29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJvdmVuQ29uc3RhbnRD
YWxsZWUoQ2FsbFZhcmlhbnQoY2FsbFRhcmdldC0+YXNDZWxsKCkpKTsKKyAgICAKKyAgICBpZiAo
Y2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKQorICAgICAgICAmJiBoYW5kbGVJbmxpbmluZyhj
YWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCBmaXJzdEZyZWVSZWcsIFZpcnR1YWxS
ZWdpc3Rlcih0aGlzUmVnKSwgVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cyksIGZpcnN0VmFyQXJn
T2Zmc2V0LCAwLCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdz
KSwgb3AsIElubGluZUNhbGxGcmFtZTo6dmFyYXJnc0tpbmRGb3Ioa2luZCksIHByZWRpY3Rpb24p
KSB7CisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dy
YXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRDYWxsKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2NhbGxW
YXJhcmdzRGF0YS5hZGQoKTsKKyAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNldCA9IGZpcnN0VmFy
QXJnT2Zmc2V0OworICAgIAorICAgIE5vZGUqIHRoaXNDaGlsZDsKICAgICBpZiAoa2luZCA9PSBD
b2RlRm9yQ2FsbCkKLSAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIHRoaXNDaGlsZCA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpOworICAgIGVsc2UKKyAgICAgICAgdGhpc0NoaWxkID0g
bnVsbHB0cjsKKyAgICAKKyAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRh
dGEpLCBPcEluZm8ocHJlZGljdGlvbiksIGNhbGxUYXJnZXQsIGdldChWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzKSksIHRoaXNDaGlsZCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhy
ZXN1bHQpOworICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQorICAgICAgICBzZXQocmVzdWx0
UmVnLCBjYWxsKTsKK30KKwordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tz
KENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHRo
aXNBcmd1bWVudFJlZykKK3sKKyAgICBOb2RlKiB0aGlzQXJndW1lbnQ7CisgICAgaWYgKHRoaXNB
cmd1bWVudFJlZy5pc1ZhbGlkKCkpCisgICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh0aGlzQXJn
dW1lbnRSZWcpOwogICAgIGVsc2UKICAgICAgICAgdGhpc0FyZ3VtZW50ID0gMDsKIApAQCAtMTEx
MCwxMyArMTE1NCw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcygK
ICAgICBhZGRUb0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGNhbGxlZUNl
bGwpKSwgY2FsbFRhcmdldEZvckNoZWNrLCB0aGlzQXJndW1lbnQpOwogfQogCi12b2lkIEJ5dGVD
b2RlUGFyc2VyOjp1bmRvRnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlKQotewotICAg
IHJlbW92ZUxhc3ROb2RlRnJvbUdyYXBoKENoZWNrQ2VsbCk7Ci0gICAgaWYgKGNhbGxlZS5pc0Ns
b3N1cmVDYWxsKCkpCi0gICAgICAgIHJlbW92ZUxhc3ROb2RlRnJvbUdyYXBoKEdldEV4ZWN1dGFi
bGUpOwotfQotCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0QXJndW1lbnRQaGFudG9tcyhpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQogewogICAgIGZvciAoaW50IGkgPSBraW5kID09IENvZGVGb3JD
YWxsID8gMCA6IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKQpAQCAtMTIx
MCwxMyArMTI0NywxNSBAQCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENh
CiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpOwogfQogCi12b2lkIEJ5
dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0
T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZy
YW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5KQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGlu
ZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFu
dCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2Fs
bGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxpdHksIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcykKIHsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9u
S2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAg
IAogICAgIEFTU0VSVChpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKSAhPSBVSU5UX01BWCk7CiAgICAgCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCktPmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgaW5zZXJ0Q2hlY2tzKGNvZGVCbG9j
ayk7CiAKICAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2ggY29uc3RhbnRzIQogICAgIApAQCAtMTM1
Niw0NCArMTM5NSw1OSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpjYW5jZWxMaW5raW5nRm9yQmxv
CiAgICAgfQogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVl
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmth
YmlsaXR5IGNhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNp
Z25lZCYgaW5saW5pbmdCYWxhbmNlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4K
K2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVy
TGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmlu
Z0JhbGFuY2UsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6
c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIAogICAgIGlmICghaW5saW5pbmdCYWxh
bmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgYm9vbCBkaWRJbnNlcnRDaGVj
a3MgPSBmYWxzZTsKKyAgICBhdXRvIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nID0gWyZdICgp
IHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKG51bGxwdHIpOworICAgICAgICBkaWRJbnNlcnRDaGVj
a3MgPSB0cnVlOworICAgIH07CisgICAgCiAgICAgaWYgKEludGVybmFsRnVuY3Rpb24qIGZ1bmN0
aW9uID0gY2FsbGVlLmludGVybmFsRnVuY3Rpb24oKSkgewotICAgICAgICBpZiAoaGFuZGxlQ29u
c3RhbnRJbnRlcm5hbEZ1bmN0aW9uKHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9m
ZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCkpIHsK
KyAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihyZXN1bHRPcGVyYW5k
LCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBz
cGVjaWFsaXphdGlvbktpbmQsIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nKSkgeworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldE5vZGUpOwogICAgICAgICAgICAgZW1pdEFyZ3VtZW50
UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVj
aWFsaXphdGlvbktpbmQpOwogICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFkaWRJbnNlcnRDaGVja3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIAogICAgIEludHJpbnNpYyBpbnRyaW5zaWMgPSBjYWxsZWUuaW50cmluc2lj
Rm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNp
YykgewotICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3VsdE9wZXJhbmQsIGludHJpbnNp
YywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9u
KSkgeworICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3VsdE9wZXJhbmQsIGludHJpbnNp
YywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9u
LCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGRpZEluc2VydENoZWNrcyk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNh
bGxUYXJnZXROb2RlKTsKICAgICAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKTsK
ICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
ZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAg
ICB1bnNpZ25lZCBteUlubGluaW5nQ29zdCA9IGlubGluaW5nQ29zdChjYWxsZWUsIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAgIGlmIChteUlubGlu
aW5nQ29zdCA+IGlubGluaW5nQmFsYW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIGlubGluZUNhbGwoY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxlZSwgcmVn
aXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5k
LCBjYWxsZXJMaW5rYWJpbGl0eSk7CisKKyAgICBpbmxpbmVDYWxsKGNhbGxUYXJnZXROb2RlLCBy
ZXN1bHRPcGVyYW5kLCBjYWxsZWUsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgY2FsbGVyTGlua2FiaWxpdHksIGluc2VydENoZWNr
cyk7CiAgICAgaW5saW5pbmdCYWxhbmNlIC09IG15SW5saW5pbmdDb3N0OwogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxs
TGlua1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZy
YW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCitib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbmxpbmluZygKKyAgICBOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJl
c3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywKKyAgICBp
bnQgcmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1
bWVudCwKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVuc2lnbmVkIGFy
Z3VtZW50c09mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAorICAgIHVuc2ln
bmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtp
bmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAgaWYgKHZlcmJvc2UpIHsKICAg
ICAgICAgZGF0YUxvZygiSGFuZGxpbmcgaW5saW5pbmcuLi5cbiIpOwpAQCAtMTQwNyw2ICsxNDYx
LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKKyAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1Zh
cmFyZ3Moa2luZCkKKyAgICAgICAgJiYgY2FsbExpbmtTdGF0dXMubWF4TnVtQXJndW1lbnRzKCkg
PiBPcHRpb25zOjptYXhpbXVtVmFyYXJnc0ZvcklubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlubGluaW5nIGJlY2F1c2Ugb2Yg
dmFyYXJncy5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKICAg
ICB1bnNpZ25lZCBpbmxpbmluZ0JhbGFuY2UgPSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JD
YWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwogICAgIGlmIChzcGVjaWFsaXph
dGlvbktpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCkKICAgICAgICAgaW5saW5pbmdCYWxhbmNlID0g
c3RkOjptaW4oaW5saW5pbmdCYWxhbmNlLCBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JDb25z
dHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCkpOwpAQCAtMTQxNywxNyArMTQ3
OCwxMDAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8v
IHNpbXBsaWZpY2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUg
dGltZXMsIGJ1dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hl
cmUgd2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxl
ZS4KICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExp
bmtTdGF0dXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAg
ICAgICAgICAgY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNl
dCwgc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0OworICAg
ICAgICAKKyAgICAgICAgLy8gT25seSB1c2VkIGZvciB2YXJhcmdzIGNhbGxzLgorICAgICAgICB1
bnNpZ25lZCBtYW5kYXRvcnlNaW5pbXVtID0gMDsKKyAgICAgICAgdW5zaWduZWQgbWF4TnVtQXJn
dW1lbnRzID0gMDsKKworICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2lu
ZCkpIHsKKyAgICAgICAgICAgIGlmIChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0
YWJsZSA9IGNhbGxMaW5rU3RhdHVzWzBdLmZ1bmN0aW9uRXhlY3V0YWJsZSgpKQorICAgICAgICAg
ICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlckNv
dW50KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5TWluaW11
bSA9IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGluY2x1ZGVzICJ0aGlzIgorICAg
ICAgICAgICAgbWF4TnVtQXJndW1lbnRzID0gc3RkOjptYXgoCisgICAgICAgICAgICAgICAgY2Fs
bExpbmtTdGF0dXMubWF4TnVtQXJndW1lbnRzKCksCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5
TWluaW11bSArIDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBzb3J0IG9mIHBy
ZXRlbmQgdGhhdCB0aGlzICppcyogdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCB3ZXJlIHBh
c3NlZC4KKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gbWF4TnVtQXJn
dW1lbnRzOworICAgICAgICAgICAgCisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IHJlZ2lz
dGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWcgKyAxOworICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQg
LT0gbWF4TnVtQXJndW1lbnRzOyAvLyBpbmNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIHJlZ2lz
dGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICBy
ZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCisgICAgICAgICAgICAg
ICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgICAgICAtcmVnaXN0ZXJP
ZmZzZXQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVn
aXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgcmVzdWx0
ID0gYXR0ZW1wdFRvSW5saW5lQ2FsbCgKICAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1
bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAg
ICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyRG9l
c05vcm1hbExpbmtpbmcsIHByZWRpY3Rpb24sCi0gICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2Up
OwotICAgICAgICBpZiAoIXJlc3VsdCAmJiAhY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkKLSAg
ICAgICAgICAgIHVuZG9GdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSk7CisgICAgICAg
ICAgICBpbmxpbmluZ0JhbGFuY2UsIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJn
ZXROb2RlLCBzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNhbGwgPyB0aGlzQXJndW1lbnQg
OiBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
dmFyYXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFyZ3VtZW50cyByaWdodCBub3cu
CisgICAgICAgICAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpKSB7
CisgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQg
KyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworCisgICAgICAgICAgICAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2FkVmFyYXJnc0RhdGEuYWRkKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
U3RhcnQgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+Y291bnQgPSBWaXJ0dWFsUmVn
aXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OworICAgICAgICAgICAg
ICAgICAgICBkYXRhLT5saW1pdCA9IG1heE51bUFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YS0+bWFuZGF0b3J5TWluaW11bSA9IG1hbmRhdG9yeU1pbmltdW07CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRh
dGEpLCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAvLyBJbiBERkcgSVIgYmVmb3JlIFNTQSwgd2UgY2Fubm90IGluc2VydCBjb250cm9s
IGZsb3cgYmV0d2VlbiBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFy
Z3MgYW5kIHRoZSBsYXN0IFNldEFyZ3VtZW50LiBUaGlzIGlzbid0IGEgcHJvYmxlbSBvbmNlIHdl
IGdldCB0byBERkcKKyAgICAgICAgICAgICAgICAgICAgLy8gU1NBLiBGb3J0dW5hdGVseSwgd2Ug
YWxzbyBoYXZlIG90aGVyIHJlYXNvbnMgZm9yIG5vdCBpbnNlcnRpbmcgY29udHJvbCBmbG93Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBTU0EuCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKAorICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCksIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2UgdGhl
IGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKKyAgICAgICAgICAg
ICAgICAgICAgLy8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3Vt
ZW50IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKKyAgICAgICAgICAgICAgICAg
ICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCisgICAgICAgICAgICAgICAgICAgIGNvdW50
VmFyaWFibGUtPnByZWRpY3QoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICAgICAgY291bnRW
YXJpYWJsZS0+bWVyZ2VJc1Byb2ZpdGFibGVUb1VuYm94KHRydWUpOworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBzZXRBcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJ
bmZvKGNvdW50VmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxvY2FsKCksIHNldEFy
Z3VtZW50Q291bnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChzcGVj
aWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgICAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhpc0FyZ3VtZW50KSwgSW1t
ZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gMTsgYXJndW1lbnQgPCBtYXhOdW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50U3RhcnQgKyBhcmd1bWVudCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1ZSk7IC8vIFdlIGN1cnJl
bnRseSBoYXZlIG5vd2hlcmUgdG8gcHV0IHRoZSB0eXBlIGNoZWNrIG9uIHRoZSBMb2FkVmFyYXJn
cy4gTG9hZFZhcmFyZ3MgaXMgZWZmZWN0ZnVsLCBzbyBhZnRlciBpdCBmaW5pc2hlcywgd2UgY2Fu
bm90IGV4aXQuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZvciBhIHdoaWxlIGl0IGhhZCBiZWVuIG15IGludGVudGlvbiB0byBkbyB0aGluZ3Mg
bGlrZSB0aGlzIGluc2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZWRpY3Rp
b24gaW5qZWN0aW9uIHBoYXNlLiBCdXQgaW4gdGhpcyBjYXNlIGl0J3MgcmVhbGx5IGJlc3QgdG8g
ZG8gaXQgaGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQncyBoZXJl
IHRoYXQgd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHZhcmlhYmxlIGFjY2VzcyBkYXRhcyBmb3IgdGhl
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmxpbmluZyB3ZSdyZSBhYm91dCB0byBkby4K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBT
b21ldGhpbmcgZWxzZSB0aGF0J3MgaW50ZXJlc3RpbmcgaGVyZSBpcyB0aGF0IHdlJ2QgcmVhbGx5
IGxvdmUgdG8gZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmVkaWN0aW9ucyBmcm9t
IHRoZSBhcmd1bWVudHMgbG9hZGVkIGF0IHRoZSBjYWxsc2l0ZSwgcmF0aGVyIHRoYW4gdGhlCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgcmVjZWl2ZWQgaW5zaWRlIHRoZSBj
YWxsZWUuIEJ1dCB0aGF0IHByb2JhYmx5IHdvbid0IG1hdHRlciBmb3IgbW9zdAorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gY2FsbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29k
ZUJsb2NrICYmIGFyZ3VtZW50IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoVmFsdWVQcm9maWxlKiBwcm9maWxlID0gY29kZUJsb2NrLT52YWx1ZVByb2Zp
bGVGb3JBcmd1bWVudChhcmd1bWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2Nr
ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBo
KFNldEFyZ3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSk7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAg
ICBkYXRhTG9nKCJEb25lIGlubGluaW5nIChzaW1wbGUpLlxuIik7CiAgICAgICAgICAgICBkYXRh
TG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCJSZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CkBAIC0xNDM3LDExICsxNTgxLDkgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIGRvIG1vcmUgZGV0YWlsZWQgcG9seXZh
cmlhbnQvcG9seW1vcnBoaWMgcHJvZmlsaW5nOyBhbmQgc2Vjb25kLCBpdCByZWR1Y2VzIGNvbXBp
bGUgdGltZXMgaW4KICAgICAvLyB0aGUgREZHLiBBbmQgYnkgcG9seXZhcmlhbnQgcHJvZmlsaW5n
IHdlIG1lYW4gcG9seXZhcmlhbnQgcHJvZmlsaW5nIG9mICp0aGlzKiBjYWxsLiBOb3RlIHRoYXQK
ICAgICAvLyB3ZSBjb3VsZCBpbXByb3ZlIHRoYXQgYXNwZWN0IG9mIHRoaXMgYnkgZG9pbmcgcG9s
eW1vcnBoaWMgaW5saW5pbmcgYnV0IGhhdmluZyB0aGUgcHJvZmlsaW5nCi0gICAgLy8gYWxzby4g
Q3VycmVudGx5IHdlIG9wdCBhZ2FpbnN0IHRoaXMsIGJ1dCBpdCBjb3VsZCBiZSBpbnRlcmVzdGlu
Zy4gVGhhdCB3b3VsZCByZXF1aXJlIGhhdmluZyBhCi0gICAgLy8gc2VwYXJhdGUgbm9kZSBmb3Ig
Y2FsbCBlZGdlIHByb2ZpbGluZy4KLSAgICAvLyBGSVhNRTogSW50cm9kdWNlIHRoZSBub3Rpb24g
b2YgYSBzZXBhcmF0ZSBjYWxsIGVkZ2UgcHJvZmlsaW5nIG5vZGUuCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjAzMwotICAgIGlmICghaXNGVEwobV9n
cmFwaC5tX3BsYW4ubW9kZSkgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQ2FsbElubGlu
aW5nKCkpIHsKKyAgICAvLyBhbHNvLgorICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9k
ZSkgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nKCkKKyAgICAgICAg
fHwgSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkpIHsKICAgICAgICAgaWYgKHZlcmJv
c2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgKGhhcmQpLlxuIik7
CiAgICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxu
Iik7CkBAIC0xNDgyLDYgKzE2MjQsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZyhOb2RlCiAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigp
LCAiXG4iKTsKICAgICB9CiAgICAgCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJP
ZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAKICAgICAvLyBUaGlzIG1ha2VzIG1lIHdpc2ggdGhh
dCB3ZSB3ZXJlIGluIFNTQSBhbGwgdGhlIHRpbWUuIFdlIG5lZWQgdG8gcGljayBhIHZhcmlhYmxl
IGludG8gd2hpY2ggdG8KICAgICAvLyBzdG9yZSB0aGUgY2FsbGVlIHNvIHRoYXQgaXQgd2lsbCBi
ZSBhY2Nlc3NpYmxlIHRvIGFsbCBvZiB0aGUgYmxvY2tzIHdlJ3JlIGFib3V0IHRvIGNyZWF0ZS4g
V2UKICAgICAvLyBnZXQgYXdheSB3aXRoIGRvaW5nIGFuIGltbWVkaWF0ZS1zZXQgaGVyZSBiZWNh
dXNlIHdlIHdvdWxkbid0IGhhdmUgcGVyZm9ybWVkIGFueSBzaWRlIGVmZmVjdHMKQEAgLTE1MjYs
NyArMTY3MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAg
ICAgICAgYm9vbCBpbmxpbmluZ1Jlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCiAgICAgICAg
ICAgICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1tpXSwg
cmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
bmV4dE9mZnNldCwga2luZCwgQ2FsbGVyTGlua3NNYW51YWxseSwgcHJlZGljdGlvbiwKLSAgICAg
ICAgICAgIGlubGluaW5nQmFsYW5jZSk7CisgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UsIFsm
XSAoQ29kZUJsb2NrKikgeyB9KTsKICAgICAgICAgCiAgICAgICAgIGlmICghaW5saW5pbmdSZXN1
bHQpIHsKICAgICAgICAgICAgIC8vIFRoYXQgZmFpbGVkIHNvIHdlIGxldCB0aGUgYmxvY2sgZGll
LiBOb3RoaW5nIGludGVyZXN0aW5nIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgdG8KQEAgLTE2MTAs
MTQgKzE3NTQsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgo
aW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0
b3I+Citib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJhbmQs
IE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGgubWluKCkKKyAgICAgICAg
aW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFu
ZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID09IDIpIHsgLy8gTWF0aC5taW4oeCkKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIGFkZFRvR3JhcGgo
UGhhbnRvbSwgRWRnZShyZXN1bHQsIE51bWJlclVzZSkpOwogICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOwpAQCAtMTYyNSw2ICsxNzcyLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZQogICAgIH0KICAgICAKICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMykgeyAvLyBNYXRoLm1pbih4LCB5KQor
ICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChvcCwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDEsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCBy
ZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE2MzMs
MTEgKzE3ODEsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+Citib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRy
aW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRD
aGVja3MpCiB7CiAgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKICAgICBjYXNlIEFic0ludHJpbnNp
YzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBN
YXRoLmFicygpCisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJ
bmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQpAQCAtMTY0NSw2ICsxNzk1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKGludAogICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9p
bnRBYnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoQXJpdGhBYnMsIGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgaWYg
KG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIE92ZXJmbG93KSkKICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJm
bG93SW5ERkcpOwpAQCAtMTY1MywxNSArMTgwNCwxNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbnRyaW5zaWMoaW50CiAgICAgfQogCiAgICAgY2FzZSBNaW5JbnRyaW5zaWM6Ci0gICAg
ICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4sIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIHJldHVybiBoYW5k
bGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgaW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgCiAgICAgY2FzZSBN
YXhJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwg
QXJpdGhNYXgsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7Cisg
ICAgICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNYXgsIHJlZ2lz
dGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW5zZXJ0Q2hlY2tzKTsKICAg
ICAgICAgCiAgICAgY2FzZSBTcXJ0SW50cmluc2ljOgogICAgIGNhc2UgQ29zSW50cmluc2ljOgog
ICAgIGNhc2UgU2luSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA9PSAxKSB7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFu
dCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQpAQCAtMTY3MSwxNCArMTgyMywxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbnRyaW5zaWMoaW50CiAgICAgICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0
c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgCisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhTcXJ0LCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDb3NJbnRyaW5z
aWM6CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhDb3MsIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNpbkludHJpbnNpYzoKKyAg
ICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChBcml0aFNpbiwgZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgCkBAIC0xNzAxLDYgKzE4NTYsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOiB7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIE5vZGUq
IGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlLmFzV29y
ZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJl
Z2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRP
cGVyYW5kKSwgYXJyYXlQdXNoKTsKICAgICAgICAgICAgIApAQCAtMTcyNCw2ICsxODgwLDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBjYXNlIEFy
cmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAg
ICAgICAgICAgICBOb2RlKiBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhh
cnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFycmF5UG9wKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTczOCw2ICsxODk1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0g
MikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNlcnRDaGVja3MoKTsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQp
OwogICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwg
T3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFu
ZCksIGdldChpbmRleE9wZXJhbmQpKTsKQEAgLTE3NTAsNiArMTkwOCw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAg
aW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzT3BlcmFuZCA9IHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0
cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdl
dCh0aGlzT3BlcmFuZCksIGdldChpbmRleE9wZXJhbmQpKTsKQEAgLTE3NjEsNiArMTkyMCw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgaWYgKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7
CiAgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdGcm9tQ2hhckNvZGUs
IGdldChpbmRleE9wZXJhbmQpKTsKIApAQCAtMTc3Myw2ICsxOTMzLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCisg
ICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9H
cmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVnRXhwRXhlYyk7CiAgICAgICAgIApAQCAtMTc4
Myw2ICsxOTQ0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAog
ICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAg
ICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBUZXN0LCBPcEluZm8oMCksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lz
dGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCkpKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVn
RXhwRXhlYyk7CiAgICAgICAgIApAQCAtMTc5Miw2ICsxOTU0LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNhc2UgSU11bEludHJpbnNpYzogewogICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBsZWZ0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVy
T2Zmc2V0KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJpZ2h0T3BlcmFuZCA9IHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgTm9kZSogbGVm
dCA9IGdldChsZWZ0T3BlcmFuZCk7CkBAIC0xODAzLDI5ICsxOTY2LDM0IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICBjYXNlIEZSb3VuZEludHJpbnNpYzog
ewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0
ZXJPZmZzZXQpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBh
ZGRUb0dyYXBoKEFyaXRoRlJvdW5kLCBnZXQob3BlcmFuZCkpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIERGR1RydWVJbnRyaW5zaWM6IHsKKyAgICAg
ICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3Bl
cmFuZCksIGpzQ29uc3RhbnQoanNCb29sZWFuKHRydWUpKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBPU1JFeGl0SW50cmluc2ljOiB7CisgICAgICAg
IGluc2VydENoZWNrcygpOwogICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CiAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25z
dGFudCwgT3BJbmZvKG1fY29uc3RhbnRVbmRlZmluZWQpKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJc0ZpbmFsVGllckludHJpbnNpYzogeworICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRP
cGVyYW5kKSwKICAgICAgICAgICAgIGpzQ29uc3RhbnQoanNCb29sZWFuKE9wdGlvbnM6OnVzZUZU
TEpJVCgpID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgOiB0cnVlKSkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0SW50MzJIZWFwUHJlZGlj
dGlvbkludHJpbnNpYzogeworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKSB7CiAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lz
dGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkK
QEAgLTE4MzgsNiArMjAwNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNp
YyhpbnQKICAgICBjYXNlIEZpYXRJbnQ1MkludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBp
ZiAoZW5hYmxlSW50NTIoKSkKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
T3BlcmFuZCksIGFkZFRvR3JhcGgoRmlhdEludDUyLCBnZXQob3BlcmFuZCkpKTsKQEAgLTE4NTEs
OSArMjAyMCwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAg
ICAgfQogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAogICAgIGludCByZXN1bHRPcGVy
YW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgaW50IHJlZ2lzdGVyT2Zmc2V0LAotICAg
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUgdHlwZSkKKyAg
ICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGNv
bnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBpZiAoIWlzVHlwZWRWaWV3
KHR5cGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xODk3LDE1ICsyMDY3LDE3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVR5cGVkQXJyYXlDb24KICAgICAKICAgICBpZiAoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAorCisgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRP
cGVyYW5kKSwKICAgICAgICAgYWRkVG9HcmFwaChOZXdUeXBlZEFycmF5LCBPcEluZm8odHlwZSks
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oCiAgICAg
aW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsCi0gICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCisgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENo
ZWNrcykKIHsKICAgICAvLyBJZiB3ZSBldmVyIGZpbmQgdGhhdCB3ZSBoYXZlIGEgbG90IG9mIGlu
dGVybmFsIGZ1bmN0aW9ucyB0aGF0IHdlIHNwZWNpYWxpemUgZm9yLAogICAgIC8vIHRoZW4gd2Ug
c2hvdWxkIHByb2JhYmx5IGhhdmUgc29tZSBzb3J0IG9mIGhhc2h0YWJsZSBkaXNwYXRjaCwgb3Ig
bWF5YmUgZXZlbgpAQCAtMTkxOCw2ICsyMDkwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ29uc3RhbnRJbnRlcgogICAgICAgICBpZiAoZnVuY3Rpb24tPmdsb2JhbE9iamVjdCgpICE9
IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgewogICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKE5ld0FycmF5V2l0aFNpemUsIE9wSW5mbyhBcnJheVdpdGhVbmRlY2lkZWQpLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwpAQCAtMTkz
Miw2ICsyMTA1LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgog
ICAgIH0KICAgICAKICAgICBpZiAoZnVuY3Rpb24tPmNsYXNzSW5mbygpID09IFN0cmluZ0NvbnN0
cnVjdG9yOjppbmZvKCkpIHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgIAogICAg
ICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPD0gMSkKQEAgLTE5NDcsMTEgKzIxMjIsOSBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgfQogICAgIAogICAgIGZvciAodW5zaWduZWQg
dHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTOyAr
K3R5cGVJbmRleCkgewotICAgICAgICBib29sIHJlc3VsdCA9IGhhbmRsZVR5cGVkQXJyYXlDb25z
dHJ1Y3RvcigKKyAgICAgICAgcmV0dXJuIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcigKICAg
ICAgICAgICAgIHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsCi0gICAgICAgICAgICBpbmRleFRvVHlwZWRBcnJheVR5cGUo
dHlwZUluZGV4KSk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIGluZGV4VG9UeXBlZEFycmF5VHlwZSh0eXBlSW5kZXgpLCBpbnNlcnRD
aGVja3MpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTEzLDQzICszMjg2
LDcwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIGludCB0aGlzUmVnID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAg
ICAgICAgIGludCBhcmd1bWVudHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwog
ICAgICAgICAgICAgaW50IGZpcnN0RnJlZVJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNl0udS5vcGVyYW5kOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoaW5s
aW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhcmd1bWVudHMsIGFy
Z3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0
ZXIoKS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCkpOwotCi0gICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7Ci0KLSAgICAgICAgICAgIHVu
c2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50cy5zaXplKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9m
ZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAg
ICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJh
bWUuCi0gICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOwot
ICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gYXJnQ291bnQ7IC8vIFdlIHdpbGwgYmUgcGFz
c2luZyBzb21lIGFyZ3VtZW50cy4KLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2Fs
bCBmcmFtZSBoZWFkZXIuCisgICAgICAgICAgICBpZiAoYXJndW1lbnRzID09IG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgp
CisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1i
b2xUYWJsZSgpLT5zbG93QXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZSgpLT5p
c1ZhcmFyZ3MoKQorICAgICAgICAgICAgICAgICAgICAmJiAhZmlyc3RWYXJBcmdPZmZzZXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQp
OworCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2FsbEZy
YW1lKCktPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LiBXZSBzdGFydCB3aXRoIHRo
ZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGFk
anVzdCBmb3IgdGhlIHRoaW5ncyB3ZSB3YW50IGluIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICAg
ICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOworICAgICAg
ICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBw
YXNzaW5nIHNvbWUgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNl
dCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyAvLyBXZSB3aWxsIHByZXRlbmQgdG8g
aGF2ZSBhIGNhbGwgZnJhbWUgaGVhZGVyLgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgorICAgICAgICAgICAgICAgICAgICByZWdp
c3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgLXJlZ2lzdGVyT2Zmc2V0KTsKKworICAgICAgICAgICAgICAgICAgICBlbnN1cmVMb2NhbHMo
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0KSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBU
aGUgYnl0ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4gQnV0IHdlJ2xs
IGRvIGl0IGFuZCBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUg
Ynl0ZWNvZGUgaGFkIGRvbmUgaXQuCisgICAgICAgICAgICAgICAgICAgIGludCBuZXh0UmVnaXN0
ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAg
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQo
VmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3Vu
dDsgKythcmd1bWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsIENhbGwsIENv
ZGVGb3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCisgICAgICAgICAgICAg
ICAgICAgICAgICBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEVtaXQgQ2FsbEZvcndhcmRW
YXJhcmdzCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWVhbnMgd2UgY2Fubm90IGlu
bGluZSBmb3J3YXJkZWQgdmFyYXJncyBjYWxscyBpbnNpZGUgYSB2YXJhcmdzCisgICAgICAgICAg
ICAgICAgLy8gY2FsbCBmcmFtZS4gV2Ugd2lsbCBwcm9iYWJseSBmaXggdGhhdCBvbmNlIHdlIGZp
bmFsbHkgZ2V0IHJpZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgb2JqZWN0
IHNwZWNpYWwtY2FzaW5nLgorICAgICAgICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9
IG1fZ3JhcGgubV9jYWxsVmFyYXJnc0RhdGEuYWRkKCk7CisgICAgICAgICAgICAgICAgZGF0YS0+
Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAg
ICAgICAgQ2FsbEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSksIE9wSW5mbyhnZXRQcmVkaWN0
aW9uKCkpLAorICAgICAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZSkp
LCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKSk7CisgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHRS
ZWcuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsK
KyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdo
dC4KLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZigKLSAgICAgICAgICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAotICAgICAgICAg
ICAgICAgIC1yZWdpc3Rlck9mZnNldCk7Ci0KLSAgICAgICAgICAgIGVuc3VyZUxvY2FscygKLSAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCi0gICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNl
dCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2UgaXQKLSAgICAgICAg
ICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNvZGUgaGFkIGRvbmUgaXQuCi0gICAgICAgICAgICBp
bnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplOwotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyks
IGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsg
Kythcmd1bWVudCkKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdp
c3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVk
aWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaGFuZGxlQ2FsbCgKLSAg
ICAgICAgICAgICAgICByZXN1bHQsIENhbGwsIENvZGVGb3JDYWxsLCBPUENPREVfTEVOR1RIKG9w
X2NhbGxfdmFyYXJncyksCi0gICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0
ZXJPZmZzZXQpOworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0
aW9uLCBDYWxsVmFyYXJncywgQ29kZUZvckNhbGwpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0VmFyYXJncywgQ29kZUZvckNvbnN0cnVjdCk7Cisg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgogICAgICAgICAgICAgLy8g
U3RhdGljYWxseSBzcGVjdWxhdGUgZm9yIG5vdy4gSXQgbWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1
bGF0ZS1vbmx5IGpuZXFfcHRyCiAgICAgICAgICAgICAvLyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3
aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUgZ2VuZXJhbCwgc2luY2UgaXQncwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk2LDYgKzk2LDggQEAgaW5saW5lIHZv
aWQgZGVidWdGYWlsKENvZGVCbG9jayogY29kZUJsbwogCiBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJp
bGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1
Y3Rpb24qIHBjKQogeworICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOyAvLyBUaGlzIGZ1bmN0
aW9uIGRvZXMgc29tZSBieXRlY29kZSBwYXJzaW5nLiBPcmRpbmFyaWx5IGJ5dGVjb2RlIHBhcnNp
bmcgcmVxdWlyZXMgdGhlIG93bmluZyBDb2RlQmxvY2suIEl0J3Mgc29ydCBvZiBzdHJhbmdlIHRo
YXQgd2UgZG9uJ3QgdXNlIGl0IGhlcmUgcmlnaHQgbm93LgorICAgIAogICAgIHN3aXRjaCAob3Bj
b2RlSUQpIHsKICAgICBjYXNlIG9wX2VudGVyOgogICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CkBA
IC0xODIsNiArMTg0LDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RAogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgogICAgIGNhc2Ugb3BfY2FsbDoKICAg
ICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNl
IG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKICAgICBj
YXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6
CkBAIC0yMjMsMTQgKzIyNyw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bj
b2RlSUQKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAgICAgfQogCi0gICAg
Y2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVu
dHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3Rlcigp
Lm9mZnNldCgpCi0gICAgICAgICAgICAmJiAhcGNbNl0udS5vcGVyYW5kKQotICAgICAgICAgICAg
cmV0dXJuIENhbklubGluZTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgdGhp
cy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
NzYyNgotICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLQogICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDogCiAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKICAgICBjYXNl
IG9wX25ld19mdW5jOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDkg
Kzg2LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBmdW5jdGlvbkNhcGFiaWxpdAogICAgICAg
ICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbkNvbXBpbGVBbmRJbmxpbmUsIGNvbXB1dGVkQ2Fw
YWJpbGl0eUxldmVsKTsKICAgICBpZiAobWlnaHRDb21waWxlICYmICFtaWdodElubGluZSkKICAg
ICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5Db21waWxlLCBjb21wdXRlZENhcGFiaWxp
dHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENvbXBpbGUgJiYgbWlnaHRJbmxpbmUpCi0gICAgICAg
IHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2FuSW5saW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZl
bCk7Ci0gICAgaWYgKCFtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQorICAgIGlmICghbWln
aHRDb21waWxlKQogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBDYW5ub3RDb21waWxlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3OTk3MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjUsNiArMzY1LDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBj
YXNlIE5hdGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2Fs
bEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIFRv
UHJpbWl0aXZlOgogICAgIGNhc2UgSW46CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNh
ZmU6CkBAIC00MDEsNiArNDA0LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RI
ZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAg
IC8vIFRoaXMgYWN0dWFsbHkgd3JpdGVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsLiBCdXQg
d2hlbiBpdCByZWFkcyB0aGUgYXJyYXksIGl0IGRvZXMKKyAgICAgICAgLy8gc28gaW4gYSB3YXkg
dGhhdCBtYXkgdHJpZ2dlciBnZXR0ZXJzIG9yIHZhcmlvdXMgdHJhcHMuCisgICAgICAgIHJlYWQo
V29ybGQpOworICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOwogICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExv
Y2FsKCkpKSwgbm9kZSk7CkBAIC04ODEsNyArODkxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgREZHX0NSQVNIKGdyYXBoLCBub2RlLCB0
b0NTdHJpbmcoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+
b3AoKSkpLmRhdGEoKSk7CiB9CiAKIGNsYXNzIE5vT3BDbG9iYmVyaXplIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Miw3
ICsyOTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0gQ2FwYWJp
bGl0eUxldmVsIHsKICAgICBDYW5ub3RDb21waWxlLAotICAgIENhbklubGluZSwKICAgICBDYW5D
b21waWxlLAogICAgIENhbkNvbXBpbGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxldmVsTm90
U2V0CkBAIC0zMTIsNyArMzExLDYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBhYmlsaXR5
TGV2ZWwgbAogaW5saW5lIGJvb2wgY2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZlbCkKIHsK
ICAgICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2FzZSBDYW5D
b21waWxlQW5kSW5saW5lOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAt
MzI1LDE0ICszMjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJCb3VuZChD
CiAgICAgc3dpdGNoIChhKSB7CiAgICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKLSAgICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dpdGNoIChi
KSB7Ci0gICAgICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBpbGVBbmRJ
bmxpbmU6Ci0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBjYXNlIENh
bkNvbXBpbGU6CiAgICAgICAgIHN3aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNvbXBpbGU6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAg
ICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRW
YXJhcmdzOgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoK
ICAgICBjYXNlIEJyZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMyw2ICszMTMsMTggQEAgdm9pZCBHcmFw
aDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEs
IFJhd1BvaW50ZXIobm9kZS0+c3RvcmFnZVBvaW50ZXIoKSkpOwogICAgIGlmIChub2RlLT5oYXNP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9k
ZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpKTsKKyAgICBpZiAobm9kZS0+aGFzQ2FsbFZh
cmFyZ3NEYXRhKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImZpcnN0VmFyQXJnT2Zmc2V0
ID0gIiwgbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCktPmZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBp
ZiAobm9kZS0+aGFzTG9hZFZhcmFyZ3NEYXRhKCkpIHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRh
KiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIG91dC5wcmludChjb21t
YSwgInN0YXJ0ID0gIiwgZGF0YS0+c3RhcnQsICIsIGNvdW50ID0gIiwgZGF0YS0+Y291bnQpOwor
ICAgICAgICBpZiAoZGF0YS0+bWFjaGluZVN0YXJ0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG91
dC5wcmludCgiLCBtYWNoaW5lU3RhcnQgPSAiLCBkYXRhLT5tYWNoaW5lU3RhcnQpOworICAgICAg
ICBpZiAoZGF0YS0+bWFjaGluZUNvdW50LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiLCBtYWNoaW5lQ291bnQgPSAiLCBkYXRhLT5tYWNoaW5lQ291bnQpOworICAgICAgICBvdXQu
cHJpbnQoIiwgb2Zmc2V0ID0gIiwgZGF0YS0+b2Zmc2V0LCAiLCBtYW5kYXRvcnlNaW5pbXVtID0g
IiwgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgICAgIG91dC5wcmludCgiLCBsaW1pdCA9
ICIsIGRhdGEtPmxpbWl0KTsKKyAgICB9CiAgICAgaWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChub2RlLT5jb25zdGFu
dCgpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQpAQCAtMTIzMSw2ICsxMjQz
LDM2IEBAIHZvaWQgR3JhcGg6OmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoCiAgICAgY3Jhc2goKnRo
aXMsIHRvQ1N0cmluZygiV2hpbGUgaGFuZGxpbmcgYmxvY2sgIiwgcG9pbnRlckR1bXAoYmxvY2sp
LCAiXG5cbiIpLCBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgYXNzZXJ0aW9uKTsKIH0KIAorVmFsdWVQ
cm9maWxlKiBHcmFwaDo6dmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKKyAgICAgICAgCisgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QXJndW1lbnQpIHsKKyAgICAg
ICAgaWYgKG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHBy
b2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KG5vZGUtPmxvY2FsKCkudG9Bcmd1
bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgICAgICAKKyAgICBp
ZiAobm9kZS0+aGFzTG9jYWwoKnRoaXMpKSB7CisgICAgICAgIGlmIChtX2Zvcm0gPT0gU1NBKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmICghbm9kZS0+bG9jYWwoKS5p
c0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaW50IGFy
Z3VtZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7CisgICAgICAgIGlmIChub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBtX2FyZ3VtZW50c1thcmd1bWVudF0tPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBw
cm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCk7CisgICAgfQor
ICAgICAgICAKKyAgICBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgcmV0
dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgCisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3MiwzMiArNDcyLDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9wcm9maWxlZEJsb2NrLT51bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKTsK
ICAgICB9CiAgICAgCi0gICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9k
ZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
LT5vcCgpID09IEdldEFyZ3VtZW50KQotICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2st
PnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKLSAgICAgICAgICAg
IGlmIChtX2Zvcm0gPT0gU1NBKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgaWYgKCFub2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVu
dCgpOwotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IG1fYXJn
dW1lbnRzW2FyZ3VtZW50XS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxl
Rm9yQXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
bm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAg
VmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSk7CiAgICAgCiAgICAgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9y
KE5vZGUqIG5vZGUpCiAgICAgewpAQCAtODIyLDYgKzc5Nyw4IEBAIHB1YmxpYzoKICAgICBCYWc8
TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11
bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOwogICAgIEJhZzxPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAg
QmFnPENhbGxWYXJhcmdzRGF0YT4gbV9jYWxsVmFyYXJnc0RhdGE7CisgICAgQmFnPExvYWRWYXJh
cmdzRGF0YT4gbV9sb2FkVmFyYXJnc0RhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0
YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6
OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAg
ICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYg
KzEyMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICAgICAg
ICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdv
IGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAg
ICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogCiAjaWYgQ1BVKFg4NikKICAgICAgICAgLy8gRklYTUU6IHNo
b3VsZCB1c2UgdGhlIGNhbGwgYWJzdHJhY3Rpb24sIGJ1dCB0aGlzIGlzIGN1cnJlbnRseSBpbiB0
aGUgU3BlY3VsYXRpdmVKSVQgbGF5ZXIhCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMjAgQEAgc3RydWN0IFN3aXRjaERh
dGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3RydWN0IENhbGxWYXJhcmdz
RGF0YSB7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0OworfTsKKworc3RydWN0IExvYWRWYXJh
cmdzRGF0YSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0OyAvLyBMb2NhbCBmb3IgdGhlIGZp
cnN0IGVsZW1lbnQuCisgICAgVmlydHVhbFJlZ2lzdGVyIGNvdW50OyAvLyBMb2NhbCBmb3IgdGhl
IGNvdW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lU3RhcnQ7CisgICAgVmlydHVhbFJl
Z2lzdGVyIG1hY2hpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBvZmZzZXQ7IC8vIFdoaWNoIGFycmF5
IGVsZW1lbnQgdG8gc3RhcnQgd2l0aC4gVXN1YWxseSB0aGlzIGlzIDAuCisgICAgdW5zaWduZWQg
bWFuZGF0b3J5TWluaW11bTsgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBvbiB0aGUgc3RhY2sg
dGhhdCBtdXN0IGJlIGluaXRpYWxpemVkOyBpZiB0aGUgYXJyYXkgaXMgdG9vIHNob3J0IHRoZW4g
dGhlIG1pc3NpbmcgZWxlbWVudHMgbXVzdCBnZXQgdW5kZWZpbmVkLiBEb2VzIG5vdCBpbmNsdWRl
ICJ0aGlzIi4KKyAgICB1bnNpZ25lZCBsaW1pdDsgLy8gTWF4aW11bSBudW1iZXIgb2YgZWxlbWVu
dHMgdG8gbG9hZC4gSW5jbHVkZXMgInRoaXMiLgorfTsKKwogLy8gVGhpcyB0eXBlIHVzZWQgaW4g
cGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25zdHJ1Y3RvcjsKIC8vIGRp
c3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkgYW4gaW5kZXggaW50byBh
IENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAogLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1l
bnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAgLTg4OCw2ICs5MDIsMzUgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtu
b3duPio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNDYWxsVmFyYXJnc0Rh
dGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIENv
bnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBDYWxsVmFyYXJnc0RhdGEqIGNhbGxWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICBBU1NF
UlQoaGFzQ2FsbFZhcmFyZ3NEYXRhKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENh
bGxWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNMb2Fk
VmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3M7
CisgICAgfQorICAgIAorICAgIExvYWRWYXJhcmdzRGF0YSogbG9hZFZhcmFyZ3NEYXRhKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChoYXNMb2FkVmFyYXJnc0RhdGEoKSk7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8TG9hZFZhcmFyZ3NEYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAK
ICAgICBib29sIGhhc1Jlc3VsdCgpCiAgICAgewogICAgICAgICByZXR1cm4gISFyZXN1bHQoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3
OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICAvKiB0aGlzIG11c3QgYmUgdGhlIGRpcmVjdGx5IHN1YnNlcXVlbnQgcHJvcGVydHkg
cHV0LiBOb3RlIHRoYXQgUHV0QnlWYWwgKi9cCiAgICAgLyogb3Bjb2RlcyB1c2UgVmFyQXJncyBi
ZWF1c2UgdGhleSBtYXkgaGF2ZSB1cCB0byA0IGNoaWxkcmVuLiAqL1wKICAgICBtYWNybyhHZXRC
eVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKExvYWRW
YXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1dEJ5VmFsLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQdXRCeVZhbEFs
aWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKQEAgLTIxNyw2ICsyMTgs
OSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogQ2FsbHMuICovXAog
ICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFz
VmFyQXJncykgXAogICAgIG1hY3JvKENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oQ2FsbFZhcmFyZ3MsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDYWxsRm9yd2FyZFZhcmFy
Z3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDb25zdHJ1
Y3RWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
TmF0aXZlQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJB
cmdzKSBcCiAgICAgbWFjcm8oTmF0aXZlQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NSw2ICsxNTUsMTcgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4
ZQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6
IHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQp
ID0KKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRh
LT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7
IGktLTspIHsKKyAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkpID0KKyAgICAgICAgICAgICAg
ICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIo
ZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpICsgaSkpKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNTIsNyArMTUyLDkgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVs
cGVycwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChpbmxpbmVDYWxsRnJhbWUtPmtpbmQpIHsK
ICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGw6Ci0gICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDb25zdHJ1Y3Q6IHsKKyAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAg
ICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczogewogICAgICAgICAg
ICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPQogICAgICAgICAgICAgICAgIGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxC
eXRlY29kZUluZGV4KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7
CkBAIC0xOTUsMTIgKzE5NywxMyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxI
ZWxwZXJzCiAgICAgICAgIGlmICh0cnVlUmV0dXJuUEMpCiAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRydWVSZXR1cm5QQyksIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKS5v
ZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFz
ZWxpbmVDb2RlQmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNvZGVCbG9jaykp
KTsKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1
bWVudENvdW50KSkpOworI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGppdC5zdG9yZTY0KGNh
bGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogICAgICAgICB1aW50MzJfdCBsb2Nh
dGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNr
OjpBcmd1bWVudENvdW50KSkpOwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3Rh
Y2s6OkNhbGxlZSkpKTsKICAgICAgICAgCkBAIC0yMDgsMTIgKzIxMSwxMCBAQCB2b2lkIHJlaWZ5
SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIGlmIChiYXNlbGluZUNvZGVC
bG9jay0+dXNlc0FyZ3VtZW50cygpKQogICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGJhc2VsaW5lQ29kZUJsb2NrLT5h
cmd1bWVudHNSZWdpc3RlcigpKS5vZmZzZXQoKSkpLCBHUFJJbmZvOjpyZWdUMyk7CiAjZWxzZSAv
LyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICBq
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJs
b2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDb2RlQmxvY2spKSk7CiAgICAgICAg
IGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
Qnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAg
ICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmJlZ2luKCkgKyBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVJ
bnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNr
OjpBcmd1bWVudENvdW50KSkpOwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIGppdC5zdG9y
ZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3Nl
bWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSwg
QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTAxOCw2ICsxMDE4LDI3IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Ob3RpZnlXcml0ZSgKICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwg
IkV4ZWN1dGVkIE5vdGlmeVdyaXRlIik7CiB9CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRz
KTsKKyAgICAKKyAgICByZXR1cm4gc2l6ZU9mVmFyYXJncyhleGVjLCBhcmd1bWVudHMsIGZpcnN0
VmFyQXJnT2Zmc2V0KTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJh
cmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQXJndW1lbnRzLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW5ndGgsIGlu
dDMyX3QgbWFuZGF0b3J5TWluaW11bSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGFy
Z3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKKyAgICAKKyAgICBs
b2FkVmFyYXJncyhleGVjLCBWaXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3Vt
ZW50cywgb2Zmc2V0LCBsZW5ndGgpOworICAgIAorICAgIGZvciAoaW50MzJfdCBpID0gbGVuZ3Ro
OyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytpKQorICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVu
dERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7Cit9CisKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZt
b2QoYSwgYik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI1LDYgKzEyNSw4IEBA
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMKIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3Ry
aW5nKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRl
KiwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOworaW50MzJfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKK3ZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVu
dERlc3QsIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3Qg
bGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pOwogCiBpbnQ2NF90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ29udmVydEJveGVkRG91YmxlVG9JbnQ1MihFbmNvZGVkSlNWYWx1ZSk7CiBp
bnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydERvdWJsZVRvSW50NTIoZG91Ymxl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTc5
OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODcsMTAgKzg3LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAotc3RhdGljIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBoJiBncmFwaCwgY29uc3Qg
Y2hhciogdGV4dCkKK3N0YXRpYyB2b2lkIGR1bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgs
IGNvbnN0IGNoYXIqIHRleHQsIGJvb2wgZm9yY2VEdW1wID0gZmFsc2UpCiB7CiAgICAgR3JhcGhE
dW1wTW9kZSBtb2RlRm9yRmluYWxWYWxpZGF0ZSA9IER1bXBHcmFwaDsKLSAgICBpZiAodmVyYm9z
ZUNvbXBpbGF0aW9uRW5hYmxlZChncmFwaC5tX3BsYW4ubW9kZSkpIHsKKyAgICBpZiAodmVyYm9z
ZUNvbXBpbGF0aW9uRW5hYmxlZChncmFwaC5tX3BsYW4ubW9kZSkgfHwgZm9yY2VEdW1wKSB7CiAg
ICAgICAgIGRhdGFMb2codGV4dCwgIlxuIik7CiAgICAgICAgIGdyYXBoLmR1bXAoKTsKICAgICAg
ICAgbW9kZUZvckZpbmFsVmFsaWRhdGUgPSBEb250RHVtcEdyYXBoOwpAQCAtMzY5LDcgKzM2OSw3
IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgICAg
IHJldHVybiBGYWlsUGF0aDsKICAgICAgICAgfQogCi0gICAgICAgIGR1bXBBbmRWZXJpZnlHcmFw
aChkZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iik7CisgICAgICAgIGR1bXBB
bmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iiwgc2hv
dWxkU2hvd0Rpc2Fzc2VtYmx5KG1vZGUpKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgaGF2ZUxM
Vk07CiAgICAgICAgIFNhZmVwb2ludDo6UmVzdWx0IHNhZmVwb2ludFJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJl
cml6ZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDExICsxMzMs
MjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJl
Q2FsbCkKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIHdyaXRlVG9wKCkK
ICAgICB7CisgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MpIHsKKyAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBub3RlIHRoZSB3cml0ZXMgdG8gdGhlIGxvY2FscyB0aGF0
IHdpbGwgc3RvcmUgdGhlIGFycmF5IGVsZW1lbnRzIGFuZAorICAgICAgICAgICAgLy8gY291bnQu
CisgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOworICAgICAgICAgICAgbV93cml0ZShkYXRhLT5jb3VudCk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykKKyAgICAgICAgICAgICAgICBtX3dy
aXRlKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55
dGhpbmcgc3BlY2lhbCBmb3IgQ2FsbEZvcndhcmRWYXJhcmdzLCBzaW5jZSBpdCByZWFkcworICAg
ICAgICAvLyBvdXIgYXJndW1lbnRzIHRoZSBzYW1lIHdheSB0aGF0IGFueSBlZmZlY3RmdWwgdGhp
bmcgbWlnaHQuCisgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNl
c0FyZ3VtZW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7KQogICAgICAgICAgICAgICAgIG1f
d3JpdGUodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3OTk3MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE4OSw2ICsxODksMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAg
ICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRW
YXJhcmdzOgogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2Fz
ZSBOZXdBcnJheVdpdGhTaXplOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJT
cGlsbFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKIApAQCAt
NjI0LDM4ICs2MjUsMTY5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0
RXEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBi
b29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlzQ2FsbCkKLSAgICAg
ICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVj
dCk7Ci0gICAgCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMg
bm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0LgotICAg
IGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOworICAgIENhbGxMaW5rSW5m
bzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgYm9vbCBpc0NhbGw7CisgICAgYm9vbCBpc1ZhcmFy
Z3M7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDYWxsOgorICAgICAgICBj
YWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbDsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsKKyAg
ICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3Ry
dWN0OgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgICAg
ICBpc0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6
CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAg
aXNDYWxsID0gdHJ1ZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5r
SW5mbzo6Q29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAg
IGlzVmFyYXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNo
aWxkKG5vZGUsIDApOwogICAgIAotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUg
PSBpc0NhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsK
KyAgICAvLyBHb3R0YSBsb2FkIHRoZSBhcmd1bWVudHMgc29tZWhvdy4gVmFyYXJncyBpcyB0cmlj
a2llci4KKyAgICBpZiAoaXNWYXJhcmdzKSB7CisgICAgICAgIC8vIDEpIGdldCB0aGUgYXJndW1l
bnRzCisgICAgICAgIC8vIDIpIGZsdXNoIHJlZ2lzdGVycworICAgICAgICAvLyAzKSBzZXQgdXAg
dGhlIGNhbGwgZnJhbWUKKyAgICAgICAgLy8gNCkgZ2V0IHRoZSBjYWxsZWUgYW5kICJ0aGlzIiBh
bmQgaGFuZGxlIHRoZW0KKyAgICAgICAgLy8gNSkgZmx1c2ggcmVnaXN0ZXJzIGFnYWluCisgICAg
ICAgIAorICAgICAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0Rh
dGEoKTsKKworICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjE7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMjsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIzOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndh
cmRWYXJhcmdzKSB7CisgICAgICAgICAgICAvLyBXZSBhdm9pZCBjYWxsaW5nIGZsdXNoUmVnaXN0
ZXJzKCkgaW5zaWRlIHRoZSBjb250cm9sIGZsb3cgb2YgQ2FsbEZvcndhcmRWYXJhcmdzLgorICAg
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
YXV0byBsb2FkQXJndW1lbnRzR1BSID0gWyZdIChHUFJSZWcgcmVzZXJ2ZWRHUFIpIHsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAg
ICAgICAgIGFyZ3VtZW50c0dQUiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKHJlc2Vy
dmVkR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQUik7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICAgICAgICAgICAgICBsb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgICAg
ICBpZiAocmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAg
dW5sb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzY3JhdGNoR1BSMSA9IEpJ
VENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgcmVzZXJ2ZWRHUFIpOwor
ICAgICAgICAgICAgc2NyYXRjaEdQUjIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihh
cmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCByZXNlcnZlZEdQUik7CisgICAgICAgICAgICBzY3Jh
dGNoR1BSMyA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgc2Ny
YXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCByZXNlcnZlZEdQUik7CisgICAgICAgIH07CisgICAgICAg
IAorICAgICAgICBsb2FkQXJndW1lbnRzR1BSKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSB3aG9sZSByZWdpc3RlciBmaWxlIHRv
IG91cnNlbHZlcywgYW5kIGFyZ3VtZW50c0dQUiBoYXMgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50
cyByZWdpc3Rlci4gU2VsZWN0IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgICAgIAorICAg
ICAgICAvLyBXZSB3aWxsIHVzZSBzY3JhdGNoR1BSMiB0byBwb2ludCB0byBvdXIgc3RhY2sgZnJh
bWUuCisKKyAgICAgICAgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMgPSBtX2ppdC5ncmFwaCgp
Lm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGhhdmVBcmd1bWVudHM7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAg
ICAgICAgICAvLyBEbyB0aGUgaG9ycmlmaWMgZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0
aW1pemF0aW9uLgorICAgICAgICAgICAgLy8gRklYTUU6IGRvIHRoaXMgb3B0aW1pemF0aW9uIGF0
IHRoZSBJUiBsZXZlbCBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IGJ5IHRlc3RpbmcgdGhlCisgICAg
ICAgICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFRoaXMgd2lsbCBoYXBwZW4gb25jZSB3ZSBn
ZXQgcmlkIG9mIHRoZSBhcmd1bWVudHMgbGF6eSBjcmVhdGlvbiBhbmQKKyAgICAgICAgICAgIC8v
IGxhenkgdGVhci1vZmYuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3RhY2tTbG90
cyksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RD
YXNlKG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNo
R1BSMywgbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RW
YXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiA9IHNjcmF0Y2hH
UFIyOworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzID0gbV9qaXQuanVt
cCgpOworICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgICAgICB9CisKKyAg
ICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBSaWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVudHNHUFIg
YW5kIHRoZSByZWdpc3RlciBmaWxlIGlzIGZsdXNoZWQuCisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFy
Z3VtZW50c0dQUiwgbnVtVXNlZFN0YWNrU2xvdHMsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KTsK
KyAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSBoYXZlIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0
aGUgY2FsbGVlIGZyYW1lLCBidXQgd2UndmUgbG9zdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQuCisg
ICAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBhcmd1bWVudHMgb3BlcmFuZCB3aGlsZSBwcmVzZXJ2
aW5nIHRoZSBjYWxsZWUgZnJhbWUuCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2Vk
U3RhY2tTbG90cyksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSht
X2ppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGZhbHNlLCBzY3JhdGNoR1BSMSwgc2NyYXRj
aEdQUjEpOworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXR1cFZhcmFyZ3NGcmFtZSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hH
UFIxLCBhcmd1bWVudHNHUFIsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9y
d2FyZFZhcmFyZ3MpCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0Zs
dXNoZWQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBhcmd1bWVu
dHMgYXJyYXkgYW55bW9yZS4KKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ2FsbEZvcndhcmRW
YXJhcmdzKQorICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChpc0NhbGwpIHsKKyAgICAgICAgICAgIC8vIE5vdyBzZXQgdXAgdGhlICJ0aGlzIiBh
cmd1bWVudC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNBcmd1bWVudCh0aGlzLCBu
b2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncyA/IG5vZGUtPmNoaWxkMigpIDogbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNBcmd1bWVudEdQUiA9IHRoaXNBcmd1
bWVudC5ncHIoKTsKKyAgICAgICAgICAgIHRoaXNBcmd1bWVudC51c2UoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh0aGlzQXJndW1lbnRHUFIsIEpJVENvbXBpbGVy
OjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBi
dXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCisgICAgICAgIC8vIGZvciBpdC4KKyAgICAgICAgaW50
IGR1bW15VGhpc0FyZ3VtZW50ID0gaXNDYWxsID8gMCA6IDE7CiAgICAgCi0gICAgRWRnZSBjYWxs
ZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQo
KV07Ci0gICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVu
Y3Rpb247IHRoZSBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUKLSAgICAvLyBhcmd1bWVudHMu
Ci0gICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAg
ICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247
IHRoZSBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUKKyAgICAgICAgLy8gYXJndW1lbnRzLgor
ICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogICAg
IAotICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50Owor
ICAgICAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsK
ICAgICAKLSAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVt
QXJncyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
bnVtQXJncyksIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKTsKICAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFy
Z3M7IGkrKykgewotICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcodGhpcywgYXJnRWRnZSk7Ci0gICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3By
KCk7Ci0gICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1QYXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0Lmdy
YXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7CisgICAgICAgICAgICBH
UFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOworICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwogICAg
ICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50
U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQo
YXJnR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1
bWVudCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRo
aXMsIGNhbGxlZUVkZ2UpOwogICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0g
ICAgdXNlKGNhbGxlZUVkZ2UpOwotICAgIG1faml0LnN0b3JlNjQoY2FsbGVlR1BSLCBtX2ppdC5j
YWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgY2FsbGVlLnVzZSgpOworICAg
IG1faml0LnN0b3JlNjQoY2FsbGVlR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KEpT
U3RhY2s6OkNhbGxlZSkpOwogICAgIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKQEAgLTY5Miw2
ICs4MjQsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAg
IGNhbGxMaW5rSW5mby0+Y2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIAogICAgIG1faml0LmFk
ZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5rSW5mbyk7
CisgICAgCisgICAgLy8gSWYgd2Ugd2VyZSB2YXJhcmdzLCB0aGVuIGFmdGVyIHRoZSBjYWxscyBh
cmUgZG9uZSwgd2UgbmVlZCB0byByZWVzdGFibGlzaCBvdXIgc3RhY2sgcG9pbnRlci4KKyAgICBp
ZiAoaXNWYXJhcmdzKQorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0Lmdy
YXBoKCkuc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9
CiAKIC8vIENsYW5nIHNob3VsZCBhbGxvdyB1bnJlYWNoYWJsZSBbW2NsYW5nOjpmYWxsdGhyb3Vn
aF1dIGluIHRlbXBsYXRlIGZ1bmN0aW9ucyBpZiBhbnkgdGVtcGxhdGUgZXhwYW5zaW9uIHVzZXMg
aXQKQEAgLTQyMzEsOSArNDM2Nyw1NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2Fz
ZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENv
bnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgCisgICAgICAgIEdQ
UlJlZyBhcmd1bWVudHNHUFI7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNH
UFIgPSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZh
cmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNl
dCk7CisgICAgICAgIAorICAgICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsK
KyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgdW5sb2Nr
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBU
aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHBy
b3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2lu
dCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3Bl
YyBjb21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdv
dWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyBy
aWdodAorICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIEdQ
UlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQorICAgICAgICAgICAgSklUQ29tcGlsZXI6
OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c0dQUik7
CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOworICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNl
KCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAgICAgICBhcmdDb3VudEluY2x1ZGluZ1RoaXNH
UFIsCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0KSkpOworICAgICAg
ICAKKyAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIsIEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICAKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgZGF0YS0+bWFjaGluZVN0YXJ0
Lm9mZnNldCgpLCBhcmd1bWVudHNHUFIsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAgICAKKyAgICAgICAgbm9SZXN1
bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDcmVh
dGVBY3RpdmF0aW9uOiB7CiAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwg
IW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKQEAgLTQz
MzgsOSArNDUyMSwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwotICAg
ICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIGlm
IChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAh
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSwK
KyAgICAgICAgICAgICAgICByZXN1bHRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlm
ICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1l
bnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIH0KICAg
ICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtNDM1NCwyMCArNDU0OCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAg
ICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KAogICAgICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKSwK
ICAgICAgICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBW
aXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdp
c3RlciksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
Ly8gRklYTUU6IHRoZSBzbG93IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2Fy
ZCBzcGVjdWxhdGlvbiB0aGF0IHRoZQotICAgICAgICAvLyByZXN1bHQgaXMgYW4gaW50ZWdlci4g
Rm9yIG5vdyB3ZSBwb3N0cG9uZSB0aGUgc3BlY3VsYXRpb24gYnkgaGF2aW5nIHRoaXMgcmV0dXJu
Ci0gICAgICAgIC8vIGEgSlNWYWx1ZS4KLSAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIGNyZWF0
ZWQsIHRoaXMsIG9wZXJhdGlvbkdldEFyZ3VtZW50c0xlbmd0aCwgcmVzdWx0R1BSLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3OCw3ICs1NzgsNiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgLy8gVXNlZCB0byBB
U1NFUlQgZmx1c2hSZWdpc3RlcnMoKSBoYXMgYmVlbiBjYWxsZWQgcHJpb3IgdG8KICAgICAvLyBj
YWxsaW5nIG91dCBmcm9tIEpJVCBjb2RlIHRvIGEgQyBoZWxwZXIgZnVuY3Rpb24uCiAgICAgYm9v
bCBpc0ZsdXNoZWQoKQpAQCAtNTkzLDcgKzU5Miw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQo
Tm9kZSogbm9kZSkKQEAgLTExMDksNiArMTEwNywyNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAg
IH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VK
Wlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQgYXJnMiwg
dW5zaWduZWQgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSk7Cisg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihGX0pJVE9wZXJhdGlvbl9FRkpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgeworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3Rl
ZEltbTMyKGFyZzMpLCBhcmc0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcyKQorICAgIHsKKyAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcy
KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FWkpaWlogb3BlcmF0aW9uLCB1bnNpZ25lZCBhcmcxLCBH
UFJSZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQsIHVuc2lnbmVkIGFyZzUpCisg
ICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bTMyKGFyZzEpLCBhcmcyLCBUcnVzdGVkSW1tMzIoYXJnMyksIGFyZzQsIFRydXN0ZWRJbW0zMihh
cmc1KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbik7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgogICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwg
Tm9SZXN1bHRUYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5
b3V0UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RhY2tMYXlvdXRQaGFzZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDcg
KzU2LDcgQEAgcHVibGljOgogICAgICAgICBCaXRWZWN0b3IgdXNlZExvY2FsczsKICAgICAgICAg
CiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgZnJvbSBJ
Ui4KLSAgICAgICAgYm9vbCBoYXNHZXRMb2NhbFVubGlua2VkID0gZmFsc2U7CisgICAgICAgIGJv
b2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CiAgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwog
ICAgICAgICAgICAgaWYgKCFibG9jaykKQEAgLTgxLDcgKzgxLDIyIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KG9wZXJh
bmQudG9Mb2NhbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzR2V0TG9jYWxVbmxpbmtlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAg
ICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNvdW50LmlzTG9jYWwoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGRhdGEtPmNvdW50LnRvTG9jYWwo
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2FsKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVzIG9uIHRoZSBj
b250aWd1aXR5IG9mIHN0YWNrIGxheW91dAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNz
aWdubWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVhbFJlZ2lzdGVy
KGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2FsKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTsp
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdp
c3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0gLy8gdGhlIGVsc2UgY2FzZSBzaG91bGRuJ3QgaGFwcGVuLgorICAgICAgICAgICAg
ICAgICAgICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTEz
LDYgKzEyOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChhcmd1bWVu
dHNSZWdpc3Rlci50b0xvY2FsKCkpOwogICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQodW5tb2Rp
ZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKS50b0xvY2FsKCkpOwogICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkg
eworICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKKyAgICAg
ICAgICAgICAgICAgICAgSlNTdGFjazo6QXJndW1lbnRDb3VudCArIGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykgewogICAgICAgICAgICAgICAgIHVzZWRMb2Nh
bHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpICsKQEAgLTE0OCwyNCArMTY4LDIxIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xvY2FsXSA9PSBVSU5UX01BWCkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFy
aWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAg
ICAgICAgICAgYWxsb2NhdGlvblt2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCldKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJp
YWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChjb2RlQmxv
Y2soKS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnRzUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAg
ICBhbGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpLnRvTG9jYWwoKV0p
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0KKyAgICAg
ICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lz
dGVyKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblsKLSAgICAgICAgICAgICAgICAgICAgdW5t
b2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJs
b2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLnRvTG9jYWwoKV0pCisgICAgICAgICAgICAgICAg
YXNzaWduKGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihjb2RlQmxvY2so
KS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFy
Z3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICBjb2RlQmxv
Y2soKS0+c2V0QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCktPnVuY2hlY2tlZEFjdGl2YXRpb25S
ZWdpc3RlcigpLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldEFjdGl2
YXRpb25SZWdpc3RlcigKLSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChh
bGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS50b0xvY2FsKCldKSk7
CisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5hY3RpdmF0
aW9uUmVnaXN0ZXIoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIHJl
Z2lzdGVyIGlzIG5ldmVyIHZhbGlkIGZvciBERkcgY29kZSBibG9ja3MuCkBAIC0xNzYsMTUgKzE5
MywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAg
ICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bbV9ncmFwaC5h
cmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpLnRvTG9jYWwoKV0pOworICAgICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSBhc3NpZ24oCisg
ICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJG
b3IoaW5saW5lQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgK
LSAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblt1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpLnRvTG9jYWwoKV0pCisg
ICAgICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKSkK
ICAgICAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAg
ICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFz
c2lnbigKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAx
OykgewogICAgICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFw
aC5tX2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50
UG9zaXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAgLTIyNyw5ICsyNDgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKTsKICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCk7
IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXSA9IHNsb3dB
cmd1bWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBW
aXJ0dWFsUmVnaXN0ZXIoc2xvd0FyZ3VtZW50c1tpXS5pbmRleCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChyZWcuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0Fy
Z3VtZW50c1tpXS5pbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bcmVn
LnRvTG9jYWwoKV0pLm9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1l
bnRzW2ldLmluZGV4ID0gYXNzaWduKGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihzbG93QXJn
dW1lbnRzW2ldLmluZGV4KSkub2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Nsb3dBcmd1bWVudHMgPSBXVEY6Om1vdmUo
bmV3U2xvd0FyZ3VtZW50cyk7CkBAIC0yMzcsNyArMjU2LDcgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICAvLyBGaXggR2V0TG9jYWxVbmxpbmtlZCdzIHZhcmlhYmxlIHJl
ZmVyZW5jZXMuCi0gICAgICAgIGlmIChoYXNHZXRMb2NhbFVubGlua2VkKSB7CisgICAgICAgIGlm
IChoYXNOb2Rlc1RoYXROZWVkRml4dXApIHsKICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
ICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQpAQCAtMjQ2LDEwICsyNjUsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAg
ICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9u
W29wZXJhbmQudG9Mb2NhbCgpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRV
bmxpbmtlZE1hY2hpbmVMb2NhbChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldFVubGlua2VkTWFjaGluZUxvY2FsKGFzc2lnbihhbGxvY2F0aW9uLCBub2RlLT51bmxp
bmtlZExvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFy
Z3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+Y291
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZVN0YXJ0ID0gYXNzaWdu
KGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI2
Miw2ICsyODUsMjAgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQorCitwcml2YXRlOgorICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgVmVjdG9y
PHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHNyYykKKyAgICB7CisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBzcmM7CisgICAgICAgIGlmIChyZXN1bHQuaXNM
b2NhbCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxvY2F0aW9u
W3Jlc3VsdC50b0xvY2FsKCldOworICAgICAgICAgICAgaWYgKG15QWxsb2NhdGlvbiA9PSBVSU5U
X01BWCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChteUFsbG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQogfTsKIAogYm9vbCBwZXJmb3JtU3RhY2tMYXlvdXQoR3JhcGgmIGdyYXBoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE3OTk3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDU1LDYgKzQ1NSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGFjdHMgbGlrZSBhIHJl
c2V0LiBJdCdzIG9rIHRvIGhhdmUgYSBzZWNvbmQgR2V0TG9jYWwgZm9yIGEgbG9jYWwgaW4gdGhl
IHNhbWUKKyAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2sgaWYgd2UgaGFkIGEgU2V0QXJndW1l
bnQgZm9yIHRoYXQgbG9jYWwuCisgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIHNl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNzcsNiArNzcsOSBAQCBzdGF0aWMgaW5saW5lIExUeXBlIHN0cnVjdFR5cGUoTENvbnRl
eHQgCiAgICAgcmV0dXJuIHN0cnVjdFR5cGUoY29udGV4dCwgZWxlbWVudHMsIDIsIHBhY2tpbmcp
OwogfQogCisvLyBGSVhNRTogTWFrZSB0aGUgVmFyaWFkaWNpdHkgYXJndW1lbnQgbm90IGJlIHRo
ZSBsYXN0IGFyZ3VtZW50IHRvIGZ1bmN0aW9uVHlwZSgpIHNvIHRoYXQgdGhpcyBmdW5jdGlvbgor
Ly8gY2FuIHVzZSBDKysxMSB2YXJpYWRpYyB0ZW1wbGF0ZXMKKy8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE1NzUKIGVudW0gVmFyaWFkaWNpdHkgeyBOb3RWYXJp
YWRpYywgVmFyaWFkaWMgfTsKIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBl
IHJldHVyblR5cGUsIGNvbnN0IExUeXBlKiBwYXJhbVR5cGVzLCB1bnNpZ25lZCBwYXJhbUNvdW50
LCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSkKIHsKQEAgLTExMCw2ICsxMTMsMTYgQEAgc3RhdGlj
IGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcgogICAgIExUeXBlIHBhcmFtVHlwZXNb
XSA9IHsgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00IH07CiAgICAgcmV0dXJuIGZ1bmN0
aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCA0LCB2YXJpYWRpY2l0eSk7CiB9CitzdGF0
aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBMVHlwZSBwYXJh
bTEsIExUeXBlIHBhcmFtMiwgTFR5cGUgcGFyYW0zLCBMVHlwZSBwYXJhbTQsIExUeXBlIHBhcmFt
NSwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKK3sKKyAgICBMVHlwZSBw
YXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01IH07
CisgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCA1LCB2YXJp
YWRpY2l0eSk7Cit9CitzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1
cm5UeXBlLCBMVHlwZSBwYXJhbTEsIExUeXBlIHBhcmFtMiwgTFR5cGUgcGFyYW0zLCBMVHlwZSBw
YXJhbTQsIExUeXBlIHBhcmFtNSwgTFR5cGUgcGFyYW02LCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0
eSA9IE5vdFZhcmlhZGljKQoreworICAgIExUeXBlIHBhcmFtVHlwZXNbXSA9IHsgcGFyYW0xLCBw
YXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJhbTUsIHBhcmFtNiB9OworICAgIHJldHVybiBmdW5j
dGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgNiwgdmFyaWFkaWNpdHkpOworfQogCiBz
dGF0aWMgaW5saW5lIExUeXBlIHR5cGVPZihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGxsdm0tPlR5
cGVPZih2YWx1ZSk7IH0KIApAQCAtMjk4LDQxICszMTEsMTMgQEAgc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRDYWxsKExCdWlsZGVyIAogewogICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwg
ZnVuY3Rpb24sICZhcmcxLCAxKTsKIH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChM
QnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJn
MikKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyIH07Ci0gICAgcmV0dXJuIGJ1
aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgMik7Ci19Ci1zdGF0aWMgaW5saW5lIExW
YWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUg
YXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczKQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7
IGFyZzEsIGFyZzIsIGFyZzMgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0
aW9uLCBhcmdzLCAzKTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRl
ciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZh
bHVlIGFyZzMsIExWYWx1ZSBhcmc0KQordGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KK0xWYWx1
ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJn
MSwgQXJncy4uLiBhcmdzKQogewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFy
ZzMsIGFyZzQgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdz
LCA0KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVy
LCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMs
IExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSkKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcx
LCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVy
LCBmdW5jdGlvbiwgYXJncywgNSk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFy
ZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2KQot
ewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFy
ZzYgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA2KTsK
LX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFs
dWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1
ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1ZSBhcmc3KQotewotICAgIExW
YWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcg
fTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA3KTsKLX0K
LXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUg
ZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBh
cmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1ZSBhcmc3LCBMVmFsdWUgYXJnOCkK
LXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBh
cmc2LCBhcmc3LCBhcmc4IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlv
biwgYXJncywgOCk7CisgICAgTFZhbHVlIGFyZ3NBcnJheVtdID0geyBhcmcxLCBhcmdzLi4uIH07
CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJnc0FycmF5LCBzaXpl
b2YoYXJnc0FycmF5KSAvIHNpemVvZihMVmFsdWUpKTsKIH0KKwogc3RhdGljIGlubGluZSB2b2lk
IHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oTFZhbHVlIGluc3RydWN0aW9uLCBMQ2Fs
bENvbnYgY2FsbGluZ0NvbnZlbnRpb24pIHsgbGx2bS0+U2V0SW5zdHJ1Y3Rpb25DYWxsQ29udihp
bnN0cnVjdGlvbiwgY2FsbGluZ0NvbnZlbnRpb24pOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBi
dWlsZEV4dHJhY3RWYWx1ZShMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgYWdnVmFsLCB1bnNpZ25l
ZCBpbmRleCkgeyByZXR1cm4gbGx2bS0+QnVpbGRFeHRyYWN0VmFsdWUoYnVpbGRlciwgYWdnVmFs
LCBpbmRleCwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFNlbGVjdChMQnVpbGRl
ciBidWlsZGVyLCBMVmFsdWUgY29uZGl0aW9uLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtl
bikgeyByZXR1cm4gbGx2bS0+QnVpbGRTZWxlY3QoYnVpbGRlciwgY29uZGl0aW9uLCB0YWtlbiwg
bm90VGFrZW4sICIiKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCw2ICsx
MjAsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBD
b25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoK
ICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2Fz
ZSBWYWx1ZVRvSW50MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCkBAIC0xMjgsNiArMTI4LDIwIEBAIHN0YXRp
YyB2b2lkIGR1bXBEYXRhU2VjdGlvbihEYXRhU2VjdGlvbioKICAgICB9CiB9CiAKK3N0YXRpYyBp
bnQgb2Zmc2V0T2ZTdGFja1JlZ2lvbihTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwLCB1
aW50MzJfdCBzdGFja21hcElEKQoreworICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRv
ciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhY2ttYXBJRCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
aXRlciAhPSByZWNvcmRNYXAuZW5kKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVl
LnNpemUoKSA9PSAxKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZVswXS5sb2NhdGlv
bnMuc2l6ZSgpID09IDEpOworICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24gPQorICAgICAg
ICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKG51bGxwdHIsIGl0ZXItPnZhbHVlWzBdLmxvY2F0aW9u
c1swXSk7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5raW5kKCkgPT0gTG9j
YXRpb246OlJlZ2lzdGVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExvY2F0aW9uLmdw
cigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
KGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgcmV0
dXJuIGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgLyBzaXplb2YoUmVnaXN0ZXIpOworfQorCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBEZXNjcmlwdG9yVHlwZT4KIHZvaWQgZ2VuZXJhdGVJQ0Zhc3RQYXRo
KAogICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEdlbmVyYXRlZEZ1bmN0
aW9uIGdlbmVyYXRlZEZ1bmN0aW9uLApAQCAtMjQzLDYgKzI1NywzMiBAQCBzdGF0aWMgUmVnaXN0
ZXJTZXQgdXNlZFJlZ2lzdGVyc0Zvcihjb25zCiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0KHJlY29y
ZC51c2VkUmVnaXN0ZXJTZXQoKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENhbGxUeXBlPgordm9pZCBhZGp1c3RDYWxsSUNzRm9y
U3RhY2ttYXBzKFZlY3RvcjxDYWxsVHlwZT4mIGNhbGxzLCBTdGFja01hcHM6OlJlY29yZE1hcCYg
cmVjb3JkTWFwKQoreworICAgIC8vIEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVk
IHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUgUEMgaW4gTExWTQorICAgIC8vIGdl
bmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0IExM
Vk0gZGlkbid0IGdlbmVyYXRlLgorCisgICAgVmVjdG9yPENhbGxUeXBlPiBvbGRDYWxsczsKKyAg
ICBvbGRDYWxscy5zd2FwKGNhbGxzKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ2FsbFR5cGUmIGNhbGwgPSBvbGRD
YWxsc1tpXTsKKyAgICAgICAgCisgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRv
ciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2FsbC5zdGFja21hcElEKCkpOworICAgICAgICBpZiAo
aXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgQ2FsbFR5cGUgY29weSA9IGNhbGw7CisgICAgICAgICAgICBjb3B5
Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZVtqXS5pbnN0cnVjdGlvbk9mZnNldDsK
KyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChjb3B5KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0ZDo6c29ydChjYWxscy5iZWdpbigpLCBjYWxscy5lbmQoKSk7Cit9CisKIHN0YXRpYyB2b2lk
IGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICBTdGF0ZSYgc3RhdGUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVRDb2RlKiBqaXRDb2RlLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0
ZWRGdW5jdGlvbiwKICAgICBTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwLCBib29sIGRp
ZFNlZVVud2luZEluZm8pCkBAIC0yNTEsMTYgKzI5MSwxNCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgVk0mIHZtID0gZ3JhcGgubV92bTsKICAgICBTdGFj
a01hcHMgc3RhY2ttYXBzID0gaml0Q29kZS0+c3RhY2ttYXBzOwogICAgIAotICAgIFN0YWNrTWFw
czo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuY2FwdHVy
ZWRTdGFja21hcElEKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyICE9IHJlY29yZE1hcC5lbmQo
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWUuc2l6ZSgpID09IDEpOwotICAgIFJF
TEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlWzBdLmxvY2F0aW9ucy5zaXplKCkgPT0gMSk7Ci0gICAg
TG9jYXRpb24gY2FwdHVyZWRMb2NhdGlvbiA9Ci0gICAgICAgIExvY2F0aW9uOjpmb3JTdGFja21h
cHMoJmppdENvZGUtPnN0YWNrbWFwcywgaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zWzBdKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExvY2F0aW9uLmtpbmQoKSA9PSBMb2NhdGlvbjo6UmVn
aXN0ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24uZ3ByKCkgPT0gR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKCEoY2FwdHVyZWRM
b2NhdGlvbi5hZGRlbmQoKSAlIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICBpbnQzMl90IGxvY2Fs
c09mZnNldCA9IGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgLyBzaXplb2YoUmVnaXN0ZXIpICsg
Z3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOworICAgIGludCBsb2NhbHNPZmZzZXQgPQorICAgICAg
ICBvZmZzZXRPZlN0YWNrUmVnaW9uKHJlY29yZE1hcCwgc3RhdGUuY2FwdHVyZWRTdGFja21hcElE
KSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICAKKyAgICBpbnQgdmFyYXJnc1NwaWxs
U2xvdHNPZmZzZXQ7CisgICAgaWYgKHN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCAh
PSBVSU5UX01BWCkKKyAgICAgICAgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQgPSBvZmZzZXRPZlN0
YWNrUmVnaW9uKHJlY29yZE1hcCwgc3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEKTsK
KyAgICBlbHNlCisgICAgICAgIHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0ID0gMDsKICAgICAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7IGkt
LTspIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBncmFwaC5t
X2lubGluZVZhcmlhYmxlRGF0YVtpXS5pbmxpbmVDYWxsRnJhbWU7CkBAIC0zMzYsNyArMzc0LDcg
QEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAg
aWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJIYW5kbGluZyBPU1Igc3RhY2ttYXAgIyIsIGV4aXQubV9zdGFja21hcElELCAiIGZvciAiLCBl
eGl0Lm1fY29kZU9yaWdpbiwgIlxuIik7CiAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChleGl0Lm1fc3RhY2ttYXBJRCk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRN
YXAuZmluZChleGl0Lm1fc3RhY2ttYXBJRCk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNv
cmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4K
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM3NSw3ICs0MTMsNyBAQCBzdGF0aWMgdm9p
ZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIEdl
dEJ5SWQgc3RhY2ttYXAgIyIsIGdldEJ5SWQuc3RhY2ttYXBJRCgpLCAiXG4iKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2ttYXBJ
RCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3Rh
Y2ttYXBJRCgpKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgewog
ICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtNDEyLDcgKzQ1MCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFz
ZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVk
KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgUHV0QnlJZCBzdGFja21hcCAj
IiwgcHV0QnlJZC5zdGFja21hcElEKCksICJcbiIpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpdGVyID0gcmVjb3JkTWFwLmZpbmQocHV0QnlJZC5zdGFja21hcElEKCkpOworICAgICAgICAg
ICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQocHV0QnlJZC5zdGFja21hcElEKCkpOwogICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gSXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00
NDQsMTQgKzQ4MiwxMyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMo
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHN0YXRlLmNoZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgQ2hlY2tJbkRlc2Ny
aXB0b3ImIGNoZWNrSW4gPSBzdGF0ZS5jaGVja0luc1tpXTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJIYW5kbGluZyBjaGVja0luIHN0YWNrbWFwICMiLCBjaGVja0luLnN0YWNrbWFwSUQo
KSwgIlxuIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmlu
ZChjaGVja0luLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRN
YXAuZmluZChjaGVja0luLnN0YWNrbWFwSUQoKSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSBy
ZWNvcmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91
dC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ4MCw3ICs1MTcsNiBAQCBzdGF0aWMg
dm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgY2hlY2tJ
bi5tX2dlbmVyYXRvcnMuYXBwZW5kKENoZWNrSW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNsb3dDYWxs
LCBiZWdpbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgCiAgICAgICAg
IGV4Y2VwdGlvblRhcmdldC5saW5rKCZzbG93UGF0aEpJVCk7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGV4Y2VwdGlvbkp1bXAgPSBzbG93UGF0aEpJVC5qdW1wKCk7CkBAIC01MDMsMjkg
KzUzOSwxMSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmNoZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgZ2VuZXJhdGVDaGVja0luSUNGYXN0UGF0aCgKICAgICAgICAgICAgICAgICBzdGF0
ZSwgY29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBzdGF0ZS5jaGVja0lu
c1tpXSwKLSAgICAgICAgICAgICAgICBzaXplT2ZDaGVja0luKCkpOyAKKyAgICAgICAgICAgICAg
ICBzaXplT2ZJbigpKTsgCiAgICAgICAgIH0gCiAgICAgfQogICAgIAotICAgIC8vIEhhbmRsaW5n
IEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBi
eSB0aGUgUEMgaW4gTExWTQotICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmly
c3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgotICAgIFZlY3Rv
cjxKU0NhbGw+IG9sZENhbGxzID0gc3RhdGUuanNDYWxsczsKLSAgICBzdGF0ZS5qc0NhbGxzLnJl
c2l6ZSgwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkQ2FsbHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgSlNDYWxsJiBjYWxsID0gb2xkQ2FsbHNbaV07Ci0gICAgICAgIAotICAg
ICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5k
KGNhbGwuc3RhY2ttYXBJRCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgp
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBKU0NhbGwgY29weSA9
IGNhbGw7Ci0gICAgICAgICAgICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1
ZVtqXS5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgICAgIHN0YXRlLmpzQ2FsbHMuYXBwZW5k
KGNvcHkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6c29ydChzdGF0ZS5qc0Nh
bGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5kKCkpOworICAgIGFkanVzdENhbGxJQ3NGb3JT
dGFja21hcHMoc3RhdGUuanNDYWxscywgcmVjb3JkTWFwKTsKICAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykgewogICAgICAgICBKU0NhbGwmIGNh
bGwgPSBzdGF0ZS5qc0NhbGxzW2ldOwpAQCAtNTQ3LDkgKzU2NSwzMiBAQCBzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1
ZmZlcik7CiAgICAgfQogICAgIAorICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUu
anNDYWxsVmFyYXJnc2VzLCByZWNvcmRNYXApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9
IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgSlNDYWxsVmFy
YXJncyYgY2FsbCA9IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nlc1tpXTsKKyAgICAgICAgCisgICAgICAg
IENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7CisgICAgICAgIGNhbGwu
ZW1pdChmYXN0UGF0aEpJVCwgZ3JhcGgsIHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0KTsKKyAgICAg
ICAgCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJh
dGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OworICAgICAgICBzaXplX3Qg
c2l6ZU9mSUMgPSBzaXplT2ZJQ0ZvcihjYWxsLm5vZGUoKSk7CisKKyAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKHZtLCBmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZJQyk7CisgICAg
ICAgIGlmICghbGlua0J1ZmZlci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkZh
aWxlZCB0byBpbnNlcnQgaW5saW5lIGNhY2hlIGZvciB2YXJhcmdzIGNhbGwgKHNwZWNpZmljYWxs
eSwgIiwgR3JhcGg6Om9wTmFtZShjYWxsLm5vZGUoKS0+b3AoKSksICIpIGJlY2F1c2Ugd2UgdGhv
dWdodCB0aGUgc2l6ZSB3b3VsZCBiZSAiLCBzaXplT2ZJQywgIiBidXQgaXQgZW5kZWQgdXAgYmVp
bmcgIiwgZmFzdFBhdGhKSVQubV9hc3NlbWJsZXIuY29kZVNpemUoKSwgIiBwcmlvciB0byBjb21w
YWN0aW9uLlxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QXNzZW1ibGVyVHlw
ZV9UOjpmaWxsTm9wcygKKyAgICAgICAgICAgIHN0YXJ0T2ZJQyArIGxpbmtCdWZmZXIuc2l6ZSgp
LCBzaXplT2ZJQyAtIGxpbmtCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGNhbGwu
bGluayh2bSwgbGlua0J1ZmZlciwgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlu
a0J1ZmZlci0+ZW50cnlwb2ludCgpKTsKKyAgICB9CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAKLSAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3Rh
dGUuaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQpOworICAgIGF1dG8gaXRl
ciA9IHJlY29yZE1hcC5maW5kKHN0YXRlLmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFj
a21hcElEKTsKICAgICAvLyBJdCdzIHNvcnQgb2YgcmVtb3RlbHkgcG9zc2libGUgdGhhdCB3ZSB3
b24ndCBoYXZlIGFuIGluLWJhbmQgZXhjZXB0aW9uIGhhbmRsaW5nCiAgICAgLy8gcGF0aCwgZm9y
IHNvbWUga2luZHMgb2YgZnVuY3Rpb25zLgogICAgIGlmIChpdGVyICE9IHJlY29yZE1hcC5lbmQo
KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExICsyOCwx
NCBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5j
bHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFj
ZSBERkc7CisKIC8vIFRoZSBkZWZhdWx0IHNpemVzIGFyZSB4ODYtNjQtc3BlY2lmaWMsIGFuZCB3
ZXJlIGZvdW5kIGVtcGlyaWNhbGx5LiBUaGV5IGhhdmUgdG8gY292ZXIgdGhlIHdvcnN0CiAvLyBw
b3NzaWJsZSBjb21iaW5hdGlvbiBvZiByZWdpc3RlcnMgbGVhZGluZyB0byB0aGUgbGFyZ2VzdCBw
b3NzaWJsZSBlbmNvZGluZyBvZiBlYWNoIGluc3RydWN0aW9uIGluCiAvLyB0aGUgSUMuCkBAIC02
MSwxNyArNjQsMzQgQEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQogI2VuZGlmCiB9CiAKLXNpemVf
dCBzaXplT2ZDaGVja0luKCkKK3NpemVfdCBzaXplT2ZDYWxsKCkKIHsKICNpZiBDUFUoQVJNNjQp
Ci0gICAgcmV0dXJuIDQ7CisgICAgcmV0dXJuIDU2OwogI2Vsc2UKLSAgICByZXR1cm4gNTsgCisg
ICAgcmV0dXJuIDUzOwogI2VuZGlmCiB9CiAKK3NpemVfdCBzaXplT2ZDYWxsVmFyYXJncygpCit7
CisjaWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiA1NjsKKyNlbHNlCisgICAgcmV0dXJuIDI2OTsK
KyNlbmRpZgorfQogCi1zaXplX3Qgc2l6ZU9mQ2FsbCgpCitzaXplX3Qgc2l6ZU9mQ2FsbEZvcndh
cmRWYXJhcmdzKCkKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDU2OworI2Vsc2UKKyAg
ICByZXR1cm4gMzcyOworI2VuZGlmCit9CisKK3NpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdz
KCkKIHsKICNpZiBDUFUoQVJNNjQpCiAgICAgcmV0dXJuIDU2OwpAQCAtODAsNiArMTAwLDM4IEBA
IHNpemVfdCBzaXplT2ZDYWxsKCkKICNlbmRpZgogfQogCitzaXplX3Qgc2l6ZU9mSW4oKQorewor
I2lmIENQVShBUk02NCkKKyAgICByZXR1cm4gNDsKKyNlbHNlCisgICAgcmV0dXJuIDU7IAorI2Vu
ZGlmCit9CisKK3NpemVfdCBzaXplT2ZJQ0ZvcihOb2RlKiBub2RlKQoreworICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgcmV0dXJuIHNpemVPZkdl
dEJ5SWQoKTsKKyAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIHJldHVybiBzaXplT2ZQdXRCeUlk
KCk7CisgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICByZXR1cm4g
c2l6ZU9mQ2FsbCgpOworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIHJldHVybiBzaXpl
T2ZDYWxsVmFyYXJncygpOworICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBy
ZXR1cm4gc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCk7CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgorICAgICAgICByZXR1cm4gc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpOworICAgIGNhc2Ug
SW46CisgICAgICAgIHJldHVybiBzaXplT2ZJbigpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
bGluZUNhY2hlU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEyICsy
OCwyMyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgREZHIHsKK3N0cnVjdCBOb2Rl
OworfQorCituYW1lc3BhY2UgRlRMIHsKIAogc2l6ZV90IHNpemVPZkdldEJ5SWQoKTsKIHNpemVf
dCBzaXplT2ZQdXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mQ2FsbCgpOwotc2l6ZV90IHNpemVPZkNo
ZWNrSW4oKTsKK3NpemVfdCBzaXplT2ZDYWxsVmFyYXJncygpOworc2l6ZV90IHNpemVPZkNhbGxG
b3J3YXJkVmFyYXJncygpOworc2l6ZV90IHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsKK3NpemVf
dCBzaXplT2ZJbigpOworCitzaXplX3Qgc2l6ZU9mSUNGb3IoREZHOjpOb2RlKik7CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk3LDEwICs5NywxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwg
aW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUNiLCBmdW5jdGlv
blR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0
aW9uX0VWd3NKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkp
IFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FWkpaWlosIGZ1bmN0aW9uVHlwZSh2b2lkVHlw
ZSwgaW50UHRyLCBpbnQzMiwgaW50NjQsIGludDMyLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFj
cm8oVl9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCkpIFwKICAg
ICBtYWNybyhWX0pJVE9wZXJhdGlvbl9aLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyKSkg
XAogICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0QsIGZ1bmN0aW9uVHlwZShpbnQzMiwgZG91Ymxl
VHlwZSkpIFwKLSAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKGludDMy
LCBpbnRQdHIsIGludFB0cikpCisgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9u
VHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKSBcCisgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25f
RUpaLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50NjQsIGludDMyKSkKICAgICAKIGNs
YXNzIEludHJpbnNpY1JlcG9zaXRvcnkgOiBwdWJsaWMgQ29tbW9uVmFsdWVzIHsKIHB1YmxpYzoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDE3
OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBKU0NhbGw6OkpTQ2FsbCh1bnNpZ25lZCBzdGFja21h
cElELCBOb2RlCiAgICAgLCBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKICAgICAsIG1faW5zdHJ1
Y3Rpb25PZmZzZXQoMCkKIHsKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDYWxsIHx8IG5vZGUt
Pm9wKCkgPT0gQ29uc3RydWN0KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCShyZXZpc2lv
biAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAordXNpbmcgbmFtZXNwYWNlIERGRzsKKwogSlNDYWxsQmFzZTo6SlNDYWxs
QmFzZSgpCiAgICAgOiBtX3R5cGUoQ2FsbExpbmtJbmZvOjpOb25lKQogICAgICwgbV9jYWxsTGlu
a0luZm8obnVsbHB0cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
QmFzZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIExpbmtCdWZmZXI7CiAKK25hbWVzcGFjZSBERkcgeworc3RydWN0IE5v
ZGU7Cit9CisKIG5hbWVzcGFjZSBGVEwgewogCiBjbGFzcyBKU0NhbGxCYXNlIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZU
TEpTQ2FsbFZhcmFyZ3MuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5j
bHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU2V0dXBWYXJhcmdz
RnJhbWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1l
c3BhY2UgREZHOworCitKU0NhbGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKCkKKyAgICA6IG1fc3Rh
Y2ttYXBJRChVSU5UX01BWCkKKyAgICAsIG1fbm9kZShudWxscHRyKQorICAgICwgbV9pbnN0cnVj
dGlvbk9mZnNldChVSU5UX01BWCkKK3sKK30KKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJn
cyh1bnNpZ25lZCBzdGFja21hcElELCBOb2RlKiBub2RlKQorICAgIDogbV9zdGFja21hcElEKHN0
YWNrbWFwSUQpCisgICAgLCBtX25vZGUobm9kZSkKKyAgICAsIG1fY2FsbEJhc2UoCisgICAgICAg
IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0VmFyYXJncyA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0
VmFyYXJncyA6IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MsCisgICAgICAgIG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykKKyAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKK3sKKyAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBDYWxsVmFyYXJncyB8fCBub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFy
YXJncyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MpOworfQorCit1bnNpZ25lZCBK
U0NhbGxWYXJhcmdzOjpudW1TcGlsbFNsb3RzTmVlZGVkKCkKK3sKKyAgICByZXR1cm4gNDsKK30K
Kwordm9pZCBKU0NhbGxWYXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgaml0LCBHcmFwaCYgZ3Jh
cGgsIGludDMyX3Qgc3BpbGxTbG90c09mZnNldCkKK3sKKyAgICAvLyBXZSBhcmUgcGFzc2VkIHRo
cmVlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoKKyAgICAvLyAtIFRoZSBjYWxsZWUuCisgICAgLy8g
LSBUaGUgYXJndW1lbnRzIG9iamVjdC4KKyAgICAvLyAtIFRoZSAidGhpcyIgdmFsdWUsIGlmIGl0
J3MgYSBjb25zdHJ1Y3RvciBjYWxsLgorICAgIAorICAgIGJvb2wgaXNDYWxsID0gbV9ub2RlLT5v
cCgpICE9IENvbnN0cnVjdFZhcmFyZ3M7CisgICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbV9ub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKKyAgICAKKyAgICBHUFJSZWcgY2FsbGVlR1BS
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgIAorICAgIEdQUlJlZyBhcmd1bWVudHNHUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyB0aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAg
ICBib29sIGFyZ3VtZW50c09uU3RhY2sgPSBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fbm9k
ZS0+b3AoKSkgeworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGFyZ3VtZW50c0dQUiA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgdGhpc0dQUiA9IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Cisg
ICAgICAgIHRoaXNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIGFyZ3VtZW50
c09uU3RhY2sgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFy
Z3M6CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNvbnN0IHVuc2lnbmVkIGNh
bGxlZVNwaWxsU2xvdCA9IDA7CisgICAgY29uc3QgdW5zaWduZWQgYXJndW1lbnRzU3BpbGxTbG90
ID0gMTsKKyAgICBjb25zdCB1bnNpZ25lZCB0aGlzU3BpbGxTbG90ID0gMjsKKyAgICBjb25zdCB1
bnNpZ25lZCBzdGFja1BvaW50ZXJTcGlsbFNsb3QgPSAzOworICAgIAorICAgIC8vIEdldCBzb21l
IHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAg
dXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAg
dXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVy
cygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMuc2V0KGNhbGxlZUdQUik7CisgICAgaWYgKGFy
Z3VtZW50c0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChh
cmd1bWVudHNHUFIpOworICAgIGlmICh0aGlzR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
IHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNHUFIpOworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ciBhbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgaWYgKGFyZ3VtZW50c09uU3RhY2sp
CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJzKCkp
OworICAgIAorICAgIGF1dG8gbG9hZEFyZ3VtZW50cyA9IFsmXSAoYm9vbCBjbG9iYmVyZWQpIHsK
KyAgICAgICAgaWYgKGFyZ3VtZW50c09uU3RhY2spIHsKKyAgICAgICAgICAgIGppdC5sb2FkNjQo
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKGdyYXBoLm1hY2hpbmVB
cmd1bWVudHNSZWdpc3RlckZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50c0dQUik7CisgICAgICAgIH0gZWxzZSBpZiAoY2xvYmJlcmVkKSB7Cisg
ICAgICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6YWRk
cmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgYXJndW1lbnRzU3BpbGxTbG90KSwgYXJndW1lbnRz
R1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgYXV0byBjb21wdXRlVXNlZFN0YWNr
ID0gWyZdIChHUFJSZWcgdGFyZ2V0R1BSLCB1bnNpZ25lZCBleHRyYSkgeworICAgICAgICBqaXQu
bW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaml0
LnN1YlB0cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0YXJnZXRHUFIpOwor
ICAgICAgICBpZiAoZXh0cmEpCisgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGV4dHJhKSwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaml0LnVyc2hpZnRQdHIo
Q0NhbGxIZWxwZXJzOjpJbW0zMigzKSwgdGFyZ2V0R1BSKTsKKyAgICB9OworICAgIAorICAgIGF1
dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CisgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5v
blByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgbV9leGNlcHRpb25zLmFwcGVuZChq
aXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hl
Y2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CisgICAgfTsKKyAgICAKKyAgICBs
b2FkQXJndW1lbnRzKGZhbHNlKTsKKworICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09m
ZnNldCArIHN0YWNrUG9pbnRlclNwaWxsU2xvdCkpOworICAgIAorICAgIC8vIEF0dGVtcHQgdGhl
IGZvcndhcmRpbmcgZmFzdCBwYXRoLCBpZiBpdCdzIGJlZW4gcmVxdWVzdGVkLgorICAgIENDYWxs
SGVscGVyczo6SnVtcCBoYXZlQXJndW1lbnRzOworICAgIGlmIChtX25vZGUtPm9wKCkgPT0gQ2Fs
bEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHko
dGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAgIC8vIEZJWE1FOiBkbyB0aGlz
IG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwuCisgICAgICAgIAorICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAg
ICAKKyAgICAgICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgMCk7CisgICAgICAgIGVt
aXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIx
LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAg
CisgICAgICAgIGppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBo
YXZlQXJndW1lbnRzID0gaml0Lmp1bXAoKTsKKyAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsK
KyAgICB9CisgICAgCisgICAgLy8gR290dGEgc3BpbGwgdGhlIGNhbGxlZSwgYXJndW1lbnRzLCBh
bmQgdGhpcyBiZWNhdXNlIHdlIHdpbGwgbmVlZCB0aGVtIGxhdGVyIGFuZCB3ZSB3aWxsIGhhdmUg
c29tZQorICAgIC8vIGNhbGxzIHRoYXQgY2xvYmJlciB0aGVtLgorICAgIGppdC5zdG9yZTY0KGNh
bGxlZUdQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxs
ZWVTcGlsbFNsb3QpKTsKKyAgICBpZiAoIWFyZ3VtZW50c09uU3RhY2spCisgICAgICAgIGppdC5z
dG9yZTY0KGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNP
ZmZzZXQgKyBhcmd1bWVudHNTcGlsbFNsb3QpKTsKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICBq
aXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09m
ZnNldCArIHRoaXNTcGlsbFNsb3QpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrID0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKKyAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpOworICAgIGNvbXB1
dGVVc2VkU3RhY2soc2NyYXRjaEdQUjEsIDApOworICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoZXh0cmFTdGFjayksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzR1BS
LCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJB
cmdPZmZzZXQpKTsKKyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lk
Kj4ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncykpOworICAgIAorICAgIGppdC5tb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSk7CisgICAgY29tcHV0ZVVzZWRTdGFj
ayhzY3JhdGNoR1BSMiwgZXh0cmFTdGFjayk7CisgICAgbG9hZEFyZ3VtZW50cyh0cnVlKTsKKyAg
ICBlbWl0U2V0VmFyYXJnc0ZyYW1lKGppdCwgc2NyYXRjaEdQUjEsIGZhbHNlLCBzY3JhdGNoR1BS
Miwgc2NyYXRjaEdQUjIpOworICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoLWV4dHJhU3RhY2spLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BS
MiwgYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZh
ckFyZ09mZnNldCksIHNjcmF0Y2hHUFIxKTsKKyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJp
dHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpKTsKKyAgICAKKyAg
ICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjIpOworICAgIAor
ICAgIGlmIChpc0NhbGwpCisgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNz
Rm9yKHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSwgdGhpc0dQUik7CisgICAgaml0
LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxl
ZVNwaWxsU2xvdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBpZiAobV9ub2RlLT5vcCgp
ID09IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5rKCZqaXQp
OworICAgIAorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIAorICAgIGlmIChpc0NhbGwpCisgICAgICAgIGppdC5zdG9yZTY0
KHRoaXNHUFIsIENDYWxsSGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAKKyAg
ICAvLyBIZW5jZWZvcnRoIHdlIG1ha2UgdGhlIGNhbGwuIFRoZSBiYXNlIEZUTCBjYWxsIG1hY2hp
bmVyeSBleHBlY3RzIHRoZSBjYWxsZWUgaW4gcmVnVDAgYW5kIGZvciB0aGUKKyAgICAvLyBzdGFj
ayBmcmFtZSB0byBhbHJlYWR5IGJlIHNldCB1cCwgd2hpY2ggaXQgaXMuCisgICAgaml0LnN0b3Jl
NjQoR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6Y2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6
OkNhbGxlZSkpOworICAgIAorICAgIG1fY2FsbEJhc2UuZW1pdChqaXQpOworICAgIAorICAgIC8v
IFVuZG8gdGhlIGRhbWFnZSB3ZSd2ZSBkb25lLgorICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgc3RhY2tQb2ludGVyU3BpbGxTbG90KSwg
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgSlNDYWxsVmFy
YXJnczo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENvZGVMb2NhdGlvbkxh
YmVsIGV4Y2VwdGlvbkhhbmRsZXIpCit7CisgICAgbV9jYWxsQmFzZS5saW5rKHZtLCBsaW5rQnVm
ZmVyKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsobV9leGNlcHRpb25zLCBleGNlcHRpb25IYW5kbGVy
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJn
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFy
YXJncy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGxWYXJhcmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEpTQ2FsbFZhcmFy
Z3NfaAorI2RlZmluZSBGVExKU0NhbGxWYXJhcmdzX2gKKworI2lmIEVOQUJMRShGVExfSklUKQor
CisjaW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
TGlua0J1ZmZlcjsKKworbmFtZXNwYWNlIERGRyB7CitjbGFzcyBHcmFwaDsKK3N0cnVjdCBOb2Rl
OworfQorCituYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSlNDYWxsVmFyYXJncyB7CitwdWJsaWM6
CisgICAgSlNDYWxsVmFyYXJncygpOworICAgIEpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2tt
YXBJRCwgREZHOjpOb2RlKik7CisgICAgCisgICAgREZHOjpOb2RlKiBub2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ub2RlOyB9CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIG51bVNwaWxsU2xvdHNO
ZWVkZWQoKTsKKyAgICAKKyAgICB2b2lkIGVtaXQoQ0NhbGxIZWxwZXJzJiwgREZHOjpHcmFwaCYs
IGludDMyX3Qgc3BpbGxTbG90c09mZnNldCk7CisgICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZl
ciYsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIpOworICAgIAorICAgIHVuc2ln
bmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7IH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yPChjb25zdCBKU0NhbGxWYXJhcmdzJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2luc3RydWN0aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlv
bk9mZnNldDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJ
RDsKKyAgICBERkc6Ok5vZGUqIG1fbm9kZTsKKyAgICBKU0NhbGxCYXNlIG1fY2FsbEJhc2U7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBtX2V4Y2VwdGlvbnM7CisKK3B1YmxpYzoKKyAgICB1
aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKU0NhbGxW
YXJhcmdzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNiArMTg1
LDMwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1f
b3V0LmNvbnN0SW50NjQobV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpLAogICAgICAgICAg
ICAgbV9vdXQuaW50MzJaZXJvLCBjYXB0dXJlZEFsbG9jYSk7CiAgICAgICAgIAorICAgICAgICAv
LyBJZiB3ZSBoYXZlIGFueSBDYWxsVmFyYXJncyB0aGVuIHdlIG5lZSB0byBoYXZlIGEgc3BpbGwg
c2xvdCBmb3IgaXQuCisgICAgICAgIGJvb2wgaGFzVmFyYXJncyA9IGZhbHNlOworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJlT3JkZXIpIHsKKyAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgorICAgICAgICAgICAgICAgICAgICBoYXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmIChoYXNWYXJhcmdzKSB7CisgICAgICAgICAgICBMVmFsdWUgdmFyYXJnc1Nw
aWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCisgICAgICAgICAgICAgICAgYXJyYXlUeXBlKG1fb3V0
LmludDY0LCBKU0NhbGxWYXJhcmdzOjpudW1TcGlsbFNsb3RzTmVlZGVkKCkpKTsKKyAgICAgICAg
ICAgIG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEID0gbV9zdGFja21hcElE
cysrOworICAgICAgICAgICAgbV9vdXQuY2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5zdGFj
a21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUudmFyYXJnc1NwaWxs
U2xvdHNTdGFja21hcElEKSwKKyAgICAgICAgICAgICAgICBtX291dC5pbnQzMlplcm8sIHZhcmFy
Z3NTcGlsbFNsb3RzKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUg
PSBtX291dC5wdHJUb0ludCgKICAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQuZnJhbWVBZGRy
ZXNzSW50cmluc2ljKCksIG1fb3V0LmludDMyWmVybyksIG1fb3V0LmludFB0cik7CiAgICAgICAg
IG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7CkBAIC02
MzYsNiArNjYwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAg
ICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxlQ2FsbE9y
Q29uc3RydWN0VmFyYXJncygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3MoKTsKKyAgICAgICAgICAg
IGJyZWFrOwogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5JTkcpCiAgICAgICAgIGNh
c2UgTmF0aXZlQ2FsbDoKICAgICAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CkBAIC05ODIsNyAr
MTAxNCw2IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCk7Ci0gICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCBvcGVyYW5kLmlzQXJndW1lbnQoKSk7CiAKICAgICAgICAg
TFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKQEAg
LTE5ODYsOCArMjAxNywyMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgY2hlY2tBcmd1bWVu
dHNOb3RDcmVhdGVkKCk7CiAKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFt
X25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBzZXRJbnQz
MihtX291dC5hZGQobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihKU1N0YWNrOjpB
cmd1bWVudENvdW50KSksIG1fb3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIGlmIChtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAg
ICAgICAgICBzZXRJbnQzMigKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKAorICAg
ICAgICAgICAgICAgICAgICBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFt
X25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAg
YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRS
ZWdpc3RlciA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAg
bV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShw
YXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlcikpLAorICAgICAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKC0xKSkpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkBAIC0zNzA4LDYgKzM3NTMsODAgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CiAgICAgfQorICAgIAorICAg
IHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IG51bGxwdHI7CisgICAgICAgIExWYWx1ZSB0aGlz
QXJnID0gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7
CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICBqc0FyZ3VtZW50cyA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICB0aGlzQXJnID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAgIHRoaXNBcmcgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKKyAgICAgICAgICAgIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgImJhZCBub2RlIHR5cGUiKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzdGFj
a21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPExWYWx1
ZT4gYXJndW1lbnRzOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQo
c3RhY2ttYXBJRCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIo
c2l6ZU9mSUNGb3IobV9ub2RlKSkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVs
bChtX291dC5yZWY4KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQz
MigxICsgISFqc0FyZ3VtZW50cyArICEhdGhpc0FyZykpOworICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKGpzQ2FsbGVlKTsKKyAgICAgICAgaWYgKGpzQXJndW1lbnRzKQorICAgICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChqc0FyZ3VtZW50cyk7CisgICAgICAgIGlmICh0aGlzQXJnKQorICAgICAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzQXJnKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxQ
cmVmbGlnaHQoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbCht
X291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgc2V0
SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQ0NhbGxDb252KTsKKyAgICAg
ICAgCisgICAgICAgIG1fZnRsU3RhdGUuanNDYWxsVmFyYXJnc2VzLmFwcGVuZChKU0NhbGxWYXJh
cmdzKHN0YWNrbWFwSUQsIG1fbm9kZSkpOworICAgICAgICAKKyAgICAgICAgc2V0SlNWYWx1ZShj
YWxsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHsK
KyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEo
KTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCisgICAgICAg
ICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJncyksIG1fY2FsbEZyYW1l
LCBqc0FyZ3VtZW50cywKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0
KSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3
ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBz
YWZlCisgICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5
LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAgICAv
LyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2Fu
IGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFzdCB0
aGUgc2l6aW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQxNDQ4CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhp
cyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgc3BlY3VsYXRl
KAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAg
ICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29u
c3RJbnQzMihkYXRhLT5saW1pdCkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIo
bGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAg
ICAgICAgCisgICAgICAgIHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25Mb2FkVmFyYXJncyksIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLCBqc0FyZ3VtZW50cywgbV9vdXQuY29u
c3RJbnQzMihkYXRhLT5vZmZzZXQpLAorICAgICAgICAgICAgbGVuZ3RoLCBtX291dC5jb25zdElu
dDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKKyAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVK
dW1wKCkKICAgICB7CkBAIC00MDEyLDcgKzQxMzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAg
ICAgICAgICBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXpl
T2ZDaGVja0luKCkpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNr
bWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkluKCkpLAogICAgICAgICAgICAgICAgICAg
ICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMSksIGNlbGwpOwogCiAg
ICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZN
QW55UmVnQ2FsbENvbnYpOwpAQCAtNjQwNSw3ICs2NTI0LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAvLyBCdWZmZXIgaXMgb3V0IG9mIHNwYWNlLCBmbHVzaCBpdC4KICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oYnVmZmVySXNGdWxsLCBjb250aW51YXRpb24pOwotICAgICAgICB2bUNhbGwobV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKSwgbV9jYWxsRnJhbWUs
IGJhc2UsIE5vRXhjZXB0aW9ucyk7CisgICAgICAgIHZtQ2FsbE5vRXhjZXB0aW9ucyhtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpLCBtX2NhbGxGcmFtZSwg
YmFzZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTY0MTQsNDQgKzY1MzMsMjMg
QEAgcHJpdmF0ZToKICNlbmRpZgogICAgIH0KIAotICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tNb2Rl
IHsgTm9FeGNlcHRpb25zLCBDaGVja0V4Y2VwdGlvbnMgfTsKLSAgICAKLSAgICBMVmFsdWUgdm1D
YWxsKExWYWx1ZSBmdW5jdGlvbiwgRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2Vw
dGlvbnMpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBMVmFsdWUgdm1DYWxs
KExWYWx1ZSBmdW5jdGlvbiwgQXJncy4uLiBhcmdzKQogICAgIHsKICAgICAgICAgY2FsbFByZWZs
aWdodCgpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbik7Ci0g
ICAgICAgIGNhbGxDaGVjayhtb2RlKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNh
bGwoZnVuY3Rpb24sIGFyZ3MuLi4pOworICAgICAgICBjYWxsQ2hlY2soKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIExW
YWx1ZSBhcmcxLCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKLSAg
ICB7Ci0gICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1f
b3V0LmNhbGwoZnVuY3Rpb24sIGFyZzEpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0
aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0g
Q2hlY2tFeGNlcHRpb25zKQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSwgYXJnMik7Ci0gICAg
ICAgIGNhbGxDaGVjayhtb2RlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
TFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwg
TFZhbHVlIGFyZzMsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQot
ICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
bV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMyk7Ci0gICAgICAgIGNhbGxDaGVj
ayhtb2RlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgTFZhbHVlIHZtQ2Fs
bChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMs
IExWYWx1ZSBhcmc0LCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykK
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSB2bUNhbGxO
b0V4Y2VwdGlvbnMoTFZhbHVlIGZ1bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgewogICAgICAg
ICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1
bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUp
OworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJncy4uLik7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBjYWxsUHJl
ZmxpZ2h0KENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIG1fb3V0LnN0b3Jl
MzIoCkBAIC02NDY1LDExICs2NTYzLDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FsbFByZWZsaWdo
dChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2FsbENo
ZWNrKEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQorICAgIHZvaWQg
Y2FsbENoZWNrKCkKICAgICB7Ci0gICAgICAgIGlmIChtb2RlID09IE5vRXhjZXB0aW9ucykKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjplbmFibGVF
eGNlcHRpb25GdXp6KCkpCiAgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25FeGNlcHRpb25GdXp6KSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsMTMgKzM0Nyw4IEBA
IHB1YmxpYzoKICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5
cGUmIHZlY3RvcikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rv
cik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJuIGJ1aWxkQ2Fs
bChtX2J1aWxkZXIsIGZ1bmN0aW9uKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlv
biwgTFZhbHVlIGFyZzEpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBh
cmcxKTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExW
YWx1ZSBhcmcyKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwg
YXJnMik7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBM
VmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1
bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczKTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5j
dGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQp
IHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmcz
LCBhcmc0KTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEs
IExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1KSB7IHJl
dHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJn
NCwgYXJnNSk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcx
LCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZh
bHVlIGFyZzYpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBh
cmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBm
dW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFy
ZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcpIHsgcmV0dXJuIGJ1aWxk
Q2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBh
cmc2LCBhcmc3KTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFy
ZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBM
VmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcsIExWYWx1ZSBhcmc4KSB7IHJldHVybiBidWlsZENhbGwo
bV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwg
YXJnNywgYXJnOCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1
ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykgeyByZXR1
cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZ3MuLi4pOyB9CiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgogICAgIExWYWx1ZSBvcGVyYXRp
b24oRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw2ICs0OSwxMCBAQCBTdGF0ZTo6U3Rh
dGUoR3JhcGgmIGdyYXBoKQogICAgICwgbW9kdWxlKDApCiAgICAgLCBmdW5jdGlvbigwKQogICAg
ICwgZ2VuZXJhdGVkRnVuY3Rpb24oMCkKKyAgICAsIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRp
b25TdGFja21hcElEKFVJTlRfTUFYKQorICAgICwgaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRChV
SU5UX01BWCkKKyAgICAsIGNhcHR1cmVkU3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAsIHZhcmFy
Z3NTcGlsbFNsb3RzU3RhY2ttYXBJRChVSU5UX01BWCkKICAgICAsIHVud2luZERhdGFTZWN0aW9u
KDApCiAgICAgLCB1bndpbmREYXRhU2VjdGlvblNpemUoMCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgog
I2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKICNp
bmNsdWRlICJGVExTdGFja01hcHMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNzEsMTAgKzcyLDEyIEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBoYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRDsKICAgICB1bnNpZ25l
ZCBoYW5kbGVFeGNlcHRpb25TdGFja21hcElEOwogICAgIHVuc2lnbmVkIGNhcHR1cmVkU3RhY2tt
YXBJRDsKKyAgICB1bnNpZ25lZCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQ7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRW
ZWN0b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxD
aGVja0luRGVzY3JpcHRvcj4gY2hlY2tJbnM7CiAgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxsczsK
KyAgICBWZWN0b3I8SlNDYWxsVmFyYXJncz4ganNDYWxsVmFyYXJnc2VzOwogICAgIFZlY3RvcjxD
U3RyaW5nPiBjb2RlU2VjdGlvbk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlv
bk5hbWVzOwogICAgIHZvaWQqIHVud2luZERhdGFTZWN0aW9uOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAx
Nzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgIHJldHVybiBpbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBj
YWxsRnJhbWUsIHRoaXNWYWx1ZSwgY2FsbGVyU2NvcGVDaGFpbik7CiB9CiAKLXVuc2lnbmVkIHNp
emVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU3RhY2sqIHN0YWNrLCBK
U1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZp
cnN0VmFyQXJnT2Zmc2V0KQordW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQogewog
ICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICBpZiAoIWFyZ3VtZW50cykKQEAgLTE1Niw2ICsxNTYs
MTMgQEAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIAogICAgIGVsc2UK
ICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCit1bnNp
Z25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1N0YWNrKiBz
dGFjaywgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50
MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzaXplT2ZW
YXJhcmdzKGNhbGxGcmFtZSwgYXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgCiAg
ICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxlZUZyYW1lRm9yVmFyYXJncyhjYWxsRnJh
bWUsIG51bVVzZWRTdGFja1Nsb3RzLCBsZW5ndGggKyAxKTsKICAgICBpZiAobGVuZ3RoID4gQXJn
dW1lbnRzOjpNYXhBcmd1bWVudHMgfHwgIXN0YWNrLT5lbnN1cmVDYXBhY2l0eUZvcihjYWxsZWVG
cmFtZS0+cmVnaXN0ZXJzKCkpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNh
bGxGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKCkgLSBwYWRkZWRDYWxsZWVGcmFtZU9mZnNldCk7CiAgICAgfQog
CisgICAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWMsIEpTVmFsdWUgYXJn
dW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5zaWduZWQgc2l6ZUZy
YW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWMsIEpTU3RhY2sqLCBKU1ZhbHVlIGFyZ3VtZW50
cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0
KTsKICAgICB2b2lkIGxvYWRWYXJhcmdzKENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJl
Z2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShDYWxsRnJhbWUq
IGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVp
bnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDEwIEBAIHZvaWQgU3Rh
Y2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbGwKIAogICAgICAgICBtX2ZyYW1lLm1fY2Fs
bEZyYW1lID0gY2FsbEZyYW1lOwogICAgICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0g
aW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIo
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJ
bnQzMigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAg
ICAgIG1fZnJhbWUubV9jb2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJs
b2NrKCk7CiAgICAgICAgIG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXg7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDE1ICsyMTIs
MjcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KAogICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogfQogCi1Bc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0RXhj
ZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQpCitBc3NlbWJseUhlbHBlcnM6Okp1
bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5k
IGtpbmQsIEV4Y2VwdGlvbkp1bXBXaWR0aCB3aWR0aCkKIHsKICAgICBjYWxsRXhjZXB0aW9uRnV6
eigpOworCisgICAgaWYgKHdpZHRoID09IEZhckp1bXBXaWR0aCkKKyAgICAgICAga2luZCA9IChr
aW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gSW52ZXJ0ZWRFeGNlcHRpb25DaGVjayA6IE5v
cm1hbEV4Y2VwdGlvbkNoZWNrKTsKICAgICAKKyAgICBKdW1wIHJlc3VsdDsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25D
aGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhj
ZXB0aW9uKCkpKTsKKyAgICByZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNl
cHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVz
c09mRXhjZXB0aW9uKCkpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmV0dXJuIGJy
YW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhj
ZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIHJlc3VsdCA9IGJyYW5jaDMy
KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhjZXB0aW9u
KCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCisgICAgCisgICAgaWYgKHdpZHRo
ID09IE5vcm1hbEp1bXBXaWR0aCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBQ
YXRjaGFibGVKdW1wIHJlYWxKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOworICAgIHJlc3VsdC5saW5r
KHRoaXMpOworICAgIAorICAgIHJldHVybiByZWFsSnVtcC5tX2p1bXA7CiB9CiAKIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oQXNzZW1ibHlIZWxw
ZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICszMzgsMTAgQEAgcHVibGljOgogICAgIH0KICAgICBz
dGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIp
CiAgICAgeworICAgICAgICAvLyBOQi4gSXQncyB0ZW1wdGluZyBvbiBzb21lIGFyY2hpdGVjdHVy
ZXMgdG8gc29tZXRpbWVzIHVzZSBhbiBvZmZzZXQgZnJvbSB0aGUgc3RhY2sKKyAgICAgICAgLy8g
cmVnaXN0ZXIgYmVjYXVzZSBmb3Igc29tZSBvZmZzZXRzIHRoYXQgd2lsbCBlbmNvZGUgdG8gYSBz
bWFsbGVyIGluc3RydWN0aW9uLiBCdXQgd2UKKyAgICAgICAgLy8gY2Fubm90IGRvIHRoaXMuIFdl
IHVzZSB0aGlzIGluIHBsYWNlcyB3aGVyZSB0aGUgc3RhY2sgcG9pbnRlciBoYXMgYmVlbiBtb3Zl
ZCB0byBzb21lCisgICAgICAgIC8vIHVucHJlZGljdGFibGUgbG9jYXRpb24uCiAgICAgICAgIEFT
U0VSVCh2aXJ0dWFsUmVnaXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpOwogICAgIH0KQEAgLTM2NywzOSArMzcxLDM5IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCi0gICAg
QWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2Fs
bGVlRnJhbWVTbG90KGludCBzbG90KQogICAgIHsKICAgICAgICAgQVNTRVJUKHNsb3QgPj0gSlNT
dGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpOwotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2Yo
UmVnaXN0ZXIpICogKHNsb3QgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpOworICAg
ICAgICByZXR1cm4gQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVy
KSAqIChzbG90IC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpKTsKICAgICB9CiAKICAg
ICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCi0gICAgQWRkcmVzcyBj
YWxsZWVBcmd1bWVudFNsb3QoaW50IGFyZ3VtZW50KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVl
RnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7
CiAgICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCisgICAg
c3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KGludCBzbG90KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAg
ICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KGludCBzbG90KQorICAg
IHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoaW50IHNsb3QpCiAgICAgewog
ICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoUGF5bG9hZE9m
ZnNldCk7CiAgICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFRhZ1Nsb3QoaW50IGFy
Z3VtZW50KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50VGFnU2xvdChpbnQgYXJn
dW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlQXJndW1lbnRTbG90KGFyZ3VtZW50
KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAgICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVBcmd1
bWVudFBheWxvYWRTbG90KGludCBhcmd1bWVudCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVB
cmd1bWVudFBheWxvYWRTbG90KGludCBhcmd1bWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBj
YWxsZWVBcmd1bWVudFNsb3QoYXJndW1lbnQpLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCk7CiAg
ICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVGcmFtZUNhbGxlckZyYW1lKCkKKyAgICBzdGF0aWMg
QWRkcmVzcyBjYWxsZWVGcmFtZUNhbGxlckZyYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiBj
YWxsZWVGcmFtZVNsb3QoMCkud2l0aE9mZnNldChDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0
KCkpOwogICAgIH0KQEAgLTU3MSw3ICs1NzUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsRXhj
ZXB0aW9uRnV6eigpOwogICAgIAogICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsgTm9ybWFs
RXhjZXB0aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKLSAgICBKdW1wIGVtaXRF
eGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNo
ZWNrKTsKKyAgICBlbnVtIEV4Y2VwdGlvbkp1bXBXaWR0aCB7IE5vcm1hbEp1bXBXaWR0aCwgRmFy
SnVtcFdpZHRoIH07CisgICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soCisgICAgICAgIEV4Y2Vw
dGlvbkNoZWNrS2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25KdW1wV2lkdGgg
PSBOb3JtYWxKdW1wV2lkdGgpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAg
IHN0YXRpYyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBs
aW5nQ291bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzc3LDYgKzE3NzcsMTUgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0KIAorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFy
ZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJ
bW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjph
cmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSND4oYXJnMiwgYXJnNCk7CisgICAgICAg
IG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShhcmczLCBH
UFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBtb3ZlKGFyZzUsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcyLCBH
UFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQogICAgIHsK
ICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMz4oYXJnMiwgYXJnMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0dQUkluZm8uaAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6ZWF4
OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gWDg2
UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVz
ZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OmVzaTsKKyAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gWDg2UmVnaXN0ZXJzOjpyMTA7CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRjaFJlZ2lzdGVyID0gTWFjcm9B
c3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3RlcjsKIAogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdpc3Rl
cih1bnNpZ25lZCBpbmRleCkKQEAgLTU3Nyw2ICs1NzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MDsgLy8gcmVn
VDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IEFSTTY0UmVnaXN0
ZXJzOjp4MTsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5v
blJldHVybkdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MjsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gQVJNNjRSZWdpc3RlcnM6Ong4OwogICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgcGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IEFSTTY0UmVnaXN0
ZXJzOjppcDA7CiAKICAgICAvLyBHUFJSZWcgbWFwcGluZyBpcyBkaXJlY3QsIHRoZSBtYWNoaW5l
IHJlZ3NpdGVyIG51bWJlcnMgY2FuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2NCwxMSArNDY0LDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpw
cml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFs
c2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIERGRzo6Q2FuSW5saW5lOgotICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0g
ZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwotICAgICAg
ICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKICAgICBjYXNl
IERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAg
ICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIGNvbXBpbGVPcENhbGwoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShP
cGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwotICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZh
cmFyZ3NGcmFtZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFy
Z3NGcmFtZShJbnN0cnVjdGlvbiosIENhbGxMaW5rSW5mbyopOwogICAgICAgICB2b2lkIGNvbXBp
bGVDYWxsRXZhbChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcg
KzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKgogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZh
cmFyZ3NGcmFtZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29tcGlsZVNl
dHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZvKiBp
bmZvKQogewogICAgIGludCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAg
ICAgaW50IGFyZ3VtZW50cyA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTkwLDYgKzkw
LDE2IEBAIHZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHIKICAgICBpZiAo
Y2FuT3B0aW1pemUpCiAgICAgICAgIGVuZC5saW5rKHRoaXMpOwogICAgIAorICAgIC8vIFByb2Zp
bGUgdGhlIGFyZ3VtZW50IGNvdW50LgorICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBKU1N0YWNr
OjpBcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBh
eWxvYWRPZmZzZXQpLCByZWdUMik7CisgICAgbG9hZDgoJmluZm8tPm1heE51bUFyZ3VtZW50cywg
cmVnVDApOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVn
VDIpOworICAgIEp1bXAgbm90U2F0dXJhdGVkID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCByZWdU
MiwgVHJ1c3RlZEltbTMyKDI1NSkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDI1NSksIHJlZ1Qy
KTsKKyAgICBub3RTYXR1cmF0ZWQubGluayh0aGlzKTsKKyAgICBzdG9yZTgocmVnVDIsICZpbmZv
LT5tYXhOdW1Bcmd1bWVudHMpOworICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKKyAgICAKICAg
ICAvLyBJbml0aWFsaXplICd0aGlzJy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNW
YWx1ZSwgcmVnVDApOwogICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpKSk7CkBAIC0xMzQsNyArMTQ0LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKEluc3RydQogCiB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsK
LSAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAgICBpbnQg
Y2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgLyogQ2FsbGVyIGFsd2F5
czoKICAgICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJh
bWUuCkBAIC0xNTIsNyArMTY0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSQogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BD
T0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rl
c19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RI
KG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBjYWxsX2Fu
ZF9jb25zdHJ1Y3RfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MpCi0gICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbik7
CisgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbiwgaW5mbyk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZDsKQEAgLTE3Niw5ICsxODgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBv
cGNvZGVJCiAKICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotCi0gICAgaWYgKG9wY29kZUlEID09
IG9wX2NhbGxfZXZhbCkgeworICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAg
ICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlz
aW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgdHlwZWRlZiBpbnQ2NF90IEpJVF9P
UEVSQVRJT04oKlFfSklUT3BlcgogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJ
VE9wZXJhdGlvbl9EKShkb3VibGUpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpa
X0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFU
SU9OICgqWl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlwZWRlZiBp
bnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FSlopKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgq
Wl9KSVRPcGVyYXRpb25fRUpaWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3Qs
IGludDMyX3QpOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9u
X0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBKSVRf
T1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
KTsKQEAgLTE4OSw2ICsxOTAsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklU
T3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWd3NK
KShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUq
LCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
RVpKKShFeGVjU3RhdGUqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaSlpaWikoRXhlY1N0YXRlKiwgaW50MzJf
dCwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiB2
b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNTdGF0ZSosIFZNKik7
CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0opKEVuY29kZWRK
U1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fWiko
aW50MzJfdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0Zy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFy
YXJnc0ZyYW1lLmNwcAkocmV2aXNpb24gMTc5OTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMSArMTAx
LDMxIEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwKIAogdm9pZCBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51
bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQ
UlJlZyBzY3JhdGNoR1BSMywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVy
czo6SnVtcExpc3QmIHNsb3dDYXNlKQogewotICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RD
YXNlKAotICAgICAgICBqaXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hH
UFIyLCBzY3JhdGNoR1BSMywKLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdElu
dDMyKSwKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
MCkpLAotICAgICAgICBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgIGVtaXRTZXR1
cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBudWxscHRyLCBmaXJzdFZhckFyZ09mZnNldCwgc2xv
d0Nhc2UpOworfQorCit2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQ
UlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSwgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6
SnVtcExpc3QmIHNsb3dDYXNlKQoreworICAgIFZhbHVlUmVjb3ZlcnkgYXJndW1lbnRDb3VudFJl
Y292ZXJ5OworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdEFyZ3VtZW50UmVnOworICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdz
KCkpIHsKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRSZWdpc3RlciwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0
YW50KAorICAgICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkgPiAxKQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpB
cmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgZmlyc3RBcmd1bWVudFJl
ZyA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKKyAgICB9
CisgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1Vc2VkU2xvdHNHUFIs
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGFyZ3VtZW50Q291bnRSZWNv
dmVyeSwgZmlyc3RBcmd1bWVudFJlZywgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TZXR1cFZhcmFyZ3NGcmFtZS5oCShyZXZpc2lvbiAxNzk5NzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDkgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAogLy8gVmFy
aWFudCB0aGF0IGFzc3VtZXMgbm9ybWFsIHN0YWNrIGZyYW1lLgogdm9pZCBlbWl0U2V0dXBWYXJh
cmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIz
LCB1bnNpZ25lZCBmaXJzdFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xv
d0Nhc2UpOwogCisvLyBWYXJpYW50IGZvciBwb3RlbnRpYWxseSBpbmxpbmVkIHN0YWNrIGZyYW1l
cy4KK3ZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQ
UjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiwgdW5zaWduZWQgZmlyc3RW
YXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE3OTk3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIEFyZ3VtZW50cyogY3Jl
YXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1v
ZGUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFy
cmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3Vt
ZW50cyhjYWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdp
c3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoY2FsbEZyYW1lLCBpbmxpbmVD
YWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+Zmlu
aXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUsIG1vZGUpOwogICAgICAgICBy
ZXR1cm4gYXJndW1lbnRzOwogICAgIH0KQEAgLTEyNCw3ICsxMjQsMTUgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShFeGVjU3RhdGUqKTsKIAog
ICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpOyB9Ci0gICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6
ZUluQnl0ZXMoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsgcmV0dXJuIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKSAtIDEpOyB9CisgICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkp
CisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZElu
dDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICByZXR1cm4g
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxKTsKKyAgICB9CiAgICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCk7CiAgICAgYm9vbCB0
cnlTZXRBcmd1bWVudChWTSYsIHNpemVfdCBhcmd1bWVudCwgSlNWYWx1ZSk7CiAgICAgSlNWYWx1
ZSB0cnlHZXRBcmd1bWVudChzaXplX3QgYXJndW1lbnQpOwpAQCAtMzQwLDExICszNDgsMTUgQEAg
aW5saW5lIHZvaWQgQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogICAgIG1fb3ZlcnJvZGVD
YWxsZWUgPSBmYWxzZTsKICAgICBtX292ZXJyb2RlQ2FsbGVyID0gZmFsc2U7CiAgICAgbV9pc1N0
cmljdE1vZGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oaW5saW5lQ2FsbEZyYW1lLT5l
eGVjdXRhYmxlLmdldCgpKS0+aXNTdHJpY3RNb2RlKCk7Ci0KKyAgICAKKyAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICBtX251
bUFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgZWxzZQorICAgICAgICBtX251
bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICBtX251
bUFyZ3VtZW50cy0tOworICAgIAogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgTm9ybWFs
QXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0gICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKLSAgICAgICAgCiAgICAgICAgIGlmICht
X251bUFyZ3VtZW50cykgewogICAgICAgICAgICAgaW50IG9mZnNldEZvckFyZ3VtZW50T25lID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7
CiAgICAgICAgICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpICsgb2Zmc2V0Rm9yQXJndW1l
bnRPbmUgLSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKTsKQEAgLTM2MSw3
ICszNzMsNiBAQCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIENsb25lZEFyZ3VtZW50c0NyZWF0aW9uTW9kZTogewotICAg
ICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IDE7CiAgICAgICAgIGlmIChtX251bUFyZ3VtZW50cykgewogICAgICAgICAgICAgaW50IG9mZnNl
dEZvckFyZ3VtZW50T25lID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkp
ICsgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgLSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5v
ZmZzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJl
dmlzaW9uIDE3OTk3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciog
b3B0aW9uU3RyaW5nOwogICAgIC8qIGZyb20gc3VwZXIgbG9uZyBjb21waWxlcyB0aGF0IHRha2Ug
YSBsb3Qgb2YgbWVtb3J5LiAqL1wKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtSW5saW5pbmdDYWxs
ZXJTaXplLCAxMDAwMCkgXAogICAgIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhpbXVtVmFyYXJnc0Zv
cklubGluaW5nLCAxMDApIFwKKyAgICBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudENh
bGxJbmxpbmluZywgdHJ1ZSkgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRCeUlkSW5s
aW5pbmcsIHRydWUpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGlu
ZWQtY2FsbC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzkgQEAKK2Z1bmN0aW9uIGZvbyhhLCBiKSB7CisgICAgdmFyIGFycmF5ID0gW107
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAg
IGFycmF5LnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICByZXR1cm4ge2E6YSwgYjpiLCBjOmFycmF5
fTsKK30KKworZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJuIGZvby5hcHBseSh0aGlz
LCBhcnJheSk7Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwg
YikgeworICAgIGlmIChhLmEgIT0gYi5hKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1
ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKKyAgICBpZiAoYS5iICE9IGIuYikK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3Vz
ICIgKyBiLmI7CisgICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2
ZXJzdXMgIiArIGIuYzsKKyAgICBmb3IgKHZhciBpID0gYS5jLmxlbmd0aDsgaS0tOykgeworICAg
ICAgICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBhLmMgKyAiIHZlcnN1
cyAiICsgYi5jOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIHZhciBl
eHBlY3RlZCA9IHthOmFycmF5WzBdLCBiOmFycmF5WzFdLCBjOmFycmF5fTsKKyAgICB2YXIgYWN0
dWFsID0gYmFyKGFycmF5KTsKKyAgICBjaGVja0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsK
KyAgICBmb3IgKHZhciBqID0gMDsgaiA8IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2go
aik7CisgICAgdGVzdChhcnJheSk7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246669</attachid>
            <date>2015-02-16 12:58:49 -0800</date>
            <delta_ts>2015-02-16 13:54:15 -0800</delta_ts>
            <desc>more FTL fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>192962</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODAxNjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
MTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFB
OEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAv
KiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAx
NDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2Nh
dGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxs
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAw
MEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8q
IFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICov
LAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAq
LywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
LAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkw
RjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBA
QAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4
NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiAr
NDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRy
dXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVy
c2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNy
Y0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQo
aW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0z
MkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMzQsNiArMzM0LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
bXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgxLDYgKzg4MSwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJ
YiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
ODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgw
KQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBw
dWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNp
Z25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDog
ODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAg
Ly8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1
ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0o
cHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZv
KGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1f
bWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxs
TGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkK
K3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9j
b3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBi
b29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAo
IW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1w
KG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAg
bV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApA
QCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29u
c3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAg
LTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkg
Y29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgog
ICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAg
IGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0
LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAg
IENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFy
Z3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNv
cnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAg
ICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZh
cmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAg
cmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBpc1Zh
cmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtp
bmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtp
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzRXNjYXBlZCI7CiAgICAgY2FzZSBOb3RTdHJpbmdP
YmplY3Q6CiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKKyAgICBjYXNlIFZhcmFy
Z3NPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZsb3ciOwogICAgIGNhc2Ug
VW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5j
b3VudGFibGVJbnZhbGlkYXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEluYWRlcXVhdGVDb3ZlcmFnZSwgLy8gV2UgZXhp
dGVkIGJlY2F1c2Ugd2UgZW5kZWQgdXAgaW4gY29kZSB0aGF0IGRpZG4ndCBoYXZlIHByb2ZpbGlu
ZyBjb3ZlcmFnZS4KICAgICBBcmd1bWVudHNFc2NhcGVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
cmd1bWVudHMgZXNjYXBlZCBidXQgd2UgZGlkbid0IGV4cGVjdCB0aGVtIHRvLgogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgorICAgIFZhcmFyZ3NPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB2YXJhcmdzIGNhbGwgcGFzc2VkIG1vcmUgYXJndW1l
bnRzIHRoYW4gd2UgZXhwZWN0ZWQuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgV2F0Y2hkb2dU
aW1lckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdh
dGNoZG9nIHRpbWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05MiwyNSArOTIsMjUgQEAgdm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wSW5Db250ZXh0KFBy
aW50UwogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgb3V0LnByaW50ZigiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkp
OworICAgICAgICBvdXQucHJpbnQoIioiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJp
bnRmKCIqaW50MzIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBv
dXQucHJpbnQoIippbnQzMigiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmlu
dGYoIippbnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CisgICAgICAgIG91
dC5wcmludCgiKmludDUyKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgb3V0
LnByaW50ZigiKnN0cmljdEludDUyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsK
KyAgICAgICAgb3V0LnByaW50KCIqc3RyaWN0SW50NTIoIiwgdmlydHVhbFJlZ2lzdGVyKCksICIp
Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgb3V0LnByaW50ZigiKmRvdWJsZSglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKmRvdWJsZSgiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwg
IikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgb3V0LnByaW50ZigiKmNlbGwoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkpOworICAgICAgICBvdXQucHJpbnQoIipjZWxsKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICBvdXQucHJpbnRmKCIqYm9vbCglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQo
KSk7CisgICAgICAgIG91dC5wcmludCgiKmJvb2woIiwgdmlydHVhbFJlZ2lzdGVyKCksICIpIik7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoK
ICAgICAgICAgb3V0LnByaW50ZigiYXJndW1lbnRzIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk0LDkgKzE5NCwy
MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFNldEFyZ3VtZW50OgotICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUg
c3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRl
LmJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7
CisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4g
c2V0LiBTZXRBcmd1bWVudCBtZWFucyB0aGF0IHNvbWVvbmUgc2V0CisgICAgICAgIC8vIHRoZSBh
cmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVh
bnMgc2V0dGluZyB0byBhCisgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KKyAgICAgICAgQVNT
RVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigp
KTsKICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7
CisgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5jb3VudCkuc2V0VHlw
ZShTcGVjSW50MzIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0t
OykKKyAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5zdGFydC5v
ZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CkBAIC0xMzI0LDcgKzEz
MzUsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50
IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKICAgICAgICAgLy8gb2YgR2V0TXlBcmd1bWVudHNM
ZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMgYSBjbG9iYmVyaW5nIG9wZXJh
dGlvbi4KICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0aGVyIG9wdGltaXphdGlvbnMgb24gdGhp
cyBsYXRlciBvbi4KLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgc2V0Q29uc3RhbnQoCiAgICAgICAgICAgICAg
ICAgbm9kZSwganNOdW1iZXIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJl
cih0cnVlKTsgLy8gUHJldGVuZCB0aGF0IHdlIGNsb2JiZXJlZCB0byBwcmV2ZW50IGNvbnN0YW50
IGZvbGRpbmcuCkBAIC0xOTczLDYgKzE5ODUsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxs
OgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAg
Y2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFvcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2Uga25v
dyBleGFjdGx5IHdoYXQgdGhpcyB3aWxsIHJldHVybi4gQnV0IG9ubHkgYWZ0ZXIgd2UgaGF2ZSBj
aGVja2VkCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgbm9ib2R5IGhhcyBlc2NhcGVkIG91
ciBhcmd1bWVudHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsx
NzAsOCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBtYXgu
Ci0gICAgYm9vbCBoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBp
bnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICBib29sIGhhbmRsZU1pbk1heChp
bnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVj
a3MpOwogICAgIAogICAgIC8vIEhhbmRsZSBjYWxscy4gVGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vy
cm91bmRpbmcgaW5saW5pbmcgYW5kIGludHJpbnNpY3MuCiAgICAgdm9pZCBoYW5kbGVDYWxsKApA
QCAtMTgyLDIwICsxODMsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogY2FsbFRhcmdldCwg
aW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzKTsKICAgICB2
b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwgaW50IGFyZ0NvdW50
LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiog
cGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIGVtaXRG
dW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIHVuZG9GdW5jdGlvbkNo
ZWNrcyhDYWxsVmFyaWFudCk7CisgICAgdm9pZCBoYW5kbGVWYXJhcmdzQ2FsbChJbnN0cnVjdGlv
biogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB2b2lkIGVt
aXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwgVmlydHVhbFJl
Z2lzdGVyIHRoaXNBcmd1bW50KTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21zKGludCBy
ZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7IC8v
IFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmluZyBjYW5kaWRhdGUuIEJ5IGNv
bnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4KICAgICAvLyBIYW5kbGUgaW5s
aW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBw
bGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZz
ZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBl
bnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIENhbGxlckxp
bmtzTWFudWFsbHkgfTsKLSAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQs
IElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpOwotICAgIHZvaWQgaW5saW5l
Q2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0
eSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICBib29sIGF0dGVt
cHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBD
YWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVy
TGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmlu
Z0JhbGFuY2UsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICB2b2lkIGlubGluZUNhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZz
ZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIGNvbnN0IENoZWNr
c0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgdm9pZCBjYW5jZWxMaW5raW5nRm9yQmxvY2so
SW5saW5lU3RhY2tFbnRyeSosIEJhc2ljQmxvY2sqKTsgLy8gT25seSB3b3JrcyB3aGVuIHRoZSBn
aXZlbiBibG9jayBpcyB0aGUgbGFzdCBvbmUgdG8gaGF2ZSBiZWVuIGFkZGVkIGZvciB0aGF0IGlu
bGluZSBzdGFjayBlbnRyeS4KICAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0
dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2Fs
bC4KLSAgICBib29sIGhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2lj
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbik7Ci0gICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5Q29uc3Ry
dWN0b3IoaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUpOwot
ICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5k
LCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3Vs
dE9wZXJhbmQsIEludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IENoZWNrc0Z1
bmN0b3ImIGluc2VydENoZWNrcyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rv
cj4KKyAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFu
ZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5z
ZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIGJv
b2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRl
cm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcyk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKICAgICBOb2Rl
KiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3Ry
dWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5v
ZGVUeXBlIG9wID0gR2V0QnlPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlR2V0QnlJZCgKQEAgLTUy
OCw2ICs1MzQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVT
dGFja0VudHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSkp
KTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAg
ICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVTdGFja0VudHJ5LT5tX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gbnVtQXJn
dW1lbnRzOyBhcmd1bWVudC0tID4gMTspCkBAIC02NTQsMTMgKzY2Miw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlTGFzdE5v
ZGVGcm9tR3JhcGgoTm9kZVR5cGUgZXhwZWN0ZWROb2RlVHlwZSkKLSAgICB7Ci0gICAgICAgIE5v
ZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dGFrZUxhc3QoKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+b3AoKSA9PSBleHBlY3RlZE5vZGVUeXBlKTsKLSAgICAgICAgbV9ncmFwaC5t
X2FsbG9jYXRvci5mcmVlKG5vZGUpOwotICAgIH0KLQogICAgIHZvaWQgYWRkVmFyQXJnQ2hpbGQo
Tm9kZSogY2hpbGQpCiAgICAgewogICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBw
ZW5kKEVkZ2UoY2hpbGQpKTsKQEAgLTY5MSw3ICs2OTIsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgb3AsIG9wSW5mbywgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rp
b24pOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CiAgICAgICAg
IGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQpLCBjYWxsKTsKKyAgICAgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOwogICAg
ICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCkBAIC0xMDQyLDggKzEwNDMsOCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogewogICAgIEFTU0VSVChyZWdpc3Rlck9mZnNl
dCA8PSAwKTsKICAgICAKLSAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3RhbnQoKSkKLSAgICAg
ICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0LT5hc0pTVmFsdWUo
KSkuc2V0SXNQcm92ZWQodHJ1ZSk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50
KCkpCisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxW
YXJpYW50KGNhbGxUYXJnZXQtPmFzQ2VsbCgpKSk7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAgICAgZGF0YUxvZygiICAgIEhhbmRsaW5n
IGNhbGwgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJc
biIpOwpAQCAtMTA2MCw3ICsxMDYxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bCgKICAgICAKICAgICBPcEluZm8gY2FsbE9wSW5mbzsKICAgICAKLSAgICBpZiAoaGFuZGxlSW5s
aW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwga2luZCwgcHJlZGlj
dGlvbikpIHsKKyAgICBpZiAoaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxs
TGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAs
IHJlZ2lzdGVyT2Zmc2V0KSwgVmlydHVhbFJlZ2lzdGVyKCksIDAsIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwga2luZCwgcHJlZGljdGlvbikpIHsKICAgICAgICAg
aWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRp
b24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3Miw3ICsx
MDczLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBjYWxsZWUuZnVuY3Rpb24oKTsKICAgICAgICAgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxp
emF0aW9uS2luZEZvcihraW5kKTsKICAgICAgICAgaWYgKGZ1bmN0aW9uICYmIGZ1bmN0aW9uLT5p
c0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbGVl
LCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUsIGNhbGxUYXJnZXQsIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBjYWxsT3BJ
bmZvID0gT3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CiAKICAgICAgICAgICAgIGlm
IChvcCA9PSBDYWxsKQpAQCAtMTA4OCwxMSArMTA4OSw1NCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKAogICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbE9wSW5mbywgY2FsbFRh
cmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0
aW9uKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxW
YXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJh
cmdzQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCiB7Ci0gICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIEFTU0VSVChPUENPREVf
TEVOR1RIKG9wX2NhbGxfdmFyYXJncykgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFy
YXJncykpOworICAgIAorICAgIGludCByZXN1bHQgPSBwY1sxXS51Lm9wZXJhbmQ7CisgICAgaW50
IGNhbGxlZSA9IHBjWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgdGhpc1JlZyA9IHBjWzNdLnUub3Bl
cmFuZDsKKyAgICBpbnQgYXJndW1lbnRzID0gcGNbNF0udS5vcGVyYW5kOworICAgIGludCBmaXJz
dEZyZWVSZWcgPSBwY1s1XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0g
cGNbNl0udS5vcGVyYW5kOworICAgIAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBn
ZXRQcmVkaWN0aW9uKCk7CisgICAgCisgICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIoY2FsbGVlKSk7CisgICAgCisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0
dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLAorICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOworICAgIGlmIChj
YWxsVGFyZ2V0LT5pc0NlbGxDb25zdGFudCgpKQorICAgICAgICBjYWxsTGlua1N0YXR1cy5zZXRQ
cm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFudChjYWxsVGFyZ2V0LT5hc0NlbGwoKSkpOwor
ICAgIAorICAgIGlmIChjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpCisgICAgICAgICYmIGhh
bmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIGZpcnN0RnJl
ZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpLCBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
KSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5lQ2FsbEZyYW1lOjp2YXJhcmdzS2luZEZvcihraW5k
KSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAg
ICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBt
X2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOworICAgIGRhdGEtPmZpcnN0VmFyQXJnT2Zm
c2V0ID0gZmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgCisgICAgTm9kZSogdGhpc0NoaWxkOwogICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgdGhp
c0NoaWxkID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSk7CisgICAgZWxzZQorICAgICAg
ICB0aGlzQ2hpbGQgPSBudWxscHRyOworICAgIAorICAgIE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBo
KG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgY2FsbFRhcmdldCwgZ2V0KFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKSwgdGhpc0NoaWxkKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CisgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisgICAg
ICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOworfQorCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0
RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50UmVnKQoreworICAgIE5vZGUqIHRoaXNBcmd1bWVudDsK
KyAgICBpZiAodGhpc0FyZ3VtZW50UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgdGhpc0FyZ3VtZW50
ID0gZ2V0KHRoaXNBcmd1bWVudFJlZyk7CiAgICAgZWxzZQogICAgICAgICB0aGlzQXJndW1lbnQg
PSAwOwogCkBAIC0xMTEwLDEzICsxMTU0LDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1
bmN0aW9uQ2hlY2tzKAogICAgIGFkZFRvR3JhcGgoQ2hlY2tDZWxsLCBPcEluZm8obV9ncmFwaC5m
cmVlemUoY2FsbGVlQ2VsbCkpLCBjYWxsVGFyZ2V0Rm9yQ2hlY2ssIHRoaXNBcmd1bWVudCk7CiB9
CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OnVuZG9GdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBj
YWxsZWUpCi17Ci0gICAgcmVtb3ZlTGFzdE5vZGVGcm9tR3JhcGgoQ2hlY2tDZWxsKTsKLSAgICBp
ZiAoY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSkKLSAgICAgICAgcmVtb3ZlTGFzdE5vZGVGcm9tR3Jh
cGgoR2V0RXhlY3V0YWJsZSk7Ci19Ci0KIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRBcmd1bWVu
dFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgZm9yIChpbnQgaSA9IGtp
bmQgPT0gQ29kZUZvckNhbGwgPyAwIDogMTsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OyArK2kpCkBAIC0xMjEwLDEzICsxMjQ3LDE1IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjpp
bmxpbmluZ0Nvc3QoQ2EKICAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCk7
CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0
LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlu
a2FiaWxpdHkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgordm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJh
bmQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6
S2luZCBraW5kLCBDYWxsZXJMaW5rYWJpbGl0eSBjYWxsZXJMaW5rYWJpbGl0eSwgY29uc3QgQ2hl
Y2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
c3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRG
b3Ioa2luZCk7CiAgICAgCiAgICAgQVNTRVJUKGlubGluaW5nQ29zdChjYWxsZWUsIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQpICE9IFVJTlRfTUFYKTsKICAg
ICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxlZS5mdW5jdGlvbkV4ZWN1dGFibGUo
KS0+YmFzZWxpbmVDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBpbnNlcnRD
aGVja3MoY29kZUJsb2NrKTsKIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMh
CiAgICAgCkBAIC0xMzU2LDQ0ICsxMzk1LDU5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmNhbmNl
bExpbmtpbmdGb3JCbG8KICAgICB9CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRU
b0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxs
VmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2lu
ZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGVja3NGdW5jdG9yPgorYm9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50IGNhbGxl
ZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVu
c2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBDYWxsZXJMaW5r
YWJpbGl0eSBjYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5z
aWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tz
KQogewogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5s
aW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CiAgICAgCiAgICAgaWYg
KCFpbmxpbmluZ0JhbGFuY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKKyAgICBib29s
IGRpZEluc2VydENoZWNrcyA9IGZhbHNlOworICAgIGF1dG8gaW5zZXJ0Q2hlY2tzV2l0aEFjY291
bnRpbmcgPSBbJl0gKCkgeworICAgICAgICBpbnNlcnRDaGVja3MobnVsbHB0cik7CisgICAgICAg
IGRpZEluc2VydENoZWNrcyA9IHRydWU7CisgICAgfTsKKyAgICAKICAgICBpZiAoSW50ZXJuYWxG
dW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUuaW50ZXJuYWxGdW5jdGlvbigpKSB7Ci0gICAgICAg
IGlmIChoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0T3BlcmFuZCwgZnVuY3Rp
b24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6
YXRpb25LaW5kKSkgeworICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9u
KHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCwgaW5zZXJ0Q2hlY2tzV2l0aEFjY291bnRp
bmcpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRJbnNlcnRDaGVja3MpOwogICAg
ICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0Tm9kZSk7CiAgICAgICAgICAg
ICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFu
Y2UtLTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENoZWNrcyk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgSW50cmluc2ljIGludHJpbnNpYyA9IGNh
bGxlZS5pbnRyaW5zaWNGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpZiAoaW50cmluc2lj
ICE9IE5vSW50cmluc2ljKSB7Ci0gICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWMocmVzdWx0T3Bl
cmFuZCwgaW50cmluc2ljLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHByZWRpY3Rpb24pKSB7CisgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWMocmVzdWx0T3Bl
cmFuZCwgaW50cmluc2ljLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHByZWRpY3Rpb24sIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nKSkgeworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgY2FsbFRhcmdldE5vZGUpOwogICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhh
bnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFs
aXphdGlvbktpbmQpOwogICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFkaWRJbnNlcnRDaGVja3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAogICAgIHVuc2lnbmVkIG15SW5saW5pbmdDb3N0ID0gaW5saW5pbmdDb3N0KGNh
bGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAg
ICAgaWYgKG15SW5saW5pbmdDb3N0ID4gaW5saW5pbmdCYWxhbmNlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgaW5saW5lQ2FsbChjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFu
ZCwgY2FsbGVlLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIGNhbGxlckxpbmthYmlsaXR5KTsKKworICAgIGlubGluZUNhbGwoY2Fs
bFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxlZSwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBjYWxsZXJMaW5rYWJpbGl0
eSwgaW5zZXJ0Q2hlY2tzKTsKICAgICBpbmxpbmluZ0JhbGFuY2UgLT0gbXlJbmxpbmluZ0Nvc3Q7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExp
bmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9w
LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikK
K2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAorICAgIE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5r
U3RhdHVzLAorICAgIGludCByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc0FyZ3VtZW50LAorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVu
dCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsCisgICAgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxs
RnJhbWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBpZiAo
dmVyYm9zZSkgewogICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuIik7CkBA
IC0xNDA3LDYgKzE0NjEsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
Tm9kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIGlmIChJbmxpbmVD
YWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKQorICAgICAgICAmJiBjYWxsTGlua1N0YXR1cy5tYXhO
dW1Bcmd1bWVudHMoKSA+IE9wdGlvbnM6Om1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcoKSkgewor
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5p
bmcgYmVjYXVzZSBvZiB2YXJhcmdzLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgICAgIAogICAgIHVuc2lnbmVkIGlubGluaW5nQmFsYW5jZSA9IE9wdGlvbnM6Om1heGlt
dW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiAgICAg
aWYgKHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KQogICAgICAgICBpbmxp
bmluZ0JhbGFuY2UgPSBzdGQ6Om1pbihpbmxpbmluZ0JhbGFuY2UsIE9wdGlvbnM6Om1heGltdW1G
dW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKSk7CkBA
IC0xNDE3LDE3ICsxNDc4LDEwMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmlu
ZyhOb2RlCiAgICAgLy8gc2ltcGxpZmljYXRpb24gb24gdGhlIGZseSBhbmQgdGhpcyBoZWxwcyBy
ZWR1Y2UgY29tcGlsZSB0aW1lcywgYnV0IHdlIGNhbiBvbmx5IGxldmVyYWdlCiAgICAgLy8gdGhp
cyBpbiBjYXNlcyB3aGVyZSB3ZSBkb24ndCBuZWVkIGNvbnRyb2wgZmxvdyBkaWFtb25kcyB0byBj
aGVjayB0aGUgY2FsbGVlLgogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1Bh
dGgoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0gMSkgewotICAgICAgICBlbWl0RnVuY3Rp
b25DaGVja3MoCi0gICAgICAgICAgICBjYWxsTGlua1N0YXR1c1swXSwgY2FsbFRhcmdldE5vZGUs
IHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQ7CisgICAgICAgIAorICAgICAgICAvLyBPbmx5IHVzZWQgZm9yIHZhcmFyZ3MgY2Fs
bHMuCisgICAgICAgIHVuc2lnbmVkIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAgICAgICB1bnNp
Z25lZCBtYXhOdW1Bcmd1bWVudHMgPSAwOworCisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6
OmlzVmFyYXJncyhraW5kKSkgeworICAgICAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb25FeGVjdXRhYmxlID0gY2FsbExpbmtTdGF0dXNbMF0uZnVuY3Rpb25FeGVjdXRhYmxl
KCkpCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5TWluaW11bSA9IGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+cGFyYW1ldGVyQ291bnQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
YW5kYXRvcnlNaW5pbXVtID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gaW5jbHVk
ZXMgInRoaXMiCisgICAgICAgICAgICBtYXhOdW1Bcmd1bWVudHMgPSBzdGQ6Om1heCgKKyAgICAg
ICAgICAgICAgICBjYWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAg
ICAgICBtYW5kYXRvcnlNaW5pbXVtICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFdlIHNvcnQgb2YgcHJldGVuZCB0aGF0IHRoaXMgKmlzKiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50
cyB0aGF0IHdlcmUgcGFzc2VkLgorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPSBtYXhOdW1Bcmd1bWVudHM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0ID0gcmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICBy
ZWdpc3Rlck9mZnNldCAtPSBtYXhOdW1Bcmd1bWVudHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAg
ICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
KyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigK
KyAgICAgICAgICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAg
ICAgIC1yZWdpc3Rlck9mZnNldCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgICAgICAKICAgICAg
ICAgYm9vbCByZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVDYWxsKAogICAgICAgICAgICAgY2FsbFRh
cmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNl
dCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBr
aW5kLCBDYWxsZXJEb2VzTm9ybWFsTGlua2luZywgcHJlZGljdGlvbiwKLSAgICAgICAgICAgIGlu
bGluaW5nQmFsYW5jZSk7Ci0gICAgICAgIGlmICghcmVzdWx0ICYmICFjYWxsTGlua1N0YXR1cy5p
c1Byb3ZlZCgpKQotICAgICAgICAgICAgdW5kb0Z1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVz
WzBdKTsKKyAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSwgWyZdIChDb2RlQmxvY2sqIGNvZGVC
bG9jaykgeworICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1
c1swXSwgY2FsbFRhcmdldE5vZGUsIHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCA/
IHRoaXNBcmd1bWVudCA6IFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgICAgICAgICAgICAgIC8v
IElmIHdlIGhhdmUgYSB2YXJhcmdzIGNhbGwsIHdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgYXJndW1l
bnRzIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1Zh
cmFyZ3Moa2luZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSBy
ZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAgICAg
ICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdz
RGF0YS5hZGQoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRTdGFydCArIDEpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5jb3Vu
dCA9IFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5vZmZzZXQgPSBhcmd1bWVudHNPZmZzZXQ7
CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4TnVtQXJndW1lbnRzOworICAg
ICAgICAgICAgICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11
bTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJh
cmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIC8vIEluIERGRyBJUiBiZWZvcmUgU1NBLCB3ZSBjYW5ub3Qg
aW5zZXJ0IGNvbnRyb2wgZmxvdyBiZXR3ZWVuIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAg
ICAvLyBMb2FkVmFyYXJncyBhbmQgdGhlIGxhc3QgU2V0QXJndW1lbnQuIFRoaXMgaXNuJ3QgYSBw
cm9ibGVtIG9uY2Ugd2UgZ2V0IHRvIERGRworICAgICAgICAgICAgICAgICAgICAvLyBTU0EuIEZv
cnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29ucyBmb3Igbm90IGluc2VydGluZyBj
b250cm9sIGZsb3cKKyAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIFNTQS4KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFi
bGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgZmFs
c2UpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQg
d2lsbCBmb3JjZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24n
dAorICAgICAgICAgICAgICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNl
IG9mIGEgU2V0QXJndW1lbnQgYW5kIEZsdXNoZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBpcworICAg
ICAgICAgICAgICAgICAgICAvLyBtb3N0bHkganVzdCBhIGZvcm1hbGl0eS4KKyAgICAgICAgICAg
ICAgICAgICAgY291bnRWYXJpYWJsZS0+cHJlZGljdChTcGVjSW50MzIpOworICAgICAgICAgICAg
ICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOworICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+
bG9jYWwoKSwgc2V0QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlz
QXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IG1heE51bUFyZ3VtZW50czsgKythcmd1
bWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCArIGFyZ3VtZW50KSwgZmFsc2UpOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVl
KTsgLy8gV2UgY3VycmVudGx5IGhhdmUgbm93aGVyZSB0byBwdXQgdGhlIHR5cGUgY2hlY2sgb24g
dGhlIExvYWRWYXJhcmdzLiBMb2FkVmFyYXJncyBpcyBlZmZlY3RmdWwsIHNvIGFmdGVyIGl0IGZp
bmlzaGVzLCB3ZSBjYW5ub3QgZXhpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRm9yIGEgd2hpbGUgaXQgaGFkIGJlZW4gbXkgaW50ZW50aW9u
IHRvIGRvIHRoaW5ncyBsaWtlIHRoaXMgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gcHJlZGljdGlvbiBpbmplY3Rpb24gcGhhc2UuIEJ1dCBpbiB0aGlzIGNhc2UgaXQncyBy
ZWFsbHkgYmVzdCB0byBkbyBpdCBoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVj
YXVzZSBpdCdzIGhlcmUgdGhhdCB3ZSBoYXZlIGFjY2VzcyB0byB0aGUgdmFyaWFibGUgYWNjZXNz
IGRhdGFzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlubGluaW5nIHdlJ3Jl
IGFib3V0IHRvIGRvLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFNvbWV0aGluZyBlbHNlIHRoYXQncyBpbnRlcmVzdGluZyBoZXJlIGlzIHRo
YXQgd2UnZCByZWFsbHkgbG92ZSB0byBnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBy
ZWRpY3Rpb25zIGZyb20gdGhlIGFyZ3VtZW50cyBsb2FkZWQgYXQgdGhlIGNhbGxzaXRlLCByYXRo
ZXIgdGhhbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyByZWNlaXZl
ZCBpbnNpZGUgdGhlIGNhbGxlZS4gQnV0IHRoYXQgcHJvYmFibHkgd29uJ3QgbWF0dGVyIGZvciBt
b3N0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxscy4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjb2RlQmxvY2sgJiYgYXJndW1lbnQgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBjb2RlQmxv
Y2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGUtPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVu
dCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgIGRhdGFMb2coIkRvbmUgaW5saW5pbmcgKHNpbXBsZSkuXG4iKTsKICAg
ICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsK
KyAgICAgICAgICAgIGRhdGFMb2coIlJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE0MzcsMTEgKzE1ODEsOSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gZG8gbW9yZSBk
ZXRhaWxlZCBwb2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7IGFuZCBzZWNvbmQsIGl0
IHJlZHVjZXMgY29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcuIEFuZCBieSBwb2x5dmFy
aWFudCBwcm9maWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxpbmcgb2YgKnRoaXMqIGNh
bGwuIE5vdGUgdGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhhdCBhc3BlY3Qgb2YgdGhp
cyBieSBkb2luZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5nIHRoZSBwcm9maWxpbmcK
LSAgICAvLyBhbHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhpcywgYnV0IGl0IGNvdWxk
IGJlIGludGVyZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5nIGEKLSAgICAvLyBzZXBh
cmF0ZSBub2RlIGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8vIEZJWE1FOiBJbnRyb2R1
Y2UgdGhlIG5vdGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9maWxpbmcgbm9kZS4KLSAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDMzCi0gICAg
aWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1v
cnBoaWNDYWxsSW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAgaWYgKCFpc0ZUTChtX2dy
YXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5p
bmcoKQorICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgewogICAg
ICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmlu
ZyAoaGFyZCkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29k
ZU9yaWdpbigpLCAiXG4iKTsKQEAgLTE0ODIsNiArMTYyNCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJl
bnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAogICAgIC8vIFRoaXMgbWFr
ZXMgbWUgd2lzaCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGltZS4gV2UgbmVlZCB0byBw
aWNrIGEgdmFyaWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3JlIHRoZSBjYWxsZWUgc28g
dGhhdCBpdCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBibG9ja3Mgd2UncmUgYWJv
dXQgdG8gY3JlYXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9pbmcgYW4gaW1tZWRpYXRl
LXNldCBoZXJlIGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3JtZWQgYW55IHNpZGUgZWZm
ZWN0cwpAQCAtMTUyNiw3ICsxNjcwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoTm9kZQogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0ZW1wdFRvSW5saW5l
Q2FsbCgKICAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxM
aW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJMaW5rc01hbnVhbGx5LCBwcmVk
aWN0aW9uLAotICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlKTsKKyAgICAgICAgICAgIGlubGlu
aW5nQmFsYW5jZSwgWyZdIChDb2RlQmxvY2sqKSB7IH0pOwogICAgICAgICAKICAgICAgICAgaWYg
KCFpbmxpbmluZ1Jlc3VsdCkgewogICAgICAgICAgICAgLy8gVGhhdCBmYWlsZWQgc28gd2UgbGV0
IHRoZSBibG9jayBkaWUuIE5vdGhpbmcgaW50ZXJlc3Rpbmcgc2hvdWxkIGhhdmUgYmVlbiBhZGRl
ZCB0bwpAQCAtMTYxMCwxNCArMTc1NCwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hlY2tzRnVuY3Rvcj4KK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChpbnQg
cmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3Mp
CiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5t
aW4oKQorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFu
dE5hTikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAKICAgICBpZiAoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRoLm1pbih4KQorICAgICAgICBp
bnNlcnRDaGVja3MoKTsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVyVXNlKSk7CiAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CkBAIC0xNjI1LDYg
KzE3NzIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlCiAgICAg
fQogICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAzKSB7IC8vIE1h
dGgubWluKHgsIHkpCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKG9wLCBnZXQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtMTYzMywxMSArMTc4MSwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVN
aW5NYXgoaW50IHJlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMs
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4K
K2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwg
SW50cmluc2ljIGludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IENoZWNrc0Z1
bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBzd2l0Y2ggKGludHJpbnNpYykgewogICAgIGNh
c2UgQWJzSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA9PSAxKSB7IC8vIE1hdGguYWJzKCkKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChK
U0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CkBAIC0xNjQ1LDYgKzE3OTUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBv
cnRzRmxvYXRpbmdQb2ludEFicygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
ICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChBcml0
aEFicywgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkp
OwogICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKQogICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFn
cyhOb2RlTWF5T3ZlcmZsb3dJbkRGRyk7CkBAIC0xNjUzLDI5ICsxODA0LDMzIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICB9CiAKICAgICBjYXNlIE1pbklu
dHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0
aE1pbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAg
ICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0aE1pbiwgcmVnaXN0ZXJP
ZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnNlcnRDaGVja3MpOwogICAgICAg
ICAKICAgICBjYXNlIE1heEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChy
ZXN1bHRPcGVyYW5kLCBBcml0aE1heCwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBB
cml0aE1heCwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnNl
cnRDaGVja3MpOwogICAgICAgICAKICAgICBjYXNlIFNxcnRJbnRyaW5zaWM6CiAgICAgY2FzZSBD
b3NJbnRyaW5zaWM6CiAgICAgY2FzZSBTaW5JbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsKKyAgICAgICAgICAgIGluc2VydENoZWNrcygp
OwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9H
cmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKGludHJpbnNp
YykgewogICAgICAgICBjYXNlIFNxcnRJbnRyaW5zaWM6CisgICAgICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFk
ZFRvR3JhcGgoQXJpdGhTcXJ0LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVn
aXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBDb3NJbnRyaW5zaWM6CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsK
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3Jh
cGgoQXJpdGhDb3MsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIFNpbkludHJpbnNpYzoKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChBcml0
aFNpbiwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCkBAIC0xNjg4LDkgKzE4
NDMsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNh
c2UgUG93SW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA8IDMpIHsKICAgICAgICAgICAgIC8vIE1hdGgucG93KCkgYW5kIE1hdGgucG93KHgpIHJldHVy
biBOYU4uCisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZv
KG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQor
ICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHhPcGVyYW5k
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgeU9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgy
LCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3Bl
cmFuZCksIGFkZFRvR3JhcGgoQXJpdGhQb3csIGdldCh4T3BlcmFuZCksIGdldCh5T3BlcmFuZCkp
KTsKQEAgLTE3MTAsNiArMTg2Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyhpbnQKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgTm9kZSogYXJyYXlQdXNoID0gYWRk
VG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJl
ZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNl
dCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7
CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhcnJheVB1
c2gpOwogICAgICAgICAgICAgCkBAIC0xNzMzLDYgKzE4OTEsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOiB7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIE5vZGUq
IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQo
KSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAs
IHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRPcGVyYW5kKSwgYXJyYXlQb3ApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzQ3
LDYgKzE5MDYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdp
c3Rlck9mZnNldCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9wZXJhbmQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIE5vZGUq
IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXlNb2Rl
KEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0KGluZGV4T3Bl
cmFuZCkpOwpAQCAtMTc1OSw2ICsxOTE5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0g
MikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNlcnRDaGVja3MoKTsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQp
OwogICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcElu
Zm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwg
Z2V0KGluZGV4T3BlcmFuZCkpOwpAQCAtMTc3MCw2ICsxOTMxLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNl
cnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgTm9kZSog
Y2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0Zyb21DaGFyQ29kZSwgZ2V0KGluZGV4T3BlcmFu
ZCkpOwogCkBAIC0xNzgyLDYgKzE5NDQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAy
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hl
Y2tzKCk7CiAgICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cEV4ZWMs
IE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dE9wZXJhbmQpLCByZWdFeHBFeGVjKTsKICAgICAgICAgCkBAIC0xNzkyLDYgKzE5NTUsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIE5vZGUqIHJlZ0V4cEV4
ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZWdFeHBFeGVjKTsKICAgICAg
ICAgCkBAIC0xODAxLDYgKzE5NjUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRy
aW5zaWMoaW50CiAgICAgY2FzZSBJTXVsSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAhPSAzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxlZnRPcGVyYW5k
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmlnaHRPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMiwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBOb2RlKiBsZWZ0ID0gZ2V0KGxlZnRPcGVy
YW5kKTsKQEAgLTE4MTIsMjkgKzE5NzcsMzQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljKGludAogICAgIGNhc2UgRlJvdW5kSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhG
Um91bmQsIGdldChvcGVyYW5kKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgREZHVHJ1ZUludHJpbnNpYzogeworICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwganNDb25zdGFu
dChqc0Jvb2xlYW4odHJ1ZSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIE9TUkV4aXRJbnRyaW5zaWM6IHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
CiAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9j
b25zdGFudFVuZGVmaW5lZCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIElzRmluYWxUaWVySW50cmluc2ljOiB7CisgICAgICAgIGluc2VydENoZWNr
cygpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAg
ICAgICAganNDb25zdGFudChqc0Jvb2xlYW4oT3B0aW9uczo6dXNlRlRMSklUKCkgPyBpc0ZUTCht
X2dyYXBoLm1fcGxhbi5tb2RlKSA6IHRydWUpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRJbnQzMkhlYXBQcmVkaWN0aW9uSW50cmluc2ljOiB7
CisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAg
ICAgICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQpAQCAtMTg0Nyw2ICsyMDE3
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNhc2Ug
RmlhdEludDUySW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIGlmIChlbmFibGVJbnQ1Migp
KQogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9H
cmFwaChGaWF0SW50NTIsIGdldChvcGVyYW5kKSkpOwpAQCAtMTg2MCw5ICsyMDMxLDEwIEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICB9CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVU
eXBlZEFycmF5Q29uc3RydWN0b3IoCiAgICAgaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVu
Y3Rpb24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCi0gICAgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSB0eXBlKQorICAgIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUgdHlwZSwgY29uc3QgQ2hlY2tzRnVuY3Rv
ciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIGlmICghaXNUeXBlZFZpZXcodHlwZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE5MDYsMTUgKzIwNzgsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlVHlwZWRBcnJheUNvbgogICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAhPSAyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBpbnNlcnRD
aGVja3MoKTsKICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAg
ICBhZGRUb0dyYXBoKE5ld1R5cGVkQXJyYXksIE9wSW5mbyh0eXBlKSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbigKICAgICBpbnQgcmVzdWx0T3BlcmFu
ZCwgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKLSAgICBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKKyAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIC8v
IElmIHdlIGV2ZXIgZmluZCB0aGF0IHdlIGhhdmUgYSBsb3Qgb2YgaW50ZXJuYWwgZnVuY3Rpb25z
IHRoYXQgd2Ugc3BlY2lhbGl6ZSBmb3IsCiAgICAgLy8gdGhlbiB3ZSBzaG91bGQgcHJvYmFibHkg
aGF2ZSBzb21lIHNvcnQgb2YgaGFzaHRhYmxlIGRpc3BhdGNoLCBvciBtYXliZSBldmVuCkBAIC0x
OTI3LDYgKzIxMDEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVy
CiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCkgIT0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3QXJyYXlX
aXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRlZCksIGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CkBAIC0xOTQxLDYgKzIxMTYsOCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgfQogICAgIAogICAg
IGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZvKCkgPT0gU3RyaW5nQ29uc3RydWN0b3I6OmluZm8oKSkg
eworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgCiAgICAgICAgIE5vZGUqIHJlc3Vs
dDsKICAgICAgICAgCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSAx
KQpAQCAtMTk1NiwxMSArMjEzMyw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0
YW50SW50ZXIKICAgICB9CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0
eXBlSW5kZXggPCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7ICsrdHlwZUluZGV4KSB7Ci0g
ICAgICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAorICAgICAg
ICByZXR1cm4gaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAogICAgICAgICAgICAgcmVzdWx0
T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywKLSAgICAgICAgICAgIGluZGV4VG9UeXBlZEFycmF5VHlwZSh0eXBlSW5kZXgpKTsKLSAg
ICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
aW5kZXhUb1R5cGVkQXJyYXlUeXBlKHR5cGVJbmRleCksIGluc2VydENoZWNrcyk7CiAgICAgfQog
ICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTMxMjIsNDMgKzMyOTcsNzAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaW50IHRoaXNSZWcg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQg
Zmlyc3RGcmVlUmVnID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUoKSk7
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFyZ3VtZW50cywgYXJndW1lbnRzID09IG1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpKTsK
LSAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7Ci0KLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQg
PSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LiBXZSBzdGFydCB3
aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAotICAgICAgICAgICAgLy8gdGhlbiBhZGp1
c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4KLSAgICAgICAgICAg
IGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7Ci0gICAgICAgICAgICByZWdp
c3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBwYXNzaW5nIHNvbWUgYXJndW1l
bnRzLgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhlYWRlci4K
KyAgICAgICAgICAgIGlmIChhcmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKKyAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dB
cmd1bWVudHMoKSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKQorICAg
ICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFyYXJncygpCisgICAg
ICAgICAgICAgICAgICAgICYmICFmaXJzdFZhckFyZ09mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRz
LnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21w
dXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNlZCByZWdp
c3RlciwgYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhp
bmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCisgICAgICAgICAgICAgICAgICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0IC09IGFyZ0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1
bWVudHMuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFt
ZSBoZWFkZXIuCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBh
bGlnbm1lbnQgcmlnaHQuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZz
ZXQpOworCisgICAgICAgICAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3Vs
ZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2Ug
aXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9u
ZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQor
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVO
YWtlZFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09E
RV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxl
ZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gRW1pdCBDYWxsRm9yd2FyZFZhcmFyZ3MKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB3ZSBjYW5ub3QgaW5saW5lIGZvcndhcmRlZCB2
YXJhcmdzIGNhbGxzIGluc2lkZSBhIHZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBjYWxsIGZy
YW1lLiBXZSB3aWxsIHByb2JhYmx5IGZpeCB0aGF0IG9uY2Ugd2UgZmluYWxseSBnZXQgcmlkIG9m
IHRoZQorICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBvYmplY3Qgc3BlY2lhbC1jYXNpbmcu
CisgICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2NhbGxW
YXJhcmdzRGF0YS5hZGQoKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNl
dCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgICAgICBDYWxsRm9yd2Fy
ZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAg
ICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSksIGdldChWaXJ0dWFsUmVn
aXN0ZXIodGhpc1JlZykpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
UmVnKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOworICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgotICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAotICAgICAgICAgICAg
ICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCi0gICAgICAgICAgICAgICAgLXJlZ2lzdGVy
T2Zmc2V0KTsKLQotICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0IGhhdmUgc2V0IHVwIHRoZSBhcmd1bWVu
dHMuIEJ1dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAotICAgICAgICAgICAgLy8gbG9vayBsaWtl
IHRoZSBieXRlY29kZSBoYWQgZG9uZSBpdC4KLSAgICAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIg
PSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KFZpcnR1YWxSZWdp
c3Rlcih0aGlzUmVnKSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQotICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVDYWxsKAotICAgICAgICAgICAgICAgIHJl
c3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwK
LSAgICAgICAgICAgICAgICBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCk7CisgICAg
ICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGxWYXJhcmdz
LCBDb2RlRm9yQ2FsbCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3Mp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnczogeworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9u
LCBDb25zdHJ1Y3RWYXJhcmdzLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6CiAgICAgICAgICAgICAvLyBTdGF0aWNhbGx5IHNwZWN1
bGF0ZSBmb3Igbm93LiBJdCBtYWtlcyBzZW5zZSB0byBsZXQgc3BlY3VsYXRlLW9ubHkgam5lcV9w
dHIKICAgICAgICAgICAgIC8vIHN1cHBvcnQgc2ltbWVyIGZvciBhIHdoaWxlIGJlZm9yZSBtYWtp
bmcgaXQgbW9yZSBnZW5lcmFsLCBzaW5jZSBpdCdzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtOTYsNiArOTYsOCBAQCBpbmxpbmUgdm9pZCBkZWJ1Z0ZhaWwoQ29k
ZUJsb2NrKiBjb2RlQmxvCiAKIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2Rl
SUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogcGMpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7IC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBzb21lIGJ5
dGVjb2RlIHBhcnNpbmcuIE9yZGluYXJpbHkgYnl0ZWNvZGUgcGFyc2luZyByZXF1aXJlcyB0aGUg
b3duaW5nIENvZGVCbG9jay4gSXQncyBzb3J0IG9mIHN0cmFuZ2UgdGhhdCB3ZSBkb24ndCB1c2Ug
aXQgaGVyZSByaWdodCBub3cuCisgICAgCiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIGNh
c2Ugb3BfZW50ZXI6CiAgICAgY2FzZSBvcF90b3VjaF9lbnRyeToKQEAgLTE4Miw2ICsxODQsOCBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF90
aHJvd19zdGF0aWNfZXJyb3I6CiAgICAgY2FzZSBvcF9jYWxsOgogICAgIGNhc2Ugb3BfY29uc3Ry
dWN0OgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Zh
cmFyZ3M6CiAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOgogICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czoKICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czoKQEAgLTIyMywxNCArMjI3
LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgICAgICBy
ZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKICAgICB9CiAKLSAgICBjYXNlIG9wX2NhbGxfdmFy
YXJnczoKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYmIHBjWzRdLnUu
b3BlcmFuZCA9PSBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKLSAgICAg
ICAgICAgICYmICFwY1s2XS51Lm9wZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5l
OwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSB0aGlzLgotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI2Ci0gICAgICAgIHJl
dHVybiBDYW5ub3RDb21waWxlOwotCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiAKICAgICBjYXNl
IG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgogICAgIGNhc2Ugb3BfbmV3X2Z1bmM6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlz
aW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOSArODYsNyBAQCBpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGZ1bmN0aW9uQ2FwYWJpbGl0CiAgICAgICAgIHJldHVybiBsZWFzdFVw
cGVyQm91bmQoQ2FuQ29tcGlsZUFuZElubGluZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwog
ICAgIGlmIChtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQogICAgICAgICByZXR1cm4gbGVh
c3RVcHBlckJvdW5kKENhbkNvbXBpbGUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKLSAgICBp
ZiAoIW1pZ2h0Q29tcGlsZSAmJiBtaWdodElubGluZSkKLSAgICAgICAgcmV0dXJuIGxlYXN0VXBw
ZXJCb3VuZChDYW5JbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKLSAgICBpZiAoIW1p
Z2h0Q29tcGlsZSAmJiAhbWlnaHRJbmxpbmUpCisgICAgaWYgKCFtaWdodENvbXBpbGUpCiAgICAg
ICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw2ICsz
NjYsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2Fz
ZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3Ry
dWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6
CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAg
Y2FzZSBJbjoKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKQEAgLTQwMSw2ICs0
MDQsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBu
b2RlLT5sb2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgLy8gVGhpcyBhY3R1YWxs
eSB3cml0ZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFzIHdlbGwuIEJ1dCB3aGVuIGl0IHJlYWRzIHRo
ZSBhcnJheSwgaXQgZG9lcworICAgICAgICAvLyBzbyBpbiBhIHdheSB0aGF0IG1heSB0cmlnZ2Vy
IGdldHRlcnMgb3IgdmFyaW91cyB0cmFwcy4KKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAg
IHdyaXRlKFdvcmxkKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIEdldExv
Y2FsVW5saW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
dW5saW5rZWRMb2NhbCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2Ms
IEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsK
QEAgLTg4MSw3ICs4OTEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHRvQ1N0cmluZygiVW5yZWNv
Z25pemVkIG5vZGUgdHlwZTogIiwgR3JhcGg6Om9wTmFtZShub2RlLT5vcCgpKSkuZGF0YSgpKTsK
IH0KIAogY2xhc3MgTm9PcENsb2JiZXJpemUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjkyLDcgKzI5Miw2IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogZW51bSBDYXBhYmlsaXR5TGV2ZWwgewogICAg
IENhbm5vdENvbXBpbGUsCi0gICAgQ2FuSW5saW5lLAogICAgIENhbkNvbXBpbGUsCiAgICAgQ2Fu
Q29tcGlsZUFuZElubGluZSwKICAgICBDYXBhYmlsaXR5TGV2ZWxOb3RTZXQKQEAgLTMxMiw3ICsz
MTEsNiBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKENhcGFiaWxpdHlMZXZlbCBsCiBpbmxpbmUg
Ym9vbCBjYW5JbmxpbmUoQ2FwYWJpbGl0eUxldmVsIGxldmVsKQogewogICAgIHN3aXRjaCAobGV2
ZWwpIHsKLSAgICBjYXNlIENhbklubGluZToKICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CkBAIC0zMjUsMTQgKzMyMyw2IEBA
IGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgbGVhc3RVcHBlckJvdW5kKEMKICAgICBzd2l0Y2ggKGEp
IHsKICAgICBjYXNlIENhbm5vdENvbXBpbGU6CiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxl
OwotICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBzd2l0Y2ggKGIpIHsKLSAgICAgICAgY2Fz
ZSBDYW5JbmxpbmU6Ci0gICAgICAgIGNhc2UgQ2FuQ29tcGlsZUFuZElubGluZToKLSAgICAgICAg
ICAgIHJldHVybiBDYW5JbmxpbmU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKLSAgICAgICAgfQogICAgIGNhc2UgQ2FuQ29tcGlsZToKICAgICAg
ICAgc3dpdGNoIChiKSB7CiAgICAgICAgIGNhc2UgQ2FuQ29tcGlsZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDYgKzExNywxMCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0
OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2Fz
ZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgQnJlYWtw
b2ludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEzLDYgKzMxMywxOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2Rl
LT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgaWYgKG5vZGUtPmhhc09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5vYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhKCkpOworICAgIGlmIChub2RlLT5oYXNDYWxsVmFyYXJnc0RhdGEoKSkKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiZmlyc3RWYXJBcmdPZmZzZXQgPSAiLCBub2RlLT5jYWxs
VmFyYXJnc0RhdGEoKS0+Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGlmIChub2RlLT5oYXNMb2Fk
VmFyYXJnc0RhdGEoKSkgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RhcnQgPSAiLCBk
YXRhLT5zdGFydCwgIiwgY291bnQgPSAiLCBkYXRhLT5jb3VudCk7CisgICAgICAgIGlmIChkYXRh
LT5tYWNoaW5lU3RhcnQuaXNWYWxpZCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIG1hY2hp
bmVTdGFydCA9ICIsIGRhdGEtPm1hY2hpbmVTdGFydCk7CisgICAgICAgIGlmIChkYXRhLT5tYWNo
aW5lQ291bnQuaXNWYWxpZCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIG1hY2hpbmVDb3Vu
dCA9ICIsIGRhdGEtPm1hY2hpbmVDb3VudCk7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQg
PSAiLCBkYXRhLT5vZmZzZXQsICIsIG1hbmRhdG9yeU1pbmltdW0gPSAiLCBkYXRhLT5tYW5kYXRv
cnlNaW5pbXVtKTsKKyAgICAgICAgb3V0LnByaW50KCIsIGxpbWl0ID0gIiwgZGF0YS0+bGltaXQp
OworICAgIH0KICAgICBpZiAobm9kZS0+aXNDb25zdGFudCgpKQogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5vZGUtPmNvbnN0YW50KCksIGNvbnRleHQpKTsK
ICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCkBAIC04NjksMTAgKzg4MSwxMiBAQCBib29sIEdyYXBo
Ojppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpCiAgICAgICAgICAgICBpZiAocmVnLmlzQXJn
dW1lbnQoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZy5vZmZzZXQoKSA8
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAo
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKKyAgICAgICAgICAgICAg
ICAgICAgJiYgcmVnLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUpCisgICAgICAgICAgICAgICAgaWYgKGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQorICAgICAgICAgICAgICAgICAg
ICAmJiByZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6QXJndW1lbnRDb3VudCkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTIzNSw2ICsxMjQ5LDUxIEBAIHZvaWQgR3JhcGg6OmhhbmRsZUFz
c2VydGlvbkZhaWx1cmUoCiAgICAgY3Jhc2goKnRoaXMsIHRvQ1N0cmluZygiV2hpbGUgaGFuZGxp
bmcgYmxvY2sgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG5cbiIpLCBmaWxlLCBsaW5lLCBmdW5j
dGlvbiwgYXNzZXJ0aW9uKTsKIH0KIAorVmFsdWVQcm9maWxlKiBHcmFwaDo6dmFsdWVQcm9maWxl
Rm9yKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisgICAgaWYgKG5vZGUt
Pmhhc0xvY2FsKCp0aGlzKSkgeworICAgICAgICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGludCBhcmd1bWVudCA9
IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOworICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUg
PSBtX2FyZ3VtZW50c1thcmd1bWVudF07CisgICAgICAgIGlmICghYXJndW1lbnROb2RlKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSAhPSBhcmd1bWVudE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVBy
b2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAobm9k
ZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZh
bHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK01ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Io
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlKCk7CisgICAgCisgICAgaWYgKFZhbHVlUHJvZmlsZSogdmFsdWVQ
cm9maWxlID0gdmFsdWVQcm9maWxlRm9yKG5vZGUpKQorICAgICAgICByZXR1cm4gTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpOworICAgIAorICAgIGlmIChub2RlLT5v
cCgpID09IEdldExvY2FsKSB7CisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5k
KAorICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5KAorICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRl
Y29kZUluZGV4LCBub2RlLT5sb2NhbCgpKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3Miw1MCAr
NDcyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrLT51bmNoZWNr
ZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKTsKICAgICB9CiAgICAgCi0gICAgVmFsdWVQcm9maWxlKiB2
YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAKLSAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKLSAgICAg
ICAgICAgIGlmICghbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJn
dW1lbnQoKTsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fYXJndW1lbnRzW2Fy
Z3VtZW50XTsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnROb2RlKQotICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpICE9IGFyZ3VtZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBw
cm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgCi0gICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlID0gdmFsdWVQcm9m
aWxlRm9yKG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUodmFsdWVQcm9maWxlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldExvY2FsKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNl
bGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAKLSAgICAg
ICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgsIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKTsKLSAg
ICB9CisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSk7CisgICAg
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKE5vZGUqIG5vZGUpOwogICAgIAogICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0CiAg
ICAgewpAQCAtODUzLDYgKzgxMSw4IEBAIHB1YmxpYzoKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNl
dERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXRE
YXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOwogICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAgQmFnPENhbGxWYXJhcmdz
RGF0YT4gbV9jYWxsVmFyYXJnc0RhdGE7CisgICAgQmFnPExvYWRWYXJhcmdzRGF0YT4gbV9sb2Fk
VmFyYXJnc0RhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVW
YXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0Fy
Z3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICAgICAgICAgLy8gbG9va3VwRXhj
ZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhl
IFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIG1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogCiAjaWYgQ1BVKFg4NikKICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB1c2UgdGhlIGNh
bGwgYWJzdHJhY3Rpb24sIGJ1dCB0aGlzIGlzIGN1cnJlbnRseSBpbiB0aGUgU3BlY3VsYXRpdmVK
SVQgbGF5ZXIhCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJ
KHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAgYm9vbCBtYXlFeGl0KEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldFNj
b3BlOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDIwIEBAIHN0
cnVjdCBTd2l0Y2hEYXRhIHsKICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKIH07CiAKK3N0cnVj
dCBDYWxsVmFyYXJnc0RhdGEgeworICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsKK307CisKK3N0
cnVjdCBMb2FkVmFyYXJnc0RhdGEgeworICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydDsgLy8gTG9j
YWwgZm9yIHRoZSBmaXJzdCBlbGVtZW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBjb3VudDsgLy8g
TG9jYWwgZm9yIHRoZSBjb3VudC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVN0YXJ0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lQ291bnQ7CisgICAgdW5zaWduZWQgb2Zmc2V0OyAv
LyBXaGljaCBhcnJheSBlbGVtZW50IHRvIHN0YXJ0IHdpdGguIFVzdWFsbHkgdGhpcyBpcyAwLgor
ICAgIHVuc2lnbmVkIG1hbmRhdG9yeU1pbmltdW07IC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMg
b24gdGhlIHN0YWNrIHRoYXQgbXVzdCBiZSBpbml0aWFsaXplZDsgaWYgdGhlIGFycmF5IGlzIHRv
byBzaG9ydCB0aGVuIHRoZSBtaXNzaW5nIGVsZW1lbnRzIG11c3QgZ2V0IHVuZGVmaW5lZC4gRG9l
cyBub3QgaW5jbHVkZSAidGhpcyIuCisgICAgdW5zaWduZWQgbGltaXQ7IC8vIE1heGltdW0gbnVt
YmVyIG9mIGVsZW1lbnRzIHRvIGxvYWQuIEluY2x1ZGVzICJ0aGlzIi4KK307CisKIC8vIFRoaXMg
dHlwZSB1c2VkIGluIHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3Ry
dWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFu
IGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQg
aW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCkBAIC04OTUsNiAr
OTA5LDM1IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0
ZUJhcnJpZXI8VW5rbm93bj4qPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFz
Q2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAg
ICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAg
ICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBjYWxsVmFyYXJnc0RhdGEoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGhhc0NhbGxWYXJhcmdzRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxDYWxsVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAg
IGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09
IExvYWRWYXJhcmdzOworICAgIH0KKyAgICAKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJh
cmdzRGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzTG9hZFZhcmFyZ3NEYXRhKCkpOwor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PExvYWRWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsK
KyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKICAgICAgICAgcmV0dXJu
ICEhcmVzdWx0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgLyogdGhpcyBtdXN0IGJlIHRoZSBkaXJlY3RseSBzdWJzZXF1
ZW50IHByb3BlcnR5IHB1dC4gTm90ZSB0aGF0IFB1dEJ5VmFsICovXAogICAgIC8qIG9wY29kZXMg
dXNlIFZhckFyZ3MgYmVhdXNlIHRoZXkgbWF5IGhhdmUgdXAgdG8gNCBjaGlsZHJlbi4gKi9cCiAg
ICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhMb2FkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dEJ5
VmFsRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNy
byhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFj
cm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCkBA
IC0yMTcsNiArMjE4LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8q
IENhbGxzLiAqL1wKICAgICBtYWNybyhDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1hY3JvKENhbGxW
YXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ2Fs
bEZvcndhcmRWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oQ29uc3RydWN0VmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKE5hdGl2ZUNvbnN0cnVjdCwgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlD
YWxjdWxhdG9yOjpleGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNl
IExvYWRWYXJhcmdzOiB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
KGRhdGEtPmNvdW50KSA9CisgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNo
ZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEtPmxpbWl0OyBpLS07KSB7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKSA9Cisg
ICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmly
dHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTUyLDcgKzE1Miw5IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAoaW5saW5lQ2FsbEZy
YW1lLT5raW5kKSB7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgotICAgICAg
ICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OiB7CisgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxs
VmFyYXJnczoKKyAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6
IHsKICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KICAgICAgICAgICAg
ICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNv
ZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm8pOwpAQCAtMTk1LDEyICsxOTcsMTMgQEAgdm9pZCByZWlmeUlubGluZWRDYWxs
RnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBpZiAodHJ1ZVJldHVyblBDKQogICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0cnVlUmV0dXJu
UEMpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAKLSNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNr
OjpDb2RlQmxvY2spKSk7CisgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBq
aXQuc3RvcmU2NChjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0
ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAg
dWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRl
Y29kZU9mZnNldChjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBqaXQuc3RvcmUz
MihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhl
bHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgICAgIApAQCAtMjA4LDEyICsyMTEsMTAg
QEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBpZiAo
YmFzZWxpbmVDb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkKICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihiYXNlbGlu
ZUNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkub2Zmc2V0KCkpKSwgR1BSSW5mbzo6cmVn
VDMpOwogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0aGUgMzItYml0IHBh
cnQKLSAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihi
YXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q29kZUJsb2Nr
KSkpOwogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNl
dCgpKSk7CiAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4Owog
ICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNv
ZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogICAgICAgICBqaXQuc3RvcmUz
MihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhl
bHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAg
ICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpKTsKICAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVl
Q29uc3RhbnQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMTgsNiArMTAxOCwyNyBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoCiAgICAgc2V0LT5ub3RpZnlXcml0
ZSh2bSwgdmFsdWUsICJFeGVjdXRlZCBOb3RpZnlXcml0ZSIpOwogfQogCitpbnQzMl90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEFyZ3VtZW50cyk7CisgICAgCisgICAgcmV0dXJuIHNpemVPZlZhcmFyZ3MoZXhlYywgYXJn
dW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCk7Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZmlyc3RFbGVtZW50RGVz
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMy
X3QgbGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pCit7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7
CisgICAgCisgICAgbG9hZFZhcmFyZ3MoZXhlYywgVmlydHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVu
dERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKGludDMy
X3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAgICAgZXhlYy0+
cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworfQorCiBkb3VibGUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQogewog
ICAgIHJldHVybiBmbW9kKGEsIGIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEy
NSw2ICsxMjUsOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzCiBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJs
ZUluZGV4LCBKU1N0cmluZyopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdy
aXRlKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVuY29kZWRKU1ZhbHVlKTsK
K2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiwgaW50MzJf
dCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3Qgb2Zm
c2V0LCBpbnQzMl90IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKTsKIAogaW50NjRf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRCb3hlZERvdWJsZVRvSW50NTIoRW5jb2Rl
ZEpTVmFsdWUpOwogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnREb3VibGVU
b0ludDUyKGRvdWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJ
KHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDEwICs4NywxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLXN0YXRpYyB2b2lkIGR1bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYg
Z3JhcGgsIGNvbnN0IGNoYXIqIHRleHQpCitzdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgo
R3JhcGgmIGdyYXBoLCBjb25zdCBjaGFyKiB0ZXh0LCBib29sIGZvcmNlRHVtcCA9IGZhbHNlKQog
ewogICAgIEdyYXBoRHVtcE1vZGUgbW9kZUZvckZpbmFsVmFsaWRhdGUgPSBEdW1wR3JhcGg7Ci0g
ICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoZ3JhcGgubV9wbGFuLm1vZGUpKSB7Cisg
ICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoZ3JhcGgubV9wbGFuLm1vZGUpIHx8IGZv
cmNlRHVtcCkgewogICAgICAgICBkYXRhTG9nKHRleHQsICJcbiIpOwogICAgICAgICBncmFwaC5k
dW1wKCk7CiAgICAgICAgIG1vZGVGb3JGaW5hbFZhbGlkYXRlID0gRG9udER1bXBHcmFwaDsKQEAg
LTM2OSw3ICszNjksNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhy
CiAgICAgICAgICAgICByZXR1cm4gRmFpbFBhdGg7CiAgICAgICAgIH0KIAotICAgICAgICBkdW1w
QW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgganVzdCBiZWZvcmUgRlRMIGxvd2VyaW5nOiIpOwor
ICAgICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgganVzdCBiZWZvcmUgRlRMIGxv
d2VyaW5nOiIsIHNob3VsZFNob3dEaXNhc3NlbWJseShtb2RlKSk7CiAgICAgICAgIAogICAgICAg
ICBib29sIGhhdmVMTFZNOwogICAgICAgICBTYWZlcG9pbnQ6OlJlc3VsdCBzYWZlcG9pbnRSZXN1
bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2Ji
ZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMywxMSArMTMzLDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1
YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAg
ICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAg
ICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBK
U1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9p
ZCB3cml0ZVRvcCgpCiAgICAgeworICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IExvYWRWYXJh
cmdzKSB7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugbm90ZSB0aGUgd3JpdGVzIHRvIHRo
ZSBsb2NhbHMgdGhhdCB3aWxsIHN0b3JlIHRoZSBhcnJheSBlbGVtZW50cyBhbmQKKyAgICAgICAg
ICAgIC8vIGNvdW50LgorICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgIG1fd3JpdGUoZGF0YS0+Y291bnQpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAg
ICAgICAgICAgbV93cml0ZShWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBp
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBu
ZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIENhbGxGb3J3YXJkVmFyYXJncywgc2luY2Ug
aXQgcmVhZHMKKyAgICAgICAgLy8gb3VyIGFyZ3VtZW50cyB0aGUgc2FtZSB3YXkgdGhhdCBhbnkg
ZWZmZWN0ZnVsIHRoaW5nIG1pZ2h0LgorICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGgubV9j
b2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKICAgICAg
ICAgICAgICAgICBtX3dyaXRlKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTgwMTYwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTg5LDYgKzE4OSwxMCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RT
dGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgog
ICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDb25z
dHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2Fy
ZFZhcmFyZ3M6CiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBj
YXNlIE5ld0FycmF5V2l0aFNpemU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmpl
Y3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUg
IlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogCkBA
IC02MjQsMzggKzYyNSwxNjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1pc2NTdHJp
Y3RFcQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogewotICAg
IGJvb2wgaXNDYWxsID0gbm9kZS0+b3AoKSA9PSBDYWxsOwotICAgIGlmICghaXNDYWxsKQotICAg
ICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPm9wKCkgPT0gQ29uc3Ry
dWN0KTsKLSAgICAKLSAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBp
cyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKLSAgICAvLyBmb3IgaXQuCi0g
ICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gaXNDYWxsID8gMCA6IDE7CisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBib29sIGlzQ2FsbDsKKyAgICBib29sIGlzVmFy
YXJnczsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGw6CisgICAgICAg
IGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOworICAgICAgICBpc0NhbGwgPSB0cnVlOwor
ICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25z
dHJ1Y3Q6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAg
ICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJn
czoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOworICAgICAg
ICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExp
bmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICAg
ICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCku
Y2hpbGQobm9kZSwgMCk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlw
ZSA9IGlzQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0
OworICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlzIHRy
aWNraWVyLgorICAgIGlmIChpc1ZhcmFyZ3MpIHsKKyAgICAgICAgLy8gMSkgZ2V0IHRoZSBhcmd1
bWVudHMKKyAgICAgICAgLy8gMikgZmx1c2ggcmVnaXN0ZXJzCisgICAgICAgIC8vIDMpIHNldCB1
cCB0aGUgY2FsbCBmcmFtZQorICAgICAgICAvLyA0KSBnZXQgdGhlIGNhbGxlZSBhbmQgInRoaXMi
IGFuZCBoYW5kbGUgdGhlbQorICAgICAgICAvLyA1KSBmbHVzaCByZWdpc3RlcnMgYWdhaW4KKyAg
ICAgICAgCisgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdz
RGF0YSgpOworCisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUjM7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9y
d2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIFdlIGF2b2lkIGNhbGxpbmcgZmx1c2hSZWdp
c3RlcnMoKSBpbnNpZGUgdGhlIGNvbnRyb2wgZmxvdyBvZiBDYWxsRm9yd2FyZFZhcmFyZ3MuCisg
ICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBhdXRvIGxvYWRBcmd1bWVudHNHUFIgPSBbJl0gKEdQUlJlZyByZXNlcnZlZEdQUikgeworICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAg
ICAgICAgICAgYXJndW1lbnRzR1BSID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIocmVz
ZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAg
ICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgICAgICAgICAgICAgIGxvY2socmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAgICAgICAg
ICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAg
ICB1bmxvY2socmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIxID0g
SklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCByZXNlcnZlZEdQUik7
CisgICAgICAgICAgICBzY3JhdGNoR1BSMiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BS
KGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNj
cmF0Y2hHUFIzID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgfTsKKyAgICAg
ICAgCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoSW52YWxpZEdQUlJlZyk7CisgICAgICAgIAor
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgdGhlIHdob2xlIHJlZ2lzdGVyIGZpbGUg
dG8gb3Vyc2VsdmVzLCBhbmQgYXJndW1lbnRzR1BSIGhhcyB0aGUKKyAgICAgICAgLy8gYXJndW1l
bnRzIHJlZ2lzdGVyLiBTZWxlY3Qgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAgICAgCisg
ICAgICAgIC8vIFdlIHdpbGwgdXNlIHNjcmF0Y2hHUFIyIHRvIHBvaW50IHRvIG91ciBzdGFjayBm
cmFtZS4KKworICAgICAgICB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyA9IG1faml0LmdyYXBo
KCkubV9uZXh0TWFjaGluZUxvY2FsOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaGF2ZUFyZ3VtZW50czsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEdQUkluZm86OnJl
Z1QwOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAg
ICAgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJndW1lbnRzKSBv
cHRpbWl6YXRpb24uCisgICAgICAgICAgICAvLyBGSVhNRTogZG8gdGhpcyBvcHRpbWl6YXRpb24g
YXQgdGhlIElSIGxldmVsIGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYnkgdGVzdGluZyB0aGUKKyAg
ICAgICAgICAgIC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gVGhpcyB3aWxsIGhhcHBlbiBvbmNlIHdl
IGdldCByaWQgb2YgdGhlIGFyZ3VtZW50cyBsYXp5IGNyZWF0aW9uIGFuZAorICAgICAgICAgICAg
Ly8gbGF6eSB0ZWFyLW9mZi4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKG1faml0LmJy
YW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJndW1lbnRzR1BSKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKG51bVVzZWRTdGFja1Ns
b3RzKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFz
dENhc2UobV9qaXQsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0
Y2hHUFIzLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJz
dFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgICAgICAgICAgcmVzdWx0R1BSID0gc2NyYXRj
aEdQUjI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhdmVBcmd1bWVudHMgPSBtX2ppdC5q
dW1wKCk7CisgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0KKwor
ICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlzRmx1c2hlZCgpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFJpZ2h0IG5vdywgYXJndW1lbnRzIGlzIGluIGFyZ3VtZW50c0dQ
UiBhbmQgdGhlIHJlZ2lzdGVyIGZpbGUgaXMgZmx1c2hlZC4KKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
YXJndW1lbnRzR1BSLCBudW1Vc2VkU3RhY2tTbG90cywgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQp
OworICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGhhdmUgdGhlIGFyZ3VtZW50IGNvdW50IG9m
IHRoZSBjYWxsZWUgZnJhbWUsIGJ1dCB3ZSd2ZSBsb3N0IHRoZSBhcmd1bWVudHMgb3BlcmFuZC4K
KyAgICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBvcGVyYW5kIHdoaWxlIHByZXNl
cnZpbmcgdGhlIGNhbGxlZSBmcmFtZS4KKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKG51bVVz
ZWRTdGFja1Nsb3RzKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1l
KG1faml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHNjcmF0Y2hHUFIxLCBzY3Jh
dGNoR1BSMSk7CisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRC
eXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRj
aEdQUjEsIGFyZ3VtZW50c0dQUiwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxG
b3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgIGhhdmVBcmd1bWVudHMubGluaygmbV9qaXQpOwor
ICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgICAgIAorICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlz
Rmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGFyZ3Vt
ZW50cyBhcnJheSBhbnltb3JlLgorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDYWxsRm9yd2Fy
ZFZhcmFyZ3MpCisgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGlzQ2FsbCkgeworICAgICAgICAgICAgLy8gTm93IHNldCB1cCB0aGUgInRoaXMi
IGFyZ3VtZW50LgorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc0FyZ3VtZW50KHRoaXMs
IG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzID8gbm9kZS0+Y2hpbGQyKCkgOiBub2Rl
LT5jaGlsZDMoKSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc0FyZ3VtZW50R1BSID0gdGhpc0Fy
Z3VtZW50LmdwcigpOworICAgICAgICAgICAgdGhpc0FyZ3VtZW50LnVzZSgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHRoaXNBcmd1bWVudEdQUiwgSklUQ29tcGls
ZXI6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2Vk
IGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKKyAgICAgICAgLy8gZm9yIGl0LgorICAgICAgICBp
bnQgZHVtbXlUaGlzQXJndW1lbnQgPSBpc0NhbGwgPyAwIDogMTsKICAgICAKLSAgICBFZGdlIGNh
bGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGls
ZCgpXTsKLSAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIHRoZSBm
dW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQotICAgIC8vIGFyZ3VtZW50
cy4KLSAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAg
ICAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIHRoZSBmdW5jdGlv
bjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQorICAgICAgICAvLyBhcmd1bWVudHMu
CisgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CiAg
ICAgCi0gICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7
CisgICAgICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50
OwogICAgIAotICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihu
dW1BcmdzKSwgbV9qaXQuY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1bWVudENv
dW50KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihudW1BcmdzKSwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6
QXJndW1lbnRDb3VudCkpOwogICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2Vk
QXJnczsgaSsrKSB7Ci0gICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJB
cmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKLSAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5n
cHIoKTsKLSAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVBhc3NlZEFyZ3M7IGkrKykgeworICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQu
Z3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKKyAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKKyAgICAgICAgICAg
IEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgICAgICAgICB1c2UoYXJnRWRnZSk7CiAg
ICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgbV9qaXQuY2FsbGVlQXJndW1l
bnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2
NChhcmdHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFNsb3QoaSArIGR1bW15VGhpc0Fy
Z3VtZW50KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUo
dGhpcywgY2FsbGVlRWRnZSk7CiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsK
LSAgICB1c2UoY2FsbGVlRWRnZSk7Ci0gICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIG1faml0
LmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICBjYWxsZWUudXNlKCk7Cisg
ICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVNsb3Qo
SlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIApAQCAtNjky
LDYgKzgyNCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAg
ICAgY2FsbExpbmtJbmZvLT5jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgCiAgICAgbV9qaXQu
YWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbExpbmtJbmZv
KTsKKyAgICAKKyAgICAvLyBJZiB3ZSB3ZXJlIHZhcmFyZ3MsIHRoZW4gYWZ0ZXIgdGhlIGNhbGxz
IGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0YWJsaXNoIG91ciBzdGFjayBwb2ludGVyLgorICAg
IGlmIChpc1ZhcmFyZ3MpCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQu
Z3JhcGgoKS5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IH0KIAogLy8gQ2xhbmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtbY2xhbmc6OmZhbGx0aHJv
dWdoXV0gaW4gdGVtcGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0ZSBleHBhbnNpb24gdXNl
cyBpdApAQCAtNDIyMSw5ICs0MzU3LDU2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBj
YXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIExvYWRWYXJhcmdz
RGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAKKyAgICAgICAg
R1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICAgICAgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50
c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9m
VmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c0dQUiwgZGF0YS0+b2Zm
c2V0KTsKKyAgICAgICAgCisgICAgICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigp
OworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICB1bmxv
Y2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6
IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGgg
cHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBv
aW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBz
cGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24g
d291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdz
IHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorCisgICAgICAgIEdQUlJlZyBh
cmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQorICAgICAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVj
dFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c0dQUik7CisgICAg
ICAgIAorICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVk
Z2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlLAorICAgICAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAg
ICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBt
X2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBheWxv
YWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFy
Z3VtZW50c0dQUiwgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+
bWFuZGF0b3J5TWluaW11bSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246
IHsKICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIApAQCAtNDMyOCw5ICs0NTExLDIw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIERG
R19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgbV9q
aXQubW92ZSgKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpLAorICAgICAgICAgICAg
ICAgIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0
ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJn
dW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogICAgICAgICBpbnQzMlJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00MzQ0LDIw
ICs0NTM4LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAgIG1faml0
LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCiAgICAgICAgICAg
ICAgICAgSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSkpLAogICAgICAgICAgICAg
ICAgIHJlc3VsdEdQUik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVy
OworICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rl
cihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZXN1bHRHUFIpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogdGhl
IHNsb3cgcGF0aCBnZW5lcmF0b3Igc2hvdWxkIHBlcmZvcm0gYSBmb3J3YXJkIHNwZWN1bGF0aW9u
IHRoYXQgdGhlCi0gICAgICAgIC8vIHJlc3VsdCBpcyBhbiBpbnRlZ2VyLiBGb3Igbm93IHdlIHBv
c3Rwb25lIHRoZSBzcGVjdWxhdGlvbiBieSBoYXZpbmcgdGhpcyByZXR1cm4KLSAgICAgICAgLy8g
YSBKU1ZhbHVlLgotICAgICAgICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgY3JlYXRlZCwgdGhpcywgb3Bl
cmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoLCByZXN1bHRHUFIsCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODAxNjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTc4LDcgKzU3OCw2IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAotI2lmbmRlZiBOREVCVUcKICAgICAvLyBVc2VkIHRvIEFTU0VSVCBmbHVzaFJl
Z2lzdGVycygpIGhhcyBiZWVuIGNhbGxlZCBwcmlvciB0bwogICAgIC8vIGNhbGxpbmcgb3V0IGZy
b20gSklUIGNvZGUgdG8gYSBDIGhlbHBlciBmdW5jdGlvbi4KICAgICBib29sIGlzRmx1c2hlZCgp
CkBAIC01OTMsNyArNTkyLDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KLSNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChOb2RlKiBub2RlKQpA
QCAtMTEwOSw2ICsxMTA3LDI2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRUpaWiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcyLCB1bnNpZ25lZCBhcmcz
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMyKGFyZzMpKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEZfSklUT3BlcmF0
aW9uX0VGSlpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCB1bnNpZ25lZCBhcmczLCBHUFJSZWcgYXJnNCkKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tMzIoYXJnMyks
IGFyZzQpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRUpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIHVuc2lnbmVkIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbTMyKGFyZzIpKTsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklU
T3BlcmF0aW9uX0VaSlpaWiBvcGVyYXRpb24sIHVuc2lnbmVkIGFyZzEsIEdQUlJlZyBhcmcyLCB1
bnNpZ25lZCBhcmczLCBHUFJSZWcgYXJnNCwgdW5zaWduZWQgYXJnNSkKKyAgICB7CisgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIGFy
ZzIsIFRydXN0ZWRJbW0zMihhcmczKSwgYXJnNCwgVHJ1c3RlZEltbTMyKGFyZzUpKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+CiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihGdW5jdGlvblR5cGUgb3BlcmF0aW9uLCBOb1Jlc3VsdFRhZykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBo
YXNlLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdGFja0xheW91dFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOwogICAgICAgICAKICAgICAgICAgLy8g
Q29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBmcm9tIElSLgotICAgICAgICBi
b29sIGhhc0dldExvY2FsVW5saW5rZWQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBoYXNOb2Rlc1Ro
YXROZWVkRml4dXAgPSBmYWxzZTsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBp
ZiAoIWJsb2NrKQpAQCAtODEsNyArODEsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQob3BlcmFuZC50b0xvY2FsKCkp
OwotICAgICAgICAgICAgICAgICAgICBoYXNHZXRMb2NhbFVubGlua2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgICAgICAgICAgICAg
IExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9Mb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0LmlzTG9jYWwoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxseSByZWxpZXMgb24gdGhlIGNvbnRpZ3VpdHkgb2Yg
c3RhY2sgbGF5b3V0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50cy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQu
b2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlzTG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0
YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSAvLyB0
aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCisgICAgICAgICAgICAgICAgICAgIGhhc05v
ZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMTMsNiArMTI4LDExIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGFyZ3VtZW50c1JlZ2lzdGVyLnRv
TG9jYWwoKSk7CiAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldCh1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpLnRvTG9jYWwoKSk7CiAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgICAg
ICBKU1N0YWNrOjpBcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCku
dG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsg
YXJndW1lbnQtLSA+IDE7KSB7CiAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVh
bFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChhcmd1bWVudCkub2Zmc2V0KCkgKwpAQCAtMTQ4LDI0ICsxNjgsMjEgQEAgcHVibGljOgogICAg
ICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGlu
ZUxvY2FsKCkgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICBhbGxv
Y2F0aW9uW3ZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKV0pOworICAgICAgICAgICAgdmFyaWFi
bGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFsbG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgp
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT51c2VzQXJn
dW1lbnRzKCkpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3Rl
ciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25b
Y29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkudG9Mb2NhbCgpXSk7CisgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPQorICAgICAgICAgICAgICAgIGFz
c2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCgKLSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChhbGxvY2F0aW9uWwotICAgICAgICAgICAgICAgICAgICB1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+YXJndW1l
bnRzUmVnaXN0ZXIoKSkudG9Mb2NhbCgpXSkKKyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2Nh
dGlvbiwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGNvZGVCbG9jaygpLT5hcmd1bWVudHNS
ZWdpc3RlcigpKSkKICAgICAgICAgICAgICAgICA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0
ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRBcmd1
bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmIChjb2RlQmxvY2soKS0+dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCkuaXNW
YWxpZCgpKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0QWN0aXZhdGlvblJlZ2lzdGVy
KAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bY29k
ZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpLnRvTG9jYWwoKV0pKTsKKyAgICAgICAgICAg
ICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3Rlcigp
KSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgcmVnaXN0ZXIgaXMgbmV2
ZXIgdmFsaWQgZm9yIERGRyBjb2RlIGJsb2Nrcy4KQEAgLTE3NiwxNSArMTkzLDE5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZGF0YS5p
bmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmV4ZWN1dGFibGUtPnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgICAgIGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bCgKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblttX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKGlubGluZUNhbGxGcmFtZSkudG9Mb2NhbCgpXSk7CisgICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3RlciA9IGFzc2lnbigKKyAgICAgICAgICAgICAg
ICAgICAgYWxsb2NhdGlvbiwgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxs
RnJhbWUpKTsKIAogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKAotICAgICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW3VubW9kaWZpZWRBcmd1
bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRz
UmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSkudG9Mb2NhbCgpXSkKKyAgICAgICAgICAgICAg
ICAgICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dy
YXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpKQogICAgICAgICAgICAg
ICAgICAgICA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHNSZWdpc3RlcikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAg
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gYXNzaWduKAorICAgICAg
ICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgYXJndW1lbnQtLSA+IDE7KSB7CiAgICAgICAg
ICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9zaXRpb24gPSBtX2dyYXBoLm1fYXJndW1lbnRQ
b3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0
ICsgYXJndW1lbnRdOwpAQCAtMjI3LDkgKzI0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCkpOwogICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBzeW1ib2xUYWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgaS0tOykgewogICAg
ICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldID0gc2xvd0FyZ3VtZW50c1tpXTsK
LSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IFZpcnR1YWxSZWdpc3Rl
cihzbG93QXJndW1lbnRzW2ldLmluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZy5p
c0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmlu
ZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltyZWcudG9Mb2NhbCgpXSku
b2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXgg
PSBhc3NpZ24oYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKHNsb3dBcmd1bWVudHNbaV0uaW5k
ZXgpKS5vZmZzZXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fc2xvd0FyZ3VtZW50cyA9IFdURjo6bW92ZShuZXdTbG93QXJndW1l
bnRzKTsKQEAgLTIzNyw3ICsyNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIEZpeCBHZXRMb2NhbFVubGlua2VkJ3MgdmFyaWFibGUgcmVmZXJlbmNlcy4KLSAg
ICAgICAgaWYgKGhhc0dldExvY2FsVW5saW5rZWQpIHsKKyAgICAgICAgaWYgKGhhc05vZGVzVGhh
dE5lZWRGaXh1cCkgewogICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
ICAgIGlmICghYmxvY2spCkBAIC0yNDYsMTAgKzI2NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
R2V0TG9jYWxVbmxpbmtlZDogewotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSBub2RlLT51bmxpbmtlZExvY2FsKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bb3BlcmFuZC50b0xv
Y2FsKCldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFVubGlua2VkTWFjaGlu
ZUxvY2FsKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VW5saW5r
ZWRNYWNoaW5lTG9jYWwoYXNzaWduKGFsbG9jYXRpb24sIG5vZGUtPnVubGlua2VkTG9jYWwoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjYXNlIExvYWRW
YXJhcmdzOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEt
Pm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5jb3VudCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwg
ZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjYyLDYgKzI4NSwyMCBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKK3ByaXZh
dGU6CisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBh
bGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIHsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IHNyYzsKKyAgICAgICAgaWYgKHJlc3VsdC5pc0xvY2FsKCkpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bcmVzdWx0LnRvTG9j
YWwoKV07CisgICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFYKQorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2Nh
dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiB9OwogCiBi
b29sIHBlcmZvcm1TdGFja0xheW91dChHcmFwaCYgZ3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsyNzEsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldFNjb3BlOgogICAgICAgICAgICAg
ICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRD
YWxsZWU6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1Niw2ICs0NTYsMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBz
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZlIGEgc2Vjb25kIEdldExv
Y2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIC8vIGJsb2Nr
IGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50IGZvciB0aGF0IGxvY2FsLgorICAgICAgICAgICAgICAg
ICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0Owor
ICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAko
cmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZp
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDkgQEAgc3RhdGljIGlubGluZSBM
VHlwZSBzdHJ1Y3RUeXBlKExDb250ZXh0IAogICAgIHJldHVybiBzdHJ1Y3RUeXBlKGNvbnRleHQs
IGVsZW1lbnRzLCAyLCBwYWNraW5nKTsKIH0KIAorLy8gRklYTUU6IE1ha2UgdGhlIFZhcmlhZGlj
aXR5IGFyZ3VtZW50IG5vdCBiZSB0aGUgbGFzdCBhcmd1bWVudCB0byBmdW5jdGlvblR5cGUoKSBz
byB0aGF0IHRoaXMgZnVuY3Rpb24KKy8vIGNhbiB1c2UgQysrMTEgdmFyaWFkaWMgdGVtcGxhdGVz
CisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTc1CiBlbnVt
IFZhcmlhZGljaXR5IHsgTm90VmFyaWFkaWMsIFZhcmlhZGljIH07CiBzdGF0aWMgaW5saW5lIExU
eXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBjb25zdCBMVHlwZSogcGFyYW1UeXBl
cywgdW5zaWduZWQgcGFyYW1Db3VudCwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkpCiB7CkBAIC0x
MTAsNiArMTEzLDE2IEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHIK
ICAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFt
NCB9OwogICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgNCwg
dmFyaWFkaWNpdHkpOwogfQorc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUg
cmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFtMywgTFR5
cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFy
aWFkaWMpCit7CisgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFtMiwgcGFy
YW0zLCBwYXJhbTQsIHBhcmFtNSB9OworICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlw
ZSwgcGFyYW1UeXBlcywgNSwgdmFyaWFkaWNpdHkpOworfQorc3RhdGljIGlubGluZSBMVHlwZSBm
dW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIs
IExUeXBlIHBhcmFtMywgTFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIExUeXBlIHBhcmFtNiwg
VmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKK3sKKyAgICBMVHlwZSBwYXJh
bVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01LCBwYXJh
bTYgfTsKKyAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDYs
IHZhcmlhZGljaXR5KTsKK30KIAogc3RhdGljIGlubGluZSBMVHlwZSB0eXBlT2YoTFZhbHVlIHZh
bHVlKSB7IHJldHVybiBsbHZtLT5UeXBlT2YodmFsdWUpOyB9CiAKQEAgLTI5OCw0MSArMzExLDEz
IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIHsKICAgICByZXR1
cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCAmYXJnMSwgMSk7CiB9Ci1zdGF0aWMgaW5s
aW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBM
VmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwg
YXJnMiB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDIp
OwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExW
YWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMykKLXsK
LSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczIH07Ci0gICAgcmV0dXJuIGJ1
aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgMyk7Ci19Ci1zdGF0aWMgaW5saW5lIExW
YWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUg
YXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkKK3RlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3M+CitMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1
ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykKIHsKLSAgICBMVmFsdWUgYXJn
c1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChi
dWlsZGVyLCBmdW5jdGlvbiwgYXJncywgNCk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZh
bHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUpCi17Ci0gICAg
TFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSB9OwotICAgIHJl
dHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDUpOwotfQotc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwg
TFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1
ZSBhcmc1LCBMVmFsdWUgYXJnNikKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcy
LCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVy
LCBmdW5jdGlvbiwgYXJncywgNik7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFy
ZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBM
VmFsdWUgYXJnNykKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBh
cmc0LCBhcmc1LCBhcmc2LCBhcmc3IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBm
dW5jdGlvbiwgYXJncywgNyk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1
aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIs
IExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBMVmFs
dWUgYXJnNywgTFZhbHVlIGFyZzgpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJn
MiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCB9OwotICAgIHJldHVybiBidWls
ZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDgpOworICAgIExWYWx1ZSBhcmdzQXJyYXlb
XSA9IHsgYXJnMSwgYXJncy4uLiB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVu
Y3Rpb24sIGFyZ3NBcnJheSwgc2l6ZW9mKGFyZ3NBcnJheSkgLyBzaXplb2YoTFZhbHVlKSk7CiB9
CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKExW
YWx1ZSBpbnN0cnVjdGlvbiwgTENhbGxDb252IGNhbGxpbmdDb252ZW50aW9uKSB7IGxsdm0tPlNl
dEluc3RydWN0aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxpbmdDb252ZW50aW9uKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRlciwg
TFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRXh0cmFj
dFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZhbHVl
IHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2VsZWN0KGJ1aWxk
ZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4MDE2MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjAsNiArMTIwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiAKICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAg
Y2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Cisg
ICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgor
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0
aXZlQ29uc3RydWN0OgogICAgIGNhc2UgVmFsdWVUb0ludDMyOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJv
bmljcwogICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgpAQCAt
MTI4LDYgKzEyOCwyMCBAQCBzdGF0aWMgdm9pZCBkdW1wRGF0YVNlY3Rpb24oRGF0YVNlY3Rpb24q
CiAgICAgfQogfQogCitzdGF0aWMgaW50IG9mZnNldE9mU3RhY2tSZWdpb24oU3RhY2tNYXBzOjpS
ZWNvcmRNYXAmIHJlY29yZE1hcCwgdWludDMyX3Qgc3RhY2ttYXBJRCkKK3sKKyAgICBTdGFja01h
cHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YWNrbWFwSUQp
OworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
aXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsKKyAgICBMb2NhdGlvbiBjYXB0
dXJlZExvY2F0aW9uID0KKyAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFwcyhudWxscHRyLCBp
dGVyLT52YWx1ZVswXS5sb2NhdGlvbnNbMF0pOworICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVk
TG9jYXRpb24ua2luZCgpID09IExvY2F0aW9uOjpSZWdpc3Rlcik7CisgICAgUkVMRUFTRV9BU1NF
UlQoY2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CisgICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUgc2l6ZW9m
KFJlZ2lzdGVyKSkpOworICAgIHJldHVybiBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpIC8gc2l6
ZW9mKFJlZ2lzdGVyKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRGVzY3JpcHRvclR5cGU+CiB2
b2lkIGdlbmVyYXRlSUNGYXN0UGF0aCgKICAgICBTdGF0ZSYgc3RhdGUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKQEAgLTI0Myw2ICsy
NTcsMzIgQEAgc3RhdGljIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnNGb3IoY29ucwogICAgIHJl
dHVybiBSZWdpc3RlclNldChyZWNvcmQudXNlZFJlZ2lzdGVyU2V0KCksIFJlZ2lzdGVyU2V0Ojpj
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsVHlwZT4K
K3ZvaWQgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhWZWN0b3I8Q2FsbFR5cGU+JiBjYWxscywg
U3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCkKK3sKKyAgICAvLyBIYW5kbGluZyBKUyBj
YWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhl
IFBDIGluIExMVk0KKyAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBy
dW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KKworICAgIFZlY3RvcjxD
YWxsVHlwZT4gb2xkQ2FsbHM7CisgICAgb2xkQ2FsbHMuc3dhcChjYWxscyk7CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IENhbGxUeXBlJiBjYWxsID0gb2xkQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBTdGFja01h
cHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3RhY2tt
YXBJRCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
aXRlci0+dmFsdWUuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIENhbGxUeXBlIGNvcHkgPSBj
YWxsOworICAgICAgICAgICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWVb
al0uaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoY29weSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnNvcnQoY2FsbHMuYmVnaW4oKSwgY2FsbHMuZW5k
KCkpOworfQorCiBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAg
U3RhdGUmIHN0YXRlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29kZSwgR2Vu
ZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb24sCiAgICAgU3RhY2tNYXBzOjpSZWNvcmRN
YXAmIHJlY29yZE1hcCwgYm9vbCBkaWRTZWVVbndpbmRJbmZvKQpAQCAtMjUxLDE2ICsyOTEsMTQg
QEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFZNJiB2bSA9
IGdyYXBoLm1fdm07CiAgICAgU3RhY2tNYXBzIHN0YWNrbWFwcyA9IGppdENvZGUtPnN0YWNrbWFw
czsKICAgICAKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29y
ZE1hcC5maW5kKHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
aXRlciAhPSByZWNvcmRNYXAuZW5kKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVl
LnNpemUoKSA9PSAxKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZVswXS5sb2NhdGlv
bnMuc2l6ZSgpID09IDEpOwotICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24gPQotICAgICAg
ICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZqaXRDb2RlLT5zdGFja21hcHMsIGl0ZXItPnZhbHVl
WzBdLmxvY2F0aW9uc1swXSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5r
aW5kKCkgPT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJl
ZExvY2F0aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBSRUxF
QVNFX0FTU0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2YoUmVnaXN0ZXIp
KSk7Ci0gICAgaW50MzJfdCBsb2NhbHNPZmZzZXQgPSBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgp
IC8gc2l6ZW9mKFJlZ2lzdGVyKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICBpbnQg
bG9jYWxzT2Zmc2V0ID0KKyAgICAgICAgb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0
YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCkgKyBncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CisgICAg
CisgICAgaW50IHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0OworICAgIGlmIChzdGF0ZS52YXJhcmdz
U3BpbGxTbG90c1N0YWNrbWFwSUQgIT0gVUlOVF9NQVgpCisgICAgICAgIHZhcmFyZ3NTcGlsbFNs
b3RzT2Zmc2V0ID0gb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLnZhcmFyZ3NT
cGlsbFNsb3RzU3RhY2ttYXBJRCk7CisgICAgZWxzZQorICAgICAgICB2YXJhcmdzU3BpbGxTbG90
c09mZnNldCA9IDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubV9pbmxpbmVW
YXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV0uaW5saW5lQ2FsbEZy
YW1lOwpAQCAtMzM2LDcgKzM3NCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0
YWNrTWFwcygKICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgT1NSIHN0YWNrbWFwICMiLCBleGl0Lm1f
c3RhY2ttYXBJRCwgIiBmb3IgIiwgZXhpdC5tX2NvZGVPcmlnaW4sICJcbiIpOwogCi0gICAgICAg
ICAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZXhpdC5tX3N0YWNrbWFwSUQpOworICAgICAgICAg
ICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZXhpdC5tX3N0YWNrbWFwSUQpOwogICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
SXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zNzUs
NyArNDEzLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAg
ICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJIYW5kbGluZyBHZXRCeUlkIHN0YWNrbWFwICMiLCBnZXRCeUlkLnN0YWNrbWFw
SUQoKSwgIlxuIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNv
cmRNYXAuZmluZChnZXRCeUlkLnN0YWNrbWFwSUQoKSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9
PSByZWNvcmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVk
IG91dC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQxMiw3ICs0NTAsNyBAQCBzdGF0
aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRs
aW5nIFB1dEJ5SWQgc3RhY2ttYXAgIyIsIHB1dEJ5SWQuc3RhY2ttYXBJRCgpLCAiXG4iKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5kKHB1dEJ5SWQuc3Rh
Y2ttYXBJRCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKHB1dEJ5
SWQuc3RhY2ttYXBJRCgpKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQo
KSkgewogICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtNDQ0LDE0ICs0ODIsMTMgQEAgc3RhdGljIHZvaWQgZml4RnVu
Y3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7IGktLTspIHsKICAg
ICAgICAgICAgIENoZWNrSW5EZXNjcmlwdG9yJiBjaGVja0luID0gc3RhdGUuY2hlY2tJbnNbaV07
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVk
KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgY2hlY2tJbiBzdGFja21hcCAj
IiwgY2hlY2tJbi5zdGFja21hcElEKCksICJcbiIpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2hlY2tJbi5zdGFja21hcElEKCkpOworICAgICAgICAg
ICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2hlY2tJbi5zdGFja21hcElEKCkpOwogICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gSXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00
ODAsNyArNTE3LDYgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAog
ICAgICAgICAgICAgICAgIGNoZWNrSW4ubV9nZW5lcmF0b3JzLmFwcGVuZChDaGVja0luR2VuZXJh
dG9yKHN0dWJJbmZvLCBzbG93Q2FsbCwgYmVnaW4pKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotCiAgICAgICAgIAogICAgICAgICBleGNlcHRpb25UYXJnZXQubGluaygmc2xvd1BhdGhKSVQp
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25KdW1wID0gc2xvd1BhdGhK
SVQuanVtcCgpOwpAQCAtNTAzLDI5ICs1MzksMTEgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lu
cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGdlbmVyYXRlQ2hlY2tJbklDRmFzdFBhdGgo
CiAgICAgICAgICAgICAgICAgc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJl
Y29yZE1hcCwgc3RhdGUuY2hlY2tJbnNbaV0sCi0gICAgICAgICAgICAgICAgc2l6ZU9mQ2hlY2tJ
bigpKTsgCisgICAgICAgICAgICAgICAgc2l6ZU9mSW4oKSk7IAogICAgICAgICB9IAogICAgIH0K
ICAgICAKLSAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1
cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KLSAgICAvLyBnZW5lcmF0ZWQg
Y29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4n
dCBnZW5lcmF0ZS4KLSAgICBWZWN0b3I8SlNDYWxsPiBvbGRDYWxscyA9IHN0YXRlLmpzQ2FsbHM7
Ci0gICAgc3RhdGUuanNDYWxscy5yZXNpemUoMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEpTQ2FsbCYgY2FsbCA9IG9sZENh
bGxzW2ldOwotICAgICAgICAKLSAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7Ci0gICAgICAgIGlmIChp
dGVyID09IHJlY29yZE1hcC5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraikgewotICAg
ICAgICAgICAgSlNDYWxsIGNvcHkgPSBjYWxsOwotICAgICAgICAgICAgY29weS5tX2luc3RydWN0
aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWVbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgICAgICAg
ICBzdGF0ZS5qc0NhbGxzLmFwcGVuZChjb3B5KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICBzdGQ6OnNvcnQoc3RhdGUuanNDYWxscy5iZWdpbigpLCBzdGF0ZS5qc0NhbGxzLmVuZCgpKTsK
KyAgICBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzQ2FsbHMsIHJlY29yZE1hcCk7
CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuanNDYWxscy5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgSlNDYWxsJiBjYWxsID0gc3RhdGUuanNDYWxsc1tpXTsKQEAgLTU0Nyw5ICs1
NjUsMzIgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAg
ICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIpOwogICAgIH0KICAgICAKKyAgICBhZGp1c3RDYWxs
SUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzQ2FsbFZhcmFyZ3NlcywgcmVjb3JkTWFwKTsKKyAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxWYXJhcmdzZXMuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgIEpTQ2FsbFZhcmFyZ3MmIGNhbGwgPSBzdGF0ZS5qc0NhbGxWYXJhcmdzZXNb
aV07CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnMgZmFzdFBhdGhKSVQoJnZtLCBjb2Rl
QmxvY2spOworICAgICAgICBjYWxsLmVtaXQoZmFzdFBhdGhKSVQsIGdyYXBoLCB2YXJhcmdzU3Bp
bGxTbG90c09mZnNldCk7CisgICAgICAgIAorICAgICAgICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNhbGwubV9pbnN0cnVjdGlvbk9m
ZnNldDsKKyAgICAgICAgc2l6ZV90IHNpemVPZklDID0gc2l6ZU9mSUNGb3IoY2FsbC5ub2RlKCkp
OworCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgZmFzdFBhdGhKSVQsIHN0YXJ0
T2ZJQywgc2l6ZU9mSUMpOworICAgICAgICBpZiAoIWxpbmtCdWZmZXIuaXNWYWxpZCgpKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gaW5zZXJ0IGlubGluZSBjYWNoZSBmb3IgdmFy
YXJncyBjYWxsIChzcGVjaWZpY2FsbHksICIsIEdyYXBoOjpvcE5hbWUoY2FsbC5ub2RlKCktPm9w
KCkpLCAiKSBiZWNhdXNlIHdlIHRob3VnaHQgdGhlIHNpemUgd291bGQgYmUgIiwgc2l6ZU9mSUMs
ICIgYnV0IGl0IGVuZGVkIHVwIGJlaW5nICIsIGZhc3RQYXRoSklULm1fYXNzZW1ibGVyLmNvZGVT
aXplKCksICIgcHJpb3IgdG8gY29tcGFjdGlvbi5cbiIpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMoCisgICAgICAgICAgICBzdGFydE9m
SUMgKyBsaW5rQnVmZmVyLnNpemUoKSwgc2l6ZU9mSUMgLSBsaW5rQnVmZmVyLnNpemUoKSk7Cisg
ICAgICAgIAorICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIsIHN0YXRlLmZpbmFsaXpl
ci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7CisgICAgfQorICAg
IAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCi0gICAgaXRl
ciA9IHJlY29yZE1hcC5maW5kKHN0YXRlLmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFj
a21hcElEKTsKKyAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5oYW5kbGVTdGFj
a092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCk7CiAgICAgLy8gSXQncyBzb3J0IG9mIHJlbW90
ZWx5IHBvc3NpYmxlIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlvbiBoYW5k
bGluZwogICAgIC8vIHBhdGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KICAgICBpZiAo
aXRlciAhPSByZWNvcmRNYXAuZW5kKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCwxMSArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5j
bHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewogCit1c2luZyBuYW1lc3BhY2UgREZHOworCiAvLyBUaGUgZGVmYXVsdCBzaXplcyBhcmUg
eDg2LTY0LXNwZWNpZmljLCBhbmQgd2VyZSBmb3VuZCBlbXBpcmljYWxseS4gVGhleSBoYXZlIHRv
IGNvdmVyIHRoZSB3b3JzdAogLy8gcG9zc2libGUgY29tYmluYXRpb24gb2YgcmVnaXN0ZXJzIGxl
YWRpbmcgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgZW5jb2Rpbmcgb2YgZWFjaCBpbnN0cnVjdGlv
biBpbgogLy8gdGhlIElDLgpAQCAtNjEsMTcgKzY0LDM0IEBAIHNpemVfdCBzaXplT2ZQdXRCeUlk
KCkKICNlbmRpZgogfQogCi1zaXplX3Qgc2l6ZU9mQ2hlY2tJbigpCitzaXplX3Qgc2l6ZU9mQ2Fs
bCgpCiB7CiAjaWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiA0OworICAgIHJldHVybiA1NjsKICNl
bHNlCi0gICAgcmV0dXJuIDU7IAorICAgIHJldHVybiA1MzsKICNlbmRpZgogfQogCitzaXplX3Qg
c2l6ZU9mQ2FsbFZhcmFyZ3MoKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1cm4gNTY7Cisj
ZWxzZQorICAgIHJldHVybiAyNjk7CisjZW5kaWYKK30KIAotc2l6ZV90IHNpemVPZkNhbGwoKQor
c2l6ZV90IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0KQorICAg
IHJldHVybiA1NjsKKyNlbHNlCisgICAgcmV0dXJuIDM3MjsKKyNlbmRpZgorfQorCitzaXplX3Qg
c2l6ZU9mQ29uc3RydWN0VmFyYXJncygpCiB7CiAjaWYgQ1BVKEFSTTY0KQogICAgIHJldHVybiA1
NjsKQEAgLTgwLDYgKzEwMCwzOCBAQCBzaXplX3Qgc2l6ZU9mQ2FsbCgpCiAjZW5kaWYKIH0KIAor
c2l6ZV90IHNpemVPZkluKCkKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDQ7CisjZWxz
ZQorICAgIHJldHVybiA1OyAKKyNlbmRpZgorfQorCitzaXplX3Qgc2l6ZU9mSUNGb3IoTm9kZSog
bm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIEdldEJ5SWQ6Cisg
ICAgICAgIHJldHVybiBzaXplT2ZHZXRCeUlkKCk7CisgICAgY2FzZSBQdXRCeUlkOgorICAgICAg
ICByZXR1cm4gc2l6ZU9mUHV0QnlJZCgpOworICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0
cnVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNhbGwoKTsKKyAgICBjYXNlIENhbGxWYXJhcmdz
OgorICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKKyAgICBjYXNlIENhbGxGb3J3
YXJkVmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOwor
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNvbnN0cnVj
dFZhcmFyZ3MoKTsKKyAgICBjYXNlIEluOgorICAgICAgICByZXR1cm4gc2l6ZU9mSW4oKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lvbiAxODAx
NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOCwxMiArMjgsMjMgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNw
YWNlIERGRyB7CitzdHJ1Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CiAKIHNpemVfdCBz
aXplT2ZHZXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOwogc2l6ZV90IHNpemVPZkNh
bGwoKTsKLXNpemVfdCBzaXplT2ZDaGVja0luKCk7CitzaXplX3Qgc2l6ZU9mQ2FsbFZhcmFyZ3Mo
KTsKK3NpemVfdCBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsKK3NpemVfdCBzaXplT2ZDb25z
dHJ1Y3RWYXJhcmdzKCk7CitzaXplX3Qgc2l6ZU9mSW4oKTsKKworc2l6ZV90IHNpemVPZklDRm9y
KERGRzo6Tm9kZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShy
ZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNp
Y1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSwxMCArOTksMTIgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDLCBm
dW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklU
T3BlcmF0aW9uX0VDYiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwK
ICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBp
bnRQdHIsIGludFB0ciwgaW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVpKWlpa
LCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50MzIsIGludDY0LCBpbnQzMiwgaW50
MzIsIGludDMyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9uVHlwZSh2
b2lkVHlwZSwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVuY3Rpb25U
eXBlKHZvaWRUeXBlLCBpbnQzMikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9ELCBmdW5j
dGlvblR5cGUoaW50MzIsIGRvdWJsZVR5cGUpKSBcCi0gICAgbWFjcm8oWl9KSVRPcGVyYXRpb25f
RUMsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKQorICAgIG1hY3JvKFpfSklU
T3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyKSkgXAorICAg
IG1hY3JvKFpfSklUT3BlcmF0aW9uX0VKWiwgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGlu
dDY0LCBpbnQzMikpCiAgICAgCiBjbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5IDogcHVibGljIENv
bW1vblZhbHVlcyB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGwuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgSlNDYWxsOjpK
U0NhbGwodW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZQogICAgICwgbV9zdGFja21hcElEKHN0YWNr
bWFwSUQpCiAgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCiB7CisgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gQ2FsbCB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlND
YWxsQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGxCYXNlLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKU0NhbGxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBERkc7
CisKIEpTQ2FsbEJhc2U6OkpTQ2FsbEJhc2UoKQogICAgIDogbV90eXBlKENhbGxMaW5rSW5mbzo6
Tm9uZSkKICAgICAsIG1fY2FsbExpbmtJbmZvKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDYgKzM2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBMaW5rQnVmZmVyOwogCituYW1l
c3BhY2UgREZHIHsKK3N0cnVjdCBOb2RlOworfQorCiBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3Mg
SlNDYWxsQmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZh
cmFyZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlND
YWxsVmFyYXJncy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2lu
Y2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgor
I2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERGRzsKKworSlNDYWxsVmFyYXJnczo6SlNDYWxs
VmFyYXJncygpCisgICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBtX25vZGUobnVs
bHB0cikKKyAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoVUlOVF9NQVgpCit7Cit9CisKK0pTQ2Fs
bFZhcmFyZ3M6OkpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZSogbm9kZSkK
KyAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9ub2RlKG5vZGUpCisgICAg
LCBtX2NhbGxCYXNlKAorICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgPyBD
YWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MgOiBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdz
LAorICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpCisgICAgLCBtX2luc3RydWN0aW9uT2Zm
c2V0KDApCit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+
b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJh
cmdzKTsKK30KKwordW5zaWduZWQgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgp
Cit7CisgICAgcmV0dXJuIDQ7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhl
bHBlcnMmIGppdCwgR3JhcGgmIGdyYXBoLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpCit7Cisg
ICAgLy8gV2UgYXJlIHBhc3NlZCB0aHJlZSBwaWVjZXMgb2YgaW5mb3JtYXRpb246CisgICAgLy8g
LSBUaGUgY2FsbGVlLgorICAgIC8vIC0gVGhlIGFyZ3VtZW50cyBvYmplY3QuCisgICAgLy8gLSBU
aGUgInRoaXMiIHZhbHVlLCBpZiBpdCdzIGEgY29uc3RydWN0b3IgY2FsbC4KKyAgICAKKyAgICBi
b29sIGlzQ2FsbCA9IG1fbm9kZS0+b3AoKSAhPSBDb25zdHJ1Y3RWYXJhcmdzOworICAgIAorICAg
IENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisgICAg
CisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAKKyAg
ICBHUFJSZWcgYXJndW1lbnRzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgdGhpc0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgYm9vbCBhcmd1bWVudHNPblN0YWNrID0gZmFsc2U7Cisg
ICAgCisgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgor
ICAgICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIHRo
aXNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICB0aGlzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRH
UFIxOworICAgICAgICBhcmd1bWVudHNPblN0YWNrID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjE7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAK
KyAgICBjb25zdCB1bnNpZ25lZCBjYWxsZWVTcGlsbFNsb3QgPSAwOworICAgIGNvbnN0IHVuc2ln
bmVkIGFyZ3VtZW50c1NwaWxsU2xvdCA9IDE7CisgICAgY29uc3QgdW5zaWduZWQgdGhpc1NwaWxs
U2xvdCA9IDI7CisgICAgY29uc3QgdW5zaWduZWQgc3RhY2tQb2ludGVyU3BpbGxTbG90ID0gMzsK
KyAgICAKKyAgICAvLyBHZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnN0
YWNrUmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnJl
c2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdp
c3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChj
YWxsZWVHUFIpOworICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsKKyAgICBpZiAodGhpc0dQUiAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKKyAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAg
IGlmIChhcmd1bWVudHNPblN0YWNrKQorICAgICAgICBhcmd1bWVudHNHUFIgPSBhbGxvY2F0b3Iu
YWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1i
ZXJPZlJldXNlZFJlZ2lzdGVycygpKTsKKyAgICAKKyAgICBhdXRvIGxvYWRBcmd1bWVudHMgPSBb
Jl0gKGJvb2wgY2xvYmJlcmVkKSB7CisgICAgICAgIGlmIChhcmd1bWVudHNPblN0YWNrKSB7Cisg
ICAgICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6YWRk
cmVzc0ZvcihncmFwaC5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIpOworICAgICAgICB9IGVs
c2UgaWYgKGNsb2JiZXJlZCkgeworICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50
c1NwaWxsU2xvdCksIGFyZ3VtZW50c0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAg
IGF1dG8gY29tcHV0ZVVzZWRTdGFjayA9IFsmXSAoR1BSUmVnIHRhcmdldEdQUiwgdW5zaWduZWQg
ZXh0cmEpIHsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHRh
cmdldEdQUik7CisgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaWYgKGV4dHJhKQorICAgICAgICAgICAgaml0
LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYSksIHRhcmdldEdQUik7Cisg
ICAgICAgIGppdC51cnNoaWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHRhcmdldEdQUik7
CisgICAgfTsKKyAgICAKKyAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZv
aWQqIGNhbGxlZSkgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAg
ICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAg
IG1fZXhjZXB0aW9ucy5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBl
cnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkp
OworICAgIH07CisgICAgCisgICAgbG9hZEFyZ3VtZW50cyhmYWxzZSk7CisKKyAgICBqaXQuc3Rv
cmVQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3QpKTsKKyAg
ICAKKyAgICAvLyBBdHRlbXB0IHRoZSBmb3J3YXJkaW5nIGZhc3QgcGF0aCwgaWYgaXQncyBiZWVu
IHJlcXVlc3RlZC4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGF2ZUFyZ3VtZW50czsKKyAgICBp
ZiAobV9ub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAvLyBEbyB0
aGUgaG9ycmlmaWMgZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0aW1pemF0aW9uLgorICAg
ICAgICAvLyBGSVhNRTogZG8gdGhpcyBvcHRpbWl6YXRpb24gYXQgdGhlIElSIGxldmVsLgorICAg
ICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBh
cmd1bWVudHNHUFIpKTsKKyAgICAgICAgCisgICAgICAgIGNvbXB1dGVVc2VkU3RhY2soc2NyYXRj
aEdQUjIsIDApOworICAgICAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShqaXQsIHNj
cmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0
LCBzbG93Q2FzZSk7CisgICAgICAgIAorICAgICAgICBqaXQubW92ZShjYWxsZWVHUFIsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgaGF2ZUFyZ3VtZW50cyA9IGppdC5qdW1wKCk7CisgICAgICAg
IHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgfQorICAgIAorICAgIC8vIEdvdHRhIHNwaWxsIHRo
ZSBjYWxsZWUsIGFyZ3VtZW50cywgYW5kIHRoaXMgYmVjYXVzZSB3ZSB3aWxsIG5lZWQgdGhlbSBs
YXRlciBhbmQgd2Ugd2lsbCBoYXZlIHNvbWUKKyAgICAvLyBjYWxscyB0aGF0IGNsb2JiZXIgdGhl
bS4KKyAgICBqaXQuc3RvcmU2NChjYWxsZWVHUFIsIENDYWxsSGVscGVyczo6YWRkcmVzc0Zvcihz
cGlsbFNsb3RzT2Zmc2V0ICsgY2FsbGVlU3BpbGxTbG90KSk7CisgICAgaWYgKCFhcmd1bWVudHNP
blN0YWNrKQorICAgICAgICBqaXQuc3RvcmU2NChhcmd1bWVudHNHUFIsIENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgYXJndW1lbnRzU3BpbGxTbG90KSk7CisgICAg
aWYgKGlzQ2FsbCkKKyAgICAgICAgaml0LnN0b3JlNjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSk7CisgICAgCisgICAg
dW5zaWduZWQgZXh0cmFTdGFjayA9IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArCisgICAgICAg
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXpl
b2Yodm9pZCopKTsKKyAgICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hHUFIxLCAwKTsKKyAgICBq
aXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2spLCBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSk7CisgICAgY2FsbFdpdGhFeGNlcHRpb25D
aGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MpKTsK
KyAgICAKKyAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjEp
OworICAgIGNvbXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQUjIsIGV4dHJhU3RhY2spOworICAgIGxv
YWRBcmd1bWVudHModHJ1ZSk7CisgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hH
UFIxLCBmYWxzZSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIyKTsKKyAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1leHRyYVN0YWNrKSwgc2NyYXRjaEdQUjIsIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoc2NyYXRjaEdQUjIsIGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpLCBzY3JhdGNoR1BSMSk7CisgICAgY2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblNldHVwVmFy
YXJnc0ZyYW1lKSk7CisgICAgCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IHNjcmF0Y2hHUFIyKTsKKyAgICAKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICBqaXQubG9hZDY0
KENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgdGhpc1NwaWxsU2xv
dCksIHRoaXNHUFIpOworICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNw
aWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
CisgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgIGhh
dmVBcmd1bWVudHMubGluaygmaml0KTsKKyAgICAKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHNjcmF0Y2hHUFIyLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBpZiAoaXNDYWxs
KQorICAgICAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3Vt
ZW50U2xvdCgwKSk7CisgICAgCisgICAgLy8gSGVuY2Vmb3J0aCB3ZSBtYWtlIHRoZSBjYWxsLiBU
aGUgYmFzZSBGVEwgY2FsbCBtYWNoaW5lcnkgZXhwZWN0cyB0aGUgY2FsbGVlIGluIHJlZ1QwIGFu
ZCBmb3IgdGhlCisgICAgLy8gc3RhY2sgZnJhbWUgdG8gYWxyZWFkeSBiZSBzZXQgdXAsIHdoaWNo
IGl0IGlzLgorICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OmNh
bGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAKKyAgICBtX2NhbGxCYXNlLmVt
aXQoaml0KTsKKyAgICAKKyAgICAvLyBVbmRvIHRoZSBkYW1hZ2Ugd2UndmUgZG9uZS4KKyAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHN0
YWNrUG9pbnRlclNwaWxsU2xvdCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworfQorCit2b2lkIEpTQ2FsbFZhcmFyZ3M6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyLCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyKQoreworICAgIG1fY2Fs
bEJhc2UubGluayh2bSwgbGlua0J1ZmZlcik7CisgICAgbGlua0J1ZmZlci5saW5rKG1fZXhjZXB0
aW9ucywgZXhjZXB0aW9uSGFuZGxlcik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBGVExKU0NhbGxWYXJhcmdzX2gKKyNkZWZpbmUgRlRMSlNDYWxsVmFyYXJnc19oCisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2UuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIExpbmtCdWZmZXI7CisKK25hbWVzcGFjZSBERkcgeworY2xh
c3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpT
Q2FsbFZhcmFyZ3MgeworcHVibGljOgorICAgIEpTQ2FsbFZhcmFyZ3MoKTsKKyAgICBKU0NhbGxW
YXJhcmdzKHVuc2lnbmVkIHN0YWNrbWFwSUQsIERGRzo6Tm9kZSopOworICAgIAorICAgIERGRzo6
Tm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIAorICAgIHN0YXRpYyB1
bnNpZ25lZCBudW1TcGlsbFNsb3RzTmVlZGVkKCk7CisgICAgCisgICAgdm9pZCBlbWl0KENDYWxs
SGVscGVycyYsIERGRzo6R3JhcGgmLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpOworICAgIHZv
aWQgbGluayhWTSYsIExpbmtCdWZmZXImLCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5k
bGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFja21hcElEOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSlNDYWxsVmFyYXJn
cyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNl
dCA8IG90aGVyLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7CisgICAgREZHOjpOb2RlKiBtX25vZGU7CisgICAgSlND
YWxsQmFzZSBtX2NhbGxCYXNlOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9leGNlcHRp
b25zOworCitwdWJsaWM6CisgICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CisjZW5kaWYgLy8gRlRMSlNDYWxsVmFyYXJnc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODAxNjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg3LDYgKzE4NywzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX291dC5z
dGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRT
dGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2Ep
OwogICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbnkgQ2FsbFZhcmFyZ3MgdGhlbiB3
ZSBuZWUgdG8gaGF2ZSBhIHNwaWxsIHNsb3QgZm9yIGl0LgorICAgICAgICBib29sIGhhc1ZhcmFy
Z3MgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKSB7
CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdz
OgorICAgICAgICAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAg
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgaGFzVmFyYXJn
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzVmFyYXJncykgeworICAgICAg
ICAgICAgTFZhbHVlIHZhcmFyZ3NTcGlsbFNsb3RzID0gbV9vdXQuYWxsb2NhKAorICAgICAgICAg
ICAgICAgIGFycmF5VHlwZShtX291dC5pbnQ2NCwgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90
c05lZWRlZCgpKSk7CisgICAgICAgICAgICBtX2Z0bFN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3Rh
Y2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgICAgIG1fb3V0LmNhbGwoCisgICAg
ICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NCht
X2Z0bFN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCksCisgICAgICAgICAgICAgICAg
bV9vdXQuaW50MzJaZXJvLCB2YXJhcmdzU3BpbGxTbG90cyk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIG1fY2FsbEZyYW1lID0gbV9vdXQucHRyVG9JbnQoCiAgICAgICAgICAgICBtX291
dC5jYWxsKG1fb3V0LmZyYW1lQWRkcmVzc0ludHJpbnNpYygpLCBtX291dC5pbnQzMlplcm8pLCBt
X291dC5pbnRQdHIpOwogICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0
KFRhZ1R5cGVOdW1iZXIpOwpAQCAtNjgzLDYgKzcwNywxNCBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIENvbnN0cnVjdDoKICAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNl
IENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAg
ICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICAgICAgY29tcGlsZUxvYWRW
YXJhcmdzKCk7CisgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoRlRMX05BVElWRV9DQUxM
X0lOTElOSU5HKQogICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZl
Q29uc3RydWN0OgpAQCAtMjA2NCw4ICsyMDk2LDIyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBjaGVja0FyZ3VtZW50c05vdENyZWF0ZWQoKTsKIAotICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG1fbm9kZSwgIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0g
ICAgICAgIHNldEludDMyKG1fb3V0LmFkZChtX291dC5sb2FkMzJOb25OZWdhdGl2ZShwYXlsb2Fk
Rm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSwgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsKKyAg
ICAgICAgaWYgKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAg
ICAgICAgJiYgIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpIHsKKyAgICAgICAgICAgIHNldEludDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAg
ICAgICAgICBpZiAoIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNT
dGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBzZXRJbnQzMigKKyAg
ICAgICAgICAgICAgICBtX291dC5hZGQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQz
Mk5vbk5lZ2F0aXZlKHBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksCisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIH0KICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkKQEAgLTM3ODYsNiArMzgz
Miw4NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpCisgICAg
eworICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbnVsbHB0cjsKKyAgICAg
ICAgTFZhbHVlIHRoaXNBcmcgPSBudWxscHRyOworICAgICAgICAKKyAgICAgICAgc3dpdGNoICht
X25vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgICAgIGpz
QXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHRo
aXNBcmcgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAgdGhpc0FyZyA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAganNBcmd1bWVudHMgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiYmFkIG5vZGUg
dHlwZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8TFZhbHVlPiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9v
dXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9v
dXQuY29uc3RJbnQzMihzaXplT2ZJQ0ZvcihtX25vZGUpKSk7CisgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZCht
X291dC5jb25zdEludDMyKDEgKyAhIWpzQXJndW1lbnRzICsgISF0aGlzQXJnKSk7CisgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQoanNDYWxsZWUpOworICAgICAgICBpZiAoanNBcmd1bWVudHMpCisg
ICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQXJndW1lbnRzKTsKKyAgICAgICAgaWYgKHRo
aXNBcmcpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNBcmcpOworICAgICAgICAK
KyAgICAgICAgY2FsbFByZWZsaWdodCgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGNhbGwg
PSBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVudHMp
OworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1DQ2Fs
bENvbnYpOworICAgICAgICAKKyAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxWYXJhcmdzZXMuYXBw
ZW5kKEpTQ2FsbFZhcmFyZ3Moc3RhY2ttYXBJRCwgbV9ub2RlKSk7CisgICAgICAgIAorICAgICAg
ICBzZXRKU1ZhbHVlKGNhbGwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFy
YXJncygpCisgICAgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IHZt
Q2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdz
KSwgbV9jYWxsRnJhbWUsIGpzQXJndW1lbnRzLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
MihkYXRhLT5vZmZzZXQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBh
IGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3
aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUg
Vk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlh
bmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9u
ZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAorICAg
ICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBsZW5n
dGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuaW50MzJPbmUpOworICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwg
bnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1f
b3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5z
dG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50
KSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRo
ZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5z
dGVhZAorICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0
byBkbyB0aGlzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQxNjYwCisgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBtX291dC5sU2hyKAor
ICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNl
dCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0
cigzKSk7CisgICAgICAgIAorICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgIG1f
b3V0LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdElu
dDMyKGRhdGEtPm9mZnNldCksCisgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIo
ZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUp1bXAo
KQogICAgIHsKQEAgLTQwOTAsNyArNDIxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAotICAgICAgICAgICAgICAgICAg
ICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkNo
ZWNrSW4oKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJ
RCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mSW4oKSksCiAgICAgICAgICAgICAgICAgICAgIGNv
bnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgY2VsbCk7CiAKICAgICAg
ICAgICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlS
ZWdDYWxsQ29udik7CkBAIC02NDgzLDcgKzY2MTAsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8v
IEJ1ZmZlciBpcyBvdXQgb2Ygc3BhY2UsIGZsdXNoIGl0LgogICAgICAgICBtX291dC5hcHBlbmRU
byhidWZmZXJJc0Z1bGwsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIHZtQ2FsbChtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpLCBtX2NhbGxGcmFtZSwgYmFz
ZSwgTm9FeGNlcHRpb25zKTsKKyAgICAgICAgdm1DYWxsTm9FeGNlcHRpb25zKG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlciksIG1fY2FsbEZyYW1lLCBiYXNl
KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNjQ5Miw0NCArNjYxOSwyMyBAQCBw
cml2YXRlOgogI2VuZGlmCiAgICAgfQogCi0gICAgZW51bSBFeGNlcHRpb25DaGVja01vZGUgeyBO
b0V4Y2VwdGlvbnMsIENoZWNrRXhjZXB0aW9ucyB9OwotICAgIAotICAgIExWYWx1ZSB2bUNhbGwo
TFZhbHVlIGZ1bmN0aW9uLCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9u
cykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSB2bUNhbGwoTFZh
bHVlIGZ1bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgewogICAgICAgICBjYWxsUHJlZmxpZ2h0
KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uKTsKLSAgICAg
ICAgY2FsbENoZWNrKG1vZGUpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChm
dW5jdGlvbiwgYXJncy4uLik7CisgICAgICAgIGNhbGxDaGVjaygpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVl
IGFyZzEsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQotICAgIHsK
LSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQu
Y2FsbChmdW5jdGlvbiwgYXJnMSk7Ci0gICAgICAgIGNhbGxDaGVjayhtb2RlKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24s
IExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVj
a0V4Y2VwdGlvbnMpCi0gICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExW
YWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxLCBhcmcyKTsKLSAgICAgICAg
Y2FsbENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBMVmFs
dWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFs
dWUgYXJnMywgRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0gICAg
ewotICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5jYWxsKGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczKTsKLSAgICAgICAgY2FsbENoZWNrKG1v
ZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBMVmFsdWUgdm1DYWxsKExW
YWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZh
bHVlIGFyZzQsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQorICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIHZtQ2FsbE5vRXhj
ZXB0aW9ucyhMVmFsdWUgZnVuY3Rpb24sIEFyZ3MuLi4gYXJncykKICAgICB7CiAgICAgICAgIGNh
bGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rp
b24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmdzLi4uKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIGNhbGxQcmVmbGln
aHQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgbV9vdXQuc3RvcmUzMigK
QEAgLTY1NDMsMTEgKzY2NDksOCBAQCBwcml2YXRlOgogICAgICAgICBjYWxsUHJlZmxpZ2h0KG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjYWxsQ2hlY2so
RXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCisgICAgdm9pZCBjYWxs
Q2hlY2soKQogICAgIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gTm9FeGNlcHRpb25zKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZUV4Y2Vw
dGlvbkZ1enooKSkKICAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkV4Y2VwdGlvbkZ1enopKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1NywxMyArMzU3LDggQEAgcHVi
bGljOgogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgVmVjdG9yVHlwZSYg
dmVjdG9yKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yKTsg
fQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbikgeyByZXR1cm4gYnVpbGRDYWxsKG1f
YnVpbGRlciwgZnVuY3Rpb24pOyB9CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBM
VmFsdWUgYXJnMSkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEp
OyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVl
IGFyZzIpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcy
KTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1
ZSBhcmcyLCBMVmFsdWUgYXJnMykgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rp
b24sIGFyZzEsIGFyZzIsIGFyZzMpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9u
LCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkgeyBy
ZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFy
ZzQpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZh
bHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUpIHsgcmV0dXJu
IGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBh
cmc1KTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExW
YWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUg
YXJnNikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIs
IGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0
aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwg
TFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBMVmFsdWUgYXJnNykgeyByZXR1cm4gYnVpbGRDYWxs
KG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYs
IGFyZzcpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwg
TFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1
ZSBhcmc2LCBMVmFsdWUgYXJnNywgTFZhbHVlIGFyZzgpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1
aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3
LCBhcmc4KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIGNh
bGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgQXJncy4uLiBhcmdzKSB7IHJldHVybiBi
dWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJncy4uLik7IH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+CiAgICAgTFZhbHVlIG9wZXJhdGlvbihG
dW5jdGlvblR5cGUgZnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDYgKzQ5LDEwIEBAIFN0YXRlOjpTdGF0ZShH
cmFwaCYgZ3JhcGgpCiAgICAgLCBtb2R1bGUoMCkKICAgICAsIGZ1bmN0aW9uKDApCiAgICAgLCBn
ZW5lcmF0ZWRGdW5jdGlvbigwKQorICAgICwgaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0
YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBoYW5kbGVFeGNlcHRpb25TdGFja21hcElEKFVJTlRf
TUFYKQorICAgICwgY2FwdHVyZWRTdGFja21hcElEKFVJTlRfTUFYKQorICAgICwgdmFyYXJnc1Nw
aWxsU2xvdHNTdGFja21hcElEKFVJTlRfTUFYKQogICAgICwgdW53aW5kRGF0YVNlY3Rpb24oMCkK
ICAgICAsIHVud2luZERhdGFTZWN0aW9uU2l6ZSgwKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCiAjaW5j
bHVkZSAiRlRMSlNDYWxsLmgiCisjaW5jbHVkZSAiRlRMSlNDYWxsVmFyYXJncy5oIgogI2luY2x1
ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CkBAIC03MSwxMCArNzIsMTIgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEOwogICAgIHVuc2lnbmVkIGhh
bmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQ7CiAgICAgdW5zaWduZWQgY2FwdHVyZWRTdGFja21hcElE
OworICAgIHVuc2lnbmVkIHZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRDsKICAgICBTZWdtZW50
ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3Rv
cjxQdXRCeUlkRGVzY3JpcHRvcj4gcHV0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPENoZWNr
SW5EZXNjcmlwdG9yPiBjaGVja0luczsKICAgICBWZWN0b3I8SlNDYWxsPiBqc0NhbGxzOworICAg
IFZlY3RvcjxKU0NhbGxWYXJhcmdzPiBqc0NhbGxWYXJhcmdzZXM7CiAgICAgVmVjdG9yPENTdHJp
bmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0aW9uTmFt
ZXM7CiAgICAgdm9pZCogdW53aW5kRGF0YVNlY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE4MDE2
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiAgICAgcmV0dXJuIGludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGNhbGxG
cmFtZSwgdGhpc1ZhbHVlLCBjYWxsZXJTY29wZUNoYWluKTsKIH0KIAotdW5zaWduZWQgc2l6ZUZy
YW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTdGFjayogc3RhY2ssIEpTVmFs
dWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RW
YXJBcmdPZmZzZXQpCit1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCiB7CiAgICAg
dW5zaWduZWQgbGVuZ3RoOwogICAgIGlmICghYXJndW1lbnRzKQpAQCAtMTU2LDYgKzE1NiwxMyBA
QCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogCiAgICAgZWxzZQogICAg
ICAgICBsZW5ndGggPSAwOwogICAgIAorICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3Vuc2lnbmVk
IHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU3RhY2sqIHN0YWNr
LCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90
IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHNpemVPZlZhcmFy
Z3MoY2FsbEZyYW1lLCBhcmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICAKICAgICBD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbGVlRnJhbWVGb3JWYXJhcmdzKGNhbGxGcmFtZSwg
bnVtVXNlZFN0YWNrU2xvdHMsIGxlbmd0aCArIDEpOwogICAgIGlmIChsZW5ndGggPiBBcmd1bWVu
dHM6Ok1heEFyZ3VtZW50cyB8fCAhc3RhY2stPmVuc3VyZUNhcGFjaXR5Rm9yKGNhbGxlZUZyYW1l
LT5yZWdpc3RlcnMoKSkpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZy
YW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSAtIHBhZGRlZENhbGxlZUZyYW1lT2Zmc2V0KTsKICAgICB9CiAKKyAg
ICB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENhbGxGcmFtZSogZXhlYywgSlNWYWx1ZSBhcmd1bWVu
dHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJhbWVG
b3JWYXJhcmdzKENhbGxGcmFtZSogZXhlYywgSlNTdGFjayosIEpTVmFsdWUgYXJndW1lbnRzLCB1
bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwog
ICAgIHZvaWQgbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBWaXJ0dWFsUmVnaXN0
ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBzb3VyY2UsIHVpbnQzMl90IG9mZnNldCwgdWlu
dDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwVmFyYXJnc0ZyYW1lKENhbGxGcmFtZSogZXhl
Y0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMy
X3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkocmV2aXNp
b24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksMTAgQEAgdm9pZCBTdGFja1Zp
c2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbAogCiAgICAgICAgIG1fZnJhbWUubV9jYWxsRnJh
bWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxp
bmVDYWxsRnJhbWU7Ci0gICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMy
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAgICAg
bV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2so
KTsKICAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gY29kZU9yaWdpbi0+Ynl0ZWNv
ZGVJbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsMTUgKzIxMiwyNyBA
QCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooCiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja0FsaWdubWVudEJ5dGVzKCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRp
b25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCkKK0Fzc2VtYmx5SGVscGVyczo6SnVtcCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2lu
ZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewogICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7
CisKKyAgICBpZiAod2lkdGggPT0gRmFySnVtcFdpZHRoKQorICAgICAgICBraW5kID0gKGtpbmQg
PT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrIDogTm9ybWFs
RXhjZXB0aW9uQ2hlY2spOwogICAgIAorICAgIEp1bXAgcmVzdWx0OwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNr
ID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRp
b24oKSkpOworICAgIHJlc3VsdCA9IGJyYW5jaFRlc3Q2NChraW5kID09IE5vcm1hbEV4Y2VwdGlv
bkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZF
eGNlcHRpb24oKSkpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICByZXR1cm4gYnJhbmNo
MzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29s
dXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRp
b24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgcmVzdWx0ID0gYnJhbmNoMzIoa2lu
ZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRk
cmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAjZW5kaWYKKyAgICAKKyAgICBpZiAod2lkdGggPT0g
Tm9ybWFsSnVtcFdpZHRoKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIFBhdGNo
YWJsZUp1bXAgcmVhbEp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CisgICAgcmVzdWx0LmxpbmsodGhp
cyk7CisgICAgCisgICAgcmV0dXJuIHJlYWxKdW1wLm1fanVtcDsKIH0KIAogdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhBc3NlbWJseUhlbHBlcnMm
IGppdCwgVHJ1c3RlZEltbVB0ciBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTgw
MTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzM4LDYgKzMzOCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHN0YXRp
YyBBZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAg
ICB7CisgICAgICAgIC8vIE5CLiBJdCdzIHRlbXB0aW5nIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyB0
byBzb21ldGltZXMgdXNlIGFuIG9mZnNldCBmcm9tIHRoZSBzdGFjaworICAgICAgICAvLyByZWdp
c3RlciBiZWNhdXNlIGZvciBzb21lIG9mZnNldHMgdGhhdCB3aWxsIGVuY29kZSB0byBhIHNtYWxs
ZXIgaW5zdHJ1Y3Rpb24uIEJ1dCB3ZQorICAgICAgICAvLyBjYW5ub3QgZG8gdGhpcy4gV2UgdXNl
IHRoaXMgaW4gcGxhY2VzIHdoZXJlIHRoZSBzdGFjayBwb2ludGVyIGhhcyBiZWVuIG1vdmVkIHRv
IHNvbWUKKyAgICAgICAgLy8gdW5wcmVkaWN0YWJsZSBsb2NhdGlvbi4KICAgICAgICAgQVNTRVJU
KHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSk7CiAgICAgfQpAQCAtMzY3LDM5ICszNzEsMzkgQEAgcHVibGljOgogICAgIH0K
IAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBBZGRy
ZXNzIGNhbGxlZUZyYW1lU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVG
cmFtZVNsb3QoaW50IHNsb3QpCiAgICAgewogICAgICAgICBBU1NFUlQoc2xvdCA+PSBKU1N0YWNr
OjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSk7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdp
c3RlcikgKiAoc2xvdCAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSk7CisgICAgICAg
IHJldHVybiBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICog
KHNsb3QgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpOwogICAgIH0KIAogICAgIC8v
IEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBBZGRyZXNzIGNhbGxl
ZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJn
dW1lbnRTbG90KGludCBhcmd1bWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFt
ZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKTsKICAg
ICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0
aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCiAgICAgewogICAgICAgICBy
ZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9
CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoaW50IHNsb3QpCisgICAgc3Rh
dGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0
KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50VGFnU2xvdChpbnQgYXJndW1l
bnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRUYWdTbG90KGludCBhcmd1bWVu
dCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVBcmd1bWVudFNsb3QoYXJndW1lbnQpLndp
dGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50
UGF5bG9hZFNsb3QoaW50IGFyZ3VtZW50KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3Vt
ZW50UGF5bG9hZFNsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxl
ZUFyZ3VtZW50U2xvdChhcmd1bWVudCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9
CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQorICAgIHN0YXRpYyBBZGRy
ZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxl
ZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7
CiAgICAgfQpAQCAtNTcxLDcgKzU3NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGxFeGNlcHRp
b25GdXp6KCk7CiAgICAgCiAgICAgZW51bSBFeGNlcHRpb25DaGVja0tpbmQgeyBOb3JtYWxFeGNl
cHRpb25DaGVjaywgSW52ZXJ0ZWRFeGNlcHRpb25DaGVjayB9OwotICAgIEp1bXAgZW1pdEV4Y2Vw
dGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2luZCBraW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sp
OworICAgIGVudW0gRXhjZXB0aW9uSnVtcFdpZHRoIHsgTm9ybWFsSnVtcFdpZHRoLCBGYXJKdW1w
V2lkdGggfTsKKyAgICBKdW1wIGVtaXRFeGNlcHRpb25DaGVjaygKKyAgICAgICAgRXhjZXB0aW9u
Q2hlY2tLaW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkp1bXBXaWR0aCA9IE5v
cm1hbEp1bXBXaWR0aCk7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCiAgICAgc3Rh
dGljIHZvaWQgZW1pdENvdW50KE1hY3JvQXNzZW1ibGVyJiBqaXQsIEFic3RyYWN0U2FtcGxpbmdD
b3VudGVyJiBjb3VudGVyLCBpbnQzMl90IGluY3JlbWVudCA9IDEpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
NzcsNiArMTc3NywxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIgYXJnMSwg
R1BSUmVnIGFyZzIsIFRydXN0ZWRJbW0zMiBhcmczLCBHUFJSZWcgYXJnNCwgVHJ1c3RlZEltbTMy
IGFyZzUpCisgICAgeworICAgICAgICBzZXR1cFR3b1N0dWJBcmdzR1BSPEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFI0PihhcmcyLCBhcmc0KTsKKyAgICAgICAgbW92
ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtb3ZlKGFyZzMsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAgIG1vdmUoYXJnNSwgR1BSSW5mbzo6YXJndW1lbnRH
UFI1KTsKKyAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJl
ZyBhcmczLCBUcnVzdGVkSW1tMzIgYXJnNCwgVHJ1c3RlZEltbTMyIGFyZzUpCiAgICAgewogICAg
ICAgICBzZXR1cFR3b1N0dWJBcmdzR1BSPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6
YXJndW1lbnRHUFIzPihhcmcyLCBhcmczKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BS
SW5mby5oCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQ
UkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDYgKzQwMiw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVnaXN0ZXJzOjplYXg7IC8v
IHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBYODZSZWdp
c3RlcnM6OmVkeDsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZl
ZE5vblJldHVybkdQUiA9IFg4NlJlZ2lzdGVyczo6ZXNpOworICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgbm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIgPSBYODZSZWdpc3RlcnM6OnIxMDsKICAgICBz
dGF0aWMgY29uc3QgR1BSUmVnIHBhdGNocG9pbnRTY3JhdGNoUmVnaXN0ZXIgPSBNYWNyb0Fzc2Vt
Ymxlcjo6c2NyYXRjaFJlZ2lzdGVyOwogCiAgICAgc3RhdGljIEdQUlJlZyB0b1JlZ2lzdGVyKHVu
c2lnbmVkIGluZGV4KQpAQCAtNTc3LDYgKzU3OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gQVJNNjRSZWdpc3RlcnM6OngwOyAvLyByZWdUMAog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gQVJNNjRSZWdpc3RlcnM6
OngxOyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSID0gQVJNNjRSZWdpc3RlcnM6OngyOworICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9u
UHJlc2VydmVkTm9uQXJndW1lbnRHUFIgPSBBUk02NFJlZ2lzdGVyczo6eDg7CiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRjaFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6
OmlwMDsKIAogICAgIC8vIEdQUlJlZyBtYXBwaW5nIGlzIGRpcmVjdCwgdGhlIG1hY2hpbmUgcmVn
c2l0ZXIgbnVtYmVycyBjYW4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDY0LDExICs0NjQsNiBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZh
dGVDb21waWxlKEpJCiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsK
ICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgREZHOjpDYW5JbmxpbmU6Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxz
ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7Ci0gICAgICAgIG1f
c2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZH
OjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAg
ICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
cmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgY29tcGlsZU9wQ2FsbChPcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCk7CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29k
ZUlELCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgICAgIHZvaWQgY29tcGlsZVNldHVwVmFyYXJn
c0ZyYW1lKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgY29tcGlsZVNldHVwVmFyYXJnc0Zy
YW1lKEluc3RydWN0aW9uKiwgQ2FsbExpbmtJbmZvKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNh
bGxFdmFsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJn
c0ZyYW1lKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21waWxlU2V0dXBW
YXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYWxsTGlua0luZm8qIGluZm8p
CiB7CiAgICAgaW50IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICBp
bnQgYXJndW1lbnRzID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtOTAsNiArOTAsMTYg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cgogICAgIGlmIChjYW5P
cHRpbWl6ZSkKICAgICAgICAgZW5kLmxpbmsodGhpcyk7CiAgICAgCisgICAgLy8gUHJvZmlsZSB0
aGUgYXJndW1lbnQgY291bnQuCisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9h
ZE9mZnNldCksIHJlZ1QyKTsKKyAgICBsb2FkOCgmaW5mby0+bWF4TnVtQXJndW1lbnRzLCByZWdU
MCk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7
CisgICAgSnVtcCBub3RTYXR1cmF0ZWQgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoMjU1KSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoMjU1KSwgcmVnVDIpOwor
ICAgIG5vdFNhdHVyYXRlZC5saW5rKHRoaXMpOworICAgIHN0b3JlOChyZWdUMiwgJmluZm8tPm1h
eE51bUFyZ3VtZW50cyk7CisgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOworICAgIAogICAgIC8v
IEluaXRpYWxpemUgJ3RoaXMnLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVl
LCByZWdUMCk7CiAgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKQEAgLTEzNCw3ICsxNDQsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
SW5zdHJ1CiAKIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAg
IGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOworCisgICAgIGludCBjYWxs
ZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgog
ICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4K
QEAgLTE1Miw3ICsxNjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNv
ZGVJCiAgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVf
TEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIGNhbGxfYW5kX2NhbGxfdmFyYXJnc19vcGNvZGVzX211
c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3Bf
Y2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFyYXJncyksIGNhbGxfYW5kX2Nv
bnN0cnVjdF92YXJhcmdzX29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFy
YXJncykKLSAgICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKGluc3RydWN0aW9uKTsKKyAg
ICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKGluc3RydWN0aW9uLCBpbmZvKTsKICAgICBl
bHNlIHsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwog
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpA
QCAtMTc2LDkgKzE4OCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29k
ZUkKIAogICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpT
U3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKICAgICAKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
Y2FsbF9ldmFsKSB7CisgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CiAgICAgICAg
IGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsNyBAQCB0eXBlZGVmIGludDY0X3QgSklUX09QRVJB
VElPTigqUV9KSVRPcGVyCiB0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3Bl
cmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklU
T3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04g
KCpaX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIGludDMy
X3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VKWikoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIGludDMyX3QpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJ
VE9wZXJhdGlvbl9FSlpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50
MzJfdCk7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUND
KShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVS
QVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwpA
QCAtMTg5LDYgKzE5MCw3IEBAIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVZ3c0opKEV4
ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGlu
dDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWkop
KEV4ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpKWlpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBF
bmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWbSkoRXhlY1N0YXRlKiwgVk0qKTsKIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFs
dWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9aKShpbnQz
Ml90KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdz
RnJhbWUuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDExICsxMDEsMzEg
QEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAogCiB2b2lkIGVtaXRT
ZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgbnVtVXNl
ZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVn
IHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJzdFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCYgc2xvd0Nhc2UpCiB7Ci0gICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uo
Ci0gICAgICAgIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIzLAotICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2so
VmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCBEYXRhRm9ybWF0SW50MzIp
LAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSks
Ci0gICAgICAgIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgZW1pdFNldHVwVmFy
YXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3Jh
dGNoR1BSMiwgc2NyYXRjaEdQUjMsIG51bGxwdHIsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2Fz
ZSk7Cit9CisKK3ZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVn
IHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCB1bnNpZ25lZCBmaXJzdFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCYgc2xvd0Nhc2UpCit7CisgICAgVmFsdWVSZWNvdmVyeSBhcmd1bWVudENvdW50UmVjb3Zl
cnk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0QXJndW1lbnRSZWc7CisgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkg
eworICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyLCBEYXRhRm9ybWF0SW50MzIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgYXJndW1lbnRDb3VudFJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQo
CisgICAgICAgICAgICAgICAganNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSA+IDEpCisgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoMCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYXJndW1lbnRDb3VudFJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpLCBEYXRhRm9ybWF0SW50MzIpOworICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0g
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpOworICAgIH0KKyAg
ICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShqaXQsIG51bVVzZWRTbG90c0dQUiwgc2Ny
YXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgYXJndW1lbnRDb3VudFJlY292ZXJ5
LCBmaXJzdEFyZ3VtZW50UmVnLCBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBW
YXJhcmdzRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmgJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIs
OSBAQCB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsCiAvLyBWYXJpYW50
IHRoYXQgYXNzdW1lcyBub3JtYWwgc3RhY2sgZnJhbWUuCiB2b2lkIGVtaXRTZXR1cFZhcmFyZ3NG
cmFtZUZhc3RDYXNlKENDYWxsSGVscGVycyYsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIHVu
c2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93Q2Fz
ZSk7CiAKKy8vIFZhcmlhbnQgZm9yIHBvdGVudGlhbGx5IGlubGluZWQgc3RhY2sgZnJhbWVzLgor
dm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
bnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwg
R1BSUmVnIHNjcmF0Y2hHUFIzLCBJbmxpbmVDYWxsRnJhbWUqLCB1bnNpZ25lZCBmaXJzdFZhckFy
Z09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2UpOworCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcg
KzU2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBzdGF0aWMgQXJndW1lbnRzKiBjcmVhdGUo
Vk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSA9IE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9kZSkK
ICAgICB7Ci0gICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFwLCBvZmZzZXRPZklubGluZVJlZ2lzdGVyQXJyYXko
KSArIHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhpbmxpbmVDYWxsRnJhbWUpKSkgQXJndW1lbnRz
KGNhbGxGcmFtZSk7CisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFwLCBvZmZzZXRPZklubGluZVJlZ2lzdGVy
QXJyYXkoKSArIHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhjYWxsRnJhbWUsIGlubGluZUNhbGxG
cmFtZSkpKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKICAgICAgICAgYXJndW1lbnRzLT5maW5pc2hD
cmVhdGlvbihjYWxsRnJhbWUsIGlubGluZUNhbGxGcmFtZSwgbW9kZSk7CiAgICAgICAgIHJldHVy
biBhcmd1bWVudHM7CiAgICAgfQpAQCAtMTI0LDcgKzEyNCwxNSBAQCBwcml2YXRlOgogICAgIHZv
aWQgY3JlYXRlU3RyaWN0TW9kZUNhbGxlZUlmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSopOwogCiAgICAg
c3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5C
eXRlcyhJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkgeyByZXR1cm4gc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMSk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAg
eworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIHJldHVybiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
IDEpOworICAgIH0KICAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90KTsKICAgICBib29sIHRyeVNl
dEFyZ3VtZW50KFZNJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlKTsKICAgICBKU1ZhbHVlIHRy
eUdldEFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCk7CkBAIC0zNDAsMTEgKzM0OCwxNSBAQCBpbmxp
bmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgbV9vdmVycm9kZUNhbGxl
ZSA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsKICAgICBtX2lzU3RyaWN0
TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1
dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKLQorICAgIAorICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgIG1fbnVtQXJn
dW1lbnRzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lz
dGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbnVtQXJn
dW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgIG1fbnVtQXJn
dW1lbnRzLS07CisgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBOb3JtYWxBcmd1
bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICAKICAgICAgICAgaWYgKG1fbnVt
QXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAg
ICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9u
ZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpAQCAtMzYxLDcgKzM3
Myw2IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0gICAgICAg
IG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsK
ICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9y
QXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0
ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2Fz
dDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBv
ZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNl
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNp
b24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgLyogZnJvbSBzdXBlciBsb25nIGNvbXBpbGVzIHRoYXQgdGFrZSBhIGxv
dCBvZiBtZW1vcnkuICovXAogICAgIHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ0NhbGxlclNp
emUsIDEwMDAwKSBcCiAgICAgXAorICAgIHYodW5zaWduZWQsIG1heGltdW1WYXJhcmdzRm9ySW5s
aW5pbmcsIDEwMCkgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50Q2FsbElu
bGluaW5nLCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudEJ5SWRJbmxpbmlu
ZywgdHJ1ZSkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWV4aXQtaW4tZm9vLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRo
ZW4taW5saW5lZC1jYWxsLWV4aXQtaW4tZm9vLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwt
ZXhpdC1pbi1mb28uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorZnVuY3Rpb24g
Zm9vKGEsIGIpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkucHVzaChhcmd1bWVudHNbaV0g
KyAxKTsKKyAgICByZXR1cm4ge2E6YSwgYjpiLCBjOmFycmF5fTsKK30KKworZnVuY3Rpb24gYmFy
KGFycmF5KSB7CisgICAgcmV0dXJuIGZvby5hcHBseSh0aGlzLCBhcnJheSk7Cit9CisKK25vSW5s
aW5lKGJhcik7CisKK2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgeworICAgIGlmIChhLmEgIT0g
Yi5hKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2
ZXJzdXMgIiArIGIuYTsKKyAgICBpZiAoYS5iICE9IGIuYikKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7CisgICAgaWYgKGEu
Yy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUg
b2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBm
b3IgKHZhciBpID0gYS5jLmxlbmd0aDsgaS0tOykgeworICAgICAgICBpZiAoYS5jW2ldICE9IGIu
Y1tpXSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21hdGNo
IGF0IGkgPSAiICsgaSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIH0KK30K
KworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIHZhciBleHBlY3RlZCA9IHthOmFycmF5WzBd
LCBiOmFycmF5WzFdLCBjOmFycmF5Lm1hcChmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
KyAxIH0pfTsKKyAgICB2YXIgYWN0dWFsID0gYmFyKGFycmF5KTsKKyAgICBjaGVja0VxdWFsKGFj
dHVhbCwgZXhwZWN0ZWQpOworfQorCisvLyBUaGlzIGlzIHByZXR0eSBkdW1iLiBXZSBuZWVkIHRv
IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBWTSBpcyBwcmVwYXJlZCBmb3IgZG91YmxlIGFycmF5
cyBiZWluZworLy8gY3JlYXRlZC4KK3ZhciBhcnJheSA9IFtdOworYXJyYXkucHVzaCg0Mik7Cith
cnJheS5wdXNoKDQyLjUpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAg
ICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IGkgJSA2OyArK2opCisg
ICAgICAgIGFycmF5LnB1c2goaik7CisgICAgdGVzdChhcnJheSk7Cit9CisKK3Rlc3QoWzEuNSwg
Mi41LCAzLjVdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbG9h
ZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLmpz
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2Fk
LXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
OSBAQAorZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkucHVz
aChhcmd1bWVudHNbaV0pOworICAgIHJldHVybiB7YTphLCBiOmIsIGM6YXJyYXl9OworfQorCitm
dW5jdGlvbiBiYXIoYXJyYXkpIHsKKyAgICByZXR1cm4gZm9vLmFwcGx5KHRoaXMsIGFycmF5KTsK
K30KKworbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAg
aWYgKGEuYSAhPSBiLmEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIg
KyBhLmEgKyAiIHZlcnN1cyAiICsgYi5hOworICAgIGlmIChhLmIgIT0gYi5iKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsK
KyAgICBpZiAoYS5jLmxlbmd0aCAhPSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsg
Yi5jOworICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChh
LmNbaV0gIT0gYi5jW2ldKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2Yg
YywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7
CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgdmFyIGV4cGVjdGVkID0g
e2E6YXJyYXlbMF0sIGI6YXJyYXlbMV0sIGM6YXJyYXl9OworICAgIHZhciBhY3R1YWwgPSBiYXIo
YXJyYXkpOworICAgIGNoZWNrRXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgaSAlIDY7ICsraikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAgICB0
ZXN0KGFycmF5KTsKK30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246676</attachid>
            <date>2015-02-16 13:54:15 -0800</date>
            <delta_ts>2015-02-16 17:06:08 -0800</delta_ts>
            <desc>more fixes, more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>204847</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODAxNjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
MTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFB
OEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAv
KiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAx
NDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2Nh
dGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxs
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAw
MEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8q
IFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICov
LAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAq
LywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
LAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkw
RjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBA
QAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4
NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiAr
NDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRy
dXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVy
c2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNy
Y0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQo
aW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0z
MkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMzQsNiArMzM0LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
bXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgxLDYgKzg4MSwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJ
YiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
ODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgw
KQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBw
dWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNp
Z25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDog
ODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAg
Ly8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1
ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0o
cHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZv
KGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1f
bWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxs
TGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkK
K3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9j
b3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBi
b29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAo
IW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1w
KG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAg
bV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApA
QCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29u
c3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAg
LTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkg
Y29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgog
ICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAg
IGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0
LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAg
IENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFy
Z3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNv
cnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAg
ICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZh
cmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAg
cmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBpc1Zh
cmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtp
bmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtp
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzRXNjYXBlZCI7CiAgICAgY2FzZSBOb3RTdHJpbmdP
YmplY3Q6CiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKKyAgICBjYXNlIFZhcmFy
Z3NPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZsb3ciOwogICAgIGNhc2Ug
VW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5j
b3VudGFibGVJbnZhbGlkYXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEluYWRlcXVhdGVDb3ZlcmFnZSwgLy8gV2UgZXhp
dGVkIGJlY2F1c2Ugd2UgZW5kZWQgdXAgaW4gY29kZSB0aGF0IGRpZG4ndCBoYXZlIHByb2ZpbGlu
ZyBjb3ZlcmFnZS4KICAgICBBcmd1bWVudHNFc2NhcGVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
cmd1bWVudHMgZXNjYXBlZCBidXQgd2UgZGlkbid0IGV4cGVjdCB0aGVtIHRvLgogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgorICAgIFZhcmFyZ3NPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB2YXJhcmdzIGNhbGwgcGFzc2VkIG1vcmUgYXJndW1l
bnRzIHRoYW4gd2UgZXhwZWN0ZWQuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgV2F0Y2hkb2dU
aW1lckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdh
dGNoZG9nIHRpbWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05MiwyNSArOTIsMjUgQEAgdm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wSW5Db250ZXh0KFBy
aW50UwogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgb3V0LnByaW50ZigiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkp
OworICAgICAgICBvdXQucHJpbnQoIioiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJp
bnRmKCIqaW50MzIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBv
dXQucHJpbnQoIippbnQzMigiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmlu
dGYoIippbnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CisgICAgICAgIG91
dC5wcmludCgiKmludDUyKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgb3V0
LnByaW50ZigiKnN0cmljdEludDUyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsK
KyAgICAgICAgb3V0LnByaW50KCIqc3RyaWN0SW50NTIoIiwgdmlydHVhbFJlZ2lzdGVyKCksICIp
Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgb3V0LnByaW50ZigiKmRvdWJsZSglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKmRvdWJsZSgiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwg
IikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgb3V0LnByaW50ZigiKmNlbGwoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkpOworICAgICAgICBvdXQucHJpbnQoIipjZWxsKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICBvdXQucHJpbnRmKCIqYm9vbCglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQo
KSk7CisgICAgICAgIG91dC5wcmludCgiKmJvb2woIiwgdmlydHVhbFJlZ2lzdGVyKCksICIpIik7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoK
ICAgICAgICAgb3V0LnByaW50ZigiYXJndW1lbnRzIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk0LDkgKzE5NCwy
MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFNldEFyZ3VtZW50OgotICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUg
c3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRl
LmJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7
CisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4g
c2V0LiBTZXRBcmd1bWVudCBtZWFucyB0aGF0IHNvbWVvbmUgc2V0CisgICAgICAgIC8vIHRoZSBh
cmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVh
bnMgc2V0dGluZyB0byBhCisgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KKyAgICAgICAgQVNT
RVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigp
KTsKICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7
CisgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5jb3VudCkuc2V0VHlw
ZShTcGVjSW50MzIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0t
OykKKyAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5zdGFydC5v
ZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CkBAIC0xMzI0LDcgKzEz
MzUsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50
IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKICAgICAgICAgLy8gb2YgR2V0TXlBcmd1bWVudHNM
ZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMgYSBjbG9iYmVyaW5nIG9wZXJh
dGlvbi4KICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0aGVyIG9wdGltaXphdGlvbnMgb24gdGhp
cyBsYXRlciBvbi4KLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgc2V0Q29uc3RhbnQoCiAgICAgICAgICAgICAg
ICAgbm9kZSwganNOdW1iZXIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJl
cih0cnVlKTsgLy8gUHJldGVuZCB0aGF0IHdlIGNsb2JiZXJlZCB0byBwcmV2ZW50IGNvbnN0YW50
IGZvbGRpbmcuCkBAIC0xOTczLDYgKzE5ODUsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxs
OgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAg
Y2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFvcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2Uga25v
dyBleGFjdGx5IHdoYXQgdGhpcyB3aWxsIHJldHVybi4gQnV0IG9ubHkgYWZ0ZXIgd2UgaGF2ZSBj
aGVja2VkCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgbm9ib2R5IGhhcyBlc2NhcGVkIG91
ciBhcmd1bWVudHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsx
NzAsOCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBtYXgu
Ci0gICAgYm9vbCBoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBp
bnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICBib29sIGhhbmRsZU1pbk1heChp
bnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVj
a3MpOwogICAgIAogICAgIC8vIEhhbmRsZSBjYWxscy4gVGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vy
cm91bmRpbmcgaW5saW5pbmcgYW5kIGludHJpbnNpY3MuCiAgICAgdm9pZCBoYW5kbGVDYWxsKApA
QCAtMTgyLDIwICsxODMsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogY2FsbFRhcmdldCwg
aW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzKTsKICAgICB2
b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50IGNhbGxlZSwgaW50IGFyZ0NvdW50
LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiog
cGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIGVtaXRG
dW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIHVuZG9GdW5jdGlvbkNo
ZWNrcyhDYWxsVmFyaWFudCk7CisgICAgdm9pZCBoYW5kbGVWYXJhcmdzQ2FsbChJbnN0cnVjdGlv
biogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB2b2lkIGVt
aXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwgVmlydHVhbFJl
Z2lzdGVyIHRoaXNBcmd1bW50KTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21zKGludCBy
ZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7IC8v
IFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmluZyBjYW5kaWRhdGUuIEJ5IGNv
bnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4KICAgICAvLyBIYW5kbGUgaW5s
aW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBw
bGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZz
ZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBl
bnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIENhbGxlckxp
bmtzTWFudWFsbHkgfTsKLSAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQs
IElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpOwotICAgIHZvaWQgaW5saW5l
Q2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0
eSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICBib29sIGF0dGVt
cHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBD
YWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVy
TGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmlu
Z0JhbGFuY2UsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICB2b2lkIGlubGluZUNhbGwoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZz
ZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIGNvbnN0IENoZWNr
c0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgdm9pZCBjYW5jZWxMaW5raW5nRm9yQmxvY2so
SW5saW5lU3RhY2tFbnRyeSosIEJhc2ljQmxvY2sqKTsgLy8gT25seSB3b3JrcyB3aGVuIHRoZSBn
aXZlbiBibG9jayBpcyB0aGUgbGFzdCBvbmUgdG8gaGF2ZSBiZWVuIGFkZGVkIGZvciB0aGF0IGlu
bGluZSBzdGFjayBlbnRyeS4KICAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0
dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2Fs
bC4KLSAgICBib29sIGhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2lj
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbik7Ci0gICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5Q29uc3Ry
dWN0b3IoaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUpOwot
ICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5k
LCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3Vs
dE9wZXJhbmQsIEludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IENoZWNrc0Z1
bmN0b3ImIGluc2VydENoZWNrcyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rv
cj4KKyAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFu
ZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5z
ZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIGJv
b2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRl
cm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcyk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKICAgICBOb2Rl
KiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgY29uc3QgU3Ry
dWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5v
ZGVUeXBlIG9wID0gR2V0QnlPZmZzZXQpOwogICAgIHZvaWQgaGFuZGxlR2V0QnlJZCgKQEAgLTUy
OCw2ICs1MzQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVT
dGFja0VudHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSkp
KTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAg
ICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVTdGFja0VudHJ5LT5tX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gbnVtQXJn
dW1lbnRzOyBhcmd1bWVudC0tID4gMTspCkBAIC02NTQsMTMgKzY2Miw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlTGFzdE5v
ZGVGcm9tR3JhcGgoTm9kZVR5cGUgZXhwZWN0ZWROb2RlVHlwZSkKLSAgICB7Ci0gICAgICAgIE5v
ZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dGFrZUxhc3QoKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+b3AoKSA9PSBleHBlY3RlZE5vZGVUeXBlKTsKLSAgICAgICAgbV9ncmFwaC5t
X2FsbG9jYXRvci5mcmVlKG5vZGUpOwotICAgIH0KLQogICAgIHZvaWQgYWRkVmFyQXJnQ2hpbGQo
Tm9kZSogY2hpbGQpCiAgICAgewogICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBw
ZW5kKEVkZ2UoY2hpbGQpKTsKQEAgLTY5MSw3ICs2OTIsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgb3AsIG9wSW5mbywgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rp
b24pOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CiAgICAgICAg
IGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHQpLCBjYWxsKTsKKyAgICAgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOwogICAg
ICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCkBAIC0xMDQyLDggKzEwNDMsOCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogewogICAgIEFTU0VSVChyZWdpc3Rlck9mZnNl
dCA8PSAwKTsKICAgICAKLSAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3RhbnQoKSkKLSAgICAg
ICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0LT5hc0pTVmFsdWUo
KSkuc2V0SXNQcm92ZWQodHJ1ZSk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50
KCkpCisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxW
YXJpYW50KGNhbGxUYXJnZXQtPmFzQ2VsbCgpKSk7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAgICAgZGF0YUxvZygiICAgIEhhbmRsaW5n
IGNhbGwgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJc
biIpOwpAQCAtMTA2MCw3ICsxMDYxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bCgKICAgICAKICAgICBPcEluZm8gY2FsbE9wSW5mbzsKICAgICAKLSAgICBpZiAoaGFuZGxlSW5s
aW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwga2luZCwgcHJlZGlj
dGlvbikpIHsKKyAgICBpZiAoaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxs
TGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAs
IHJlZ2lzdGVyT2Zmc2V0KSwgVmlydHVhbFJlZ2lzdGVyKCksIDAsIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwga2luZCwgcHJlZGljdGlvbikpIHsKICAgICAgICAg
aWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRp
b24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3Miw3ICsx
MDczLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBjYWxsZWUuZnVuY3Rpb24oKTsKICAgICAgICAgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxp
emF0aW9uS2luZEZvcihraW5kKTsKICAgICAgICAgaWYgKGZ1bmN0aW9uICYmIGZ1bmN0aW9uLT5p
c0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbGVl
LCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUsIGNhbGxUYXJnZXQsIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBjYWxsT3BJ
bmZvID0gT3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CiAKICAgICAgICAgICAgIGlm
IChvcCA9PSBDYWxsKQpAQCAtMTA4OCwxMSArMTA4OSw1NCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKAogICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbE9wSW5mbywgY2FsbFRh
cmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0
aW9uKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxW
YXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJh
cmdzQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCiB7Ci0gICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIEFTU0VSVChPUENPREVf
TEVOR1RIKG9wX2NhbGxfdmFyYXJncykgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFy
YXJncykpOworICAgIAorICAgIGludCByZXN1bHQgPSBwY1sxXS51Lm9wZXJhbmQ7CisgICAgaW50
IGNhbGxlZSA9IHBjWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgdGhpc1JlZyA9IHBjWzNdLnUub3Bl
cmFuZDsKKyAgICBpbnQgYXJndW1lbnRzID0gcGNbNF0udS5vcGVyYW5kOworICAgIGludCBmaXJz
dEZyZWVSZWcgPSBwY1s1XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0g
cGNbNl0udS5vcGVyYW5kOworICAgIAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBn
ZXRQcmVkaWN0aW9uKCk7CisgICAgCisgICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIoY2FsbGVlKSk7CisgICAgCisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0
dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLAorICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOworICAgIGlmIChj
YWxsVGFyZ2V0LT5pc0NlbGxDb25zdGFudCgpKQorICAgICAgICBjYWxsTGlua1N0YXR1cy5zZXRQ
cm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFudChjYWxsVGFyZ2V0LT5hc0NlbGwoKSkpOwor
ICAgIAorICAgIGlmIChjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpCisgICAgICAgICYmIGhh
bmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIGZpcnN0RnJl
ZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpLCBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
KSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5lQ2FsbEZyYW1lOjp2YXJhcmdzS2luZEZvcihraW5k
KSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAg
ICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBt
X2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOworICAgIGRhdGEtPmZpcnN0VmFyQXJnT2Zm
c2V0ID0gZmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgCisgICAgTm9kZSogdGhpc0NoaWxkOwogICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgdGhp
c0NoaWxkID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSk7CisgICAgZWxzZQorICAgICAg
ICB0aGlzQ2hpbGQgPSBudWxscHRyOworICAgIAorICAgIE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBo
KG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgY2FsbFRhcmdldCwgZ2V0KFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKSwgdGhpc0NoaWxkKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CisgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisgICAg
ICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOworfQorCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0
RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50UmVnKQoreworICAgIE5vZGUqIHRoaXNBcmd1bWVudDsK
KyAgICBpZiAodGhpc0FyZ3VtZW50UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgdGhpc0FyZ3VtZW50
ID0gZ2V0KHRoaXNBcmd1bWVudFJlZyk7CiAgICAgZWxzZQogICAgICAgICB0aGlzQXJndW1lbnQg
PSAwOwogCkBAIC0xMTEwLDEzICsxMTU0LDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1
bmN0aW9uQ2hlY2tzKAogICAgIGFkZFRvR3JhcGgoQ2hlY2tDZWxsLCBPcEluZm8obV9ncmFwaC5m
cmVlemUoY2FsbGVlQ2VsbCkpLCBjYWxsVGFyZ2V0Rm9yQ2hlY2ssIHRoaXNBcmd1bWVudCk7CiB9
CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OnVuZG9GdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBj
YWxsZWUpCi17Ci0gICAgcmVtb3ZlTGFzdE5vZGVGcm9tR3JhcGgoQ2hlY2tDZWxsKTsKLSAgICBp
ZiAoY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSkKLSAgICAgICAgcmVtb3ZlTGFzdE5vZGVGcm9tR3Jh
cGgoR2V0RXhlY3V0YWJsZSk7Ci19Ci0KIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRBcmd1bWVu
dFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgZm9yIChpbnQgaSA9IGtp
bmQgPT0gQ29kZUZvckNhbGwgPyAwIDogMTsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OyArK2kpCkBAIC0xMjEwLDEzICsxMjQ3LDE1IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjpp
bmxpbmluZ0Nvc3QoQ2EKICAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCk7
CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0
LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlu
a2FiaWxpdHkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgordm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJh
bmQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6
S2luZCBraW5kLCBDYWxsZXJMaW5rYWJpbGl0eSBjYWxsZXJMaW5rYWJpbGl0eSwgY29uc3QgQ2hl
Y2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
c3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRG
b3Ioa2luZCk7CiAgICAgCiAgICAgQVNTRVJUKGlubGluaW5nQ29zdChjYWxsZWUsIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQpICE9IFVJTlRfTUFYKTsKICAg
ICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxlZS5mdW5jdGlvbkV4ZWN1dGFibGUo
KS0+YmFzZWxpbmVDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBpbnNlcnRD
aGVja3MoY29kZUJsb2NrKTsKIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMh
CiAgICAgCkBAIC0xMzU2LDQ0ICsxMzk1LDU5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmNhbmNl
bExpbmtpbmdGb3JCbG8KICAgICB9CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRU
b0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxs
VmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2lu
ZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGVja3NGdW5jdG9yPgorYm9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50IGNhbGxl
ZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVu
c2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBDYWxsZXJMaW5r
YWJpbGl0eSBjYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5z
aWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tz
KQogewogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5s
aW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CiAgICAgCiAgICAgaWYg
KCFpbmxpbmluZ0JhbGFuY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKKyAgICBib29s
IGRpZEluc2VydENoZWNrcyA9IGZhbHNlOworICAgIGF1dG8gaW5zZXJ0Q2hlY2tzV2l0aEFjY291
bnRpbmcgPSBbJl0gKCkgeworICAgICAgICBpbnNlcnRDaGVja3MobnVsbHB0cik7CisgICAgICAg
IGRpZEluc2VydENoZWNrcyA9IHRydWU7CisgICAgfTsKKyAgICAKICAgICBpZiAoSW50ZXJuYWxG
dW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUuaW50ZXJuYWxGdW5jdGlvbigpKSB7Ci0gICAgICAg
IGlmIChoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0T3BlcmFuZCwgZnVuY3Rp
b24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6
YXRpb25LaW5kKSkgeworICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9u
KHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCwgaW5zZXJ0Q2hlY2tzV2l0aEFjY291bnRp
bmcpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRJbnNlcnRDaGVja3MpOwogICAg
ICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0Tm9kZSk7CiAgICAgICAgICAg
ICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFu
Y2UtLTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENoZWNrcyk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgSW50cmluc2ljIGludHJpbnNpYyA9IGNh
bGxlZS5pbnRyaW5zaWNGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpZiAoaW50cmluc2lj
ICE9IE5vSW50cmluc2ljKSB7Ci0gICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWMocmVzdWx0T3Bl
cmFuZCwgaW50cmluc2ljLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHByZWRpY3Rpb24pKSB7CisgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWMocmVzdWx0T3Bl
cmFuZCwgaW50cmluc2ljLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHByZWRpY3Rpb24sIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nKSkgeworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgY2FsbFRhcmdldE5vZGUpOwogICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhh
bnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFs
aXphdGlvbktpbmQpOwogICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFkaWRJbnNlcnRDaGVja3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAogICAgIHVuc2lnbmVkIG15SW5saW5pbmdDb3N0ID0gaW5saW5pbmdDb3N0KGNh
bGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAg
ICAgaWYgKG15SW5saW5pbmdDb3N0ID4gaW5saW5pbmdCYWxhbmNlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgaW5saW5lQ2FsbChjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFu
ZCwgY2FsbGVlLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIGNhbGxlckxpbmthYmlsaXR5KTsKKworICAgIGlubGluZUNhbGwoY2Fs
bFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxlZSwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBjYWxsZXJMaW5rYWJpbGl0
eSwgaW5zZXJ0Q2hlY2tzKTsKICAgICBpbmxpbmluZ0JhbGFuY2UgLT0gbXlJbmxpbmluZ0Nvc3Q7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExp
bmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9w
LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikK
K2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAorICAgIE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5r
U3RhdHVzLAorICAgIGludCByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc0FyZ3VtZW50LAorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVu
dCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsCisgICAgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxs
RnJhbWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBpZiAo
dmVyYm9zZSkgewogICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuIik7CkBA
IC0xNDA3LDYgKzE0NjEsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
Tm9kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIGlmIChJbmxpbmVD
YWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKQorICAgICAgICAmJiBjYWxsTGlua1N0YXR1cy5tYXhO
dW1Bcmd1bWVudHMoKSA+IE9wdGlvbnM6Om1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcoKSkgewor
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5p
bmcgYmVjYXVzZSBvZiB2YXJhcmdzLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgICAgIAogICAgIHVuc2lnbmVkIGlubGluaW5nQmFsYW5jZSA9IE9wdGlvbnM6Om1heGlt
dW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiAgICAg
aWYgKHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KQogICAgICAgICBpbmxp
bmluZ0JhbGFuY2UgPSBzdGQ6Om1pbihpbmxpbmluZ0JhbGFuY2UsIE9wdGlvbnM6Om1heGltdW1G
dW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKSk7CkBA
IC0xNDE3LDE3ICsxNDc4LDEwMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmlu
ZyhOb2RlCiAgICAgLy8gc2ltcGxpZmljYXRpb24gb24gdGhlIGZseSBhbmQgdGhpcyBoZWxwcyBy
ZWR1Y2UgY29tcGlsZSB0aW1lcywgYnV0IHdlIGNhbiBvbmx5IGxldmVyYWdlCiAgICAgLy8gdGhp
cyBpbiBjYXNlcyB3aGVyZSB3ZSBkb24ndCBuZWVkIGNvbnRyb2wgZmxvdyBkaWFtb25kcyB0byBj
aGVjayB0aGUgY2FsbGVlLgogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1Bh
dGgoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0gMSkgewotICAgICAgICBlbWl0RnVuY3Rp
b25DaGVja3MoCi0gICAgICAgICAgICBjYWxsTGlua1N0YXR1c1swXSwgY2FsbFRhcmdldE5vZGUs
IHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQ7CisgICAgICAgIAorICAgICAgICAvLyBPbmx5IHVzZWQgZm9yIHZhcmFyZ3MgY2Fs
bHMuCisgICAgICAgIHVuc2lnbmVkIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAgICAgICB1bnNp
Z25lZCBtYXhOdW1Bcmd1bWVudHMgPSAwOworCisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6
OmlzVmFyYXJncyhraW5kKSkgeworICAgICAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb25FeGVjdXRhYmxlID0gY2FsbExpbmtTdGF0dXNbMF0uZnVuY3Rpb25FeGVjdXRhYmxl
KCkpCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5TWluaW11bSA9IGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+cGFyYW1ldGVyQ291bnQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
YW5kYXRvcnlNaW5pbXVtID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gaW5jbHVk
ZXMgInRoaXMiCisgICAgICAgICAgICBtYXhOdW1Bcmd1bWVudHMgPSBzdGQ6Om1heCgKKyAgICAg
ICAgICAgICAgICBjYWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAg
ICAgICBtYW5kYXRvcnlNaW5pbXVtICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFdlIHNvcnQgb2YgcHJldGVuZCB0aGF0IHRoaXMgKmlzKiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50
cyB0aGF0IHdlcmUgcGFzc2VkLgorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPSBtYXhOdW1Bcmd1bWVudHM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0ID0gcmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICBy
ZWdpc3Rlck9mZnNldCAtPSBtYXhOdW1Bcmd1bWVudHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAg
ICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
KyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigK
KyAgICAgICAgICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAg
ICAgIC1yZWdpc3Rlck9mZnNldCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgICAgICAKICAgICAg
ICAgYm9vbCByZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVDYWxsKAogICAgICAgICAgICAgY2FsbFRh
cmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNl
dCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBr
aW5kLCBDYWxsZXJEb2VzTm9ybWFsTGlua2luZywgcHJlZGljdGlvbiwKLSAgICAgICAgICAgIGlu
bGluaW5nQmFsYW5jZSk7Ci0gICAgICAgIGlmICghcmVzdWx0ICYmICFjYWxsTGlua1N0YXR1cy5p
c1Byb3ZlZCgpKQotICAgICAgICAgICAgdW5kb0Z1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVz
WzBdKTsKKyAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSwgWyZdIChDb2RlQmxvY2sqIGNvZGVC
bG9jaykgeworICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1
c1swXSwgY2FsbFRhcmdldE5vZGUsIHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCA/
IHRoaXNBcmd1bWVudCA6IFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgICAgICAgICAgICAgIC8v
IElmIHdlIGhhdmUgYSB2YXJhcmdzIGNhbGwsIHdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgYXJndW1l
bnRzIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1Zh
cmFyZ3Moa2luZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSBy
ZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAgICAg
ICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdz
RGF0YS5hZGQoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRTdGFydCArIDEpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5jb3Vu
dCA9IFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5vZmZzZXQgPSBhcmd1bWVudHNPZmZzZXQ7
CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4TnVtQXJndW1lbnRzOworICAg
ICAgICAgICAgICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5TWluaW11
bTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJh
cmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNBcmd1bWVudCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIC8vIEluIERGRyBJUiBiZWZvcmUgU1NBLCB3ZSBjYW5ub3Qg
aW5zZXJ0IGNvbnRyb2wgZmxvdyBiZXR3ZWVuIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAg
ICAvLyBMb2FkVmFyYXJncyBhbmQgdGhlIGxhc3QgU2V0QXJndW1lbnQuIFRoaXMgaXNuJ3QgYSBw
cm9ibGVtIG9uY2Ugd2UgZ2V0IHRvIERGRworICAgICAgICAgICAgICAgICAgICAvLyBTU0EuIEZv
cnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29ucyBmb3Igbm90IGluc2VydGluZyBj
b250cm9sIGZsb3cKKyAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIFNTQS4KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFi
bGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgZmFs
c2UpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQg
d2lsbCBmb3JjZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24n
dAorICAgICAgICAgICAgICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNl
IG9mIGEgU2V0QXJndW1lbnQgYW5kIEZsdXNoZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBpcworICAg
ICAgICAgICAgICAgICAgICAvLyBtb3N0bHkganVzdCBhIGZvcm1hbGl0eS4KKyAgICAgICAgICAg
ICAgICAgICAgY291bnRWYXJpYWJsZS0+cHJlZGljdChTcGVjSW50MzIpOworICAgICAgICAgICAg
ICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOworICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+
bG9jYWwoKSwgc2V0QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlz
QXJndW1lbnQpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IG1heE51bUFyZ3VtZW50czsgKythcmd1
bWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCArIGFyZ3VtZW50KSwgZmFsc2UpOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVl
KTsgLy8gV2UgY3VycmVudGx5IGhhdmUgbm93aGVyZSB0byBwdXQgdGhlIHR5cGUgY2hlY2sgb24g
dGhlIExvYWRWYXJhcmdzLiBMb2FkVmFyYXJncyBpcyBlZmZlY3RmdWwsIHNvIGFmdGVyIGl0IGZp
bmlzaGVzLCB3ZSBjYW5ub3QgZXhpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRm9yIGEgd2hpbGUgaXQgaGFkIGJlZW4gbXkgaW50ZW50aW9u
IHRvIGRvIHRoaW5ncyBsaWtlIHRoaXMgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gcHJlZGljdGlvbiBpbmplY3Rpb24gcGhhc2UuIEJ1dCBpbiB0aGlzIGNhc2UgaXQncyBy
ZWFsbHkgYmVzdCB0byBkbyBpdCBoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVj
YXVzZSBpdCdzIGhlcmUgdGhhdCB3ZSBoYXZlIGFjY2VzcyB0byB0aGUgdmFyaWFibGUgYWNjZXNz
IGRhdGFzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlubGluaW5nIHdlJ3Jl
IGFib3V0IHRvIGRvLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFNvbWV0aGluZyBlbHNlIHRoYXQncyBpbnRlcmVzdGluZyBoZXJlIGlzIHRo
YXQgd2UnZCByZWFsbHkgbG92ZSB0byBnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBy
ZWRpY3Rpb25zIGZyb20gdGhlIGFyZ3VtZW50cyBsb2FkZWQgYXQgdGhlIGNhbGxzaXRlLCByYXRo
ZXIgdGhhbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyByZWNlaXZl
ZCBpbnNpZGUgdGhlIGNhbGxlZS4gQnV0IHRoYXQgcHJvYmFibHkgd29uJ3QgbWF0dGVyIGZvciBt
b3N0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxscy4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjb2RlQmxvY2sgJiYgYXJndW1lbnQgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBjb2RlQmxv
Y2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGUtPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVu
dCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgIGRhdGFMb2coIkRvbmUgaW5saW5pbmcgKHNpbXBsZSkuXG4iKTsKICAg
ICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsK
KyAgICAgICAgICAgIGRhdGFMb2coIlJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE0MzcsMTEgKzE1ODEsOSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gZG8gbW9yZSBk
ZXRhaWxlZCBwb2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7IGFuZCBzZWNvbmQsIGl0
IHJlZHVjZXMgY29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcuIEFuZCBieSBwb2x5dmFy
aWFudCBwcm9maWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxpbmcgb2YgKnRoaXMqIGNh
bGwuIE5vdGUgdGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhhdCBhc3BlY3Qgb2YgdGhp
cyBieSBkb2luZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5nIHRoZSBwcm9maWxpbmcK
LSAgICAvLyBhbHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhpcywgYnV0IGl0IGNvdWxk
IGJlIGludGVyZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5nIGEKLSAgICAvLyBzZXBh
cmF0ZSBub2RlIGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8vIEZJWE1FOiBJbnRyb2R1
Y2UgdGhlIG5vdGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9maWxpbmcgbm9kZS4KLSAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDMzCi0gICAg
aWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1v
cnBoaWNDYWxsSW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAgaWYgKCFpc0ZUTChtX2dy
YXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5p
bmcoKQorICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgewogICAg
ICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmlu
ZyAoaGFyZCkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29k
ZU9yaWdpbigpLCAiXG4iKTsKQEAgLTE0ODIsNiArMTYyNCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJl
bnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAogICAgIC8vIFRoaXMgbWFr
ZXMgbWUgd2lzaCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGltZS4gV2UgbmVlZCB0byBw
aWNrIGEgdmFyaWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3JlIHRoZSBjYWxsZWUgc28g
dGhhdCBpdCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBibG9ja3Mgd2UncmUgYWJv
dXQgdG8gY3JlYXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9pbmcgYW4gaW1tZWRpYXRl
LXNldCBoZXJlIGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3JtZWQgYW55IHNpZGUgZWZm
ZWN0cwpAQCAtMTUyNiw3ICsxNjcwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoTm9kZQogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0ZW1wdFRvSW5saW5l
Q2FsbCgKICAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxM
aW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJMaW5rc01hbnVhbGx5LCBwcmVk
aWN0aW9uLAotICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlKTsKKyAgICAgICAgICAgIGlubGlu
aW5nQmFsYW5jZSwgWyZdIChDb2RlQmxvY2sqKSB7IH0pOwogICAgICAgICAKICAgICAgICAgaWYg
KCFpbmxpbmluZ1Jlc3VsdCkgewogICAgICAgICAgICAgLy8gVGhhdCBmYWlsZWQgc28gd2UgbGV0
IHRoZSBibG9jayBkaWUuIE5vdGhpbmcgaW50ZXJlc3Rpbmcgc2hvdWxkIGhhdmUgYmVlbiBhZGRl
ZCB0bwpAQCAtMTYxMCwxNCArMTc1NCwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hlY2tzRnVuY3Rvcj4KK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChpbnQg
cmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3Mp
CiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5t
aW4oKQorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFu
dE5hTikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAKICAgICBpZiAoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRoLm1pbih4KQorICAgICAgICBp
bnNlcnRDaGVja3MoKTsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVyVXNlKSk7CiAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CkBAIC0xNjI1LDYg
KzE3NzIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlCiAgICAg
fQogICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAzKSB7IC8vIE1h
dGgubWluKHgsIHkpCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKG9wLCBnZXQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtMTYzMywxMSArMTc4MSwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVN
aW5NYXgoaW50IHJlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMs
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4K
K2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwg
SW50cmluc2ljIGludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IENoZWNrc0Z1
bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBzd2l0Y2ggKGludHJpbnNpYykgewogICAgIGNh
c2UgQWJzSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA9PSAxKSB7IC8vIE1hdGguYWJzKCkKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChK
U0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CkBAIC0xNjQ1LDYgKzE3OTUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBv
cnRzRmxvYXRpbmdQb2ludEFicygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
ICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChBcml0
aEFicywgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkp
OwogICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKQogICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFn
cyhOb2RlTWF5T3ZlcmZsb3dJbkRGRyk7CkBAIC0xNjUzLDI5ICsxODA0LDMzIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICB9CiAKICAgICBjYXNlIE1pbklu
dHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0
aE1pbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAg
ICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0aE1pbiwgcmVnaXN0ZXJP
ZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnNlcnRDaGVja3MpOwogICAgICAg
ICAKICAgICBjYXNlIE1heEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChy
ZXN1bHRPcGVyYW5kLCBBcml0aE1heCwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBB
cml0aE1heCwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnNl
cnRDaGVja3MpOwogICAgICAgICAKICAgICBjYXNlIFNxcnRJbnRyaW5zaWM6CiAgICAgY2FzZSBD
b3NJbnRyaW5zaWM6CiAgICAgY2FzZSBTaW5JbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsKKyAgICAgICAgICAgIGluc2VydENoZWNrcygp
OwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9H
cmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKGludHJpbnNp
YykgewogICAgICAgICBjYXNlIFNxcnRJbnRyaW5zaWM6CisgICAgICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFk
ZFRvR3JhcGgoQXJpdGhTcXJ0LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVn
aXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBDb3NJbnRyaW5zaWM6CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsK
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3Jh
cGgoQXJpdGhDb3MsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIFNpbkludHJpbnNpYzoKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChBcml0
aFNpbiwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCkBAIC0xNjg4LDkgKzE4
NDMsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNh
c2UgUG93SW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA8IDMpIHsKICAgICAgICAgICAgIC8vIE1hdGgucG93KCkgYW5kIE1hdGgucG93KHgpIHJldHVy
biBOYU4uCisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZv
KG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQor
ICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHhPcGVyYW5k
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgeU9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgy
LCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3Bl
cmFuZCksIGFkZFRvR3JhcGgoQXJpdGhQb3csIGdldCh4T3BlcmFuZCksIGdldCh5T3BlcmFuZCkp
KTsKQEAgLTE3MTAsNiArMTg2Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyhpbnQKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgTm9kZSogYXJyYXlQdXNoID0gYWRk
VG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJl
ZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNl
dCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7
CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhcnJheVB1
c2gpOwogICAgICAgICAgICAgCkBAIC0xNzMzLDYgKzE4OTEsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOiB7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIE5vZGUq
IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQo
KSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAs
IHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRPcGVyYW5kKSwgYXJyYXlQb3ApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzQ3
LDYgKzE5MDYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdp
c3Rlck9mZnNldCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9wZXJhbmQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIE5vZGUq
IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXlNb2Rl
KEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0KGluZGV4T3Bl
cmFuZCkpOwpAQCAtMTc1OSw2ICsxOTE5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0g
MikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNlcnRDaGVja3MoKTsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQp
OwogICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcElu
Zm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwg
Z2V0KGluZGV4T3BlcmFuZCkpOwpAQCAtMTc3MCw2ICsxOTMxLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNl
cnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgTm9kZSog
Y2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0Zyb21DaGFyQ29kZSwgZ2V0KGluZGV4T3BlcmFu
ZCkpOwogCkBAIC0xNzgyLDYgKzE5NDQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAy
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hl
Y2tzKCk7CiAgICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cEV4ZWMs
IE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dE9wZXJhbmQpLCByZWdFeHBFeGVjKTsKICAgICAgICAgCkBAIC0xNzkyLDYgKzE5NTUsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIE5vZGUqIHJlZ0V4cEV4
ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZWdFeHBFeGVjKTsKICAgICAg
ICAgCkBAIC0xODAxLDYgKzE5NjUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRy
aW5zaWMoaW50CiAgICAgY2FzZSBJTXVsSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAhPSAzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxlZnRPcGVyYW5k
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmlnaHRPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMiwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBOb2RlKiBsZWZ0ID0gZ2V0KGxlZnRPcGVy
YW5kKTsKQEAgLTE4MTIsMjkgKzE5NzcsMzQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljKGludAogICAgIGNhc2UgRlJvdW5kSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhG
Um91bmQsIGdldChvcGVyYW5kKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgREZHVHJ1ZUludHJpbnNpYzogeworICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwganNDb25zdGFu
dChqc0Jvb2xlYW4odHJ1ZSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIE9TUkV4aXRJbnRyaW5zaWM6IHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
CiAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9j
b25zdGFudFVuZGVmaW5lZCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIElzRmluYWxUaWVySW50cmluc2ljOiB7CisgICAgICAgIGluc2VydENoZWNr
cygpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAg
ICAgICAganNDb25zdGFudChqc0Jvb2xlYW4oT3B0aW9uczo6dXNlRlRMSklUKCkgPyBpc0ZUTCht
X2dyYXBoLm1fcGxhbi5tb2RlKSA6IHRydWUpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRJbnQzMkhlYXBQcmVkaWN0aW9uSW50cmluc2ljOiB7
CisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAg
ICAgICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQpAQCAtMTg0Nyw2ICsyMDE3
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNhc2Ug
RmlhdEludDUySW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIGlmIChlbmFibGVJbnQ1Migp
KQogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9H
cmFwaChGaWF0SW50NTIsIGdldChvcGVyYW5kKSkpOwpAQCAtMTg2MCw5ICsyMDMxLDEwIEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICB9CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVU
eXBlZEFycmF5Q29uc3RydWN0b3IoCiAgICAgaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVu
Y3Rpb24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCi0gICAgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSB0eXBlKQorICAgIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUgdHlwZSwgY29uc3QgQ2hlY2tzRnVuY3Rv
ciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIGlmICghaXNUeXBlZFZpZXcodHlwZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE5MDYsMTUgKzIwNzgsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlVHlwZWRBcnJheUNvbgogICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAhPSAyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBpbnNlcnRD
aGVja3MoKTsKICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAg
ICBhZGRUb0dyYXBoKE5ld1R5cGVkQXJyYXksIE9wSW5mbyh0eXBlKSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbigKICAgICBpbnQgcmVzdWx0T3BlcmFu
ZCwgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKLSAgICBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKKyAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIC8v
IElmIHdlIGV2ZXIgZmluZCB0aGF0IHdlIGhhdmUgYSBsb3Qgb2YgaW50ZXJuYWwgZnVuY3Rpb25z
IHRoYXQgd2Ugc3BlY2lhbGl6ZSBmb3IsCiAgICAgLy8gdGhlbiB3ZSBzaG91bGQgcHJvYmFibHkg
aGF2ZSBzb21lIHNvcnQgb2YgaGFzaHRhYmxlIGRpc3BhdGNoLCBvciBtYXliZSBldmVuCkBAIC0x
OTI3LDYgKzIxMDEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVy
CiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCkgIT0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3QXJyYXlX
aXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRlZCksIGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CkBAIC0xOTQxLDYgKzIxMTYsOCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgfQogICAgIAogICAg
IGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZvKCkgPT0gU3RyaW5nQ29uc3RydWN0b3I6OmluZm8oKSkg
eworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgCiAgICAgICAgIE5vZGUqIHJlc3Vs
dDsKICAgICAgICAgCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSAx
KQpAQCAtMTk1NiwxMSArMjEzMyw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0
YW50SW50ZXIKICAgICB9CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0
eXBlSW5kZXggPCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7ICsrdHlwZUluZGV4KSB7Ci0g
ICAgICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAorICAgICAg
ICByZXR1cm4gaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAogICAgICAgICAgICAgcmVzdWx0
T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywKLSAgICAgICAgICAgIGluZGV4VG9UeXBlZEFycmF5VHlwZSh0eXBlSW5kZXgpKTsKLSAg
ICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
aW5kZXhUb1R5cGVkQXJyYXlUeXBlKHR5cGVJbmRleCksIGluc2VydENoZWNrcyk7CiAgICAgfQog
ICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTMxMjIsNDMgKzMyOTcsNzAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaW50IHRoaXNSZWcg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQg
Zmlyc3RGcmVlUmVnID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUoKSk7
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFyZ3VtZW50cywgYXJndW1lbnRzID09IG1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpKTsK
LSAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7Ci0KLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQg
PSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LiBXZSBzdGFydCB3
aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAotICAgICAgICAgICAgLy8gdGhlbiBhZGp1
c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4KLSAgICAgICAgICAg
IGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7Ci0gICAgICAgICAgICByZWdp
c3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBwYXNzaW5nIHNvbWUgYXJndW1l
bnRzLgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhlYWRlci4K
KyAgICAgICAgICAgIGlmIChhcmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKKyAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dB
cmd1bWVudHMoKSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKQorICAg
ICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFyYXJncygpCisgICAg
ICAgICAgICAgICAgICAgICYmICFmaXJzdFZhckFyZ09mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRz
LnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21w
dXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNlZCByZWdp
c3RlciwgYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhp
bmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCisgICAgICAgICAgICAgICAgICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0IC09IGFyZ0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1
bWVudHMuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFt
ZSBoZWFkZXIuCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBh
bGlnbm1lbnQgcmlnaHQuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZz
ZXQpOworCisgICAgICAgICAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3Vs
ZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2Ug
aXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9u
ZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQor
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVO
YWtlZFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09E
RV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxl
ZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gRW1pdCBDYWxsRm9yd2FyZFZhcmFyZ3MKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB3ZSBjYW5ub3QgaW5saW5lIGZvcndhcmRlZCB2
YXJhcmdzIGNhbGxzIGluc2lkZSBhIHZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBjYWxsIGZy
YW1lLiBXZSB3aWxsIHByb2JhYmx5IGZpeCB0aGF0IG9uY2Ugd2UgZmluYWxseSBnZXQgcmlkIG9m
IHRoZQorICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBvYmplY3Qgc3BlY2lhbC1jYXNpbmcu
CisgICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2NhbGxW
YXJhcmdzRGF0YS5hZGQoKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNl
dCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgICAgICBDYWxsRm9yd2Fy
ZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAg
ICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSksIGdldChWaXJ0dWFsUmVn
aXN0ZXIodGhpc1JlZykpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
UmVnKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOworICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgotICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAotICAgICAgICAgICAg
ICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCi0gICAgICAgICAgICAgICAgLXJlZ2lzdGVy
T2Zmc2V0KTsKLQotICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0IGhhdmUgc2V0IHVwIHRoZSBhcmd1bWVu
dHMuIEJ1dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAotICAgICAgICAgICAgLy8gbG9vayBsaWtl
IHRoZSBieXRlY29kZSBoYWQgZG9uZSBpdC4KLSAgICAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIg
PSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KFZpcnR1YWxSZWdp
c3Rlcih0aGlzUmVnKSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQotICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVDYWxsKAotICAgICAgICAgICAgICAgIHJl
c3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwK
LSAgICAgICAgICAgICAgICBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCk7CisgICAg
ICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGxWYXJhcmdz
LCBDb2RlRm9yQ2FsbCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3Mp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnczogeworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9u
LCBDb25zdHJ1Y3RWYXJhcmdzLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6CiAgICAgICAgICAgICAvLyBTdGF0aWNhbGx5IHNwZWN1
bGF0ZSBmb3Igbm93LiBJdCBtYWtlcyBzZW5zZSB0byBsZXQgc3BlY3VsYXRlLW9ubHkgam5lcV9w
dHIKICAgICAgICAgICAgIC8vIHN1cHBvcnQgc2ltbWVyIGZvciBhIHdoaWxlIGJlZm9yZSBtYWtp
bmcgaXQgbW9yZSBnZW5lcmFsLCBzaW5jZSBpdCdzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtOTYsNiArOTYsOCBAQCBpbmxpbmUgdm9pZCBkZWJ1Z0ZhaWwoQ29k
ZUJsb2NrKiBjb2RlQmxvCiAKIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2Rl
SUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogcGMpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7IC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBzb21lIGJ5
dGVjb2RlIHBhcnNpbmcuIE9yZGluYXJpbHkgYnl0ZWNvZGUgcGFyc2luZyByZXF1aXJlcyB0aGUg
b3duaW5nIENvZGVCbG9jay4gSXQncyBzb3J0IG9mIHN0cmFuZ2UgdGhhdCB3ZSBkb24ndCB1c2Ug
aXQgaGVyZSByaWdodCBub3cuCisgICAgCiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIGNh
c2Ugb3BfZW50ZXI6CiAgICAgY2FzZSBvcF90b3VjaF9lbnRyeToKQEAgLTE4Miw2ICsxODQsOCBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF90
aHJvd19zdGF0aWNfZXJyb3I6CiAgICAgY2FzZSBvcF9jYWxsOgogICAgIGNhc2Ugb3BfY29uc3Ry
dWN0OgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Zh
cmFyZ3M6CiAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOgogICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czoKICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czoKQEAgLTIyMywxNCArMjI3
LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgICAgICBy
ZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKICAgICB9CiAKLSAgICBjYXNlIG9wX2NhbGxfdmFy
YXJnczoKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYmIHBjWzRdLnUu
b3BlcmFuZCA9PSBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKLSAgICAg
ICAgICAgICYmICFwY1s2XS51Lm9wZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5l
OwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSB0aGlzLgotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI2Ci0gICAgICAgIHJl
dHVybiBDYW5ub3RDb21waWxlOwotCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiAKICAgICBjYXNl
IG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgogICAgIGNhc2Ugb3BfbmV3X2Z1bmM6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlz
aW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOSArODYsNyBAQCBpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGZ1bmN0aW9uQ2FwYWJpbGl0CiAgICAgICAgIHJldHVybiBsZWFzdFVw
cGVyQm91bmQoQ2FuQ29tcGlsZUFuZElubGluZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwog
ICAgIGlmIChtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQogICAgICAgICByZXR1cm4gbGVh
c3RVcHBlckJvdW5kKENhbkNvbXBpbGUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKLSAgICBp
ZiAoIW1pZ2h0Q29tcGlsZSAmJiBtaWdodElubGluZSkKLSAgICAgICAgcmV0dXJuIGxlYXN0VXBw
ZXJCb3VuZChDYW5JbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKLSAgICBpZiAoIW1p
Z2h0Q29tcGlsZSAmJiAhbWlnaHRJbmxpbmUpCisgICAgaWYgKCFtaWdodENvbXBpbGUpCiAgICAg
ICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw2ICsz
NjYsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2Fz
ZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3Ry
dWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6
CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAg
Y2FzZSBJbjoKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKQEAgLTQwMSw2ICs0
MDQsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBu
b2RlLT5sb2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgLy8gVGhpcyBhY3R1YWxs
eSB3cml0ZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFzIHdlbGwuIEJ1dCB3aGVuIGl0IHJlYWRzIHRo
ZSBhcnJheSwgaXQgZG9lcworICAgICAgICAvLyBzbyBpbiBhIHdheSB0aGF0IG1heSB0cmlnZ2Vy
IGdldHRlcnMgb3IgdmFyaW91cyB0cmFwcy4KKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAg
IHdyaXRlKFdvcmxkKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIEdldExv
Y2FsVW5saW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
dW5saW5rZWRMb2NhbCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2Ms
IEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpLCBub2RlKTsK
QEAgLTg4MSw3ICs4OTEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHRvQ1N0cmluZygiVW5yZWNv
Z25pemVkIG5vZGUgdHlwZTogIiwgR3JhcGg6Om9wTmFtZShub2RlLT5vcCgpKSkuZGF0YSgpKTsK
IH0KIAogY2xhc3MgTm9PcENsb2JiZXJpemUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjkyLDcgKzI5Miw2IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogZW51bSBDYXBhYmlsaXR5TGV2ZWwgewogICAg
IENhbm5vdENvbXBpbGUsCi0gICAgQ2FuSW5saW5lLAogICAgIENhbkNvbXBpbGUsCiAgICAgQ2Fu
Q29tcGlsZUFuZElubGluZSwKICAgICBDYXBhYmlsaXR5TGV2ZWxOb3RTZXQKQEAgLTMxMiw3ICsz
MTEsNiBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKENhcGFiaWxpdHlMZXZlbCBsCiBpbmxpbmUg
Ym9vbCBjYW5JbmxpbmUoQ2FwYWJpbGl0eUxldmVsIGxldmVsKQogewogICAgIHN3aXRjaCAobGV2
ZWwpIHsKLSAgICBjYXNlIENhbklubGluZToKICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CkBAIC0zMjUsMTQgKzMyMyw2IEBA
IGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgbGVhc3RVcHBlckJvdW5kKEMKICAgICBzd2l0Y2ggKGEp
IHsKICAgICBjYXNlIENhbm5vdENvbXBpbGU6CiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxl
OwotICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBzd2l0Y2ggKGIpIHsKLSAgICAgICAgY2Fz
ZSBDYW5JbmxpbmU6Ci0gICAgICAgIGNhc2UgQ2FuQ29tcGlsZUFuZElubGluZToKLSAgICAgICAg
ICAgIHJldHVybiBDYW5JbmxpbmU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKLSAgICAgICAgfQogICAgIGNhc2UgQ2FuQ29tcGlsZToKICAgICAg
ICAgc3dpdGNoIChiKSB7CiAgICAgICAgIGNhc2UgQ2FuQ29tcGlsZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDYgKzExNywxMCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0
OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2Fz
ZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgQnJlYWtw
b2ludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEzLDYgKzMxMywxOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2Rl
LT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgaWYgKG5vZGUtPmhhc09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5vYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhKCkpOworICAgIGlmIChub2RlLT5oYXNDYWxsVmFyYXJnc0RhdGEoKSkKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiZmlyc3RWYXJBcmdPZmZzZXQgPSAiLCBub2RlLT5jYWxs
VmFyYXJnc0RhdGEoKS0+Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGlmIChub2RlLT5oYXNMb2Fk
VmFyYXJnc0RhdGEoKSkgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RhcnQgPSAiLCBk
YXRhLT5zdGFydCwgIiwgY291bnQgPSAiLCBkYXRhLT5jb3VudCk7CisgICAgICAgIGlmIChkYXRh
LT5tYWNoaW5lU3RhcnQuaXNWYWxpZCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIG1hY2hp
bmVTdGFydCA9ICIsIGRhdGEtPm1hY2hpbmVTdGFydCk7CisgICAgICAgIGlmIChkYXRhLT5tYWNo
aW5lQ291bnQuaXNWYWxpZCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIG1hY2hpbmVDb3Vu
dCA9ICIsIGRhdGEtPm1hY2hpbmVDb3VudCk7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQg
PSAiLCBkYXRhLT5vZmZzZXQsICIsIG1hbmRhdG9yeU1pbmltdW0gPSAiLCBkYXRhLT5tYW5kYXRv
cnlNaW5pbXVtKTsKKyAgICAgICAgb3V0LnByaW50KCIsIGxpbWl0ID0gIiwgZGF0YS0+bGltaXQp
OworICAgIH0KICAgICBpZiAobm9kZS0+aXNDb25zdGFudCgpKQogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5vZGUtPmNvbnN0YW50KCksIGNvbnRleHQpKTsK
ICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCkBAIC04NjksMTAgKzg4MSwxMiBAQCBib29sIEdyYXBo
Ojppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpCiAgICAgICAgICAgICBpZiAocmVnLmlzQXJn
dW1lbnQoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZy5vZmZzZXQoKSA8
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAo
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKKyAgICAgICAgICAgICAg
ICAgICAgJiYgcmVnLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUpCisgICAgICAgICAgICAgICAgaWYgKGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQorICAgICAgICAgICAgICAgICAg
ICAmJiByZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6QXJndW1lbnRDb3VudCkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTIzNSw2ICsxMjQ5LDUxIEBAIHZvaWQgR3JhcGg6OmhhbmRsZUFz
c2VydGlvbkZhaWx1cmUoCiAgICAgY3Jhc2goKnRoaXMsIHRvQ1N0cmluZygiV2hpbGUgaGFuZGxp
bmcgYmxvY2sgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG5cbiIpLCBmaWxlLCBsaW5lLCBmdW5j
dGlvbiwgYXNzZXJ0aW9uKTsKIH0KIAorVmFsdWVQcm9maWxlKiBHcmFwaDo6dmFsdWVQcm9maWxl
Rm9yKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisgICAgaWYgKG5vZGUt
Pmhhc0xvY2FsKCp0aGlzKSkgeworICAgICAgICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGludCBhcmd1bWVudCA9
IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOworICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUg
PSBtX2FyZ3VtZW50c1thcmd1bWVudF07CisgICAgICAgIGlmICghYXJndW1lbnROb2RlKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSAhPSBhcmd1bWVudE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVBy
b2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAobm9k
ZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZh
bHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK01ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Io
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlKCk7CisgICAgCisgICAgaWYgKFZhbHVlUHJvZmlsZSogdmFsdWVQ
cm9maWxlID0gdmFsdWVQcm9maWxlRm9yKG5vZGUpKQorICAgICAgICByZXR1cm4gTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpOworICAgIAorICAgIGlmIChub2RlLT5v
cCgpID09IEdldExvY2FsKSB7CisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5k
KAorICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5KAorICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRl
Y29kZUluZGV4LCBub2RlLT5sb2NhbCgpKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3Miw1MCAr
NDcyLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrLT51bmNoZWNr
ZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKTsKICAgICB9CiAgICAgCi0gICAgVmFsdWVQcm9maWxlKiB2
YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAKLSAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKLSAgICAg
ICAgICAgIGlmICghbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJn
dW1lbnQoKTsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fYXJndW1lbnRzW2Fy
Z3VtZW50XTsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnROb2RlKQotICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpICE9IGFyZ3VtZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFs
dWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAobm9kZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBw
cm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgCi0gICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlID0gdmFsdWVQcm9m
aWxlRm9yKG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUodmFsdWVQcm9maWxlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldExvY2FsKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNl
bGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAKLSAgICAg
ICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywKLSAgICAgICAgICAgICAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgsIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKTsKLSAg
ICB9CisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSk7CisgICAg
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKE5vZGUqIG5vZGUpOwogICAgIAogICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0CiAg
ICAgewpAQCAtODUzLDYgKzgxMSw4IEBAIHB1YmxpYzoKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNl
dERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11bHRpUHV0QnlPZmZzZXRE
YXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOwogICAgIEJhZzxPYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAgQmFnPENhbGxWYXJhcmdz
RGF0YT4gbV9jYWxsVmFyYXJnc0RhdGE7CisgICAgQmFnPExvYWRWYXJhcmdzRGF0YT4gbV9sb2Fk
VmFyYXJnc0RhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVW
YXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgYm9vbCBtX2hhc0Fy
Z3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjIsNiAr
MTIyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAgICAg
ICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lIGlzIHBhc3NlZCB0d28g
YXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAg
ICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX2dyYXBoLnN0YWNrUG9pbnRlck9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2KQogICAgICAgICAvLyBGSVhNRTogc2hv
dWxkIHVzZSB0aGUgY2FsbCBhYnN0cmFjdGlvbiwgYnV0IHRoaXMgaXMgY3VycmVudGx5IGluIHRo
ZSBTcGVjdWxhdGl2ZUpJVCBsYXllciEKQEAgLTI0Nyw3ICsyNDgsNyBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIEpTQ2FsbFJlY29yZCYgcmVjb3Jk
ID0gbV9qc0NhbGxzW2ldOwogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLm1f
aW5mbzsKICAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJh
dG9yRm9yKAotICAgICAgICAgICAgaW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0
cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgICAgIGluZm8u
c3BlY2lhbGl6YXRpb25LaW5kKCksCiAgICAgICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5v
dFJlcXVpcmVkKTsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29yZC5tX3Nsb3dDYWxsLCBG
dW5jdGlvblB0cihtX3ZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQubV9zbG93Q2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0
LDYgKzg0LDcgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgorICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODMsNiArMTgzLDIwIEBAIHN0cnVjdCBTd2l0Y2hEYXRhIHsKICAgICBib29s
IGRpZFVzZUp1bXBUYWJsZTsKIH07CiAKK3N0cnVjdCBDYWxsVmFyYXJnc0RhdGEgeworICAgIGlu
dCBmaXJzdFZhckFyZ09mZnNldDsKK307CisKK3N0cnVjdCBMb2FkVmFyYXJnc0RhdGEgeworICAg
IFZpcnR1YWxSZWdpc3RlciBzdGFydDsgLy8gTG9jYWwgZm9yIHRoZSBmaXJzdCBlbGVtZW50Lgor
ICAgIFZpcnR1YWxSZWdpc3RlciBjb3VudDsgLy8gTG9jYWwgZm9yIHRoZSBjb3VudC4KKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVN0YXJ0OworICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5l
Q291bnQ7CisgICAgdW5zaWduZWQgb2Zmc2V0OyAvLyBXaGljaCBhcnJheSBlbGVtZW50IHRvIHN0
YXJ0IHdpdGguIFVzdWFsbHkgdGhpcyBpcyAwLgorICAgIHVuc2lnbmVkIG1hbmRhdG9yeU1pbmlt
dW07IC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb24gdGhlIHN0YWNrIHRoYXQgbXVzdCBiZSBp
bml0aWFsaXplZDsgaWYgdGhlIGFycmF5IGlzIHRvbyBzaG9ydCB0aGVuIHRoZSBtaXNzaW5nIGVs
ZW1lbnRzIG11c3QgZ2V0IHVuZGVmaW5lZC4gRG9lcyBub3QgaW5jbHVkZSAidGhpcyIuCisgICAg
dW5zaWduZWQgbGltaXQ7IC8vIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGxvYWQuIElu
Y2x1ZGVzICJ0aGlzIi4KK307CisKIC8vIFRoaXMgdHlwZSB1c2VkIGluIHBhc3NpbmcgYW4gaW1t
ZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVzIGFu
IGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0
YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlm
aWVyKSBmcm9tIGEgTm9kZSouCkBAIC04OTUsNiArOTA5LDM1IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihtX29wSW5m
byk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzQ2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAg
ICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQ2FsbFZhcmFyZ3NE
YXRhKiBjYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0NhbGxWYXJh
cmdzRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxDYWxsVmFyYXJnc0RhdGEq
PihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzOworICAgIH0KKyAgICAK
KyAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICBB
U1NFUlQoaGFzTG9hZFZhcmFyZ3NEYXRhKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PExvYWRWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNS
ZXN1bHQoKQogICAgIHsKICAgICAgICAgcmV0dXJuICEhcmVzdWx0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
Nyw2ICsxNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogdGhp
cyBtdXN0IGJlIHRoZSBkaXJlY3RseSBzdWJzZXF1ZW50IHByb3BlcnR5IHB1dC4gTm90ZSB0aGF0
IFB1dEJ5VmFsICovXAogICAgIC8qIG9wY29kZXMgdXNlIFZhckFyZ3MgYmVhdXNlIHRoZXkgbWF5
IGhhdmUgdXAgdG8gNCBjaGlsZHJlbi4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1
bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhMb2FkVmFyYXJncywgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dEJ5VmFsRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCkBAIC0yMTcsNiArMjE4LDkgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIENhbGxzLiAqL1wKICAgICBtYWNybyhDYWxs
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAg
ICBtYWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncykgXAorICAgIG1hY3JvKENhbGxWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ2FsbEZvcndhcmRWYXJhcmdzLCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ29uc3RydWN0VmFyYXJncywgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5hdGl2ZUNhbGwsIE5v
ZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1h
Y3JvKE5hdGl2ZUNvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVIYXNWYXJBcmdzKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3
IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGUKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBt
X2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9CisgICAgICAgICAg
ICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRJbnQzMiwgZGF0YS0+bWFjaGluZUNvdW50
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSB7CisgICAg
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihk
YXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5
KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hpbmVT
dGFydC5vZmZzZXQoKSArIGkpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUyLDcgKzE1
Miw5IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAg
CiAgICAgICAgIHN3aXRjaCAoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSB7CiAgICAgICAgIGNhc2Ug
SW5saW5lQ2FsbEZyYW1lOjpDYWxsOgotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29u
c3RydWN0OiB7CisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CisgICAg
ICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBJbmxp
bmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6IHsKICAgICAgICAgICAgIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0KICAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNh
bGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwpAQCAtMTk1LDEyICsx
OTcsMTMgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAg
ICBpZiAodHJ1ZVJldHVyblBDKQogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cih0cnVlUmV0dXJuUEMpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkub2Zmc2V0KCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQu
c3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2Nr
KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDb2RlQmxvY2spKSk7CisgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgIGppdC5zdG9yZTMy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsK
KyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmU2NChjYWxsZXJGcmFtZUdQUiwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2Fs
bEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChjb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lz
dGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXls
b2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBK
U1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+
aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7
CiAgICAgICAgIApAQCAtMjA4LDEyICsyMTEsMTAgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJh
bWVzKENDYWxsSGVscGVycwogICAgICAgICBpZiAoYmFzZWxpbmVDb2RlQmxvY2stPnVzZXNBcmd1
bWVudHMoKSkKICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3RlcihiYXNlbGluZUNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0
ZXIoKSkub2Zmc2V0KCkpKSwgR1BSSW5mbzo6cmVnVDMpOwogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2
NCkgLy8gc28gdGhpcyBpcyB0aGUgMzItYml0IHBhcnQKLSAgICAgICAgaml0LnN0b3JlUHRyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q29kZUJsb2NrKSkpOwogICAgICAgICBqaXQuc3RvcmVQdHIo
Y2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
ICsgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5z
dHJ1Y3Rpb24pOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lz
dGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXls
b2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBK
U1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0
YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpT
U3RhY2s6OkNhbGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwpCiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSksIEFzc2VtYmx5SGVscGVy
czo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEwMTgsNiArMTAxOCwyNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90
aWZ5V3JpdGUoCiAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsICJFeGVjdXRlZCBOb3Rp
ZnlXcml0ZSIpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFy
YXJncyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGlu
dDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBh
cmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CisgICAgCisgICAg
cmV0dXJuIHNpemVPZlZhcmFyZ3MoZXhlYywgYXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCk7
Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUq
IGV4ZWMsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFy
Z3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9y
eU1pbmltdW0pCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50cyk7CisgICAgCisgICAgbG9hZFZhcmFyZ3MoZXhl
YywgVmlydHVhbFJlZ2lzdGVyKGZpcnN0RWxlbWVudERlc3QpLCBhcmd1bWVudHMsIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKGludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9y
eU1pbmltdW07ICsraSkKKyAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBq
c1VuZGVmaW5lZCgpOworfQorCiBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25J
bnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQogewogICAgIHJldHVybiBmbW9kKGEsIGIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4
MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNSw2ICsxMjUsOCBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IHNpemVfdCB0YWJsZUluZGV4KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNo
U3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOwogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0
Y2hwb2ludFNldCosIEVuY29kZWRKU1ZhbHVlKTsKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywg
aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVk
SlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbmd0aCwgaW50MzJf
dCBtYW5kYXRvcnlNaW5pbXVtKTsKIAogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bnZlcnRCb3hlZERvdWJsZVRvSW50NTIoRW5jb2RlZEpTVmFsdWUpOwogaW50NjRfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbnZlcnREb3VibGVUb0ludDUyKGRvdWJsZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDEw
ICs4NywxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXN0YXRpYyB2
b2lkIGR1bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgsIGNvbnN0IGNoYXIqIHRleHQpCitz
dGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyYXBoLCBjb25zdCBjaGFyKiB0
ZXh0LCBib29sIGZvcmNlRHVtcCA9IGZhbHNlKQogewogICAgIEdyYXBoRHVtcE1vZGUgbW9kZUZv
ckZpbmFsVmFsaWRhdGUgPSBEdW1wR3JhcGg7Ci0gICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoZ3JhcGgubV9wbGFuLm1vZGUpKSB7CisgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoZ3JhcGgubV9wbGFuLm1vZGUpIHx8IGZvcmNlRHVtcCkgewogICAgICAgICBkYXRhTG9n
KHRleHQsICJcbiIpOwogICAgICAgICBncmFwaC5kdW1wKCk7CiAgICAgICAgIG1vZGVGb3JGaW5h
bFZhbGlkYXRlID0gRG9udER1bXBHcmFwaDsKQEAgLTM2OSw3ICszNjksNyBAQCBQbGFuOjpDb21w
aWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgICAgICByZXR1cm4gRmFpbFBh
dGg7CiAgICAgICAgIH0KIAotICAgICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgg
anVzdCBiZWZvcmUgRlRMIGxvd2VyaW5nOiIpOworICAgICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgo
ZGZnLCAiR3JhcGgganVzdCBiZWZvcmUgRlRMIGxvd2VyaW5nOiIsIHNob3VsZFNob3dEaXNhc3Nl
bWJseShtb2RlKSk7CiAgICAgICAgIAogICAgICAgICBib29sIGhhdmVMTFZNOwogICAgICAgICBT
YWZlcG9pbnQ6OlJlc3VsdCBzYWZlcG9pbnRSZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNp
b24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxD
bG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMzLDI1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsK
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAg
ICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCB3cml0ZVRvcCgpCiAgICAgeworICAgICAg
ICBpZiAobV9ub2RlLT5vcCgpID09IExvYWRWYXJhcmdzKSB7CisgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgd2Ugbm90ZSB0aGUgd3JpdGVzIHRvIHRoZSBsb2NhbHMgdGhhdCB3aWxsIHN0b3JlIHRo
ZSBhcnJheSBlbGVtZW50cyBhbmQKKyAgICAgICAgICAgIC8vIGNvdW50LgorICAgICAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAg
ICAgICAgIG1fd3JpdGUoZGF0YS0+Y291bnQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS0+bGltaXQ7IGktLTspCisgICAgICAgICAgICAgICAgbV93cml0ZShWaXJ0dWFsUmVn
aXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwg
Zm9yIENhbGxGb3J3YXJkVmFyYXJncywgc2luY2UgaXQgcmVhZHMKKyAgICAgICAgLy8gb3VyIGFy
Z3VtZW50cyB0aGUgc2FtZSB3YXkgdGhhdCBhbnkgZWZmZWN0ZnVsIHRoaW5nIG1pZ2h0LgorICAg
ICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGgubV9jb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkg
ewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpOyBpLS0gPiAxOykKICAgICAgICAgICAgICAgICBtX3dyaXRlKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4MDE2MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTg5LDYgKzE4OSwxMCBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDb21w
YXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNh
c2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBOZXdPYmpl
Y3Q6CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNiAr
MzksNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJT
ZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogCkBAIC02MjQsMzggKzYyNSwxNjkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1pc2NTdHJpY3RFcQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbChOb2RlKiBub2RlKQogewotICAgIGJvb2wgaXNDYWxsID0gbm9kZS0+b3AoKSA9
PSBDYWxsOwotICAgIGlmICghaXNDYWxsKQotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBo
KCksIG5vZGUsIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKLSAgICAKLSAgICAvLyBGb3IgY29u
c3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRv
IG1ha2Ugc3BhY2UKLSAgICAvLyBmb3IgaXQuCi0gICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0g
aXNDYWxsID8gMCA6IDE7CisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAg
ICBib29sIGlzQ2FsbDsKKyAgICBib29sIGlzVmFyYXJnczsKKyAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKKyAgICBjYXNlIENhbGw6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpD
YWxsOworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhbGxUeXBlID0g
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAgICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAg
ICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxsVmFyYXJn
czoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxs
TGlua0luZm86OkNhbGxWYXJhcmdzOworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBp
c1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFy
Z3M6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwor
ICAgICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCks
IG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEVk
Z2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7CiAgICAgCi0gICAg
Q2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGlzQ2FsbCA/IENhbGxMaW5rSW5mbzo6
Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFy
Z3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlzIHRyaWNraWVyLgorICAgIGlmIChpc1ZhcmFyZ3Mp
IHsKKyAgICAgICAgLy8gMSkgZ2V0IHRoZSBhcmd1bWVudHMKKyAgICAgICAgLy8gMikgZmx1c2gg
cmVnaXN0ZXJzCisgICAgICAgIC8vIDMpIHNldCB1cCB0aGUgY2FsbCBmcmFtZQorICAgICAgICAv
LyA0KSBnZXQgdGhlIGNhbGxlZSBhbmQgInRoaXMiIGFuZCBoYW5kbGUgdGhlbQorICAgICAgICAv
LyA1KSBmbHVzaCByZWdpc3RlcnMgYWdhaW4KKyAgICAgICAgCisgICAgICAgIENhbGxWYXJhcmdz
RGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworCisgICAgICAgIEdQUlJlZyBh
cmd1bWVudHNHUFI7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIyOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIAorICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAg
IC8vIFdlIGF2b2lkIGNhbGxpbmcgZmx1c2hSZWdpc3RlcnMoKSBpbnNpZGUgdGhlIGNvbnRyb2wg
ZmxvdyBvZiBDYWxsRm9yd2FyZFZhcmFyZ3MuCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhdXRvIGxvYWRBcmd1bWVudHNHUFIgPSBb
Jl0gKEdQUlJlZyByZXNlcnZlZEdQUikgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
Q2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gSklU
Q29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIocmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAg
IG1faml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVu
dHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICAg
ICAgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
aWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIGxv
Y2socmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50
cyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSID0g
YXJndW1lbnRzLmdwcigpOworICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICB1bmxvY2socmVzZXJ2ZWRHUFIpOworICAg
ICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIxID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hH
UFIoYXJndW1lbnRzR1BSLCByZXNlcnZlZEdQUik7CisgICAgICAgICAgICBzY3JhdGNoR1BSMiA9
IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEs
IHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gSklUQ29tcGlsZXI6OnNl
bGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHJl
c2VydmVkR1BSKTsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGxvYWRBcmd1bWVudHNH
UFIoSW52YWxpZEdQUlJlZyk7CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdl
IGhhdmUgdGhlIHdob2xlIHJlZ2lzdGVyIGZpbGUgdG8gb3Vyc2VsdmVzLCBhbmQgYXJndW1lbnRz
R1BSIGhhcyB0aGUKKyAgICAgICAgLy8gYXJndW1lbnRzIHJlZ2lzdGVyLiBTZWxlY3Qgc29tZSBz
Y3JhdGNoIHJlZ2lzdGVycy4KKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdpbGwgdXNlIHNjcmF0
Y2hHUFIyIHRvIHBvaW50IHRvIG91ciBzdGFjayBmcmFtZS4KKworICAgICAgICB1bnNpZ25lZCBu
dW1Vc2VkU3RhY2tTbG90cyA9IG1faml0LmdyYXBoKCkubV9uZXh0TWFjaGluZUxvY2FsOworICAg
ICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGF2ZUFyZ3VtZW50czsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIERvIHRoZSBob3JyaWZp
YyBmb28uYXBwbHkodGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAgICAgICAv
LyBGSVhNRTogZG8gdGhpcyBvcHRpbWl6YXRpb24gYXQgdGhlIElSIGxldmVsIGluc3RlYWQgb2Yg
ZHluYW1pY2FsbHkgYnkgdGVzdGluZyB0aGUKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyByZWdp
c3Rlci4gVGhpcyB3aWxsIGhhcHBlbiBvbmNlIHdlIGdldCByaWQgb2YgdGhlIGFyZ3VtZW50cyBs
YXp5IGNyZWF0aW9uIGFuZAorICAgICAgICAgICAgLy8gbGF6eSB0ZWFyLW9mZi4KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9u
WmVybywgYXJndW1lbnRzR1BSKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbTMyKG51bVVzZWRTdGFja1Nsb3RzKSwgc2NyYXRjaEdQUjIpOworICAgICAg
ICAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UobV9qaXQsIHNjcmF0Y2hHUFIyLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwor
ICAgICAgICAgICAgcmVzdWx0R1BSID0gc2NyYXRjaEdQUjI7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGhhdmVBcmd1bWVudHMgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0KKworICAgICAgICBERkdfQVNTRVJUKG1faml0Lmdy
YXBoKCksIG5vZGUsIGlzRmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJpZ2h0IG5v
dywgYXJndW1lbnRzIGlzIGluIGFyZ3VtZW50c0dQUiBhbmQgdGhlIHJlZ2lzdGVyIGZpbGUgaXMg
Zmx1c2hlZC4KKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJh
cmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzR1BSLCBudW1Vc2VkU3RhY2tT
bG90cywgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgICAgICAKKyAgICAgICAgLy8gTm93
IHdlIGhhdmUgdGhlIGFyZ3VtZW50IGNvdW50IG9mIHRoZSBjYWxsZWUgZnJhbWUsIGJ1dCB3ZSd2
ZSBsb3N0IHRoZSBhcmd1bWVudHMgb3BlcmFuZC4KKyAgICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhl
IGFyZ3VtZW50cyBvcGVyYW5kIHdoaWxlIHByZXNlcnZpbmcgdGhlIGNhbGxlZSBmcmFtZS4KKyAg
ICAgICAgbG9hZEFyZ3VtZW50c0dQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKG51bVVzZWRTdGFja1Nsb3RzKSwgc2NyYXRjaEdQUjEp
OworICAgICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKG1faml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgZmFsc2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIG1faml0LmFk
ZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkp
KSwgc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
ICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjEsIGFyZ3VtZW50c0dQUiwgZGF0YS0+
Zmlyc3RWYXJBcmdPZmZzZXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAg
IGhhdmVBcmd1bWVudHMubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZXN1bHRHUFIsIEpJ
VENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBERkdf
QVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlzRmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGFyZ3VtZW50cyBhcnJheSBhbnltb3JlLgorICAgICAg
ICBpZiAobm9kZS0+b3AoKSAhPSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICB1c2Uo
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzQ2FsbCkgeworICAgICAg
ICAgICAgLy8gTm93IHNldCB1cCB0aGUgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdGhpc0FyZ3VtZW50KHRoaXMsIG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRW
YXJhcmdzID8gbm9kZS0+Y2hpbGQyKCkgOiBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBH
UFJSZWcgdGhpc0FyZ3VtZW50R1BSID0gdGhpc0FyZ3VtZW50LmdwcigpOworICAgICAgICAgICAg
dGhpc0FyZ3VtZW50LnVzZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5zdG9y
ZTY0KHRoaXNBcmd1bWVudEdQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0
aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UK
KyAgICAgICAgLy8gZm9yIGl0LgorICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBpc0Nh
bGwgPyAwIDogMTsKICAgICAKLSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1f
dmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpXTsKLSAgICAvLyBUaGUgY2FsbCBpbnN0
cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hp
bGRyZW4gYXJlIHRoZQotICAgIC8vIGFyZ3VtZW50cy4KLSAgICBpbnQgbnVtUGFzc2VkQXJncyA9
IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlv
bidzIGZpcnN0IGNoaWxkIGlzIHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4g
YXJlIHRoZQorICAgICAgICAvLyBhcmd1bWVudHMuCisgICAgICAgIGludCBudW1QYXNzZWRBcmdz
ID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CiAgICAgCi0gICAgaW50IG51bUFyZ3MgPSBudW1Q
YXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CisgICAgICAgIGludCBudW1BcmdzID0gbnVt
UGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwogICAgIAotICAgIG1faml0LnN0b3JlMzIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1BcmdzKSwgbV9qaXQuY2FsbGVlRnJhbWVQ
YXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgIG1faml0LnN0b3Jl
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1BcmdzKSwgSklUQ29tcGlsZXI6OmNh
bGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIAotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7Ci0gICAgICAgIEVkZ2Ug
YXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxk
KCkgKyAxICsgaV07Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsK
LSAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKLSAgICAgICAgdXNlKGFyZ0VkZ2Up
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgeworICAg
ICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25v
ZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFy
Zyh0aGlzLCBhcmdFZGdlKTsKKyAgICAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7
CisgICAgICAgICAgICB1c2UoYXJnRWRnZSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9y
ZTY0KGFyZ0dQUiwgbV9qaXQuY2FsbGVlQXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVu
dCkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIEpJVENvbXBpbGVyOjpjYWxs
ZWVBcmd1bWVudFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CiAgICAgR1BS
UmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKLSAgICB1c2UoY2FsbGVlRWRnZSk7Ci0gICAg
bV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIG1faml0LmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpD
YWxsZWUpKTsKKyAgICBjYWxsZWUudXNlKCk7CisgICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIs
IEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgCiAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKIApAQCAtNjkyLDYgKzgyNCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWVHUFIg
PSBjYWxsZWVHUFI7CiAgICAgCiAgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2Fs
bCwgdGFyZ2V0VG9DaGVjaywgY2FsbExpbmtJbmZvKTsKKyAgICAKKyAgICAvLyBJZiB3ZSB3ZXJl
IHZhcmFyZ3MsIHRoZW4gYWZ0ZXIgdGhlIGNhbGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0
YWJsaXNoIG91ciBzdGFjayBwb2ludGVyLgorICAgIGlmIChpc1ZhcmFyZ3MpCisgICAgICAgIG1f
aml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuZ3JhcGgoKS5zdGFja1BvaW50ZXJPZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgSklUQ29t
cGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIH0KIAogLy8gQ2xhbmcgc2hvdWxkIGFsbG93
IHVucmVhY2hhYmxlIFtbY2xhbmc6OmZhbGx0aHJvdWdoXV0gaW4gdGVtcGxhdGUgZnVuY3Rpb25z
IGlmIGFueSB0ZW1wbGF0ZSBleHBhbnNpb24gdXNlcyBpdApAQCAtNDIyMSw5ICs0MzU3LDU2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2Fs
bDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2Ug
Q2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAg
ZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIExvYWRW
YXJhcmdzOiB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJh
cmdzRGF0YSgpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICAg
ICAgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAg
ICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIGFyZ3VtZW50c0dQUiwgZGF0YS0+b2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIGxv
Y2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICB7CisgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
YXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKKyAgICAgICAgfQorICAgICAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ug
d2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2Fm
ZQorICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwg
YnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8g
c3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBl
eGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhl
IHNpemluZy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTQ0OAorCisgICAgICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQor
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIGFyZ3VtZW50c0dQUik7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGlu
Z1RoaXNHUFIpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVmFyYXJn
c092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAorICAgICAgICAgICAgICAgIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+
bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVk
aW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7
CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBk
YXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c0dQUiwgZGF0YS0+b2Zmc2V0LCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgICAg
IAorICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246IHsKICAgICAgICAgREZHX0FTU0VSVChtX2pp
dC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgIApAQCAtNDMyOCw5ICs0NTExLDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCku
bWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9k
ZSwgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCks
IHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUK
KyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgbV9qaXQubW92ZSgKKyAgICAgICAgICAgICAgICBU
cnVzdGVkSW1tMzIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSAtIDEpLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVy
OworICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rl
cihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgfQogICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC00MzQ0LDIwICs0NTM4LDIyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKAogICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsKICAgICAgICAgCi0gICAgICAgIGlm
IChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAg
ICAgICAgIG1faml0Lm1vdmUoCiAgICAgICAgICAgICAgICAgSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkgLSAxKSkpLAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
SlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50
Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIg
PSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
YXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIG1faml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIG1faml0Lm9yNjQo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICAvLyBGSVhNRTogdGhlIHNsb3cgcGF0aCBnZW5lcmF0b3Igc2hvdWxk
IHBlcmZvcm0gYSBmb3J3YXJkIHNwZWN1bGF0aW9uIHRoYXQgdGhlCi0gICAgICAgIC8vIHJlc3Vs
dCBpcyBhbiBpbnRlZ2VyLiBGb3Igbm93IHdlIHBvc3Rwb25lIHRoZSBzcGVjdWxhdGlvbiBieSBo
YXZpbmcgdGhpcyByZXR1cm4KLSAgICAgICAgLy8gYSBKU1ZhbHVlLgotICAgICAgICAKICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAg
ICAgICAgICAgICAgY3JlYXRlZCwgdGhpcywgb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoLCBy
ZXN1bHRHUFIsCkBAIC00Mzg0LDcgKzQ1ODAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1h
Y2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUK
KyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAg
ICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMigKQEAgLTQzOTIsNyArNDU4OSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGluZGV4R1BSLAogICAgICAg
ICAgICAgICAgICAgICBJbW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENv
dW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmly
dHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0
ZXIpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAg
ICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKQEAgLTQ0NDksMTQgKzQ2NTEsMjAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5n
cmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAogICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6QWJvdmVPckVxdWFsLAogICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsCiAgICAgICAg
ICAgICAgICAgICAgIEltbTMyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkgLSAxKSkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291
bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3Rl
ciksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIHJl
c3VsdEdQUikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3
OCw3ICs1NzgsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSNpZm5kZWYgTkRFQlVH
CiAgICAgLy8gVXNlZCB0byBBU1NFUlQgZmx1c2hSZWdpc3RlcnMoKSBoYXMgYmVlbiBjYWxsZWQg
cHJpb3IgdG8KICAgICAvLyBjYWxsaW5nIG91dCBmcm9tIEpJVCBjb2RlIHRvIGEgQyBoZWxwZXIg
ZnVuY3Rpb24uCiAgICAgYm9vbCBpc0ZsdXNoZWQoKQpAQCAtNTkzLDcgKzU5Miw2IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9m
SlNDb25zdGFudEFzSW1tNjQoTm9kZSogbm9kZSkKQEAgLTExMDksNiArMTEwNywyNiBAQCBwdWJs
aWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFpfSklUT3BlcmF0aW9uX0VKWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgdW5zaWduZWQgYXJnMiwgdW5zaWduZWQgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0
ZWRJbW0zMihhcmczKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihGX0pJVE9wZXJhdGlvbl9FRkpaWiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVn
IGFyZzQpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMiwgVHJ1c3RlZEltbTMyKGFyZzMpLCBhcmc0KTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwor
ICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9u
X0VKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcy
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IFRydXN0ZWRJbW0zMihhcmcyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FWkpaWlogb3BlcmF0aW9u
LCB1bnNpZ25lZCBhcmcxLCBHUFJSZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQs
IHVuc2lnbmVkIGFyZzUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEpLCBhcmcyLCBUcnVzdGVkSW1tMzIoYXJnMyksIGFy
ZzQsIFRydXN0ZWRJbW0zMihhcmc1KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rpb25UeXBlPgogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRnVuY3Rp
b25UeXBlIG9wZXJhdGlvbiwgTm9SZXN1bHRUYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDE2MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICBCaXRWZWN0b3IgdXNl
ZExvY2FsczsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFibGVzIHRo
YXQgYXJlIHVzZWQgZnJvbSBJUi4KLSAgICAgICAgYm9vbCBoYXNHZXRMb2NhbFVubGlua2VkID0g
ZmFsc2U7CisgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CiAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKQEAgLTgxLDcgKzgxLDIy
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIHVz
ZWRMb2NhbHMuc2V0KG9wZXJhbmQudG9Mb2NhbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFz
R2V0TG9jYWxVbmxpbmtlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhh
dE5lZWRGaXh1cCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBMb2Fk
VmFyYXJnczogeworICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBu
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNv
dW50LmlzTG9jYWwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGRh
dGEtPmNvdW50LnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFy
dC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFs
bHkgcmVsaWVzIG9uIHRoZSBjb250aWd1aXR5IG9mIHN0YWNrIGxheW91dAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYXNzaWdubWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAx
KS5pc0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZGF0YS0+bGltaXQ7IGktLTspIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2Nh
bHMuc2V0KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLnRvTG9jYWwo
KSk7CisgICAgICAgICAgICAgICAgICAgIH0gLy8gdGhlIGVsc2UgY2FzZSBzaG91bGRuJ3QgaGFw
cGVuLgorICAgICAgICAgICAgICAgICAgICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIApAQCAtMTEzLDYgKzEyOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB1c2Vk
TG9jYWxzLnNldChhcmd1bWVudHNSZWdpc3Rlci50b0xvY2FsKCkpOwogICAgICAgICAgICAgdXNl
ZExvY2Fscy5zZXQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVy
KS50b0xvY2FsKCkpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1
YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICAgICAgSlNTdGFjazo6QXJndW1lbnRDb3VudCAr
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykgewogICAgICAg
ICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdpc3RlcigKICAgICAgICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpICsKQEAg
LTE0OCwyNCArMTY4LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2xv
Y2FsXSA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvblt2YXJpYWJsZS0+bG9jYWwoKS50
b0xvY2FsKCldKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2ln
bihhbGxvY2F0aW9uLCB2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmIChjb2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bCgKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdp
c3RlcigpLnRvTG9jYWwoKV0pOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
c1JlZ2lzdGVyID0KKyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2Nr
KCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0g
ICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvblsKLSAgICAg
ICAgICAgICAgICAgICAgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLnRvTG9jYWwoKV0p
CisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3Rlcihjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkpCiAgICAgICAgICAgICAg
ICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAg
ICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVn
aXN0ZXIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCktPnVu
Y2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgY29k
ZUJsb2NrKCktPnNldEFjdGl2YXRpb25SZWdpc3RlcigKLSAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW2NvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0
ZXIoKS50b0xvY2FsKCldKSk7CisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNv
ZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICAvLyBUaGlzIHJlZ2lzdGVyIGlzIG5ldmVyIHZhbGlkIGZvciBERkcgY29kZSBibG9j
a3MuCkBAIC0xNzYsMTUgKzE5MywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGRhdGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLT51c2VzQXJn
dW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1Jl
Z2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgICAgIGFs
bG9jYXRpb25bbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpLnRv
TG9jYWwoKV0pOworICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVn
aXN0ZXIgPSBhc3NpZ24oCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24sIG1fZ3JhcGgu
YXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiAKICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCgKLSAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoYWxsb2NhdGlvblt1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFt
ZSkpLnRvTG9jYWwoKV0pCisgICAgICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihp
bmxpbmVDYWxsRnJhbWUpKSkKICAgICAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRSZWdpc3RlciA9IGFzc2lnbigKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpB
cmd1bWVudENvdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXpl
KCk7IGFyZ3VtZW50LS0gPiAxOykgewogICAgICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24m
IHBvc2l0aW9uID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAg
ICAgICBkYXRhLmFyZ3VtZW50UG9zaXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAgLTIyNyw5ICsy
NDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wYXJhbWV0
ZXJDb3VudCgpKTsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gc3ltYm9sVGFibGUt
PnBhcmFtZXRlckNvdW50KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgbmV3U2xvd0Fy
Z3VtZW50c1tpXSA9IHNsb3dBcmd1bWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoc2xvd0FyZ3VtZW50c1tpXS5pbmRleCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWcuaXNMb2NhbCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGFsbG9jYXRpb25bcmVnLnRvTG9jYWwoKV0pLm9mZnNldCgpOworICAgICAgICAgICAgICAg
ICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmluZGV4ID0gYXNzaWduKGFsbG9jYXRpb24sIFZpcnR1
YWxSZWdpc3RlcihzbG93QXJndW1lbnRzW2ldLmluZGV4KSkub2Zmc2V0KCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Nsb3dBcmd1
bWVudHMgPSBXVEY6Om1vdmUobmV3U2xvd0FyZ3VtZW50cyk7CkBAIC0yMzcsNyArMjU2LDcgQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGaXggR2V0TG9jYWxVbmxp
bmtlZCdzIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi0gICAgICAgIGlmIChoYXNHZXRMb2NhbFVubGlu
a2VkKSB7CisgICAgICAgIGlmIChoYXNOb2Rlc1RoYXROZWVkRml4dXApIHsKICAgICAgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJ
bmRleC0tOykgewogICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQpAQCAtMjQ2LDEw
ICsyNjUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+dW5saW5r
ZWRMb2NhbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChhbGxvY2F0aW9uW29wZXJhbmQudG9Mb2NhbCgpXSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1hY2hpbmVMb2NhbChvcGVyYW5kKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldFVubGlua2VkTWFjaGluZUxvY2FsKGFzc2lnbihhbGxv
Y2F0aW9uLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICAgICAgICAg
ICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lQ291bnQgPSBhc3NpZ24oYWxs
b2NhdGlvbiwgZGF0YS0+Y291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFj
aGluZVN0YXJ0ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKQEAgLTI2Miw2ICsyODUsMjAgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQorCitwcml2YXRlOgorICAgIFZpcnR1YWxSZWdpc3RlciBh
c3NpZ24oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IHNyYykKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBzcmM7CisgICAg
ICAgIGlmIChyZXN1bHQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBteUFsbG9j
YXRpb24gPSBhbGxvY2F0aW9uW3Jlc3VsdC50b0xvY2FsKCldOworICAgICAgICAgICAgaWYgKG15
QWxsb2NhdGlvbiA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBWaXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQogfTsKIAogYm9vbCBwZXJmb3JtU3RhY2tMYXlvdXQoR3Jh
cGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBHZXRTY29wZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTgwMTYwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00NTYsNiArNDU2LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYWN0cyBsaWtlIGEgcmVzZXQu
IEl0J3Mgb2sgdG8gaGF2ZSBhIHNlY29uZCBHZXRMb2NhbCBmb3IgYSBsb2NhbCBpbiB0aGUgc2Ft
ZQorICAgICAgICAgICAgICAgICAgICAvLyBibG9jayBpZiB3ZSBoYWQgYSBTZXRBcmd1bWVudCBm
b3IgdGhhdCBsb2NhbC4KKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9j
YWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw2ICs3Nyw5IEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgc3RydWN0VHlwZShMQ29udGV4dCAK
ICAgICByZXR1cm4gc3RydWN0VHlwZShjb250ZXh0LCBlbGVtZW50cywgMiwgcGFja2luZyk7CiB9
CiAKKy8vIEZJWE1FOiBNYWtlIHRoZSBWYXJpYWRpY2l0eSBhcmd1bWVudCBub3QgYmUgdGhlIGxh
c3QgYXJndW1lbnQgdG8gZnVuY3Rpb25UeXBlKCkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uCisvLyBj
YW4gdXNlIEMrKzExIHZhcmlhZGljIHRlbXBsYXRlcworLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MTU3NQogZW51bSBWYXJpYWRpY2l0eSB7IE5vdFZhcmlhZGlj
LCBWYXJpYWRpYyB9Owogc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0
dXJuVHlwZSwgY29uc3QgTFR5cGUqIHBhcmFtVHlwZXMsIHVuc2lnbmVkIHBhcmFtQ291bnQsIFZh
cmlhZGljaXR5IHZhcmlhZGljaXR5KQogewpAQCAtMTEwLDYgKzExMywxNiBAQCBzdGF0aWMgaW5s
aW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByCiAgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0g
eyBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQgfTsKICAgICByZXR1cm4gZnVuY3Rpb25U
eXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDQsIHZhcmlhZGljaXR5KTsKIH0KK3N0YXRpYyBp
bmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIExUeXBlIHBhcmFtMSwg
TFR5cGUgcGFyYW0yLCBMVHlwZSBwYXJhbTMsIExUeXBlIHBhcmFtNCwgTFR5cGUgcGFyYW01LCBW
YXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQoreworICAgIExUeXBlIHBhcmFt
VHlwZXNbXSA9IHsgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJhbTUgfTsKKyAg
ICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDUsIHZhcmlhZGlj
aXR5KTsKK30KK3N0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5
cGUsIExUeXBlIHBhcmFtMSwgTFR5cGUgcGFyYW0yLCBMVHlwZSBwYXJhbTMsIExUeXBlIHBhcmFt
NCwgTFR5cGUgcGFyYW01LCBMVHlwZSBwYXJhbTYsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0g
Tm90VmFyaWFkaWMpCit7CisgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFt
MiwgcGFyYW0zLCBwYXJhbTQsIHBhcmFtNSwgcGFyYW02IH07CisgICAgcmV0dXJuIGZ1bmN0aW9u
VHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCA2LCB2YXJpYWRpY2l0eSk7Cit9CiAKIHN0YXRp
YyBpbmxpbmUgTFR5cGUgdHlwZU9mKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbGx2bS0+VHlwZU9m
KHZhbHVlKTsgfQogCkBAIC0yOTgsNDEgKzMxMSwxMyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBi
dWlsZENhbGwoTEJ1aWxkZXIgCiB7CiAgICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5j
dGlvbiwgJmFyZzEsIDEpOwogfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWls
ZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKQot
ewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIgfTsKLSAgICByZXR1cm4gYnVpbGRD
YWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCAyKTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcx
LCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJn
MSwgYXJnMiwgYXJnMyB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24s
IGFyZ3MsIDMpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1
aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUg
YXJnMywgTFZhbHVlIGFyZzQpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorTFZhbHVlIGJ1
aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBB
cmdzLi4uIGFyZ3MpCiB7Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywg
YXJnNCB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDQp
OwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExW
YWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZh
bHVlIGFyZzQsIExWYWx1ZSBhcmc1KQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFy
ZzIsIGFyZzMsIGFyZzQsIGFyZzUgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1
bmN0aW9uLCBhcmdzLCA1KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVp
bGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwg
TFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYpCi17Ci0g
ICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiB9
OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDYpOwotfQot
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBm
dW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFy
ZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcpCi17Ci0gICAgTFZhbHVl
IGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyB9Owot
ICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDcpOwotfQotc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5j
dGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQs
IExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcsIExWYWx1ZSBhcmc4KQotewot
ICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYs
IGFyZzcsIGFyZzggfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBh
cmdzLCA4KTsKKyAgICBMVmFsdWUgYXJnc0FycmF5W10gPSB7IGFyZzEsIGFyZ3MuLi4gfTsKKyAg
ICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzQXJyYXksIHNpemVvZihh
cmdzQXJyYXkpIC8gc2l6ZW9mKExWYWx1ZSkpOwogfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0
SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihMVmFsdWUgaW5zdHJ1Y3Rpb24sIExDYWxsQ29u
diBjYWxsaW5nQ29udmVudGlvbikgeyBsbHZtLT5TZXRJbnN0cnVjdGlvbkNhbGxDb252KGluc3Ry
dWN0aW9uLCBjYWxsaW5nQ29udmVudGlvbik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
RXh0cmFjdFZhbHVlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGlu
ZGV4KSB7IHJldHVybiBsbHZtLT5CdWlsZEV4dHJhY3RWYWx1ZShidWlsZGVyLCBhZ2dWYWwsIGlu
ZGV4LCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU2VsZWN0KExCdWlsZGVyIGJ1
aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7
IHJldHVybiBsbHZtLT5CdWlsZFNlbGVjdChidWlsZGVyLCBjb25kaXRpb24sIHRha2VuLCBub3RU
YWtlbiwgIiIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIwLDYgKzEyMCwx
MCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBT
dG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0
cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdz
OgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgogICAg
IGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIFZh
bHVlVG9JbnQzMjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21w
aWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKQEAgLTEyOCw2ICsxMjgsMjAgQEAgc3RhdGljIHZv
aWQgZHVtcERhdGFTZWN0aW9uKERhdGFTZWN0aW9uKgogICAgIH0KIH0KIAorc3RhdGljIGludCBv
ZmZzZXRPZlN0YWNrUmVnaW9uKFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXAsIHVpbnQz
Ml90IHN0YWNrbWFwSUQpCit7CisgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSByZWNvcmRNYXAuZmluZChzdGFja21hcElEKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVy
ICE9IHJlY29yZE1hcC5lbmQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWUuc2l6
ZSgpID09IDEpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlWzBdLmxvY2F0aW9ucy5z
aXplKCkgPT0gMSk7CisgICAgTG9jYXRpb24gY2FwdHVyZWRMb2NhdGlvbiA9CisgICAgICAgIExv
Y2F0aW9uOjpmb3JTdGFja21hcHMobnVsbHB0ciwgaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zWzBd
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExvY2F0aW9uLmtpbmQoKSA9PSBMb2NhdGlv
bjo6UmVnaXN0ZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24uZ3ByKCkg
PT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKCEoY2Fw
dHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAlIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICByZXR1cm4g
Y2FwdHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAvIHNpemVvZihSZWdpc3Rlcik7Cit9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIERlc2NyaXB0b3JUeXBlPgogdm9pZCBnZW5lcmF0ZUlDRmFzdFBhdGgoCiAg
ICAgU3RhdGUmIHN0YXRlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgR2VuZXJhdGVkRnVuY3Rpb24g
Z2VuZXJhdGVkRnVuY3Rpb24sCkBAIC0yNDMsNiArMjU3LDMyIEBAIHN0YXRpYyBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzRm9yKGNvbnMKICAgICByZXR1cm4gUmVnaXN0ZXJTZXQocmVjb3JkLnVz
ZWRSZWdpc3RlclNldCgpLCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgQ2FsbFR5cGU+Cit2b2lkIGFkanVzdENhbGxJQ3NGb3JTdGFj
a21hcHMoVmVjdG9yPENhbGxUeXBlPiYgY2FsbHMsIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNv
cmRNYXApCit7CisgICAgLy8gSGFuZGxpbmcgSlMgY2FsbHMgaXMgd2VpcmQ6IHdlIG5lZWQgdG8g
ZW5zdXJlIHRoYXQgd2Ugc29ydCB0aGVtIGJ5IHRoZSBQQyBpbiBMTFZNCisgICAgLy8gZ2VuZXJh
dGVkIGNvZGUuIFRoYXQgaW1wbGllcyBmaXJzdCBwcnVuaW5nIHRoZSBvbmVzIHRoYXQgTExWTSBk
aWRuJ3QgZ2VuZXJhdGUuCisKKyAgICBWZWN0b3I8Q2FsbFR5cGU+IG9sZENhbGxzOworICAgIG9s
ZENhbGxzLnN3YXAoY2FsbHMpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBv
bGRDYWxscy5zaXplKCk7ICsraSkgeworICAgICAgICBDYWxsVHlwZSYgY2FsbCA9IG9sZENhbGxz
W2ldOworICAgICAgICAKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7CisgICAgICAgIGlmIChpdGVy
ID09IHJlY29yZE1hcC5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytqKSB7
CisgICAgICAgICAgICBDYWxsVHlwZSBjb3B5ID0gY2FsbDsKKyAgICAgICAgICAgIGNvcHkubV9p
bnN0cnVjdGlvbk9mZnNldCA9IGl0ZXItPnZhbHVlW2pdLmluc3RydWN0aW9uT2Zmc2V0OworICAg
ICAgICAgICAgY2FsbHMuYXBwZW5kKGNvcHkpOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rk
Ojpzb3J0KGNhbGxzLmJlZ2luKCksIGNhbGxzLmVuZCgpKTsKK30KKwogc3RhdGljIHZvaWQgZml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVENvZGUqIGppdENvZGUsIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1
bmN0aW9uLAogICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXAsIGJvb2wgZGlkU2Vl
VW53aW5kSW5mbykKQEAgLTI1MSwxNiArMjkxLDE0IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9u
QmFzZWRPblN0YWNrTWFwcygKICAgICBWTSYgdm0gPSBncmFwaC5tX3ZtOwogICAgIFN0YWNrTWFw
cyBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CiAgICAgCi0gICAgU3RhY2tNYXBzOjpS
ZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5jYXB0dXJlZFN0
YWNrbWFwSUQpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsKLSAgICBMb2Nh
dGlvbiBjYXB0dXJlZExvY2F0aW9uID0KLSAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFwcygm
aml0Q29kZS0+c3RhY2ttYXBzLCBpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnNbMF0pOwotICAgIFJF
TEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24ua2luZCgpID09IExvY2F0aW9uOjpSZWdpc3Rl
cik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExvY2F0
aW9uLmFkZGVuZCgpICUgc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgIGludDMyX3QgbG9jYWxzT2Zm
c2V0ID0gY2FwdHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAvIHNpemVvZihSZWdpc3RlcikgKyBncmFw
aC5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgaW50IGxvY2Fsc09mZnNldCA9CisgICAgICAgIG9m
ZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpICsg
Z3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOworICAgIAorICAgIGludCB2YXJhcmdzU3BpbGxTbG90
c09mZnNldDsKKyAgICBpZiAoc3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEICE9IFVJ
TlRfTUFYKQorICAgICAgICB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNldE9mU3RhY2tS
ZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpOworICAg
IGVsc2UKKyAgICAgICAgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQgPSAwOwogICAgIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0tOykg
ewogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGdyYXBoLm1faW5s
aW5lVmFyaWFibGVEYXRhW2ldLmlubGluZUNhbGxGcmFtZTsKQEAgLTMzNiw3ICszNzQsNyBAQCBz
dGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICBpZiAo
dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhh
bmRsaW5nIE9TUiBzdGFja21hcCAjIiwgZXhpdC5tX3N0YWNrbWFwSUQsICIgZm9yICIsIGV4aXQu
bV9jb2RlT3JpZ2luLCAiXG4iKTsKIAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5k
KGV4aXQubV9zdGFja21hcElEKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5m
aW5kKGV4aXQubV9zdGFja21hcElEKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1h
cC5lbmQoKSkgewogICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzc1LDcgKzQxMyw3IEBAIHN0YXRpYyB2b2lkIGZp
eEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGls
YXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgR2V0QnlJ
ZCBzdGFja21hcCAjIiwgZ2V0QnlJZC5zdGFja21hcElEKCksICJcbiIpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElEKCkp
OworICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21h
cElEKCkpOwogICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CkBAIC00MTIsNyArNDUwLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9u
U3RhY2tNYXBzKAogICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBQdXRCeUlkIHN0YWNrbWFwICMiLCBw
dXRCeUlkLnN0YWNrbWFwSUQoKSwgIlxuIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGl0
ZXIgPSByZWNvcmRNYXAuZmluZChwdXRCeUlkLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBh
dXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChwdXRCeUlkLnN0YWNrbWFwSUQoKSk7CiAgICAgICAg
ICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJ
dCB3YXMgb3B0aW1pemVkIG91dC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ0NCwx
NCArNDgyLDEzIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3Rh
dGUuY2hlY2tJbnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBDaGVja0luRGVzY3JpcHRv
ciYgY2hlY2tJbiA9IHN0YXRlLmNoZWNrSW5zW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFM
b2coIkhhbmRsaW5nIGNoZWNrSW4gc3RhY2ttYXAgIyIsIGNoZWNrSW4uc3RhY2ttYXBJRCgpLCAi
XG4iKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5kKGNo
ZWNrSW4uc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5m
aW5kKGNoZWNrSW4uc3RhY2ttYXBJRCgpKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29y
ZE1hcC5lbmQoKSkgewogICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0Lgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDgwLDcgKzUxNyw2IEBAIHN0YXRpYyB2b2lk
IGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBjaGVja0luLm1f
Z2VuZXJhdG9ycy5hcHBlbmQoQ2hlY2tJbkdlbmVyYXRvcihzdHViSW5mbywgc2xvd0NhbGwsIGJl
Z2luKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAgICAKICAgICAgICAgZXhj
ZXB0aW9uVGFyZ2V0LmxpbmsoJnNsb3dQYXRoSklUKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZXhjZXB0aW9uSnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsKQEAgLTUwMywyOSArNTM5
LDExIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc3RhdGUuY2hlY2tJbnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAg
ICAgICBnZW5lcmF0ZUNoZWNrSW5JQ0Zhc3RQYXRoKAogICAgICAgICAgICAgICAgIHN0YXRlLCBj
b2RlQmxvY2ssIGdlbmVyYXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0YXRlLmNoZWNrSW5zW2ld
LAotICAgICAgICAgICAgICAgIHNpemVPZkNoZWNrSW4oKSk7IAorICAgICAgICAgICAgICAgIHNp
emVPZkluKCkpOyAKICAgICAgICAgfSAKICAgICB9CiAgICAgCi0gICAgLy8gSGFuZGxpbmcgSlMg
Y2FsbHMgaXMgd2VpcmQ6IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugc29ydCB0aGVtIGJ5IHRo
ZSBQQyBpbiBMTFZNCi0gICAgLy8gZ2VuZXJhdGVkIGNvZGUuIFRoYXQgaW1wbGllcyBmaXJzdCBw
cnVuaW5nIHRoZSBvbmVzIHRoYXQgTExWTSBkaWRuJ3QgZ2VuZXJhdGUuCi0gICAgVmVjdG9yPEpT
Q2FsbD4gb2xkQ2FsbHMgPSBzdGF0ZS5qc0NhbGxzOwotICAgIHN0YXRlLmpzQ2FsbHMucmVzaXpl
KDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDYWxscy5zaXplKCk7ICsraSkg
ewotICAgICAgICBKU0NhbGwmIGNhbGwgPSBvbGRDYWxsc1tpXTsKLSAgICAgICAgCi0gICAgICAg
IFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2Fs
bC5zdGFja21hcElEKCkpOwotICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
aXRlci0+dmFsdWUuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIEpTQ2FsbCBjb3B5ID0gY2Fs
bDsKLSAgICAgICAgICAgIGNvcHkubV9pbnN0cnVjdGlvbk9mZnNldCA9IGl0ZXItPnZhbHVlW2pd
Lmluc3RydWN0aW9uT2Zmc2V0OwotICAgICAgICAgICAgc3RhdGUuanNDYWxscy5hcHBlbmQoY29w
eSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RkOjpzb3J0KHN0YXRlLmpzQ2FsbHMu
YmVnaW4oKSwgc3RhdGUuanNDYWxscy5lbmQoKSk7CisgICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNr
bWFwcyhzdGF0ZS5qc0NhbGxzLCByZWNvcmRNYXApOwogICAgIAogICAgIGZvciAodW5zaWduZWQg
aSA9IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIEpTQ2FsbCYgY2FsbCA9
IHN0YXRlLmpzQ2FsbHNbaV07CkBAIC01NDcsOSArNTY1LDMyIEBAIHN0YXRpYyB2b2lkIGZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgY2FsbC5saW5rKHZtLCBsaW5rQnVmZmVy
KTsKICAgICB9CiAgICAgCisgICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0Nh
bGxWYXJhcmdzZXMsIHJlY29yZE1hcCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3Rh
dGUuanNDYWxsVmFyYXJnc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICBKU0NhbGxWYXJhcmdz
JiBjYWxsID0gc3RhdGUuanNDYWxsVmFyYXJnc2VzW2ldOworICAgICAgICAKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0
KGZhc3RQYXRoSklULCBncmFwaCwgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQpOworICAgICAgICAK
KyAgICAgICAgY2hhciogc3RhcnRPZklDID0gYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRG
dW5jdGlvbikgKyBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIHNpemVfdCBzaXpl
T2ZJQyA9IHNpemVPZklDRm9yKGNhbGwubm9kZSgpKTsKKworICAgICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIodm0sIGZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDKTsKKyAgICAgICAg
aWYgKCFsaW5rQnVmZmVyLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiRmFpbGVk
IHRvIGluc2VydCBpbmxpbmUgY2FjaGUgZm9yIHZhcmFyZ3MgY2FsbCAoc3BlY2lmaWNhbGx5LCAi
LCBHcmFwaDo6b3BOYW1lKGNhbGwubm9kZSgpLT5vcCgpKSwgIikgYmVjYXVzZSB3ZSB0aG91Z2h0
IHRoZSBzaXplIHdvdWxkIGJlICIsIHNpemVPZklDLCAiIGJ1dCBpdCBlbmRlZCB1cCBiZWluZyAi
LCBmYXN0UGF0aEpJVC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpLCAiIHByaW9yIHRvIGNvbXBhY3Rp
b24uXG4iKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6
OmZpbGxOb3BzKAorICAgICAgICAgICAgc3RhcnRPZklDICsgbGlua0J1ZmZlci5zaXplKCksIHNp
emVPZklDIC0gbGlua0J1ZmZlci5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgY2FsbC5saW5r
KHZtLCBsaW5rQnVmZmVyLCBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVm
ZmVyLT5lbnRyeXBvaW50KCkpOworICAgIH0KKyAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY29kZUJsb2NrKTsKIAotICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5o
YW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCk7CisgICAgYXV0byBpdGVyID0g
cmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFw
SUQpOwogICAgIC8vIEl0J3Mgc29ydCBvZiByZW1vdGVseSBwb3NzaWJsZSB0aGF0IHdlIHdvbid0
IGhhdmUgYW4gaW4tYmFuZCBleGNlcHRpb24gaGFuZGxpbmcKICAgICAvLyBwYXRoLCBmb3Igc29t
ZSBraW5kcyBvZiBmdW5jdGlvbnMuCiAgICAgaWYgKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNp
emUuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTEgKzI4LDE0IEBA
CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRl
ICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordXNpbmcgbmFtZXNwYWNlIERG
RzsKKwogLy8gVGhlIGRlZmF1bHQgc2l6ZXMgYXJlIHg4Ni02NC1zcGVjaWZpYywgYW5kIHdlcmUg
Zm91bmQgZW1waXJpY2FsbHkuIFRoZXkgaGF2ZSB0byBjb3ZlciB0aGUgd29yc3QKIC8vIHBvc3Np
YmxlIGNvbWJpbmF0aW9uIG9mIHJlZ2lzdGVycyBsZWFkaW5nIHRvIHRoZSBsYXJnZXN0IHBvc3Np
YmxlIGVuY29kaW5nIG9mIGVhY2ggaW5zdHJ1Y3Rpb24gaW4KIC8vIHRoZSBJQy4KQEAgLTYxLDI1
ICs2NCw3NCBAQCBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpCiAjZW5kaWYKIH0KIAotc2l6ZV90IHNp
emVPZkNoZWNrSW4oKQorc2l6ZV90IHNpemVPZkNhbGwoKQogewogI2lmIENQVShBUk02NCkKLSAg
ICByZXR1cm4gNDsKKyAgICByZXR1cm4gNTY7CiAjZWxzZQotICAgIHJldHVybiA1OyAKKyAgICBy
ZXR1cm4gNTM7CiAjZW5kaWYKIH0KIAorc2l6ZV90IHNpemVPZkNhbGxWYXJhcmdzKCkKK3sKKyNp
ZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDU2OworI2Vsc2UKKyAgICByZXR1cm4gMjY5OworI2Vu
ZGlmCit9CiAKLXNpemVfdCBzaXplT2ZDYWxsKCkKK3NpemVfdCBzaXplT2ZDYWxsRm9yd2FyZFZh
cmFyZ3MoKQogewogI2lmIENQVShBUk02NCkKICAgICByZXR1cm4gNTY7CiAjZWxzZQotICAgIHJl
dHVybiA1MzsKKyAgICByZXR1cm4gMzcyOworI2VuZGlmCit9CisKK3NpemVfdCBzaXplT2ZDb25z
dHJ1Y3RWYXJhcmdzKCkKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDU2OworI2Vsc2UK
KyAgICByZXR1cm4gMjM1OworI2VuZGlmCit9CisKK3NpemVfdCBzaXplT2ZJbigpCit7CisjaWYg
Q1BVKEFSTTY0KQorICAgIHJldHVybiA0OworI2Vsc2UKKyAgICByZXR1cm4gNTsgCiAjZW5kaWYK
IH0KIAorc2l6ZV90IHNpemVPZklDRm9yKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CisgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICByZXR1cm4gc2l6ZU9mR2V0QnlJ
ZCgpOworICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgcmV0dXJuIHNpemVPZlB1dEJ5SWQoKTsK
KyAgICBjYXNlIENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIHJldHVybiBzaXpl
T2ZDYWxsKCk7CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNh
bGxWYXJhcmdzKCk7CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIHJldHVy
biBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6
CisgICAgICAgIHJldHVybiBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCk7CisgICAgY2FzZSBJbjoK
KyAgICAgICAgcmV0dXJuIHNpemVPZkluKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJ
bmxpbmVDYWNoZVNpemUuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTIgKzI4LDIz
IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBERkcgeworc3RydWN0IE5vZGU7Cit9
CisKK25hbWVzcGFjZSBGVEwgewogCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpOwogc2l6ZV90IHNp
emVPZlB1dEJ5SWQoKTsKIHNpemVfdCBzaXplT2ZDYWxsKCk7Ci1zaXplX3Qgc2l6ZU9mQ2hlY2tJ
bigpOworc2l6ZV90IHNpemVPZkNhbGxWYXJhcmdzKCk7CitzaXplX3Qgc2l6ZU9mQ2FsbEZvcndh
cmRWYXJhcmdzKCk7CitzaXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpOworc2l6ZV90IHNp
emVPZkluKCk7CisKK3NpemVfdCBzaXplT2ZJQ0ZvcihERkc6Ok5vZGUqKTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtOTksMTAgKzk5LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
ICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQ
dHIsIGludFB0cikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FQ2IsIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
RVZ3c0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDY0KSkgXAor
ICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VaSlpaWiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBp
bnRQdHIsIGludDMyLCBpbnQ2NCwgaW50MzIsIGludDMyLCBpbnQzMikpIFwKICAgICBtYWNybyhW
X0pJVE9wZXJhdGlvbl9KLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDY0KSkgXAogICAgIG1h
Y3JvKFZfSklUT3BlcmF0aW9uX1osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIpKSBcCiAg
ICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRCwgZnVuY3Rpb25UeXBlKGludDMyLCBkb3VibGVUeXBl
KSkgXAotICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUoaW50MzIsIGlu
dFB0ciwgaW50UHRyKSkKKyAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBl
KGludDMyLCBpbnRQdHIsIGludFB0cikpIFwKKyAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FSlos
IGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnQ2NCwgaW50MzIpKQogICAgIAogY2xhc3Mg
SW50cmluc2ljUmVwb3NpdG9yeSA6IHB1YmxpYyBDb21tb25WYWx1ZXMgewogcHVibGljOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkocmV2aXNpb24gMTgwMTYw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCw3IEBAIEpTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQs
IE5vZGUKICAgICAsIG1fc3RhY2ttYXBJRChzdGFja21hcElEKQogICAgICwgbV9pbnN0cnVjdGlv
bk9mZnNldCgwKQogeworICAgIEFTU0VSVChub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3Ao
KSA9PSBDb25zdHJ1Y3QpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAJKHJldmlzaW9uIDE4
MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgewogCit1c2luZyBuYW1lc3BhY2UgREZHOworCiBKU0NhbGxCYXNlOjpKU0NhbGxCYXNl
KCkKICAgICA6IG1fdHlwZShDYWxsTGlua0luZm86Ok5vbmUpCiAgICAgLCBtX2NhbGxMaW5rSW5m
byhudWxscHRyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNl
LmgJKHJldmlzaW9uIDE4MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlND
YWxsQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgTGlua0J1ZmZlcjsKIAorbmFtZXNwYWNlIERGRyB7CitzdHJ1Y3QgTm9kZTsK
K30KKwogbmFtZXNwYWNlIEZUTCB7CiAKIGNsYXNzIEpTQ2FsbEJhc2UgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMSlND
YWxsVmFyYXJncy5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdHcmFw
aC5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRl
ICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFt
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBERkc7CisKK0pTQ2FsbFZhcmFyZ3M6OkpTQ2FsbFZhcmFyZ3MoKQorICAgIDogbV9zdGFja21h
cElEKFVJTlRfTUFYKQorICAgICwgbV9ub2RlKG51bGxwdHIpCisgICAgLCBtX2luc3RydWN0aW9u
T2Zmc2V0KFVJTlRfTUFYKQoreworfQorCitKU0NhbGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKHVu
c2lnbmVkIHN0YWNrbWFwSUQsIE5vZGUqIG5vZGUpCisgICAgOiBtX3N0YWNrbWFwSUQoc3RhY2tt
YXBJRCkKKyAgICAsIG1fbm9kZShub2RlKQorICAgICwgbV9jYWxsQmFzZSgKKyAgICAgICAgbm9k
ZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJh
cmdzIDogQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncywKKyAgICAgICAgbm9kZS0+b3JpZ2luLnNl
bWFudGljKQorICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldCgwKQoreworICAgIEFTU0VSVChub2Rl
LT5vcCgpID09IENhbGxWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdz
IHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0VmFyYXJncyk7Cit9CisKK3Vuc2lnbmVkIEpTQ2Fs
bFZhcmFyZ3M6Om51bVNwaWxsU2xvdHNOZWVkZWQoKQoreworICAgIHJldHVybiA0OworfQorCit2
b2lkIEpTQ2FsbFZhcmFyZ3M6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQsIEdyYXBoJiBncmFwaCwg
aW50MzJfdCBzcGlsbFNsb3RzT2Zmc2V0KQoreworICAgIC8vIFdlIGFyZSBwYXNzZWQgdGhyZWUg
cGllY2VzIG9mIGluZm9ybWF0aW9uOgorICAgIC8vIC0gVGhlIGNhbGxlZS4KKyAgICAvLyAtIFRo
ZSBhcmd1bWVudHMgb2JqZWN0LgorICAgIC8vIC0gVGhlICJ0aGlzIiB2YWx1ZSwgaWYgaXQncyBh
IGNvbnN0cnVjdG9yIGNhbGwuCisgICAgCisgICAgYm9vbCBpc0NhbGwgPSBtX25vZGUtPm9wKCkg
IT0gQ29uc3RydWN0VmFyYXJnczsKKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBt
X25vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworICAgIAorICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBH
UFJJbmZvOjphcmd1bWVudEdQUjA7CisgICAgCisgICAgR1BSUmVnIGFyZ3VtZW50c0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgR1BSUmVnIHRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIGJv
b2wgYXJndW1lbnRzT25TdGFjayA9IGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobV9ub2RlLT5v
cCgpKSB7CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgYXJndW1lbnRzR1BSID0gR1BS
SW5mbzo6YXJndW1lbnRHUFIxOworICAgICAgICB0aGlzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRH
UFIyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAg
ICAgdGhpc0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgYXJndW1lbnRzT25T
dGFjayA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
KyAgICAgICAgYXJndW1lbnRzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgY29uc3QgdW5zaWduZWQgY2FsbGVl
U3BpbGxTbG90ID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCBhcmd1bWVudHNTcGlsbFNsb3QgPSAx
OworICAgIGNvbnN0IHVuc2lnbmVkIHRoaXNTcGlsbFNsb3QgPSAyOworICAgIGNvbnN0IHVuc2ln
bmVkIHN0YWNrUG9pbnRlclNwaWxsU2xvdCA9IDM7CisgICAgCisgICAgLy8gR2V0IHNvbWUgc2Ny
YXRjaCByZWdpc3RlcnMuCisgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB1c2Vk
UmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICB1c2Vk
UmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkp
OworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5zZXQoY2FsbGVlR1BSKTsKKyAgICBpZiAoYXJndW1l
bnRzR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KGFyZ3Vt
ZW50c0dQUik7CisgICAgaWYgKHRoaXNHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgdXNl
ZFJlZ2lzdGVycy5zZXQodGhpc0dQUik7CisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFs
bG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBpZiAoYXJndW1lbnRzT25TdGFjaykKKyAg
ICAgICAgYXJndW1lbnRzR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAg
IFJFTEVBU0VfQVNTRVJUKCFhbGxvY2F0b3IubnVtYmVyT2ZSZXVzZWRSZWdpc3RlcnMoKSk7Cisg
ICAgCisgICAgYXV0byBsb2FkQXJndW1lbnRzID0gWyZdIChib29sIGNsb2JiZXJlZCkgeworICAg
ICAgICBpZiAoYXJndW1lbnRzT25TdGFjaykgeworICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoZ3JhcGgubWFjaGluZUFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSksCisgICAgICAgICAgICAg
ICAgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgfSBlbHNlIGlmIChjbG9iYmVyZWQpIHsKKyAgICAg
ICAgICAgIGppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjphZGRyZXNz
Rm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBhcmd1bWVudHNTcGlsbFNsb3QpLCBhcmd1bWVudHNHUFIp
OworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICBhdXRvIGNvbXB1dGVVc2VkU3RhY2sgPSBb
Jl0gKEdQUlJlZyB0YXJnZXRHUFIsIHVuc2lnbmVkIGV4dHJhKSB7CisgICAgICAgIGppdC5tb3Zl
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB0YXJnZXRHUFIpOworICAgICAgICBqaXQuc3Vi
UHRyKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRhcmdldEdQUik7CisgICAg
ICAgIGlmIChleHRyYSkKKyAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoZXh0cmEpLCB0YXJnZXRHUFIpOworICAgICAgICBqaXQudXJzaGlmdFB0cihDQ2Fs
bEhlbHBlcnM6OkltbTMyKDMpLCB0YXJnZXRHUFIpOworICAgIH07CisgICAgCisgICAgYXV0byBj
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKKyAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxlZSksIEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICBtX2V4Y2VwdGlvbnMuYXBwZW5kKGppdC5l
bWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlIZWxwZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVjaywg
QXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsKKyAgICB9OworICAgIAorICAgIGxvYWRB
cmd1bWVudHMoZmFsc2UpOworCisgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0
ICsgc3RhY2tQb2ludGVyU3BpbGxTbG90KSk7CisgICAgCisgICAgLy8gQXR0ZW1wdCB0aGUgZm9y
d2FyZGluZyBmYXN0IHBhdGgsIGlmIGl0J3MgYmVlbiByZXF1ZXN0ZWQuCisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBDYWxsRm9y
d2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgLy8gRG8gdGhlIGhvcnJpZmljIGZvby5hcHBseSh0aGlz
LCBhcmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAgICAgLy8gRklYTUU6IGRvIHRoaXMgb3B0
aW1pemF0aW9uIGF0IHRoZSBJUiBsZXZlbC4KKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
VGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgYXJndW1lbnRzR1BSKSk7CisgICAgICAgIAor
ICAgICAgICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hHUFIyLCAwKTsKKyAgICAgICAgZW1pdFNl
dHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNj
cmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgICAgICAKKyAg
ICAgICAgaml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGhhdmVB
cmd1bWVudHMgPSBqaXQuanVtcCgpOworICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAg
IH0KKyAgICAKKyAgICAvLyBHb3R0YSBzcGlsbCB0aGUgY2FsbGVlLCBhcmd1bWVudHMsIGFuZCB0
aGlzIGJlY2F1c2Ugd2Ugd2lsbCBuZWVkIHRoZW0gbGF0ZXIgYW5kIHdlIHdpbGwgaGF2ZSBzb21l
CisgICAgLy8gY2FsbHMgdGhhdCBjbG9iYmVyIHRoZW0uCisgICAgaml0LnN0b3JlNjQoY2FsbGVl
R1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxlZVNw
aWxsU2xvdCkpOworICAgIGlmICghYXJndW1lbnRzT25TdGFjaykKKyAgICAgICAgaml0LnN0b3Jl
NjQoYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNl
dCArIGFyZ3VtZW50c1NwaWxsU2xvdCkpOworICAgIGlmIChpc0NhbGwpCisgICAgICAgIGppdC5z
dG9yZTY0KHRoaXNHUFIsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0
ICsgdGhpc1NwaWxsU2xvdCkpOworICAgIAorICAgIHVuc2lnbmVkIGV4dHJhU3RhY2sgPSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykgKworICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSk7CisgICAgY29tcHV0ZVVz
ZWRTdGFjayhzY3JhdGNoR1BSMSwgMCk7CisgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihleHRyYVN0YWNrKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmd1bWVudHNHUFIsIHNj
cmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09m
ZnNldCkpOworICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQqPihv
cGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzKSk7CisgICAgCisgICAgaml0Lm1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIxKTsKKyAgICBjb21wdXRlVXNlZFN0YWNrKHNj
cmF0Y2hHUFIyLCBleHRyYVN0YWNrKTsKKyAgICBsb2FkQXJndW1lbnRzKHRydWUpOworICAgIGVt
aXRTZXRWYXJhcmdzRnJhbWUoaml0LCBzY3JhdGNoR1BSMSwgZmFsc2UsIHNjcmF0Y2hHUFIyLCBz
Y3JhdGNoR1BSMik7CisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigt
ZXh0cmFTdGFjayksIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKHNjcmF0Y2hHUFIyLCBh
cmd1bWVudHNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJn
T2Zmc2V0KSwgc2NyYXRjaEdQUjEpOworICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lz
ZV9jYXN0PHZvaWQqPihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSkpOworICAgIAorICAgIGpp
dC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMik7CisgICAgCisgICAg
aWYgKGlzQ2FsbCkKKyAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Io
c3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpLCB0aGlzR1BSKTsKKyAgICBqaXQubG9h
ZDY0KENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgY2FsbGVlU3Bp
bGxTbG90KSwgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIGlmIChtX25vZGUtPm9wKCkgPT0g
Q2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJmppdCk7Cisg
ICAgCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgCisgICAgaWYgKGlzQ2FsbCkKKyAgICAgICAgaml0LnN0b3JlNjQodGhp
c0dQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworICAgIAorICAgIC8v
IEhlbmNlZm9ydGggd2UgbWFrZSB0aGUgY2FsbC4gVGhlIGJhc2UgRlRMIGNhbGwgbWFjaGluZXJ5
IGV4cGVjdHMgdGhlIGNhbGxlZSBpbiByZWdUMCBhbmQgZm9yIHRoZQorICAgIC8vIHN0YWNrIGZy
YW1lIHRvIGFscmVhZHkgYmUgc2V0IHVwLCB3aGljaCBpdCBpcy4KKyAgICBqaXQuc3RvcmU2NChH
UFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2Fs
bGVlKSk7CisgICAgCisgICAgbV9jYWxsQmFzZS5lbWl0KGppdCk7CisgICAgCisgICAgLy8gVW5k
byB0aGUgZGFtYWdlIHdlJ3ZlIGRvbmUuCisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3QpLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKK30KKwordm9pZCBKU0NhbGxWYXJhcmdz
OjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgQ29kZUxvY2F0aW9uTGFiZWwg
ZXhjZXB0aW9uSGFuZGxlcikKK3sKKyAgICBtX2NhbGxCYXNlLmxpbmsodm0sIGxpbmtCdWZmZXIp
OworICAgIGxpbmtCdWZmZXIubGluayhtX2V4Y2VwdGlvbnMsIGV4Y2VwdGlvbkhhbmRsZXIpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZh
cmFyZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMSlNDYWxsVmFyYXJnc19o
CisjZGVmaW5lIEZUTEpTQ2FsbFZhcmFyZ3NfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNp
bmNsdWRlICJGVExKU0NhbGxCYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBMaW5r
QnVmZmVyOworCituYW1lc3BhY2UgREZHIHsKK2NsYXNzIEdyYXBoOworc3RydWN0IE5vZGU7Cit9
CisKK25hbWVzcGFjZSBGVEwgeworCitjbGFzcyBKU0NhbGxWYXJhcmdzIHsKK3B1YmxpYzoKKyAg
ICBKU0NhbGxWYXJhcmdzKCk7CisgICAgSlNDYWxsVmFyYXJncyh1bnNpZ25lZCBzdGFja21hcElE
LCBERkc6Ok5vZGUqKTsKKyAgICAKKyAgICBERkc6Ok5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVy
biBtX25vZGU7IH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtU3BpbGxTbG90c05lZWRl
ZCgpOworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmLCBERkc6OkdyYXBoJiwgaW50
MzJfdCBzcGlsbFNsb3RzT2Zmc2V0KTsKKyAgICB2b2lkIGxpbmsoVk0mLCBMaW5rQnVmZmVyJiwg
Q29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlcik7CisgICAgCisgICAgdW5zaWduZWQg
c3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbFZhcmFyZ3MmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5tX2luc3RydWN0aW9uT2Zm
c2V0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFja21hcElEOwor
ICAgIERGRzo6Tm9kZSogbV9ub2RlOworICAgIEpTQ2FsbEJhc2UgbV9jYWxsQmFzZTsKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IG1fZXhjZXB0aW9uczsKKworcHVibGljOgorICAgIHVpbnQz
Ml90IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEpTQ2FsbFZhcmFy
Z3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2ICsxODcsMzAg
QEAgcHVibGljOgogICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQu
Y29uc3RJbnQ2NChtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBt
X291dC5pbnQzMlplcm8sIGNhcHR1cmVkQWxsb2NhKTsKICAgICAgICAgCisgICAgICAgIC8vIElm
IHdlIGhhdmUgYW55IENhbGxWYXJhcmdzIHRoZW4gd2UgbmVlIHRvIGhhdmUgYSBzcGlsbCBzbG90
IGZvciBpdC4KKyAgICAgICAgYm9vbCBoYXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBwcmVPcmRlcikgeworICAgICAgICAgICAgZm9yIChOb2RlKiBu
b2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIENh
bGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6
CisgICAgICAgICAgICAgICAgICAgIGhhc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGhhc1ZhcmFyZ3MpIHsKKyAgICAgICAgICAgIExWYWx1ZSB2YXJhcmdzU3BpbGxT
bG90cyA9IG1fb3V0LmFsbG9jYSgKKyAgICAgICAgICAgICAgICBhcnJheVR5cGUobV9vdXQuaW50
NjQsIEpTQ2FsbFZhcmFyZ3M6Om51bVNwaWxsU2xvdHNOZWVkZWQoKSkpOworICAgICAgICAgICAg
bV9mdGxTdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7
CisgICAgICAgICAgICBtX291dC5jYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LnN0YWNrbWFw
SW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxTdGF0ZS52YXJhcmdzU3BpbGxTbG90
c1N0YWNrbWFwSUQpLAorICAgICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgdmFyYXJnc1Nw
aWxsU2xvdHMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBtX2NhbGxGcmFtZSA9IG1f
b3V0LnB0clRvSW50KAogICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC5mcmFtZUFkZHJlc3NJ
bnRyaW5zaWMoKSwgbV9vdXQuaW50MzJaZXJvKSwgbV9vdXQuaW50UHRyKTsKICAgICAgICAgbV90
YWdUeXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKQEAgLTY4Myw2
ICs3MDcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgICAg
ICBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAg
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25z
dHJ1Y3RWYXJhcmdzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkVmFy
YXJnczoKKyAgICAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncygpOworICAgICAgICAgICAgYnJl
YWs7CiAjaWYgRU5BQkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICAgICAgY2FzZSBO
YXRpdmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKQEAgLTIwNjQsOCArMjA5
NiwyMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgY2hlY2tBcmd1bWVudHNOb3RDcmVhdGVk
KCk7CiAKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBzZXRJbnQzMihtX291dC5hZGQo
bV9vdXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KSksIG1fb3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIGlmIChtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBzZXRJ
bnQzMigKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKAorICAgICAgICAgICAgICAg
ICAgICBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkgLSAxKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lz
dGVyOworICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuYWRkKAor
ICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShwYXlsb2FkRm9yKGFy
Z3VtZW50Q291bnRSZWdpc3RlcikpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKC0xKSkpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldE15
QXJndW1lbnRCeVZhbCgpCkBAIC0yMDc3LDEwICsyMTIzLDE3IEBAIHByaXZhdGU6CiAgICAgICAg
IExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAKICAg
ICAgICAgTFZhbHVlIGxpbWl0OwotICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpCisgICAgICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAg
JiYgIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAgICAgICAg
IGxpbWl0ID0gbV9vdXQuY29uc3RJbnQzMihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSAtIDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsaW1pdCA9IG1f
b3V0LnN1YihtX291dC5sb2FkMzIocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSks
IG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIg
PSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGxpbWl0
ID0gbV9vdXQuc3ViKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3Rl
cikpLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNwZWN1
bGF0ZShVbmNvdW50YWJsZSwgbm9WYWx1ZSgpLCAwLCBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgs
IGxpbWl0KSk7CiAgICAgICAgIApAQCAtMzc4Niw2ICszODM5LDg3IEBAIHByaXZhdGU6CiAgICAg
ICAgIAogICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBqc0Nh
bGxlZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBM
VmFsdWUganNBcmd1bWVudHMgPSBudWxscHRyOworICAgICAgICBMVmFsdWUgdGhpc0FyZyA9IG51
bGxwdHI7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgeworICAgICAg
ICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICAgICAganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYWxsRm9y
d2FyZFZhcmFyZ3M6CisgICAgICAgICAgICB0aGlzQXJnID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFy
Z3M6CisgICAgICAgICAgICBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9
IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3Vt
ZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFw
SUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKHNpemVPZklD
Rm9yKG1fbm9kZSkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQu
cmVmOCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoMSArICEh
anNBcmd1bWVudHMgKyAhIXRoaXNBcmcpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChqc0Nh
bGxlZSk7CisgICAgICAgIGlmIChqc0FyZ3VtZW50cykKKyAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoanNBcmd1bWVudHMpOworICAgICAgICBpZiAodGhpc0FyZykKKyAgICAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQodGhpc0FyZyk7CisgICAgICAgIAorICAgICAgICBjYWxsUHJlZmxpZ2h0
KCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwobV9vdXQucGF0
Y2hwb2ludEludDY0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7CisgICAgICAgIHNldEluc3RydWN0
aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUNDYWxsQ29udik7CisgICAgICAgIAorICAg
ICAgICBtX2Z0bFN0YXRlLmpzQ2FsbFZhcmFyZ3Nlcy5hcHBlbmQoSlNDYWxsVmFyYXJncyhzdGFj
a21hcElELCBtX25vZGUpKTsKKyAgICAgICAgCisgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJhcmdzKCkKKyAgICB7CisgICAgICAg
IExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAg
ICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoID0gdm1DYWxsKAorICAgICAgICAgICAgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwganNBcmd1
bWVudHMsCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOworICAg
ICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBj
YWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAg
ICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0
J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRw
b2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICpp
bnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemlu
Zy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MTQ0OAorICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291
dC5hZGQobGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAg
ICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAg
bV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5s
aW1pdCkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5n
VGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9u
TGFvZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCisgICAgICAgIC8vIG9mIGEg
VmlydHVhbFJlZ2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2NjAKKyAgICAgICAg
TFZhbHVlIG1hY2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCisgICAgICAgICAgICBtX291dC5zdWIo
YWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZhbHVlKCksIG1fY2FsbEZy
YW1lKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKKyAgICAgICAgCisgICAg
ICAgIHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFy
YXJncyksIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgbV9vdXQuY2FzdFRvSW50MzIobWFjaGlu
ZVN0YXJ0KSwganNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSwKKyAg
ICAgICAgICAgIGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5pbXVt
KSk7CisgICAgfQogCiAgICAgdm9pZCBjb21waWxlSnVtcCgpCiAgICAgewpAQCAtNDA5MCw3ICs0
MjI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExWYWx1ZSBj
YWxsID0gbV9vdXQuY2FsbCgKICAgICAgICAgICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludElu
dDY0SW50cmluc2ljKCksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3Rh
Y2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mQ2hlY2tJbigpKSwKKyAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihz
aXplT2ZJbigpKSwKICAgICAgICAgICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBt
X291dC5jb25zdEludDMyKDEpLCBjZWxsKTsKIAogICAgICAgICAgICAgICAgIHNldEluc3RydWN0
aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKQEAgLTY0ODMs
NyArNjYxNyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQnVmZmVyIGlzIG91dCBvZiBzcGFj
ZSwgZmx1c2ggaXQuCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1ZmZlcklzRnVsbCwgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdy
aXRlQmFycmllckJ1ZmZlciksIG1fY2FsbEZyYW1lLCBiYXNlLCBOb0V4Y2VwdGlvbnMpOworICAg
ICAgICB2bUNhbGxOb0V4Y2VwdGlvbnMobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3Jp
dGVCYXJyaWVyQnVmZmVyKSwgbV9jYWxsRnJhbWUsIGJhc2UpOwogICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CkBAIC02NDkyLDQ0ICs2NjI2LDIzIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9
CiAKLSAgICBlbnVtIEV4Y2VwdGlvbkNoZWNrTW9kZSB7IE5vRXhjZXB0aW9ucywgQ2hlY2tFeGNl
cHRpb25zIH07Ci0gICAgCi0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIEV4Y2Vw
dGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIEFyZ3MuLi4g
YXJncykKICAgICB7CiAgICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rpb24pOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmdzLi4uKTsKKyAg
ICAgICAgY2FsbENoZWNrKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIExW
YWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgRXhjZXB0aW9uQ2hlY2tN
b2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0gICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0
KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxKTsK
LSAgICAgICAgY2FsbENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBh
cmcyLCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKLSAgICB7Ci0g
ICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNh
bGwoZnVuY3Rpb24sIGFyZzEsIGFyZzIpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0
aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBFeGNlcHRpb25DaGVj
a01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKLSAgICB7Ci0gICAgICAgIGNhbGxQcmVmbGln
aHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rpb24sIGFyZzEs
IGFyZzIsIGFyZzMpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUg
YXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgRXhjZXB0aW9uQ2hl
Y2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJncz4KKyAgICBMVmFsdWUgdm1DYWxsTm9FeGNlcHRpb25zKExWYWx1ZSBmdW5jdGlv
biwgQXJncy4uLiBhcmdzKQogICAgIHsKICAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywg
YXJnNCk7Ci0gICAgICAgIGNhbGxDaGVjayhtb2RlKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IG1fb3V0LmNhbGwoZnVuY3Rpb24sIGFyZ3MuLi4pOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KLSAgICAKKwogICAgIHZvaWQgY2FsbFByZWZsaWdodChDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCiAgICAgewogICAgICAgICBtX291dC5zdG9yZTMyKApAQCAtNjU0MywxMSArNjY1Niw4IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhbGxQcmVmbGlnaHQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGNhbGxDaGVjayhFeGNlcHRpb25DaGVja01vZGUgbW9k
ZSA9IENoZWNrRXhjZXB0aW9ucykKKyAgICB2b2lkIGNhbGxDaGVjaygpCiAgICAgewotICAgICAg
ICBpZiAobW9kZSA9PSBOb0V4Y2VwdGlvbnMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IAogICAgICAgICBpZiAoT3B0aW9uczo6ZW5hYmxlRXhjZXB0aW9uRnV6eigpKQogICAgICAgICAg
ICAgbV9vdXQuY2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRXhjZXB0aW9uRnV6eikpOwog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNp
b24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzU3LDEzICszNTcsOCBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGNhbGwo
TFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIGJ1aWxk
Q2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IpOyB9CiAgICAgTFZhbHVlIGNhbGwoTFZh
bHVlIGZ1bmN0aW9uKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbik7IH0K
ICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxKSB7IHJldHVybiBi
dWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSk7IH0KLSAgICBMVmFsdWUgY2FsbChM
VmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikgeyByZXR1cm4gYnVpbGRD
YWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIpOyB9Ci0gICAgTFZhbHVlIGNhbGwo
TFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczKSB7
IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMyk7
IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUg
YXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0KSB7IHJldHVybiBidWlsZENhbGwobV9idWls
ZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7IH0KLSAgICBMVmFsdWUgY2Fs
bChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMs
IExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwg
ZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOyB9Ci0gICAgTFZhbHVlIGNh
bGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmcz
LCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2KSB7IHJldHVybiBidWlsZENh
bGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJn
Nik7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFs
dWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFy
ZzYsIExWYWx1ZSBhcmc3KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwg
YXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyk7IH0KLSAgICBMVmFsdWUg
Y2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFy
ZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1ZSBhcmc3LCBM
VmFsdWUgYXJnOCkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEs
IGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzgpOyB9CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExW
YWx1ZSBhcmcxLCBBcmdzLi4uIGFyZ3MpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1
bmN0aW9uLCBhcmcxLCBhcmdzLi4uKTsgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0aW9uVHlwZT4KICAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5jdGlvbikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAxODAx
NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDksNiArNDksMTAgQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICAsIG1v
ZHVsZSgwKQogICAgICwgZnVuY3Rpb24oMCkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDApCisg
ICAgLCBoYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRChVSU5UX01BWCkKKyAg
ICAsIGhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBjYXB0dXJlZFN0
YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQoVUlO
VF9NQVgpCiAgICAgLCB1bndpbmREYXRhU2VjdGlvbigwKQogICAgICwgdW53aW5kRGF0YVNlY3Rp
b25TaXplKDApCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZp
c2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIK
ICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExKU0NhbGwuaCIKKyNp
bmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAj
aW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTcx
LDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaGFuZGxlU3RhY2tPdmVyZmxvd0V4
Y2VwdGlvblN0YWNrbWFwSUQ7CiAgICAgdW5zaWduZWQgaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJ
RDsKICAgICB1bnNpZ25lZCBjYXB0dXJlZFN0YWNrbWFwSUQ7CisgICAgdW5zaWduZWQgdmFyYXJn
c1NwaWxsU2xvdHNTdGFja21hcElEOwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3Jp
cHRvcj4gZ2V0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9yPiBw
dXRCeUlkczsKICAgICBTZWdtZW50ZWRWZWN0b3I8Q2hlY2tJbkRlc2NyaXB0b3I+IGNoZWNrSW5z
OwogICAgIFZlY3RvcjxKU0NhbGw+IGpzQ2FsbHM7CisgICAgVmVjdG9yPEpTQ2FsbFZhcmFyZ3M+
IGpzQ2FsbFZhcmFyZ3NlczsKICAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsK
ICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKICAgICB2b2lkKiB1bndpbmRE
YXRhU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0
LDcgKzEzNCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICByZXR1
cm4gaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxl
clNjb3BlQ2hhaW4pOwogfQogCi11bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU1N0YWNrKiBzdGFjaywgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVk
IG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3Vuc2lnbmVk
IHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1
aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAg
aWYgKCFhcmd1bWVudHMpCkBAIC0xNTYsNiArMTU2LDEzIEBAIHVuc2lnbmVkIHNpemVGcmFtZUZv
clZhcmFyZ3MoQ2FsbEZyYW1lKiAKICAgICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAg
CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwordW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTdGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1lbnRzLCB1
bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit7
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc2l6ZU9mVmFyYXJncyhjYWxsRnJhbWUsIGFyZ3VtZW50
cywgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIAogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUg
PSBjYWxsZWVGcmFtZUZvclZhcmFyZ3MoY2FsbEZyYW1lLCBudW1Vc2VkU3RhY2tTbG90cywgbGVu
Z3RoICsgMSk7CiAgICAgaWYgKGxlbmd0aCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzIHx8ICFz
dGFjay0+ZW5zdXJlQ2FwYWNpdHlGb3IoY2FsbGVlRnJhbWUtPnJlZ2lzdGVycygpKSkgewogICAg
ICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDE4
MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gcGFk
ZGVkQ2FsbGVlRnJhbWVPZmZzZXQpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIHNpemVPZlZhcmFy
Z3MoQ2FsbEZyYW1lKiBleGVjLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJB
cmdPZmZzZXQpOwogICAgIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBl
eGVjLCBKU1N0YWNrKiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Ns
b3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdm9pZCBsb2FkVmFyYXJncyhD
YWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBK
U1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZv
aWQgc2V0dXBWYXJhcmdzRnJhbWUoQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4
ZWNDYWxsZWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwg
dWludDMyX3QgbGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ5LDcgKzE0OSwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFt
ZShDYWxsCiAKICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAg
ICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAg
bV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
aW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpOwogICAgICAgICBtX2ZyYW1lLm1f
Ynl0ZWNvZGVPZmZzZXQgPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAx
ODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMiwxNSArMjEyLDI3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJz
OjpjYWxsRXhjZXB0aW9uRnV6eigKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIH0KIAotQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNr
S2luZCBraW5kKQorQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4
Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2luZCBraW5kLCBFeGNlcHRpb25KdW1wV2lkdGgg
d2lkdGgpCiB7CiAgICAgY2FsbEV4Y2VwdGlvbkZ1enooKTsKKworICAgIGlmICh3aWR0aCA9PSBG
YXJKdW1wV2lkdGgpCisgICAgICAgIGtpbmQgPSAoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVj
ayA/IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgOiBOb3JtYWxFeGNlcHRpb25DaGVjayk7CiAgICAg
CisgICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gYnJhbmNo
VGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVybywgQWJz
b2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CisgICAgcmVzdWx0ID0g
YnJhbmNoVGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVy
bywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CiAjZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIHJldHVybiBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2Vw
dGlvbkNoZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKKyAgICByZXN1bHQgPSBicmFuY2gzMihraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNo
ZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcp
KTsKICNlbmRpZgorICAgIAorICAgIGlmICh3aWR0aCA9PSBOb3JtYWxKdW1wV2lkdGgpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCByZWFsSnVtcCA9IHBh
dGNoYWJsZUp1bXAoKTsKKyAgICByZXN1bHQubGluayh0aGlzKTsKKyAgICAKKyAgICByZXR1cm4g
cmVhbEp1bXAubV9qdW1wOwogfQogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3Ry
dWN0dXJlV2l0aFR5cGVJbmZvKEFzc2VtYmx5SGVscGVycyYgaml0LCBUcnVzdGVkSW1tUHRyIHN0
cnVjdHVyZSwgUmVnaXN0ZXJJRCBkZXN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNiAr
MzM4LDEwIEBAIHB1YmxpYzoKICAgICB9CiAgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKKyAgICAgICAgLy8gTkIuIEl0
J3MgdGVtcHRpbmcgb24gc29tZSBhcmNoaXRlY3R1cmVzIHRvIHNvbWV0aW1lcyB1c2UgYW4gb2Zm
c2V0IGZyb20gdGhlIHN0YWNrCisgICAgICAgIC8vIHJlZ2lzdGVyIGJlY2F1c2UgZm9yIHNvbWUg
b2Zmc2V0cyB0aGF0IHdpbGwgZW5jb2RlIHRvIGEgc21hbGxlciBpbnN0cnVjdGlvbi4gQnV0IHdl
CisgICAgICAgIC8vIGNhbm5vdCBkbyB0aGlzLiBXZSB1c2UgdGhpcyBpbiBwbGFjZXMgd2hlcmUg
dGhlIHN0YWNrIHBvaW50ZXIgaGFzIGJlZW4gbW92ZWQgdG8gc29tZQorICAgICAgICAvLyB1bnBy
ZWRpY3RhYmxlIGxvY2F0aW9uLgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFs
aWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9CkBA
IC0zNjcsMzkgKzM3MSwzOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91
ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgotICAgIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KGlu
dCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChpbnQgc2xvdCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChzbG90ID49IEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXpl
KTsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gSlNTdGFj
azo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpKTsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIEpTU3RhY2s6OkNhbGxl
ckZyYW1lQW5kUENTaXplKSk7CiAgICAgfQogCiAgICAgLy8gQWNjZXNzIHRvIG91ciBmaXhlZCBj
YWxsZWUgQ2FsbEZyYW1lLgotICAgIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRTbG90KGludCBhcmd1
bWVudCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50IGFyZ3VtZW50
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpOwogICAgIH0KIAotICAgIEFkZHJlc3MgY2Fs
bGVlRnJhbWVUYWdTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1l
VGFnU2xvdChpbnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qo
c2xvdCkud2l0aE9mZnNldChUYWdPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJlc3MgY2FsbGVl
RnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFt
ZVBheWxvYWRTbG90KGludCBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1l
U2xvdChzbG90KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJl
c3MgY2FsbGVlQXJndW1lbnRUYWdTbG90KGludCBhcmd1bWVudCkKKyAgICBzdGF0aWMgQWRkcmVz
cyBjYWxsZWVBcmd1bWVudFRhZ1Nsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKICAgICAgICAgcmV0
dXJuIGNhbGxlZUFyZ3VtZW50U2xvdChhcmd1bWVudCkud2l0aE9mZnNldChUYWdPZmZzZXQpOwog
ICAgIH0KIAotICAgIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChpbnQgYXJndW1l
bnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChpbnQgYXJn
dW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlQXJndW1lbnRTbG90KGFyZ3VtZW50
KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpOwogICAgIH0KIAotICAgIEFkZHJlc3MgY2FsbGVl
RnJhbWVDYWxsZXJGcmFtZSgpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVDYWxsZXJG
cmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KDApLndpdGhPZmZz
ZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKICAgICB9CkBAIC01NzEsNyArNTc1
LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAgICAKICAgICBl
bnVtIEV4Y2VwdGlvbkNoZWNrS2luZCB7IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBJbnZlcnRlZEV4
Y2VwdGlvbkNoZWNrIH07Ci0gICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hl
Y2tLaW5kIGtpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjayk7CisgICAgZW51bSBFeGNlcHRpb25K
dW1wV2lkdGggeyBOb3JtYWxKdW1wV2lkdGgsIEZhckp1bXBXaWR0aCB9OworICAgIEp1bXAgZW1p
dEV4Y2VwdGlvbkNoZWNrKAorICAgICAgICBFeGNlcHRpb25DaGVja0tpbmQgPSBOb3JtYWxFeGNl
cHRpb25DaGVjaywgRXhjZXB0aW9uSnVtcFdpZHRoID0gTm9ybWFsSnVtcFdpZHRoKTsKIAogI2lm
IEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKICAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFj
cm9Bc3NlbWJsZXImIGppdCwgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMy
X3QgaW5jcmVtZW50ID0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuaAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3Nyw2ICsxNzc3LDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZElt
bTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKKyAgICB7CisgICAgICAg
IHNldHVwVHdvU3R1YkFyZ3NHUFI8R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjQ+KGFyZzIsIGFyZzQpOworICAgICAgICBtb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIG1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAg
ICAgICAgbW92ZShhcmc1LCBHUFJJbmZvOjphcmd1bWVudEdQUjUpOworICAgICAgICBtb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0K
KwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0ciBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW0zMiBh
cmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKICAgICB7CiAgICAgICAgIHNldHVwVHdvU3R1YkFyZ3NH
UFI8R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjM+KGFyZzIsIGFy
ZzMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE4MDE2
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MDIsNiArNDAyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0
dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVn
aXN0ZXJzOjplc2k7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25Bcmd1
bWVudEdQUiA9IFg4NlJlZ2lzdGVyczo6cjEwOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcGF0
Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IE1hY3JvQXNzZW1ibGVyOjpzY3JhdGNoUmVnaXN0ZXI7
CiAKICAgICBzdGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5zaWduZWQgaW5kZXgpCkBAIC01Nzcs
NiArNTc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVH
UFIgPSBBUk02NFJlZ2lzdGVyczo6eDA7IC8vIHJlZ1QwCiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyByZXR1cm5WYWx1ZUdQUjIgPSBBUk02NFJlZ2lzdGVyczo6eDE7IC8vIHJlZ1QxCiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBBUk02NFJlZ2lzdGVy
czo6eDI7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQ
UiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHBhdGNocG9p
bnRTY3JhdGNoUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6aXAwOwogCiAgICAgLy8gR1BSUmVn
IG1hcHBpbmcgaXMgZGlyZWN0LCB0aGUgbWFjaGluZSByZWdzaXRlciBudW1iZXJzIGNhbgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTgwMTYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjQsMTEgKzQ2
NCw2IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAg
bV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQ
cm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBERkc6OkNhbklubGlu
ZToKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0
aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2Fz
ZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0
cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxODAxNjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNyAr
Mjk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKE9w
Y29kZUlELCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKLSAgICAgICAgdm9pZCBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qKTsK
KyAgICAgICAgdm9pZCBjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qLCBDYWxs
TGlua0luZm8qKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklUOjplbWl0UHV0
Q2FsbFJlc3VsdChJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKLXZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQordm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBpbnQgdGhpc1ZhbHVl
ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CkBAIC05MCw2ICs5MCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZVNl
dHVwVmFyYXJnc0ZyYW1lKEluc3RyCiAgICAgaWYgKGNhbk9wdGltaXplKQogICAgICAgICBlbmQu
bGluayh0aGlzKTsKICAgICAKKyAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAg
IGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dl
c3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRl
ZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmso
dGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBu
b3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJlZ1QwKTsKICAgICBzdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwpAQCAtMTM0LDcgKzE0NCw5IEBA
IHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKIAogdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgaW50IGNhbGxlZSA9IGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQ2FsbExpbmtJbmZvKCk7CisKKyAgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBkYXRlcyBjYWxs
RnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpAQCAtMTUyLDcgKzE2NCw3IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICBDT01QSUxFX0FTU0VS
VChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdz
KSwgY2FsbF9hbmRfY2FsbF92YXJhcmdzX29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CiAg
ICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RI
KG9wX2NvbnN0cnVjdF92YXJhcmdzKSwgY2FsbF9hbmRfY29uc3RydWN0X3ZhcmFyZ3Nfb3Bjb2Rl
c19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQotICAgICAgICBjb21waWxl
U2V0dXBWYXJhcmdzRnJhbWUoaW5zdHJ1Y3Rpb24pOworICAgICAgICBjb21waWxlU2V0dXBWYXJh
cmdzRnJhbWUoaW5zdHJ1Y3Rpb24sIGluZm8pOwogICAgIGVsc2UgewogICAgICAgICBpbnQgYXJn
Q291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByZWdpc3Rlck9m
ZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CkBAIC0xNzYsOSArMTg4LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgc3RvcmU2NChyZWdU
MCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkp
OwogICAgIAotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oKTsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKKyAgIGlmIChv
cGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3Ry
dWN0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYg
KzE1MCw3IEBAIHR5cGVkZWYgaW50NjRfdCBKSVRfT1BFUkFUSU9OKCpRX0pJVE9wZXIKIHR5cGVk
ZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRCkoZG91YmxlKTsKIHR5
cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRl
Kik7CiB0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VDKShF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9K
SVRPcGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CiB0
eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VKWlopKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYgc2l6ZV90
IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEpTQ2VsbCopOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9u
X0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0xODksNiArMTkwLDcgQEAgdHlw
ZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVndzSikoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRj
aHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04g
KCpWX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaSikoRXhlY1N0YXRlKiwgaW50MzJfdCwg
RW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJh
dGlvbl9FWkpaWlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90
LCBpbnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRP
cGVyYXRpb25fRVZtKShFeGVjU3RhdGUqLCBWTSopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX1opKGludDMyX3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHJldmlzaW9uIDE4
MDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTEgKzEwMSwzMSBAQCB2b2lkIGVtaXRTZXR1cFZhcmFy
Z3NGcmFtZUZhc3RDYXNlKENDYWxsCiAKIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENh
c2UoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIHVuc2lnbmVk
IGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93Q2FzZSkKIHsK
LSAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSgKLSAgICAgICAgaml0LCBudW1Vc2Vk
U2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsCi0gICAgICAg
IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFj
azo6QXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJbnQzMiksCi0gICAgICAgIFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKSwKLSAgICAgICAgZmlyc3RWYXJBcmdP
ZmZzZXQsIHNsb3dDYXNlKTsKKyAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShqaXQs
IG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywg
bnVsbHB0ciwgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKK30KKwordm9pZCBlbWl0U2V0
dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRT
bG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBz
Y3JhdGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVuc2lnbmVkIGZp
cnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93Q2FzZSkKK3sKKyAg
ICBWYWx1ZVJlY292ZXJ5IGFyZ3VtZW50Q291bnRSZWNvdmVyeTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZmlyc3RBcmd1bWVudFJlZzsKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBhcmd1bWVu
dENvdW50UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAg
ICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIsIERhdGFG
b3JtYXRJbnQzMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcmd1bWVudENvdW50
UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCgKKyAgICAgICAgICAgICAgICBqc051
bWJlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpID4gMSkKKyAgICAgICAg
ICAgIGZpcnN0QXJndW1lbnRSZWcgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJl
ZyA9IFZpcnR1YWxSZWdpc3RlcigwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudENv
dW50UmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIERhdGFGb3JtYXRJ
bnQzMik7CisgICAgICAgIGZpcnN0QXJndW1lbnRSZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lOjphcmd1bWVudE9mZnNldCgwKSk7CisgICAgfQorICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFt
ZUZhc3RDYXNlKGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3ZlcnksIGZpcnN0QXJndW1lbnRSZWcsIGZp
cnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2V0dXBWYXJhcmdzRnJhbWUuaAkocmV2
aXNpb24gMTgwMTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NG
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIHZvaWQgZW1pdFNldHVwVmFy
YXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwKIC8vIFZhcmlhbnQgdGhhdCBhc3N1bWVzIG5vcm1hbCBz
dGFjayBmcmFtZS4KIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcg
c2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZz
ZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKIAorLy8gVmFyaWFudCBmb3Ig
cG90ZW50aWFsbHkgaW5saW5lZCBzdGFjayBmcmFtZXMuCit2b2lkIGVtaXRTZXR1cFZhcmFyZ3NG
cmFtZUZhc3RDYXNlKENDYWxsSGVscGVycyYsIEdQUlJlZyBudW1Vc2VkU2xvdHNHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBHUFJSZWcgc2NyYXRjaEdQUjMsIElu
bGluZUNhbGxGcmFtZSosIHVuc2lnbmVkIGZpcnN0VmFyQXJnT2Zmc2V0LCBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0JiBzbG93Q2FzZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5oCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgQXJndW1lbnRzTW9kZSBt
b2RlID0gTm9ybWFsQXJndW1lbnRzQ3JlYXRpb25Nb2RlKQogICAgIHsKLSAgICAgICAgQXJndW1l
bnRzKiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KHZt
LmhlYXAsIG9mZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJheVNpemVJ
bkJ5dGVzKGlubGluZUNhbGxGcmFtZSkpKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKKyAgICAgICAg
QXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcmd1bWVu
dHM+KHZtLmhlYXAsIG9mZnNldE9mSW5saW5lUmVnaXN0ZXJBcnJheSgpICsgcmVnaXN0ZXJBcnJh
eVNpemVJbkJ5dGVzKGNhbGxGcmFtZSwgaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3VtZW50cyhjYWxs
RnJhbWUpOwogICAgICAgICBhcmd1bWVudHMtPmZpbmlzaENyZWF0aW9uKGNhbGxGcmFtZSwgaW5s
aW5lQ2FsbEZyYW1lLCBtb2RlKTsKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKICAgICB9CkBA
IC0xMjQsNyArMTI0LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVTdHJpY3RNb2RlQ2Fs
bGVlSWZOZWNlc3NhcnkoRXhlY1N0YXRlKik7CiAKICAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVy
QXJyYXlTaXplSW5CeXRlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgfQotICAg
IHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAq
IChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsgfQorICAgIHN0YXRpYyBz
aXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICogKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgfQogICAgIGJvb2wg
aXNBcmd1bWVudChzaXplX3QpOwogICAgIGJvb2wgdHJ5U2V0QXJndW1lbnQoVk0mLCBzaXplX3Qg
YXJndW1lbnQsIEpTVmFsdWUpOwogICAgIEpTVmFsdWUgdHJ5R2V0QXJndW1lbnQoc2l6ZV90IGFy
Z3VtZW50KTsKQEAgLTM0MCwxMSArMzQ4LDE1IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6Zmlu
aXNoQ3JlYXRpb24oQ2EKICAgICBtX292ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CiAgICAgbV9vdmVy
cm9kZUNhbGxlciA9IGZhbHNlOwogICAgIG1faXNTdHJpY3RNb2RlID0ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmlzU3RyaWN0
TW9kZSgpOwotCisgICAgCisgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJl
Z2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBjYWxsRnJhbWUtPnIo
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJ
bnQzMigpOworICAgIGVsc2UKKyAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgbV9udW1Bcmd1bWVudHMtLTsKKyAgICAKICAgICBz
d2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9kZTogewot
ICAgICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSAtIDE7Ci0gICAgICAgIAogICAgICAgICBpZiAobV9udW1Bcmd1bWVudHMpIHsKICAgICAgICAg
ICAgIGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
WzFdLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAgICAgICAgbV9yZWdpc3RlcnMg
PSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qPihjYWxsRnJhbWUt
PnJlZ2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50T25lIC0gdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMSkub2Zmc2V0KCk7CkBAIC0zNjEsNyArMzczLDYgQEAgaW5saW5lIHZvaWQgQXJn
dW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDbG9u
ZWRBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwogICAgICAgICBpZiAobV9udW1Bcmd1
bWVudHMpIHsKICAgICAgICAgICAgIGludCBvZmZzZXRGb3JBcmd1bWVudE9uZSA9IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwogICAgICAg
ICAgICAgbV9yZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSArIG9mZnNldEZvckFyZ3VtZW50T25lIC0g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxODAxNjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2
ICsyMTEsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICAvKiBmcm9t
IHN1cGVyIGxvbmcgY29tcGlsZXMgdGhhdCB0YWtlIGEgbG90IG9mIG1lbW9yeS4gKi9cCiAgICAg
dih1bnNpZ25lZCwgbWF4aW11bUlubGluaW5nQ2FsbGVyU2l6ZSwgMTAwMDApIFwKICAgICBcCisg
ICAgdih1bnNpZ25lZCwgbWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZywgMTAwKSBcCisgICAgXAog
ICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcsIHRydWUpIFwKICAgICB2
KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50QnlJZElubGluaW5nLCB0cnVlKSBcCiAgICAgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1p
bmxpbmUtc21hbGxlci1Gb28uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1pbmxpbmUtc21hbGxlci1Gb28uanMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVj
dC12YXJhcmdzLWlubGluZS1zbWFsbGVyLUZvby5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM1IEBACitmdW5jdGlvbiBGb28oYSwgYikgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5w
dXNoKGFyZ3VtZW50c1tpXSk7CisgICAgdGhpcy5mID0gYXJyYXk7Cit9CisKK2Z1bmN0aW9uIGJh
cihhcnJheSkgeworICAgIHJldHVybiBuZXcgRm9vKC4uLmFycmF5KTsKK30KKworbm9JbmxpbmUo
YmFyKTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAgaWYgKGEubGVuZ3RoICE9
IGIubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGgg
bWlzbWF0Y2g6ICIgKyBhICsgIiB2ZXJzdXMgIiArIGI7CisgICAgZm9yICh2YXIgaSA9IGEubGVu
Z3RoOyBpLS07KSB7CisgICAgICAgIGlmIChhW2ldICE9IGJbaV0pCisgICAgICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsg
YSArICIgdmVyc3VzICIgKyBiOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgewor
ICAgIHZhciBleHBlY3RlZCA9IGFycmF5OworICAgIHZhciBhY3R1YWwgPSBiYXIoYXJyYXkpLmY7
CisgICAgY2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsKK30KKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNoKGopOworICAgIHRlc3QoYXJy
YXkpOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0
cnVjdC12YXJhcmdzLWlubGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLWlubGluZS5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29uc3RydWN0LXZhcmFyZ3Mt
aW5saW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKK2Z1bmN0aW9uIEZvbyhh
LCBiKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1
bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ldKTsKKyAg
ICB0aGlzLmYgPSB7YTphLCBiOmIsIGM6YXJyYXl9OworfQorCitmdW5jdGlvbiBiYXIoYXJyYXkp
IHsKKyAgICByZXR1cm4gbmV3IEZvbyguLi5hcnJheSk7Cit9CisKK25vSW5saW5lKGJhcik7CisK
K2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgeworICAgIGlmIChhLmEgIT0gYi5hKQorICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiArIGIu
YTsKKyAgICBpZiAoYS5iICE9IGIuYikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUg
b2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7CisgICAgaWYgKGEuYy5sZW5ndGggIT0g
Yi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3Ro
IG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBmb3IgKHZhciBpID0g
YS5jLmxlbmd0aDsgaS0tOykgeworICAgICAgICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsg
aSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIH0KK30KKworZnVuY3Rpb24g
dGVzdChhcnJheSkgeworICAgIHZhciBleHBlY3RlZCA9IHthOmFycmF5WzBdLCBiOmFycmF5WzFd
LCBjOmFycmF5fTsKKyAgICB2YXIgYWN0dWFsID0gYmFyKGFycmF5KS5mOworICAgIGNoZWNrRXF1
YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAlIDY7
ICsraikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAgICB0ZXN0KGFycmF5KTsKK30KKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1u
by1pbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1uby1pbmxpbmUuanMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLW5vLWlubGlu
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACitmdW5jdGlvbiBGb28oYSwgYikg
eworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRz
Lmxlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgdGhp
cy5mID0ge2E6YSwgYjpiLCBjOmFycmF5fTsKK30KKworbm9JbmxpbmUoRm9vKTsKKworZnVuY3Rp
b24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJuIG5ldyBGb28oLi4uYXJyYXkpOworfQorCitub0lu
bGluZShiYXIpOworCitmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAgICBpZiAoYS5hICE9
IGIuYSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTogIiArIGEuYSArICIg
dmVyc3VzICIgKyBiLmE7CisgICAgaWYgKGEuYiAhPSBiLmIpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5iOworICAgIGlmIChh
LmMubGVuZ3RoICE9IGIuYy5sZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVl
IG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAg
Zm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGEuY1tpXSAhPSBi
LmNbaV0pCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRj
aCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICB2YXIgZXhwZWN0ZWQgPSB7YTphcnJheVsw
XSwgYjphcnJheVsxXSwgYzphcnJheX07CisgICAgdmFyIGFjdHVhbCA9IGJhcihhcnJheSkuZjsK
KyAgICBjaGVja0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQorCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBqID0g
MDsgaiA8IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7CisgICAgdGVzdChhcnJh
eSk7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LWFy
Z3VtZW50LWJ5LXZhbC1pbi1pbmxpbmVkLXZhcmFyZ3MtY2FsbC1vdXQtb2YtYm91bmRzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LWFyZ3Vt
ZW50LWJ5LXZhbC1pbi1pbmxpbmVkLXZhcmFyZ3MtY2FsbC1vdXQtb2YtYm91bmRzLmpzCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtYXJndW1l
bnQtYnktdmFsLWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91dC1vZi1ib3VuZHMuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAordmFyIGdpOworCitmdW5jdGlvbiBmb28oKSB7Cisg
ICAgcmV0dXJuIGFyZ3VtZW50c1tnaV07Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSwgaSkgewor
ICAgIGdpID0gaTsKKyAgICByZXR1cm4gZm9vLmFwcGx5KHRoaXMsIGFycmF5KTsKK30KKworbm9J
bmxpbmUoYmFyKTsKKwordmFyIGJpZ0FycmF5ID0gW107Citmb3IgKHZhciBpID0gMDsgaSA8IDUw
OyArK2kpCisgICAgYmlnQXJyYXkucHVzaCg0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgIHZhciBtaSA9IGkgJSA1MDsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKGJp
Z0FycmF5LCBtaSk7CisgICAgaWYgKHJlc3VsdCAhPT0gNDIpCisgICAgICAgIHRocm93ICJCYWQg
cmVzdWx0IGluIGZpcnN0IGxvb3A6ICIgKyByZXN1bHQgKyAiOyBleHBlY3RlZDogIiArIDQyOwor
fQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgbWkgPSBpICUg
MTAwOworICAgIHZhciByZXN1bHQgPSBiYXIoWzQyXSwgbWkpOworICAgIHZhciBleHBlY3RlZCA9
IG1pID8gdm9pZCAwIDogNDI7CisgICAgaWYgKHJlc3VsdCAhPT0gZXhwZWN0ZWQpCisgICAgICAg
IHRocm93ICJCYWQgcmVzdWx0IGluIHNlY29uZCBsb29wOiAiICsgcmVzdWx0ICsgIjsgZXhwZWN0
ZWQ6ICIgKyBleHBlY3RlZDsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvZ2V0LWFyZ3VtZW50LWJ5LXZhbC1zYWZlLWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91
dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLXNhZmUtaW4taW5saW5lZC12YXJhcmdzLWNhbGwt
b3V0LW9mLWJvdW5kcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvZ2V0LWFyZ3VtZW50LWJ5LXZhbC1zYWZlLWluLWlubGluZWQtdmFyYXJncy1j
YWxsLW91dC1vZi1ib3VuZHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAordmFy
IGdpOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgaWYgKCFlZmZlY3RmdWw0MigpKQorICAgICAg
ICBhcmd1bWVudHMgPSAiaGVsbG8iOworICAgIHJldHVybiBhcmd1bWVudHNbZ2ldOworfQorCitm
dW5jdGlvbiBiYXIoYXJyYXksIGkpIHsKKyAgICBnaSA9IGk7CisgICAgcmV0dXJuIGZvby5hcHBs
eSh0aGlzLCBhcnJheSk7Cit9CisKK25vSW5saW5lKGJhcik7CisKK3ZhciBiaWdBcnJheSA9IFtd
OworZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKQorICAgIGJpZ0FycmF5LnB1c2goNDIpOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgbWkgPSBpICUgNTA7
CisgICAgdmFyIHJlc3VsdCA9IGJhcihiaWdBcnJheSwgbWkpOworICAgIGlmIChyZXN1bHQgIT09
IDQyKQorICAgICAgICB0aHJvdyAiQmFkIHJlc3VsdCBpbiBmaXJzdCBsb29wOiAiICsgcmVzdWx0
ICsgIjsgZXhwZWN0ZWQ6ICIgKyA0MjsKK30KKworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAw
OyArK2kpIHsKKyAgICB2YXIgbWkgPSBpICUgMTAwOworICAgIHZhciByZXN1bHQgPSBiYXIoWzQy
XSwgbWkpOworICAgIHZhciBleHBlY3RlZCA9IG1pID8gdm9pZCAwIDogNDI7CisgICAgaWYgKHJl
c3VsdCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93ICJCYWQgcmVzdWx0IGluIHNlY29uZCBs
b29wOiAiICsgcmVzdWx0ICsgIjsgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZDsKK30KKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtbXktYXJndW1lbnQtYnktdmFs
LWNyZWF0ZXMtYXJndW1lbnRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvZ2V0LW15LWFyZ3VtZW50LWJ5LXZhbC1jcmVhdGVzLWFyZ3VtZW50cy5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0
LW15LWFyZ3VtZW50LWJ5LXZhbC1jcmVhdGVzLWFyZ3VtZW50cy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQyIEBACitmdW5jdGlvbiBibGFoKGFyZ3MpIHsKKyAgICB2YXIgYXJyYXkgPSBb
XTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpCisgICAgICAgIGFy
cmF5LnB1c2goYXJnc1tpXSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCitmdW5jdGlvbiBmb28o
KSB7CisgICAgLy8gRm9yY2UgY3JlYXRpb24gb2YgYXJndW1lbnRzIGJ5IGRvaW5nIG91dC1vZi1i
b3VuZHMgYWNjZXNzLgorICAgIHZhciB0bXAgPSBhcmd1bWVudHNbNDJdOworICAgIAorICAgIC8v
IFVzZSB0aGUgY3JlYXRlZCBhcmd1bWVudHMgb2JqZWN0LgorICAgIHJldHVybiBibGFoKGFyZ3Vt
ZW50cyk7Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSkgeworICAgIHJldHVybiBmb28uYXBwbHko
dGhpcywgYXJyYXkpOworfQorCitub0lubGluZShibGFoKTsKK25vSW5saW5lKGJhcik7CisKK2Z1
bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhICsgIiB2ZXJzdXMg
IiArIGI7CisgICAgZm9yICh2YXIgaSA9IGEubGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChh
W2ldICE9IGJbaV0pCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IG1pc21hdGNoIGF0IGkgPSAi
ICsgaSArICI6ICIgKyBhICsgIiB2ZXJzdXMgIiArIGI7CisgICAgfQorfQorCitmdW5jdGlvbiB0
ZXN0KGFycmF5KSB7CisgICAgdmFyIGFjdHVhbCA9IGJhcihhcnJheSk7CisgICAgY2hlY2tFcXVh
bChhY3R1YWwsIGFycmF5KTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7
CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICUgNjsgKytq
KQorICAgICAgICBhcnJheS5wdXNoKGopOworICAgIHRlc3QoYXJyYXkpOworfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVk
LWNhbGwtZXhpdC1pbi1mb28uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtZXhpdC1pbi1mb28u
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xv
YWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1leGl0LWluLWZvby5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ2IEBACitmdW5jdGlvbiBmb28oYSwgYikgeworICAgIHZhciBhcnJheSA9
IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQorICAg
ICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSArIDEpOworICAgIHJldHVybiB7YTphLCBiOmIs
IGM6YXJyYXl9OworfQorCitmdW5jdGlvbiBiYXIoYXJyYXkpIHsKKyAgICByZXR1cm4gZm9vLmFw
cGx5KHRoaXMsIGFycmF5KTsKK30KKworbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gY2hlY2tF
cXVhbChhLCBiKSB7CisgICAgaWYgKGEuYSAhPSBiLmEpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAiICsgYi5hOworICAgIGlmIChhLmIg
IT0gYi5iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsg
IiB2ZXJzdXMgIiArIGIuYjsKKyAgICBpZiAoYS5jLmxlbmd0aCAhPSBiLmMubGVuZ3RoKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBh
LmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07
KSB7CisgICAgICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQorICAgICAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyAr
ICIgdmVyc3VzICIgKyBiLmM7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7Cisg
ICAgdmFyIGV4cGVjdGVkID0ge2E6YXJyYXlbMF0sIGI6YXJyYXlbMV0sIGM6YXJyYXkubWFwKGZ1
bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZSArIDEgfSl9OworICAgIHZhciBhY3R1YWwgPSBi
YXIoYXJyYXkpOworICAgIGNoZWNrRXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9CisKKy8vIFRo
aXMgaXMgcHJldHR5IGR1bWIuIFdlIG5lZWQgdG8gZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIFZN
IGlzIHByZXBhcmVkIGZvciBkb3VibGUgYXJyYXlzIGJlaW5nCisvLyBjcmVhdGVkLgordmFyIGFy
cmF5ID0gW107CithcnJheS5wdXNoKDQyKTsKK2FycmF5LnB1c2goNDIuNSk7CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgaSAlIDY7ICsraikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAgICB0
ZXN0KGFycmF5KTsKK30KKwordGVzdChbMS41LCAyLjUsIDMuNV0pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2Fk
LXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACitmdW5jdGlvbiBmb28oYSwgYikgewor
ICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxl
bmd0aDsgKytpKQorICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgcmV0dXJu
IHthOmEsIGI6YiwgYzphcnJheX07Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSkgeworICAgIHJl
dHVybiBmb28uYXBwbHkodGhpcywgYXJyYXkpOworfQorCitub0lubGluZShiYXIpOworCitmdW5j
dGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAgICBpZiAoYS5hICE9IGIuYSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTogIiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7Cisg
ICAgaWYgKGEuYiAhPSBiLmIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6
ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5iOworICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5s
ZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNt
YXRjaDogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgZm9yICh2YXIgaSA9IGEuYy5s
ZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0pCisgICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAi
OiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Qo
YXJyYXkpIHsKKyAgICB2YXIgZXhwZWN0ZWQgPSB7YTphcnJheVswXSwgYjphcnJheVsxXSwgYzph
cnJheX07CisgICAgdmFyIGFjdHVhbCA9IGJhcihhcnJheSk7CisgICAgY2hlY2tFcXVhbChhY3R1
YWwsIGV4cGVjdGVkKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Cisg
ICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICUgNjsgKytqKQor
ICAgICAgICBhcnJheS5wdXNoKGopOworICAgIHRlc3QoYXJyYXkpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246706</attachid>
            <date>2015-02-16 17:06:08 -0800</date>
            <delta_ts>2015-02-16 20:49:09 -0800</delta_ts>
            <desc>64-bit tests pass</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>238007</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODAxODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
MTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFB
OEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAv
KiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJD
OTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0Yg
LyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAx
NDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2Nh
dGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxs
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAw
MEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8q
IFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICov
LAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAq
LywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
LAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkw
RjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBA
QAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4
NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiAr
NDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRy
dXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVy
c2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNy
Y0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQo
aW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0z
MkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMzQsNiArMzM0LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
bXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgxLDYgKzg4MSwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJ
YiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
ODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgw
KQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBw
dWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNp
Z25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDog
ODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3
ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAg
Ly8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1
ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0o
cHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZv
KGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1f
bWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxs
TGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkK
K3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9j
b3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBi
b29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAo
IW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1w
KG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIENh
bGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAg
bV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApA
QCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29u
c3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAg
LTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkg
Y29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgog
ICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAg
IGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0
LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAg
IENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFy
Z3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNv
cnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAg
ICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZh
cmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAg
cmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVy
Q2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVG
b3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2lu
ZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBpc1Zh
cmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhl
Y3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVD
YWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJl
ZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51
bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtp
bmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4
OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wg
aXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9z
Y29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFi
bGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBj
b2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9s
bG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENv
ZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtp
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzRXNjYXBlZCI7CiAgICAgY2FzZSBOb3RTdHJpbmdP
YmplY3Q6CiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKKyAgICBjYXNlIFZhcmFy
Z3NPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZsb3ciOwogICAgIGNhc2Ug
VW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGUiOwogICAgIGNhc2UgVW5j
b3VudGFibGVJbnZhbGlkYXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEluYWRlcXVhdGVDb3ZlcmFnZSwgLy8gV2UgZXhp
dGVkIGJlY2F1c2Ugd2UgZW5kZWQgdXAgaW4gY29kZSB0aGF0IGRpZG4ndCBoYXZlIHByb2ZpbGlu
ZyBjb3ZlcmFnZS4KICAgICBBcmd1bWVudHNFc2NhcGVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
cmd1bWVudHMgZXNjYXBlZCBidXQgd2UgZGlkbid0IGV4cGVjdCB0aGVtIHRvLgogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgorICAgIFZhcmFyZ3NPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB2YXJhcmdzIGNhbGwgcGFzc2VkIG1vcmUgYXJndW1l
bnRzIHRoYW4gd2UgZXhwZWN0ZWQuCiAgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Ig
bm9uZSBvZiB0aGUgYWJvdmUgcmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1v
c3QgdXNlcyBvZiB0aGlzIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgdGhlIGNvZGUgYmxvY2sgd2Fz
IGludmFsaWRhdGVkOyB0aGlzIG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSBjb3VudGVkIHRoZSBy
ZWFzb25zIHdoeSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQuCiAgICAgV2F0Y2hkb2dU
aW1lckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdh
dGNoZG9nIHRpbWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05MiwyNSArOTIsMjUgQEAgdm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wSW5Db250ZXh0KFBy
aW50UwogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgb3V0LnByaW50ZigiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkp
OworICAgICAgICBvdXQucHJpbnQoIioiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJp
bnRmKCIqaW50MzIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBv
dXQucHJpbnQoIippbnQzMigiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmlu
dGYoIippbnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CisgICAgICAgIG91
dC5wcmludCgiKmludDUyKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgb3V0
LnByaW50ZigiKnN0cmljdEludDUyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsK
KyAgICAgICAgb3V0LnByaW50KCIqc3RyaWN0SW50NTIoIiwgdmlydHVhbFJlZ2lzdGVyKCksICIp
Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgb3V0LnByaW50ZigiKmRvdWJsZSglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZz
ZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKmRvdWJsZSgiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwg
IikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoK
LSAgICAgICAgb3V0LnByaW50ZigiKmNlbGwoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkpOworICAgICAgICBvdXQucHJpbnQoIipjZWxsKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICBvdXQucHJpbnRmKCIqYm9vbCglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQo
KSk7CisgICAgICAgIG91dC5wcmludCgiKmJvb2woIiwgdmlydHVhbFJlZ2lzdGVyKCksICIpIik7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoK
ICAgICAgICAgb3V0LnByaW50ZigiYXJndW1lbnRzIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk0LDkgKzE5NCwy
MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFNldEFyZ3VtZW50OgotICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUg
c3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRl
LmJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7
CisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4g
c2V0LiBTZXRBcmd1bWVudCBtZWFucyB0aGF0IHNvbWVvbmUgc2V0CisgICAgICAgIC8vIHRoZSBh
cmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVh
bnMgc2V0dGluZyB0byBhCisgICAgICAgIC8vIG5vbi1jbGVhciB2YWx1ZS4KKyAgICAgICAgQVNT
RVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigp
KTsKICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7
CisgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5jb3VudCkuc2V0VHlw
ZShTcGVjSW50MzIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7
IGktLTspCisgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+c3Rh
cnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgpAQCAtMTMyNCw3
ICsxMzM1LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmlj
aWVudCB0byBmb3JjZSBjb25zdGFudCBmb2xkaW5nCiAgICAgICAgIC8vIG9mIEdldE15QXJndW1l
bnRzTGVuZ3RoLCBiZWNhdXNlIEdldE15QXJndW1lbnRzTGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBv
cGVyYXRpb24uCiAgICAgICAgIC8vIFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9u
IHRoaXMgbGF0ZXIgb24uCi0gICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIHNldENvbnN0YW50KAogICAgICAgICAg
ICAgICAgIG5vZGUsIGpzTnVtYmVyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CiAgICAgICAgICAgICBtX3N0YXRlLnNldERpZENs
b2JiZXIodHJ1ZSk7IC8vIFByZXRlbmQgdGhhdCB3ZSBjbG9iYmVyZWQgdG8gcHJldmVudCBjb25z
dGFudCBmb2xkaW5nLgpAQCAtMTk3Myw2ICsxOTg1LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZl
Q2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgor
ICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAzLDYgKzUwMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghb3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IGtub3cgZXhhY3RseSB3aGF0IHRoaXMgd2lsbCByZXR1cm4uIEJ1dCBvbmx5IGFmdGVyIHdlIGhh
dmUgY2hlY2tlZAogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IG5vYm9keSBoYXMgZXNjYXBl
ZCBvdXIgYXJndW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAs
NyArMTcwLDggQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBIZWxwZXIgZm9yIG1pbiBhbmQg
bWF4LgotICAgIGJvb2wgaGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBv
cCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBoYW5kbGVNaW5N
YXgoaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0
Q2hlY2tzKTsKICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVz
IHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgogICAgIHZvaWQgaGFuZGxlQ2Fs
bCgKQEAgLTE4MiwyMCArMTgzLDI1IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIGNhbGxUYXJn
ZXQsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDYWxsTGlua1N0YXR1cyk7CiAg
ICAgdm9pZCBoYW5kbGVDYWxsKGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsIGludCBjYWxsZWUsIGludCBhcmdD
b3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUNhbGwoSW5zdHJ1Y3Rp
b24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci0gICAgdm9pZCBl
bWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdp
c3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci0gICAgdm9pZCB1bmRvRnVuY3Rp
b25DaGVja3MoQ2FsbFZhcmlhbnQpOworICAgIHZvaWQgaGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1
Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgdm9p
ZCBlbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQsIE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1
YWxSZWdpc3RlciB0aGlzQXJndW1udCk7CiAgICAgdm9pZCBlbWl0QXJndW1lbnRQaGFudG9tcyhp
bnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CiAgICAgdW5zaWduZWQgaW5saW5pbmdDb3N0KENhbGxWYXJpYW50
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OyAvLyBSZXR1cm4gVUlOVF9NQVggaWYgaXQncyBub3QgYW4gaW5saW5pbmcgY2FuZGlkYXRlLiBC
eSBjb252ZW50aW9uLCBpbnRyaW5zaWNzIGhhdmUgYSBjb3N0IG9mIDEuCiAgICAgLy8gSGFuZGxl
IGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQg
dG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbik7CisgICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVuc2lnbmVkIGFyZ3VtZW50c09mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxs
T3AsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAg
ICAgZW51bSBDYWxsZXJMaW5rYWJpbGl0eSB7IENhbGxlckRvZXNOb3JtYWxMaW5raW5nLCBDYWxs
ZXJMaW5rc01hbnVhbGx5IH07Ci0gICAgYm9vbCBhdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNh
bGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlKTsKLSAgICB2b2lkIGlu
bGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFy
aWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2Fi
aWxpdHkpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBh
dHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFu
ZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIENh
bGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5s
aW5pbmdCYWxhbmNlLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5LCBjb25zdCBD
aGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwogICAgIHZvaWQgY2FuY2VsTGlua2luZ0ZvckJs
b2NrKElubGluZVN0YWNrRW50cnkqLCBCYXNpY0Jsb2NrKik7IC8vIE9ubHkgd29ya3Mgd2hlbiB0
aGUgZ2l2ZW4gYmxvY2sgaXMgdGhlIGxhc3Qgb25lIHRvIGhhdmUgYmVlbiBhZGRlZCBmb3IgdGhh
dCBpbmxpbmUgc3RhY2sgZW50cnkuCiAgICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMu
IFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBh
IGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJp
bnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwotICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNv
bnN0cnVjdG9yKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBl
KTsKLSAgICBib29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3Bl
cmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBDaGVj
a3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1
bmN0b3I+CisgICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoaW50IHJlc3VsdE9w
ZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3Im
IGluc2VydENoZWNrcyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAg
ICBib29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwg
SW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9y
JiBpbnNlcnRDaGVja3MpOwogICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7CiAgICAg
Tm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIGNvbnN0
IFN0cnVjdHVyZVNldCYsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
LCBOb2RlVHlwZSBvcCA9IEdldEJ5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdldEJ5SWQoCkBA
IC01MjgsNiArNTM0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QoaW5s
aW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxs
ZWUpKSk7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAg
ICAgICAgICAgICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5saW5lU3RhY2tFbnRyeS0+bV9jb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IG51
bUFyZ3VtZW50czsgYXJndW1lbnQtLSA+IDE7KQpAQCAtNjU0LDEzICs2NjIsNiBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlbW92ZUxh
c3ROb2RlRnJvbUdyYXBoKE5vZGVUeXBlIGV4cGVjdGVkTm9kZVR5cGUpCi0gICAgewotICAgICAg
ICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnRha2VMYXN0KCk7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gZXhwZWN0ZWROb2RlVHlwZSk7Ci0gICAgICAgIG1fZ3Jh
cGgubV9hbGxvY2F0b3IuZnJlZShub2RlKTsKLSAgICB9Ci0KICAgICB2b2lkIGFkZFZhckFyZ0No
aWxkKE5vZGUqIGNoaWxkKQogICAgIHsKICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
LmFwcGVuZChFZGdlKGNoaWxkKSk7CkBAIC02OTEsNyArNjkyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIG9wLCBvcEluZm8sIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVk
aWN0aW9uKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOwogICAg
ICAgICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0KSwgY2FsbCk7CisgICAgICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsK
ICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogICAgIApAQCAtMTA0Miw4ICsxMDQzLDggQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKIHsKICAgICBBU1NFUlQocmVnaXN0ZXJP
ZmZzZXQgPD0gMCk7CiAgICAgCi0gICAgaWYgKGNhbGxUYXJnZXQtPmhhc0NvbnN0YW50KCkpCi0g
ICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXMoY2FsbFRhcmdldC0+YXNKU1Zh
bHVlKCkpLnNldElzUHJvdmVkKHRydWUpOworICAgIGlmIChjYWxsVGFyZ2V0LT5pc0NlbGxDb25z
dGFudCgpKQorICAgICAgICBjYWxsTGlua1N0YXR1cy5zZXRQcm92ZW5Db25zdGFudENhbGxlZShD
YWxsVmFyaWFudChjYWxsVGFyZ2V0LT5hc0NlbGwoKSkpOwogICAgIAogICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBIYW5k
bGluZyBjYWxsIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3RhdHVz
LCAiXG4iKTsKQEAgLTEwNjAsNyArMTA2MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNhbGwoCiAgICAgCiAgICAgT3BJbmZvIGNhbGxPcEluZm87CiAgICAgCi0gICAgaWYgKGhhbmRs
ZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zm
c2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwgb3AsIGtpbmQsIHBy
ZWRpY3Rpb24pKSB7CisgICAgaWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwg
Y2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zmc2V0LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgwLCByZWdpc3Rlck9mZnNldCksIFZpcnR1YWxSZWdpc3RlcigpLCAwLCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwgb3AsIGtpbmQsIHByZWRpY3Rpb24pKSB7CiAgICAg
ICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBp
bGF0aW9uKCktPm5vdGljZUlubGluZWRDYWxsKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNzIs
NyArMTA3Myw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0gY2FsbGVlLmZ1bmN0aW9uKCk7CiAgICAgICAgIENvZGVTcGVj
aWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVj
aWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CiAgICAgICAgIGlmIChmdW5jdGlvbiAmJiBmdW5jdGlv
bi0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNh
bGxlZSwgY2FsbFRhcmdldCwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7Cisg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbGVlLCBjYWxsVGFyZ2V0LCB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwogICAgICAgICAgICAgY2Fs
bE9wSW5mbyA9IE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShmdW5jdGlvbikpOwogCiAgICAgICAgICAg
ICBpZiAob3AgPT0gQ2FsbCkKQEAgLTEwODgsMTEgKzEwODksNTQgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlQ2FsbCgKICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxPcEluZm8sIGNh
bGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgcHJl
ZGljdGlvbik7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhD
YWxsVmFyaWFudCBjYWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
VmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQogewotICAgIE5vZGUqIHRoaXNBcmd1bWVudDsKKyAgICBBU1NFUlQoT1BD
T0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0
X3ZhcmFyZ3MpKTsKKyAgICAKKyAgICBpbnQgcmVzdWx0ID0gcGNbMV0udS5vcGVyYW5kOworICAg
IGludCBjYWxsZWUgPSBwY1syXS51Lm9wZXJhbmQ7CisgICAgaW50IHRoaXNSZWcgPSBwY1szXS51
Lm9wZXJhbmQ7CisgICAgaW50IGFyZ3VtZW50cyA9IHBjWzRdLnUub3BlcmFuZDsKKyAgICBpbnQg
Zmlyc3RGcmVlUmVnID0gcGNbNV0udS5vcGVyYW5kOworICAgIGludCBmaXJzdFZhckFyZ09mZnNl
dCA9IHBjWzZdLnUub3BlcmFuZDsKKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gZ2V0UHJlZGljdGlvbigpOworICAgIAorICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKGNhbGxlZSkpOworICAgIAorICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5r
U3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKKyAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9jYWxsTGlua0luZm9zLCBtX2NhbGxDb250ZXh0TWFwKTsKKyAgICBp
ZiAoY2FsbFRhcmdldC0+aXNDZWxsQ29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMu
c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQoY2FsbFRhcmdldC0+YXNDZWxsKCkp
KTsKKyAgICAKKyAgICBpZiAoY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKQorICAgICAgICAm
JiBoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCBmaXJz
dEZyZWVSZWcsIFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSwgVmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cyksIGZpcnN0VmFyQXJnT2Zmc2V0LCAwLCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfY2FsbF92YXJhcmdzKSwgb3AsIElubGluZUNhbGxGcmFtZTo6dmFyYXJnc0tpbmRGb3Io
a2luZCksIHByZWRpY3Rpb24pKSB7CisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkp
CisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRDYWxsKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbV9ncmFwaC5tX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsKKyAgICBkYXRhLT5maXJzdFZhckFy
Z09mZnNldCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgIAorICAgIE5vZGUqIHRoaXNDaGlsZDsK
ICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAg
IHRoaXNDaGlsZCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpOworICAgIGVsc2UKKyAg
ICAgICAgdGhpc0NoaWxkID0gbnVsbHB0cjsKKyAgICAKKyAgICBOb2RlKiBjYWxsID0gYWRkVG9H
cmFwaChvcCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlvbiksIGNhbGxUYXJnZXQsIGdl
dChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSksIHRoaXNDaGlsZCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOworICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQor
ICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKK30KKwordm9pZCBCeXRlQ29kZVBhcnNlcjo6
ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRhcmdldCwg
VmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudFJlZykKK3sKKyAgICBOb2RlKiB0aGlzQXJndW1l
bnQ7CisgICAgaWYgKHRoaXNBcmd1bWVudFJlZy5pc1ZhbGlkKCkpCisgICAgICAgIHRoaXNBcmd1
bWVudCA9IGdldCh0aGlzQXJndW1lbnRSZWcpOwogICAgIGVsc2UKICAgICAgICAgdGhpc0FyZ3Vt
ZW50ID0gMDsKIApAQCAtMTExMCwxMyArMTE1NCw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVt
aXRGdW5jdGlvbkNoZWNrcygKICAgICBhZGRUb0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKG1fZ3Jh
cGguZnJlZXplKGNhbGxlZUNlbGwpKSwgY2FsbFRhcmdldEZvckNoZWNrLCB0aGlzQXJndW1lbnQp
OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjp1bmRvRnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlh
bnQgY2FsbGVlKQotewotICAgIHJlbW92ZUxhc3ROb2RlRnJvbUdyYXBoKENoZWNrQ2VsbCk7Ci0g
ICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpCi0gICAgICAgIHJlbW92ZUxhc3ROb2RlRnJv
bUdyYXBoKEdldEV4ZWN1dGFibGUpOwotfQotCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0QXJn
dW1lbnRQaGFudG9tcyhpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIGZvciAoaW50IGkg
PSBraW5kID09IENvZGVGb3JDYWxsID8gMCA6IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpczsgKytpKQpAQCAtMTIxMCwxMyArMTI0NywxNSBAQCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNl
cjo6aW5saW5pbmdDb3N0KENhCiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3Vu
dCgpOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9m
ZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxl
ckxpbmthYmlsaXR5KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KK3ZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRP
cGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJh
bWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxpdHksIGNvbnN0
IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25L
aW5kRm9yKGtpbmQpOwogICAgIAogICAgIEFTU0VSVChpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKSAhPSBVSU5UX01BWCk7
CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRh
YmxlKCktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgaW5z
ZXJ0Q2hlY2tzKGNvZGVCbG9jayk7CiAKICAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2ggY29uc3Rh
bnRzIQogICAgIApAQCAtMTM1Niw0NCArMTM5NSw1OSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpj
YW5jZWxMaW5raW5nRm9yQmxvCiAgICAgfQogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRl
bXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwg
Q2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5k
IGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hlY2tzRnVuY3Rvcj4KK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNh
bGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBj
YWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVy
TGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24s
IHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENo
ZWNrcykKIHsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9
IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIAogICAg
IGlmICghaW5saW5pbmdCYWxhbmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAg
Ym9vbCBkaWRJbnNlcnRDaGVja3MgPSBmYWxzZTsKKyAgICBhdXRvIGluc2VydENoZWNrc1dpdGhB
Y2NvdW50aW5nID0gWyZdICgpIHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKG51bGxwdHIpOworICAg
ICAgICBkaWRJbnNlcnRDaGVja3MgPSB0cnVlOworICAgIH07CisgICAgCiAgICAgaWYgKEludGVy
bmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2FsbGVlLmludGVybmFsRnVuY3Rpb24oKSkgewotICAg
ICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKHJlc3VsdE9wZXJhbmQsIGZ1
bmN0aW9uLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNp
YWxpemF0aW9uS2luZCkpIHsKKyAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5j
dGlvbihyZXN1bHRPcGVyYW5kLCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQsIGluc2VydENoZWNrc1dpdGhBY2Nv
dW50aW5nKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldE5vZGUpOwogICAgICAg
ICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICAgICAgaW5saW5pbmdC
YWxhbmNlLS07CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkaWRJbnNlcnRDaGVja3MpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIEludHJpbnNpYyBpbnRyaW5zaWMg
PSBjYWxsZWUuaW50cmluc2ljRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaWYgKGludHJp
bnNpYyAhPSBOb0ludHJpbnNpYykgewotICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3Vs
dE9wZXJhbmQsIGludHJpbnNpYywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3Vs
dE9wZXJhbmQsIGludHJpbnNpYywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBwcmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGRpZEluc2VydENoZWNrcyk7CiAgICAgICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20sIGNhbGxUYXJnZXROb2RlKTsKICAgICAgICAgICAgIGVtaXRBcmd1bWVu
dFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3Bl
Y2lhbGl6YXRpb25LaW5kKTsKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBteUlubGluaW5nQ29zdCA9IGlubGluaW5nQ29z
dChjYWxsZWUsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQp
OwogICAgIGlmIChteUlubGluaW5nQ29zdCA+IGlubGluaW5nQmFsYW5jZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIGlubGluZUNhbGwoY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9w
ZXJhbmQsIGNhbGxlZSwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBuZXh0T2Zmc2V0LCBraW5kLCBjYWxsZXJMaW5rYWJpbGl0eSk7CisKKyAgICBpbmxpbmVDYWxs
KGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsZWUsIHJlZ2lzdGVyT2Zmc2V0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgY2FsbGVyTGlua2Fi
aWxpdHksIGluc2VydENoZWNrcyk7CiAgICAgaW5saW5pbmdCYWxhbmNlIC09IG15SW5saW5pbmdD
b3N0OwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENh
bGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNh
bGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24pCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKKyAgICBOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxs
TGlua1N0YXR1cywKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZywgVmlydHVh
bFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJn
dW1lbnQsIHVuc2lnbmVkIGFyZ3VtZW50c09mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLAorICAgIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgaW5saW5pbmcuLi5cbiIp
OwpAQCAtMTQwNyw2ICsxNDYxLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKE5vZGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKKyAgICBpZiAoSW5s
aW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkKKyAgICAgICAgJiYgY2FsbExpbmtTdGF0dXMu
bWF4TnVtQXJndW1lbnRzKCkgPiBPcHRpb25zOjptYXhpbXVtVmFyYXJnc0ZvcklubGluaW5nKCkp
IHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlu
bGluaW5nIGJlY2F1c2Ugb2YgdmFyYXJncy5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgICAgICAKICAgICB1bnNpZ25lZCBpbmxpbmluZ0JhbGFuY2UgPSBPcHRpb25zOjpt
YXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwog
ICAgIGlmIChzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCkKICAgICAgICAg
aW5saW5pbmdCYWxhbmNlID0gc3RkOjptaW4oaW5saW5pbmdCYWxhbmNlLCBPcHRpb25zOjptYXhp
bXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCkp
OwpAQCAtMTQxNywxNyArMTQ3OCwxMDUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoTm9kZQogICAgIC8vIHNpbXBsaWZpY2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVs
cHMgcmVkdWNlIGNvbXBpbGUgdGltZXMsIGJ1dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8v
IHRoaXMgaW4gY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMg
dG8gY2hlY2sgdGhlIGNhbGxlZS4KICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNs
b3dQYXRoKCkgJiYgY2FsbExpbmtTdGF0dXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1
bmN0aW9uQ2hlY2tzKAotICAgICAgICAgICAgY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXRO
b2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0OworICAgICAgICAKKyAgICAgICAgLy8gT25seSB1c2VkIGZvciB2YXJhcmdz
IGNhbGxzLgorICAgICAgICB1bnNpZ25lZCBtYW5kYXRvcnlNaW5pbXVtID0gMDsKKyAgICAgICAg
dW5zaWduZWQgbWF4TnVtQXJndW1lbnRzID0gMDsKKworICAgICAgICBpZiAoSW5saW5lQ2FsbEZy
YW1lOjppc1ZhcmFyZ3Moa2luZCkpIHsKKyAgICAgICAgICAgIGlmIChGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IGNhbGxMaW5rU3RhdHVzWzBdLmZ1bmN0aW9uRXhlY3V0
YWJsZSgpKQorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSBmdW5jdGlvbkV4ZWN1
dGFibGUtPnBhcmFtZXRlckNvdW50KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbWFuZGF0b3J5TWluaW11bSA9IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGlu
Y2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAgbWF4TnVtQXJndW1lbnRzID0gc3RkOjptYXgoCisg
ICAgICAgICAgICAgICAgY2FsbExpbmtTdGF0dXMubWF4TnVtQXJndW1lbnRzKCksCisgICAgICAg
ICAgICAgICAgbWFuZGF0b3J5TWluaW11bSArIDEpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBXZSBzb3J0IG9mIHByZXRlbmQgdGhhdCB0aGlzICppcyogdGhlIG51bWJlciBvZiBhcmd1
bWVudHMgdGhhdCB3ZXJlIHBhc3NlZC4KKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gbWF4TnVtQXJndW1lbnRzOworICAgICAgICAgICAgCisgICAgICAgICAgICByZWdp
c3Rlck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWcgKyAxOworICAgICAgICAg
ICAgcmVnaXN0ZXJPZmZzZXQgLT0gbWF4TnVtQXJndW1lbnRzOyAvLyBpbmNsdWRlcyAidGhpcyIK
KyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emU7CisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxl
T2YoCisgICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAg
ICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAgICAgCiAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gYXR0ZW1wdFRvSW5saW5lQ2FsbCgKICAgICAgICAgICAgIGNh
bGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJP
ZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNl
dCwga2luZCwgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIHByZWRpY3Rpb24sCi0gICAgICAgICAg
ICBpbmxpbmluZ0JhbGFuY2UpOwotICAgICAgICBpZiAoIXJlc3VsdCAmJiAhY2FsbExpbmtTdGF0
dXMuaXNQcm92ZWQoKSkKLSAgICAgICAgICAgIHVuZG9GdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0
YXR1c1swXSk7CisgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UsIFsmXSAoQ29kZUJsb2NrKiBj
b2RlQmxvY2spIHsKKyAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtT
dGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCBzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNh
bGwgPyB0aGlzQXJndW1lbnQgOiBWaXJ0dWFsUmVnaXN0ZXIoKSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGEgdmFyYXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFy
Z3VtZW50cyByaWdodCBub3cuCisgICAgICAgICAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6
aXNWYXJhcmdzKGtpbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCByZW1hcHBlZFJlZ2lz
dGVyT2Zmc2V0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS5vZmZzZXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0
ID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAg
ICAgICAgICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRTdGFydCkpLm9mZnNldCgpOworCisgICAgICAgICAgICAgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2FkVmFyYXJnc0RhdGEuYWRkKCk7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkQXJndW1l
bnRTdGFydCArIDEpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5jb3VudCA9IFZpcnR1YWxS
ZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCk7
CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNldDsKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YS0+bGltaXQgPSBtYXhOdW1Bcmd1bWVudHM7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5pbXVtOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3Ms
IE9wSW5mbyhkYXRhKSwgZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSW4gREZHIElSIGJlZm9yZSBTU0EsIHdlIGNhbm5vdCBpbnNl
cnQgY29udHJvbCBmbG93IGJldHdlZW4gYWZ0ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIC8v
IExvYWRWYXJhcmdzIGFuZCB0aGUgbGFzdCBTZXRBcmd1bWVudC4gVGhpcyBpc24ndCBhIHByb2Js
ZW0gb25jZSB3ZSBnZXQgdG8gREZHCisgICAgICAgICAgICAgICAgICAgIC8vIFNTQS4gRm9ydHVu
YXRlbHksIHdlIGFsc28gaGF2ZSBvdGhlciByZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRy
b2wgZmxvdworICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgU1NBLgorICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCks
IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0
IGl0IHdpbGwgZm9yY2UgdGhlIGNvdW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRv
ZXNuJ3QKKyAgICAgICAgICAgICAgICAgICAgLy8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3Vy
IHVzZSBvZiBhIFNldEFyZ3VtZW50IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMK
KyAgICAgICAgICAgICAgICAgICAgLy8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCisgICAgICAg
ICAgICAgICAgICAgIGNvdW50VmFyaWFibGUtPnByZWRpY3QoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgICAgICAgICAgY291bnRWYXJpYWJsZS0+bWVyZ2VJc1Byb2ZpdGFibGVUb1VuYm94KHRydWUp
OworICAgICAgICAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudENvdW50ID0gYWRkVG9HcmFw
aChTZXRBcmd1bWVudCwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFi
bGUtPmxvY2FsKCksIHNldEFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGlmIChzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQo
dGhpc0FyZ3VtZW50KSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBtYXhOdW1Bcmd1bWVudHM7ICsr
YXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkQXJndW1lbnRTdGFydCArIGFyZ3VtZW50KSwg
ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2
ZXJVbmJveCh0cnVlKTsgLy8gV2UgY3VycmVudGx5IGhhdmUgbm93aGVyZSB0byBwdXQgdGhlIHR5
cGUgY2hlY2sgb24gdGhlIExvYWRWYXJhcmdzLiBMb2FkVmFyYXJncyBpcyBlZmZlY3RmdWwsIHNv
IGFmdGVyIGl0IGZpbmlzaGVzLCB3ZSBjYW5ub3QgZXhpdC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGEgd2hpbGUgaXQgaGFkIGJlZW4g
bXkgaW50ZW50aW9uIHRvIGRvIHRoaW5ncyBsaWtlIHRoaXMgaW5zaWRlIHRoZQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcHJlZGljdGlvbiBpbmplY3Rpb24gcGhhc2UuIEJ1dCBpbiB0aGlz
IGNhc2UgaXQncyByZWFsbHkgYmVzdCB0byBkbyBpdCBoZXJlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYmVjYXVzZSBpdCdzIGhlcmUgdGhhdCB3ZSBoYXZlIGFjY2VzcyB0byB0aGUgdmFy
aWFibGUgYWNjZXNzIGRhdGFzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlu
bGluaW5nIHdlJ3JlIGFib3V0IHRvIGRvLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbWV0aGluZyBlbHNlIHRoYXQncyBpbnRlcmVzdGlu
ZyBoZXJlIGlzIHRoYXQgd2UnZCByZWFsbHkgbG92ZSB0byBnZXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHByZWRpY3Rpb25zIGZyb20gdGhlIGFyZ3VtZW50cyBsb2FkZWQgYXQgdGhlIGNh
bGxzaXRlLCByYXRoZXIgdGhhbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3Vt
ZW50cyByZWNlaXZlZCBpbnNpZGUgdGhlIGNhbGxlZS4gQnV0IHRoYXQgcHJvYmFibHkgd29uJ3Qg
bWF0dGVyIGZvciBtb3N0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxscy4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2sgJiYgYXJndW1lbnQgPCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWYWx1ZVByb2ZpbGUqIHByb2Zp
bGUgPSBjb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPnByZWRpY3QocHJvZmlsZS0+Y29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcikpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkRvbmUgaW5saW5pbmcgKHNpbXBs
ZSkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlJlc3VsdDogIiwgcmVzdWx0LCAiXG4i
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE0MzcsMTEg
KzE1ODYsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAg
Ly8gZG8gbW9yZSBkZXRhaWxlZCBwb2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7IGFu
ZCBzZWNvbmQsIGl0IHJlZHVjZXMgY29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcuIEFu
ZCBieSBwb2x5dmFyaWFudCBwcm9maWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxpbmcg
b2YgKnRoaXMqIGNhbGwuIE5vdGUgdGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhhdCBh
c3BlY3Qgb2YgdGhpcyBieSBkb2luZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5nIHRo
ZSBwcm9maWxpbmcKLSAgICAvLyBhbHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhpcywg
YnV0IGl0IGNvdWxkIGJlIGludGVyZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5nIGEK
LSAgICAvLyBzZXBhcmF0ZSBub2RlIGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8vIEZJ
WE1FOiBJbnRyb2R1Y2UgdGhlIG5vdGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9maWxp
bmcgbm9kZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM2MDMzCi0gICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6
ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAgaWYg
KCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBo
aWNDYWxsSW5saW5pbmcoKQorICAgICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhr
aW5kKSkgewogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiQmFp
bGluZyBpbmxpbmluZyAoaGFyZCkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAi
LCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKQEAgLTE0ODIsNiArMTYyOSw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygiU3Rh
Y2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAogICAg
IC8vIFRoaXMgbWFrZXMgbWUgd2lzaCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGltZS4g
V2UgbmVlZCB0byBwaWNrIGEgdmFyaWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3JlIHRo
ZSBjYWxsZWUgc28gdGhhdCBpdCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBibG9j
a3Mgd2UncmUgYWJvdXQgdG8gY3JlYXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9pbmcg
YW4gaW1tZWRpYXRlLXNldCBoZXJlIGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3JtZWQg
YW55IHNpZGUgZWZmZWN0cwpAQCAtMTUyNiw3ICsxNjc1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0
ZW1wdFRvSW5saW5lQ2FsbCgKICAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9w
ZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJMaW5rc01h
bnVhbGx5LCBwcmVkaWN0aW9uLAotICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlKTsKKyAgICAg
ICAgICAgIGlubGluaW5nQmFsYW5jZSwgWyZdIChDb2RlQmxvY2sqKSB7IH0pOwogICAgICAgICAK
ICAgICAgICAgaWYgKCFpbmxpbmluZ1Jlc3VsdCkgewogICAgICAgICAgICAgLy8gVGhhdCBmYWls
ZWQgc28gd2UgbGV0IHRoZSBibG9jayBkaWUuIE5vdGhpbmcgaW50ZXJlc3Rpbmcgc2hvdWxkIGhh
dmUgYmVlbiBhZGRlZCB0bwpAQCAtMTYxMCwxNCArMTc1OSwxNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3As
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBp
bnNlcnRDaGVja3MpCiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEp
IHsgLy8gTWF0aC5taW4oKQorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcElu
Zm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAK
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRoLm1pbih4
KQorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KFZp
cnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNl
dCkpKTsKICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVyVXNl
KSk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7
CkBAIC0xNjI1LDYgKzE3NzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgo
aW50IHJlCiAgICAgfQogICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
PSAzKSB7IC8vIE1hdGgubWluKHgsIHkpCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKG9wLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMTYzMywxMSArMTc4NiwxMyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNp
YyBpbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hl
Y2tzRnVuY3Rvcj4KK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVz
dWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNv
bnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBzd2l0Y2ggKGludHJpbnNp
YykgewogICAgIGNhc2UgQWJzSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGguYWJzKCkKKyAgICAgICAgICAgIGluc2VydENo
ZWNrcygpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwg
YWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xNjQ1LDYgKzE4MDAsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlmICghTWFjcm9Bc3Nl
bWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2ludEFicygpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBOb2RlKiBub2RlID0gYWRk
VG9HcmFwaChBcml0aEFicywgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lz
dGVyT2Zmc2V0KSkpOwogICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKQogICAgICAgICAgICAgbm9k
ZS0+bWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3dJbkRGRyk7CkBAIC0xNjUzLDI5ICsxODA5LDMz
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICB9CiAKICAg
ICBjYXNlIE1pbkludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRP
cGVyYW5kLCBBcml0aE1pbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0aE1p
biwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnNlcnRDaGVj
a3MpOwogICAgICAgICAKICAgICBjYXNlIE1heEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGhh
bmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0aE1heCwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1
bHRPcGVyYW5kLCBBcml0aE1heCwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBpbnNlcnRDaGVja3MpOwogICAgICAgICAKICAgICBjYXNlIFNxcnRJbnRyaW5zaWM6
CiAgICAgY2FzZSBDb3NJbnRyaW5zaWM6CiAgICAgY2FzZSBTaW5JbnRyaW5zaWM6IHsKICAgICAg
ICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsKKyAgICAgICAgICAgIGlu
c2VydENoZWNrcygpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzd2l0
Y2ggKGludHJpbnNpYykgewogICAgICAgICBjYXNlIFNxcnRJbnRyaW5zaWM6CisgICAgICAgICAg
ICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhTcXJ0LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBDb3NJbnRyaW5zaWM6CisgICAgICAgICAgICBpbnNl
cnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFu
ZCksIGFkZFRvR3JhcGgoQXJpdGhDb3MsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgx
LCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFNpbkludHJpbnNpYzoKKyAgICAgICAgICAgIGluc2VydENoZWNr
cygpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRk
VG9HcmFwaChBcml0aFNpbiwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lz
dGVyT2Zmc2V0KSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCkBA
IC0xNjg4LDkgKzE4NDgsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGludAogICAgIGNhc2UgUG93SW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA8IDMpIHsKICAgICAgICAgICAgIC8vIE1hdGgucG93KCkgYW5kIE1hdGgu
cG93KHgpIHJldHVybiBOYU4uCisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25z
dGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZz
ZXQpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgeU9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhQb3csIGdldCh4T3BlcmFuZCksIGdl
dCh5T3BlcmFuZCkpKTsKQEAgLTE3MTAsNiArMTg3Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6IHsKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgTm9kZSogYXJy
YXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkp
LCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCBy
ZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0
ZXJPZmZzZXQpKSk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJh
bmQpLCBhcnJheVB1c2gpOwogICAgICAgICAgICAgCkBAIC0xNzMzLDYgKzE4OTYsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGNhc2UgQXJyYXk6
OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAg
ICAgICAgIE5vZGUqIGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYXJyYXlQb3ApOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xNzQ3LDYgKzE5MTEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRy
aW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9w
ZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAg
ICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcElu
Zm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwg
Z2V0KGluZGV4T3BlcmFuZCkpOwpAQCAtMTc1OSw2ICsxOTI0LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNl
cnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVyYW5kID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVn
aXN0ZXJPZmZzZXQpOwogICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5n
Q2hhckF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRo
aXNPcGVyYW5kKSwgZ2V0KGluZGV4T3BlcmFuZCkpOwpAQCAtMTc3MCw2ICsxOTM2LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3Bl
cmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAg
ICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0Zyb21DaGFyQ29kZSwgZ2V0
KGluZGV4T3BlcmFuZCkpOwogCkBAIC0xNzgyLDYgKzE5NDksNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAg
ICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBo
KFJlZ0V4cEV4ZWMsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZWdFeHBFeGVjKTsKICAgICAgICAgCkBAIC0xNzkyLDYg
KzE5NjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAg
ICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIE5v
ZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJP
ZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0
KSkpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZWdFeHBF
eGVjKTsKICAgICAgICAgCkBAIC0xODAxLDYgKzE5NzAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgY2FzZSBJTXVsSW50cmluc2ljOiB7CiAgICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAzKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGxlZnRPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZz
ZXQpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmlnaHRPcGVyYW5kID0gdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBOb2RlKiBsZWZ0ID0g
Z2V0KGxlZnRPcGVyYW5kKTsKQEAgLTE4MTIsMjkgKzE5ODIsMzQgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNhc2UgRlJvdW5kSW50cmluc2ljOiB7CiAg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9m
ZnNldCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRv
R3JhcGgoQXJpdGhGUm91bmQsIGdldChvcGVyYW5kKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgREZHVHJ1ZUludHJpbnNpYzogeworICAgICAgICBp
bnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5k
KSwganNDb25zdGFudChqc0Jvb2xlYW4odHJ1ZSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIE9TUkV4aXRJbnRyaW5zaWM6IHsKKyAgICAgICAgaW5z
ZXJ0Q2hlY2tzKCk7CiAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8obV9jb25zdGFudFVuZGVmaW5lZCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIElzRmluYWxUaWVySW50cmluc2ljOiB7CisgICAgICAg
IGluc2VydENoZWNrcygpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJh
bmQpLAogICAgICAgICAgICAganNDb25zdGFudChqc0Jvb2xlYW4oT3B0aW9uczo6dXNlRlRMSklU
KCkgPyBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSA6IHRydWUpKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRJbnQzMkhlYXBQcmVkaWN0aW9u
SW50cmluc2ljOiB7CisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBmb3IgKGludCBp
ID0gMTsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJP
ZmZzZXQpKTsKICAgICAgICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQpAQCAt
MTg0Nyw2ICsyMDIyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGlu
dAogICAgIGNhc2UgRmlhdEludDUySW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIGlmIChl
bmFibGVJbnQ1MigpKQogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgYWRkVG9HcmFwaChGaWF0SW50NTIsIGdldChvcGVyYW5kKSkpOwpAQCAtMTg2MCw5ICsy
MDM2LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICB9
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoCiAgICAgaW50IHJlc3VsdE9wZXJhbmQs
IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCi0gICAgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSB0eXBlKQorICAgIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUgdHlwZSwgY29uc3Qg
Q2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIGlmICghaXNUeXBlZFZpZXcodHlw
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5MDYsMTUgKzIwODMsMTcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbgogICAgIAogICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisK
KyAgICBpbnNlcnRDaGVja3MoKTsKICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJh
bmQpLAogICAgICAgICBhZGRUb0dyYXBoKE5ld1R5cGVkQXJyYXksIE9wSW5mbyh0eXBlKSwgZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbigKICAgICBpbnQg
cmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGludCByZWdpc3Rlck9m
ZnNldCwKLSAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKKyAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tz
KQogewogICAgIC8vIElmIHdlIGV2ZXIgZmluZCB0aGF0IHdlIGhhdmUgYSBsb3Qgb2YgaW50ZXJu
YWwgZnVuY3Rpb25zIHRoYXQgd2Ugc3BlY2lhbGl6ZSBmb3IsCiAgICAgLy8gdGhlbiB3ZSBzaG91
bGQgcHJvYmFibHkgaGF2ZSBzb21lIHNvcnQgb2YgaGFzaHRhYmxlIGRpc3BhdGNoLCBvciBtYXli
ZSBldmVuCkBAIC0xOTI3LDYgKzIxMDYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVD
b25zdGFudEludGVyCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCkgIT0gbV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7CiAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRlZCksIGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CkBAIC0xOTQxLDYg
KzIxMjEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAg
fQogICAgIAogICAgIGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZvKCkgPT0gU3RyaW5nQ29uc3RydWN0
b3I6OmluZm8oKSkgeworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgCiAgICAgICAg
IE5vZGUqIHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA8PSAxKQpAQCAtMTk1NiwxMSArMjEzOCw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICB9CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCB0eXBl
SW5kZXggPSAwOyB0eXBlSW5kZXggPCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7ICsrdHlw
ZUluZGV4KSB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVj
dG9yKAorICAgICAgICByZXR1cm4gaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAogICAgICAg
ICAgICAgcmVzdWx0T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywKLSAgICAgICAgICAgIGluZGV4VG9UeXBlZEFycmF5VHlwZSh0eXBl
SW5kZXgpKTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgaW5kZXhUb1R5cGVkQXJyYXlUeXBlKHR5cGVJbmRleCksIGluc2VydENoZWNr
cyk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTMxMjIsNDMgKzMzMDIsNzAg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
aW50IHRoaXNSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICAg
ICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBpbnQgZmlyc3RGcmVlUmVnID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlv
bls2XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVD
YWxsRnJhbWUoKSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFyZ3VtZW50cywgYXJndW1l
bnRzID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3Rlcigp
Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7Ci0KLSAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKLQotICAgICAgICAgICAgdW5zaWdu
ZWQgYXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0
LiBXZSBzdGFydCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAotICAgICAgICAgICAg
Ly8gdGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4K
LSAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7Ci0gICAg
ICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBwYXNzaW5n
IHNvbWUgYXJndW1lbnRzLgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZy
YW1lIGhlYWRlci4KKyAgICAgICAgICAgIGlmIChhcmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKKyAg
ICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRh
YmxlKCktPnNsb3dBcmd1bWVudHMoKSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUoKQorICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFy
YXJncygpCisgICAgICAgICAgICAgICAgICAgICYmICFmaXJzdFZhckFyZ09mZnNldCkgeworICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisK
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUo
KS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAv
LyBMZXQncyBjb21wdXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxh
c3QgdXNlZCByZWdpc3RlciwgYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0
IGZvciB0aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCisgICAgICAgICAgICAg
ICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IGFyZ0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Np
bmcgc29tZSBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZl
IGEgY2FsbCBmcmFtZSBoZWFkZXIuCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Ly8gR2V0IHRoZSBhbGlnbm1lbnQgcmlnaHQuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAt
cmVnaXN0ZXJPZmZzZXQpOworCisgICAgICAgICAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQp
KS50b0xvY2FsKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBi
eXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8g
aXQgYW5kIG1ha2UgaXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRl
Y29kZSBoYWQgZG9uZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9
IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0
dWFsUmVnaXN0ZXIodGhpc1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyAr
K2FyZ3VtZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihu
ZXh0UmVnaXN0ZXIrKyksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkp
LCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aGFuZGxlQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZv
ckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRW1pdCBDYWxsRm9yd2FyZFZhcmFy
Z3MKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB3ZSBjYW5ub3QgaW5saW5l
IGZvcndhcmRlZCB2YXJhcmdzIGNhbGxzIGluc2lkZSBhIHZhcmFyZ3MKKyAgICAgICAgICAgICAg
ICAvLyBjYWxsIGZyYW1lLiBXZSB3aWxsIHByb2JhYmx5IGZpeCB0aGF0IG9uY2Ugd2UgZmluYWxs
eSBnZXQgcmlkIG9mIHRoZQorICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBvYmplY3Qgc3Bl
Y2lhbC1jYXNpbmcuCisgICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9n
cmFwaC5tX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5maXJz
dFZhckFyZ09mZnNldCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgICAg
ICBDYWxsRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKGdldFByZWRpY3Rpb24o
KSksCisgICAgICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSksIGdl
dChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFJlZy5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOworICAg
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0Lgot
ICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAot
ICAgICAgICAgICAgICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCi0gICAgICAgICAgICAg
ICAgLXJlZ2lzdGVyT2Zmc2V0KTsKLQotICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAotICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKLSAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0IGhhdmUgc2V0IHVw
IHRoZSBhcmd1bWVudHMuIEJ1dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAotICAgICAgICAgICAg
Ly8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9uZSBpdC4KLSAgICAgICAgICAgIGludCBu
ZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emU7Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0
KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2Fy
Z3VtZW50KQotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVy
KyspLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSwgSW1tZWRpYXRl
TmFrZWRTZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVDYWxsKAotICAgICAg
ICAgICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bF92YXJhcmdzKSwKLSAgICAgICAgICAgICAgICBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9m
ZnNldCk7CisgICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IENhbGxWYXJhcmdzLCBDb2RlRm9yQ2FsbCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9j
YWxsX3ZhcmFyZ3MpOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9j
b25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVu
dEluc3RydWN0aW9uLCBDb25zdHJ1Y3RWYXJhcmdzLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6CiAgICAgICAgICAgICAvLyBTdGF0
aWNhbGx5IHNwZWN1bGF0ZSBmb3Igbm93LiBJdCBtYWtlcyBzZW5zZSB0byBsZXQgc3BlY3VsYXRl
LW9ubHkgam5lcV9wdHIKICAgICAgICAgICAgIC8vIHN1cHBvcnQgc2ltbWVyIGZvciBhIHdoaWxl
IGJlZm9yZSBtYWtpbmcgaXQgbW9yZSBnZW5lcmFsLCBzaW5jZSBpdCdzCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODAx
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTYsNiArOTYsOCBAQCBpbmxpbmUgdm9pZCBk
ZWJ1Z0ZhaWwoQ29kZUJsb2NrKiBjb2RlQmxvCiAKIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlv
biogcGMpCiB7CisgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7IC8vIFRoaXMgZnVuY3Rpb24g
ZG9lcyBzb21lIGJ5dGVjb2RlIHBhcnNpbmcuIE9yZGluYXJpbHkgYnl0ZWNvZGUgcGFyc2luZyBy
ZXF1aXJlcyB0aGUgb3duaW5nIENvZGVCbG9jay4gSXQncyBzb3J0IG9mIHN0cmFuZ2UgdGhhdCB3
ZSBkb24ndCB1c2UgaXQgaGVyZSByaWdodCBub3cuCisgICAgCiAgICAgc3dpdGNoIChvcGNvZGVJ
RCkgewogICAgIGNhc2Ugb3BfZW50ZXI6CiAgICAgY2FzZSBvcF90b3VjaF9lbnRyeToKQEAgLTE4
Miw2ICsxODQsOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAg
ICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CiAgICAgY2FzZSBvcF9jYWxsOgogICAgIGNh
c2Ugb3BfY29uc3RydWN0OgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOgogICAgIGNhc2Ug
b3BfY3JlYXRlX2FyZ3VtZW50czoKICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czoKQEAg
LTIyMywxNCArMjI3LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RAogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKICAgICB9CiAKLSAgICBjYXNl
IG9wX2NhbGxfdmFyYXJnczoKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygp
ICYmIHBjWzRdLnUub3BlcmFuZCA9PSBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zm
c2V0KCkKLSAgICAgICAgICAgICYmICFwY1s2XS51Lm9wZXJhbmQpCi0gICAgICAgICAgICByZXR1
cm4gQ2FuSW5saW5lOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSB0aGlzLgot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI2
Ci0gICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwotCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhw
OiAKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgogICAgIGNhc2Ugb3Bf
bmV3X2Z1bmM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOSArODYs
NyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGZ1bmN0aW9uQ2FwYWJpbGl0CiAgICAgICAgIHJl
dHVybiBsZWFzdFVwcGVyQm91bmQoQ2FuQ29tcGlsZUFuZElubGluZSwgY29tcHV0ZWRDYXBhYmls
aXR5TGV2ZWwpOwogICAgIGlmIChtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQogICAgICAg
ICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbkNvbXBpbGUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxl
dmVsKTsKLSAgICBpZiAoIW1pZ2h0Q29tcGlsZSAmJiBtaWdodElubGluZSkKLSAgICAgICAgcmV0
dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5JbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsK
LSAgICBpZiAoIW1pZ2h0Q29tcGlsZSAmJiAhbWlnaHRJbmxpbmUpCisgICAgaWYgKCFtaWdodENv
bXBpbGUpCiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgwMTg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2Niw2ICszNjYsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2Ug
TmF0aXZlQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9y
d2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgIGNhc2UgVG9Qcmlt
aXRpdmU6CiAgICAgY2FzZSBJbjoKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToK
QEAgLTQwMSw2ICs0MDQsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAo
VmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgLy8g
VGhpcyBhY3R1YWxseSB3cml0ZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFzIHdlbGwuIEJ1dCB3aGVu
IGl0IHJlYWRzIHRoZSBhcnJheSwgaXQgZG9lcworICAgICAgICAvLyBzbyBpbiBhIHdheSB0aGF0
IG1heSB0cmlnZ2VyIGdldHRlcnMgb3IgdmFyaW91cyB0cmFwcy4KKyAgICAgICAgcmVhZChXb3Js
ZCk7CisgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAg
ICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlh
Ymxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
VmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwo
KSkpLCBub2RlKTsKQEAgLTg4MSw3ICs4OTEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHRvQ1N0
cmluZygiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIiwgR3JhcGg6Om9wTmFtZShub2RlLT5vcCgp
KSkuZGF0YSgpKTsKIH0KIAogY2xhc3MgTm9PcENsb2JiZXJpemUgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjkyLDcgKzI5
Miw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogZW51bSBDYXBhYmlsaXR5
TGV2ZWwgewogICAgIENhbm5vdENvbXBpbGUsCi0gICAgQ2FuSW5saW5lLAogICAgIENhbkNvbXBp
bGUsCiAgICAgQ2FuQ29tcGlsZUFuZElubGluZSwKICAgICBDYXBhYmlsaXR5TGV2ZWxOb3RTZXQK
QEAgLTMxMiw3ICszMTEsNiBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKENhcGFiaWxpdHlMZXZl
bCBsCiBpbmxpbmUgYm9vbCBjYW5JbmxpbmUoQ2FwYWJpbGl0eUxldmVsIGxldmVsKQogewogICAg
IHN3aXRjaCAobGV2ZWwpIHsKLSAgICBjYXNlIENhbklubGluZToKICAgICBjYXNlIENhbkNvbXBp
bGVBbmRJbmxpbmU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CkBAIC0zMjUs
MTQgKzMyMyw2IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgbGVhc3RVcHBlckJvdW5kKEMKICAg
ICBzd2l0Y2ggKGEpIHsKICAgICBjYXNlIENhbm5vdENvbXBpbGU6CiAgICAgICAgIHJldHVybiBD
YW5ub3RDb21waWxlOwotICAgIGNhc2UgQ2FuSW5saW5lOgotICAgICAgICBzd2l0Y2ggKGIpIHsK
LSAgICAgICAgY2FzZSBDYW5JbmxpbmU6Ci0gICAgICAgIGNhc2UgQ2FuQ29tcGlsZUFuZElubGlu
ZToKLSAgICAgICAgICAgIHJldHVybiBDYW5JbmxpbmU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLSAgICAgICAgfQogICAgIGNhc2UgQ2FuQ29t
cGlsZToKICAgICAgICAgc3dpdGNoIChiKSB7CiAgICAgICAgIGNhc2UgQ2FuQ29tcGlsZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE4MDE4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDYgKzExNywxMCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUpCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNh
c2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFy
Z3M6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAg
IGNhc2UgQnJlYWtwb2ludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDYgKzMxMywxOCBAQCB2b2lkIEdyYXBoOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3
UG9pbnRlcihub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgaWYgKG5vZGUtPmhhc09iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5v
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCkpOworICAgIGlmIChub2RlLT5oYXNDYWxsVmFyYXJn
c0RhdGEoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZmlyc3RWYXJBcmdPZmZzZXQgPSAi
LCBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKS0+Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGlmIChu
b2RlLT5oYXNMb2FkVmFyYXJnc0RhdGEoKSkgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRh
dGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
c3RhcnQgPSAiLCBkYXRhLT5zdGFydCwgIiwgY291bnQgPSAiLCBkYXRhLT5jb3VudCk7CisgICAg
ICAgIGlmIChkYXRhLT5tYWNoaW5lU3RhcnQuaXNWYWxpZCgpKQorICAgICAgICAgICAgb3V0LnBy
aW50KCIsIG1hY2hpbmVTdGFydCA9ICIsIGRhdGEtPm1hY2hpbmVTdGFydCk7CisgICAgICAgIGlm
IChkYXRhLT5tYWNoaW5lQ291bnQuaXNWYWxpZCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIs
IG1hY2hpbmVDb3VudCA9ICIsIGRhdGEtPm1hY2hpbmVDb3VudCk7CisgICAgICAgIG91dC5wcmlu
dCgiLCBvZmZzZXQgPSAiLCBkYXRhLT5vZmZzZXQsICIsIG1hbmRhdG9yeU1pbmltdW0gPSAiLCBk
YXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgb3V0LnByaW50KCIsIGxpbWl0ID0gIiwg
ZGF0YS0+bGltaXQpOworICAgIH0KICAgICBpZiAobm9kZS0+aXNDb25zdGFudCgpKQogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5vZGUtPmNvbnN0YW50KCks
IGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCkBAIC00MDAsNyArNDEyLDcgQEAg
dm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgICAgICAgICAgTm9k
ZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOwogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5z
aG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBo
aU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAg
ICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPmxv
Y2FsKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKICAgICAgICAgICAgIGlm
IChwaGlOb2RlLT5jaGlsZDEoKSkgewogICAgICAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBo
aU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+
Y2hpbGQyKCkpIHsKQEAgLTg2OSwxMCArODgxLDEyIEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0
ZWNvZGUoVmlydHVhbFJlZ2kKICAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7CiAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnLm9mZnNldCgpIDwgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbAorICAgICAgICAgICAgICAgICAgICAmJiByZWcu
b2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocmVnLm9mZnNldCgp
ID09IEpTU3RhY2s6OkNhbGxlZSkKKyAgICAgICAgICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCisgICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZz
ZXQoKSA9PSBKU1N0YWNrOjpBcmd1bWVudENvdW50KQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMjM1LDYgKzEyNDksNTEgQEAgdm9pZCBHcmFwaDo6aGFuZGxlQXNzZXJ0aW9uRmFpbHVy
ZSgKICAgICBjcmFzaCgqdGhpcywgdG9DU3RyaW5nKCJXaGlsZSBoYW5kbGluZyBibG9jayAiLCBw
b2ludGVyRHVtcChibG9jayksICJcblxuIiksIGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBhc3NlcnRp
b24pOwogfQogCitWYWx1ZVByb2ZpbGUqIEdyYXBoOjp2YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9k
ZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAK
KyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICBpZiAobm9kZS0+aGFzTG9jYWwoKnRo
aXMpKSB7CisgICAgICAgIGlmICghbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9jYWwo
KS50b0FyZ3VtZW50KCk7CisgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fYXJndW1lbnRz
W2FyZ3VtZW50XTsKKyAgICAgICAgaWYgKCFhcmd1bWVudE5vZGUpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IGFy
Z3VtZW50Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3Vt
ZW50KGFyZ3VtZW50KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmIChub2RlLT5oYXNIZWFwUHJl
ZGljdGlvbigpKQorICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQor
eworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUoKTsKKyAgICAKKyAgICBpZiAoVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUgPSB2YWx1
ZVByb2ZpbGVGb3Iobm9kZSkpCisgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlKHZhbHVlUHJvZmlsZSk7CisgICAgCisgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9j
YWwpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCisgICAgICAgICAg
ICBwcm9maWxlZEJsb2NrLAorICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXko
CisgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgsIG5v
ZGUtPmxvY2FsKCkpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcyLDUwICs0NzIsOCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2stPnVuY2hlY2tlZEFjdGl2YXRpb25S
ZWdpc3RlcigpOwogICAgIH0KICAgICAKLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZv
cihOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIAotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sg
PSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAK
LSAgICAgICAgaWYgKG5vZGUtPmhhc0xvY2FsKCp0aGlzKSkgewotICAgICAgICAgICAgaWYgKCFu
b2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgIGludCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOwotICAg
ICAgICAgICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9hcmd1bWVudHNbYXJndW1lbnRdOwotICAg
ICAgICAgICAgaWYgKCFhcmd1bWVudE5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gYXJndW1l
bnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JB
cmd1bWVudChhcmd1bWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
LT5oYXNIZWFwUHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2st
PnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAg
ICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGVGb3IoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAg
IHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUgPSB2YWx1ZVByb2ZpbGVGb3Iobm9kZSkp
Ci0gICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVBy
b2ZpbGUpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsK
LSAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIAotICAgICAgICAgICAgcmV0dXJu
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKLSAgICAgICAg
ICAgICAgICBwcm9maWxlZEJsb2NrLAotICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5KAotICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCwgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOwotICAgIH0KKyAgICBWYWx1
ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKTsKKyAgICBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlIG1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9k
ZSk7CiAgICAgCiAgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QKICAgICB7CkBAIC04NTMs
NiArODExLDggQEAgcHVibGljOgogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0
aUdldEJ5T2Zmc2V0RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQ
dXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1fb2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uRGF0YTsKKyAgICBCYWc8Q2FsbFZhcmFyZ3NEYXRhPiBtX2NhbGxW
YXJhcmdzRGF0YTsKKyAgICBCYWc8TG9hZFZhcmFyZ3NEYXRhPiBtX2xvYWRWYXJhcmdzRGF0YTsK
ICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsK
ICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZl
bmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBib29sIG1faGFzQXJndW1lbnRzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlz
aW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMiw2ICsxMjIsNyBAQCB2b2lk
IEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAgICAgICAgIC8vIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRo
ZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBtb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKIAogI2lmIENQVShYODYpCiAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZSBj
YWxsIGFic3RyYWN0aW9uLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgaW4gdGhlIFNwZWN1bGF0aXZl
SklUIGxheWVyIQpAQCAtMjQ3LDcgKzI0OCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICAgICAgICAgSlNDYWxsUmVjb3JkJiByZWNvcmQgPSBtX2pzQ2FsbHNb
aV07CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpyZWNvcmQubV9pbmZvOwogICAgICAg
ICBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCi0gICAg
ICAgICAgICBpbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gQ29kZUZv
ckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsLAorICAgICAgICAgICAgaW5mby5zcGVjaWFsaXphdGlv
bktpbmQoKSwKICAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwog
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3JkLm1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKG1f
dm0tPmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwog
ICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKHJlY29yZC5tX3Nsb3dDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBi
b29sIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0Q2FsbGVl
OgogICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgY2FzZSBD
b3VudEV4ZWN1dGlvbjoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTgwMTg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
Myw2ICsxODMsMjAgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRh
YmxlOwogfTsKIAorc3RydWN0IENhbGxWYXJhcmdzRGF0YSB7CisgICAgaW50IGZpcnN0VmFyQXJn
T2Zmc2V0OworfTsKKworc3RydWN0IExvYWRWYXJhcmdzRGF0YSB7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHN0YXJ0OyAvLyBMb2NhbCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQuCisgICAgVmlydHVhbFJl
Z2lzdGVyIGNvdW50OyAvLyBMb2NhbCBmb3IgdGhlIGNvdW50LgorICAgIFZpcnR1YWxSZWdpc3Rl
ciBtYWNoaW5lU3RhcnQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVDb3VudDsKKyAgICB1
bnNpZ25lZCBvZmZzZXQ7IC8vIFdoaWNoIGFycmF5IGVsZW1lbnQgdG8gc3RhcnQgd2l0aC4gVXN1
YWxseSB0aGlzIGlzIDAuCisgICAgdW5zaWduZWQgbWFuZGF0b3J5TWluaW11bTsgLy8gVGhlIG51
bWJlciBvZiBlbGVtZW50cyBvbiB0aGUgc3RhY2sgdGhhdCBtdXN0IGJlIGluaXRpYWxpemVkOyBp
ZiB0aGUgYXJyYXkgaXMgdG9vIHNob3J0IHRoZW4gdGhlIG1pc3NpbmcgZWxlbWVudHMgbXVzdCBn
ZXQgdW5kZWZpbmVkLiBEb2VzIG5vdCBpbmNsdWRlICJ0aGlzIi4KKyAgICB1bnNpZ25lZCBsaW1p
dDsgLy8gTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbG9hZC4gSW5jbHVkZXMgInRoaXMi
LgorfTsKKwogLy8gVGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1l
bnQgdG8gTm9kZSBjb25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZh
bHVlICh0eXBpY2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAt
IAogLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBO
b2RlKi4KQEAgLTg5NSw2ICs5MDksMzUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKICAgICB9CiAg
ICAgCisgICAgYm9vbCBoYXNDYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChvcCgpKSB7CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEqIGNhbGxWYXJh
cmdzRGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQ2FsbFZhcmFyZ3NEYXRhKCkpOwor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENhbGxWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9wKCkgPT0gTG9hZFZhcmFyZ3M7CisgICAgfQorICAgIAorICAgIExvYWRWYXJh
cmdzRGF0YSogbG9hZFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNMb2Fk
VmFyYXJnc0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8TG9hZFZhcmFyZ3NE
YXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKICAgICBib29sIGhhc1Jlc3VsdCgpCiAgICAg
ewogICAgICAgICByZXR1cm4gISFyZXN1bHQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiB0aGlzIG11c3QgYmUgdGhl
IGRpcmVjdGx5IHN1YnNlcXVlbnQgcHJvcGVydHkgcHV0LiBOb3RlIHRoYXQgUHV0QnlWYWwgKi9c
CiAgICAgLyogb3Bjb2RlcyB1c2UgVmFyQXJncyBiZWF1c2UgdGhleSBtYXkgaGF2ZSB1cCB0byA0
IGNoaWxkcmVuLiAqL1wKICAgICBtYWNybyhHZXRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFy
QXJncykgXAogICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1Zh
ckFyZ3MpIFwKICAgICBtYWNybyhQdXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKQEAgLTIxNyw2ICsyMTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgLyogQ2FsbHMuICovXAogICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKENvbnN0
cnVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBc
CisgICAgbWFjcm8oQ2FsbFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKKyAgICBtYWNybyhDYWxsRm9yd2FyZFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDb25zdHJ1Y3RWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmF0aXZlQ2FsbCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oTmF0aXZlQ29u
c3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3Mp
IFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDE4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcgQEAgdm9pZCBMb2Nh
bE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRh
KiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+Y291bnQpID0KKyAgICAgICAgICAgIEF2YWlsYWJpbGl0
eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspIHsKKyAgICAgICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9m
ZnNldCgpICsgaSkpID0KKyAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZs
dXNoZWRKU1ZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgp
ICsgaSkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlz
aW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTIsNyArMTUyLDkgQEAgdm9pZCBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICAKICAgICAgICAgc3dp
dGNoIChpbmxpbmVDYWxsRnJhbWUtPmtpbmQpIHsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OkNhbGw6Ci0gICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6IHsKKyAg
ICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6
Q29uc3RydWN0VmFyYXJnczogewogICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8gPQogICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRDYWxs
TGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CkBAIC0xOTUsMTIgKzE5NywxMyBAQCB2b2lk
IHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIGlmICh0cnVlUmV0
dXJuUEMpCiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRydWVSZXR1cm5QQyksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGppdC5zdG9yZVB0cihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2spLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIEpTU3RhY2s6OkNvZGVCbG9jaykpKTsKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSwgQXNz
ZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIGppdC5zdG9yZTY0KGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZz
ZXQoKSkpOwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0
aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAg
ICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9u
Qml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotICAgICAg
ICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
KQogICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgp
KSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpKTsKICAgICAgICAgCkBA
IC0yMDgsMTIgKzIxMSwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxw
ZXJzCiAgICAgICAgIGlmIChiYXNlbGluZUNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKQogICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdW5tb2RpZmllZEFyZ3VtZW50
c1JlZ2lzdGVyKGJhc2VsaW5lQ29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKS5vZmZzZXQo
KSkpLCBHUFJJbmZvOjpyZWdUMyk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlz
IGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBK
U1N0YWNrOjpDb2RlQmxvY2spKSk7CiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQ
UiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
ID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFt
ZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CiAg
ICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9u
Qml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotICAgICAg
ICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKSk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVh
bFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVl
KSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNr
OjpDYWxsZWUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAxOCw2
ICsxMDE4LDI3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZSgKICAg
ICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgIkV4ZWN1dGVkIE5vdGlmeVdyaXRlIik7CiB9
CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZh
ckFyZ09mZnNldCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKKyAgICAKKyAgICByZXR1cm4gc2l6ZU9m
VmFyYXJncyhleGVjLCBhcmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKK30KKwordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJf
dCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCBpbnQz
Ml90IG9mZnNldCwgaW50MzJfdCBsZW5ndGgsIGludDMyX3QgbWFuZGF0b3J5TWluaW11bSkKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkQXJndW1lbnRzKTsKKyAgICAKKyAgICBsb2FkVmFyYXJncyhleGVjLCBWaXJ0dWFsUmVn
aXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOworICAg
IAorICAgIGZvciAoaW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytp
KQorICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7
Cit9CisKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBh
LCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTI1LDYgKzEyNSw4IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25NYWtlUm9wZTMKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaElt
bVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxl
SW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0
YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRjaHBvaW50U2V0Kiwg
RW5jb2RlZEpTVmFsdWUpOworaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZh
cmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0
VmFyQXJnT2Zmc2V0KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhF
eGVjU3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGFyZ3Vt
ZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1p
bmltdW0pOwogCiBpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydEJveGVkRG91
YmxlVG9JbnQ1MihFbmNvZGVkSlNWYWx1ZSk7CiBpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29udmVydERvdWJsZVRvSW50NTIoZG91YmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTAgKzg3LDEwIEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotc3RhdGljIHZvaWQgZHVtcEFuZFZl
cmlmeUdyYXBoKEdyYXBoJiBncmFwaCwgY29uc3QgY2hhciogdGV4dCkKK3N0YXRpYyB2b2lkIGR1
bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgsIGNvbnN0IGNoYXIqIHRleHQsIGJvb2wgZm9y
Y2VEdW1wID0gZmFsc2UpCiB7CiAgICAgR3JhcGhEdW1wTW9kZSBtb2RlRm9yRmluYWxWYWxpZGF0
ZSA9IER1bXBHcmFwaDsKLSAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChncmFwaC5t
X3BsYW4ubW9kZSkpIHsKKyAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChncmFwaC5t
X3BsYW4ubW9kZSkgfHwgZm9yY2VEdW1wKSB7CiAgICAgICAgIGRhdGFMb2codGV4dCwgIlxuIik7
CiAgICAgICAgIGdyYXBoLmR1bXAoKTsKICAgICAgICAgbW9kZUZvckZpbmFsVmFsaWRhdGUgPSBE
b250RHVtcEdyYXBoOwpAQCAtMzY5LDcgKzM2OSw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQ
bGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgICAgIHJldHVybiBGYWlsUGF0aDsKICAgICAgICAg
fQogCi0gICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBG
VEwgbG93ZXJpbmc6Iik7CisgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBq
dXN0IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iiwgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KG1vZGUpKTsK
ICAgICAgICAgCiAgICAgICAgIGJvb2wgaGF2ZUxMVk07CiAgICAgICAgIFNhZmVwb2ludDo6UmVz
dWx0IHNhZmVwb2ludFJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxODAxODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTMzLDExICsxMzMsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgICAgICBtX3Jl
YWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNr
OjpDYWxsZWUpKTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
KQorICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKICAgICB2b2lkIHdyaXRlVG9wKCkKICAgICB7CisgICAgICAgIGlmIChtX25vZGUt
Pm9wKCkgPT0gTG9hZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBub3Rl
IHRoZSB3cml0ZXMgdG8gdGhlIGxvY2FscyB0aGF0IHdpbGwgc3RvcmUgdGhlIGFycmF5IGVsZW1l
bnRzIGFuZAorICAgICAgICAgICAgLy8gY291bnQuCisgICAgICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgbV93cml0
ZShkYXRhLT5jb3VudCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1p
dDsgaS0tOykKKyAgICAgICAgICAgICAgICBtX3dyaXRlKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5z
dGFydC5vZmZzZXQoKSArIGkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm90
ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgQ2FsbEZvcndh
cmRWYXJhcmdzLCBzaW5jZSBpdCByZWFkcworICAgICAgICAvLyBvdXIgYXJndW1lbnRzIHRoZSBz
YW1lIHdheSB0aGF0IGFueSBlZmZlY3RmdWwgdGhpbmcgbWlnaHQuCisgICAgICAgIAogICAgICAg
ICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7
IGktLSA+IDE7KQogICAgICAgICAgICAgICAgIG1fd3JpdGUodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShy
ZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODksNiArMTg5LDEwIEBAIGJvb2wgc2FmZVRv
RXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToK
ICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJn
czoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAg
ICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNl
IE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3IEBACiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
IgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlNldHVwVmFyYXJnc0Zy
YW1lLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiVHlwZVBy
b2ZpbGVyTG9nLmgiCiAKQEAgLTYyNCwzOCArNjI1LDE2OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGw7Ci0gICAg
aWYgKCFpc0NhbGwpCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9k
ZS0+b3AoKSA9PSBDb25zdHJ1Y3QpOwotICAgIAotICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRo
ZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQot
ICAgIC8vIGZvciBpdC4KLSAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBpc0NhbGwgPyAwIDog
MTsKKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAgIGJvb2wgaXNDYWxs
OworICAgIGJvb2wgaXNWYXJhcmdzOworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNh
c2UgQ2FsbDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGw7CisgICAgICAg
IGlzQ2FsbCA9IHRydWU7CisgICAgICAgIGlzVmFyYXJncyA9IGZhbHNlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86
OkNvbnN0cnVjdDsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAgIGlzVmFyYXJncyA9
IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2Ug
Q2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2Fs
bFZhcmFyZ3M7CisgICAgICAgIGlzQ2FsbCA9IHRydWU7CisgICAgICAgIGlzVmFyYXJncyA9IHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAg
Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3M7CisgICAgICAgIGlzQ2Fs
bCA9IGZhbHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgImJhZCBu
b2RlIHR5cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgRWRnZSBjYWxsZWVFZGdl
ID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKICAgICAKLSAgICBDYWxsTGlua0luZm86
OkNhbGxUeXBlIGNhbGxUeXBlID0gaXNDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExp
bmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAgLy8gR290dGEgbG9hZCB0aGUgYXJndW1lbnRzIHNvbWVo
b3cuIFZhcmFyZ3MgaXMgdHJpY2tpZXIuCisgICAgaWYgKGlzVmFyYXJncykgeworICAgICAgICAv
LyAxKSBnZXQgdGhlIGFyZ3VtZW50cworICAgICAgICAvLyAyKSBmbHVzaCByZWdpc3RlcnMKKyAg
ICAgICAgLy8gMykgc2V0IHVwIHRoZSBjYWxsIGZyYW1lCisgICAgICAgIC8vIDQpIGdldCB0aGUg
Y2FsbGVlIGFuZCAidGhpcyIgYW5kIGhhbmRsZSB0aGVtCisgICAgICAgIC8vIDUpIGZsdXNoIHJl
Z2lzdGVycyBhZ2FpbgorICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisKKyAgICAgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjI7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICAgICAgCisgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8gV2UgYXZvaWQg
Y2FsbGluZyBmbHVzaFJlZ2lzdGVycygpIGluc2lkZSB0aGUgY29udHJvbCBmbG93IG9mIENhbGxG
b3J3YXJkVmFyYXJncy4KKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGF1dG8gbG9hZEFyZ3VtZW50c0dQUiA9IFsmXSAoR1BSUmVnIHJl
c2VydmVkR1BSKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZh
cmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBKSVRDb21waWxlcjo6c2Vs
ZWN0U2NyYXRjaEdQUihyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0
KAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNH
UFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRH
UFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgbG9jayhyZXNlcnZlZEdQ
Uik7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHMuZ3By
KCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgICAgICAgICAgICAgIHVubG9jayhyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc2NyYXRjaEdQUjEgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNH
UFIsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIyID0gSklUQ29tcGlsZXI6
OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgcmVzZXJ2ZWRHUFIp
OworICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQ
Uihhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgcmVzZXJ2ZWRHUFIpOwor
ICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGUgd2hv
bGUgcmVnaXN0ZXIgZmlsZSB0byBvdXJzZWx2ZXMsIGFuZCBhcmd1bWVudHNHUFIgaGFzIHRoZQor
ICAgICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFNlbGVjdCBzb21lIHNjcmF0Y2ggcmVnaXN0
ZXJzLgorICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lsbCB1c2Ugc2NyYXRjaEdQUjIgdG8gcG9p
bnQgdG8gb3VyIHN0YWNrIGZyYW1lLgorCisgICAgICAgIHVuc2lnbmVkIG51bVVzZWRTdGFja1Ns
b3RzID0gbV9qaXQuZ3JhcGgoKS5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgICAgIAorICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBoYXZlQXJndW1lbnRzOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3
YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8gRG8gdGhlIGhvcnJpZmljIGZvby5hcHBseSh0
aGlzLCBhcmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBkbyB0
aGlzIG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBi
eSB0ZXN0aW5nIHRoZQorICAgICAgICAgICAgLy8gYXJndW1lbnRzIHJlZ2lzdGVyLiBUaGlzIHdp
bGwgaGFwcGVuIG9uY2Ugd2UgZ2V0IHJpZCBvZiB0aGUgYXJndW1lbnRzIGxhenkgY3JlYXRpb24g
YW5kCisgICAgICAgICAgICAvLyBsYXp5IHRlYXItb2ZmLgorICAgICAgICAgICAgCisgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmd1bWVu
dHNHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBlbWl0U2V0
dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShtX2ppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgICAgICAgICBy
ZXN1bHRHUFIgPSBzY3JhdGNoR1BSMjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGF2ZUFy
Z3VtZW50cyA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0
KTsKKyAgICAgICAgfQorCisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwg
aXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gUmlnaHQgbm93LCBhcmd1bWVudHMg
aXMgaW4gYXJndW1lbnRzR1BSIGFuZCB0aGUgcmVnaXN0ZXIgZmlsZSBpcyBmbHVzaGVkLgorICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIG51bVVzZWRTdGFja1Nsb3RzLCBkYXRhLT5m
aXJzdFZhckFyZ09mZnNldCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgd2UgaGF2ZSB0aGUg
YXJndW1lbnQgY291bnQgb2YgdGhlIGNhbGxlZSBmcmFtZSwgYnV0IHdlJ3ZlIGxvc3QgdGhlIGFy
Z3VtZW50cyBvcGVyYW5kLgorICAgICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIG9w
ZXJhbmQgd2hpbGUgcHJlc2VydmluZyB0aGUgY2FsbGVlIGZyYW1lLgorICAgICAgICBsb2FkQXJn
dW1lbnRzR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIGVt
aXRTZXRWYXJhcmdzRnJhbWUobV9qaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBmYWxzZSwg
c2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJ
bW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCBzY3JhdGNoR1BS
MSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBzY3JhdGNoR1BSMSwgYXJndW1lbnRzR1BSLCBkYXRhLT5maXJzdFZhckFyZ09m
ZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgaGF2ZUFyZ3VtZW50
cy5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZElt
bTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIERGR19BU1NFUlQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgZG9u
J3QgbmVlZCB0aGUgYXJndW1lbnRzIGFycmF5IGFueW1vcmUuCisgICAgICAgIGlmIChub2RlLT5v
cCgpICE9IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNDYWxsKSB7CisgICAgICAgICAgICAvLyBOb3cg
c2V0IHVwIHRoZSAidGhpcyIgYXJndW1lbnQuCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0
aGlzQXJndW1lbnQodGhpcywgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MgPyBub2Rl
LT5jaGlsZDIoKSA6IG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzQXJn
dW1lbnRHUFIgPSB0aGlzQXJndW1lbnQuZ3ByKCk7CisgICAgICAgICAgICB0aGlzQXJndW1lbnQu
dXNlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQodGhpc0FyZ3Vt
ZW50R1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3Vt
ZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQorICAgICAgICAvLyBm
b3IgaXQuCisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOwog
ICAgIAotICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJl
bltub2RlLT5maXJzdENoaWxkKCldOwotICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmly
c3QgY2hpbGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhl
Ci0gICAgLy8gYXJndW1lbnRzLgotICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hp
bGRyZW4oKSAtIDE7CisgICAgICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hp
bGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlCisgICAg
ICAgIC8vIGFyZ3VtZW50cy4KKyAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1D
aGlsZHJlbigpIC0gMTsKICAgICAKLSAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBk
dW1teVRoaXNBcmd1bWVudDsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsg
ZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVQYXls
b2FkU2xvdChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9q
aXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwotICAgICAgICBHUFJS
ZWcgYXJnR1BSID0gYXJnLmdwcigpOwotICAgICAgICB1c2UoYXJnRWRnZSk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7CisgICAgICAgICAgICBFZGdl
IGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGls
ZCgpICsgMSArIGldOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0Vk
Z2UpOworICAgICAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAgICAgICAg
IHVzZShhcmdFZGdlKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BSLCBt
X2ppdC5jYWxsZWVBcmd1bWVudFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xv
dChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEpTVmFs
dWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKICAgICBHUFJSZWcgY2FsbGVlR1BS
ID0gY2FsbGVlLmdwcigpOwotICAgIHVzZShjYWxsZWVFZGdlKTsKLSAgICBtX2ppdC5zdG9yZTY0
KGNhbGxlZUdQUiwgbV9qaXQuY2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlZSkpOworICAg
IGNhbGxlZS51c2UoKTsKKyAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6
OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKICAgICAKICAgICBmbHVzaFJlZ2lz
dGVycygpOwogCkBAIC02OTIsNiArODI0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUKICAgICBjYWxsTGlua0luZm8tPmNhbGxlZUdQUiA9IGNhbGxlZUdQUjsK
ICAgICAKICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0No
ZWNrLCBjYWxsTGlua0luZm8pOworICAgIAorICAgIC8vIElmIHdlIHdlcmUgdmFyYXJncywgdGhl
biBhZnRlciB0aGUgY2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3VyIHN0
YWNrIHBvaW50ZXIuCisgICAgaWYgKGlzVmFyYXJncykKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRy
dXN0ZWRJbW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5yZWFjaGFibGUg
W1tjbGFuZzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYgYW55IHRlbXBs
YXRlIGV4cGFuc2lvbiB1c2VzIGl0CkBAIC00MjIxLDkgKzQzNTcsNTYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2Ug
Q29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZh
cmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBlbWl0Q2FsbChub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAg
ICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Cisg
ICAgICAgIAorICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICB7CisgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1l
bnRzR1BSLCBkYXRhLT5vZmZzZXQpOworICAgICAgICAKKyAgICAgICAgbG9jayhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFy
Z3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNHUFIg
PSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICB9CisgICAgICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIAor
ICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4g
ZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCisgICAgICAgIC8v
IGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0
bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAgICAvLyBzdGFuZHBvaW50LiBU
aGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRo
ZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4CisK
KyAgICAgICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9CisgICAgICAgICAgICBK
SVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJn
dW1lbnRzR1BSKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpT
VmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmUsCisgICAgICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdU
aGlzR1BSLAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKKyAg
ICAgICAgCisgICAgICAgIG1faml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBK
SVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgCisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIGRhdGEtPm1hY2hpbmVT
dGFydC5vZmZzZXQoKSwgYXJndW1lbnRzR1BSLCBkYXRhLT5vZmZzZXQsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgCisgICAgICAgIG5v
UmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2Ug
Q3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgCkBA
IC00MzI4LDkgKzQ1MTEsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1l
bnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsK
LSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAg
JiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0g
MSksCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAg
ICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50
Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9
CiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTQzNDQsMjAgKzQ1MzgsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCiAgICAg
ICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgbV9qaXQu
bW92ZSgKICAgICAgICAgICAgICAgICBJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEp
KSksCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1
bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVy
ID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50
UmVnaXN0ZXIpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIC8vIEZJWE1FOiB0aGUgc2xvdyBwYXRoIGdlbmVyYXRvciBzaG91bGQgcGVyZm9ybSBhIGZv
cndhcmQgc3BlY3VsYXRpb24gdGhhdCB0aGUKLSAgICAgICAgLy8gcmVzdWx0IGlzIGFuIGludGVn
ZXIuIEZvciBub3cgd2UgcG9zdHBvbmUgdGhlIHNwZWN1bGF0aW9uIGJ5IGhhdmluZyB0aGlzIHJl
dHVybgotICAgICAgICAvLyBhIEpTVmFsdWUuCi0gICAgICAgIAogICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBj
cmVhdGVkLCB0aGlzLCBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgsIHJlc3VsdEdQUiwKQEAg
LTQzODQsNyArNDU4MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50
c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAg
ICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAg
JiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKApA
QCAtNDM5Miw3ICs0NTg5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIsCiAgICAgICAgICAgICAgICAgICAg
IEltbTMyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkgLSAxKSkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsK
KyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkK
KyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIo
SlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCAwLApAQCAtNDQ0OSwxNCArNDY1MSwyMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGlu
ZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAgICAgICAg
IAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgewor
ICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAg
ICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKSB7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1
YWwsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICAgICAg
SW1tMzIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNp
emUoKSAtIDEpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOwor
ICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihK
U1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgcmVzdWx0R1BSKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShy
ZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTc4LDcgKzU3OCw2IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotI2lmbmRlZiBOREVCVUcKICAgICAvLyBVc2Vk
IHRvIEFTU0VSVCBmbHVzaFJlZ2lzdGVycygpIGhhcyBiZWVuIGNhbGxlZCBwcmlvciB0bwogICAg
IC8vIGNhbGxpbmcgb3V0IGZyb20gSklUIGNvZGUgdG8gYSBDIGhlbHBlciBmdW5jdGlvbi4KICAg
ICBib29sIGlzRmx1c2hlZCgpCkBAIC01OTMsNyArNTkyLDYgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJ
bW02NChOb2RlKiBub2RlKQpAQCAtMTEwOSw2ICsxMTA3LDI2IEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRp
b25fRUpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBh
cmcyLCB1bnNpZ25lZCBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMyKGFyZzMp
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEZfSklUT3BlcmF0aW9uX0VGSlpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB1bnNpZ25lZCBhcmczLCBHUFJSZWcgYXJnNCkKKyAgICB7
CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBU
cnVzdGVkSW1tMzIoYXJnMyksIGFyZzQpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRUpaIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHVuc2lnbmVkIGFyZzIpCisgICAgeworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbTMy
KGFyZzIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VaSlpaWiBvcGVyYXRpb24sIHVuc2lnbmVkIGFy
ZzEsIEdQUlJlZyBhcmcyLCB1bnNpZ25lZCBhcmczLCBHUFJSZWcgYXJnNCwgdW5zaWduZWQgYXJn
NSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tMzIoYXJnMSksIGFyZzIsIFRydXN0ZWRJbW0zMihhcmczKSwgYXJnNCwgVHJ1c3RlZElt
bTMyKGFyZzUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+
CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihGdW5jdGlvblR5cGUgb3BlcmF0
aW9uLCBOb1Jlc3VsdFRhZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Rh
Y2tMYXlvdXRQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIEJpdFZlY3RvciB1c2VkTG9jYWxzOwogICAg
ICAgICAKICAgICAgICAgLy8gQ29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBm
cm9tIElSLgotICAgICAgICBib29sIGhhc0dldExvY2FsVW5saW5rZWQgPSBmYWxzZTsKKyAgICAg
ICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSBmYWxzZTsKICAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQpAQCAtODEsNyArODEsMjIgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQo
b3BlcmFuZC50b0xvY2FsKCkpOwotICAgICAgICAgICAgICAgICAgICBoYXNHZXRMb2NhbFVubGlu
a2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Cisg
ICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJh
cmdzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQuaXNMb2NhbCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+Y291bnQudG9M
b2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0LmlzTG9jYWwoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxseSByZWxpZXMgb24g
dGhlIGNvbnRpZ3VpdHkgb2Ygc3RhY2sgbGF5b3V0CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBhc3NpZ25tZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChWaXJ0dWFsUmVn
aXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlzTG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsg
aS0tOykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVh
bFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSAvLyB0aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCisgICAgICAg
ICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBA
IC0xMTMsNiArMTI4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGFy
Z3VtZW50c1JlZ2lzdGVyLnRvTG9jYWwoKSk7CiAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldCh1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpLnRvTG9jYWwoKSk7
CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKSB7CisgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAor
ICAgICAgICAgICAgICAgICAgICBKU1N0YWNrOjpBcmd1bWVudENvdW50ICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKTsgYXJndW1lbnQtLSA+IDE7KSB7CiAgICAgICAgICAgICAgICAgdXNl
ZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwpAQCAtMTQ4LDI0ICsxNjgs
MjEgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRf
TUFYKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAg
ICAgICAgICAgICAgICBhbGxvY2F0aW9uW3ZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKV0pOwor
ICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFsbG9jYXRpb24s
IHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNv
ZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHNSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAg
ICAgICAgIGFsbG9jYXRpb25bY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkudG9Mb2Nh
bCgpXSk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIgPQor
ICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+YXJndW1lbnRz
UmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKLSAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uWwotICAgICAgICAgICAgICAgICAg
ICB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkudG9Mb2NhbCgpXSkKKyAgICAgICAgICAg
ICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGNvZGVC
bG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKSkKICAgICAgICAgICAgICAgICA9PSB1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIGNv
ZGVCbG9jaygpLT5zZXRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+dW5jaGVja2VkQWN0aXZh
dGlvblJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0
QWN0aXZhdGlvblJlZ2lzdGVyKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGFsbG9jYXRpb25bY29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpLnRvTG9jYWwo
KV0pKTsKKyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJsb2NrKCktPmFj
dGl2YXRpb25SZWdpc3RlcigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFRo
aXMgcmVnaXN0ZXIgaXMgbmV2ZXIgdmFsaWQgZm9yIERGRyBjb2RlIGJsb2Nrcy4KQEAgLTE3Niwx
NSArMTkzLDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUtPnVzZXNBcmd1bWVudHMoKSkgewot
ICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0ZXIgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblttX2dy
YXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkudG9Mb2NhbCgpXSk7Cisg
ICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3RlciA9IGFzc2ln
bigKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgbV9ncmFwaC5hcmd1bWVudHNSZWdp
c3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIAogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKAotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0
aW9uW3VubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSkudG9Mb2NhbCgp
XSkKKyAgICAgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9kaWZpZWRBcmd1
bWVudHNSZWdpc3RlcihtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFt
ZSkpKQogICAgICAgICAgICAgICAgICAgICA9PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIo
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3RlcikpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkg
eworICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVy
ID0gYXNzaWduKAorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgYXJndW1lbnQt
LSA+IDE7KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9zaXRpb24gPSBt
X2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXJn
dW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjI3LDkgKzI0OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnBhcmFtZXRlckNvdW50KCkpOwog
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzeW1ib2xUYWJsZS0+cGFyYW1ldGVyQ291
bnQoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1lbnRzW2ldID0g
c2xvd0FyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1lbnRzW2ldLmluZGV4KTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdT
bG93QXJndW1lbnRzW2ldLmluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlv
bltyZWcudG9Mb2NhbCgpXSkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dB
cmd1bWVudHNbaV0uaW5kZXggPSBhc3NpZ24oYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKHNs
b3dBcmd1bWVudHNbaV0uaW5kZXgpKS5vZmZzZXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd0FyZ3VtZW50cyA9IFdURjo6
bW92ZShuZXdTbG93QXJndW1lbnRzKTsKQEAgLTIzNyw3ICsyNTYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZpeCBHZXRMb2NhbFVubGlua2VkJ3MgdmFyaWFi
bGUgcmVmZXJlbmNlcy4KLSAgICAgICAgaWYgKGhhc0dldExvY2FsVW5saW5rZWQpIHsKKyAgICAg
ICAgaWYgKGhhc05vZGVzVGhhdE5lZWRGaXh1cCkgewogICAgICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwogICAgICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC0yNDYsMTAgKzI2NSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogewotICAgICAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT51bmxpbmtlZExvY2FsKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9j
YXRpb25bb3BlcmFuZC50b0xvY2FsKCldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldFVubGlua2VkTWFjaGluZUxvY2FsKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwoYXNzaWduKGFsbG9jYXRpb24sIG5vZGUt
PnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2Fk
VmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRh
LT5jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBh
c3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIApA
QCAtMjYyLDYgKzI4NSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2lnbihjb25zdCBW
ZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorICAgIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IHNyYzsKKyAgICAgICAgaWYgKHJlc3Vs
dC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9j
YXRpb25bcmVzdWx0LnRvTG9jYWwoKV07CisgICAgICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09
IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKG15QWxsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CiB9OwogCiBib29sIHBlcmZvcm1TdGFja0xheW91dChHcmFwaCYgZ3JhcGgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3MSw2ICsyNzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldFNj
b3BlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ291bnRF
eGVjdXRpb246CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcg
KzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgc3RhcnRDcmFzaGluZygpOyBcCiAgICAgICAg
ICAgICBkYXRhTG9nRigiXG5cblxuQXQgIik7IFwKICAgICAgICAgICAgIHJlcG9ydFZhbGlkYXRp
b25Db250ZXh0IGNvbnRleHQ7IFwKLSAgICAgICAgICAgIGRhdGFMb2dGKCI6IHZhbGlkYXRpb24g
JXMgKCVzOiVkKSBmYWlsZWQuXG4iLCAjYXNzZXJ0aW9uLCBfX0ZJTEVfXywgX19MSU5FX18pOyBc
CisgICAgICAgICAgICBkYXRhTG9nRigiOiB2YWxpZGF0aW9uIGZhaWxlZDogJXMgKCVzOiVkKS5c
biIsICNhc3NlcnRpb24sIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKICAgICAgICAgICAgIGR1bXBH
cmFwaElmQXBwcm9wcmlhdGUoKTsgXAogICAgICAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFp
bHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24p
OyBcCiAgICAgICAgICAgICBDUkFTSCgpOyBcCkBAIC02MiwxMSArNjIsMTEgQEAgcHVibGljOgog
ICAgICAgICAgICAgc3RhcnRDcmFzaGluZygpOyBcCiAgICAgICAgICAgICBkYXRhTG9nRigiXG5c
blxuQXQgIik7IFwKICAgICAgICAgICAgIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQ7
IFwKLSAgICAgICAgICAgIGRhdGFMb2dGKCI6IHZhbGlkYXRpb24gKCVzID0gIiwgI2xlZnQpOyBc
CisgICAgICAgICAgICBkYXRhTG9nRigiOiB2YWxpZGF0aW9uIGZhaWxlZDogKCVzID0gIiwgI2xl
ZnQpOyBcCiAgICAgICAgICAgICBkYXRhTG9nKGxlZnQpOyBcCiAgICAgICAgICAgICBkYXRhTG9n
RigiKSA9PSAoJXMgPSAiLCAjcmlnaHQpOyBcCiAgICAgICAgICAgICBkYXRhTG9nKHJpZ2h0KTsg
XAotICAgICAgICAgICAgZGF0YUxvZ0YoIikgKCVzOiVkKSBmYWlsZWQuXG4iLCBfX0ZJTEVfXywg
X19MSU5FX18pOyBcCisgICAgICAgICAgICBkYXRhTG9nRigiKSAoJXM6JWQpLlxuIiwgX19GSUxF
X18sIF9fTElORV9fKTsgXAogICAgICAgICAgICAgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgpOyBc
CiAgICAgICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVf
XywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2xlZnQgIiA9PSAiICNyaWdodCk7IFwKICAgICAgICAg
ICAgIENSQVNIKCk7IFwKQEAgLTQ1Niw2ICs0NTYsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhY3RzIGxp
a2UgYSByZXNldC4gSXQncyBvayB0byBoYXZlIGEgc2Vjb25kIEdldExvY2FsIGZvciBhIGxvY2Fs
IGluIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGlmIHdlIGhhZCBhIFNl
dEFyZ3VtZW50IGZvciB0aGF0IGxvY2FsLgorICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBv
c2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0OworICAgICAgICAgICAgICAg
ICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90U2V0Owor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkocmV2aXNpb24gMTgwMTg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDYgKzc3LDkgQEAgc3RhdGljIGlubGluZSBMVHlwZSBzdHJ1Y3RUeXBl
KExDb250ZXh0IAogICAgIHJldHVybiBzdHJ1Y3RUeXBlKGNvbnRleHQsIGVsZW1lbnRzLCAyLCBw
YWNraW5nKTsKIH0KIAorLy8gRklYTUU6IE1ha2UgdGhlIFZhcmlhZGljaXR5IGFyZ3VtZW50IG5v
dCBiZSB0aGUgbGFzdCBhcmd1bWVudCB0byBmdW5jdGlvblR5cGUoKSBzbyB0aGF0IHRoaXMgZnVu
Y3Rpb24KKy8vIGNhbiB1c2UgQysrMTEgdmFyaWFkaWMgdGVtcGxhdGVzCisvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTc1CiBlbnVtIFZhcmlhZGljaXR5IHsg
Tm90VmFyaWFkaWMsIFZhcmlhZGljIH07CiBzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlw
ZShMVHlwZSByZXR1cm5UeXBlLCBjb25zdCBMVHlwZSogcGFyYW1UeXBlcywgdW5zaWduZWQgcGFy
YW1Db3VudCwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkpCiB7CkBAIC0xMTAsNiArMTEzLDE2IEBA
IHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHIKICAgICBMVHlwZSBwYXJh
bVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCB9OwogICAgIHJldHVy
biBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgNCwgdmFyaWFkaWNpdHkpOwog
fQorc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5
cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFtMywgTFR5cGUgcGFyYW00LCBMVHlw
ZSBwYXJhbTUsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCit7CisgICAg
TFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQsIHBh
cmFtNSB9OworICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywg
NSwgdmFyaWFkaWNpdHkpOworfQorc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5
cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFtMywg
TFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIExUeXBlIHBhcmFtNiwgVmFyaWFkaWNpdHkgdmFy
aWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKK3sKKyAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBh
cmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01LCBwYXJhbTYgfTsKKyAgICByZXR1
cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDYsIHZhcmlhZGljaXR5KTsK
K30KIAogc3RhdGljIGlubGluZSBMVHlwZSB0eXBlT2YoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBs
bHZtLT5UeXBlT2YodmFsdWUpOyB9CiAKQEAgLTI5OCw0MSArMzExLDEzIEBAIHN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIHsKICAgICByZXR1cm4gYnVpbGRDYWxsKGJ1
aWxkZXIsIGZ1bmN0aW9uLCAmYXJnMSwgMSk7CiB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZh
bHVlIGFyZzIpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiB9OwotICAgIHJl
dHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDIpOwotfQotc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwg
TFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMykKLXsKLSAgICBMVmFsdWUgYXJn
c1tdID0geyBhcmcxLCBhcmcyLCBhcmczIH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVy
LCBmdW5jdGlvbiwgYXJncywgMyk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFy
ZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+
CitMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZh
bHVlIGFyZzEsIEFyZ3MuLi4gYXJncykKIHsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBh
cmcyLCBhcmczLCBhcmc0IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlv
biwgYXJncywgNCk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIg
YnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1
ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9
IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSB9OwotICAgIHJldHVybiBidWlsZENhbGwo
YnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDUpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVp
bGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExW
YWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUg
YXJnNikKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBh
cmc1LCBhcmc2IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJn
cywgNik7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmcz
LCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBMVmFsdWUgYXJnNykKLXsK
LSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2
LCBhcmc3IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywg
Nyk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwg
TFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBM
VmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBMVmFsdWUgYXJnNywgTFZhbHVl
IGFyZzgpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwg
YXJnNSwgYXJnNiwgYXJnNywgYXJnOCB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwg
ZnVuY3Rpb24sIGFyZ3MsIDgpOworICAgIExWYWx1ZSBhcmdzQXJyYXlbXSA9IHsgYXJnMSwgYXJn
cy4uLiB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3NBcnJh
eSwgc2l6ZW9mKGFyZ3NBcnJheSkgLyBzaXplb2YoTFZhbHVlKSk7CiB9CisKIHN0YXRpYyBpbmxp
bmUgdm9pZCBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKExWYWx1ZSBpbnN0cnVjdGlv
biwgTENhbGxDb252IGNhbGxpbmdDb252ZW50aW9uKSB7IGxsdm0tPlNldEluc3RydWN0aW9uQ2Fs
bENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxpbmdDb252ZW50aW9uKTsgfQogc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGFnZ1ZhbCwg
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRXh0cmFjdFZhbHVlKGJ1aWxkZXIs
IGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTZWxlY3Qo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZhbHVlIHRha2VuLCBMVmFsdWUg
bm90VGFrZW4pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2VsZWN0KGJ1aWxkZXIsIGNvbmRpdGlvbiwg
dGFrZW4sIG5vdFRha2VuLCAiIik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MjAsNiArMTIwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAK
ICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgY2FzZSBDYWxsOgogICAg
IGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9y
d2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgTG9hZFZh
cmFyZ3M6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0Ogog
ICAgIGNhc2UgVmFsdWVUb0ludDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwogICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgpAQCAtMTI4LDYgKzEyOCwyMCBA
QCBzdGF0aWMgdm9pZCBkdW1wRGF0YVNlY3Rpb24oRGF0YVNlY3Rpb24qCiAgICAgfQogfQogCitz
dGF0aWMgaW50IG9mZnNldE9mU3RhY2tSZWdpb24oU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29y
ZE1hcCwgdWludDMyX3Qgc3RhY2ttYXBJRCkKK3sKKyAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6
aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YWNrbWFwSUQpOworICAgIFJFTEVBU0Vf
QVNTRVJUKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVy
LT52YWx1ZS5zaXplKCkgPT0gMSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWVbMF0u
bG9jYXRpb25zLnNpemUoKSA9PSAxKTsKKyAgICBMb2NhdGlvbiBjYXB0dXJlZExvY2F0aW9uID0K
KyAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFwcyhudWxscHRyLCBpdGVyLT52YWx1ZVswXS5s
b2NhdGlvbnNbMF0pOworICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24ua2luZCgp
ID09IExvY2F0aW9uOjpSZWdpc3Rlcik7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2Nh
dGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgUkVMRUFTRV9B
U1NFUlQoIShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUgc2l6ZW9mKFJlZ2lzdGVyKSkpOwor
ICAgIHJldHVybiBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsK
K30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRGVzY3JpcHRvclR5cGU+CiB2b2lkIGdlbmVyYXRlSUNG
YXN0UGF0aCgKICAgICBTdGF0ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBHZW5lcmF0
ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKQEAgLTI0Myw2ICsyNTcsMzIgQEAgc3RhdGlj
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnNGb3IoY29ucwogICAgIHJldHVybiBSZWdpc3RlclNl
dChyZWNvcmQudXNlZFJlZ2lzdGVyU2V0KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsVHlwZT4KK3ZvaWQgYWRqdXN0Q2Fs
bElDc0ZvclN0YWNrbWFwcyhWZWN0b3I8Q2FsbFR5cGU+JiBjYWxscywgU3RhY2tNYXBzOjpSZWNv
cmRNYXAmIHJlY29yZE1hcCkKK3sKKyAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDog
d2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KKyAg
ICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMg
dGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KKworICAgIFZlY3RvcjxDYWxsVHlwZT4gb2xkQ2Fs
bHM7CisgICAgb2xkQ2FsbHMuc3dhcChjYWxscyk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIENhbGxUeXBlJiBjYWxs
ID0gb2xkQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6
aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3RhY2ttYXBJRCgpKTsKKyAgICAg
ICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaXRlci0+dmFsdWUuc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgICAgIENhbGxUeXBlIGNvcHkgPSBjYWxsOworICAgICAgICAg
ICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWVbal0uaW5zdHJ1Y3Rpb25P
ZmZzZXQ7CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoY29weSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzdGQ6OnNvcnQoY2FsbHMuYmVnaW4oKSwgY2FsbHMuZW5kKCkpOworfQorCiBzdGF0
aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgU3RhdGUmIHN0YXRlLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29kZSwgR2VuZXJhdGVkRnVuY3Rpb24g
Z2VuZXJhdGVkRnVuY3Rpb24sCiAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCwg
Ym9vbCBkaWRTZWVVbndpbmRJbmZvKQpAQCAtMjUxLDE2ICsyOTEsMTQgQEAgc3RhdGljIHZvaWQg
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFZNJiB2bSA9IGdyYXBoLm1fdm07CiAg
ICAgU3RhY2tNYXBzIHN0YWNrbWFwcyA9IGppdENvZGUtPnN0YWNrbWFwczsKICAgICAKLSAgICBT
dGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YXRl
LmNhcHR1cmVkU3RhY2ttYXBJRCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSByZWNvcmRN
YXAuZW5kKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlLnNpemUoKSA9PSAxKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnMuc2l6ZSgpID09IDEp
OwotICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24gPQotICAgICAgICBMb2NhdGlvbjo6Zm9y
U3RhY2ttYXBzKCZqaXRDb2RlLT5zdGFja21hcHMsIGl0ZXItPnZhbHVlWzBdLmxvY2F0aW9uc1sw
XSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5raW5kKCkgPT0gTG9jYXRp
b246OlJlZ2lzdGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExvY2F0aW9uLmdwcigp
ID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghKGNh
cHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgaW50MzJf
dCBsb2NhbHNPZmZzZXQgPSBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpIC8gc2l6ZW9mKFJlZ2lz
dGVyKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICBpbnQgbG9jYWxzT2Zmc2V0ID0K
KyAgICAgICAgb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLmNhcHR1cmVkU3Rh
Y2ttYXBJRCkgKyBncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgCisgICAgaW50IHZhcmFy
Z3NTcGlsbFNsb3RzT2Zmc2V0OworICAgIGlmIChzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNr
bWFwSUQgIT0gVUlOVF9NQVgpCisgICAgICAgIHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0ID0gb2Zm
c2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2tt
YXBJRCk7CisgICAgZWxzZQorICAgICAgICB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IDA7CiAg
ICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGEuc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Z3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV0uaW5saW5lQ2FsbEZyYW1lOwpAQCAtMzM2LDcg
KzM3NCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAg
ICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiSGFuZGxpbmcgT1NSIHN0YWNrbWFwICMiLCBleGl0Lm1fc3RhY2ttYXBJRCwgIiBm
b3IgIiwgZXhpdC5tX2NvZGVPcmlnaW4sICJcbiIpOwogCi0gICAgICAgICAgICBpdGVyID0gcmVj
b3JkTWFwLmZpbmQoZXhpdC5tX3N0YWNrbWFwSUQpOworICAgICAgICAgICAgYXV0byBpdGVyID0g
cmVjb3JkTWFwLmZpbmQoZXhpdC5tX3N0YWNrbWFwSUQpOwogICAgICAgICAgICAgaWYgKGl0ZXIg
PT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXpl
ZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zNzUsNyArNDEzLDcgQEAgc3Rh
dGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5k
bGluZyBHZXRCeUlkIHN0YWNrbWFwICMiLCBnZXRCeUlkLnN0YWNrbWFwSUQoKSwgIlxuIik7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChnZXRCeUlkLnN0
YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChnZXRC
eUlkLnN0YWNrbWFwSUQoKSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5k
KCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTQxMiw3ICs0NTAsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIFB1dEJ5SWQgc3Rh
Y2ttYXAgIyIsIHB1dEJ5SWQuc3RhY2ttYXBJRCgpLCAiXG4iKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5kKHB1dEJ5SWQuc3RhY2ttYXBJRCgpKTsKKyAg
ICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKHB1dEJ5SWQuc3RhY2ttYXBJRCgp
KTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgewogICAgICAgICAg
ICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtNDQ0LDE0ICs0ODIsMTMgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIENoZWNr
SW5EZXNjcmlwdG9yJiBjaGVja0luID0gc3RhdGUuY2hlY2tJbnNbaV07CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSGFuZGxpbmcgY2hlY2tJbiBzdGFja21hcCAjIiwgY2hlY2tJbi5zdGFj
a21hcElEKCksICJcbiIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpdGVyID0gcmVjb3Jk
TWFwLmZpbmQoY2hlY2tJbi5zdGFja21hcElEKCkpOworICAgICAgICAgICAgYXV0byBpdGVyID0g
cmVjb3JkTWFwLmZpbmQoY2hlY2tJbi5zdGFja21hcElEKCkpOwogICAgICAgICAgICAgaWYgKGl0
ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGlt
aXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00ODAsNyArNTE3LDYgQEAg
c3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAg
IGNoZWNrSW4ubV9nZW5lcmF0b3JzLmFwcGVuZChDaGVja0luR2VuZXJhdG9yKHN0dWJJbmZvLCBz
bG93Q2FsbCwgYmVnaW4pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCiAgICAgICAgIAog
ICAgICAgICBleGNlcHRpb25UYXJnZXQubGluaygmc2xvd1BhdGhKSVQpOwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25KdW1wID0gc2xvd1BhdGhKSVQuanVtcCgpOwpAQCAt
NTAzLDI5ICs1MzksMTEgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBz
KAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgICAgIGdlbmVyYXRlQ2hlY2tJbklDRmFzdFBhdGgoCiAgICAgICAgICAgICAg
ICAgc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJlY29yZE1hcCwgc3RhdGUu
Y2hlY2tJbnNbaV0sCi0gICAgICAgICAgICAgICAgc2l6ZU9mQ2hlY2tJbigpKTsgCisgICAgICAg
ICAgICAgICAgc2l6ZU9mSW4oKSk7IAogICAgICAgICB9IAogICAgIH0KICAgICAKLSAgICAvLyBI
YW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0
IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KLSAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBs
aWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KLSAg
ICBWZWN0b3I8SlNDYWxsPiBvbGRDYWxscyA9IHN0YXRlLmpzQ2FsbHM7Ci0gICAgc3RhdGUuanND
YWxscy5yZXNpemUoMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhbGxzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIEpTQ2FsbCYgY2FsbCA9IG9sZENhbGxzW2ldOwotICAgICAg
ICAKLSAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRN
YXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IHJlY29yZE1h
cC5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraikgewotICAgICAgICAgICAgSlNDYWxs
IGNvcHkgPSBjYWxsOwotICAgICAgICAgICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRl
ci0+dmFsdWVbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgICAgICAgICBzdGF0ZS5qc0NhbGxz
LmFwcGVuZChjb3B5KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGQ6OnNvcnQoc3Rh
dGUuanNDYWxscy5iZWdpbigpLCBzdGF0ZS5qc0NhbGxzLmVuZCgpKTsKKyAgICBhZGp1c3RDYWxs
SUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzQ2FsbHMsIHJlY29yZE1hcCk7CiAgICAgCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc3RhdGUuanNDYWxscy5zaXplKCk7IGktLTspIHsKICAgICAgICAgSlND
YWxsJiBjYWxsID0gc3RhdGUuanNDYWxsc1tpXTsKQEAgLTU0Nyw5ICs1NjUsMzIgQEAgc3RhdGlj
IHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBjYWxsLmxpbmsodm0s
IGxpbmtCdWZmZXIpOwogICAgIH0KICAgICAKKyAgICBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBz
KHN0YXRlLmpzQ2FsbFZhcmFyZ3NlcywgcmVjb3JkTWFwKTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGF0ZS5qc0NhbGxWYXJhcmdzZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEpT
Q2FsbFZhcmFyZ3MmIGNhbGwgPSBzdGF0ZS5qc0NhbGxWYXJhcmdzZXNbaV07CisgICAgICAgIAor
ICAgICAgICBDQ2FsbEhlbHBlcnMgZmFzdFBhdGhKSVQoJnZtLCBjb2RlQmxvY2spOworICAgICAg
ICBjYWxsLmVtaXQoZmFzdFBhdGhKSVQsIGdyYXBoLCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCk7
CisgICAgICAgIAorICAgICAgICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+
KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNhbGwubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAg
c2l6ZV90IHNpemVPZklDID0gc2l6ZU9mSUNGb3IoY2FsbC5ub2RlKCkpOworCisgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMp
OworICAgICAgICBpZiAoIWxpbmtCdWZmZXIuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCJGYWlsZWQgdG8gaW5zZXJ0IGlubGluZSBjYWNoZSBmb3IgdmFyYXJncyBjYWxsIChzcGVj
aWZpY2FsbHksICIsIEdyYXBoOjpvcE5hbWUoY2FsbC5ub2RlKCktPm9wKCkpLCAiKSBiZWNhdXNl
IHdlIHRob3VnaHQgdGhlIHNpemUgd291bGQgYmUgIiwgc2l6ZU9mSUMsICIgYnV0IGl0IGVuZGVk
IHVwIGJlaW5nICIsIGZhc3RQYXRoSklULm1fYXNzZW1ibGVyLmNvZGVTaXplKCksICIgcHJpb3Ig
dG8gY29tcGFjdGlvbi5cbiIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2Vt
YmxlclR5cGVfVDo6ZmlsbE5vcHMoCisgICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5rQnVmZmVy
LnNpemUoKSwgc2l6ZU9mSUMgLSBsaW5rQnVmZmVyLnNpemUoKSk7CisgICAgICAgIAorICAgICAg
ICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIsIHN0YXRlLmZpbmFsaXplci0+aGFuZGxlRXhjZXB0
aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7CisgICAgfQorICAgIAogICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCi0gICAgaXRlciA9IHJlY29yZE1hcC5m
aW5kKHN0YXRlLmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEKTsKKyAgICBh
dXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0
aW9uU3RhY2ttYXBJRCk7CiAgICAgLy8gSXQncyBzb3J0IG9mIHJlbW90ZWx5IHBvc3NpYmxlIHRo
YXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlvbiBoYW5kbGluZwogICAgIC8vIHBh
dGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KICAgICBpZiAoaXRlciAhPSByZWNvcmRN
YXAuZW5kKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
bGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwx
MSArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiREZHTm9kZS5o
IgogI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCit1c2luZyBu
YW1lc3BhY2UgREZHOworCiAvLyBUaGUgZGVmYXVsdCBzaXplcyBhcmUgeDg2LTY0LXNwZWNpZmlj
LCBhbmQgd2VyZSBmb3VuZCBlbXBpcmljYWxseS4gVGhleSBoYXZlIHRvIGNvdmVyIHRoZSB3b3Jz
dAogLy8gcG9zc2libGUgY29tYmluYXRpb24gb2YgcmVnaXN0ZXJzIGxlYWRpbmcgdG8gdGhlIGxh
cmdlc3QgcG9zc2libGUgZW5jb2Rpbmcgb2YgZWFjaCBpbnN0cnVjdGlvbiBpbgogLy8gdGhlIElD
LgpAQCAtNjEsMjUgKzY0LDc0IEBAIHNpemVfdCBzaXplT2ZQdXRCeUlkKCkKICNlbmRpZgogfQog
Ci1zaXplX3Qgc2l6ZU9mQ2hlY2tJbigpCitzaXplX3Qgc2l6ZU9mQ2FsbCgpCiB7CiAjaWYgQ1BV
KEFSTTY0KQotICAgIHJldHVybiA0OworICAgIHJldHVybiA1NjsKICNlbHNlCi0gICAgcmV0dXJu
IDU7IAorICAgIHJldHVybiA1MzsKICNlbmRpZgogfQogCitzaXplX3Qgc2l6ZU9mQ2FsbFZhcmFy
Z3MoKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1cm4gNTY7CisjZWxzZQorICAgIHJldHVy
biAyNzU7CisjZW5kaWYKK30KIAotc2l6ZV90IHNpemVPZkNhbGwoKQorc2l6ZV90IHNpemVPZkNh
bGxGb3J3YXJkVmFyYXJncygpCiB7CiAjaWYgQ1BVKEFSTTY0KQogICAgIHJldHVybiA1NjsKICNl
bHNlCi0gICAgcmV0dXJuIDUzOworICAgIHJldHVybiAzNzI7CisjZW5kaWYKK30KKworc2l6ZV90
IHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1cm4g
NTY7CisjZWxzZQorICAgIHJldHVybiAyNTM7CisjZW5kaWYKK30KKworc2l6ZV90IHNpemVPZklu
KCkKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDQ7CisjZWxzZQorICAgIHJldHVybiA1
OyAKICNlbmRpZgogfQogCitzaXplX3Qgc2l6ZU9mSUNGb3IoTm9kZSogbm9kZSkKK3sKKyAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIHJldHVybiBz
aXplT2ZHZXRCeUlkKCk7CisgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICByZXR1cm4gc2l6ZU9m
UHV0QnlJZCgpOworICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAg
cmV0dXJuIHNpemVPZkNhbGwoKTsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICByZXR1
cm4gc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAg
ICAgICAgcmV0dXJuIHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOworICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsKKyAg
ICBjYXNlIEluOgorICAgICAgICByZXR1cm4gc2l6ZU9mSW4oKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAog
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCwxMiArMjgsMjMgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCi1uYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIERGRyB7CitzdHJ1
Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CiAKIHNpemVfdCBzaXplT2ZHZXRCeUlkKCk7
CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOwogc2l6ZV90IHNpemVPZkNhbGwoKTsKLXNpemVfdCBz
aXplT2ZDaGVja0luKCk7CitzaXplX3Qgc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKK3NpemVfdCBzaXpl
T2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsKK3NpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCk7
CitzaXplX3Qgc2l6ZU9mSW4oKTsKKworc2l6ZV90IHNpemVPZklDRm9yKERGRzo6Tm9kZSopOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxODAxODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05OSwxMCArOTksMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUodm9p
ZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDYiwg
ZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhWX0pJ
VE9wZXJhdGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwg
aW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVpKWlpaLCBmdW5jdGlvblR5cGUo
dm9pZFR5cGUsIGludFB0ciwgaW50MzIsIGludDY0LCBpbnQzMiwgaW50MzIsIGludDMyKSkgXAog
ICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50NjQp
KSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBp
bnQzMikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUoaW50MzIs
IGRvdWJsZVR5cGUpKSBcCi0gICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlw
ZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKQorICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0VDLCBm
dW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyKSkgXAorICAgIG1hY3JvKFpfSklUT3Bl
cmF0aW9uX0VKWiwgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGludDY0LCBpbnQzMikpCiAg
ICAgCiBjbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5IDogcHVibGljIENvbW1vblZhbHVlcyB7CiBw
dWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCShyZXZp
c2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgSlNDYWxsOjpKU0NhbGwodW5zaWduZWQg
c3RhY2ttYXBJRCwgTm9kZQogICAgICwgbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCiAgICAgLCBt
X2luc3RydWN0aW9uT2Zmc2V0KDApCiB7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbCB8
fCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAko
cmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKIEpTQ2FsbEJhc2U6
OkpTQ2FsbEJhc2UoKQogICAgIDogbV90eXBlKENhbGxMaW5rSW5mbzo6Tm9uZSkKICAgICAsIG1f
Y2FsbExpbmtJbmZvKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbEJhc2UuaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKU0NhbGxCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBMaW5rQnVmZmVyOwogCituYW1lc3BhY2UgREZHIHsKK3N0
cnVjdCBOb2RlOworfQorCiBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgSlNDYWxsQmFzZSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFy
Z3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlNldHVw
VmFyYXJnc0ZyYW1lLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNp
bmcgbmFtZXNwYWNlIERGRzsKKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncygpCisgICAg
OiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBtX25vZGUobnVsbHB0cikKKyAgICAsIG1f
aW5zdHJ1Y3Rpb25PZmZzZXQoVUlOVF9NQVgpCit7Cit9CisKK0pTQ2FsbFZhcmFyZ3M6OkpTQ2Fs
bFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZSogbm9kZSkKKyAgICA6IG1fc3RhY2tt
YXBJRChzdGFja21hcElEKQorICAgICwgbV9ub2RlKG5vZGUpCisgICAgLCBtX2NhbGxCYXNlKAor
ICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgPyBDYWxsTGlua0luZm86OkNv
bnN0cnVjdFZhcmFyZ3MgOiBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzLAorICAgICAgICBub2Rl
LT5vcmlnaW4uc2VtYW50aWMpCisgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCit7CisgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDYWxsRm9y
d2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzKTsKK30KKwordW5z
aWduZWQgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpCit7CisgICAgcmV0dXJu
IDQ7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCwgR3Jh
cGgmIGdyYXBoLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpCit7CisgICAgLy8gV2UgYXJlIHBh
c3NlZCB0aHJlZSBwaWVjZXMgb2YgaW5mb3JtYXRpb246CisgICAgLy8gLSBUaGUgY2FsbGVlLgor
ICAgIC8vIC0gVGhlIGFyZ3VtZW50cyBvYmplY3QuCisgICAgLy8gLSBUaGUgInRoaXMiIHZhbHVl
LCBpZiBpdCdzIGEgY29uc3RydWN0b3IgY2FsbC4KKyAgICAKKyAgICBib29sIGlzQ2FsbCA9IG1f
bm9kZS0+b3AoKSAhPSBDb25zdHJ1Y3RWYXJhcmdzOworICAgIAorICAgIENhbGxWYXJhcmdzRGF0
YSogZGF0YSA9IG1fbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisgICAgCisgICAgR1BSUmVnIGNh
bGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAKKyAgICBHUFJSZWcgYXJndW1l
bnRzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IEludmFsaWRHUFJS
ZWc7CisgICAgYm9vbCBhcmd1bWVudHNPblN0YWNrID0gZmFsc2U7CisgICAgCisgICAgc3dpdGNo
IChtX25vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBhcmd1bWVu
dHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIHRoaXNHUFIgPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgorICAgICAgICB0aGlzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgICAgICBh
cmd1bWVudHNPblN0YWNrID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgorICAgICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBjb25zdCB1bnNp
Z25lZCBjYWxsZWVTcGlsbFNsb3QgPSAwOworICAgIGNvbnN0IHVuc2lnbmVkIGFyZ3VtZW50c1Nw
aWxsU2xvdCA9IDE7CisgICAgY29uc3QgdW5zaWduZWQgdGhpc1NwaWxsU2xvdCA9IDI7CisgICAg
Y29uc3QgdW5zaWduZWQgc3RhY2tQb2ludGVyU3BpbGxTbG90ID0gMzsKKyAgICAKKyAgICAvLyBH
ZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
OworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkp
OworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVS
ZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIpOworICAg
IGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgdXNlZFJlZ2lzdGVy
cy5zZXQoYXJndW1lbnRzR1BSKTsKKyAgICBpZiAodGhpc0dQUiAhPSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKKyAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgIEdQUlJlZyBzY3JhdGNoR1BS
MSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIGlmIChhcmd1bWVudHNP
blN0YWNrKQorICAgICAgICBhcmd1bWVudHNHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJldXNlZFJlZ2lz
dGVycygpKTsKKyAgICAKKyAgICBhdXRvIGxvYWRBcmd1bWVudHMgPSBbJl0gKGJvb2wgY2xvYmJl
cmVkKSB7CisgICAgICAgIGlmIChhcmd1bWVudHNPblN0YWNrKSB7CisgICAgICAgICAgICBqaXQu
bG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihncmFwaC5t
YWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudHNHUFIpOworICAgICAgICB9IGVsc2UgaWYgKGNsb2JiZXJl
ZCkgeworICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50c1NwaWxsU2xvdCksIGFy
Z3VtZW50c0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIGF1dG8gY29tcHV0ZVVz
ZWRTdGFjayA9IFsmXSAoR1BSUmVnIHRhcmdldEdQUiwgdW5zaWduZWQgZXh0cmEpIHsKKyAgICAg
ICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHRhcmdldEdQUik7CisgICAg
ICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGFyZ2V0
R1BSKTsKKyAgICAgICAgaWYgKGV4dHJhKQorICAgICAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYSksIHRhcmdldEdQUik7CisgICAgICAgIGppdC51cnNo
aWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHRhcmdldEdQUik7CisgICAgfTsKKyAgICAK
KyAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkgewor
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICBqaXQuY2FsbChHUFJJ
bmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgIG1fZXhjZXB0aW9ucy5h
cHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2Vw
dGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAgIH07CisgICAg
CisgICAgbG9hZEFyZ3VtZW50cyhmYWxzZSk7CisKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxs
U2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3QpKTsKKyAgICAKKyAgICAvLyBBdHRl
bXB0IHRoZSBmb3J3YXJkaW5nIGZhc3QgcGF0aCwgaWYgaXQncyBiZWVuIHJlcXVlc3RlZC4KKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGF2ZUFyZ3VtZW50czsKKyAgICBpZiAobV9ub2RlLT5vcCgp
ID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAvLyBEbyB0aGUgaG9ycmlmaWMgZm9v
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0aW1pemF0aW9uLgorICAgICAgICAvLyBGSVhNRTog
ZG8gdGhpcyBvcHRpbWl6YXRpb24gYXQgdGhlIElSIGxldmVsLgorICAgICAgICAKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBhcmd1bWVudHNHUFIpKTsK
KyAgICAgICAgCisgICAgICAgIGNvbXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQUjIsIDApOworICAg
ICAgICBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShqaXQsIHNjcmF0Y2hHUFIyLCBzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7Cisg
ICAgICAgIAorICAgICAgICBqaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgaGF2ZUFyZ3VtZW50cyA9IGppdC5qdW1wKCk7CisgICAgICAgIHNsb3dDYXNlLmxpbmso
JmppdCk7CisgICAgfQorICAgIAorICAgIC8vIEdvdHRhIHNwaWxsIHRoZSBjYWxsZWUsIGFyZ3Vt
ZW50cywgYW5kIHRoaXMgYmVjYXVzZSB3ZSB3aWxsIG5lZWQgdGhlbSBsYXRlciBhbmQgd2Ugd2ls
bCBoYXZlIHNvbWUKKyAgICAvLyBjYWxscyB0aGF0IGNsb2JiZXIgdGhlbS4KKyAgICBqaXQuc3Rv
cmU2NChjYWxsZWVHUFIsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0
ICsgY2FsbGVlU3BpbGxTbG90KSk7CisgICAgaWYgKCFhcmd1bWVudHNPblN0YWNrKQorICAgICAg
ICBqaXQuc3RvcmU2NChhcmd1bWVudHNHUFIsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGls
bFNsb3RzT2Zmc2V0ICsgYXJndW1lbnRzU3BpbGxTbG90KSk7CisgICAgaWYgKGlzQ2FsbCkKKyAg
ICAgICAgaml0LnN0b3JlNjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxs
U2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSk7CisgICAgCisgICAgdW5zaWduZWQgZXh0cmFT
dGFjayA9IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArCisgICAgICAgIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKTsKKyAg
ICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hHUFIxLCAwKTsKKyAgICBqaXQuc3ViUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2spLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZ3Vt
ZW50c0dQUiwgc2NyYXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZp
cnN0VmFyQXJnT2Zmc2V0KSk7CisgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nh
c3Q8dm9pZCo+KG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MpKTsKKyAgICAKKyAgICBqaXQu
bW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjEpOworICAgIGNvbXB1dGVV
c2VkU3RhY2soc2NyYXRjaEdQUjIsIGV4dHJhU3RhY2spOworICAgIGxvYWRBcmd1bWVudHModHJ1
ZSk7CisgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hHUFIxLCBmYWxzZSwgc2Ny
YXRjaEdQUjIsIHNjcmF0Y2hHUFIyKTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKC1leHRyYVN0YWNrKSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoc2Ny
YXRjaEdQUjIsIGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+
Zmlyc3RWYXJBcmdPZmZzZXQpLCBzY3JhdGNoR1BSMSk7CisgICAgY2FsbFdpdGhFeGNlcHRpb25D
aGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lKSk7Cisg
ICAgCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIyKTsK
KyAgICAKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgdGhpc1NwaWxsU2xvdCksIHRoaXNHUFIpOwor
ICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQg
KyBjYWxsZWVTcGlsbFNsb3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgaWYgKG1fbm9k
ZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgIGhhdmVBcmd1bWVudHMubGlu
aygmaml0KTsKKyAgICAKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICBqaXQu
c3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7Cisg
ICAgCisgICAgLy8gSGVuY2Vmb3J0aCB3ZSBtYWtlIHRoZSBjYWxsLiBUaGUgYmFzZSBGVEwgY2Fs
bCBtYWNoaW5lcnkgZXhwZWN0cyB0aGUgY2FsbGVlIGluIHJlZ1QwIGFuZCBmb3IgdGhlCisgICAg
Ly8gc3RhY2sgZnJhbWUgdG8gYWxyZWFkeSBiZSBzZXQgdXAsIHdoaWNoIGl0IGlzLgorICAgIGpp
dC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChK
U1N0YWNrOjpDYWxsZWUpKTsKKyAgICAKKyAgICBtX2NhbGxCYXNlLmVtaXQoaml0KTsKKyAgICAK
KyAgICAvLyBVbmRvIHRoZSBkYW1hZ2Ugd2UndmUgZG9uZS4KKyAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHN0YWNrUG9pbnRlclNwaWxs
U2xvdCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworfQorCit2b2lkIEpT
Q2FsbFZhcmFyZ3M6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBDb2RlTG9j
YXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyKQoreworICAgIG1fY2FsbEJhc2UubGluayh2bSwg
bGlua0J1ZmZlcik7CisgICAgbGlua0J1ZmZlci5saW5rKG1fZXhjZXB0aW9ucywgZXhjZXB0aW9u
SGFuZGxlcik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2Fs
bFZhcmFyZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbFZhcmFyZ3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsVmFyYXJncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExKU0Nh
bGxWYXJhcmdzX2gKKyNkZWZpbmUgRlRMSlNDYWxsVmFyYXJnc19oCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIExpbmtCdWZmZXI7CisKK25hbWVzcGFjZSBERkcgeworY2xhc3MgR3JhcGg7CitzdHJ1
Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbFZhcmFyZ3Mgewor
cHVibGljOgorICAgIEpTQ2FsbFZhcmFyZ3MoKTsKKyAgICBKU0NhbGxWYXJhcmdzKHVuc2lnbmVk
IHN0YWNrbWFwSUQsIERGRzo6Tm9kZSopOworICAgIAorICAgIERGRzo6Tm9kZSogbm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBudW1TcGls
bFNsb3RzTmVlZGVkKCk7CisgICAgCisgICAgdm9pZCBlbWl0KENDYWxsSGVscGVycyYsIERGRzo6
R3JhcGgmLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpOworICAgIHZvaWQgbGluayhWTSYsIExp
bmtCdWZmZXImLCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSlNDYWxsVmFyYXJncyYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5z
dHJ1Y3Rpb25PZmZzZXQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0
YWNrbWFwSUQ7CisgICAgREZHOjpOb2RlKiBtX25vZGU7CisgICAgSlNDYWxsQmFzZSBtX2NhbGxC
YXNlOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9leGNlcHRpb25zOworCitwdWJsaWM6
CisgICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRM
SlNDYWxsVmFyYXJnc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3
LDYgKzE4NywzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX291dC5zdGFja21hcEludHJpbnNp
YygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSwKICAg
ICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2EpOwogICAgICAgICAKKyAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBhbnkgQ2FsbFZhcmFyZ3MgdGhlbiB3ZSBuZWUgdG8gaGF2ZSBh
IHNwaWxsIHNsb3QgZm9yIGl0LgorICAgICAgICBib29sIGhhc1ZhcmFyZ3MgPSBmYWxzZTsKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKSB7CisgICAgICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICAgICAg
ICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgaGFzVmFyYXJncyA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoaGFzVmFyYXJncykgeworICAgICAgICAgICAgTFZhbHVlIHZh
cmFyZ3NTcGlsbFNsb3RzID0gbV9vdXQuYWxsb2NhKAorICAgICAgICAgICAgICAgIGFycmF5VHlw
ZShtX291dC5pbnQ2NCwgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpKSk7Cisg
ICAgICAgICAgICBtX2Z0bFN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCA9IG1fc3Rh
Y2ttYXBJRHMrKzsKKyAgICAgICAgICAgIG1fb3V0LmNhbGwoCisgICAgICAgICAgICAgICAgbV9v
dXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRlLnZhcmFy
Z3NTcGlsbFNsb3RzU3RhY2ttYXBJRCksCisgICAgICAgICAgICAgICAgbV9vdXQuaW50MzJaZXJv
LCB2YXJhcmdzU3BpbGxTbG90cyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1fY2Fs
bEZyYW1lID0gbV9vdXQucHRyVG9JbnQoCiAgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0LmZy
YW1lQWRkcmVzc0ludHJpbnNpYygpLCBtX291dC5pbnQzMlplcm8pLCBtX291dC5pbnRQdHIpOwog
ICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIp
OwpAQCAtNjgzLDYgKzcwNywxNCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoK
ICAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgY29tcGls
ZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOgorICAgICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKCk7CisgICAg
ICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoRlRMX05BVElWRV9DQUxMX0lOTElOSU5HKQogICAg
ICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgpAQCAt
MjA2NCw4ICsyMDk2LDIyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBjaGVja0FyZ3VtZW50
c05vdENyZWF0ZWQoKTsKIAotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIW1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIHNldEludDMy
KG1fb3V0LmFkZChtX291dC5sb2FkMzJOb25OZWdhdGl2ZShwYXlsb2FkRm9yKEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKSwgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsKKyAgICAgICAgaWYgKG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAg
ICAgICAgIHNldEludDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoCisgICAg
ICAgICAgICAgICAgICAgIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBh
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRD
b3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJl
Z2lzdGVyID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBzZXRJbnQzMigKKyAgICAgICAgICAgICAgICBt
X291dC5hZGQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBh
eWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksCisgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50MzIoLTEpKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkKQEAgLTIwNzcsMTAgKzIxMjMsMTcgQEAgcHJpdmF0
ZToKICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgIAogICAgICAgICBMVmFsdWUgbGltaXQ7Ci0gICAgICAgIGlmIChjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkKKyAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lCisg
ICAgICAgICAgICAmJiAhY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQog
ICAgICAgICAgICAgbGltaXQgPSBtX291dC5jb25zdEludDMyKGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGxpbWl0ID0gbV9vdXQuc3ViKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKSwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAo
IWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAg
ICAgICAgbGltaXQgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IoYXJndW1lbnRD
b3VudFJlZ2lzdGVyKSksIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc3BlY3VsYXRlKFVuY291bnRhYmxlLCBub1ZhbHVlKCksIDAsIG1fb3V0LmFib3ZlT3JF
cXVhbChpbmRleCwgbGltaXQpKTsKICAgICAgICAgCkBAIC0zNzg2LDYgKzM4MzksODcgQEAgcHJp
dmF0ZToKICAgICAgICAgCiAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CiAgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAg
TFZhbHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
CisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IG51bGxwdHI7CisgICAgICAgIExWYWx1ZSB0
aGlzQXJnID0gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgp
KSB7CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICBqc0FyZ3VtZW50cyA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICB0aGlzQXJnID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAgIHRoaXNBcmcgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29u
c3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgImJhZCBub2RlIHR5cGUiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBz
dGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPExW
YWx1ZT4gYXJndW1lbnRzOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50
NjQoc3RhY2ttYXBJRCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50
MzIoc2l6ZU9mSUNGb3IobV9ub2RlKSkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0
TnVsbChtX291dC5yZWY4KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJ
bnQzMigxICsgISFqc0FyZ3VtZW50cyArICEhdGhpc0FyZykpOworICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKGpzQ2FsbGVlKTsKKyAgICAgICAgaWYgKGpzQXJndW1lbnRzKQorICAgICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChqc0FyZ3VtZW50cyk7CisgICAgICAgIGlmICh0aGlzQXJnKQorICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzQXJnKTsKKyAgICAgICAgCisgICAgICAgIGNh
bGxQcmVmbGlnaHQoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2Fs
bChtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAg
c2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQ0NhbGxDb252KTsKKyAg
ICAgICAgCisgICAgICAgIG1fZnRsU3RhdGUuanNDYWxsVmFyYXJnc2VzLmFwcGVuZChKU0NhbGxW
YXJhcmdzKHN0YWNrbWFwSUQsIG1fbm9kZSkpOworICAgICAgICAKKyAgICAgICAgc2V0SlNWYWx1
ZShjYWxsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAg
IHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0Rh
dGEoKTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCisgICAg
ICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJncyksIG1fY2FsbEZy
YW1lLCBqc0FyZ3VtZW50cywKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zm
c2V0KSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhh
dCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBp
cyBzYWZlCisgICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdy
aXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAg
ICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2Ug
Y2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFz
dCB0aGUgc2l6aW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQxNDQ4CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5n
VGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgc3BlY3Vs
YXRlKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCisg
ICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdElu
dDMyKGRhdGEtPmxpbWl0KSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5n
dGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMgcmF0aGVyIHNpbGx5LiBJ
ZiBvcGVyYXRpb25MYW9kVmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVyIGluc3RlYWQKKyAgICAg
ICAgLy8gb2YgYSBWaXJ0dWFsUmVnaXN0ZXIsIHdlIHdvdWxkbid0IGhhdmUgdG8gZG8gdGhpcy4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTY2
MAorICAgICAgICBMVmFsdWUgbWFjaGluZVN0YXJ0ID0gbV9vdXQubFNocigKKyAgICAgICAgICAg
IG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSkudmFsdWUo
KSwgbV9jYWxsRnJhbWUpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoMykpOworICAg
ICAgICAKKyAgICAgICAgdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkxvYWRWYXJhcmdzKSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICBtX291dC5jYXN0VG9J
bnQzMihtYWNoaW5lU3RhcnQpLCBqc0FyZ3VtZW50cywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5v
ZmZzZXQpLAorICAgICAgICAgICAgbGVuZ3RoLCBtX291dC5jb25zdEludDMyKGRhdGEtPm1hbmRh
dG9yeU1pbmltdW0pKTsKKyAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVKdW1wKCkKICAgICB7CkBA
IC00MDkwLDcgKzQyMjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgICAgICAgICBtX291dC5w
YXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZDaGVja0luKCkpLAor
ICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5j
b25zdEludDMyKHNpemVPZkluKCkpLAogICAgICAgICAgICAgICAgICAgICBjb25zdE51bGwobV9v
dXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMSksIGNlbGwpOwogCiAgICAgICAgICAgICAgICAg
c2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYp
OwpAQCAtNjQ4Myw3ICs2NjE3LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBCdWZmZXIgaXMg
b3V0IG9mIHNwYWNlLCBmbHVzaCBpdC4KICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVmZmVySXNG
dWxsLCBjb250aW51YXRpb24pOwotICAgICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKSwgbV9jYWxsRnJhbWUsIGJhc2UsIE5vRXhjZXB0
aW9ucyk7CisgICAgICAgIHZtQ2FsbE5vRXhjZXB0aW9ucyhtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpLCBtX2NhbGxGcmFtZSwgYmFzZSk7CiAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTY0OTIsNDQgKzY2MjYsMjMgQEAgcHJpdmF0ZToKICNl
bmRpZgogICAgIH0KIAotICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tNb2RlIHsgTm9FeGNlcHRpb25z
LCBDaGVja0V4Y2VwdGlvbnMgfTsKLSAgICAKLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5j
dGlvbiwgRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlv
biwgQXJncy4uLiBhcmdzKQogICAgIHsKICAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbik7Ci0gICAgICAgIGNhbGxDaGVj
ayhtb2RlKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rpb24sIGFy
Z3MuLi4pOworICAgICAgICBjYWxsQ2hlY2soKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9Ci0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBFeGNl
cHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKLSAgICB7Ci0gICAgICAgIGNh
bGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rp
b24sIGFyZzEpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJn
MSwgTFZhbHVlIGFyZzIsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25z
KQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSwgYXJnMik7Ci0gICAgICAgIGNhbGxDaGVjayht
b2RlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgTFZhbHVlIHZtQ2FsbChM
VmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIEV4
Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQotICAgIHsKLSAgICAgICAg
Y2FsbFByZWZsaWdodCgpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5j
dGlvbiwgYXJnMSwgYXJnMiwgYXJnMyk7Ci0gICAgICAgIGNhbGxDaGVjayhtb2RlKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rp
b24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBF
eGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSB2bUNhbGxOb0V4Y2VwdGlvbnMoTFZh
bHVlIGZ1bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgewogICAgICAgICBjYWxsUHJlZmxpZ2h0
KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxLCBh
cmcyLCBhcmczLCBhcmc0KTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOworICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJncy4uLik7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBjYWxsUHJlZmxpZ2h0KENvZGVPcmln
aW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCkBAIC02NTQzLDEx
ICs2NjU2LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FsbFByZWZsaWdodChtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2FsbENoZWNrKEV4Y2VwdGlvbkNo
ZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQorICAgIHZvaWQgY2FsbENoZWNrKCkKICAg
ICB7Ci0gICAgICAgIGlmIChtb2RlID09IE5vRXhjZXB0aW9ucykKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjplbmFibGVFeGNlcHRpb25GdXp6KCkp
CiAgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FeGNlcHRp
b25GdXp6KSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsMTMgKzM1Nyw4IEBAIHB1YmxpYzoKICAgICBM
VmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyBy
ZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvcik7IH0KICAgICBMVmFs
dWUgY2FsbChMVmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1
bmN0aW9uKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEp
IHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxKTsgfQotICAgIExW
YWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKSB7IHJl
dHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMik7IH0KLSAgICBM
VmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZh
bHVlIGFyZzMpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBh
cmcyLCBhcmczKTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFy
ZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQpIHsgcmV0dXJuIGJ1aWxk
Q2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsgfQotICAg
IExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBM
VmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1KSB7IHJldHVybiBidWlsZENhbGwo
bV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7IH0KLSAg
ICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwg
TFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYpIHsgcmV0
dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0
LCBhcmc1LCBhcmc2KTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVl
IGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1
LCBMVmFsdWUgYXJnNiwgTFZhbHVlIGFyZzcpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIs
IGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3KTsgfQot
ICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcy
LCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBMVmFsdWUgYXJnNiwgTFZh
bHVlIGFyZzcsIExWYWx1ZSBhcmc4KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5j
dGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCk7IH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBm
dW5jdGlvbiwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykgeyByZXR1cm4gYnVpbGRDYWxsKG1f
YnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZ3MuLi4pOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgogICAgIExWYWx1ZSBvcGVyYXRpb24oRnVuY3Rpb25UeXBl
IGZ1bmN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OSw2ICs0OSwxMCBAQCBTdGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBo
KQogICAgICwgbW9kdWxlKDApCiAgICAgLCBmdW5jdGlvbigwKQogICAgICwgZ2VuZXJhdGVkRnVu
Y3Rpb24oMCkKKyAgICAsIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEKFVJ
TlRfTUFYKQorICAgICwgaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAs
IGNhcHR1cmVkU3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAsIHZhcmFyZ3NTcGlsbFNsb3RzU3Rh
Y2ttYXBJRChVSU5UX01BWCkKICAgICAsIHVud2luZERhdGFTZWN0aW9uKDApCiAgICAgLCB1bndp
bmREYXRhU2VjdGlvblNpemUoMCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRlRM
SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgogI2luY2x1ZGUgIkZUTEpT
Q2FsbC5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKICNpbmNsdWRlICJGVExTdGFj
a01hcHMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgpAQCAtNzEsMTAgKzcyLDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBoYW5kbGVTdGFj
a092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRDsKICAgICB1bnNpZ25lZCBoYW5kbGVFeGNlcHRp
b25TdGFja21hcElEOwogICAgIHVuc2lnbmVkIGNhcHR1cmVkU3RhY2ttYXBJRDsKKyAgICB1bnNp
Z25lZCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQ7CiAgICAgU2VnbWVudGVkVmVjdG9yPEdl
dEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRWZWN0b3I8UHV0QnlJZERl
c2NyaXB0b3I+IHB1dEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxDaGVja0luRGVzY3JpcHRv
cj4gY2hlY2tJbnM7CiAgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxsczsKKyAgICBWZWN0b3I8SlND
YWxsVmFyYXJncz4ganNDYWxsVmFyYXJnc2VzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBjb2RlU2Vj
dGlvbk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVzOwogICAgIHZv
aWQqIHVud2luZERhdGFTZWN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1l
KQogICAgIHJldHVybiBpbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNW
YWx1ZSwgY2FsbGVyU2NvcGVDaGFpbik7CiB9CiAKLXVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFy
Z3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU3RhY2sqIHN0YWNrLCBKU1ZhbHVlIGFyZ3VtZW50
cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0
KQordW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBh
cmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQogewogICAgIHVuc2lnbmVkIGxl
bmd0aDsKICAgICBpZiAoIWFyZ3VtZW50cykKQEAgLTE1Niw2ICsxNTYsMTMgQEAgdW5zaWduZWQg
c2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIAogICAgIGVsc2UKICAgICAgICAgbGVuZ3Ro
ID0gMDsKICAgICAKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCit1bnNpZ25lZCBzaXplRnJhbWVG
b3JWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1N0YWNrKiBzdGFjaywgSlNWYWx1ZSBh
cmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFy
Z09mZnNldCkKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzaXplT2ZWYXJhcmdzKGNhbGxGcmFt
ZSwgYXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgCiAgICAgQ2FsbEZyYW1lKiBj
YWxsZWVGcmFtZSA9IGNhbGxlZUZyYW1lRm9yVmFyYXJncyhjYWxsRnJhbWUsIG51bVVzZWRTdGFj
a1Nsb3RzLCBsZW5ndGggKyAxKTsKICAgICBpZiAobGVuZ3RoID4gQXJndW1lbnRzOjpNYXhBcmd1
bWVudHMgfHwgIXN0YWNrLT5lbnN1cmVDYXBhY2l0eUZvcihjYWxsZWVGcmFtZS0+cmVnaXN0ZXJz
KCkpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAko
cmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKCkgLSBwYWRkZWRDYWxsZWVGcmFtZU9mZnNldCk7CiAgICAgfQogCisgICAgdW5zaWduZWQg
c2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWMsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJf
dCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhD
YWxsRnJhbWUqIGV4ZWMsIEpTU3RhY2sqLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVt
VXNlZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB2b2lkIGxv
YWRWYXJhcmdzKENhbGxGcmFtZSogZXhlY0NhbGxlciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxl
bWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0
aCk7CiAgICAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENh
bGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFy
QXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDE4MDE4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDEwIEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFk
SW5saW5lZEZyYW1lKENhbGwKIAogICAgICAgICBtX2ZyYW1lLm1fY2FsbEZyYW1lID0gY2FsbEZy
YW1lOwogICAgICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1l
OwotICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBtX2ZyYW1lLm1f
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50UmVnaXN0ZXIub2Zmc2V0KCkpLnVuYm94ZWRJbnQzMigpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAgICAgIG1fZnJhbWUubV9j
b2RlQmxvY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCk7CiAgICAgICAg
IG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDE1ICsyMTIsMjcgQEAgdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tBbGlnbm1lbnRCeXRlcygpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCi1Bc3Nl
bWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2soRXhj
ZXB0aW9uQ2hlY2tLaW5kIGtpbmQpCitBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQsIEV4Y2VwdGlv
bkp1bXBXaWR0aCB3aWR0aCkKIHsKICAgICBjYWxsRXhjZXB0aW9uRnV6eigpOworCisgICAgaWYg
KHdpZHRoID09IEZhckp1bXBXaWR0aCkKKyAgICAgICAga2luZCA9IChraW5kID09IE5vcm1hbEV4
Y2VwdGlvbkNoZWNrID8gSW52ZXJ0ZWRFeGNlcHRpb25DaGVjayA6IE5vcm1hbEV4Y2VwdGlvbkNo
ZWNrKTsKICAgICAKKyAgICBKdW1wIHJlc3VsdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJl
dHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8g
OiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKKyAg
ICByZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5v
blplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkp
KTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmV0dXJuIGJyYW5jaDMyKGtpbmQgPT0g
Tm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIHJlc3VsdCA9IGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFs
RXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpOwogI2VuZGlmCisgICAgCisgICAgaWYgKHdpZHRoID09IE5vcm1hbEp1bXBX
aWR0aCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIHJl
YWxKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOworICAgIHJlc3VsdC5saW5rKHRoaXMpOworICAgIAor
ICAgIHJldHVybiByZWFsSnVtcC5tX2p1bXA7CiB9CiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0
ZWRJbW1QdHIgc3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzOCw2ICszMzgsMTAgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0aWMgQWRkcmVzcyBh
ZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgeworICAgICAg
ICAvLyBOQi4gSXQncyB0ZW1wdGluZyBvbiBzb21lIGFyY2hpdGVjdHVyZXMgdG8gc29tZXRpbWVz
IHVzZSBhbiBvZmZzZXQgZnJvbSB0aGUgc3RhY2sKKyAgICAgICAgLy8gcmVnaXN0ZXIgYmVjYXVz
ZSBmb3Igc29tZSBvZmZzZXRzIHRoYXQgd2lsbCBlbmNvZGUgdG8gYSBzbWFsbGVyIGluc3RydWN0
aW9uLiBCdXQgd2UKKyAgICAgICAgLy8gY2Fubm90IGRvIHRoaXMuIFdlIHVzZSB0aGlzIGluIHBs
YWNlcyB3aGVyZSB0aGUgc3RhY2sgcG9pbnRlciBoYXMgYmVlbiBtb3ZlZCB0byBzb21lCisgICAg
ICAgIC8vIHVucHJlZGljdGFibGUgbG9jYXRpb24uCiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVn
aXN0ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
OwogICAgIH0KQEAgLTM2NywzOSArMzcxLDM5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBB
Y2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCi0gICAgQWRkcmVzcyBjYWxsZWVG
cmFtZVNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KGlu
dCBzbG90KQogICAgIHsKICAgICAgICAgQVNTRVJUKHNsb3QgPj0gSlNTdGFjazo6Q2FsbGVyRnJh
bWVBbmRQQ1NpemUpOwotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNs
b3QgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpOworICAgICAgICByZXR1cm4gQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChzbG90IC0gSlNT
dGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpKTsKICAgICB9CiAKICAgICAvLyBBY2Nlc3MgdG8g
b3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCi0gICAgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNs
b3QoaW50IGFyZ3VtZW50KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50U2xvdChp
bnQgYXJndW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7CiAgICAgfQogCi0gICAg
QWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3Mg
Y2FsbGVlRnJhbWVUYWdTbG90KGludCBzbG90KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxl
ZUZyYW1lU2xvdChzbG90KS53aXRoT2Zmc2V0KFRhZ09mZnNldCk7CiAgICAgfQogCi0gICAgQWRk
cmVzcyBjYWxsZWVGcmFtZVBheWxvYWRTbG90KGludCBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNz
IGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoaW50IHNsb3QpCiAgICAgewogICAgICAgICByZXR1cm4g
Y2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCk7CiAgICAgfQog
Ci0gICAgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFRhZ1Nsb3QoaW50IGFyZ3VtZW50KQorICAgIHN0
YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50VGFnU2xvdChpbnQgYXJndW1lbnQpCiAgICAgewog
ICAgICAgICByZXR1cm4gY2FsbGVlQXJndW1lbnRTbG90KGFyZ3VtZW50KS53aXRoT2Zmc2V0KFRh
Z09mZnNldCk7CiAgICAgfQogCi0gICAgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFBheWxvYWRTbG90
KGludCBhcmd1bWVudCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFBheWxvYWRT
bG90KGludCBhcmd1bWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVBcmd1bWVudFNs
b3QoYXJndW1lbnQpLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCk7CiAgICAgfQogCi0gICAgQWRk
cmVzcyBjYWxsZWVGcmFtZUNhbGxlckZyYW1lKCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVG
cmFtZUNhbGxlckZyYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qo
MCkud2l0aE9mZnNldChDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwogICAgIH0KQEAg
LTU3MSw3ICs1NzUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsRXhjZXB0aW9uRnV6eigpOwog
ICAgIAogICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsgTm9ybWFsRXhjZXB0aW9uQ2hlY2ss
IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKLSAgICBKdW1wIGVtaXRFeGNlcHRpb25DaGVjayhF
eGNlcHRpb25DaGVja0tpbmQga2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKKyAgICBlbnVt
IEV4Y2VwdGlvbkp1bXBXaWR0aCB7IE5vcm1hbEp1bXBXaWR0aCwgRmFySnVtcFdpZHRoIH07Cisg
ICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soCisgICAgICAgIEV4Y2VwdGlvbkNoZWNrS2luZCA9
IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25KdW1wV2lkdGggPSBOb3JtYWxKdW1wV2lk
dGgpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIHN0YXRpYyB2b2lkIGVt
aXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBsaW5nQ291bnRlciYgY291
bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc3LDYgKzE3Nzcs
MTUgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIEdQUlJlZyBhcmcy
LCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAg
IHsKKyAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSND4oYXJnMiwgYXJnNCk7CisgICAgICAgIG1vdmUoYXJnMSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjMpOworICAgICAgICBtb3ZlKGFyZzUsIEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAg
ICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1
c3RlZEltbTMyIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQogICAgIHsKICAgICAgICAgc2V0dXBU
d29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BS
Mz4oYXJnMiwgYXJnMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkocmV2
aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7
IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIgPSBYODZSZWdpc3RlcnM6OmVzaTsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNl
cnZlZE5vbkFyZ3VtZW50R1BSID0gWDg2UmVnaXN0ZXJzOjpyMTA7CiAgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRjaFJlZ2lzdGVyID0gTWFjcm9Bc3NlbWJsZXI6OnNjcmF0
Y2hSZWdpc3RlcjsKIAogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRl
eCkKQEAgLTU3Nyw2ICs1NzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBy
ZXR1cm5WYWx1ZUdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MDsgLy8gcmVnVDAKICAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsgLy8gcmVn
VDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IEFS
TTY0UmVnaXN0ZXJzOjp4MjsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5v
bkFyZ3VtZW50R1BSID0gQVJNNjRSZWdpc3RlcnM6Ong4OwogICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgcGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDA7CiAKICAg
ICAvLyBHUFJSZWcgbWFwcGluZyBpcyBkaXJlY3QsIHRoZSBtYWNoaW5lIHJlZ3NpdGVyIG51bWJl
cnMgY2FuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxODAxODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2NCwxMSArNDY0LDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShK
SQogICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1f
c2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIERG
Rzo6Q2FuSW5saW5lOgotICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAg
IG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwotICAgICAgICBtX3Nob3VsZEVtaXRQ
cm9maWxpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGls
ZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9w
dGltaXplZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4
MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5Niw3ICsyOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGNvbXBp
bGVPcENhbGwoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCwgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOwotICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0
cnVjdGlvbiopOworICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVj
dGlvbiosIENhbGxMaW5rSW5mbyopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbChJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKgogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1l
KEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewogICAgIGlu
dCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFyZ3VtZW50
cyA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTkwLDYgKzkwLDE2IEBAIHZvaWQgSklU
Ojpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHIKICAgICBpZiAoY2FuT3B0aW1pemUpCiAg
ICAgICAgIGVuZC5saW5rKHRoaXMpOwogICAgIAorICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50
IGNvdW50LgorICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBKU1N0YWNrOjpBcmd1bWVudENvdW50
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBy
ZWdUMik7CisgICAgbG9hZDgoJmluZm8tPm1heE51bUFyZ3VtZW50cywgcmVnVDApOworICAgIEp1
bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOworICAgIEp1bXAg
bm90U2F0dXJhdGVkID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KDI1NSkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDI1NSksIHJlZ1QyKTsKKyAgICBub3RTYXR1
cmF0ZWQubGluayh0aGlzKTsKKyAgICBzdG9yZTgocmVnVDIsICZpbmZvLT5tYXhOdW1Bcmd1bWVu
dHMpOworICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKKyAgICAKICAgICAvLyBJbml0aWFsaXpl
ICd0aGlzJy4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwgcmVnVDApOwog
ICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CkBAIC0xMzQs
NyArMTQ0LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydQogCiB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKLSAgICBpbnQgY2FsbGVl
ID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAgICBpbnQgY2FsbGVlID0gaW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgLyogQ2FsbGVyIGFsd2F5czoKICAgICAgICAgLSBV
cGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJhbWUuCkBAIC0xNTIsNyAr
MTY0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIENP
TVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9j
YWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVf
bGVuZ3RoKTsKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9Q
Q09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBjYWxsX2FuZF9jb25zdHJ1Y3RfdmFy
YXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCi0gICAg
ICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbik7CisgICAgICAgIGNvbXBp
bGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbiwgaW5mbyk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE3Niw5ICsx
ODgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxs
ZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbygpOwotCi0gICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkg
eworICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2Fs
bEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4MDE4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTAsNiArMTUwLDcgQEAgdHlwZWRlZiBpbnQ2NF90IEpJVF9PUEVSQVRJT04oKlFfSklU
T3BlcgogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9EKShk
b3VibGUpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9F
KShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVy
YXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlwZWRlZiBpbnQzMl90IEpJVF9PUEVS
QVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FSlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBp
bnQzMl90KTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25f
RUpaWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QpOwogdHlw
ZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19K
SVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTE4OSw2ICsx
OTAsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWd3NKKShFeGVjU3RhdGUqLCBW
YXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpKKShFeGVjU3RhdGUq
LCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAo
KlZfSklUT3BlcmF0aW9uX0VaSlpaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFs
dWUsIGludDMyX3QsIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNTdGF0ZSosIFZNKik7CiB0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fWikoaW50MzJfdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAko
cmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFy
Z3NGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMSArMTAxLDMxIEBAIHZvaWQgZW1p
dFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwKIAogdm9pZCBlbWl0U2V0dXBWYXJhcmdz
RnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BS
MywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNs
b3dDYXNlKQogewotICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKAotICAgICAgICBq
aXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
MywKLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKFZpcnR1YWxSZWdp
c3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKSwKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpLAotICAgICAgICBm
aXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZh
c3RDYXNlKGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBudWxscHRyLCBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworfQorCit2
b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BS
MiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
dW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dD
YXNlKQoreworICAgIFZhbHVlUmVjb3ZlcnkgYXJndW1lbnRDb3VudFJlY292ZXJ5OworICAgIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEFyZ3VtZW50UmVnOworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUp
IHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAg
ICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNT
dGFjaygKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdp
c3RlciwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFy
Z3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KAorICAgICAgICAg
ICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpOworICAg
ICAgICB9CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgPiAx
KQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmaXJz
dEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOworICAgIH0gZWxzZSB7CisgICAgICAg
IGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFj
aygKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwg
RGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKKyAgICB9CisgICAgZW1pdFNldHVw
VmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGFyZ3VtZW50Q291bnRSZWNvdmVyeSwgZmlyc3RBcmd1
bWVudFJlZywgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NG
cmFtZS5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgdm9pZCBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAogLy8gVmFyaWFudCB0aGF0IGFzc3Vt
ZXMgbm9ybWFsIHN0YWNrIGZyYW1lLgogdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2Fz
ZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJz
dFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2UpOwogCisvLyBW
YXJpYW50IGZvciBwb3RlbnRpYWxseSBpbmxpbmVkIHN0YWNrIGZyYW1lcy4KK3ZvaWQgZW1pdFNl
dHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIG51bVVzZWRTbG90
c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3Jh
dGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiwgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIEND
YWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBBcmd1
bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1vZGUpCiAgICAgewotICAg
ICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFy
Z3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFycmF5KCkgKyByZWdpc3Rl
ckFycmF5U2l6ZUluQnl0ZXMoaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3VtZW50cyhjYWxsRnJhbWUp
OworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFycmF5KCkgKyBy
ZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUpKSkgQXJn
dW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3JlYXRpb24oY2Fs
bEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUsIG1vZGUpOwogICAgICAgICByZXR1cm4gYXJndW1lbnRz
OwogICAgIH0KQEAgLTEyNCw3ICsxMjQsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVN0
cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShFeGVjU3RhdGUqKTsKIAogICAgIHN0YXRpYyBzaXpl
X3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVy
biBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpOyB9Ci0gICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pICogKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpOyB9Cisg
ICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAg
dW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICByZXR1cm4gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKKyAgICB9
CiAgICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCk7CiAgICAgYm9vbCB0cnlTZXRBcmd1bWVudChW
TSYsIHNpemVfdCBhcmd1bWVudCwgSlNWYWx1ZSk7CiAgICAgSlNWYWx1ZSB0cnlHZXRBcmd1bWVu
dChzaXplX3QgYXJndW1lbnQpOwpAQCAtMzQwLDExICszNDgsMTUgQEAgaW5saW5lIHZvaWQgQXJn
dW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogICAgIG1fb3ZlcnJvZGVDYWxsZWUgPSBmYWxzZTsK
ICAgICBtX292ZXJyb2RlQ2FsbGVyID0gZmFsc2U7CiAgICAgbV9pc1N0cmljdE1vZGUgPSBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgp
KS0+aXNTdHJpY3RNb2RlKCk7Ci0KKyAgICAKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICBtX251bUFyZ3VtZW50cyA9IGNh
bGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQo
KSkudW5ib3hlZEludDMyKCk7CisgICAgZWxzZQorICAgICAgICBtX251bUFyZ3VtZW50cyA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICBtX251bUFyZ3VtZW50cy0tOwor
ICAgIAogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgTm9ybWFsQXJndW1lbnRzQ3JlYXRp
b25Nb2RlOiB7Ci0gICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHMuc2l6ZSgpIC0gMTsKLSAgICAgICAgCiAgICAgICAgIGlmIChtX251bUFyZ3VtZW50cykg
ewogICAgICAgICAgICAgaW50IG9mZnNldEZvckFyZ3VtZW50T25lID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgICAgICBt
X3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+
KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpICsgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgLSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKTsKQEAgLTM2MSw3ICszNzMsNiBAQCBpbmxp
bmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIENsb25lZEFyZ3VtZW50c0NyZWF0aW9uTW9kZTogewotICAgICAgICBtX251bUFyZ3Vt
ZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CiAgICAgICAgIGlm
IChtX251bUFyZ3VtZW50cykgewogICAgICAgICAgICAgaW50IG9mZnNldEZvckFyZ3VtZW50T25l
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCk7CiAgICAgICAgICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpICsgb2Zmc2V0Rm9yQXJn
dW1lbnRPbmUgLSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE4MDE4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjExLDYgKzIxMSw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwog
ICAgIC8qIGZyb20gc3VwZXIgbG9uZyBjb21waWxlcyB0aGF0IHRha2UgYSBsb3Qgb2YgbWVtb3J5
LiAqL1wKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtSW5saW5pbmdDYWxsZXJTaXplLCAxMDAwMCkg
XAogICAgIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhpbXVtVmFyYXJnc0ZvcklubGluaW5nLCAxMDAp
IFwKKyAgICBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudENhbGxJbmxpbmluZywgdHJ1
ZSkgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRCeUlkSW5saW5pbmcsIHRydWUpIFwK
ICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVj
dC12YXJhcmdzLWlubGluZS1zbWFsbGVyLUZvby5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLWlubGluZS1zbWFsbGVy
LUZvby5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvY29uc3RydWN0LXZhcmFyZ3MtaW5saW5lLXNtYWxsZXItRm9vLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzUgQEAKK2Z1bmN0aW9uIEZvbyhhLCBiKSB7CisgICAgdmFyIGFycmF5ID0g
W107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAg
ICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICB0aGlzLmYgPSBhcnJheTsKK30KKwor
ZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJuIG5ldyBGb28oLi4uYXJyYXkpOworfQor
Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAgICBpZiAo
YS5sZW5ndGggIT0gYi5sZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9m
IGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEgKyAiIHZlcnN1cyAiICsgYjsKKyAgICBmb3IgKHZh
ciBpID0gYS5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsg
aSArICI6ICIgKyBhICsgIiB2ZXJzdXMgIiArIGI7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0
KGFycmF5KSB7CisgICAgdmFyIGV4cGVjdGVkID0gYXJyYXk7CisgICAgdmFyIGFjdHVhbCA9IGJh
cihhcnJheSkuZjsKKyAgICBjaGVja0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBm
b3IgKHZhciBqID0gMDsgaiA8IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7Cisg
ICAgdGVzdChhcnJheSk7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvY29uc3RydWN0LXZhcmFyZ3MtaW5saW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29uc3RydWN0LXZhcmFyZ3MtaW5saW5lLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1
Y3QtdmFyYXJncy1pbmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorZnVu
Y3Rpb24gRm9vKGEsIGIpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkucHVzaChhcmd1bWVu
dHNbaV0pOworICAgIHRoaXMuZiA9IHthOmEsIGI6YiwgYzphcnJheX07Cit9CisKK2Z1bmN0aW9u
IGJhcihhcnJheSkgeworICAgIHJldHVybiBuZXcgRm9vKC4uLmFycmF5KTsKK30KKworbm9Jbmxp
bmUoYmFyKTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAgaWYgKGEuYSAhPSBi
LmEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZl
cnN1cyAiICsgYi5hOworICAgIGlmIChhLmIgIT0gYi5iKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKKyAgICBpZiAoYS5j
Lmxlbmd0aCAhPSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGZv
ciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChhLmNbaV0gIT0gYi5j
W2ldKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0Y2gg
YXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgfQorfQor
CitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgdmFyIGV4cGVjdGVkID0ge2E6YXJyYXlbMF0s
IGI6YXJyYXlbMV0sIGM6YXJyYXl9OworICAgIHZhciBhY3R1YWwgPSBiYXIoYXJyYXkpLmY7Cisg
ICAgY2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNoKGopOworICAgIHRlc3QoYXJyYXkp
OworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVj
dC12YXJhcmdzLW5vLWlubGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLW5vLWlubGluZS5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29uc3RydWN0LXZhcmFy
Z3Mtbm8taW5saW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKK2Z1bmN0aW9u
IEZvbyhhLCBiKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ld
KTsKKyAgICB0aGlzLmYgPSB7YTphLCBiOmIsIGM6YXJyYXl9OworfQorCitub0lubGluZShGb28p
OworCitmdW5jdGlvbiBiYXIoYXJyYXkpIHsKKyAgICByZXR1cm4gbmV3IEZvbyguLi5hcnJheSk7
Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgeworICAg
IGlmIChhLmEgIT0gYi5hKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAi
ICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKKyAgICBpZiAoYS5iICE9IGIuYikKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7
CisgICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiAr
IGIuYzsKKyAgICBmb3IgKHZhciBpID0gYS5jLmxlbmd0aDsgaS0tOykgeworICAgICAgICBpZiAo
YS5jW2ldICE9IGIuY1tpXSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9m
IGMsIG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5j
OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIHZhciBleHBlY3RlZCA9
IHthOmFycmF5WzBdLCBiOmFycmF5WzFdLCBjOmFycmF5fTsKKyAgICB2YXIgYWN0dWFsID0gYmFy
KGFycmF5KS5mOworICAgIGNoZWNrRXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgaSAlIDY7ICsraikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAg
ICB0ZXN0KGFycmF5KTsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91dC1vZi1i
b3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9nZXQtYXJndW1lbnQtYnktdmFsLWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91dC1vZi1ib3Vu
ZHMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2dldC1hcmd1bWVudC1ieS12YWwtaW4taW5saW5lZC12YXJhcmdzLWNhbGwtb3V0LW9mLWJvdW5k
cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACit2YXIgZ2k7CisKK2Z1bmN0aW9u
IGZvbygpIHsKKyAgICByZXR1cm4gYXJndW1lbnRzW2dpXTsKK30KKworZnVuY3Rpb24gYmFyKGFy
cmF5LCBpKSB7CisgICAgZ2kgPSBpOworICAgIHJldHVybiBmb28uYXBwbHkodGhpcywgYXJyYXkp
OworfQorCitub0lubGluZShiYXIpOworCit2YXIgYmlnQXJyYXkgPSBbXTsKK2ZvciAodmFyIGkg
PSAwOyBpIDwgNTA7ICsraSkKKyAgICBiaWdBcnJheS5wdXNoKDQyKTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIG1pID0gaSAlIDUwOworICAgIHZhciByZXN1
bHQgPSBiYXIoYmlnQXJyYXksIG1pKTsKKyAgICBpZiAocmVzdWx0ICE9PSA0MikKKyAgICAgICAg
dGhyb3cgIkJhZCByZXN1bHQgaW4gZmlyc3QgbG9vcDogIiArIHJlc3VsdCArICI7IGV4cGVjdGVk
OiAiICsgNDI7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZh
ciBtaSA9IGkgJSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IGJhcihbNDJdLCBtaSk7CisgICAgdmFy
IGV4cGVjdGVkID0gbWkgPyB2b2lkIDAgOiA0MjsKKyAgICBpZiAocmVzdWx0ICE9PSBleHBlY3Rl
ZCkKKyAgICAgICAgdGhyb3cgIkJhZCByZXN1bHQgaW4gc2Vjb25kIGxvb3A6ICIgKyByZXN1bHQg
KyAiOyBleHBlY3RlZDogIiArIGV4cGVjdGVkOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLXNhZmUtaW4taW5saW5lZC12YXJh
cmdzLWNhbGwtb3V0LW9mLWJvdW5kcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2dldC1hcmd1bWVudC1ieS12YWwtc2FmZS1pbi1pbmxpbmVkLXZh
cmFyZ3MtY2FsbC1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLXNhZmUtaW4taW5saW5l
ZC12YXJhcmdzLWNhbGwtb3V0LW9mLWJvdW5kcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM1IEBACit2YXIgZ2k7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBpZiAoIWVmZmVjdGZ1bDQy
KCkpCisgICAgICAgIGFyZ3VtZW50cyA9ICJoZWxsbyI7CisgICAgcmV0dXJuIGFyZ3VtZW50c1tn
aV07Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSwgaSkgeworICAgIGdpID0gaTsKKyAgICByZXR1
cm4gZm9vLmFwcGx5KHRoaXMsIGFycmF5KTsKK30KKworbm9JbmxpbmUoYmFyKTsKKwordmFyIGJp
Z0FycmF5ID0gW107Citmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpCisgICAgYmlnQXJyYXku
cHVzaCg0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBt
aSA9IGkgJSA1MDsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKGJpZ0FycmF5LCBtaSk7CisgICAgaWYg
KHJlc3VsdCAhPT0gNDIpCisgICAgICAgIHRocm93ICJCYWQgcmVzdWx0IGluIGZpcnN0IGxvb3A6
ICIgKyByZXN1bHQgKyAiOyBleHBlY3RlZDogIiArIDQyOworfQorCisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBtaSA9IGkgJSAxMDA7CisgICAgdmFyIHJlc3Vs
dCA9IGJhcihbNDJdLCBtaSk7CisgICAgdmFyIGV4cGVjdGVkID0gbWkgPyB2b2lkIDAgOiA0MjsK
KyAgICBpZiAocmVzdWx0ICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgIkJhZCByZXN1bHQg
aW4gc2Vjb25kIGxvb3A6ICIgKyByZXN1bHQgKyAiOyBleHBlY3RlZDogIiArIGV4cGVjdGVkOwor
fQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dldC1teS1hcmd1
bWVudC1ieS12YWwtY3JlYXRlcy1hcmd1bWVudHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtbXktYXJndW1lbnQtYnktdmFsLWNyZWF0ZXMt
YXJndW1lbnRzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9nZXQtbXktYXJndW1lbnQtYnktdmFsLWNyZWF0ZXMtYXJndW1lbnRzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKK2Z1bmN0aW9uIGJsYWgoYXJncykgeworICAgIHZh
ciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkK
KyAgICAgICAgYXJyYXkucHVzaChhcmdzW2ldKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK2Z1
bmN0aW9uIGZvbygpIHsKKyAgICAvLyBGb3JjZSBjcmVhdGlvbiBvZiBhcmd1bWVudHMgYnkgZG9p
bmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCisgICAgdmFyIHRtcCA9IGFyZ3VtZW50c1s0Ml07Cisg
ICAgCisgICAgLy8gVXNlIHRoZSBjcmVhdGVkIGFyZ3VtZW50cyBvYmplY3QuCisgICAgcmV0dXJu
IGJsYWgoYXJndW1lbnRzKTsKK30KKworZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJu
IGZvby5hcHBseSh0aGlzLCBhcnJheSk7Cit9CisKK25vSW5saW5lKGJsYWgpOworbm9JbmxpbmUo
YmFyKTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAgaWYgKGEubGVuZ3RoICE9
IGIubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGxlbmd0aCBtaXNtYXRjaDogIiArIGEg
KyAiIHZlcnN1cyAiICsgYjsKKyAgICBmb3IgKHZhciBpID0gYS5sZW5ndGg7IGktLTspIHsKKyAg
ICAgICAgaWYgKGFbaV0gIT0gYltpXSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogbWlzbWF0
Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEgKyAiIHZlcnN1cyAiICsgYjsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICB2YXIgYWN0dWFsID0gYmFyKGFycmF5KTsKKyAg
ICBjaGVja0VxdWFsKGFjdHVhbCwgYXJyYXkpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8
IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7CisgICAgdGVzdChhcnJheSk7Cit9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10
aGVuLWlubGluZWQtY2FsbC1leGl0LWluLWZvby5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1l
eGl0LWluLWZvby5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWV4aXQtaW4tZm9vLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKK2Z1bmN0aW9uIGZvbyhhLCBiKSB7CisgICAg
dmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3Ro
OyArK2kpCisgICAgICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ldICsgMSk7CisgICAgcmV0dXJu
IHthOmEsIGI6YiwgYzphcnJheX07Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSkgeworICAgIHJl
dHVybiBmb28uYXBwbHkodGhpcywgYXJyYXkpOworfQorCitub0lubGluZShiYXIpOworCitmdW5j
dGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAgICBpZiAoYS5hICE9IGIuYSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTogIiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7Cisg
ICAgaWYgKGEuYiAhPSBiLmIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6
ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5iOworICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5s
ZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNt
YXRjaDogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgZm9yICh2YXIgaSA9IGEuYy5s
ZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0pCisgICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAi
OiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Qo
YXJyYXkpIHsKKyAgICB2YXIgZXhwZWN0ZWQgPSB7YTphcnJheVswXSwgYjphcnJheVsxXSwgYzph
cnJheS5tYXAoZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlICsgMSB9KX07CisgICAgdmFy
IGFjdHVhbCA9IGJhcihhcnJheSk7CisgICAgY2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsK
K30KKworLy8gVGhpcyBpcyBwcmV0dHkgZHVtYi4gV2UgbmVlZCB0byBmaXJzdCBtYWtlIHN1cmUg
dGhhdCB0aGUgVk0gaXMgcHJlcGFyZWQgZm9yIGRvdWJsZSBhcnJheXMgYmVpbmcKKy8vIGNyZWF0
ZWQuCit2YXIgYXJyYXkgPSBbXTsKK2FycmF5LnB1c2goNDIpOworYXJyYXkucHVzaCg0Mi41KTsK
KworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107
CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNo
KGopOworICAgIHRlc3QoYXJyYXkpOworfQorCit0ZXN0KFsxLjUsIDIuNSwgMy41XSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlu
bGluZWQtY2FsbC1pbmxpbmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWlubGluZWQuanMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQt
dmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDMgQEAKK2Z1bmN0aW9uIGZvbyhhLCBiKSB7CisgICAgdmFyIGFycmF5ID0gW107Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGFy
cmF5LnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICByZXR1cm4ge2E6YSwgYjpiLCBjOmFycmF5fTsK
K30KKworZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJuIGZvby5hcHBseSh0aGlzLCBh
cnJheSk7Cit9CisKK2Z1bmN0aW9uIGJheihhcnJheSkgeworICAgIHJldHVybiBiYXIoYXJyYXkp
OworfQorCitub0lubGluZShiYXopOworCitmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAg
ICBpZiAoYS5hICE9IGIuYSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTog
IiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7CisgICAgaWYgKGEuYiAhPSBiLmIpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5i
OworICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5sZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEuYyArICIgdmVyc3VzICIg
KyBiLmM7CisgICAgZm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYg
KGEuY1tpXSAhPSBiLmNbaV0pCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIu
YzsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICB2YXIgZXhwZWN0ZWQg
PSB7YTphcnJheVswXSwgYjphcnJheVsxXSwgYzphcnJheX07CisgICAgdmFyIGFjdHVhbCA9IGJh
eihhcnJheSk7CisgICAgY2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsKK30KKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNoKGopOworICAg
IHRlc3QoYXJyYXkpOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQt
Y2FsbC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzkgQEAKK2Z1bmN0aW9uIGZvbyhhLCBiKSB7CisgICAgdmFyIGFycmF5ID0gW107Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGFy
cmF5LnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICByZXR1cm4ge2E6YSwgYjpiLCBjOmFycmF5fTsK
K30KKworZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJuIGZvby5hcHBseSh0aGlzLCBh
cnJheSk7Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikg
eworICAgIGlmIChhLmEgIT0gYi5hKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKKyAgICBpZiAoYS5iICE9IGIuYikKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIg
KyBiLmI7CisgICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJz
dXMgIiArIGIuYzsKKyAgICBmb3IgKHZhciBpID0gYS5jLmxlbmd0aDsgaS0tOykgeworICAgICAg
ICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZh
bHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAi
ICsgYi5jOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIHZhciBleHBl
Y3RlZCA9IHthOmFycmF5WzBdLCBiOmFycmF5WzFdLCBjOmFycmF5fTsKKyAgICB2YXIgYWN0dWFs
ID0gYmFyKGFycmF5KTsKKyAgICBjaGVja0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQorCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7
CisgICAgdGVzdChhcnJheSk7Cit9CisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZGVs
dGFibHVlLXZhcmFyZ3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZGVsdGFibHVlLXZhcmFyZ3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2RlbHRhYmx1ZS12YXJhcmdz
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2RlbHRhYmx1ZS12YXJhcmdzLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2RlbHRhYmx1ZS12YXJhcmdzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2RlbHRhYmx1ZS12YXJhcmdzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2RlbHRhYmx1ZS12YXJhcmdzLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZGVsdGFibHVlLXZhcmFyZ3Mu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4ODUgQEAKKy8vQCBza2lwIGlmICRhcmNoaXRl
Y3R1cmUgPT0gImFybSIgYW5kICRob3N0T1MgPT0gImRhcndpbiIKKy8vIENvcHlyaWdodCAyMDA4
IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgMTk5NiBKb2huIE1hbG9uZXkgYW5kIE1hcmlvIFdvbGN6a28uCisKKy8vIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKy8vIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
Ly8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKy8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBC
b3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCisvLyBUaGlzIGltcGxlbWVudGF0aW9uIG9m
IHRoZSBEZWx0YUJsdWUgYmVuY2htYXJrIGlzIGRlcml2ZWQKKy8vIGZyb20gdGhlIFNtYWxsdGFs
ayBpbXBsZW1lbnRhdGlvbiBieSBKb2huIE1hbG9uZXkgYW5kIE1hcmlvCisvLyBXb2xjemtvLiBT
b21lIHBhcnRzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGRpcmVjdGx5LCB3aGVyZWFzCisvLyBvdGhl
cnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG1vcmUgYWdncmVzaXZlbHkgdG8gbWFrZSBpdCBmZWVsCisv
LyBtb3JlIGxpa2UgYSBKYXZhU2NyaXB0IHByb2dyYW0uCisKKy8qKgorICogQSBKYXZhU2NyaXB0
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBEZWx0YUJsdWUgY29uc3RyYWludC1zb2x2aW5nCisgKiBh
bGdvcml0aG0sIGFzIGRlc2NyaWJlZCBpbjoKKyAqCisgKiAiVGhlIERlbHRhQmx1ZSBBbGdvcml0
aG06IEFuIEluY3JlbWVudGFsIENvbnN0cmFpbnQgSGllcmFyY2h5IFNvbHZlciIKKyAqICAgQmpv
cm4gTi4gRnJlZW1hbi1CZW5zb24gYW5kIEpvaG4gTWFsb25leQorICogICBKYW51YXJ5IDE5OTAg
Q29tbXVuaWNhdGlvbnMgb2YgdGhlIEFDTSwKKyAqICAgYWxzbyBhdmFpbGFibGUgYXMgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uIFRSIDg5LTA4LTA2LgorICoKKyAqIEJld2FyZTogdGhpcyBiZW5j
aG1hcmsgaXMgd3JpdHRlbiBpbiBhIGdyb3Rlc3F1ZSBzdHlsZSB3aGVyZQorICogdGhlIGNvbnN0
cmFpbnQgbW9kZWwgaXMgYnVpbHQgYnkgc2lkZS1lZmZlY3RzIGZyb20gY29uc3RydWN0b3JzLgor
ICogSSd2ZSBrZXB0IGl0IHRoaXMgd2F5IHRvIGF2b2lkIGRldmlhdGluZyB0b28gbXVjaCBmcm9t
IHRoZSBvcmlnaW5hbAorICogaW1wbGVtZW50YXRpb24uCisgKi8KKworZnVuY3Rpb24gYXJncygp
IHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50
cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkucHVzaChhcmd1bWVudHNbaV0pOworICAgIHJl
dHVybiBhcnJheTsKK30KKworCisvKiAtLS0gTyBiIGogZSBjIHQgICBNIG8gZCBlIGwgLS0tICov
CisKK09iamVjdC5wcm90b3R5cGUuaW5oZXJpdHNGcm9tID0gZnVuY3Rpb24gKHNodXBlcikgewor
ICBmdW5jdGlvbiBJbmhlcml0ZXIoKSB7IH0KKyAgSW5oZXJpdGVyLnByb3RvdHlwZSA9IHNodXBl
ci5wcm90b3R5cGU7CisgIHRoaXMucHJvdG90eXBlID0gbmV3IEluaGVyaXRlciguLi5hcmdzKCkp
OworICB0aGlzLnN1cGVyQ29uc3RydWN0b3IgPSBzaHVwZXI7Cit9CisKK2Z1bmN0aW9uIE9yZGVy
ZWRDb2xsZWN0aW9uKCkgeworICB0aGlzLmVsbXMgPSBuZXcgQXJyYXkoLi4uYXJncygpKTsKK30K
KworT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChlbG0pIHsKKyAg
dGhpcy5lbG1zLnB1c2goLi4uYXJncyhlbG0pKTsKK30KKworT3JkZXJlZENvbGxlY3Rpb24ucHJv
dG90eXBlLmF0ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgIHJldHVybiB0aGlzLmVsbXNbaW5kZXhd
OworfQorCitPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHsK
KyAgcmV0dXJuIHRoaXMuZWxtcy5sZW5ndGg7Cit9CisKK09yZGVyZWRDb2xsZWN0aW9uLnByb3Rv
dHlwZS5yZW1vdmVGaXJzdCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMuZWxtcy5wb3Ao
Li4uYXJncygpKTsKK30KKworT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1
bmN0aW9uIChlbG0pIHsKKyAgdmFyIGluZGV4ID0gMCwgc2tpcHBlZCA9IDA7CisgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5lbG1zLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIHZhbHVlID0gdGhp
cy5lbG1zW2ldOworICAgIGlmICh2YWx1ZSAhPSBlbG0pIHsKKyAgICAgIHRoaXMuZWxtc1tpbmRl
eF0gPSB2YWx1ZTsKKyAgICAgIGluZGV4Kys7CisgICAgfSBlbHNlIHsKKyAgICAgIHNraXBwZWQr
KzsKKyAgICB9CisgIH0KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBza2lwcGVkOyBpKyspCisgICAg
dGhpcy5lbG1zLnBvcCguLi5hcmdzKCkpOworfQorCisvKiAtLS0gKgorICogUyB0IHIgZSBuIGcg
dCBoCisgKiAtLS0gKi8KKworLyoqCisgKiBTdHJlbmd0aHMgYXJlIHVzZWQgdG8gbWVhc3VyZSB0
aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiBjb25zdHJhaW50cy4KKyAqIE5ldyBzdHJlbmd0aHMg
bWF5IGJlIGluc2VydGVkIGluIHRoZSBzdHJlbmd0aCBoaWVyYXJjaHkgd2l0aG91dAorICogZGlz
cnVwdGluZyBjdXJyZW50IGNvbnN0cmFpbnRzLiAgU3RyZW5ndGhzIGNhbm5vdCBiZSBjcmVhdGVk
IG91dHNpZGUKKyAqIHRoaXMgY2xhc3MsIHNvIHBvaW50ZXIgY29tcGFyaXNvbiBjYW4gYmUgdXNl
ZCBmb3IgdmFsdWUgY29tcGFyaXNvbi4KKyAqLworZnVuY3Rpb24gU3RyZW5ndGgoc3RyZW5ndGhW
YWx1ZSwgbmFtZSkgeworICB0aGlzLnN0cmVuZ3RoVmFsdWUgPSBzdHJlbmd0aFZhbHVlOworICB0
aGlzLm5hbWUgPSBuYW1lOworfQorCitTdHJlbmd0aC5zdHJvbmdlciA9IGZ1bmN0aW9uIChzMSwg
czIpIHsKKyAgcmV0dXJuIHMxLnN0cmVuZ3RoVmFsdWUgPCBzMi5zdHJlbmd0aFZhbHVlOworfQor
CitTdHJlbmd0aC53ZWFrZXIgPSBmdW5jdGlvbiAoczEsIHMyKSB7CisgIHJldHVybiBzMS5zdHJl
bmd0aFZhbHVlID4gczIuc3RyZW5ndGhWYWx1ZTsKK30KKworU3RyZW5ndGgud2Vha2VzdE9mID0g
ZnVuY3Rpb24gKHMxLCBzMikgeworICByZXR1cm4gdGhpcy53ZWFrZXIoLi4uYXJncyhzMSwgczIp
KSA/IHMxIDogczI7Cit9CisKK1N0cmVuZ3RoLnN0cm9uZ2VzdCA9IGZ1bmN0aW9uIChzMSwgczIp
IHsKKyAgcmV0dXJuIHRoaXMuc3Ryb25nZXIoLi4uYXJncyhzMSwgczIpKSA/IHMxIDogczI7Cit9
CisKK1N0cmVuZ3RoLnByb3RvdHlwZS5uZXh0V2Vha2VyID0gZnVuY3Rpb24gKCkgeworICBzd2l0
Y2ggKHRoaXMuc3RyZW5ndGhWYWx1ZSkgeworICAgIGNhc2UgMDogcmV0dXJuIFN0cmVuZ3RoLldF
QUtFU1Q7CisgICAgY2FzZSAxOiByZXR1cm4gU3RyZW5ndGguV0VBS19ERUZBVUxUOworICAgIGNh
c2UgMjogcmV0dXJuIFN0cmVuZ3RoLk5PUk1BTDsKKyAgICBjYXNlIDM6IHJldHVybiBTdHJlbmd0
aC5TVFJPTkdfREVGQVVMVDsKKyAgICBjYXNlIDQ6IHJldHVybiBTdHJlbmd0aC5QUkVGRVJSRUQ7
CisgICAgY2FzZSA1OiByZXR1cm4gU3RyZW5ndGguUkVRVUlSRUQ7CisgIH0KK30KKworLy8gU3Ry
ZW5ndGggY29uc3RhbnRzLgorU3RyZW5ndGguUkVRVUlSRUQgICAgICAgID0gbmV3IFN0cmVuZ3Ro
KC4uLmFyZ3MoMCwgInJlcXVpcmVkIikpOworU3RyZW5ndGguU1RPTkdfUFJFRkVSUkVEID0gbmV3
IFN0cmVuZ3RoKC4uLmFyZ3MoMSwgInN0cm9uZ1ByZWZlcnJlZCIpKTsKK1N0cmVuZ3RoLlBSRUZF
UlJFRCAgICAgICA9IG5ldyBTdHJlbmd0aCguLi5hcmdzKDIsICJwcmVmZXJyZWQiKSk7CitTdHJl
bmd0aC5TVFJPTkdfREVGQVVMVCAgPSBuZXcgU3RyZW5ndGgoLi4uYXJncygzLCAic3Ryb25nRGVm
YXVsdCIpKTsKK1N0cmVuZ3RoLk5PUk1BTCAgICAgICAgICA9IG5ldyBTdHJlbmd0aCguLi5hcmdz
KDQsICJub3JtYWwiKSk7CitTdHJlbmd0aC5XRUFLX0RFRkFVTFQgICAgPSBuZXcgU3RyZW5ndGgo
Li4uYXJncyg1LCAid2Vha0RlZmF1bHQiKSk7CitTdHJlbmd0aC5XRUFLRVNUICAgICAgICAgPSBu
ZXcgU3RyZW5ndGgoLi4uYXJncyg2LCAid2Vha2VzdCIpKTsKKworLyogLS0tICoKKyAqIEMgbyBu
IHMgdCByIGEgaSBuIHQKKyAqIC0tLSAqLworCisvKioKKyAqIEFuIGFic3RyYWN0IGNsYXNzIHJl
cHJlc2VudGluZyBhIHN5c3RlbS1tYWludGFpbmFibGUgcmVsYXRpb25zaGlwCisgKiAob3IgImNv
bnN0cmFpbnQiKSBiZXR3ZWVuIGEgc2V0IG9mIHZhcmlhYmxlcy4gQSBjb25zdHJhaW50IHN1cHBs
aWVzCisgKiBhIHN0cmVuZ3RoIGluc3RhbmNlIHZhcmlhYmxlOyBjb25jcmV0ZSBzdWJjbGFzc2Vz
IHByb3ZpZGUgYSBtZWFucworICogb2Ygc3RvcmluZyB0aGUgY29uc3RyYWluZWQgdmFyaWFibGVz
IGFuZCBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZAorICogdG8gcmVwcmVzZW50IGEgY29uc3Ry
YWludC4KKyAqLworZnVuY3Rpb24gQ29uc3RyYWludChzdHJlbmd0aCkgeworICB0aGlzLnN0cmVu
Z3RoID0gc3RyZW5ndGg7Cit9CisKKy8qKgorICogQWN0aXZhdGUgdGhpcyBjb25zdHJhaW50IGFu
ZCBhdHRlbXB0IHRvIHNhdGlzZnkgaXQuCisgKi8KK0NvbnN0cmFpbnQucHJvdG90eXBlLmFkZENv
bnN0cmFpbnQgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuYWRkVG9HcmFwaCguLi5hcmdzKCkpOwor
ICBwbGFubmVyLmluY3JlbWVudGFsQWRkKC4uLmFyZ3ModGhpcykpOworfQorCisvKioKKyAqIEF0
dGVtcHQgdG8gZmluZCBhIHdheSB0byBlbmZvcmNlIHRoaXMgY29uc3RyYWludC4gSWYgc3VjY2Vz
c2Z1bCwKKyAqIHJlY29yZCB0aGUgc29sdXRpb24sIHBlcmhhcHMgbW9kaWZ5aW5nIHRoZSBjdXJy
ZW50IGRhdGFmbG93CisgKiBncmFwaC4gQW5zd2VyIHRoZSBjb25zdHJhaW50IHRoYXQgdGhpcyBj
b25zdHJhaW50IG92ZXJyaWRlcywgaWYKKyAqIHRoZXJlIGlzIG9uZSwgb3IgbmlsLCBpZiB0aGVy
ZSBpc24ndC4KKyAqIEFzc3VtZTogSSBhbSBub3QgYWxyZWFkeSBzYXRpc2ZpZWQuCisgKi8KK0Nv
bnN0cmFpbnQucHJvdG90eXBlLnNhdGlzZnkgPSBmdW5jdGlvbiAobWFyaykgeworICB0aGlzLmNo
b29zZU1ldGhvZCguLi5hcmdzKG1hcmspKTsKKyAgaWYgKCF0aGlzLmlzU2F0aXNmaWVkKC4uLmFy
Z3MoKSkpIHsKKyAgICBpZiAodGhpcy5zdHJlbmd0aCA9PSBTdHJlbmd0aC5SRVFVSVJFRCkKKyAg
ICAgIGFsZXJ0KC4uLmFyZ3MoIkNvdWxkIG5vdCBzYXRpc2Z5IGEgcmVxdWlyZWQgY29uc3RyYWlu
dCEiKSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5tYXJrSW5wdXRzKC4uLmFyZ3Mo
bWFyaykpOworICB2YXIgb3V0ID0gdGhpcy5vdXRwdXQoLi4uYXJncygpKTsKKyAgdmFyIG92ZXJy
aWRkZW4gPSBvdXQuZGV0ZXJtaW5lZEJ5OworICBpZiAob3ZlcnJpZGRlbiAhPSBudWxsKSBvdmVy
cmlkZGVuLm1hcmtVbnNhdGlzZmllZCguLi5hcmdzKCkpOworICBvdXQuZGV0ZXJtaW5lZEJ5ID0g
dGhpczsKKyAgaWYgKCFwbGFubmVyLmFkZFByb3BhZ2F0ZSguLi5hcmdzKHRoaXMsIG1hcmspKSkK
KyAgICBhbGVydCguLi5hcmdzKCJDeWNsZSBlbmNvdW50ZXJlZCIpKTsKKyAgb3V0Lm1hcmsgPSBt
YXJrOworICByZXR1cm4gb3ZlcnJpZGRlbjsKK30KKworQ29uc3RyYWludC5wcm90b3R5cGUuZGVz
dHJveUNvbnN0cmFpbnQgPSBmdW5jdGlvbiAoKSB7CisgIGlmICh0aGlzLmlzU2F0aXNmaWVkKC4u
LmFyZ3MoKSkpIHBsYW5uZXIuaW5jcmVtZW50YWxSZW1vdmUoLi4uYXJncyh0aGlzKSk7CisgIGVs
c2UgdGhpcy5yZW1vdmVGcm9tR3JhcGgoLi4uYXJncygpKTsKK30KKworLyoqCisgKiBOb3JtYWwg
Y29uc3RyYWludHMgYXJlIG5vdCBpbnB1dCBjb25zdHJhaW50cy4gIEFuIGlucHV0IGNvbnN0cmFp
bnQKKyAqIGlzIG9uZSB0aGF0IGRlcGVuZHMgb24gZXh0ZXJuYWwgc3RhdGUsIHN1Y2ggYXMgdGhl
IG1vdXNlLCB0aGUKKyAqIGtleWJvcmQsIGEgY2xvY2ssIG9yIHNvbWUgYXJiaXRyYXR5IHBpZWNl
IG9mIGltcGVyYXRpdmUgY29kZS4KKyAqLworQ29uc3RyYWludC5wcm90b3R5cGUuaXNJbnB1dCA9
IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiAtLS0gKgorICogVSBuIGEg
ciB5ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAorICogLS0tICovCisKKy8qKgorICogQWJzdHJhY3Qg
c3VwZXJjbGFzcyBmb3IgY29uc3RyYWludHMgaGF2aW5nIGEgc2luZ2xlIHBvc3NpYmxlIG91dHB1
dAorICogdmFyaWFibGUuCisgKi8KK2Z1bmN0aW9uIFVuYXJ5Q29uc3RyYWludCh2LCBzdHJlbmd0
aCkgeworICBVbmFyeUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHN0cmVu
Z3RoKTsKKyAgdGhpcy5teU91dHB1dCA9IHY7CisgIHRoaXMuc2F0aXNmaWVkID0gZmFsc2U7Cisg
IHRoaXMuYWRkQ29uc3RyYWludCguLi5hcmdzKCkpOworfQorCitVbmFyeUNvbnN0cmFpbnQuaW5o
ZXJpdHNGcm9tKC4uLmFyZ3MoQ29uc3RyYWludCkpOworCisvKioKKyAqIEFkZHMgdGhpcyBjb25z
dHJhaW50IHRvIHRoZSBjb25zdHJhaW50IGdyYXBoCisgKi8KK1VuYXJ5Q29uc3RyYWludC5wcm90
b3R5cGUuYWRkVG9HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5teU91dHB1dC5hZGRDb25z
dHJhaW50KC4uLmFyZ3ModGhpcykpOworICB0aGlzLnNhdGlzZmllZCA9IGZhbHNlOworfQorCisv
KioKKyAqIERlY2lkZXMgaWYgdGhpcyBjb25zdHJhaW50IGNhbiBiZSBzYXRpc2ZpZWQgYW5kIHJl
Y29yZHMgdGhhdAorICogZGVjaXNpb24uCisgKi8KK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUu
Y2hvb3NlTWV0aG9kID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgdGhpcy5zYXRpc2ZpZWQgPSAodGhp
cy5teU91dHB1dC5tYXJrICE9IG1hcmspCisgICAgJiYgU3RyZW5ndGguc3Ryb25nZXIoLi4uYXJn
cyh0aGlzLnN0cmVuZ3RoLCB0aGlzLm15T3V0cHV0LndhbGtTdHJlbmd0aCkpOworfQorCisvKioK
KyAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkIGluIHRoZSBj
dXJyZW50IHNvbHV0aW9uLgorICovCitVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlzU2F0aXNm
aWVkID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5zYXRpc2ZpZWQ7Cit9CisKK1VuYXJ5
Q29uc3RyYWludC5wcm90b3R5cGUubWFya0lucHV0cyA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIC8v
IGhhcyBubyBpbnB1dHMKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG91dHB1dCB2
YXJpYWJsZS4KKyAqLworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5vdXRwdXQgPSBmdW5jdGlv
biAoKSB7CisgIHJldHVybiB0aGlzLm15T3V0cHV0OworfQorCisvKioKKyAqIENhbGN1bGF0ZSB0
aGUgd2Fsa2Fib3V0IHN0cmVuZ3RoLCB0aGUgc3RheSBmbGFnLCBhbmQsIGlmIGl0IGlzCisgKiAn
c3RheScsIHRoZSB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IG9mIHRoaXMgY29uc3RyYWlu
dC4gQXNzdW1lCisgKiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkLgorICovCitVbmFyeUNv
bnN0cmFpbnQucHJvdG90eXBlLnJlY2FsY3VsYXRlID0gZnVuY3Rpb24gKCkgeworICB0aGlzLm15
T3V0cHV0LndhbGtTdHJlbmd0aCA9IHRoaXMuc3RyZW5ndGg7CisgIHRoaXMubXlPdXRwdXQuc3Rh
eSA9ICF0aGlzLmlzSW5wdXQoLi4uYXJncygpKTsKKyAgaWYgKHRoaXMubXlPdXRwdXQuc3RheSkg
dGhpcy5leGVjdXRlKC4uLmFyZ3MoKSk7IC8vIFN0YXkgb3B0aW1pemF0aW9uCit9CisKKy8qKgor
ICogUmVjb3JkcyB0aGF0IHRoaXMgY29uc3RyYWludCBpcyB1bnNhdGlzZmllZAorICovCitVbmFy
eUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtVbnNhdGlzZmllZCA9IGZ1bmN0aW9uICgpIHsKKyAg
dGhpcy5zYXRpc2ZpZWQgPSBmYWxzZTsKK30KKworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5p
bnB1dHNLbm93biA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRydWU7Cit9CisKK1VuYXJ5Q29u
c3RyYWludC5wcm90b3R5cGUucmVtb3ZlRnJvbUdyYXBoID0gZnVuY3Rpb24gKCkgeworICBpZiAo
dGhpcy5teU91dHB1dCAhPSBudWxsKSB0aGlzLm15T3V0cHV0LnJlbW92ZUNvbnN0cmFpbnQoLi4u
YXJncyh0aGlzKSk7CisgIHRoaXMuc2F0aXNmaWVkID0gZmFsc2U7Cit9CisKKy8qIC0tLSAqCisg
KiBTIHQgYSB5ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAorICogLS0tICovCisKKy8qKgorICogVmFy
aWFibGVzIHRoYXQgc2hvdWxkLCB3aXRoIHNvbWUgbGV2ZWwgb2YgcHJlZmVyZW5jZSwgc3RheSB0
aGUgc2FtZS4KKyAqIFBsYW5uZXJzIG1heSBleHBsb2l0IHRoZSBmYWN0IHRoYXQgaW5zdGFuY2Vz
LCBpZiBzYXRpc2ZpZWQsIHdpbGwgbm90CisgKiBjaGFuZ2UgdGhlaXIgb3V0cHV0IGR1cmluZyBw
bGFuIGV4ZWN1dGlvbi4gIFRoaXMgaXMgY2FsbGVkICJzdGF5CisgKiBvcHRpbWl6YXRpb24iLgor
ICovCitmdW5jdGlvbiBTdGF5Q29uc3RyYWludCh2LCBzdHIpIHsKKyAgU3RheUNvbnN0cmFpbnQu
c3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHYsIHN0cik7Cit9CisKK1N0YXlDb25zdHJhaW50
LmluaGVyaXRzRnJvbSguLi5hcmdzKFVuYXJ5Q29uc3RyYWludCkpOworCitTdGF5Q29uc3RyYWlu
dC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgLy8gU3RheSBjb25zdHJhaW50
cyBkbyBub3RoaW5nCit9CisKKy8qIC0tLSAqCisgKiBFIGQgaSB0ICAgQyBvIG4gcyB0IHIgYSBp
IG4gdAorICogLS0tICovCisKKy8qKgorICogQSB1bmFyeSBpbnB1dCBjb25zdHJhaW50IHVzZWQg
dG8gbWFyayBhIHZhcmlhYmxlIHRoYXQgdGhlIGNsaWVudAorICogd2lzaGVzIHRvIGNoYW5nZS4K
KyAqLworZnVuY3Rpb24gRWRpdENvbnN0cmFpbnQodiwgc3RyKSB7CisgIEVkaXRDb25zdHJhaW50
LnN1cGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzLCB2LCBzdHIpOworfQorCitFZGl0Q29uc3RyYWlu
dC5pbmhlcml0c0Zyb20oLi4uYXJncyhVbmFyeUNvbnN0cmFpbnQpKTsKKworLyoqCisgKiBFZGl0
cyBpbmRpY2F0ZSB0aGF0IGEgdmFyaWFibGUgaXMgdG8gYmUgY2hhbmdlZCBieSBpbXBlcmF0aXZl
IGNvZGUuCisgKi8KK0VkaXRDb25zdHJhaW50LnByb3RvdHlwZS5pc0lucHV0ID0gZnVuY3Rpb24g
KCkgeworICByZXR1cm4gdHJ1ZTsKK30KKworRWRpdENvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1
dGUgPSBmdW5jdGlvbiAoKSB7CisgIC8vIEVkaXQgY29uc3RyYWludHMgZG8gbm90aGluZworfQor
CisvKiAtLS0gKgorICogQiBpIG4gYSByIHkgICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0g
Ki8KKwordmFyIERpcmVjdGlvbiA9IG5ldyBPYmplY3QoLi4uYXJncygpKTsKK0RpcmVjdGlvbi5O
T05FICAgICA9IDA7CitEaXJlY3Rpb24uRk9SV0FSRCAgPSAxOworRGlyZWN0aW9uLkJBQ0tXQVJE
ID0gLTE7CisKKy8qKgorICogQWJzdHJhY3Qgc3VwZXJjbGFzcyBmb3IgY29uc3RyYWludHMgaGF2
aW5nIHR3byBwb3NzaWJsZSBvdXRwdXQKKyAqIHZhcmlhYmxlcy4KKyAqLworZnVuY3Rpb24gQmlu
YXJ5Q29uc3RyYWludCh2YXIxLCB2YXIyLCBzdHJlbmd0aCkgeworICBCaW5hcnlDb25zdHJhaW50
LnN1cGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzLCBzdHJlbmd0aCk7CisgIHRoaXMudjEgPSB2YXIx
OworICB0aGlzLnYyID0gdmFyMjsKKyAgdGhpcy5kaXJlY3Rpb24gPSBEaXJlY3Rpb24uTk9ORTsK
KyAgdGhpcy5hZGRDb25zdHJhaW50KC4uLmFyZ3MoKSk7Cit9CisKK0JpbmFyeUNvbnN0cmFpbnQu
aW5oZXJpdHNGcm9tKC4uLmFyZ3MoQ29uc3RyYWludCkpOworCisvKioKKyAqIERlY2lkZXMgaWYg
dGhpcyBjb25zdHJhaW50IGNhbiBiZSBzYXRpc2ZpZWQgYW5kIHdoaWNoIHdheSBpdAorICogc2hv
dWxkIGZsb3cgYmFzZWQgb24gdGhlIHJlbGF0aXZlIHN0cmVuZ3RoIG9mIHRoZSB2YXJpYWJsZXMg
cmVsYXRlZCwKKyAqIGFuZCByZWNvcmQgdGhhdCBkZWNpc2lvbi4KKyAqLworQmluYXJ5Q29uc3Ry
YWludC5wcm90b3R5cGUuY2hvb3NlTWV0aG9kID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgaWYgKHRo
aXMudjEubWFyayA9PSBtYXJrKSB7CisgICAgdGhpcy5kaXJlY3Rpb24gPSAodGhpcy52Mi5tYXJr
ICE9IG1hcmsgJiYgU3RyZW5ndGguc3Ryb25nZXIoLi4uYXJncyh0aGlzLnN0cmVuZ3RoLCB0aGlz
LnYyLndhbGtTdHJlbmd0aCkpKQorICAgICAgPyBEaXJlY3Rpb24uRk9SV0FSRAorICAgICAgOiBE
aXJlY3Rpb24uTk9ORTsKKyAgfQorICBpZiAodGhpcy52Mi5tYXJrID09IG1hcmspIHsKKyAgICB0
aGlzLmRpcmVjdGlvbiA9ICh0aGlzLnYxLm1hcmsgIT0gbWFyayAmJiBTdHJlbmd0aC5zdHJvbmdl
ciguLi5hcmdzKHRoaXMuc3RyZW5ndGgsIHRoaXMudjEud2Fsa1N0cmVuZ3RoKSkpCisgICAgICA/
IERpcmVjdGlvbi5CQUNLV0FSRAorICAgICAgOiBEaXJlY3Rpb24uTk9ORTsKKyAgfQorICBpZiAo
U3RyZW5ndGgud2Vha2VyKC4uLmFyZ3ModGhpcy52MS53YWxrU3RyZW5ndGgsIHRoaXMudjIud2Fs
a1N0cmVuZ3RoKSkpIHsKKyAgICB0aGlzLmRpcmVjdGlvbiA9IFN0cmVuZ3RoLnN0cm9uZ2VyKC4u
LmFyZ3ModGhpcy5zdHJlbmd0aCwgdGhpcy52MS53YWxrU3RyZW5ndGgpKQorICAgICAgPyBEaXJl
Y3Rpb24uQkFDS1dBUkQKKyAgICAgIDogRGlyZWN0aW9uLk5PTkU7CisgIH0gZWxzZSB7CisgICAg
dGhpcy5kaXJlY3Rpb24gPSBTdHJlbmd0aC5zdHJvbmdlciguLi5hcmdzKHRoaXMuc3RyZW5ndGgs
IHRoaXMudjIud2Fsa1N0cmVuZ3RoKSkKKyAgICAgID8gRGlyZWN0aW9uLkZPUldBUkQKKyAgICAg
IDogRGlyZWN0aW9uLkJBQ0tXQVJECisgIH0KK30KKworLyoqCisgKiBBZGQgdGhpcyBjb25zdHJh
aW50IHRvIHRoZSBjb25zdHJhaW50IGdyYXBoCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90
eXBlLmFkZFRvR3JhcGggPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMudjEuYWRkQ29uc3RyYWludCgu
Li5hcmdzKHRoaXMpKTsKKyAgdGhpcy52Mi5hZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOwor
ICB0aGlzLmRpcmVjdGlvbiA9IERpcmVjdGlvbi5OT05FOworfQorCisvKioKKyAqIEFuc3dlciB0
cnVlIGlmIHRoaXMgY29uc3RyYWludCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGN1cnJlbnQgc29sdXRp
b24uCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlzU2F0aXNmaWVkID0gZnVuY3Rp
b24gKCkgeworICByZXR1cm4gdGhpcy5kaXJlY3Rpb24gIT0gRGlyZWN0aW9uLk5PTkU7Cit9CisK
Ky8qKgorICogTWFyayB0aGUgaW5wdXQgdmFyaWFibGUgd2l0aCB0aGUgZ2l2ZW4gbWFyay4KKyAq
LworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFya0lucHV0cyA9IGZ1bmN0aW9uIChtYXJr
KSB7CisgIHRoaXMuaW5wdXQoLi4uYXJncygpKS5tYXJrID0gbWFyazsKK30KKworLyoqCisgKiBS
ZXR1cm5zIHRoZSBjdXJyZW50IGlucHV0IHZhcmlhYmxlCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQu
cHJvdG90eXBlLmlucHV0ID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gKHRoaXMuZGlyZWN0aW9u
ID09IERpcmVjdGlvbi5GT1JXQVJEKSA/IHRoaXMudjEgOiB0aGlzLnYyOworfQorCisvKioKKyAq
IFJldHVybnMgdGhlIGN1cnJlbnQgb3V0cHV0IHZhcmlhYmxlCisgKi8KK0JpbmFyeUNvbnN0cmFp
bnQucHJvdG90eXBlLm91dHB1dCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuICh0aGlzLmRpcmVj
dGlvbiA9PSBEaXJlY3Rpb24uRk9SV0FSRCkgPyB0aGlzLnYyIDogdGhpcy52MTsKK30KKworLyoq
CisgKiBDYWxjdWxhdGUgdGhlIHdhbGthYm91dCBzdHJlbmd0aCwgdGhlIHN0YXkgZmxhZywgYW5k
LCBpZiBpdCBpcworICogJ3N0YXknLCB0aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBv
ZiB0aGlzCisgKiBjb25zdHJhaW50LiBBc3N1bWUgdGhpcyBjb25zdHJhaW50IGlzIHNhdGlzZmll
ZC4KKyAqLworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUucmVjYWxjdWxhdGUgPSBmdW5jdGlv
biAoKSB7CisgIHZhciBpaG4gPSB0aGlzLmlucHV0KC4uLmFyZ3MoKSksIG91dCA9IHRoaXMub3V0
cHV0KC4uLmFyZ3MoKSk7CisgIG91dC53YWxrU3RyZW5ndGggPSBTdHJlbmd0aC53ZWFrZXN0T2Yo
Li4uYXJncyh0aGlzLnN0cmVuZ3RoLCBpaG4ud2Fsa1N0cmVuZ3RoKSk7CisgIG91dC5zdGF5ID0g
aWhuLnN0YXk7CisgIGlmIChvdXQuc3RheSkgdGhpcy5leGVjdXRlKC4uLmFyZ3MoKSk7Cit9CisK
Ky8qKgorICogUmVjb3JkIHRoZSBmYWN0IHRoYXQgdGhpcyBjb25zdHJhaW50IGlzIHVuc2F0aXNm
aWVkLgorICovCitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5tYXJrVW5zYXRpc2ZpZWQgPSBm
dW5jdGlvbiAoKSB7CisgIHRoaXMuZGlyZWN0aW9uID0gRGlyZWN0aW9uLk5PTkU7Cit9CisKK0Jp
bmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlucHV0c0tub3duID0gZnVuY3Rpb24gKG1hcmspIHsK
KyAgdmFyIGkgPSB0aGlzLmlucHV0KC4uLmFyZ3MoKSk7CisgIHJldHVybiBpLm1hcmsgPT0gbWFy
ayB8fCBpLnN0YXkgfHwgaS5kZXRlcm1pbmVkQnkgPT0gbnVsbDsKK30KKworQmluYXJ5Q29uc3Ry
YWludC5wcm90b3R5cGUucmVtb3ZlRnJvbUdyYXBoID0gZnVuY3Rpb24gKCkgeworICBpZiAodGhp
cy52MSAhPSBudWxsKSB0aGlzLnYxLnJlbW92ZUNvbnN0cmFpbnQoLi4uYXJncyh0aGlzKSk7Cisg
IGlmICh0aGlzLnYyICE9IG51bGwpIHRoaXMudjIucmVtb3ZlQ29uc3RyYWludCguLi5hcmdzKHRo
aXMpKTsKKyAgdGhpcy5kaXJlY3Rpb24gPSBEaXJlY3Rpb24uTk9ORTsKK30KKworLyogLS0tICoK
KyAqIFMgYyBhIGwgZSAgIEMgbyBuIHMgdCByIGEgaSBuIHQKKyAqIC0tLSAqLworCisvKioKKyAq
IFJlbGF0ZXMgdHdvIHZhcmlhYmxlcyBieSB0aGUgbGluZWFyIHNjYWxpbmcgcmVsYXRpb25zaGlw
OiAidjIgPQorICogKHYxICogc2NhbGUpICsgb2Zmc2V0Ii4gRWl0aGVyIHYxIG9yIHYyIG1heSBi
ZSBjaGFuZ2VkIHRvIG1haW50YWluCisgKiB0aGlzIHJlbGF0aW9uc2hpcCBidXQgdGhlIHNjYWxl
IGZhY3RvciBhbmQgb2Zmc2V0IGFyZSBjb25zaWRlcmVkCisgKiByZWFkLW9ubHkuCisgKi8KK2Z1
bmN0aW9uIFNjYWxlQ29uc3RyYWludChzcmMsIHNjYWxlLCBvZmZzZXQsIGRlc3QsIHN0cmVuZ3Ro
KSB7CisgIHRoaXMuZGlyZWN0aW9uID0gRGlyZWN0aW9uLk5PTkU7CisgIHRoaXMuc2NhbGUgPSBz
Y2FsZTsKKyAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7CisgIFNjYWxlQ29uc3RyYWludC5zdXBlckNv
bnN0cnVjdG9yLmNhbGwodGhpcywgc3JjLCBkZXN0LCBzdHJlbmd0aCk7Cit9CisKK1NjYWxlQ29u
c3RyYWludC5pbmhlcml0c0Zyb20oLi4uYXJncyhCaW5hcnlDb25zdHJhaW50KSk7CisKKy8qKgor
ICogQWRkcyB0aGlzIGNvbnN0cmFpbnQgdG8gdGhlIGNvbnN0cmFpbnQgZ3JhcGguCisgKi8KK1Nj
YWxlQ29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgU2Nh
bGVDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLmFkZFRvR3JhcGguY2FsbCh0
aGlzKTsKKyAgdGhpcy5zY2FsZS5hZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworICB0aGlz
Lm9mZnNldC5hZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworfQorCitTY2FsZUNvbnN0cmFp
bnQucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgU2NhbGVDb25z
dHJhaW50LnN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaC5jYWxsKHRo
aXMpOworICBpZiAodGhpcy5zY2FsZSAhPSBudWxsKSB0aGlzLnNjYWxlLnJlbW92ZUNvbnN0cmFp
bnQoLi4uYXJncyh0aGlzKSk7CisgIGlmICh0aGlzLm9mZnNldCAhPSBudWxsKSB0aGlzLm9mZnNl
dC5yZW1vdmVDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworfQorCitTY2FsZUNvbnN0cmFpbnQu
cHJvdG90eXBlLm1hcmtJbnB1dHMgPSBmdW5jdGlvbiAobWFyaykgeworICBTY2FsZUNvbnN0cmFp
bnQuc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUubWFya0lucHV0cy5jYWxsKHRoaXMsIG1hcmsp
OworICB0aGlzLnNjYWxlLm1hcmsgPSB0aGlzLm9mZnNldC5tYXJrID0gbWFyazsKK30KKworLyoq
CisgKiBFbmZvcmNlIHRoaXMgY29uc3RyYWludC4gQXNzdW1lIHRoYXQgaXQgaXMgc2F0aXNmaWVk
LgorICovCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7
CisgIGlmICh0aGlzLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb24uRk9SV0FSRCkgeworICAgIHRoaXMu
djIudmFsdWUgPSB0aGlzLnYxLnZhbHVlICogdGhpcy5zY2FsZS52YWx1ZSArIHRoaXMub2Zmc2V0
LnZhbHVlOworICB9IGVsc2UgeworICAgIHRoaXMudjEudmFsdWUgPSAodGhpcy52Mi52YWx1ZSAt
IHRoaXMub2Zmc2V0LnZhbHVlKSAvIHRoaXMuc2NhbGUudmFsdWU7CisgIH0KK30KKworLyoqCisg
KiBDYWxjdWxhdGUgdGhlIHdhbGthYm91dCBzdHJlbmd0aCwgdGhlIHN0YXkgZmxhZywgYW5kLCBp
ZiBpdCBpcworICogJ3N0YXknLCB0aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBvZiB0
aGlzIGNvbnN0cmFpbnQuIEFzc3VtZQorICogdGhpcyBjb25zdHJhaW50IGlzIHNhdGlzZmllZC4K
KyAqLworU2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5yZWNhbGN1bGF0ZSA9IGZ1bmN0aW9uICgp
IHsKKyAgdmFyIGlobiA9IHRoaXMuaW5wdXQoLi4uYXJncygpKSwgb3V0ID0gdGhpcy5vdXRwdXQo
Li4uYXJncygpKTsKKyAgb3V0LndhbGtTdHJlbmd0aCA9IFN0cmVuZ3RoLndlYWtlc3RPZiguLi5h
cmdzKHRoaXMuc3RyZW5ndGgsIGlobi53YWxrU3RyZW5ndGgpKTsKKyAgb3V0LnN0YXkgPSBpaG4u
c3RheSAmJiB0aGlzLnNjYWxlLnN0YXkgJiYgdGhpcy5vZmZzZXQuc3RheTsKKyAgaWYgKG91dC5z
dGF5KSB0aGlzLmV4ZWN1dGUoLi4uYXJncygpKTsKK30KKworLyogLS0tICoKKyAqIEUgcSB1IGEg
bCBpIHQgIHkgICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKworLyoqCisgKiBDb25z
dHJhaW5zIHR3byB2YXJpYWJsZXMgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZS4KKyAqLworZnVuY3Rp
b24gRXF1YWxpdHlDb25zdHJhaW50KHZhcjEsIHZhcjIsIHN0cmVuZ3RoKSB7CisgIEVxdWFsaXR5
Q29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9yLmNhbGwodGhpcywgdmFyMSwgdmFyMiwgc3RyZW5n
dGgpOworfQorCitFcXVhbGl0eUNvbnN0cmFpbnQuaW5oZXJpdHNGcm9tKC4uLmFyZ3MoQmluYXJ5
Q29uc3RyYWludCkpOworCisvKioKKyAqIEVuZm9yY2UgdGhpcyBjb25zdHJhaW50LiBBc3N1bWUg
dGhhdCBpdCBpcyBzYXRpc2ZpZWQuCisgKi8KK0VxdWFsaXR5Q29uc3RyYWludC5wcm90b3R5cGUu
ZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5vdXRwdXQoLi4uYXJncygpKS52YWx1ZSA9
IHRoaXMuaW5wdXQoLi4uYXJncygpKS52YWx1ZTsKK30KKworLyogLS0tICoKKyAqIFYgYSByIGkg
YSBiIGwgZQorICogLS0tICovCisKKy8qKgorICogQSBjb25zdHJhaW5lZCB2YXJpYWJsZS4gSW4g
YWRkaXRpb24gdG8gaXRzIHZhbHVlLCBpdCBtYWludGFpbiB0aGUKKyAqIHN0cnVjdHVyZSBvZiB0
aGUgY29uc3RyYWludCBncmFwaCwgdGhlIGN1cnJlbnQgZGF0YWZsb3cgZ3JhcGgsIGFuZAorICog
dmFyaW91cyBwYXJhbWV0ZXJzIG9mIGludGVyZXN0IHRvIHRoZSBEZWx0YUJsdWUgaW5jcmVtZW50
YWwKKyAqIGNvbnN0cmFpbnQgc29sdmVyLgorICoqLworZnVuY3Rpb24gVmFyaWFibGUobmFtZSwg
aW5pdGlhbFZhbHVlKSB7CisgIHRoaXMudmFsdWUgPSBpbml0aWFsVmFsdWUgfHwgMDsKKyAgdGhp
cy5jb25zdHJhaW50cyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOworICB0aGlz
LmRldGVybWluZWRCeSA9IG51bGw7CisgIHRoaXMubWFyayA9IDA7CisgIHRoaXMud2Fsa1N0cmVu
Z3RoID0gU3RyZW5ndGguV0VBS0VTVDsKKyAgdGhpcy5zdGF5ID0gdHJ1ZTsKKyAgdGhpcy5uYW1l
ID0gbmFtZTsKK30KKworLyoqCisgKiBBZGQgdGhlIGdpdmVuIGNvbnN0cmFpbnQgdG8gdGhlIHNl
dCBvZiBhbGwgY29uc3RyYWludHMgdGhhdCByZWZlcgorICogdGhpcyB2YXJpYWJsZS4KKyAqLwor
VmFyaWFibGUucHJvdG90eXBlLmFkZENvbnN0cmFpbnQgPSBmdW5jdGlvbiAoYykgeworICB0aGlz
LmNvbnN0cmFpbnRzLmFkZCguLi5hcmdzKGMpKTsKK30KKworLyoqCisgKiBSZW1vdmVzIGFsbCB0
cmFjZXMgb2YgYyBmcm9tIHRoaXMgdmFyaWFibGUuCisgKi8KK1ZhcmlhYmxlLnByb3RvdHlwZS5y
ZW1vdmVDb25zdHJhaW50ID0gZnVuY3Rpb24gKGMpIHsKKyAgdGhpcy5jb25zdHJhaW50cy5yZW1v
dmUoLi4uYXJncyhjKSk7CisgIGlmICh0aGlzLmRldGVybWluZWRCeSA9PSBjKSB0aGlzLmRldGVy
bWluZWRCeSA9IG51bGw7Cit9CisKKy8qIC0tLSAqCisgKiBQIGwgYSBuIG4gZSByCisgKiAtLS0g
Ki8KKworLyoqCisgKiBUaGUgRGVsdGFCbHVlIHBsYW5uZXIKKyAqLworZnVuY3Rpb24gUGxhbm5l
cigpIHsKKyAgdGhpcy5jdXJyZW50TWFyayA9IDA7Cit9CisKKy8qKgorICogQXR0ZW1wdCB0byBz
YXRpc2Z5IHRoZSBnaXZlbiBjb25zdHJhaW50IGFuZCwgaWYgc3VjY2Vzc2Z1bCwKKyAqIGluY3Jl
bWVudGFsbHkgdXBkYXRlIHRoZSBkYXRhZmxvdyBncmFwaC4gIERldGFpbHM6IElmIHNhdGlmeWlu
ZworICogdGhlIGNvbnN0cmFpbnQgaXMgc3VjY2Vzc2Z1bCwgaXQgbWF5IG92ZXJyaWRlIGEgd2Vh
a2VyIGNvbnN0cmFpbnQKKyAqIG9uIGl0cyBvdXRwdXQuIFRoZSBhbGdvcml0aG0gYXR0ZW1wdHMg
dG8gcmVzYXRpc2Z5IHRoYXQKKyAqIGNvbnN0cmFpbnQgdXNpbmcgc29tZSBvdGhlciBtZXRob2Qu
IFRoaXMgcHJvY2VzcyBpcyByZXBlYXRlZAorICogdW50aWwgZWl0aGVyIGEpIGl0IHJlYWNoZXMg
YSB2YXJpYWJsZSB0aGF0IHdhcyBub3QgcHJldmlvdXNseQorICogZGV0ZXJtaW5lZCBieSBhbnkg
Y29uc3RyYWludCBvciBiKSBpdCByZWFjaGVzIGEgY29uc3RyYWludCB0aGF0CisgKiBpcyB0b28g
d2VhayB0byBiZSBzYXRpc2ZpZWQgdXNpbmcgYW55IG9mIGl0cyBtZXRob2RzLiBUaGUKKyAqIHZh
cmlhYmxlcyBvZiBjb25zdHJhaW50cyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQgYXJlIG1hcmtl
ZCB3aXRoCisgKiBhIHVuaXF1ZSBtYXJrIHZhbHVlIHNvIHRoYXQgd2Uga25vdyB3aGVyZSB3ZSd2
ZSBiZWVuLiBUaGlzIGFsbG93cworICogdGhlIGFsZ29yaXRobSB0byBhdm9pZCBnZXR0aW5nIGlu
dG8gYW4gaW5maW5pdGUgbG9vcCBldmVuIGlmIHRoZQorICogY29uc3RyYWludCBncmFwaCBoYXMg
YW4gaW5hZHZlcnRlbnQgY3ljbGUuCisgKi8KK1BsYW5uZXIucHJvdG90eXBlLmluY3JlbWVudGFs
QWRkID0gZnVuY3Rpb24gKGMpIHsKKyAgdmFyIG1hcmsgPSB0aGlzLm5ld01hcmsoLi4uYXJncygp
KTsKKyAgdmFyIG92ZXJyaWRkZW4gPSBjLnNhdGlzZnkoLi4uYXJncyhtYXJrKSk7CisgIHdoaWxl
IChvdmVycmlkZGVuICE9IG51bGwpCisgICAgb3ZlcnJpZGRlbiA9IG92ZXJyaWRkZW4uc2F0aXNm
eSguLi5hcmdzKG1hcmspKTsKK30KKworLyoqCisgKiBFbnRyeSBwb2ludCBmb3IgcmV0cmFjdGlu
ZyBhIGNvbnN0cmFpbnQuIFJlbW92ZSB0aGUgZ2l2ZW4KKyAqIGNvbnN0cmFpbnQgYW5kIGluY3Jl
bWVudGFsbHkgdXBkYXRlIHRoZSBkYXRhZmxvdyBncmFwaC4KKyAqIERldGFpbHM6IFJldHJhY3Rp
bmcgdGhlIGdpdmVuIGNvbnN0cmFpbnQgbWF5IGFsbG93IHNvbWUgY3VycmVudGx5CisgKiB1bnNh
dGlzZmlhYmxlIGRvd25zdHJlYW0gY29uc3RyYWludCB0byBiZSBzYXRpc2ZpZWQuIFdlIHRoZXJl
Zm9yZSBjb2xsZWN0CisgKiBhIGxpc3Qgb2YgdW5zYXRpc2ZpZWQgZG93bnN0cmVhbSBjb25zdHJh
aW50cyBhbmQgYXR0ZW1wdCB0bworICogc2F0aXNmeSBlYWNoIG9uZSBpbiB0dXJuLiBUaGlzIGxp
c3QgaXMgdHJhdmVyc2VkIGJ5IGNvbnN0cmFpbnQKKyAqIHN0cmVuZ3RoLCBzdHJvbmdlc3QgZmly
c3QsIGFzIGEgaGV1cmlzdGljIGZvciBhdm9pZGluZworICogdW5uZWNlc3NhcmlseSBhZGRpbmcg
YW5kIHRoZW4gb3ZlcnJpZGluZyB3ZWFrIGNvbnN0cmFpbnRzLgorICogQXNzdW1lOiBjIGlzIHNh
dGlzZmllZC4KKyAqLworUGxhbm5lci5wcm90b3R5cGUuaW5jcmVtZW50YWxSZW1vdmUgPSBmdW5j
dGlvbiAoYykgeworICB2YXIgb3V0ID0gYy5vdXRwdXQoLi4uYXJncygpKTsKKyAgYy5tYXJrVW5z
YXRpc2ZpZWQoLi4uYXJncygpKTsKKyAgYy5yZW1vdmVGcm9tR3JhcGgoLi4uYXJncygpKTsKKyAg
dmFyIHVuc2F0aXNmaWVkID0gdGhpcy5yZW1vdmVQcm9wYWdhdGVGcm9tKC4uLmFyZ3Mob3V0KSk7
CisgIHZhciBzdHJlbmd0aCA9IFN0cmVuZ3RoLlJFUVVJUkVEOworICBkbyB7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB1bnNhdGlzZmllZC5zaXplKC4uLmFyZ3MoKSk7IGkrKykgeworICAgICAg
dmFyIHUgPSB1bnNhdGlzZmllZC5hdCguLi5hcmdzKGkpKTsKKyAgICAgIGlmICh1LnN0cmVuZ3Ro
ID09IHN0cmVuZ3RoKQorICAgICAgICB0aGlzLmluY3JlbWVudGFsQWRkKC4uLmFyZ3ModSkpOwor
ICAgIH0KKyAgICBzdHJlbmd0aCA9IHN0cmVuZ3RoLm5leHRXZWFrZXIoLi4uYXJncygpKTsKKyAg
fSB3aGlsZSAoc3RyZW5ndGggIT0gU3RyZW5ndGguV0VBS0VTVCk7Cit9CisKKy8qKgorICogU2Vs
ZWN0IGEgcHJldmlvdXNseSB1bnVzZWQgbWFyayB2YWx1ZS4KKyAqLworUGxhbm5lci5wcm90b3R5
cGUubmV3TWFyayA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuICsrdGhpcy5jdXJyZW50TWFyazsK
K30KKworLyoqCisgKiBFeHRyYWN0IGEgcGxhbiBmb3IgcmVzYXRpc2ZhY3Rpb24gc3RhcnRpbmcg
ZnJvbSB0aGUgZ2l2ZW4gc291cmNlCisgKiBjb25zdHJhaW50cywgdXN1YWxseSBhIHNldCBvZiBp
bnB1dCBjb25zdHJhaW50cy4gVGhpcyBtZXRob2QKKyAqIGFzc3VtZXMgdGhhdCBzdGF5IG9wdGlt
aXphdGlvbiBpcyBkZXNpcmVkOyB0aGUgcGxhbiB3aWxsIGNvbnRhaW4KKyAqIG9ubHkgY29uc3Ry
YWludHMgd2hvc2Ugb3V0cHV0IHZhcmlhYmxlcyBhcmUgbm90IHN0YXkuIENvbnN0cmFpbnRzCisg
KiB0aGF0IGRvIG5vIGNvbXB1dGF0aW9uLCBzdWNoIGFzIHN0YXkgYW5kIGVkaXQgY29uc3RyYWlu
dHMsIGFyZQorICogbm90IGluY2x1ZGVkIGluIHRoZSBwbGFuLgorICogRGV0YWlsczogVGhlIG91
dHB1dHMgb2YgYSBjb25zdHJhaW50IGFyZSBtYXJrZWQgd2hlbiBpdCBpcyBhZGRlZAorICogdG8g
dGhlIHBsYW4gdW5kZXIgY29uc3RydWN0aW9uLiBBIGNvbnN0cmFpbnQgbWF5IGJlIGFwcGVuZGVk
IHRvCisgKiB0aGUgcGxhbiB3aGVuIGFsbCBpdHMgaW5wdXQgdmFyaWFibGVzIGFyZSBrbm93bi4g
QSB2YXJpYWJsZSBpcworICoga25vd24gaWYgZWl0aGVyIGEpIHRoZSB2YXJpYWJsZSBpcyBtYXJr
ZWQgKGluZGljYXRpbmcgdGhhdCBoYXMKKyAqIGJlZW4gY29tcHV0ZWQgYnkgYSBjb25zdHJhaW50
IGFwcGVhcmluZyBlYXJsaWVyIGluIHRoZSBwbGFuKSwgYikKKyAqIHRoZSB2YXJpYWJsZSBpcyAn
c3RheScgKGkuZS4gaXQgaXMgYSBjb25zdGFudCBhdCBwbGFuIGV4ZWN1dGlvbgorICogdGltZSks
IG9yIGMpIHRoZSB2YXJpYWJsZSBpcyBub3QgZGV0ZXJtaW5lZCBieSBhbnkKKyAqIGNvbnN0cmFp
bnQuIFRoZSBsYXN0IHByb3Zpc2lvbiBpcyBmb3IgcGFzdCBzdGF0ZXMgb2YgaGlzdG9yeQorICog
dmFyaWFibGVzLCB3aGljaCBhcmUgbm90IHN0YXkgYnV0IHdoaWNoIGFyZSBhbHNvIG5vdCBjb21w
dXRlZCBieQorICogYW55IGNvbnN0cmFpbnQuCisgKiBBc3N1bWU6IHNvdXJjZXMgYXJlIGFsbCBz
YXRpc2ZpZWQuCisgKi8KK1BsYW5uZXIucHJvdG90eXBlLm1ha2VQbGFuID0gZnVuY3Rpb24gKHNv
dXJjZXMpIHsKKyAgdmFyIG1hcmsgPSB0aGlzLm5ld01hcmsoLi4uYXJncygpKTsKKyAgdmFyIHBs
YW4gPSBuZXcgUGxhbiguLi5hcmdzKCkpOworICB2YXIgdG9kbyA9IHNvdXJjZXM7CisgIHdoaWxl
ICh0b2RvLnNpemUoLi4uYXJncygpKSA+IDApIHsKKyAgICB2YXIgYyA9IHRvZG8ucmVtb3ZlRmly
c3QoLi4uYXJncygpKTsKKyAgICBpZiAoYy5vdXRwdXQoLi4uYXJncygpKS5tYXJrICE9IG1hcmsg
JiYgYy5pbnB1dHNLbm93biguLi5hcmdzKG1hcmspKSkgeworICAgICAgcGxhbi5hZGRDb25zdHJh
aW50KC4uLmFyZ3MoYykpOworICAgICAgYy5vdXRwdXQoLi4uYXJncygpKS5tYXJrID0gbWFyazsK
KyAgICAgIHRoaXMuYWRkQ29uc3RyYWludHNDb25zdW1pbmdUbyguLi5hcmdzKGMub3V0cHV0KC4u
LmFyZ3MoKSksIHRvZG8pKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHBsYW47Cit9CisKKy8qKgor
ICogRXh0cmFjdCBhIHBsYW4gZm9yIHJlc2F0aXNmeWluZyBzdGFydGluZyBmcm9tIHRoZSBvdXRw
dXQgb2YgdGhlCisgKiBnaXZlbiBjb25zdHJhaW50cywgdXN1YWxseSBhIHNldCBvZiBpbnB1dCBj
b25zdHJhaW50cy4KKyAqLworUGxhbm5lci5wcm90b3R5cGUuZXh0cmFjdFBsYW5Gcm9tQ29uc3Ry
YWludHMgPSBmdW5jdGlvbiAoY29uc3RyYWludHMpIHsKKyAgdmFyIHNvdXJjZXMgPSBuZXcgT3Jk
ZXJlZENvbGxlY3Rpb24oLi4uYXJncygpKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25zdHJh
aW50cy5zaXplKC4uLmFyZ3MoKSk7IGkrKykgeworICAgIHZhciBjID0gY29uc3RyYWludHMuYXQo
Li4uYXJncyhpKSk7CisgICAgaWYgKGMuaXNJbnB1dCguLi5hcmdzKCkpICYmIGMuaXNTYXRpc2Zp
ZWQoLi4uYXJncygpKSkKKyAgICAgIC8vIG5vdCBpbiBwbGFuIGFscmVhZHkgYW5kIGVsaWdpYmxl
IGZvciBpbmNsdXNpb24KKyAgICAgIHNvdXJjZXMuYWRkKC4uLmFyZ3MoYykpOworICB9CisgIHJl
dHVybiB0aGlzLm1ha2VQbGFuKC4uLmFyZ3Moc291cmNlcykpOworfQorCisvKioKKyAqIFJlY29t
cHV0ZSB0aGUgd2Fsa2Fib3V0IHN0cmVuZ3RocyBhbmQgc3RheSBmbGFncyBvZiBhbGwgdmFyaWFi
bGVzCisgKiBkb3duc3RyZWFtIG9mIHRoZSBnaXZlbiBjb25zdHJhaW50IGFuZCByZWNvbXB1dGUg
dGhlIGFjdHVhbAorICogdmFsdWVzIG9mIGFsbCB2YXJpYWJsZXMgd2hvc2Ugc3RheSBmbGFnIGlz
IHRydWUuIElmIGEgY3ljbGUgaXMKKyAqIGRldGVjdGVkLCByZW1vdmUgdGhlIGdpdmVuIGNvbnN0
cmFpbnQgYW5kIGFuc3dlcgorICogZmFsc2UuIE90aGVyd2lzZSwgYW5zd2VyIHRydWUuCisgKiBE
ZXRhaWxzOiBDeWNsZXMgYXJlIGRldGVjdGVkIHdoZW4gYSBtYXJrZWQgdmFyaWFibGUgaXMKKyAq
IGVuY291bnRlcmVkIGRvd25zdHJlYW0gb2YgdGhlIGdpdmVuIGNvbnN0cmFpbnQuIFRoZSBzZW5k
ZXIgaXMKKyAqIGFzc3VtZWQgdG8gaGF2ZSBtYXJrZWQgdGhlIGlucHV0cyBvZiB0aGUgZ2l2ZW4g
Y29uc3RyYWludCB3aXRoCisgKiB0aGUgZ2l2ZW4gbWFyay4gVGh1cywgZW5jb3VudGVyaW5nIGEg
bWFya2VkIG5vZGUgZG93bnN0cmVhbSBvZgorICogdGhlIG91dHB1dCBjb25zdHJhaW50IG1lYW5z
IHRoYXQgdGhlcmUgaXMgYSBwYXRoIGZyb20gdGhlCisgKiBjb25zdHJhaW50J3Mgb3V0cHV0IHRv
IG9uZSBvZiBpdHMgaW5wdXRzLgorICovCitQbGFubmVyLnByb3RvdHlwZS5hZGRQcm9wYWdhdGUg
PSBmdW5jdGlvbiAoYywgbWFyaykgeworICB2YXIgdG9kbyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlv
biguLi5hcmdzKCkpOworICB0b2RvLmFkZCguLi5hcmdzKGMpKTsKKyAgd2hpbGUgKHRvZG8uc2l6
ZSguLi5hcmdzKCkpID4gMCkgeworICAgIHZhciBkID0gdG9kby5yZW1vdmVGaXJzdCguLi5hcmdz
KCkpOworICAgIGlmIChkLm91dHB1dCguLi5hcmdzKCkpLm1hcmsgPT0gbWFyaykgeworICAgICAg
dGhpcy5pbmNyZW1lbnRhbFJlbW92ZSguLi5hcmdzKGMpKTsKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgZC5yZWNhbGN1bGF0ZSguLi5hcmdzKCkpOworICAgIHRoaXMuYWRkQ29uc3Ry
YWludHNDb25zdW1pbmdUbyguLi5hcmdzKGQub3V0cHV0KC4uLmFyZ3MoKSksIHRvZG8pKTsKKyAg
fQorICByZXR1cm4gdHJ1ZTsKK30KKworCisvKioKKyAqIFVwZGF0ZSB0aGUgd2Fsa2Fib3V0IHN0
cmVuZ3RocyBhbmQgc3RheSBmbGFncyBvZiBhbGwgdmFyaWFibGVzCisgKiBkb3duc3RyZWFtIG9m
IHRoZSBnaXZlbiBjb25zdHJhaW50LiBBbnN3ZXIgYSBjb2xsZWN0aW9uIG9mCisgKiB1bnNhdGlz
ZmllZCBjb25zdHJhaW50cyBzb3J0ZWQgaW4gb3JkZXIgb2YgZGVjcmVhc2luZyBzdHJlbmd0aC4K
KyAqLworUGxhbm5lci5wcm90b3R5cGUucmVtb3ZlUHJvcGFnYXRlRnJvbSA9IGZ1bmN0aW9uIChv
dXQpIHsKKyAgb3V0LmRldGVybWluZWRCeSA9IG51bGw7CisgIG91dC53YWxrU3RyZW5ndGggPSBT
dHJlbmd0aC5XRUFLRVNUOworICBvdXQuc3RheSA9IHRydWU7CisgIHZhciB1bnNhdGlzZmllZCA9
IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOworICB2YXIgdG9kbyA9IG5ldyBPcmRl
cmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOworICB0b2RvLmFkZCguLi5hcmdzKG91dCkpOworICB3
aGlsZSAodG9kby5zaXplKC4uLmFyZ3MoKSkgPiAwKSB7CisgICAgdmFyIHYgPSB0b2RvLnJlbW92
ZUZpcnN0KC4uLmFyZ3MoKSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2LmNvbnN0cmFpbnRz
LnNpemUoLi4uYXJncygpKTsgaSsrKSB7CisgICAgICB2YXIgYyA9IHYuY29uc3RyYWludHMuYXQo
Li4uYXJncyhpKSk7CisgICAgICBpZiAoIWMuaXNTYXRpc2ZpZWQoLi4uYXJncygpKSkKKyAgICAg
ICAgdW5zYXRpc2ZpZWQuYWRkKC4uLmFyZ3MoYykpOworICAgIH0KKyAgICB2YXIgZGV0ZXJtaW5p
bmcgPSB2LmRldGVybWluZWRCeTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHYuY29uc3RyYWlu
dHMuc2l6ZSguLi5hcmdzKCkpOyBpKyspIHsKKyAgICAgIHZhciBuZXh0ID0gdi5jb25zdHJhaW50
cy5hdCguLi5hcmdzKGkpKTsKKyAgICAgIGlmIChuZXh0ICE9IGRldGVybWluaW5nICYmIG5leHQu
aXNTYXRpc2ZpZWQoLi4uYXJncygpKSkgeworICAgICAgICBuZXh0LnJlY2FsY3VsYXRlKC4uLmFy
Z3MoKSk7CisgICAgICAgIHRvZG8uYWRkKC4uLmFyZ3MobmV4dC5vdXRwdXQoLi4uYXJncygpKSkp
OworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gdW5zYXRpc2ZpZWQ7Cit9CisKK1BsYW5u
ZXIucHJvdG90eXBlLmFkZENvbnN0cmFpbnRzQ29uc3VtaW5nVG8gPSBmdW5jdGlvbiAodiwgY29s
bCkgeworICB2YXIgZGV0ZXJtaW5pbmcgPSB2LmRldGVybWluZWRCeTsKKyAgdmFyIGNjID0gdi5j
b25zdHJhaW50czsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYy5zaXplKC4uLmFyZ3MoKSk7IGkr
KykgeworICAgIHZhciBjID0gY2MuYXQoLi4uYXJncyhpKSk7CisgICAgaWYgKGMgIT0gZGV0ZXJt
aW5pbmcgJiYgYy5pc1NhdGlzZmllZCguLi5hcmdzKCkpKQorICAgICAgY29sbC5hZGQoLi4uYXJn
cyhjKSk7CisgIH0KK30KKworLyogLS0tICoKKyAqIFAgbCBhIG4KKyAqIC0tLSAqLworCisvKioK
KyAqIEEgUGxhbiBpcyBhbiBvcmRlcmVkIGxpc3Qgb2YgY29uc3RyYWludHMgdG8gYmUgZXhlY3V0
ZWQgaW4gc2VxdWVuY2UKKyAqIHRvIHJlc2F0aXNmeSBhbGwgY3VycmVudGx5IHNhdGlzZmlhYmxl
IGNvbnN0cmFpbnRzIGluIHRoZSBmYWNlIG9mCisgKiBvbmUgb3IgbW9yZSBjaGFuZ2luZyBpbnB1
dHMuCisgKi8KK2Z1bmN0aW9uIFBsYW4oKSB7CisgIHRoaXMudiA9IG5ldyBPcmRlcmVkQ29sbGVj
dGlvbiguLi5hcmdzKCkpOworfQorCitQbGFuLnByb3RvdHlwZS5hZGRDb25zdHJhaW50ID0gZnVu
Y3Rpb24gKGMpIHsKKyAgdGhpcy52LmFkZCguLi5hcmdzKGMpKTsKK30KKworUGxhbi5wcm90b3R5
cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMudi5zaXplKC4uLmFyZ3MoKSk7
Cit9CisKK1BsYW4ucHJvdG90eXBlLmNvbnN0cmFpbnRBdCA9IGZ1bmN0aW9uIChpbmRleCkgewor
ICByZXR1cm4gdGhpcy52LmF0KC4uLmFyZ3MoaW5kZXgpKTsKK30KKworUGxhbi5wcm90b3R5cGUu
ZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemUo
Li4uYXJncygpKTsgaSsrKSB7CisgICAgdmFyIGMgPSB0aGlzLmNvbnN0cmFpbnRBdCguLi5hcmdz
KGkpKTsKKyAgICBjLmV4ZWN1dGUoLi4uYXJncygpKTsKKyAgfQorfQorCisvKiAtLS0gKgorICog
TSBhIGkgbgorICogLS0tICovCisKKy8qKgorICogVGhpcyBpcyB0aGUgc3RhbmRhcmQgRGVsdGFC
bHVlIGJlbmNobWFyay4gQSBsb25nIGNoYWluIG9mIGVxdWFsaXR5CisgKiBjb25zdHJhaW50cyBp
cyBjb25zdHJ1Y3RlZCB3aXRoIGEgc3RheSBjb25zdHJhaW50IG9uIG9uZSBlbmQuIEFuCisgKiBl
ZGl0IGNvbnN0cmFpbnQgaXMgdGhlbiBhZGRlZCB0byB0aGUgb3Bwb3NpdGUgZW5kIGFuZCB0aGUg
dGltZSBpcworICogbWVhc3VyZWQgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgdGhpcyBjb25zdHJh
aW50LCBhbmQgZXh0cmFjdGluZworICogYW5kIGV4ZWN1dGluZyBhIGNvbnN0cmFpbnQgc2F0aXNm
YWN0aW9uIHBsYW4uIFRoZXJlIGFyZSB0d28gY2FzZXMuCisgKiBJbiBjYXNlIDEsIHRoZSBhZGRl
ZCBjb25zdHJhaW50IGlzIHN0cm9uZ2VyIHRoYW4gdGhlIHN0YXkKKyAqIGNvbnN0cmFpbnQgYW5k
IHZhbHVlcyBtdXN0IHByb3BhZ2F0ZSBkb3duIHRoZSBlbnRpcmUgbGVuZ3RoIG9mIHRoZQorICog
Y2hhaW4uIEluIGNhc2UgMiwgdGhlIGFkZGVkIGNvbnN0cmFpbnQgaXMgd2Vha2VyIHRoYW4gdGhl
IHN0YXkKKyAqIGNvbnN0cmFpbnQgc28gaXQgY2Fubm90IGJlIGFjY29tb2RhdGVkLiBUaGUgY29z
dCBpbiB0aGlzIGNhc2UgaXMsCisgKiBvZiBjb3Vyc2UsIHZlcnkgbG93LiBUeXBpY2FsIHNpdHVh
dGlvbnMgbGllIHNvbWV3aGVyZSBiZXR3ZWVuIHRoZXNlCisgKiB0d28gZXh0cmVtZXMuCisgKi8K
K2Z1bmN0aW9uIGNoYWluVGVzdChuKSB7CisgIHBsYW5uZXIgPSBuZXcgUGxhbm5lciguLi5hcmdz
KCkpOworICB2YXIgcHJldiA9IG51bGwsIGZpcnN0ID0gbnVsbCwgbGFzdCA9IG51bGw7CisKKyAg
Ly8gQnVpbGQgY2hhaW4gb2YgbiBlcXVhbGl0eSBjb25zdHJhaW50cworICBmb3IgKHZhciBpID0g
MDsgaSA8PSBuOyBpKyspIHsKKyAgICB2YXIgbmFtZSA9ICJ2IiArIGk7CisgICAgdmFyIHYgPSBu
ZXcgVmFyaWFibGUoLi4uYXJncyhuYW1lKSk7CisgICAgaWYgKHByZXYgIT0gbnVsbCkKKyAgICAg
IG5ldyBFcXVhbGl0eUNvbnN0cmFpbnQoLi4uYXJncyhwcmV2LCB2LCBTdHJlbmd0aC5SRVFVSVJF
RCkpOworICAgIGlmIChpID09IDApIGZpcnN0ID0gdjsKKyAgICBpZiAoaSA9PSBuKSBsYXN0ID0g
djsKKyAgICBwcmV2ID0gdjsKKyAgfQorCisgIG5ldyBTdGF5Q29uc3RyYWludCguLi5hcmdzKGxh
c3QsIFN0cmVuZ3RoLlNUUk9OR19ERUZBVUxUKSk7CisgIHZhciBlZGl0ID0gbmV3IEVkaXRDb25z
dHJhaW50KC4uLmFyZ3MoZmlyc3QsIFN0cmVuZ3RoLlBSRUZFUlJFRCkpOworICB2YXIgZWRpdHMg
PSBuZXcgT3JkZXJlZENvbGxlY3Rpb24oLi4uYXJncygpKTsKKyAgZWRpdHMuYWRkKC4uLmFyZ3Mo
ZWRpdCkpOworICB2YXIgcGxhbiA9IHBsYW5uZXIuZXh0cmFjdFBsYW5Gcm9tQ29uc3RyYWludHMo
Li4uYXJncyhlZGl0cykpOworICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAg
Zmlyc3QudmFsdWUgPSBpOworICAgIHBsYW4uZXhlY3V0ZSguLi5hcmdzKCkpOworICAgIGlmIChs
YXN0LnZhbHVlICE9IGkpCisgICAgICBhbGVydCguLi5hcmdzKCJDaGFpbiB0ZXN0IGZhaWxlZC4i
KSk7CisgIH0KK30KKworLyoqCisgKiBUaGlzIHRlc3QgY29uc3RydWN0cyBhIHR3byBzZXRzIG9m
IHZhcmlhYmxlcyByZWxhdGVkIHRvIGVhY2gKKyAqIG90aGVyIGJ5IGEgc2ltcGxlIGxpbmVhciB0
cmFuc2Zvcm1hdGlvbiAoc2NhbGUgYW5kIG9mZnNldCkuIFRoZQorICogdGltZSBpcyBtZWFzdXJl
ZCB0byBjaGFuZ2UgYSB2YXJpYWJsZSBvbiBlaXRoZXIgc2lkZSBvZiB0aGUKKyAqIG1hcHBpbmcg
YW5kIHRvIGNoYW5nZSB0aGUgc2NhbGUgYW5kIG9mZnNldCBmYWN0b3JzLgorICovCitmdW5jdGlv
biBwcm9qZWN0aW9uVGVzdChuKSB7CisgIHBsYW5uZXIgPSBuZXcgUGxhbm5lciguLi5hcmdzKCkp
OworICB2YXIgc2NhbGUgPSBuZXcgVmFyaWFibGUoLi4uYXJncygic2NhbGUiLCAxMCkpOworICB2
YXIgb2Zmc2V0ID0gbmV3IFZhcmlhYmxlKC4uLmFyZ3MoIm9mZnNldCIsIDEwMDApKTsKKyAgdmFy
IHNyYyA9IG51bGwsIGRzdCA9IG51bGw7CisKKyAgdmFyIGRlc3RzID0gbmV3IE9yZGVyZWRDb2xs
ZWN0aW9uKC4uLmFyZ3MoKSk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAg
c3JjID0gbmV3IFZhcmlhYmxlKC4uLmFyZ3MoInNyYyIgKyBpLCBpKSk7CisgICAgZHN0ID0gbmV3
IFZhcmlhYmxlKC4uLmFyZ3MoImRzdCIgKyBpLCBpKSk7CisgICAgZGVzdHMuYWRkKC4uLmFyZ3Mo
ZHN0KSk7CisgICAgbmV3IFN0YXlDb25zdHJhaW50KC4uLmFyZ3Moc3JjLCBTdHJlbmd0aC5OT1JN
QUwpKTsKKyAgICBuZXcgU2NhbGVDb25zdHJhaW50KC4uLmFyZ3Moc3JjLCBzY2FsZSwgb2Zmc2V0
LCBkc3QsIFN0cmVuZ3RoLlJFUVVJUkVEKSk7CisgIH0KKworICBjaGFuZ2UoLi4uYXJncyhzcmMs
IDE3KSk7CisgIGlmIChkc3QudmFsdWUgIT0gMTE3MCkgYWxlcnQoLi4uYXJncygiUHJvamVjdGlv
biAxIGZhaWxlZCIpKTsKKyAgY2hhbmdlKC4uLmFyZ3MoZHN0LCAxMDUwKSk7CisgIGlmIChzcmMu
dmFsdWUgIT0gNSkgYWxlcnQoLi4uYXJncygiUHJvamVjdGlvbiAyIGZhaWxlZCIpKTsKKyAgY2hh
bmdlKC4uLmFyZ3Moc2NhbGUsIDUpKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBuIC0gMTsgaSsr
KSB7CisgICAgaWYgKGRlc3RzLmF0KC4uLmFyZ3MoaSkpLnZhbHVlICE9IGkgKiA1ICsgMTAwMCkK
KyAgICAgIGFsZXJ0KC4uLmFyZ3MoIlByb2plY3Rpb24gMyBmYWlsZWQiKSk7CisgIH0KKyAgY2hh
bmdlKC4uLmFyZ3Mob2Zmc2V0LCAyMDAwKSk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbiAtIDE7
IGkrKykgeworICAgIGlmIChkZXN0cy5hdCguLi5hcmdzKGkpKS52YWx1ZSAhPSBpICogNSArIDIw
MDApCisgICAgICBhbGVydCguLi5hcmdzKCJQcm9qZWN0aW9uIDQgZmFpbGVkIikpOworICB9Cit9
CisKK2Z1bmN0aW9uIGNoYW5nZSh2LCBuZXdWYWx1ZSkgeworICB2YXIgZWRpdCA9IG5ldyBFZGl0
Q29uc3RyYWludCguLi5hcmdzKHYsIFN0cmVuZ3RoLlBSRUZFUlJFRCkpOworICB2YXIgZWRpdHMg
PSBuZXcgT3JkZXJlZENvbGxlY3Rpb24oLi4uYXJncygpKTsKKyAgZWRpdHMuYWRkKC4uLmFyZ3Mo
ZWRpdCkpOworICB2YXIgcGxhbiA9IHBsYW5uZXIuZXh0cmFjdFBsYW5Gcm9tQ29uc3RyYWludHMo
Li4uYXJncyhlZGl0cykpOworICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICB2
LnZhbHVlID0gbmV3VmFsdWU7CisgICAgcGxhbi5leGVjdXRlKC4uLmFyZ3MoKSk7CisgIH0KKyAg
ZWRpdC5kZXN0cm95Q29uc3RyYWludCguLi5hcmdzKCkpOworfQorCisvLyBHbG9iYWwgdmFyaWFi
bGUgaG9sZGluZyB0aGUgY3VycmVudCBwbGFubmVyLgordmFyIHBsYW5uZXIgPSBudWxsOworCitm
dW5jdGlvbiBkZWx0YUJsdWUoKSB7CisgIGNoYWluVGVzdCguLi5hcmdzKDEwMCkpOworICBwcm9q
ZWN0aW9uVGVzdCguLi5hcmdzKDEwMCkpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDE1NTsg
KytpKQorICAgIGRlbHRhQmx1ZSguLi5hcmdzKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246722</attachid>
            <date>2015-02-16 20:49:09 -0800</date>
            <delta_ts>2015-02-16 21:15:51 -0800</delta_ts>
            <desc>towards 32-bit support</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>285016</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwMjA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3MSBA
QAorMjAxNS0wMi0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgcmVhbGx5IHN1cHBvcnQgdmFyYXJncworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgY29tcHJlaGVuc2l2
ZSB2YXJhcmcgY2FsbCBzdXBwb3J0IHRvIHRoZSBERkcgYW5kIEZUTCBjb21waWxlcnMuIFByZXZp
b3VzbHksIGlmIGEKKyAgICAgICAgZnVuY3Rpb24gaGFkIGEgdmFyYXJncyBjYWxsLCB0aGVuIGl0
IGNvdWxkIG9ubHkgYmUgY29tcGlsZWQgaWYgdGhhdCB2YXJhcmdzIGNhbGwgd2FzIGp1c3QKKyAg
ICAgICAgZm9yd2FyZGluZyBhcmd1bWVudHMgYW5kIHdlIHdlcmUgaW5saW5pbmcgdGhlIGZ1bmN0
aW9uIHJhdGhlciB0aGFuIGNvbXBpbGluZyBpdCBkaXJlY3RseS4gQWxzbywKKyAgICAgICAgb25s
eSB2YXJhcmdzIGNhbGxzIHdlcmUgZGVhbHQgd2l0aDsgdmFyYXJncyBjb25zdHJ1Y3RzIHdlcmUg
bm90LgorICAgICAgICAKKyAgICAgICAgVGhpcyBsaWZ0cyBhbGwgb2YgdGhvc2UgcmVzdHJpY3Rp
b25zLiBFdmVyeSB2YXJhcmdzIGNhbGwgb3IgY29uc3RydWN0IGNhbiBub3cgYmUgY29tcGlsZWQg
YnkgYm90aAorICAgICAgICB0aGUgREZHIGFuZCB0aGUgRlRMLiBUaG9zZSBjYWxscyBjYW4gYWxz
byBiZSBpbmxpbmVkLCB0b28gLSBwcm92aWRlZCB0aGF0IHByb2ZpbGluZyBnaXZlcyB1cyBhCisg
ICAgICAgIHNlbnNpYmxlIGJvdW5kIG9uIGFyZ3VtZW50cyBsaXN0IGxlbmd0aC4gV2hlbiB3ZSBp
bmxpbmUgYSB2YXJhcmdzIGNhbGwsIHRoZSBhY3Qgb2YgbG9hZGluZyB0aGUKKyAgICAgICAgdmFy
YXJncyBpcyBub3cgbWFkZSBleHBsaWNpdCBpbiBJUi4gSSBiZWxpZXZlIHRoYXQgd2UgaGF2ZSBl
bm91Z2ggSVIgbWFjaGluZXJ5IGluIHBsYWNlIHRoYXQgd2UKKyAgICAgICAgd291bGQgYmUgYWJs
ZSB0byBkbyB0aGUgYXJndW1lbnRzIGZvcndhcmRpbmcgb3B0aW1pemF0aW9uIGFzIGFuIElSIHRy
YW5zZm9ybWF0aW9uLiBUaGlzIHBhdGNoCisgICAgICAgIGRvZXNuJ3QgaW1wbGVtZW50IHRoYXQg
eWV0LCBhbmQga2VlcHMgdGhlIG9sZCBieXRlY29kZS1iYXNlZCB2YXJhcmdzIGFyZ3VtZW50IGZv
cndhcmRpbmcKKyAgICAgICAgb3B0aW1pemF0aW9uIGZvciBub3cuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnJzaGlmdFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjp1cnNoaWZ0UHRyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp1cnNoaWZ0NjQpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6dXJzaGlmdDY0KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6c2hycV9pOHIpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OkNhbGxMaW5rSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMu
Y3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rU3RhdHVzOjpzZXRQcm92ZW5Db25zdGFudENhbGxlZSk6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rU3RhdHVzOjpkdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6bWF4TnVtQXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OnNldElzUHJvdmVkKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlND
OjpJbmxpbmVDYWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKToKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3IpOgorICAgICAgICAoSlNDOjpJbmxpbmVD
YWxsRnJhbWU6OmlzVmFyYXJncyk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6aXNO
b3JtYWxDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9FeGl0S2luZC5jcHA6Cisg
ICAgICAgIChKU0M6OmV4aXRLaW5kVG9TdHJpbmcpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4aXRL
aW5kLmg6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHA6CisgICAgICAgIChK
U0M6OlZhbHVlUmVjb3Zlcnk6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICog
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Zmx1c2gpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZU1pbk1heCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpyZW1vdmVMYXN0Tm9kZUZyb21HcmFwaCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnVuZG9GdW5jdGlvbkNoZWNrcyk6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fw
YWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAg
IChKU0M6OkRGRzo6ZnVuY3Rpb25DYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAoSlNDOjpERkc6
Om1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5o
OgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21t
b24uY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZH
Q29tbW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lKToKKyAgICAgICAgKEpTQzo6
REZHOjpsZWFzdFVwcGVyQm91bmQpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzTGl2ZUluQnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZVByb2ZpbGVGb3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToK
KyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFs
dWVQcm9maWxlRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om1heUV4
aXQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aGFzQ2FsbFZhcmFyZ3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjYWxsVmFyYXJn
c0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0xvYWRWYXJhcmdzRGF0YSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bG9hZFZhcmFyZ3NEYXRhKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxh
dG9yOjpleGVjdXRlTm9kZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
Lmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmR1bXBB
bmRWZXJpZnlHcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFk
SW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVhZFRvcCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlVG9w
KToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKiBk
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjppc0ZsdXNoZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0
YWNrTGF5b3V0UGhhc2U6OmFzc2lnbik6CisgICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6
OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlQ1BTKToKKyAgICAgICAgKiBmdGwvRlRMQWJicmV2
aWF0aW9ucy5oOgorICAgICAgICAoSlNDOjpGVEw6OmZ1bmN0aW9uVHlwZSk6CisgICAgICAgIChK
U0M6OkZUTDo6YnVpbGRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGls
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAgICAg
ICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpzaXpl
T2ZDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZDYWxsVmFyYXJncyk6CisgICAgICAg
IChKU0M6OkZUTDo6c2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZJbik6
CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mSUNGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OnNp
emVPZkNoZWNrSW4pOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExJbmxpbmVDYWNoZVNpemUu
aDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0
bC9GVExKU0NhbGwuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbDo6SlNDYWxsKToKKyAg
ICAgICAgKiBmdGwvRlRMSlNDYWxsQmFzZS5jcHA6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbEJh
c2UuaDoKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsVmFyYXJncy5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpGVEw6OkpTQ2FsbFZhcmFyZ3M6OkpTQ2FsbFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpGVEw6OkpTQ2FsbFZhcmFyZ3M6Om51bVNwaWxsU2xvdHNOZWVkZWQpOgorICAgICAgICAoSlND
OjpGVEw6OkpTQ2FsbFZhcmFyZ3M6OmVtaXQpOgorICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbFZh
cmFyZ3M6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGxWYXJhcmdzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbFZhcmFyZ3M6Om5vZGUpOgorICAgICAgICAoSlNDOjpG
VEw6OkpTQ2FsbFZhcmFyZ3M6OnN0YWNrbWFwSUQpOgorICAgICAgICAoSlNDOjpGVEw6OkpTQ2Fs
bFZhcmFyZ3M6Om9wZXJhdG9yPCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRNeUFyZ3VtZW50c0xlbmd0aCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0
VmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVMb2Fk
VmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVJbik6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmVtaXRTdG9yZUJhcnJpZXIpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp2bUNhbGwpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjp2bUNhbGxOb0V4Y2VwdGlvbnMpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjYWxsQ2hlY2spOgorICAgICAgICAqIGZ0bC9GVExPdXRw
dXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNhbGwpOgorICAgICAgICAqIGZ0bC9G
VExTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAg
KiBmdGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6
CisgICAgICAgIChKU0M6OnNpemVPZlZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpzaXplRnJhbWVG
b3JWYXJhcmdzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAg
ICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrVmlz
aXRvcjo6cmVhZElubGluZWRGcmFtZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5j
cHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2Fs
bGVlRnJhbWVTbG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVBcmd1
bWVudFNsb3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lVGFn
U2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVQYXlsb2Fk
U2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlQXJndW1lbnRUYWdT
bG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFBheWxv
YWRTbG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZUNhbGxl
ckZyYW1lKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BS
KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkNDYWxsSGVs
cGVyczo6c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAgICAgKiBqaXQvR1BSSW5m
by5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZSk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIGppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHA6CisgICAgICAgIChKU0M6
OmVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKToKKyAgICAgICAgKiBqaXQvU2V0dXBWYXJh
cmdzRnJhbWUuaDoKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoSlND
OjpBcmd1bWVudHM6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6cmVnaXN0ZXJB
cnJheVNpemVJbkJ5dGVzKToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNz
L2NvbnN0cnVjdC12YXJhcmdzLWlubGluZS1zbWFsbGVyLUZvby5qczogQWRkZWQuCisgICAgICAg
IChGb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGNoZWNrRXF1YWwpOgorICAgICAgICAo
dGVzdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLWlubGluZS5q
czogQWRkZWQuCisgICAgICAgIChGb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGNoZWNr
RXF1YWwpOgorICAgICAgICAodGVzdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2NvbnN0cnVj
dC12YXJhcmdzLW5vLWlubGluZS5qczogQWRkZWQuCisgICAgICAgIChGb28pOgorICAgICAgICAo
YmFyKToKKyAgICAgICAgKGNoZWNrRXF1YWwpOgorICAgICAgICAodGVzdCk6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL2dldC1hcmd1bWVudC1ieS12YWwtaW4taW5saW5lZC12YXJhcmdzLWNhbGwt
b3V0LW9mLWJvdW5kcy5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToK
KyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZ2V0LWFyZ3VtZW50LWJ5LXZhbC1zYWZlLWluLWlubGlu
ZWQtdmFyYXJncy1jYWxsLW91dC1vZi1ib3VuZHMuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToK
KyAgICAgICAgKGJhcik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2dldC1teS1hcmd1bWVudC1i
eS12YWwtY3JlYXRlcy1hcmd1bWVudHMuanM6IEFkZGVkLgorICAgICAgICAoYmxhaCk6CisgICAg
ICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGNoZWNrRXF1YWwpOgorICAgICAg
ICAodGVzdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGlu
ZWQtY2FsbC1leGl0LWluLWZvby5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAo
YmFyKToKKyAgICAgICAgKGNoZWNrRXF1YWwpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9sb2Fk
LXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtaW5saW5lZC5qczogQWRkZWQuCisgICAgICAgIChm
b28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGJheik6CisgICAgICAgIChjaGVja0VxdWFs
KToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3Mt
dGhlbi1pbmxpbmVkLWNhbGwuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJh
cik6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAgICAgICAgKHRlc3QpOgorCiAyMDE1LTAyLTE1
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGV4cGVyaW1lbnRh
bCA8YXR0YWNobWVudD4gZWxlbWVudCBzdXBwb3J0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw2ICs4NDQsNyBAQCBpZiAoRU5B
QkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCiAgICAgICAgIGZ0
bC9GVExKU0NhbGwuY3BwCiAgICAgICAgIGZ0bC9GVExKU0NhbGxCYXNlLmNwcAorICAgICAgICBm
dGwvRlRMSlNDYWxsVmFyYXJncy5jcHAKICAgICAgICAgZnRsL0ZUTExpbmsuY3BwCiAgICAgICAg
IGZ0bC9GVExMb2NhdGlvbi5jcHAKICAgICAgICAgZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODAx
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNiArNTExLDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKSVRGaW5hbGl6ZXIuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsQmFzZS5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsVmFyYXJncy5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMTGluay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxmdGxcRlRMTG9jYXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTExvd2VyREZHVG9MTFZNLmNwcCIgLz4KQEAgLTExOTQsNiArMTE5NSw3IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSklURmluYWxpemVyLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsQmFzZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEpTQ2FsbFZhcmFyZ3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExMaW5rLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
TG9jYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb3dlckRG
R1RvTExWTS5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNiArNTY0LDggQEAKIAkJ
MEZDRUZBRTAxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQg
LyogRlRMTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkQxMjAyRjFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAyRDFB
OEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5jcHAgKi87IH07CiAJCTBGRDEyMDMwMUE4
QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlND
YWxsQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDEyMDMxMUE4Qzg1
QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAqLzsgfTsKKwkJMEZEMTIwMzQxQThD
ODVCRDAwMEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDEyMDMyMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExK
U0NhbGxWYXJhcmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZE
MDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8q
IERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJ
MEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8q
IERGR0RyaXZlci5oICovOyB9OwpAQCAtMjI0Nyw2ICsyMjQ5LDggQEAKIAkJMEZDRUZBREUxODA3
MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTExvY2F0aW9uLmg7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMTIwMkQxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2Fs
bEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxs
QmFzZS5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRDEyMDJFMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuaDsgcGF0aCA9
IGZ0bC9GVExKU0NhbGxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDEy
MDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbFZhcmFyZ3MuY3BwOyBwYXRoID0gZnRs
L0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQx
MjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmg7IHBhdGggPSBmdGwvRlRMSlND
YWxsVmFyYXJncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQyQzkyMzE2RDAx
RUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdE
cml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBF
MDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzYwNiw2ICszNjEwLDggQEAKIAkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVE
OTcgLyogRlRMSlNDYWxsLmggKi8sCiAJCQkJMEZEMTIwMkQxQThBRUQxMjAwMEY1MjgwIC8qIEZU
TEpTQ2FsbEJhc2UuY3BwICovLAogCQkJCTBGRDEyMDJFMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExK
U0NhbGxCYXNlLmggKi8sCisJCQkJMEZEMTIwMzExQThDODVCRDAwMEY1MjgwIC8qIEZUTEpTQ2Fs
bFZhcmFyZ3MuY3BwICovLAorCQkJCTBGRDEyMDMyMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0Nh
bGxWYXJhcmdzLmggKi8sCiAJCQkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsu
Y3BwICovLAogCQkJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJ
CQkJMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLywKQEAgLTU0
NDksNiArNTQ1NSw3IEBACiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3
RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8q
IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDEyMDM0MUE4
Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0E4QUYzNTE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRkM5OUQ1MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNo
cG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM3MTdBREI1RjMwMDVBQjE3NCAvKiBB
cnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLApAQCAtNjg2NSw2ICs2ODcyLDcgQEAKIAkJ
CQlBNzhBOTc3NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3OEE5Nzc2MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0Zp
eHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEMTIwMzMxQThDODVCRDAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbFZhcmFyZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzOTYxN0ZG
QzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4
OUNGNzE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ3MSw2ICs0NzEsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbHNoaWZ0MzIo
dHJ1c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CiAgICAgfQorICAgIAorICAgIHZv
aWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAg
ICAgcnNoaWZ0MzIodHJ1c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CisgICAgfQor
CisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAg
IHsKKyAgICAgICAgdXJzaGlmdDMyKHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3Qp
OworICAgIH0KIAogICAgIHZvaWQgbmVnUHRyKFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkBAIC03
NTAsNiArNzYwLDE2IEBAIHB1YmxpYzoKICAgICAgICAgbHNoaWZ0NjQodHJ1c3RlZEltbTMyRm9y
U2hpZnQoaW1tKSwgc3JjRGVzdCk7CiAgICAgfQogCisgICAgdm9pZCByc2hpZnRQdHIoSW1tMzIg
aW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICByc2hpZnQ2NCh0cnVzdGVk
SW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHVyc2hpZnRQ
dHIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICB1cnNoaWZ0
NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CisgICAgfQorCiAgICAgdm9p
ZCBuZWdQdHIoUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbmVnNjQoZGVzdCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4OSw2
ICs2ODksMjYgQEAgcHVibGljOgogICAgICAgICB1cnNoaWZ0MzIoZGVzdCwgaW1tLCBkZXN0KTsK
ICAgICB9CiAKKyAgICB2b2lkIHVyc2hpZnQ2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBz
aGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bHNyPDY0PihkZXN0LCBzcmMsIHNoaWZ0QW1vdW50KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB1
cnNoaWZ0NjQoUmVnaXN0ZXJJRCBzcmMsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxzcjw2ND4oZGVzdCwgc3JjLCBpbW0ubV92
YWx1ZSAmIDB4MWYpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlmdDY0KFJlZ2lzdGVySUQgc2hp
ZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHVyc2hpZnQ2NChkZXN0
LCBzaGlmdEFtb3VudCwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdXJzaGlmdDY0KFRy
dXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHVyc2hpZnQ2
NChkZXN0LCBpbW0sIGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIHhvcjMyKGRlc3QsIHNyYywgZGVz
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzNCw2ICszMzQsMTEgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci5zYXJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNocnFfaThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBtdWw2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuaW11bHFfcnIoc3JjLCBkZXN0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2
aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04ODEsNiArODgx
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgc2hycV9pOHIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAoaW1tID09IDEpCisgICAg
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXYxLCBHUk9VUDJfT1Bf
U0hSLCBkc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5
dGVPcDY0KE9QX0dST1VQMl9FdkliLCBHUk9VUDJfT1BfU0hSLCBkc3QpOworICAgICAgICAgICAg
bV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9CisgICAgfQorCiAgICAgdm9p
ZCBzaGxxX2k4cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIGlmIChp
bW0gPT0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBzdHJ1
Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgICAgICwgaGFzU2VlblNo
b3VsZFJlcGF0Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2VlbkNsb3N1cmUoZmFsc2UpCiAgICAg
ICAgICwgY2FsbFR5cGUoTm9uZSkKKyAgICAgICAgLCBtYXhOdW1Bcmd1bWVudHMoMCkKICAgICAg
ICAgLCBzbG93UGF0aENvdW50KDApCiAgICAgewogICAgIH0KQEAgLTkxLDYgKzkyLDcgQEAgc3Ry
dWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIGJvb2wgaGFzU2VlbkNs
b3N1cmUgOiAxOwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAgICB1
bnNpZ25lZCBjYWxsZWVHUFIgOiA4OworICAgIHVpbnQ4X3QgbWF4TnVtQXJndW1lbnRzOyAvLyBP
bmx5IHVzZWQgZm9yIHZhcmFyZ3MgY2FsbHMuCiAgICAgdWludDMyX3Qgc2xvd1BhdGhDb3VudDsK
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTgwMTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw5IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzLCBidXQgYW55
dGltZSB3ZSBoYXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQgYmVjb21lcyBpbmRpc3BlbnNhYmxl
LgogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICAKLSAgICByZXR1cm4gY29t
cHV0ZUZyb21DYWxsTGlua0luZm8obG9ja2VyLCBjYWxsTGlua0luZm8pOworICAgIENhbGxMaW5r
U3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKGxvY2tlciwgY2FsbExpbmtJ
bmZvKTsKKyAgICByZXN1bHQubV9tYXhOdW1Bcmd1bWVudHMgPSBjYWxsTGlua0luZm8ubWF4TnVt
QXJndW1lbnRzOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKQEAgLTI5MSw2ICsyOTMsMTMgQEAg
Q2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogICAgIHJldHVybiBjb21w
dXRlRm9yKHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgYmFzZWxpbmVN
YXApOwogfQogCit2b2lkIENhbGxMaW5rU3RhdHVzOjpzZXRQcm92ZW5Db25zdGFudENhbGxlZShD
YWxsVmFyaWFudCB2YXJpYW50KQoreworICAgIG1fdmFyaWFudHMgPSBDYWxsVmFyaWFudExpc3R7
IHZhcmlhbnQgfTsKKyAgICBtX2NvdWxkVGFrZVNsb3dQYXRoID0gZmFsc2U7CisgICAgbV9pc1By
b3ZlZCA9IHRydWU7Cit9CisKIGJvb2wgQ2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwoKSBj
b25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7
CkBAIC0zMjIsNiArMzMxLDkgQEAgdm9pZCBDYWxsTGlua1N0YXR1czo6ZHVtcChQcmludFN0cmVh
bSYgbwogICAgIAogICAgIGlmICghbV92YXJpYW50cy5pc0VtcHR5KCkpCiAgICAgICAgIG91dC5w
cmludChjb21tYSwgbGlzdER1bXAobV92YXJpYW50cykpOworICAgIAorICAgIGlmIChtX21heE51
bUFyZ3VtZW50cykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWF4TnVtQXJndW1lbnRzID0g
IiwgbV9tYXhOdW1Bcmd1bWVudHMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCShyZXZp
c2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4LDYgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgQ2FsbExpbmtTdGF0dXMmIHNldElzUHJvdmVkKGJvb2wgaXNQcm92
ZWQpCi0gICAgewotICAgICAgICBtX2lzUHJvdmVkID0gaXNQcm92ZWQ7Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0gICAgCiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVG
b3IoCiAgICAgICAgIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIGNvbnN0IENh
bGxMaW5rSW5mb01hcCYpOwogCkBAIC0xMDgsNiArMTAyLDggQEAgcHVibGljOgogICAgIHN0YXRp
YyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3Jp
Z2luLCBjb25zdCBDYWxsTGlua0luZm9NYXAmLCBjb25zdCBDb250ZXh0TWFwJik7CiAgICAgCisg
ICAgdm9pZCBzZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFudCk7CisgICAgCiAgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhcmlhbnRzLmlzRW1wdHkoKSB8fCBtX2Nv
dWxkVGFrZVNsb3dQYXRoOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhaXNTZXQoKTsgfQpAQCAtMTIzLDYgKzExOSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBi
b29sIGlzQ2xvc3VyZUNhbGwoKSBjb25zdDsgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBjYWxsZWUg
aXMgYSBjbG9zdXJlIGNhbGwuCiAgICAgCisgICAgdW5zaWduZWQgbWF4TnVtQXJndW1lbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhOdW1Bcmd1bWVudHM7IH0KKyAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CkBAIC0xMzcsNiArMTM1LDcgQEAg
cHJpdmF0ZToKICAgICBDYWxsVmFyaWFudExpc3QgbV92YXJpYW50czsKICAgICBib29sIG1fY291
bGRUYWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lzUHJvdmVkOworICAgIHVuc2lnbmVkIG1fbWF4
TnVtQXJndW1lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxODAxODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjA2LDYgKzIwNiwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgSlNDCiAgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6Q29u
c3RydWN0OgogICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdCIpOwogICAgICAgICByZXR1cm47
CisgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6CisgICAgICAgIG91
dC5wcmludCgiQ2FsbFZhcmFyZ3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJ
bmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIG91dC5wcmludCgiQ29u
c3RydWN0VmFyYXJncyIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBKU0M6OklubGluZUNh
bGxGcmFtZTo6R2V0dGVyQ2FsbDoKICAgICAgICAgb3V0LnByaW50KCJHZXR0ZXJDYWxsIik7CiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEs
NiArMTIxLDggQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgZW51bSBLaW5kIHsKICAg
ICAgICAgQ2FsbCwKICAgICAgICAgQ29uc3RydWN0LAorICAgICAgICBDYWxsVmFyYXJncywKKyAg
ICAgICAgQ29uc3RydWN0VmFyYXJncywKICAgICAgICAgCiAgICAgICAgIC8vIEZvciB0aGVzZSwg
dGhlIHN0YWNrT2Zmc2V0IGluY29ycG9yYXRlcyB0aGUgYXJndW1lbnQgY291bnQgcGx1cyB0aGUg
dHJ1ZSByZXR1cm4gUEMKICAgICAgICAgLy8gc2xvdC4KQEAgLTE0MCwzMCArMTQyLDQ4IEBAIHN0
cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgICAgICByZXR1cm4gQ2FsbDsKICAgICB9CiAgICAg
CisgICAgc3RhdGljIEtpbmQgdmFyYXJnc0tpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgQ29kZUZv
ckNhbGw6CisgICAgICAgICAgICByZXR1cm4gQ2FsbFZhcmFyZ3M7CisgICAgICAgIGNhc2UgQ29k
ZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RWYXJhcmdzOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBDYWxsOworICAgIH0KKyAgICAKICAgICBzdGF0aWMgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBzcGVjaWFsaXphdGlvbktpbmRGb3IoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNo
IChraW5kKSB7CiAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoK
ICAgICAgICAgY2FzZSBHZXR0ZXJDYWxsOgogICAgICAgICBjYXNlIFNldHRlckNhbGw6CiAgICAg
ICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAg
ICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgICAgICByZXR1cm4gQ29kZUZvckNv
bnN0cnVjdDsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBi
b29sIGlzTm9ybWFsQ2FsbChLaW5kIGtpbmQpCisgICAgc3RhdGljIGJvb2wgaXNWYXJhcmdzKEtp
bmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewotICAgICAgICBjYXNlIENh
bGw6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgor
ICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgIH0KKyAgICBib29sIGlzVmFyYXJncygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNWYXJhcmdzKHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsKKyAgICB9CiAgICAgCiAgICAgVmVj
dG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3VtZW50czsgLy8gSW5jbHVkZXMgJ3RoaXMnLgogICAgIFdy
aXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBleGVjdXRhYmxlOwpAQCAtMTcxLDEwICsxOTEs
MTEgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7CiAg
ICAgQml0VmVjdG9yIGNhcHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUgbWFjaGluZSBjYWxs
IGZyYW1lJ3MgdmFyaWFibGUgbnVtYmVyaW5nLgogCi0gICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDog
Mjk7Ci0gICAgdW5zaWduZWQga2luZCA6IDI7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCisgICAgc2ln
bmVkIHN0YWNrT2Zmc2V0IDogMjg7CisgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlw
ZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3
ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3Qg
dHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBt
YW51YWxseS4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXI7IC8vIFRoaXMg
aXMgb25seSBzZXQgaWYgdGhlIGNvZGUgdXNlcyBhcmd1bWVudHMuIFRoZSB1bm1vZGlmaWVkIGFy
Z3VtZW50cyByZWdpc3RlciBmb2xsb3dzIHRoZSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIo
KSBjb252ZW50aW9uIChzZWUgQ29kZUJsb2NrLmgpLgorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudENvdW50UmVnaXN0ZXI7IC8vIE9ubHkgc2V0IHdoZW4gd2UgaW5saW5lIGEgdmFyYXJncyBj
YWxsLgogICAgIAogICAgIC8vIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG5vdGlvbiBvZiBhICJk
ZWZhdWx0IiBzZXQgb2YgdmFsdWVzIGZvcgogICAgIC8vIElubGluZUNhbGxGcmFtZSdzIGZpZWxk
cy4gVGhpcyBjb25zdHJ1Y3RvciBpcyBoZXJlIGp1c3QgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCShyZXZp
c2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw4IEBAIGNvbnN0IGNoYXIqIGV4aXRLaW5k
VG9TdHJpbmcoRXhpdEtpbmQga2kKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHNFc2NhcGVkIjsK
ICAgICBjYXNlIE5vdFN0cmluZ09iamVjdDoKICAgICAgICAgcmV0dXJuICJOb3RTdHJpbmdPYmpl
Y3QiOworICAgIGNhc2UgVmFyYXJnc092ZXJmbG93OgorICAgICAgICByZXR1cm4gIlZhcmFyZ3NP
dmVyZmxvdyI7CiAgICAgY2FzZSBVbmNvdW50YWJsZToKICAgICAgICAgcmV0dXJuICJVbmNvdW50
YWJsZSI7CiAgICAgY2FzZSBVbmNvdW50YWJsZUludmFsaWRhdGlvbjoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCShyZXZpc2lvbiAxODAxODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNiArNDUsNyBAQCBlbnVtIEV4aXRLaW5kIDogdWludDhfdCB7CiAgICAgSW5hZGVxdWF0
ZUNvdmVyYWdlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBlbmRlZCB1cCBpbiBjb2RlIHRoYXQg
ZGlkbid0IGhhdmUgcHJvZmlsaW5nIGNvdmVyYWdlLgogICAgIEFyZ3VtZW50c0VzY2FwZWQsIC8v
IFdlIGV4aXRlZCBiZWNhdXNlIGFyZ3VtZW50cyBlc2NhcGVkIGJ1dCB3ZSBkaWRuJ3QgZXhwZWN0
IHRoZW0gdG8uCiAgICAgTm90U3RyaW5nT2JqZWN0LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBz
aG91bGRuJ3QgaGF2ZSBhdHRlbXB0ZWQgdG8gb3B0aW1pemUgc3RyaW5nIG9iamVjdCBhY2Nlc3Mu
CisgICAgVmFyYXJnc092ZXJmbG93LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIHZhcmFyZ3MgY2Fs
bCBwYXNzZWQgbW9yZSBhcmd1bWVudHMgdGhhbiB3ZSBleHBlY3RlZC4KICAgICBVbmNvdW50YWJs
ZSwgLy8gV2UgZXhpdGVkIGZvciBub25lIG9mIHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hv
dWxkIG5vdCBjb3VudCBpdC4gTW9zdCB1c2VzIG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBh
IEZJWE1FLgogICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCAvLyBXZSBleGl0ZWQgYmVjYXVz
ZSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQ7IHRoaXMgbWVhbnMgdGhhdCB3ZSd2ZSBh
bHJlYWR5IGNvdW50ZWQgdGhlIHJlYXNvbnMgd2h5IHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlk
YXRlZC4KICAgICBXYXRjaGRvZ1RpbWVyRmlyZWQsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIG5l
ZWQgdG8gc2VydmljZSB0aGUgd2F0Y2hkb2cgdGltZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCShyZXZpc2lvbiAxODAxODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDI1ICs5MiwyNSBAQCB2b2lkIFZhbHVlUmVjb3Zl
cnk6OmR1bXBJbkNvbnRleHQoUHJpbnRTCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIGNh
c2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJpbnRmKCIqJWQiLCB2aXJ0dWFs
UmVnaXN0ZXIoKS5vZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKiIsIHZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgIG91dC5wcmludGYoIippbnQzMiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5v
ZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKmludDMyKCIsIHZpcnR1YWxSZWdpc3Rlcigp
LCAiKSIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgb3V0LnByaW50ZigiKmludDUyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIqaW50NTIoIiwgdmlydHVhbFJlZ2lzdGVyKCks
ICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICBvdXQucHJpbnRmKCIqc3RyaWN0SW50NTIoJWQpIiwgdmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIipzdHJpY3RJbnQ1MigiLCB2
aXJ0dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJpbnRmKCIqZG91YmxlKCVkKSIsIHZp
cnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIqZG91YmxlKCIs
IHZpcnR1YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDZWxs
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJpbnRmKCIqY2VsbCglZCkiLCB2aXJ0
dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKmNlbGwoIiwgdmly
dHVhbFJlZ2lzdGVyKCksICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEJvb2xlYW5E
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludGYoIipib29sKCVkKSIsIHZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIqYm9vbCgiLCB2aXJ0
dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJndW1lbnRz
VGhhdFdlcmVOb3RDcmVhdGVkOgogICAgICAgICBvdXQucHJpbnRmKCJhcmd1bWVudHMiKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xOTQsOSArMTk0LDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgICAg
IC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LgotICAg
ICAgICBBU1NFUlQoIW1fc3RhdGUuYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9m
IGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9uZSBz
ZXQKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1cnJl
bnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKKyAgICAgICAgLy8gbm9uLWNsZWFy
IHZhbHVlLgorICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2Rl
LT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2Fz
ZSBMb2FkVmFyYXJnczogeworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5k
KGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEtPmxpbWl0IC0gMTsgaS0tOykKKyAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVz
KCkub3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9wKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgogICAgIGNh
c2UgQml0T3I6CkBAIC0xMzI0LDcgKzEzMzUsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhh
dCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKICAgICAg
ICAgLy8gb2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5n
dGggaXMgYSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0
aGVyIG9wdGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAgICAgaWYgKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgc2V0
Q29uc3RhbnQoCiAgICAgICAgICAgICAgICAgbm9kZSwganNOdW1iZXIobm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsgLy8gUHJldGVuZCB0aGF0IHdlIGNsb2Ji
ZXJlZCB0byBwcmV2ZW50IGNvbnN0YW50IGZvbGRpbmcuCkBAIC0xOTczLDYgKzE5ODUsOSBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBDb25zdHJ1
Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgorICAg
IGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2Fz
ZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9y
aWdpbjsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChvcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgLy8gV2Uga25vdyBleGFjdGx5IHdoYXQgdGhpcyB3aWxsIHJldHVybi4g
QnV0IG9ubHkgYWZ0ZXIgd2UgaGF2ZSBjaGVja2VkCiAgICAgICAgICAgICAgICAgICAgIC8vIHRo
YXQgbm9ib2R5IGhhcyBlc2NhcGVkIG91ciBhcmd1bWVudHMuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTgwMTg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsOCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8v
IEhlbHBlciBmb3IgbWluIGFuZCBtYXguCi0gICAgYm9vbCBoYW5kbGVNaW5NYXgoaW50IHJlc3Vs
dE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4K
KyAgICBib29sIGhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBjb25zdCBD
aGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwogICAgIAogICAgIC8vIEhhbmRsZSBjYWxscy4g
VGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vycm91bmRpbmcgaW5saW5pbmcgYW5kIGludHJpbnNpY3Mu
CiAgICAgdm9pZCBoYW5kbGVDYWxsKApAQCAtMTgyLDIwICsxODMsMjUgQEAgcHJpdmF0ZToKICAg
ICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IENhbGxMaW5rU3RhdHVzKTsKICAgICB2b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5
cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwg
aW50IGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwogICAgIHZvaWQg
aGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKLSAgICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSog
Y2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsK
LSAgICB2b2lkIHVuZG9GdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCk7CisgICAgdm9pZCBoYW5k
bGVWYXJhcmdzQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKKyAgICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9k
ZSogY2FsbFRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bW50KTsKICAgICB2b2lkIGVt
aXRBcmd1bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB1bnNpZ25lZCBpbmxp
bmluZ0Nvc3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCk7IC8vIFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBp
bmxpbmluZyBjYW5kaWRhdGUuIEJ5IGNvbnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qg
b2YgMS4KICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRl
ZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxp
bmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxM
aW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZy
YW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAgICBib29sIGhhbmRsZUlu
bGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2Fs
bExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJn
dW1lbnQsIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1l
bnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRP
ZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uKTsKICAgICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9l
c05vcm1hbExpbmtpbmcsIENhbGxlckxpbmtzTWFudWFsbHkgfTsKLSAgICBib29sIGF0dGVtcHRU
b0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxs
VmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlu
a2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0Jh
bGFuY2UpOwotICAgIHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJl
c3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1l
OjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tz
RnVuY3Rvcj4KKyAgICBib29sIGF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGlu
ZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICB2
b2lkIGlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBD
YWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCwgQ2FsbGVy
TGlua2FiaWxpdHksIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgdm9p
ZCBjYW5jZWxMaW5raW5nRm9yQmxvY2soSW5saW5lU3RhY2tFbnRyeSosIEJhc2ljQmxvY2sqKTsg
Ly8gT25seSB3b3JrcyB3aGVuIHRoZSBnaXZlbiBibG9jayBpcyB0aGUgbGFzdCBvbmUgdG8gaGF2
ZSBiZWVuIGFkZGVkIGZvciB0aGF0IGlubGluZSBzdGFjayBlbnRyeS4KICAgICAvLyBIYW5kbGUg
aW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBp
ZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUludHJpbnNpYyhpbnQg
cmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7Ci0gICAgYm9v
bCBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFs
RnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgVHlwZWRBcnJheVR5cGUpOwotICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1
bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBo
YW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYywgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24sIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25z
dHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwg
Y29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGVja3NGdW5jdG9yPgorICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9u
KGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQs
IGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgTm9kZSogaGFuZGxlUHV0
QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQs
IE5vZGUqIHZhbHVlKTsKICAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlIG9wID0gR2V0QnlPZmZzZXQpOwogICAgIHZv
aWQgaGFuZGxlR2V0QnlJZCgKQEAgLTUyOCw2ICs1MzQsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwogICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAg
ICAgICBmbHVzaERpcmVjdChpbmxpbmVTdGFja0VudHJ5LT5yZW1hcE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyKEpTU3RhY2s6OkNhbGxlZSkpKTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNr
RW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVT
dGFja0VudHJ5LT5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGFyZ3VtZW50ID0gbnVtQXJndW1lbnRzOyBhcmd1bWVudC0tID4gMTspCkBAIC02NTQs
MTMgKzY2Miw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcmVtb3ZlTGFzdE5vZGVGcm9tR3JhcGgoTm9kZVR5cGUgZXhwZWN0ZWROb2Rl
VHlwZSkKLSAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dGFrZUxh
c3QoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBleHBlY3RlZE5vZGVU
eXBlKTsKLSAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKG5vZGUpOwotICAgIH0KLQog
ICAgIHZvaWQgYWRkVmFyQXJnQ2hpbGQoTm9kZSogY2hpbGQpCiAgICAgewogICAgICAgICBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKEVkZ2UoY2hpbGQpKTsKQEAgLTY5MSw3ICs2OTIs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgb3AsIG9wSW5mbywgY2FsbGVlLCBhcmdDb3VudCwg
cmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0UmVnKHJlc3VsdCk7CiAgICAgICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpLCBjYWxsKTsKKyAgICAgICAgICAgIHNl
dChyZXN1bHRSZWcsIGNhbGwpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCkBA
IC0xMDQyLDggKzEwNDMsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogewog
ICAgIEFTU0VSVChyZWdpc3Rlck9mZnNldCA8PSAwKTsKICAgICAKLSAgICBpZiAoY2FsbFRhcmdl
dC0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1
cyhjYWxsVGFyZ2V0LT5hc0pTVmFsdWUoKSkuc2V0SXNQcm92ZWQodHJ1ZSk7CisgICAgaWYgKGNh
bGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50KCkpCisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFBy
b3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxWYXJpYW50KGNhbGxUYXJnZXQtPmFzQ2VsbCgpKSk7CiAg
ICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAg
ICAgZGF0YUxvZygiICAgIEhhbmRsaW5nIGNhbGwgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwg
IjogIiwgY2FsbExpbmtTdGF0dXMsICJcbiIpOwpAQCAtMTA2MCw3ICsxMDYxLDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICAKICAgICBPcEluZm8gY2FsbE9wSW5mbzsK
ICAgICAKLSAgICBpZiAoaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlu
a1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0
T2Zmc2V0LCBvcCwga2luZCwgcHJlZGljdGlvbikpIHsKKyAgICBpZiAoaGFuZGxlSW5saW5pbmco
Y2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSwgVmlydHVhbFJlZ2lzdGVy
KCksIDAsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBvcCwga2luZCwg
cHJlZGljdGlvbikpIHsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAg
ICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA3Miw3ICsxMDczLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ2FsbCgKICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUuZnVuY3Rpb24o
KTsKICAgICAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJ
bmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKICAgICAgICAgaWYg
KGZ1bmN0aW9uICYmIGZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBl
bWl0RnVuY3Rpb25DaGVja3MoY2FsbGVlLCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9mZnNldCwgc3Bl
Y2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUs
IGNhbGxUYXJnZXQsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0
KSk7CiAgICAgICAgICAgICBjYWxsT3BJbmZvID0gT3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0
aW9uKSk7CiAKICAgICAgICAgICAgIGlmIChvcCA9PSBDYWxsKQpAQCAtMTA4OCwxMSArMTA4OSw1
NCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIGFkZENhbGwocmVzdWx0
LCBvcCwgY2FsbE9wSW5mbywgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6
ZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSwgTm9kZSogY2FsbFRhcmdldCwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBl
IG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0gICAgTm9kZSogdGhpc0FyZ3Vt
ZW50OworICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncykgPT0gT1BDT0RF
X0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFyYXJncykpOworICAgIAorICAgIGludCByZXN1bHQgPSBw
Y1sxXS51Lm9wZXJhbmQ7CisgICAgaW50IGNhbGxlZSA9IHBjWzJdLnUub3BlcmFuZDsKKyAgICBp
bnQgdGhpc1JlZyA9IHBjWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgYXJndW1lbnRzID0gcGNbNF0u
dS5vcGVyYW5kOworICAgIGludCBmaXJzdEZyZWVSZWcgPSBwY1s1XS51Lm9wZXJhbmQ7CisgICAg
aW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gcGNbNl0udS5vcGVyYW5kOworICAgIAorICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CisgICAgCisgICAgTm9kZSog
Y2FsbFRhcmdldCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSk7CisgICAgCisgICAgQ2Fs
bExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigK
KyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9y
aWdpbigpLAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2Fs
bENvbnRleHRNYXApOworICAgIGlmIChjYWxsVGFyZ2V0LT5pc0NlbGxDb25zdGFudCgpKQorICAg
ICAgICBjYWxsTGlua1N0YXR1cy5zZXRQcm92ZW5Db25zdGFudENhbGxlZShDYWxsVmFyaWFudChj
YWxsVGFyZ2V0LT5hc0NlbGwoKSkpOworICAgIAorICAgIGlmIChjYWxsTGlua1N0YXR1cy5jYW5P
cHRpbWl6ZSgpCisgICAgICAgICYmIGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwg
Y2FsbExpbmtTdGF0dXMsIGZpcnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpLCBW
aXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5lQ2FsbEZy
YW1lOjp2YXJhcmdzS2luZEZvcihraW5kKSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAgaWYgKG1f
Z3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+
bm90aWNlSW5saW5lZENhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBD
YWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOwor
ICAgIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJBcmdPZmZzZXQ7CisgICAgCisg
ICAgTm9kZSogdGhpc0NoaWxkOwogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAg
ICB0aGlzQXJndW1lbnQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0
ZXJPZmZzZXQpKTsKKyAgICAgICAgdGhpc0NoaWxkID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlz
UmVnKSk7CisgICAgZWxzZQorICAgICAgICB0aGlzQ2hpbGQgPSBudWxscHRyOworICAgIAorICAg
IE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgY2FsbFRhcmdldCwgZ2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKSwgdGhpc0No
aWxkKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CisgICAgaWYgKHJl
c3VsdFJlZy5pc1ZhbGlkKCkpCisgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOworfQorCit2
b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVl
LCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50UmVnKQorewor
ICAgIE5vZGUqIHRoaXNBcmd1bWVudDsKKyAgICBpZiAodGhpc0FyZ3VtZW50UmVnLmlzVmFsaWQo
KSkKKyAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0KHRoaXNBcmd1bWVudFJlZyk7CiAgICAgZWxz
ZQogICAgICAgICB0aGlzQXJndW1lbnQgPSAwOwogCkBAIC0xMTEwLDEzICsxMTU0LDYgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKAogICAgIGFkZFRvR3JhcGgoQ2hl
Y2tDZWxsLCBPcEluZm8obV9ncmFwaC5mcmVlemUoY2FsbGVlQ2VsbCkpLCBjYWxsVGFyZ2V0Rm9y
Q2hlY2ssIHRoaXNBcmd1bWVudCk7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OnVuZG9GdW5j
dGlvbkNoZWNrcyhDYWxsVmFyaWFudCBjYWxsZWUpCi17Ci0gICAgcmVtb3ZlTGFzdE5vZGVGcm9t
R3JhcGgoQ2hlY2tDZWxsKTsKLSAgICBpZiAoY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSkKLSAgICAg
ICAgcmVtb3ZlTGFzdE5vZGVGcm9tR3JhcGgoR2V0RXhlY3V0YWJsZSk7Ci19Ci0KIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmVtaXRBcmd1bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CiB7CiAgICAgZm9yIChpbnQgaSA9IGtpbmQgPT0gQ29kZUZvckNhbGwgPyAwIDogMTsgaSA8IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpCkBAIC0xMTMxLDcgKzExNjgsNyBAQCB1bnNp
Z25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhCiAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gY2FsbGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogICAgIGlmICgh
ZXhlY3V0YWJsZSkgewogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
IiAgICBGYWlsaW5nIGJlY2F1c2UgdGhlcmUgaXMgbm8gZnVuY3Rpb24gZXhlY3V0YWJsZS4iKTsK
KyAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1c2UgdGhlcmUgaXMgbm8gZnVu
Y3Rpb24gZXhlY3V0YWJsZS5cbiIpOwogICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgfQog
ICAgIApAQCAtMTE1OCw2ICsxMTk1LDE2IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjppbmxp
bmluZ0Nvc3QoQ2EKICAgICB9CiAgICAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCA9
IGlubGluZUZ1bmN0aW9uRm9yQ2FwYWJpbGl0eUxldmVsKAogICAgICAgICBjb2RlQmxvY2ssIGtp
bmQsIGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpOworICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAg
IGRhdGFMb2coIiAgICBLaW5kOiAiLCBraW5kLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiICAg
IElzIGNsb3N1cmUgY2FsbDogIiwgY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSwgIlxuIik7CisgICAg
ICAgIGRhdGFMb2coIiAgICBDYXBhYmlsaXR5IGxldmVsOiAiLCBjYXBhYmlsaXR5TGV2ZWwsICJc
biIpOworICAgICAgICBkYXRhTG9nKCIgICAgTWlnaHQgaW5saW5lIGZ1bmN0aW9uOiAiLCBtaWdo
dElubGluZUZ1bmN0aW9uRm9yKGNvZGVCbG9jaywga2luZCksICJcbiIpOworICAgICAgICBkYXRh
TG9nKCIgICAgTWlnaHQgY29tcGlsZSBmdW5jdGlvbjogIiwgbWlnaHRDb21waWxlRnVuY3Rpb25G
b3IoY29kZUJsb2NrLCBraW5kKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICBJcyBzdXBw
b3J0ZWQgZm9yIGlubGluaW5nOiAiLCBpc1N1cHBvcnRlZEZvcklubGluaW5nKGNvZGVCbG9jayks
ICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgTmVlZHMgYWN0aXZhdGlvbjogIiwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCksICJcbiIpOworICAgICAg
ICBkYXRhTG9nKCIgICAgSXMgaW5saW5pbmcgY2FuZGlkYXRlOiAiLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5pc0lubGluaW5nQ2FuZGlkYXRlKCksICJcbiIpOworICAgIH0KICAgICBp
ZiAoIWNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwpKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMg
bm90IGlubGluZWFibGUuXG4iKTsKQEAgLTEyMTAsMTMgKzEyNTcsMTUgQEAgdW5zaWduZWQgQnl0
ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29zdChDYQogICAgIHJldHVybiBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uQ291bnQoKTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2Rl
KiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50IGNhbGxlZSwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2ln
bmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBDYWxsZXJMaW5rYWJp
bGl0eSBjYWxsZXJMaW5rYWJpbGl0eSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+
Cit2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBp
bnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5s
aW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmls
aXR5LCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpCiB7CiAgICAgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNp
YWxpemF0aW9uS2luZEZvcihraW5kKTsKICAgICAKICAgICBBU1NFUlQoaW5saW5pbmdDb3N0KGNh
bGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCkgIT0g
VUlOVF9NQVgpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbGVlLmZ1bmN0
aW9uRXhlY3V0YWJsZSgpLT5iYXNlbGluZUNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQp
OworICAgIGluc2VydENoZWNrcyhjb2RlQmxvY2spOwogCiAgICAgLy8gRklYTUU6IERvbid0IGZs
dXNoIGNvbnN0YW50cyEKICAgICAKQEAgLTEzNTYsNDQgKzE0MDUsNjIgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6Y2FuY2VsTGlua2luZ0ZvckJsbwogICAgIH0KIH0KIAotYm9vbCBCeXRlQ29kZVBh
cnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3Vs
dE9wZXJhbmQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxG
cmFtZTo6S2luZCBraW5kLCBDYWxsZXJMaW5rYWJpbGl0eSBjYWxsZXJMaW5rYWJpbGl0eSwgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+Citib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0
VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2Fs
bFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtp
bmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBjb25zdCBDaGVja3NGdW5jdG9y
JiBpbnNlcnRDaGVja3MpCiB7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXph
dGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsK
ICAgICAKICAgICBpZiAoIWlubGluaW5nQmFsYW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAorICAgIGJvb2wgZGlkSW5zZXJ0Q2hlY2tzID0gZmFsc2U7CisgICAgYXV0byBpbnNlcnRD
aGVja3NXaXRoQWNjb3VudGluZyA9IFsmXSAoKSB7CisgICAgICAgIGluc2VydENoZWNrcyhudWxs
cHRyKTsKKyAgICAgICAgZGlkSW5zZXJ0Q2hlY2tzID0gdHJ1ZTsKKyAgICB9OworICAgIAorICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgICAgQ29uc2lkZXJpbmcgY2FsbGVlICIs
IGNhbGxlZSwgIlxuIik7CisgICAgCiAgICAgaWYgKEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gY2FsbGVlLmludGVybmFsRnVuY3Rpb24oKSkgewotICAgICAgICBpZiAoaGFuZGxlQ29uc3Rh
bnRJbnRlcm5hbEZ1bmN0aW9uKHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNl
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCkpIHsKKyAg
ICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihyZXN1bHRPcGVyYW5kLCBm
dW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVj
aWFsaXphdGlvbktpbmQsIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nKSkgeworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgY2FsbFRhcmdldE5vZGUpOwogICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhh
bnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFs
aXphdGlvbktpbmQpOwogICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFkaWRJbnNlcnRDaGVja3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAogICAgIEludHJpbnNpYyBpbnRyaW5zaWMgPSBjYWxsZWUuaW50cmluc2ljRm9y
KHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNpYykg
ewotICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywg
cmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uKSkg
eworICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywg
cmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uLCBp
bnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGRpZEluc2VydENoZWNrcyk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxU
YXJnZXROb2RlKTsKICAgICAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zm
c2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAg
ICAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghZGlk
SW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICB1
bnNpZ25lZCBteUlubGluaW5nQ29zdCA9IGlubGluaW5nQ29zdChjYWxsZWUsIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAgIGlmIChteUlubGluaW5n
Q29zdCA+IGlubGluaW5nQmFsYW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IGlubGluZUNhbGwoY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxlZSwgcmVnaXN0
ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBj
YWxsZXJMaW5rYWJpbGl0eSk7CisKKyAgICBpbmxpbmVDYWxsKGNhbGxUYXJnZXROb2RlLCByZXN1
bHRPcGVyYW5kLCBjYWxsZWUsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgbmV4dE9mZnNldCwga2luZCwgY2FsbGVyTGlua2FiaWxpdHksIGluc2VydENoZWNrcyk7
CiAgICAgaW5saW5pbmdCYWxhbmNlIC09IG15SW5saW5pbmdDb3N0OwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlu
a1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1l
OjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCitib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZygKKyAgICBOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3Vs
dE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywKKyAgICBpbnQg
cmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVu
dCwKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVuc2lnbmVkIGFyZ3Vt
ZW50c09mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAorICAgIHVuc2lnbmVk
IG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQs
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAg
ICAgZGF0YUxvZygiSGFuZGxpbmcgaW5saW5pbmcuLi5cbiIpOwpAQCAtMTQwNyw2ICsxNDc0LDEz
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAKKyAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFy
Z3Moa2luZCkKKyAgICAgICAgJiYgY2FsbExpbmtTdGF0dXMubWF4TnVtQXJndW1lbnRzKCkgPiBP
cHRpb25zOjptYXhpbXVtVmFyYXJnc0ZvcklubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlubGluaW5nIGJlY2F1c2Ugb2YgdmFy
YXJncy5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKICAgICB1
bnNpZ25lZCBpbmxpbmluZ0JhbGFuY2UgPSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxs
SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwogICAgIGlmIChzcGVjaWFsaXphdGlv
bktpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCkKICAgICAgICAgaW5saW5pbmdCYWxhbmNlID0gc3Rk
OjptaW4oaW5saW5pbmdCYWxhbmNlLCBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1
Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCkpOwpAQCAtMTQxNywxNyArMTQ5MSwx
MDUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHNp
bXBsaWZpY2F0aW9uIG9uIHRoZSBmbHkgYW5kIHRoaXMgaGVscHMgcmVkdWNlIGNvbXBpbGUgdGlt
ZXMsIGJ1dCB3ZSBjYW4gb25seSBsZXZlcmFnZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUg
d2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4K
ICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtT
dGF0dXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAg
ICAgICAgY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwg
c3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0OworICAgICAg
ICAKKyAgICAgICAgLy8gT25seSB1c2VkIGZvciB2YXJhcmdzIGNhbGxzLgorICAgICAgICB1bnNp
Z25lZCBtYW5kYXRvcnlNaW5pbXVtID0gMDsKKyAgICAgICAgdW5zaWduZWQgbWF4TnVtQXJndW1l
bnRzID0gMDsKKworICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkp
IHsKKyAgICAgICAgICAgIGlmIChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IGNhbGxMaW5rU3RhdHVzWzBdLmZ1bmN0aW9uRXhlY3V0YWJsZSgpKQorICAgICAgICAgICAg
ICAgIG1hbmRhdG9yeU1pbmltdW0gPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50
KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5TWluaW11bSA9
IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAg
ICAgICAgbWF4TnVtQXJndW1lbnRzID0gc3RkOjptYXgoCisgICAgICAgICAgICAgICAgY2FsbExp
bmtTdGF0dXMubWF4TnVtQXJndW1lbnRzKCksCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5TWlu
aW11bSArIDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBzb3J0IG9mIHByZXRl
bmQgdGhhdCB0aGlzICppcyogdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCB3ZXJlIHBhc3Nl
ZC4KKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gbWF4TnVtQXJndW1l
bnRzOworICAgICAgICAgICAgCisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IHJlZ2lzdGVy
T2Zmc2V0T3JGaXJzdEZyZWVSZWcgKyAxOworICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0g
bWF4TnVtQXJndW1lbnRzOyAvLyBpbmNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICByZWdp
c3Rlck9mZnNldCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCisgICAgICAgICAgICAgICAg
c3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZz
ZXQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0
ZXJPZmZzZXRPckZpcnN0RnJlZVJlZzsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgcmVzdWx0ID0g
YXR0ZW1wdFRvSW5saW5lQ2FsbCgKICAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1bHRP
cGVyYW5kLCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyRG9lc05v
cm1hbExpbmtpbmcsIHByZWRpY3Rpb24sCi0gICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UpOwot
ICAgICAgICBpZiAoIXJlc3VsdCAmJiAhY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkKLSAgICAg
ICAgICAgIHVuZG9GdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSk7CisgICAgICAgICAg
ICBpbmxpbmluZ0JhbGFuY2UsIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXRO
b2RlLCBzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNhbGwgPyB0aGlzQXJndW1lbnQgOiBW
aXJ0dWFsUmVnaXN0ZXIoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdmFy
YXJncyBjYWxsLCB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGFyZ3VtZW50cyByaWdodCBub3cuCisg
ICAgICAgICAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGludCByZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0ID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS5vZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQgKyBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgICAgICAgICBpbnQgcmVt
YXBwZWRBcmd1bWVudFN0YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkpLm9mZnNl
dCgpOworCisgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9sb2FkVmFyYXJnc0RhdGEuYWRkKCk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0
YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKHJlbWFwcGVkQXJndW1lbnRTdGFydCArIDEpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhLT5jb3VudCA9IFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lz
dGVyT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAgICAgICAg
IGRhdGEtPm9mZnNldCA9IGFyZ3VtZW50c09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS0+bGltaXQgPSBtYXhOdW1Bcmd1bWVudHM7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1h
bmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5pbXVtOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9hZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgZ2V0KGFy
Z3VtZW50c0FyZ3VtZW50KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
SW4gREZHIElSIGJlZm9yZSBTU0EsIHdlIGNhbm5vdCBpbnNlcnQgY29udHJvbCBmbG93IGJldHdl
ZW4gYWZ0ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCB0aGUg
bGFzdCBTZXRBcmd1bWVudC4gVGhpcyBpc24ndCBhIHByb2JsZW0gb25jZSB3ZSBnZXQgdG8gREZH
CisgICAgICAgICAgICAgICAgICAgIC8vIFNTQS4gRm9ydHVuYXRlbHksIHdlIGFsc28gaGF2ZSBv
dGhlciByZWFzb25zIGZvciBub3QgaW5zZXJ0aW5nIGNvbnRyb2wgZmxvdworICAgICAgICAgICAg
ICAgICAgICAvLyBiZWZvcmUgU1NBLgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lz
dGVyT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCksIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyBwcmV0dHkgbGFtZSwgYnV0IGl0IHdpbGwgZm9yY2UgdGhlIGNv
dW50IHRvIGJlIGZsdXNoZWQgYXMgYW4gaW50LiBUaGlzIGRvZXNuJ3QKKyAgICAgICAgICAgICAg
ICAgICAgLy8gbWF0dGVyIHZlcnkgbXVjaCwgc2luY2Ugb3VyIHVzZSBvZiBhIFNldEFyZ3VtZW50
IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKKyAgICAgICAgICAgICAgICAgICAg
Ly8gbW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCisgICAgICAgICAgICAgICAgICAgIGNvdW50VmFy
aWFibGUtPnByZWRpY3QoU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICAgICAgY291bnRWYXJp
YWJsZS0+bWVyZ2VJc1Byb2ZpdGFibGVUb1VuYm94KHRydWUpOworICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBzZXRBcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZv
KGNvdW50VmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3Vt
ZW50Q291bnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChzcGVjaWFs
aXphdGlvbktpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhpc0FyZ3VtZW50KSwgSW1tZWRp
YXRlTmFrZWRTZXQpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gMTsgYXJndW1lbnQgPCBtYXhOdW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
KHJlbWFwcGVkQXJndW1lbnRTdGFydCArIGFyZ3VtZW50KSwgZmFsc2UpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsgLy8gV2Ug
Y3VycmVudGx5IGhhdmUgbm93aGVyZSB0byBwdXQgdGhlIHR5cGUgY2hlY2sgb24gdGhlIExvYWRW
YXJhcmdzLiBMb2FkVmFyYXJncyBpcyBlZmZlY3RmdWwsIHNvIGFmdGVyIGl0IGZpbmlzaGVzLCB3
ZSBjYW5ub3QgZXhpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRm9yIGEgd2hpbGUgaXQgaGFkIGJlZW4gbXkgaW50ZW50aW9uIHRvIGRvIHRo
aW5ncyBsaWtlIHRoaXMgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJl
ZGljdGlvbiBpbmplY3Rpb24gcGhhc2UuIEJ1dCBpbiB0aGlzIGNhc2UgaXQncyByZWFsbHkgYmVz
dCB0byBkbyBpdCBoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBpdCdz
IGhlcmUgdGhhdCB3ZSBoYXZlIGFjY2VzcyB0byB0aGUgdmFyaWFibGUgYWNjZXNzIGRhdGFzIGZv
ciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlubGluaW5nIHdlJ3JlIGFib3V0IHRv
IGRvLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNvbWV0aGluZyBlbHNlIHRoYXQncyBpbnRlcmVzdGluZyBoZXJlIGlzIHRoYXQgd2UnZCBy
ZWFsbHkgbG92ZSB0byBnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZWRpY3Rpb25z
IGZyb20gdGhlIGFyZ3VtZW50cyBsb2FkZWQgYXQgdGhlIGNhbGxzaXRlLCByYXRoZXIgdGhhbiB0
aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyByZWNlaXZlZCBpbnNpZGUg
dGhlIGNhbGxlZS4gQnV0IHRoYXQgcHJvYmFibHkgd29uJ3QgbWF0dGVyIGZvciBtb3N0CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjYWxscy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjb2RlQmxvY2sgJiYgYXJndW1lbnQgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBjb2RlQmxvY2stPnZhbHVl
UHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGxvY2tlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRv
R3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpLCBzZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9KTsKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAg
ICAgICAgIGRhdGFMb2coIkRvbmUgaW5saW5pbmcgKHNpbXBsZSkuXG4iKTsKICAgICAgICAgICAg
IGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKKyAgICAgICAg
ICAgIGRhdGFMb2coIlJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE0MzcsMTEgKzE1OTksOSBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gZG8gbW9yZSBkZXRhaWxlZCBw
b2x5dmFyaWFudC9wb2x5bW9ycGhpYyBwcm9maWxpbmc7IGFuZCBzZWNvbmQsIGl0IHJlZHVjZXMg
Y29tcGlsZSB0aW1lcyBpbgogICAgIC8vIHRoZSBERkcuIEFuZCBieSBwb2x5dmFyaWFudCBwcm9m
aWxpbmcgd2UgbWVhbiBwb2x5dmFyaWFudCBwcm9maWxpbmcgb2YgKnRoaXMqIGNhbGwuIE5vdGUg
dGhhdAogICAgIC8vIHdlIGNvdWxkIGltcHJvdmUgdGhhdCBhc3BlY3Qgb2YgdGhpcyBieSBkb2lu
ZyBwb2x5bW9ycGhpYyBpbmxpbmluZyBidXQgaGF2aW5nIHRoZSBwcm9maWxpbmcKLSAgICAvLyBh
bHNvLiBDdXJyZW50bHkgd2Ugb3B0IGFnYWluc3QgdGhpcywgYnV0IGl0IGNvdWxkIGJlIGludGVy
ZXN0aW5nLiBUaGF0IHdvdWxkIHJlcXVpcmUgaGF2aW5nIGEKLSAgICAvLyBzZXBhcmF0ZSBub2Rl
IGZvciBjYWxsIGVkZ2UgcHJvZmlsaW5nLgotICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgdGhlIG5v
dGlvbiBvZiBhIHNlcGFyYXRlIGNhbGwgZWRnZSBwcm9maWxpbmcgbm9kZS4KLSAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDMzCi0gICAgaWYgKCFpc0ZU
TChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNDYWxs
SW5saW5pbmcoKSkgeworICAgIC8vIGFsc28uCisgICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxh
bi5tb2RlKSB8fCAhT3B0aW9uczo6ZW5hYmxlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcoKQorICAg
ICAgICB8fCBJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgewogICAgICAgICBpZiAo
dmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyAoaGFyZCku
XG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigp
LCAiXG4iKTsKQEAgLTE0ODIsNiArMTY0Miw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKE5vZGUKICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksICJcbiIpOwogICAgIH0KICAgICAKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSByZWdp
c3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgIAogICAgIC8vIFRoaXMgbWFrZXMgbWUgd2lz
aCB0aGF0IHdlIHdlcmUgaW4gU1NBIGFsbCB0aGUgdGltZS4gV2UgbmVlZCB0byBwaWNrIGEgdmFy
aWFibGUgaW50byB3aGljaCB0bwogICAgIC8vIHN0b3JlIHRoZSBjYWxsZWUgc28gdGhhdCBpdCB3
aWxsIGJlIGFjY2Vzc2libGUgdG8gYWxsIG9mIHRoZSBibG9ja3Mgd2UncmUgYWJvdXQgdG8gY3Jl
YXRlLiBXZQogICAgIC8vIGdldCBhd2F5IHdpdGggZG9pbmcgYW4gaW1tZWRpYXRlLXNldCBoZXJl
IGJlY2F1c2Ugd2Ugd291bGRuJ3QgaGF2ZSBwZXJmb3JtZWQgYW55IHNpZGUgZWZmZWN0cwpAQCAt
MTUyNiw3ICsxNjg4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9k
ZQogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0ZW1wdFRvSW5saW5lQ2FsbCgKICAg
ICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVz
W2ldLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJMaW5rc01hbnVhbGx5LCBwcmVkaWN0aW9uLAot
ICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlKTsKKyAgICAgICAgICAgIGlubGluaW5nQmFsYW5j
ZSwgWyZdIChDb2RlQmxvY2sqKSB7IH0pOwogICAgICAgICAKICAgICAgICAgaWYgKCFpbmxpbmlu
Z1Jlc3VsdCkgewogICAgICAgICAgICAgLy8gVGhhdCBmYWlsZWQgc28gd2UgbGV0IHRoZSBibG9j
ayBkaWUuIE5vdGhpbmcgaW50ZXJlc3Rpbmcgc2hvdWxkIGhhdmUgYmVlbiBhZGRlZCB0bwpAQCAt
MTYxMCwxNCArMTc3MiwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhO
b2RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1p
bk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tz
RnVuY3Rvcj4KK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3Bl
cmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpCiB7CiAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5taW4oKQorICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRP
cGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAKICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRoLm1pbih4KQorICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVyVXNlKSk7CiAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CkBAIC0xNjI1LDYgKzE3OTAsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlCiAgICAgfQogICAgIAog
ICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAzKSB7IC8vIE1hdGgubWluKHgs
IHkpCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKG9wLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDIsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTYzMywxMSArMTc5OSwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50
IHJlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KK2Jvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2lj
IGludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcykKIHsKICAgICBzd2l0Y2ggKGludHJpbnNpYykgewogICAgIGNhc2UgQWJzSW50
cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7
IC8vIE1hdGguYWJzKCkKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CkBAIC0xNjQ1LDYgKzE4MTMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bnRyaW5zaWMoaW50CiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRp
bmdQb2ludEFicygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIGluc2Vy
dENoZWNrcygpOwogICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChBcml0aEFicywgZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAg
ICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgT3ZlcmZsb3cpKQogICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5
T3ZlcmZsb3dJbkRGRyk7CkBAIC0xNjUzLDI5ICsxODIyLDMzIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICB9CiAKICAgICBjYXNlIE1pbkludHJpbnNpYzoK
LSAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0aE1pbiwgcmVn
aXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgcmV0dXJu
IGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0aE1pbiwgcmVnaXN0ZXJPZmZzZXQsIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnNlcnRDaGVja3MpOwogICAgICAgICAKICAgICBj
YXNlIE1heEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVy
YW5kLCBBcml0aE1heCwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0aE1heCwg
cmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnNlcnRDaGVja3Mp
OwogICAgICAgICAKICAgICBjYXNlIFNxcnRJbnRyaW5zaWM6CiAgICAgY2FzZSBDb3NJbnRyaW5z
aWM6CiAgICAgY2FzZSBTaW5JbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID09IDEpIHsKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0Nv
bnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKGludHJpbnNpYykgewogICAg
ICAgICBjYXNlIFNxcnRJbnRyaW5zaWM6CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgo
QXJpdGhTcXJ0LCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZz
ZXQpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBDb3NJbnRyaW5zaWM6CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhD
b3MsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNp
bkludHJpbnNpYzoKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChBcml0aFNpbiwgZ2V0
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCkBAIC0xNjg4LDkgKzE4NjEsMTEgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNhc2UgUG93SW50
cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8IDMpIHsK
ICAgICAgICAgICAgIC8vIE1hdGgucG93KCkgYW5kIE1hdGgucG93KHgpIHJldHVybiBOYU4uCisg
ICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3Rh
bnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQorICAgICAgICBp
bnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHhPcGVyYW5kID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgeU9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rl
ck9mZnNldCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFk
ZFRvR3JhcGgoQXJpdGhQb3csIGdldCh4T3BlcmFuZCksIGdldCh5T3BlcmFuZCkpKTsKQEAgLTE3
MTAsNiArMTg4NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQK
ICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1
b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIGlu
c2VydENoZWNrcygpOwogICAgICAgICAgICAgTm9kZSogYXJyYXlQdXNoID0gYWRkVG9HcmFwaChB
cnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiks
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhcnJheVB1c2gpOwogICAg
ICAgICAgICAgCkBAIC0xNzMzLDYgKzE5MDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7
CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIE5vZGUqIGFycmF5UG9w
ID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5m
byhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVy
T2Zmc2V0KSkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5k
KSwgYXJyYXlQb3ApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzQ3LDYgKzE5MjQs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlm
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNl
dCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIE5vZGUqIGNoYXJDb2Rl
ID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpT
dHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0KGluZGV4T3BlcmFuZCkpOwpA
QCAtMTc1OSw2ICsxOTM3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXhPcGVyYW5k
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAg
ICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcEluZm8oQXJyYXlN
b2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0KGluZGV4
T3BlcmFuZCkpOwpAQCAtMTc3MCw2ICsxOTQ5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
IT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgTm9kZSogY2hhckNvZGUg
PSBhZGRUb0dyYXBoKFN0cmluZ0Zyb21DaGFyQ29kZSwgZ2V0KGluZGV4T3BlcmFuZCkpOwogCkBA
IC0xNzgyLDYgKzE5NjIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMo
aW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAg
ICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cEV4ZWMsIE9wSW5mbygw
KSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwg
cmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lz
dGVyT2Zmc2V0KSkpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQp
LCByZWdFeHBFeGVjKTsKICAgICAgICAgCkBAIC0xNzkyLDYgKzE5NzMsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
KyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBhZGRU
b0dyYXBoKFJlZ0V4cFRlc3QsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZWdFeHBFeGVjKTsKICAgICAgICAgCkBAIC0x
ODAxLDYgKzE5ODMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50
CiAgICAgY2FzZSBJTXVsSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAhPSAzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbnNl
cnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxlZnRPcGVyYW5kID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmlnaHRPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVn
aXN0ZXJPZmZzZXQpOwogICAgICAgICBOb2RlKiBsZWZ0ID0gZ2V0KGxlZnRPcGVyYW5kKTsKQEAg
LTE4MTIsMjkgKzE5OTUsMzQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGludAogICAgIGNhc2UgRlJvdW5kSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhGUm91bmQsIGdl
dChvcGVyYW5kKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgREZHVHJ1ZUludHJpbnNpYzogeworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwganNDb25zdGFudChqc0Jvb2xl
YW4odHJ1ZSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIE9TUkV4aXRJbnRyaW5zaWM6IHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAg
IGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudFVu
ZGVmaW5lZCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIElzRmluYWxUaWVySW50cmluc2ljOiB7CisgICAgICAgIGluc2VydENoZWNrcygpOwogICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAgICAgICAganND
b25zdGFudChqc0Jvb2xlYW4oT3B0aW9uczo6dXNlRlRMSklUKCkgPyBpc0ZUTChtX2dyYXBoLm1f
cGxhbi5tb2RlKSA6IHRydWUpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBTZXRJbnQzMkhlYXBQcmVkaWN0aW9uSW50cmluc2ljOiB7CisgICAgICAg
IGluc2VydENoZWNrcygpOwogICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAg
IGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQpAQCAtMTg0Nyw2ICsyMDM1LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNhc2UgRmlhdEludDUy
SW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAy
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIGlmIChlbmFibGVJbnQ1MigpKQogICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChGaWF0
SW50NTIsIGdldChvcGVyYW5kKSkpOwpAQCAtMTg2MCw5ICsyMDQ5LDEwIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIENoZWNrc0Z1bmN0b3I+CiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVUeXBlZEFycmF5
Q29uc3RydWN0b3IoCiAgICAgaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qIGZ1
bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCi0gICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBUeXBlZEFycmF5VHlwZSB0eXBlKQorICAgIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgVHlwZWRBcnJheVR5cGUgdHlwZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0
Q2hlY2tzKQogewogICAgIGlmICghaXNUeXBlZFZpZXcodHlwZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTE5MDYsMTYgKzIwOTYsMjEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
VHlwZWRBcnJheUNvbgogICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAh
PSAyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBpbnNlcnRDaGVja3MoKTsK
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAgICBhZGRUb0dy
YXBoKE5ld1R5cGVkQXJyYXksIE9wSW5mbyh0eXBlKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbigKICAgICBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJu
YWxGdW5jdGlvbiogZnVuY3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKLSAgICBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogeworICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY29uc3RhbnQgaW50ZXJuYWwgZnVuY3Rp
b24gIiwgSlNWYWx1ZShmdW5jdGlvbiksICJcbiIpOworICAgIAogICAgIC8vIElmIHdlIGV2ZXIg
ZmluZCB0aGF0IHdlIGhhdmUgYSBsb3Qgb2YgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgd2Ugc3Bl
Y2lhbGl6ZSBmb3IsCiAgICAgLy8gdGhlbiB3ZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBzb21lIHNv
cnQgb2YgaGFzaHRhYmxlIGRpc3BhdGNoLCBvciBtYXliZSBldmVuCiAgICAgLy8gZGlzcGF0Y2gg
c3RyYWlnaHQgdGhyb3VnaCB0aGUgTWV0aG9kVGFibGUgb2YgdGhlIEludGVybmFsRnVuY3Rpb24u
IEJ1dCBmb3Igbm93LApAQCAtMTkyNyw2ICsyMTIyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgICAgICBpZiAoZnVuY3Rpb24tPmdsb2JhbE9iamVjdCgp
ICE9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAgIGluc2VydENoZWNrcygpOwog
ICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgewogICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKE5ld0FycmF5V2l0aFNpemUsIE9wSW5mbyhBcnJheVdpdGhVbmRlY2lkZWQpLCBn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwpAQCAt
MTk0MSw2ICsyMTM3LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRl
cgogICAgIH0KICAgICAKICAgICBpZiAoZnVuY3Rpb24tPmNsYXNzSW5mbygpID09IFN0cmluZ0Nv
bnN0cnVjdG9yOjppbmZvKCkpIHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgIAog
ICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPD0gMSkKQEAgLTE5NTgsNyArMjE1Niw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICBmb3IgKHVuc2lnbmVkIHR5cGVJbmRleCA9
IDA7IHR5cGVJbmRleCA8IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgKyt0eXBlSW5kZXgp
IHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoCiAg
ICAgICAgICAgICByZXN1bHRPcGVyYW5kLCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLAotICAgICAgICAgICAgaW5kZXhUb1R5cGVkQXJyYXlUeXBl
KHR5cGVJbmRleCkpOworICAgICAgICAgICAgaW5kZXhUb1R5cGVkQXJyYXlUeXBlKHR5cGVJbmRl
eCksIGluc2VydENoZWNrcyk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0zMTIyLDQzICszMzIwLDcwIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCB0aGlzUmVnID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmd1bWVudHMgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGZpcnN0RnJl
ZVJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
Zmlyc3RWYXJBcmdPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChhcmd1bWVudHMsIGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoIW1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LT5zbG93QXJndW1lbnRzKCkpOwotCi0gICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1l
bnRzTm90Q3JlYXRlZCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5l
Q2FsbEZyYW1lKCktPmFyZ3VtZW50cy5zaXplKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVyIG9mZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUg
bGFzdCB1c2VkIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0
aGUgdGhpbmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCi0gICAgICAgICAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOwotICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXQgLT0gYXJnQ291bnQ7IC8vIFdlIHdpbGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KLSAg
ICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7
IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFtZSBoZWFkZXIuCisgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT51bmNo
ZWNrZWRBcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpCisgICAgICAgICAgICAgICAgJiYgIW1f
aW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5zbG93QXJndW1lbnRz
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZSgpLT5pc1ZhcmFyZ3MoKQorICAgICAgICAgICAg
ICAgICAgICAmJiAhZmlyc3RWYXJBcmdPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQpOworCisgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGFyZ0NvdW50ID0gaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50cy5zaXplKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUg
cmVnaXN0ZXIgb2Zmc2V0LiBXZSBzdGFydCB3aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFu
ZAorICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGFkanVzdCBmb3IgdGhlIHRoaW5ncyB3ZSB3
YW50IGluIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICAgICAgICAgICAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSBmaXJzdEZyZWVSZWcgKyAxOworICAgICAgICAgICAgICAgICAgICByZWdpc3Rlck9m
ZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBwYXNzaW5nIHNvbWUgYXJndW1lbnRzLgor
ICAgICAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplOyAvLyBXZSB3aWxsIHByZXRlbmQgdG8gaGF2ZSBhIGNhbGwgZnJhbWUgaGVhZGVy
LgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50
IHJpZ2h0LgorICAgICAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IC1XVEY6OnJvdW5k
VXBUb011bHRpcGxlT2YoCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FsaWdubWVudFJl
Z2lzdGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsKKwor
ICAgICAgICAgICAgICAgICAgICBlbnN1cmVMb2NhbHMoCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYnl0ZWNvZGUgd291bGRuJ3QgaGF2
ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4gQnV0IHdlJ2xsIGRvIGl0IGFuZCBtYWtlIGl0CisgICAg
ICAgICAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0ZWNvZGUgaGFkIGRvbmUgaXQuCisg
ICAgICAgICAgICAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcp
KSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSwgSW1tZWRpYXRlTmFrZWRTZXQp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNhbGwoCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQsIENhbGwsIENvZGVGb3JDYWxsLCBPUENPREVfTEVOR1RI
KG9wX2NhbGxfdmFyYXJncyksCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWUsIGFyZ0Nv
dW50LCByZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vIEVtaXQgQ2FsbEZvcndhcmRWYXJhcmdzCisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgbWVhbnMgd2UgY2Fubm90IGlubGluZSBmb3J3YXJkZWQgdmFyYXJncyBj
YWxscyBpbnNpZGUgYSB2YXJhcmdzCisgICAgICAgICAgICAgICAgLy8gY2FsbCBmcmFtZS4gV2Ug
d2lsbCBwcm9iYWJseSBmaXggdGhhdCBvbmNlIHdlIGZpbmFsbHkgZ2V0IHJpZCBvZiB0aGUKKyAg
ICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgb2JqZWN0IHNwZWNpYWwtY2FzaW5nLgorICAgICAg
ICAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9jYWxsVmFyYXJnc0Rh
dGEuYWRkKCk7CisgICAgICAgICAgICAgICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJz
dFZhckFyZ09mZnNldDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBj
YWxsID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZvcndhcmRWYXJhcmdz
LCBPcEluZm8oZGF0YSksIE9wSW5mbyhnZXRQcmVkaWN0aW9uKCkpLAorICAgICAgICAgICAgICAg
ICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZSkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRo
aXNSZWcpKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1
bHQpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKKyAgICAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4KLSAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKLSAgICAgICAgICAgICAgICBzdGFj
a0FsaWdubWVudFJlZ2lzdGVycygpLAotICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7
Ci0KLSAgICAgICAgICAgIGVuc3VyZUxvY2FscygKLSAgICAgICAgICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
cihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFRoZSBieXRlY29kZSB3b3VsZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQg
d2UnbGwgZG8gaXQgYW5kIG1ha2UgaXQKLSAgICAgICAgICAgIC8vIGxvb2sgbGlrZSB0aGUgYnl0
ZWNvZGUgaGFkIGRvbmUgaXQuCi0gICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0
ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIodGhp
c1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVudCkKLSAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgICAgICAgICByZXN1bHQsIENh
bGwsIENvZGVGb3JDYWxsLCBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksCi0gICAgICAg
ICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICAgICAg
aGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsVmFyYXJncywgQ29kZUZv
ckNhbGwpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKICAgICAg
ICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsK
KyAgICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3Ry
dWN0VmFyYXJncywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9jb25zdHJ1Y3RfdmFyYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBj
YXNlIG9wX2puZXFfcHRyOgogICAgICAgICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9y
IG5vdy4gSXQgbWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCiAgICAg
ICAgICAgICAvLyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1v
cmUgZ2VuZXJhbCwgc2luY2UgaXQncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTk2LDYgKzk2LDggQEAgaW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayog
Y29kZUJsbwogCiBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29k
ZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHBjKQogeworICAgIFVOVVNF
RF9QQVJBTShjb2RlQmxvY2spOyAvLyBUaGlzIGZ1bmN0aW9uIGRvZXMgc29tZSBieXRlY29kZSBw
YXJzaW5nLiBPcmRpbmFyaWx5IGJ5dGVjb2RlIHBhcnNpbmcgcmVxdWlyZXMgdGhlIG93bmluZyBD
b2RlQmxvY2suIEl0J3Mgc29ydCBvZiBzdHJhbmdlIHRoYXQgd2UgZG9uJ3QgdXNlIGl0IGhlcmUg
cmlnaHQgbm93LgorICAgIAogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX2Vu
dGVyOgogICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CkBAIC0xODIsNiArMTg0LDggQEAgQ2FwYWJp
bGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdGhyb3dfc3Rh
dGljX2Vycm9yOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgog
ICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6
CiAgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6CkBAIC0yMjMsMTQgKzIyNyw2IEBAIENh
cGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAgICAgcmV0dXJuIENh
bkNvbXBpbGVBbmRJbmxpbmU7CiAgICAgfQogCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0g
ICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQg
PT0gY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpCi0gICAgICAgICAgICAm
JiAhcGNbNl0udS5vcGVyYW5kKQotICAgICAgICAgICAgcmV0dXJuIENhbklubGluZTsKLSAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNgotICAgICAgICByZXR1cm4gQ2Fu
bm90Q29tcGlsZTsKLQogICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogCiAgICAgY2FzZSBvcF9jcmVh
dGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKICAgICBjYXNlIG9wX25ld19mdW5jOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxODAx
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDkgKzg2LDcgQEAgaW5saW5lIENhcGFiaWxp
dHlMZXZlbCBmdW5jdGlvbkNhcGFiaWxpdAogICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5k
KENhbkNvbXBpbGVBbmRJbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKICAgICBpZiAo
bWlnaHRDb21waWxlICYmICFtaWdodElubGluZSkKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJC
b3VuZChDYW5Db21waWxlLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdo
dENvbXBpbGUgJiYgbWlnaHRJbmxpbmUpCi0gICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQo
Q2FuSW5saW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7Ci0gICAgaWYgKCFtaWdodENvbXBp
bGUgJiYgIW1pZ2h0SW5saW5lKQorICAgIGlmICghbWlnaHRDb21waWxlKQogICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IHJldHVybiBDYW5ub3RDb21waWxlOwpAQCAtMTQyLDYgKzE0MCwxNCBAQCBpbmxpbmUgYm9vbCBt
aWdodElubGluZUZ1bmN0aW9uRm9yKENvZGVCCiAgICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVuY3Rp
b25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKTsKIH0KIAoraW5saW5lIGJvb2wgbWlnaHRDb21waWxl
RnVuY3Rpb25Gb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKK3sKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgcmV0dXJuIG1p
Z2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChjb2RlQmxvY2spOworICAgIEFTU0VSVChraW5kID09
IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNv
bnN0cnVjdChjb2RlQmxvY2spOworfQorCiBpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9u
KENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiBtaWdodElubGluZUZ1bmN0aW9u
Rm9yKGNvZGVCbG9jaywgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgwMTg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2Niw2ICszNjYsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAg
IGNhc2UgTmF0aXZlQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBD
YWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgIGNhc2Ug
VG9QcmltaXRpdmU6CiAgICAgY2FzZSBJbjoKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3Ro
U2FmZToKQEAgLTQwMSw2ICs0MDQsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFj
dEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAg
ICAgLy8gVGhpcyBhY3R1YWxseSB3cml0ZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFzIHdlbGwuIEJ1
dCB3aGVuIGl0IHJlYWRzIHRoZSBhcnJheSwgaXQgZG9lcworICAgICAgICAvLyBzbyBpbiBhIHdh
eSB0aGF0IG1heSB0cmlnZ2VyIGdldHRlcnMgb3IgdmFyaW91cyB0cmFwcy4KKyAgICAgICAgcmVh
ZChXb3JsZCk7CisgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFw
KFZhcmlhYmxlcywgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9j
YXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkpLCBub2RlKTsKQEAgLTg4MSw3ICs4OTEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBERkdfQ1JBU0goZ3JhcGgsIG5vZGUs
IHRvQ1N0cmluZygiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIiwgR3JhcGg6Om9wTmFtZShub2Rl
LT5vcCgpKSkuZGF0YSgpKTsKIH0KIAogY2xhc3MgTm9PcENsb2JiZXJpemUgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxMCArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJERkdDb21t
b24uaCIKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworI2lm
IEVOQUJMRShERkdfSklUKQogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAg
LTEzMSwzICsxMzIsMjggQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFBy
bwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKK25hbWVzcGFjZSBXVEYgeworCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKQoreworICAgIHN3aXRjaCAoY2Fw
YWJpbGl0eUxldmVsKSB7CisgICAgY2FzZSBDYW5ub3RDb21waWxlOgorICAgICAgICBvdXQucHJp
bnQoIkNhbm5vdENvbXBpbGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FuQ29tcGls
ZToKKyAgICAgICAgb3V0LnByaW50KCJDYW5Db21waWxlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6CisgICAgICAgIG91dC5wcmludCgiQ2FuQ29tcGls
ZUFuZElubGluZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXBhYmlsaXR5TGV2ZWxO
b3RTZXQ6CisgICAgICAgIG91dC5wcmludCgiQ2FwYWJpbGl0eUxldmVsTm90U2V0Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Miw3ICsyOTIsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0gQ2FwYWJpbGl0eUxldmVsIHsKICAgICBDYW5u
b3RDb21waWxlLAotICAgIENhbklubGluZSwKICAgICBDYW5Db21waWxlLAogICAgIENhbkNvbXBp
bGVBbmRJbmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxldmVsTm90U2V0CkBAIC0zMTIsNyArMzExLDYg
QEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShDYXBhYmlsaXR5TGV2ZWwgbAogaW5saW5lIGJvb2wg
Y2FuSW5saW5lKENhcGFiaWxpdHlMZXZlbCBsZXZlbCkKIHsKICAgICBzd2l0Y2ggKGxldmVsKSB7
Ci0gICAgY2FzZSBDYW5JbmxpbmU6CiAgICAgY2FzZSBDYW5Db21waWxlQW5kSW5saW5lOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMzI1LDE0ICszMjMsNiBAQCBpbmxp
bmUgQ2FwYWJpbGl0eUxldmVsIGxlYXN0VXBwZXJCb3VuZChDCiAgICAgc3dpdGNoIChhKSB7CiAg
ICAgY2FzZSBDYW5ub3RDb21waWxlOgogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLSAg
ICBjYXNlIENhbklubGluZToKLSAgICAgICAgc3dpdGNoIChiKSB7Ci0gICAgICAgIGNhc2UgQ2Fu
SW5saW5lOgotICAgICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ2FuSW5saW5lOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIENh
bm5vdENvbXBpbGU7Ci0gICAgICAgIH0KICAgICBjYXNlIENhbkNvbXBpbGU6CiAgICAgICAgIHN3
aXRjaCAoYikgewogICAgICAgICBjYXNlIENhbkNvbXBpbGU6CkBAIC0zNjQsNSArMzU0LDExIEBA
IGlubGluZSBib29sIHNob3VsZFNob3dEaXNhc3NlbWJseShDb21waWwKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgSlNDOjpERkc6OkNhcGFiaWxpdHlMZXZlbCk7CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCiAjZW5kaWYgLy8gREZHQ29tbW9uX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDEw
IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENvbXBh
cmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2Fz
ZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2Fk
VmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2ZUNh
bGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBCcmVha3BvaW50OgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4MDE4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTMsNiArMzEzLDE4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnN0b3JhZ2VQ
b2ludGVyKCkpKTsKICAgICBpZiAobm9kZS0+aGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgp
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEoKSk7CisgICAgaWYgKG5vZGUtPmhhc0NhbGxWYXJhcmdzRGF0YSgpKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJmaXJzdFZhckFyZ09mZnNldCA9ICIsIG5vZGUtPmNhbGxWYXJhcmdzRGF0
YSgpLT5maXJzdFZhckFyZ09mZnNldCk7CisgICAgaWYgKG5vZGUtPmhhc0xvYWRWYXJhcmdzRGF0
YSgpKSB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdGFydCA9ICIsIGRhdGEtPnN0YXJ0
LCAiLCBjb3VudCA9ICIsIGRhdGEtPmNvdW50KTsKKyAgICAgICAgaWYgKGRhdGEtPm1hY2hpbmVT
dGFydC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgbWFjaGluZVN0YXJ0ID0g
IiwgZGF0YS0+bWFjaGluZVN0YXJ0KTsKKyAgICAgICAgaWYgKGRhdGEtPm1hY2hpbmVDb3VudC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgbWFjaGluZUNvdW50ID0gIiwgZGF0
YS0+bWFjaGluZUNvdW50KTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIGRhdGEt
Pm9mZnNldCwgIiwgbWFuZGF0b3J5TWluaW11bSA9ICIsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0p
OworICAgICAgICBvdXQucHJpbnQoIiwgbGltaXQgPSAiLCBkYXRhLT5saW1pdCk7CisgICAgfQog
ICAgIGlmIChub2RlLT5pc0NvbnN0YW50KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgcG9p
bnRlckR1bXBJbkNvbnRleHQobm9kZS0+Y29uc3RhbnQoKSwgY29udGV4dCkpOwogICAgIGlmIChu
b2RlLT5pc0p1bXAoKSkKQEAgLTQwMCw3ICs0MTIsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tI
ZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBo
aXNbaV07CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhp
Tm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBw
aGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgQCIs
IHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+bG9jYWwoKSwgIiwiLCBwaGlOb2RlLT5y
ZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7
CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4
KCkpOwogICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewpAQCAtODY5LDEw
ICs4ODEsMTIgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaQogICAg
ICAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZWcub2Zmc2V0KCkgPCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsCisgICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNrOjpD
YWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmIChyZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQor
ICAgICAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdz
KCkKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVnLm9mZnNldCgpID09IEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMzUsNiArMTI0OSw1MSBA
QCB2b2lkIEdyYXBoOjpoYW5kbGVBc3NlcnRpb25GYWlsdXJlKAogICAgIGNyYXNoKCp0aGlzLCB0
b0NTdHJpbmcoIldoaWxlIGhhbmRsaW5nIGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxu
XG4iKSwgZmlsZSwgbGluZSwgZnVuY3Rpb24sIGFzc2VydGlvbik7CiB9CiAKK1ZhbHVlUHJvZmls
ZSogR3JhcGg6OnZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgICAgIAorICAgIGlmIChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKKyAgICAgICAgaWYgKCFu
b2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKTsKKyAgICAg
ICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9hcmd1bWVudHNbYXJndW1lbnRdOworICAgICAgICBp
ZiAoIWFyZ3VtZW50Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBp
ZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gYXJndW1lbnROb2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
cHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOworICAgIH0K
KyAgICAgICAgCisgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAgIHJl
dHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgIHJldHVybiBudWxs
cHRyOworfQorCitNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOworICAgIAorICAgIGlm
IChWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSA9IHZhbHVlUHJvZmlsZUZvcihub2RlKSkKKyAg
ICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKTsK
KyAgICAKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKKyAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCisgICAg
ICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKKyAgICAgICAgICAgICAgICBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCwgbm9kZS0+bG9jYWwoKSkpOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOworfQorCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4MDE4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NzIsNTAgKzQ3Miw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
cHJvZmlsZWRCbG9jay0+dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCk7CiAgICAgfQogICAg
IAotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCi0gICAgewot
ICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
Ci0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+aGFz
TG9jYWwoKnRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaW50IGFyZ3VtZW50
ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7Ci0gICAgICAgICAgICBOb2RlKiBhcmd1bWVu
dE5vZGUgPSBtX2FyZ3VtZW50c1thcmd1bWVudF07Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50
Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBhcmd1bWVudE5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmV0
dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQotICAg
IHsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChWYWx1ZVByb2ZpbGUqIHZh
bHVlUHJvZmlsZSA9IHZhbHVlUHJvZmlsZUZvcihub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKLSAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAotICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ss
Ci0gICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAg
ICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4LCBub2RlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlKCk7Ci0gICAgfQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxl
Rm9yKE5vZGUqIG5vZGUpOworICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKTsKICAgICAKICAgICBib29sIHVz
ZXNBcmd1bWVudHMoKSBjb25zdAogICAgIHsKQEAgLTg1Myw2ICs4MTEsOCBAQCBwdWJsaWM6CiAg
ICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAg
IEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBC
YWc8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRh
OworICAgIEJhZzxDYWxsVmFyYXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOworICAgIEJhZzxM
b2FkVmFyYXJnc0RhdGE+IG1fbG9hZFZhcmFyZ3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJp
YWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVu
ZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTIyLDYgKzEyMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVF
eGNlcHRpb25IYW5kbGUKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxs
ZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhl
IENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV9n
cmFwaC5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAjaWYgQ1BVKFg4NikK
ICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB1c2UgdGhlIGNhbGwgYWJzdHJhY3Rpb24sIGJ1dCB0
aGlzIGlzIGN1cnJlbnRseSBpbiB0aGUgU3BlY3VsYXRpdmVKSVQgbGF5ZXIhCkBAIC0yNDcsNyAr
MjQ4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAg
ICBKU0NhbGxSZWNvcmQmIHJlY29yZCA9IG1fanNDYWxsc1tpXTsKICAgICAgICAgQ2FsbExpbmtJ
bmZvJiBpbmZvID0gKnJlY29yZC5tX2luZm87CiAgICAgICAgIFRodW5rR2VuZXJhdG9yIGdlbmVy
YXRvciA9IGxpbmtUaHVua0dlbmVyYXRvckZvcigKLSAgICAgICAgICAgIGluZm8uY2FsbFR5cGUg
PT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNh
bGwsCisgICAgICAgICAgICBpbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpLAogICAgICAgICAgICAg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhyZWNvcmQubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIobV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0
b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVy
bkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVjb3JkLm1fc2xvd0Nh
bGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCShyZXZp
c2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRDYWxsZWU6CiAgICAgY2FzZSBHZXRTY29wZToK
ICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICBjYXNlIENvdW50RXhlY3V0aW9uOgogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywyMCBAQCBzdHJ1Y3Qg
U3dpdGNoRGF0YSB7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7CiB9OwogCitzdHJ1Y3QgQ2Fs
bFZhcmFyZ3NEYXRhIHsKKyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQ7Cit9OworCitzdHJ1Y3Qg
TG9hZFZhcmFyZ3NEYXRhIHsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhcnQ7IC8vIExvY2FsIGZv
ciB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgY291bnQ7IC8vIExvY2Fs
IGZvciB0aGUgY291bnQuCisgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVTdGFydDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUNvdW50OworICAgIHVuc2lnbmVkIG9mZnNldDsgLy8gV2hp
Y2ggYXJyYXkgZWxlbWVudCB0byBzdGFydCB3aXRoLiBVc3VhbGx5IHRoaXMgaXMgMC4KKyAgICB1
bnNpZ25lZCBtYW5kYXRvcnlNaW5pbXVtOyAvLyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9uIHRo
ZSBzdGFjayB0aGF0IG11c3QgYmUgaW5pdGlhbGl6ZWQ7IGlmIHRoZSBhcnJheSBpcyB0b28gc2hv
cnQgdGhlbiB0aGUgbWlzc2luZyBlbGVtZW50cyBtdXN0IGdldCB1bmRlZmluZWQuIERvZXMgbm90
IGluY2x1ZGUgInRoaXMiLgorICAgIHVuc2lnbmVkIGxpbWl0OyAvLyBNYXhpbXVtIG51bWJlciBv
ZiBlbGVtZW50cyB0byBsb2FkLiBJbmNsdWRlcyAidGhpcyIuCit9OworCiAvLyBUaGlzIHR5cGUg
dXNlZCBpbiBwYXNzaW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9y
OwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRl
eCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCiAvLyBhIGNvbnN0YW50IGluZGV4
LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGUqLgpAQCAtODk1LDYgKzkwOSwz
NSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJy
aWVyPFVua25vd24+Kj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc0NhbGxW
YXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2Fz
ZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAg
IGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIENhbGxWYXJhcmdzRGF0YSogY2FsbFZhcmFyZ3NEYXRhKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNDYWxsVmFyYXJnc0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Q2FsbFZhcmFyZ3NEYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29s
IGhhc0xvYWRWYXJhcmdzRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2Fk
VmFyYXJnczsKKyAgICB9CisgICAgCisgICAgTG9hZFZhcmFyZ3NEYXRhKiBsb2FkVmFyYXJnc0Rh
dGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0xvYWRWYXJhcmdzRGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxMb2FkVmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAg
fQorICAgIAogICAgIGJvb2wgaGFzUmVzdWx0KCkKICAgICB7CiAgICAgICAgIHJldHVybiAhIXJl
c3VsdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2
aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogICAgIC8qIHRoaXMgbXVzdCBiZSB0aGUgZGlyZWN0bHkgc3Vic2VxdWVudCBw
cm9wZXJ0eSBwdXQuIE5vdGUgdGhhdCBQdXRCeVZhbCAqL1wKICAgICAvKiBvcGNvZGVzIHVzZSBW
YXJBcmdzIGJlYXVzZSB0aGV5IG1heSBoYXZlIHVwIHRvIDQgY2hpbGRyZW4uICovXAogICAgIG1h
Y3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oTG9hZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRCeVZhbERp
cmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oUHV0
QnlWYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1
dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXApAQCAtMjE3
LDYgKzIxOCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBDYWxs
cy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhDYWxsVmFyYXJn
cywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENhbGxGb3J3
YXJkVmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KENvbnN0cnVjdFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhOYXRpdmVDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhOYXRpdmVDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU2LDYgKzE1NiwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBMb2Fk
VmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFy
YXJnc0RhdGEoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRh
LT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSW50
MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRh
LT5saW1pdDsgaS0tOykgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQorICAgICAg
ICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1YWxS
ZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE1Miw3ICsxNTIsOSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
Q0NhbGxIZWxwZXJzCiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKGlubGluZUNhbGxGcmFtZS0+
a2luZCkgewogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKLSAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDogeworICAgICAgICBjYXNlIElubGluZUNhbGxG
cmFtZTo6Q29uc3RydWN0OgorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFy
Z3M6CisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOiB7CiAg
ICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9CiAgICAgICAgICAgICAgICAg
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5k
ZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExp
bmtJbmZvKTsKQEAgLTE5NSwxMiArMTk3LDEzIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDQ2FsbEhlbHBlcnMKICAgICAgICAgaWYgKHRydWVSZXR1cm5QQykKICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodHJ1ZVJldHVyblBDKSwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0jaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihiYXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q29k
ZUJsb2NrKSkpOworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisg
ICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0LnN0
b3JlNjQoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZz
ZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVP
ZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJz
Ojp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSks
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQuc3Rv
cmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICAKQEAgLTIwOCwxMiArMjExLDEwIEBAIHZv
aWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgaWYgKGJhc2Vs
aW5lQ29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpCiAgICAgICAgICAgICBqaXQubG9hZFB0cihB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYmFzZWxpbmVDb2Rl
QmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgpKSksIEdQUkluZm86OnJlZ1QzKTsK
ICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0g
ICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxp
bmVDb2RlQmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNvZGVCbG9jaykpKTsK
ICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkp
OwogICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKICAgICAg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNC
eXRlY29kZUluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKICAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJz
Ojp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSks
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAgICAg
aml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0
YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgw
MTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDE4LDYgKzEwMTgsMjcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKAogICAgIHNldC0+bm90aWZ5V3JpdGUodm0s
IHZhbHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3JpdGUiKTsKIH0KIAoraW50MzJfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRB
cmd1bWVudHMpOworICAgIAorICAgIHJldHVybiBzaXplT2ZWYXJhcmdzKGV4ZWMsIGFyZ3VtZW50
cywgZmlyc3RWYXJBcmdPZmZzZXQpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxl
bmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpT
VmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOworICAg
IAorICAgIGxvYWRWYXJhcmdzKGV4ZWMsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnREZXN0
KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgCisgICAgZm9yIChpbnQzMl90IGkg
PSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisgICAgICAgIGV4ZWMtPnIoZmly
c3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKK30KKwogZG91YmxlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICBy
ZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjUsNiAr
MTI1LDggQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMwogY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRl
eCwgSlNTdHJpbmcqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShF
eGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7CitpbnQz
Ml90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSosIGludDMyX3QgZmly
c3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IG9mZnNldCwg
aW50MzJfdCBsZW5ndGgsIGludDMyX3QgbWFuZGF0b3J5TWluaW11bSk7CiAKIGludDY0X3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0ludDUyKEVuY29kZWRKU1Zh
bHVlKTsKIGludDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG91YmxlVG9JbnQ1
Mihkb3VibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZp
c2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NywxMCArODcsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi1zdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyYXBo
LCBjb25zdCBjaGFyKiB0ZXh0KQorc3RhdGljIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBo
JiBncmFwaCwgY29uc3QgY2hhciogdGV4dCwgYm9vbCBmb3JjZUR1bXAgPSBmYWxzZSkKIHsKICAg
ICBHcmFwaER1bXBNb2RlIG1vZGVGb3JGaW5hbFZhbGlkYXRlID0gRHVtcEdyYXBoOwotICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKGdyYXBoLm1fcGxhbi5tb2RlKSkgeworICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKGdyYXBoLm1fcGxhbi5tb2RlKSB8fCBmb3JjZUR1
bXApIHsKICAgICAgICAgZGF0YUxvZyh0ZXh0LCAiXG4iKTsKICAgICAgICAgZ3JhcGguZHVtcCgp
OwogICAgICAgICBtb2RlRm9yRmluYWxWYWxpZGF0ZSA9IERvbnREdW1wR3JhcGg7CkBAIC0zNjks
NyArMzY5LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAg
ICAgICAgICAgcmV0dXJuIEZhaWxQYXRoOwogICAgICAgICB9CiAKLSAgICAgICAgZHVtcEFuZFZl
cmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiKTsKKyAgICAg
ICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmlu
ZzoiLCBzaG91bGRTaG93RGlzYXNzZW1ibHkobW9kZSkpOwogICAgICAgICAKICAgICAgICAgYm9v
bCBoYXZlTExWTTsKICAgICAgICAgU2FmZXBvaW50OjpSZXN1bHQgc2FmZXBvaW50UmVzdWx0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9j
YWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
MTEgKzEzMywyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVn
aXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgbV9y
ZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgd3Jp
dGVUb3AoKQogICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncykg
eworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIG5vdGUgdGhlIHdyaXRlcyB0byB0aGUgbG9j
YWxzIHRoYXQgd2lsbCBzdG9yZSB0aGUgYXJyYXkgZWxlbWVudHMgYW5kCisgICAgICAgICAgICAv
LyBjb3VudC4KKyAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICBtX3dyaXRlKGRhdGEtPmNvdW50KTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAg
ICAgIG1fd3JpdGUoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0
byBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBDYWxsRm9yd2FyZFZhcmFyZ3MsIHNpbmNlIGl0IHJl
YWRzCisgICAgICAgIC8vIG91ciBhcmd1bWVudHMgdGhlIHNhbWUgd2F5IHRoYXQgYW55IGVmZmVj
dGZ1bCB0aGluZyBtaWdodC4KKyAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLm1fY29kZUJs
b2NrLT51c2VzQXJndW1lbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
Z3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCiAgICAgICAgICAg
ICAgICAgbV93cml0ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE4OSw2ICsxODksMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVU
eXBlJiBzdAogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoKICAgICBj
YXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0
VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBO
ZXdBcnJheVdpdGhTaXplOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiVHlwZVByb2Zp
bGVyTG9nLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTYzOCwzNSAr
NjM5LDE3MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxCiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAgYm9vbCBpc0Nh
bGwgPSBub2RlLT5vcCgpID09IENhbGw7Ci0gICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIEFTU0VS
VChub2RlLT5vcCgpID09IENvbnN0cnVjdCk7Ci0KLSAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0
aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UK
LSAgICAvLyBmb3IgaXQuCi0gICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gaXNDYWxsID8gMCA6
IDE7Ci0KLSAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlID0gaXNDYWxsID8gQ2Fs
bExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7Ci0KLSAgICBFZGdlIGNh
bGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGls
ZCgpXTsKKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAgIGJvb2wgaXND
YWxsOworICAgIGJvb2wgaXNWYXJhcmdzOworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
IGNhc2UgQ2FsbDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGw7CisgICAg
ICAgIGlzQ2FsbCA9IHRydWU7CisgICAgICAgIGlzVmFyYXJncyA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0lu
Zm86OkNvbnN0cnVjdDsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAgIGlzVmFyYXJn
cyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6
Q2FsbFZhcmFyZ3M7CisgICAgICAgIGlzQ2FsbCA9IHRydWU7CisgICAgICAgIGlzVmFyYXJncyA9
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAg
ICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3M7CisgICAgICAgIGlz
Q2FsbCA9IGZhbHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgImJh
ZCBub2RlIHR5cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgLy8gVGhlIGNhbGwg
aW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyBlaXRoZXIgdGhlIGZ1bmN0aW9uIChub3JtYWwg
Y2FsbCkgb3IgdGhlCi0gICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxsKS4gc3Vic2VxdWVudCBj
aGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KLSAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUt
Pm51bUNoaWxkcmVuKCkgLSAxOworICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCku
Y2hpbGQobm9kZSwgMCk7CiAgICAgCi0gICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsg
ZHVtbXlUaGlzQXJndW1lbnQ7Ci0KLSAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIobnVtQXJncyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpOworICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21l
aG93LiBWYXJhcmdzIGlzIHRyaWNraWVyLgorICAgIGlmIChpc1ZhcmFyZ3MpIHsKKyAgICAgICAg
Q2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CiAKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAgICBFZGdlIGFy
Z0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgp
ICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7Ci0g
ICAgICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBh
cmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRHUFIoKTsKLSAgICAgICAgdXNlKGFyZ0VkZ2UpOwor
ICAgICAgICBHUFJSZWcgYXJndW1lbnRzUGF5bG9hZEdQUjsKKyAgICAgICAgR1BSUmVnIGFyZ3Vt
ZW50c1RhZ0dQUjsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUjI7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICAgICAgCisgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAg
Ly8gV2UgYXZvaWQgY2FsbGluZyBmbHVzaFJlZ2lzdGVycygpIGluc2lkZSB0aGUgY29udHJvbCBm
bG93IG9mIENhbGxGb3J3YXJkVmFyYXJncy4KKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGF1dG8gbG9hZEFyZ3VtZW50c0dQUiA9IFsm
XSAoR1BSUmVnIHJlc2VydmVkR1BSKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBD
YWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNUYWdHUFIgPSBK
SVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAg
ICAgYXJndW1lbnRzUGF5bG9hZEdQUiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKHJl
c2VydmVkR1BSLCBhcmd1bWVudHNUYWdHUFIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQz
MigKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OnRhZ0ZvcigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNUYWdH
UFIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5n
cmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzUGF5bG9hZEdQUik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgICAgICAgICBsb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAg
ICAgICAgICAgICAgIGFyZ3VtZW50c1RhZ0dQUiA9IGFyZ3VtZW50cy50YWdHUFIoKTsKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudHNQYXlsb2FkR1BSID0gYXJndW1lbnRzLnBheWxvYWRHUFIoKTsK
KyAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgICAgICAgICAgdW5sb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBz
Y3JhdGNoR1BSMSA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c1BheWxv
YWRHUFIsIGFyZ3VtZW50c1RhZ0dQUiwgcmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgc2NyYXRj
aEdQUjIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNQYXlsb2FkR1BS
LCBhcmd1bWVudHNUYWdHUFIsIHNjcmF0Y2hHUFIxLCByZXNlcnZlZEdQUik7CisgICAgICAgICAg
ICBzY3JhdGNoR1BSMyA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFyZ3VtZW50c1Bh
eWxvYWRHUFIsIGFyZ3VtZW50c1RhZ0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCByZXNl
cnZlZEdQUik7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBsb2FkQXJndW1lbnRzR1BS
KEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBo
YXZlIHRoZSB3aG9sZSByZWdpc3RlciBmaWxlIHRvIG91cnNlbHZlcywgYW5kIGFyZ3VtZW50c0dQ
UiBoYXMgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gU2VsZWN0IHNvbWUgc2Ny
YXRjaCByZWdpc3RlcnMuCisgICAgICAgIAorICAgICAgICAvLyBXZSB3aWxsIHVzZSBzY3JhdGNo
R1BSMiB0byBwb2ludCB0byBvdXIgc3RhY2sgZnJhbWUuCisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBudW1Vc2VkU3RhY2tTbG90cyA9IG1faml0LmdyYXBoKCkubV9uZXh0TWFjaGluZUxvY2Fs
OworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGF2ZUFyZ3VtZW50czsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIERvIHRoZSBo
b3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAg
ICAgICAvLyBGSVhNRTogZG8gdGhpcyBvcHRpbWl6YXRpb24gYXQgdGhlIElSIGxldmVsIGluc3Rl
YWQgb2YgZHluYW1pY2FsbHkgYnkgdGVzdGluZyB0aGUKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50
cyByZWdpc3Rlci4gVGhpcyB3aWxsIGhhcHBlbiBvbmNlIHdlIGdldCByaWQgb2YgdGhlIGFyZ3Vt
ZW50cyBsYXp5IGNyZWF0aW9uIGFuZAorICAgICAgICAgICAgLy8gbGF6eSB0ZWFyLW9mZi4KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAg
ICAgICAgICAgICAgIGFyZ3VtZW50c1RhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKG51bVVzZWRTdGFja1Nsb3RzKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgZW1p
dFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UobV9qaXQsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgICAgICAg
ICAgcmVzdWx0R1BSID0gc2NyYXRjaEdQUjI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhh
dmVBcmd1bWVudHMgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZt
X2ppdCk7CisgICAgICAgIH0KIAotICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgbV9q
aXQuY2FsbGVlQXJndW1lbnRUYWdTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOwotICAgICAg
ICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50UGF5bG9h
ZFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gUmlnaHQg
bm93LCBhcmd1bWVudHMgaXMgaW4gYXJndW1lbnRzVGFnR1BSL2FyZ3VtZW50c1BheWxvYWRHUFIg
YW5kIHRoZSByZWdpc3RlciBmaWxlIGlzCisgICAgICAgIC8vIGZsdXNoZWQuCisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncywgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIGFyZ3VtZW50c1RhZ0dQUiwgYXJndW1lbnRzUGF5bG9hZEdQUiwgbnVtVXNlZFN0
YWNrU2xvdHMsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIC8v
IE5vdyB3ZSBoYXZlIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0aGUgY2FsbGVlIGZyYW1lLCBidXQg
d2UndmUgbG9zdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQuCisgICAgICAgIC8vIFJlY29uc3RydWN0
IHRoZSBhcmd1bWVudHMgb3BlcmFuZCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBjYWxsZWUgZnJhbWUu
CisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3RhY2tTbG90cyksIHNjcmF0Y2hH
UFIxKTsKKyAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShtX2ppdCwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIGZhbHNlLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjEpOworICAgICAgICBtX2pp
dC5hZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lk
KikpKSksIHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFt
ZSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIxLCBhcmd1bWVudHNUYWdHUFIs
IGFyZ3VtZW50c1BheWxvYWRHUFIsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxs
Rm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJm1faml0KTsK
KyAgICAgICAgCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBp
c0ZsdXNoZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDYWxsRm9y
d2FyZFZhcmFyZ3MpCisgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAK
KyAgICAgICAgaWYgKGlzQ2FsbCkgeworICAgICAgICAgICAgLy8gTm93IHNldCB1cCB0aGUgInRo
aXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc0FyZ3VtZW50KHRo
aXMsIG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzID8gbm9kZS0+Y2hpbGQyKCkgOiBu
b2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc0FyZ3VtZW50VGFnR1BSID0g
dGhpc0FyZ3VtZW50LnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNBcmd1bWVudFBh
eWxvYWRHUFIgPSB0aGlzQXJndW1lbnQucGF5bG9hZEdQUigpOworICAgICAgICAgICAgdGhpc0Fy
Z3VtZW50LnVzZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRo
aXNBcmd1bWVudFRhZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50VGFnU2xvdCgwKSk7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRoaXNBcmd1bWVudFBheWxvYWRHUFIsIEpJVENv
bXBpbGVyOjpjYWxsZWVBcmd1bWVudFBheWxvYWRTbG90KDApKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlz
IG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQorICAgICAgICAvLyBmb3IgaXQu
CisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOworICAgICAg
ICAKKyAgICAgICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyBlaXRo
ZXIgdGhlIGZ1bmN0aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCisgICAgICAgIC8vIHJlY2VpdmVy
IChtZXRob2QgY2FsbCkuIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCisg
ICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAg
ICAgIAorICAgICAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1
bWVudDsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihudW1BcmdzKSwgbV9qaXQuY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNr
OjpBcmd1bWVudENvdW50KSk7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVBhc3NlZEFyZ3M7IGkrKykgeworICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQu
Z3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKKyAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKKyAgICAgICAgICAg
IEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgYXJn
UGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICB1c2UoYXJnRWRnZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoYXJnVGFnR1BSLCBtX2pp
dC5jYWxsZWVBcmd1bWVudFRhZ1Nsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50UGF5
bG9hZFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CkBAIC03MjQsNiArODYx
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICBpbmZv
LT5jb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOwogICAgIGluZm8tPmNhbGxlZUdQ
UiA9IGNhbGxlZVBheWxvYWRHUFI7CiAgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93
Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaW5mbyk7CisgICAgCisgICAgLy8gSWYgd2Ugd2VyZSB2YXJh
cmdzLCB0aGVuIGFmdGVyIHRoZSBjYWxscyBhcmUgZG9uZSwgd2UgbmVlZCB0byByZWVzdGFibGlz
aCBvdXIgc3RhY2sgcG9pbnRlci4KKyAgICBpZiAoaXNWYXJhcmdzKQorICAgICAgICBtX2ppdC5h
ZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmdyYXBoKCkuc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpJVENvbXBpbGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgpAQCAt
NDE1Niw5ICs0Mjk3LDU5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxW
YXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0
VmFyYXJnczoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAg
Y2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNU
YWdHUFI7CisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNQYXlsb2FkR1BSOworICAgICAgICB7Cisg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgYXJndW1lbnRzVGFnR1BSID0gYXJndW1lbnRzLnRhZ0dQUigpOworICAg
ICAgICAgICAgYXJndW1lbnRzUGF5bG9hZEdQUiA9IGFyZ3VtZW50cy5wYXlsb2FkR1BSKCk7Cisg
ICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBhcmd1bWVudHNUYWdHUFIsIGFyZ3VtZW50c1BheWxvYWRHUFIsIGRhdGEtPm9mZnNl
dCk7CisgICAgICAgIAorICAgICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50c1RhZ0dQUiA9IGFyZ3VtZW50cy50YWdH
UFIoKTsKKyAgICAgICAgICAgIGFyZ3VtZW50c1BheWxvYWRHUFIgPSBhcmd1bWVudHMucGF5bG9h
ZEdQUigpOworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAg
ICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBs
ZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAvLyBmcm9tIHRoZSBz
dGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZy
b20gYSBzcGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29s
dXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92
YXJhcmdzIHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorCisgICAgICAgIEdQ
UlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQorICAgICAgICAgICAgSklUQ29tcGlsZXI6
OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c1RhZ0dQ
UiwgYXJndW1lbnRzUGF5bG9hZEdQUik7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGlu
Z1RoaXNHUFIpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVmFyYXJn
c092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAorICAgICAgICAgICAgICAgIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+
bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVk
aW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7
CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBk
YXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1RhZ0dQUiwgYXJndW1lbnRzUGF5
bG9hZEdQUiwgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+bWFu
ZGF0b3J5TWluaW11bSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246IHsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTQyNzgsOSArNDQ2OSwyMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBBU1NFUlQoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1l
bnRDb3VudCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgbV9qaXQubW92ZSgKKyAgICAgICAg
ICAgICAgICBUcnVzdGVkSW1tMzIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3Vu
dFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1
YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVy
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgfQogICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00Mjk2LDE0ICs0NDk4LDIxIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjp0YWdGb3IobV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksCiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZSgK
LSAgICAgICAgICAgICAgICBJbW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSksCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMy
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSwKICAgICAgICAgICAgICAgICByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0
YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0
ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgICAg
ICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogdGhl
IHNsb3cgcGF0aCBnZW5lcmF0b3Igc2hvdWxkIHBlcmZvcm0gYSBmb3J3YXJkIHNwZWN1bGF0aW9u
IHRoYXQgdGhlCkBAIC00MzM5LDcgKzQ1NDgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSkpOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgaWYg
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKQEAgLTQzNDcs
NyArNDU1NywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIGluZGV4R1BSLAogICAgICAgICAgICAgICAgICAgICBJbW0zMihu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0g
MSkpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0UGF5bG9hZEdQ
Uik7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOwor
ICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihK
U1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0UGF5
bG9hZEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dFBheWxvYWRHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAg
ICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKQEAgLTQ0MTYsMTQgKzQ2MzEsMjAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVn
aXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksCiAgICAgICAgICAgICAgICAgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAo
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAg
ICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCiAgICAgICAgICAg
ICAgICAgICAgIGluZGV4R1BSLAogICAgICAgICAgICAgICAgICAgICBJbW0zMihub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5
bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAg
ICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpB
cmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0UGF5bG9hZEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRH
UFIpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAogICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCByZXN1bHRQYXls
b2FkR1BSKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUu
aCIKKyNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0
ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogCkBAIC02MjQsMzggKzYy
NSwxNjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1pc2NTdHJpY3RFcQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogewotICAgIGJvb2wgaXNDYWxs
ID0gbm9kZS0+b3AoKSA9PSBDYWxsOwotICAgIGlmICghaXNDYWxsKQotICAgICAgICBERkdfQVNT
RVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKLSAgICAK
LSAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2Vk
IGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKLSAgICAvLyBmb3IgaXQuCi0gICAgaW50IGR1bW15
VGhpc0FyZ3VtZW50ID0gaXNDYWxsID8gMCA6IDE7CisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlw
ZSBjYWxsVHlwZTsKKyAgICBib29sIGlzQ2FsbDsKKyAgICBib29sIGlzVmFyYXJnczsKKyAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGw6CisgICAgICAgIGNhbGxUeXBlID0g
Q2FsbExpbmtJbmZvOjpDYWxsOworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1Zh
cmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAg
ICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAgICAgIGlzQ2FsbCA9
IGZhbHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAg
Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOworICAgICAgICBpc0NhbGwgPSB0
cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25z
dHJ1Y3RWYXJhcmdzOworICAgICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdz
ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNI
KG1faml0LmdyYXBoKCksIG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwg
MCk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGlzQ2FsbCA/
IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgIC8vIEdv
dHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlzIHRyaWNraWVyLgorICAg
IGlmIChpc1ZhcmFyZ3MpIHsKKyAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+
Y2FsbFZhcmFyZ3NEYXRhKCk7CisKKyAgICAgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIxOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjI7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8gV2UgYXZvaWQgY2FsbGlu
ZyBmbHVzaFJlZ2lzdGVycygpIGluc2lkZSB0aGUgY29udHJvbCBmbG93IG9mIENhbGxGb3J3YXJk
VmFyYXJncy4KKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGF1dG8gbG9hZEFyZ3VtZW50c0dQUiA9IFsmXSAoR1BSUmVnIHJlc2VydmVk
R1BSKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3Mp
IHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2Ny
YXRjaEdQUihyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KAorICAg
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRHUFIgIT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgbG9jayhyZXNlcnZlZEdQUik7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAg
ICAgICAgICAgICAgIHVubG9jayhyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2Ny
YXRjaEdQUjEgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNHUFIsIHJl
c2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIyID0gSklUQ29tcGlsZXI6OnNlbGVj
dFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgcmVzZXJ2ZWRHUFIpOworICAg
ICAgICAgICAgc2NyYXRjaEdQUjMgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1
bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgcmVzZXJ2ZWRHUFIpOworICAgICAg
ICB9OworICAgICAgICAKKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihJbnZhbGlkR1BSUmVnKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGUgd2hvbGUgcmVn
aXN0ZXIgZmlsZSB0byBvdXJzZWx2ZXMsIGFuZCBhcmd1bWVudHNHUFIgaGFzIHRoZQorICAgICAg
ICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFNlbGVjdCBzb21lIHNjcmF0Y2ggcmVnaXN0ZXJzLgor
ICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lsbCB1c2Ugc2NyYXRjaEdQUjIgdG8gcG9pbnQgdG8g
b3VyIHN0YWNrIGZyYW1lLgorCisgICAgICAgIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzID0g
bV9qaXQuZ3JhcGgoKS5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgICAgIAorICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBoYXZlQXJndW1lbnRzOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFy
YXJncykgeworICAgICAgICAgICAgLy8gRG8gdGhlIGhvcnJpZmljIGZvby5hcHBseSh0aGlzLCBh
cmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBkbyB0aGlzIG9w
dGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBieSB0ZXN0
aW5nIHRoZQorICAgICAgICAgICAgLy8gYXJndW1lbnRzIHJlZ2lzdGVyLiBUaGlzIHdpbGwgaGFw
cGVuIG9uY2Ugd2UgZ2V0IHJpZCBvZiB0aGUgYXJndW1lbnRzIGxhenkgY3JlYXRpb24gYW5kCisg
ICAgICAgICAgICAvLyBsYXp5IHRlYXItb2ZmLgorICAgICAgICAgICAgCisgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmd1bWVudHNHUFIp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIobnVt
VXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBlbWl0U2V0dXBWYXJh
cmdzRnJhbWVGYXN0Q2FzZShtX2ppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUs
IGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgICAgICAgICByZXN1bHRH
UFIgPSBzY3JhdGNoR1BSMjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGF2ZUFyZ3VtZW50
cyA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVz
aGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gUmlnaHQgbm93LCBhcmd1bWVudHMgaXMgaW4g
YXJndW1lbnRzR1BSIGFuZCB0aGUgcmVnaXN0ZXIgZmlsZSBpcyBmbHVzaGVkLgorICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIG51bVVzZWRTdGFja1Nsb3RzLCBkYXRhLT5maXJzdFZh
ckFyZ09mZnNldCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgd2UgaGF2ZSB0aGUgYXJndW1l
bnQgY291bnQgb2YgdGhlIGNhbGxlZSBmcmFtZSwgYnV0IHdlJ3ZlIGxvc3QgdGhlIGFyZ3VtZW50
cyBvcGVyYW5kLgorICAgICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQg
d2hpbGUgcHJlc2VydmluZyB0aGUgY2FsbGVlIGZyYW1lLgorICAgICAgICBsb2FkQXJndW1lbnRz
R1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIGVtaXRTZXRW
YXJhcmdzRnJhbWUobV9qaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBmYWxzZSwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMigt
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCBzY3JhdGNoR1BSMSwgSklU
Q29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBzY3JhdGNoR1BSMSwgYXJndW1lbnRzR1BSLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5r
KCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0aGUgYXJndW1lbnRzIGFycmF5IGFueW1vcmUuCisgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoaXNDYWxsKSB7CisgICAgICAgICAgICAvLyBOb3cgc2V0IHVw
IHRoZSAidGhpcyIgYXJndW1lbnQuCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzQXJn
dW1lbnQodGhpcywgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MgPyBub2RlLT5jaGls
ZDIoKSA6IG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzQXJndW1lbnRH
UFIgPSB0aGlzQXJndW1lbnQuZ3ByKCk7CisgICAgICAgICAgICB0aGlzQXJndW1lbnQudXNlKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQodGhpc0FyZ3VtZW50R1BS
LCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlz
IG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQorICAgICAgICAvLyBmb3IgaXQu
CisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOwogICAgIAot
ICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2Rl
LT5maXJzdENoaWxkKCldOwotICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hp
bGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlCi0gICAg
Ly8gYXJndW1lbnRzLgotICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4o
KSAtIDE7CisgICAgICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMg
dGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlCisgICAgICAgIC8v
IGFyZ3VtZW50cy4KKyAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJl
bigpIC0gMTsKICAgICAKLSAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRo
aXNBcmd1bWVudDsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlU
aGlzQXJndW1lbnQ7CiAgICAgCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVQYXlsb2FkU2xv
dChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3Jh
cGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwotICAgICAgICBHUFJSZWcgYXJn
R1BSID0gYXJnLmdwcigpOwotICAgICAgICB1c2UoYXJnRWRnZSk7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7CisgICAgICAgICAgICBFZGdlIGFyZ0Vk
Z2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsg
MSArIGldOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwor
ICAgICAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAgICAgICAgIHVzZShh
cmdFZGdlKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BSLCBtX2ppdC5j
YWxsZWVBcmd1bWVudFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KGFyZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xvdChpICsg
ZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEpTVmFsdWVPcGVy
YW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2Fs
bGVlLmdwcigpOwotICAgIHVzZShjYWxsZWVFZGdlKTsKLSAgICBtX2ppdC5zdG9yZTY0KGNhbGxl
ZUdQUiwgbV9qaXQuY2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlZSkpOworICAgIGNhbGxl
ZS51c2UoKTsKKyAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6OmNhbGxl
ZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKICAgICAKICAgICBmbHVzaFJlZ2lzdGVycygp
OwogCkBAIC02OTIsNiArODE4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICBjYWxsTGlua0luZm8tPmNhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICAK
ICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBj
YWxsTGlua0luZm8pOworICAgIAorICAgIC8vIElmIHdlIHdlcmUgdmFyYXJncywgdGhlbiBhZnRl
ciB0aGUgY2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3VyIHN0YWNrIHBv
aW50ZXIuCisgICAgaWYgKGlzVmFyYXJncykKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJ
bW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5yZWFjaGFibGUgW1tjbGFu
Zzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYgYW55IHRlbXBsYXRlIGV4
cGFuc2lvbiB1c2VzIGl0CkBAIC00MjIxLDkgKzQzNTEsNTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3Ry
dWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6
CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAg
TG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAg
IAorICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICB7CisgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzR1BS
LCBkYXRhLT5vZmZzZXQpOworICAgICAgICAKKyAgICAgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50
cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1
bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9Cisg
ICAgICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIAorICAgICAg
ICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0
ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCisgICAgICAgIC8vIGZyb20g
dGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3Jv
bmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVz
dCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9j
YWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4CisKKyAgICAg
ICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9CisgICAgICAgICAgICBKSVRDb21w
aWxlcjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRz
R1BSKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVT
b3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWJvdmUsCisgICAgICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BS
LAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKKyAgICAgICAg
CisgICAgICAgIG1faml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgCisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIGRhdGEtPm1hY2hpbmVTdGFydC5v
ZmZzZXQoKSwgYXJndW1lbnRzR1BSLCBkYXRhLT5vZmZzZXQsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0
KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQ3JlYXRl
QWN0aXZhdGlvbjogewogICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgCkBAIC00MzI4
LDkgKzQ1MDUsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVn
aXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBpZiAo
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAg
ICAgICAgICBtX2ppdC5tb3ZlKAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSksCisg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAo
IW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAg
YXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRS
ZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5
bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
bV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICB9CiAgICAg
ICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTQzNDQsMjAgKzQ1MzIsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCiAgICAgICAgICAg
ICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZSgK
ICAgICAgICAgICAgICAgICBJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSksCiAg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENv
dW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmly
dHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0
ZXIpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8v
IEZJWE1FOiB0aGUgc2xvdyBwYXRoIGdlbmVyYXRvciBzaG91bGQgcGVyZm9ybSBhIGZvcndhcmQg
c3BlY3VsYXRpb24gdGhhdCB0aGUKLSAgICAgICAgLy8gcmVzdWx0IGlzIGFuIGludGVnZXIuIEZv
ciBub3cgd2UgcG9zdHBvbmUgdGhlIHNwZWN1bGF0aW9uIGJ5IGhhdmluZyB0aGlzIHJldHVybgot
ICAgICAgICAvLyBhIEpTVmFsdWUuCi0gICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBjcmVhdGVk
LCB0aGlzLCBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgsIHJlc3VsdEdQUiwKQEAgLTQzODQs
NyArNDU3NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAo
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKApAQCAtNDM5
Miw3ICs0NTgzLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIsCiAgICAgICAgICAgICAgICAgICAgIEltbTMy
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkg
LSAxKSkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFj
azo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJn
dW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCAwLApAQCAtNDQ0OSwxNCArNDY0NSwyMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAgICAgICAgIAotICAg
ICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAg
ICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAg
JiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7
CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCiAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICAgICAgSW1tMzIo
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IDEpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAg
ICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNr
OjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1
bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihK
SVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgcmVzdWx0R1BSKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTc4LDcgKzU3OCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgIH0KIAotI2lmbmRlZiBOREVCVUcKICAgICAvLyBVc2VkIHRvIEFT
U0VSVCBmbHVzaFJlZ2lzdGVycygpIGhhcyBiZWVuIGNhbGxlZCBwcmlvciB0bwogICAgIC8vIGNh
bGxpbmcgb3V0IGZyb20gSklUIGNvZGUgdG8gYSBDIGhlbHBlciBmdW5jdGlvbi4KICAgICBib29s
IGlzRmx1c2hlZCgpCkBAIC01OTMsNyArNTkyLDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KLSNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChO
b2RlKiBub2RlKQpAQCAtMTQ1NCw2ICsxNDUyLDI2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVy
YXRpb25fRUpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25l
ZCBhcmcyLCB1bnNpZ25lZCBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMyKGFy
ZzMpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEZfSklUT3BlcmF0aW9uX0VGSlpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB1bnNpZ25lZCBhcmczLCBHUFJSZWcgYXJnNCkKKyAg
ICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcy
LCBUcnVzdGVkSW1tMzIoYXJnMyksIGFyZzQpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRUpaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHVuc2lnbmVkIGFyZzIpCisgICAgewor
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZElt
bTMyKGFyZzIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VaSlpaWiBvcGVyYXRpb24sIHVuc2lnbmVk
IGFyZzEsIEdQUlJlZyBhcmcyLCB1bnNpZ25lZCBhcmczLCBHUFJSZWcgYXJnNCwgdW5zaWduZWQg
YXJnNSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tMzIoYXJnMSksIGFyZzIsIFRydXN0ZWRJbW0zMihhcmczKSwgYXJnNCwgVHJ1c3Rl
ZEltbTMyKGFyZzUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKKyAgICB9CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAvLyBF
bmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQgaW50ZWdlci4gV2hlbiBi
ZWluZyBjb21waWxlZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBiZSBhbGlnbmVkIGV2ZW4tbnVtYmVy
ZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBbc3BdKS4KQEAgLTE3NTAsNiArMTc2OCwyNiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCB1bnNpZ25lZCBhcmcyLCB1bnNpZ25l
ZCBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzFUYWcsIGFyZzFQYXlsb2FkLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihh
cmczKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihGX0pJVE9wZXJhdGlvbl9FRkpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkLCB1bnNpZ25l
ZCBhcmczLCBHUFJSZWcgYXJnNCkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyVGFnLCBhcmcyUGF5bG9hZCwgVHJ1c3RlZEltbTMyKGFy
ZzMpLCBhcmc0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHVuc2lnbmVkIGFyZzIpCisg
ICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVRhZywg
YXJnMVBheWxvYWQsIFRydXN0ZWRJbW0zMihhcmcyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FWkpa
Wlogb3BlcmF0aW9uLCB1bnNpZ25lZCBhcmcxLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQ
YXlsb2FkLCB1bnNpZ25lZCBhcmczLCBHUFJSZWcgYXJnNCwgdW5zaWduZWQgYXJnNSkKKyAgICB7
CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIo
YXJnMSksIGFyZzJUYWcsIGFyZzJQYXlsb2FkLCBUcnVzdGVkSW1tMzIoYXJnMyksIGFyZzQsIFRy
dXN0ZWRJbW0zMihhcmc1KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQogI3VuZGVmIEVBQklfMzJCSVRfRFVNTVlfQVJHCiAj
dW5kZWYgU0g0XzMyQklUX0RVTU1ZX0FSRwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCShyZXZpc2lvbiAxODAxODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgQml0VmVjdG9yIHVz
ZWRMb2NhbHM7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0
aGF0IGFyZSB1c2VkIGZyb20gSVIuCi0gICAgICAgIGJvb2wgaGFzR2V0TG9jYWxVbmxpbmtlZCA9
IGZhbHNlOworICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IGZhbHNlOwogICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC04MSw3ICs4MSwy
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB1
c2VkTG9jYWxzLnNldChvcGVyYW5kLnRvTG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhh
c0dldExvY2FsVW5saW5rZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBoYXNOb2Rlc1Ro
YXROZWVkRml4dXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5j
b3VudC5pc0xvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChk
YXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3Rh
cnQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVh
bGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0g
MSkuaXNMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEtPmxpbWl0OyBpLS07KSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2Fs
KCkpOworICAgICAgICAgICAgICAgICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhh
cHBlbi4KKyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKQEAgLTExMyw2ICsxMjgsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgdXNl
ZExvY2Fscy5zZXQoYXJndW1lbnRzUmVnaXN0ZXIudG9Mb2NhbCgpKTsKICAgICAgICAgICAgIHVz
ZWRMb2NhbHMuc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rl
cikudG9Mb2NhbCgpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0
dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQg
KyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBhcmd1bWVudC0tID4gMTspIHsKICAgICAg
ICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCiAgICAgICAgICAgICAg
ICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSArCkBA
IC0xNDgsMjQgKzE2OCwyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvblts
b2NhbF0gPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bdmFyaWFibGUtPmxvY2FsKCku
dG9Mb2NhbCgpXSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3Np
Z24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBpZiAoY29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvbltjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVn
aXN0ZXIoKS50b0xvY2FsKCldKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dHNSZWdpc3RlciA9CisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9j
aygpLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKAot
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bCi0gICAg
ICAgICAgICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKS50b0xvY2FsKCld
KQorICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIoY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKQogICAgICAgICAgICAg
ICAgID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpOwog
ICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1Jl
Z2lzdGVyKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT51
bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIGNv
ZGVCbG9jaygpLT5zZXRBY3RpdmF0aW9uUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltjb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lz
dGVyKCkudG9Mb2NhbCgpXSkpOworICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCBj
b2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgLy8gVGhpcyByZWdpc3RlciBpcyBuZXZlciB2YWxpZCBmb3IgREZHIGNvZGUgYmxv
Y2tzLgpAQCAtMTc2LDE1ICsxOTMsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS0+dXNlc0Fy
Z3VtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNS
ZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAgICAgICAgICAgICBh
bGxvY2F0aW9uW21fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKS50
b0xvY2FsKCldKTsKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1Jl
Z2lzdGVyID0gYXNzaWduKAorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBtX2dyYXBo
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpOwogCiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGFsbG9jYXRpb25bdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJh
bWUpKS50b0xvY2FsKCldKQorICAgICAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwg
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Io
aW5saW5lQ2FsbEZyYW1lKSkpCiAgICAgICAgICAgICAgICAgICAgID09IHVubW9kaWZpZWRBcmd1
bWVudHNSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lzdGVyKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50UmVnaXN0ZXIgPSBhc3NpZ24oCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24s
IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6
QXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpOyBhcmd1bWVudC0tID4gMTspIHsKICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9u
JiBwb3NpdGlvbiA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9uc1sKICAgICAgICAgICAgICAg
ICAgICAgZGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQgKyBhcmd1bWVudF07CkBAIC0yMjcsOSAr
MjQ4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cGFyYW1l
dGVyQ291bnQoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHN5bWJvbFRhYmxl
LT5wYXJhbWV0ZXJDb3VudCgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dB
cmd1bWVudHNbaV0gPSBzbG93QXJndW1lbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKHNsb3dBcmd1bWVudHNbaV0uaW5kZXgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChhbGxvY2F0aW9uW3JlZy50b0xvY2FsKCldKS5vZmZzZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IGFzc2lnbihhbGxvY2F0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIoc2xvd0FyZ3VtZW50c1tpXS5pbmRleCkpLm9mZnNldCgpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zbG93QXJn
dW1lbnRzID0gV1RGOjptb3ZlKG5ld1Nsb3dBcmd1bWVudHMpOwpAQCAtMjM3LDcgKzI1Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRml4IEdldExvY2FsVW5s
aW5rZWQncyB2YXJpYWJsZSByZWZlcmVuY2VzLgotICAgICAgICBpZiAoaGFzR2V0TG9jYWxVbmxp
bmtlZCkgeworICAgICAgICBpZiAoaGFzTm9kZXNUaGF0TmVlZEZpeHVwKSB7CiAgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKQEAgLTI0Niwx
MCArMjY1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPnVubGlu
a2VkTG9jYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoYWxsb2NhdGlvbltvcGVyYW5kLnRvTG9jYWwoKV0pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1hY2hpbmVMb2NhbChhc3NpZ24oYWxs
b2NhdGlvbiwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFs
bG9jYXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1h
Y2hpbmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgCkBAIC0yNjIsNiArMjg1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gc3JjOworICAg
ICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxv
Y2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgpXTsKKyAgICAgICAgICAgIGlmICht
eUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KIH07CiAKIGJvb2wgcGVyZm9ybVN0YWNrTGF5b3V0KEdy
YXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE4MDE4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGFydENyYXNoaW5n
KCk7IFwKICAgICAgICAgICAgIGRhdGFMb2dGKCJcblxuXG5BdCAiKTsgXAogICAgICAgICAgICAg
cmVwb3J0VmFsaWRhdGlvbkNvbnRleHQgY29udGV4dDsgXAotICAgICAgICAgICAgZGF0YUxvZ0Yo
IjogdmFsaWRhdGlvbiAlcyAoJXM6JWQpIGZhaWxlZC5cbiIsICNhc3NlcnRpb24sIF9fRklMRV9f
LCBfX0xJTkVfXyk7IFwKKyAgICAgICAgICAgIGRhdGFMb2dGKCI6IHZhbGlkYXRpb24gZmFpbGVk
OiAlcyAoJXM6JWQpLlxuIiwgI2Fzc2VydGlvbiwgX19GSUxFX18sIF9fTElORV9fKTsgXAogICAg
ICAgICAgICAgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgpOyBcCiAgICAgICAgICAgICBXVEZSZXBv
cnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElP
TiwgI2Fzc2VydGlvbik7IFwKICAgICAgICAgICAgIENSQVNIKCk7IFwKQEAgLTYyLDExICs2Miwx
MSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGFydENyYXNoaW5nKCk7IFwKICAgICAgICAgICAg
IGRhdGFMb2dGKCJcblxuXG5BdCAiKTsgXAogICAgICAgICAgICAgcmVwb3J0VmFsaWRhdGlvbkNv
bnRleHQgY29udGV4dDsgXAotICAgICAgICAgICAgZGF0YUxvZ0YoIjogdmFsaWRhdGlvbiAoJXMg
PSAiLCAjbGVmdCk7IFwKKyAgICAgICAgICAgIGRhdGFMb2dGKCI6IHZhbGlkYXRpb24gZmFpbGVk
OiAoJXMgPSAiLCAjbGVmdCk7IFwKICAgICAgICAgICAgIGRhdGFMb2cobGVmdCk7IFwKICAgICAg
ICAgICAgIGRhdGFMb2dGKCIpID09ICglcyA9ICIsICNyaWdodCk7IFwKICAgICAgICAgICAgIGRh
dGFMb2cocmlnaHQpOyBcCi0gICAgICAgICAgICBkYXRhTG9nRigiKSAoJXM6JWQpIGZhaWxlZC5c
biIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKyAgICAgICAgICAgIGRhdGFMb2dGKCIpICglczol
ZCkuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCiAgICAgICAgICAgICBkdW1wR3JhcGhJZkFw
cHJvcHJpYXRlKCk7IFwKICAgICAgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19G
SUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjbGVmdCAiID09ICIgI3JpZ2h0
KTsgXAogICAgICAgICAgICAgQ1JBU0goKTsgXApAQCAtNDU2LDYgKzQ1NiwxNCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIHNl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGFjdHMgbGlrZSBhIHJlc2V0LiBJdCdzIG9rIHRvIGhhdmUgYSBzZWNvbmQgR2V0TG9j
YWwgZm9yIGEgbG9jYWwgaW4gdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2sg
aWYgd2UgaGFkIGEgU2V0QXJndW1lbnQgZm9yIHRoYXQgbG9jYWwuCisgICAgICAgICAgICAgICAg
ICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7Cisg
ICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShy
ZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsOSBAQCBzdGF0aWMgaW5saW5lIExU
eXBlIHN0cnVjdFR5cGUoTENvbnRleHQgCiAgICAgcmV0dXJuIHN0cnVjdFR5cGUoY29udGV4dCwg
ZWxlbWVudHMsIDIsIHBhY2tpbmcpOwogfQogCisvLyBGSVhNRTogTWFrZSB0aGUgVmFyaWFkaWNp
dHkgYXJndW1lbnQgbm90IGJlIHRoZSBsYXN0IGFyZ3VtZW50IHRvIGZ1bmN0aW9uVHlwZSgpIHNv
IHRoYXQgdGhpcyBmdW5jdGlvbgorLy8gY2FuIHVzZSBDKysxMSB2YXJpYWRpYyB0ZW1wbGF0ZXMK
Ky8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE1NzUKIGVudW0g
VmFyaWFkaWNpdHkgeyBOb3RWYXJpYWRpYywgVmFyaWFkaWMgfTsKIHN0YXRpYyBpbmxpbmUgTFR5
cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIGNvbnN0IExUeXBlKiBwYXJhbVR5cGVz
LCB1bnNpZ25lZCBwYXJhbUNvdW50LCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSkKIHsKQEAgLTEx
MCw2ICsxMTMsMTYgQEAgc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcgog
ICAgIExUeXBlIHBhcmFtVHlwZXNbXSA9IHsgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00
IH07CiAgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCA0LCB2
YXJpYWRpY2l0eSk7CiB9CitzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSBy
ZXR1cm5UeXBlLCBMVHlwZSBwYXJhbTEsIExUeXBlIHBhcmFtMiwgTFR5cGUgcGFyYW0zLCBMVHlw
ZSBwYXJhbTQsIExUeXBlIHBhcmFtNSwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJp
YWRpYykKK3sKKyAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJh
bTMsIHBhcmFtNCwgcGFyYW01IH07CisgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBl
LCBwYXJhbVR5cGVzLCA1LCB2YXJpYWRpY2l0eSk7Cit9CitzdGF0aWMgaW5saW5lIExUeXBlIGZ1
bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBMVHlwZSBwYXJhbTEsIExUeXBlIHBhcmFtMiwg
TFR5cGUgcGFyYW0zLCBMVHlwZSBwYXJhbTQsIExUeXBlIHBhcmFtNSwgTFR5cGUgcGFyYW02LCBW
YXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQoreworICAgIExUeXBlIHBhcmFt
VHlwZXNbXSA9IHsgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJhbTUsIHBhcmFt
NiB9OworICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgNiwg
dmFyaWFkaWNpdHkpOworfQogCiBzdGF0aWMgaW5saW5lIExUeXBlIHR5cGVPZihMVmFsdWUgdmFs
dWUpIHsgcmV0dXJuIGxsdm0tPlR5cGVPZih2YWx1ZSk7IH0KIApAQCAtMjk4LDQxICszMTEsMTMg
QEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIAogewogICAgIHJldHVy
biBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sICZhcmcxLCAxKTsKIH0KLXN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExW
YWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBh
cmcyIH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgMik7
Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZh
bHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczKQotewot
ICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMgfTsKLSAgICByZXR1cm4gYnVp
bGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCAzKTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBh
cmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0KQordGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJncz4KK0xWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVl
IGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgQXJncy4uLiBhcmdzKQogewotICAgIExWYWx1ZSBhcmdz
W10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1
aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA0KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
Q2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFs
dWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSkKLXsKLSAgICBM
VmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1IH07Ci0gICAgcmV0
dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgNSk7Ci19Ci1zdGF0aWMgaW5s
aW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBM
VmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVl
IGFyZzUsIExWYWx1ZSBhcmc2KQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIs
IGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIs
IGZ1bmN0aW9uLCBhcmdzLCA2KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChM
QnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJn
MiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYsIExW
YWx1ZSBhcmc3KQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFy
ZzQsIGFyZzUsIGFyZzYsIGFyZzcgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1
bmN0aW9uLCBhcmdzLCA3KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVp
bGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwg
TFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1
ZSBhcmc3LCBMVmFsdWUgYXJnOCkKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcy
LCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBhcmc4IH07Ci0gICAgcmV0dXJuIGJ1aWxk
Q2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgOCk7CisgICAgTFZhbHVlIGFyZ3NBcnJheVtd
ID0geyBhcmcxLCBhcmdzLi4uIH07CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5j
dGlvbiwgYXJnc0FycmF5LCBzaXplb2YoYXJnc0FycmF5KSAvIHNpemVvZihMVmFsdWUpKTsKIH0K
Kwogc3RhdGljIGlubGluZSB2b2lkIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oTFZh
bHVlIGluc3RydWN0aW9uLCBMQ2FsbENvbnYgY2FsbGluZ0NvbnZlbnRpb24pIHsgbGx2bS0+U2V0
SW5zdHJ1Y3Rpb25DYWxsQ29udihpbnN0cnVjdGlvbiwgY2FsbGluZ0NvbnZlbnRpb24pOyB9CiBz
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEV4dHJhY3RWYWx1ZShMQnVpbGRlciBidWlsZGVyLCBM
VmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbGx2bS0+QnVpbGRFeHRyYWN0
VmFsdWUoYnVpbGRlciwgYWdnVmFsLCBpbmRleCwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1
ZSBidWlsZFNlbGVjdChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgY29uZGl0aW9uLCBMVmFsdWUg
dGFrZW4sIExWYWx1ZSBub3RUYWtlbikgeyByZXR1cm4gbGx2bS0+QnVpbGRTZWxlY3QoYnVpbGRl
ciwgY29uZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4sICIiKTsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTgwMTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTEyMCw2ICsxMjAsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKICAgICBj
YXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAg
ICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Cisg
ICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRp
dmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9u
aWNzCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCkBAIC0x
MjgsNiArMTI4LDIwIEBAIHN0YXRpYyB2b2lkIGR1bXBEYXRhU2VjdGlvbihEYXRhU2VjdGlvbioK
ICAgICB9CiB9CiAKK3N0YXRpYyBpbnQgb2Zmc2V0T2ZTdGFja1JlZ2lvbihTdGFja01hcHM6OlJl
Y29yZE1hcCYgcmVjb3JkTWFwLCB1aW50MzJfdCBzdGFja21hcElEKQoreworICAgIFN0YWNrTWFw
czo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhY2ttYXBJRCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSByZWNvcmRNYXAuZW5kKCkpOworICAgIFJFTEVB
U0VfQVNTRVJUKGl0ZXItPnZhbHVlLnNpemUoKSA9PSAxKTsKKyAgICBSRUxFQVNFX0FTU0VSVChp
dGVyLT52YWx1ZVswXS5sb2NhdGlvbnMuc2l6ZSgpID09IDEpOworICAgIExvY2F0aW9uIGNhcHR1
cmVkTG9jYXRpb24gPQorICAgICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKG51bGxwdHIsIGl0
ZXItPnZhbHVlWzBdLmxvY2F0aW9uc1swXSk7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRM
b2NhdGlvbi5raW5kKCkgPT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChjYXB0dXJlZExvY2F0aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2Yo
UmVnaXN0ZXIpKSk7CisgICAgcmV0dXJuIGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgLyBzaXpl
b2YoUmVnaXN0ZXIpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBEZXNjcmlwdG9yVHlwZT4KIHZv
aWQgZ2VuZXJhdGVJQ0Zhc3RQYXRoKAogICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uLApAQCAtMjQzLDYgKzI1
NywzMiBAQCBzdGF0aWMgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyc0Zvcihjb25zCiAgICAgcmV0
dXJuIFJlZ2lzdGVyU2V0KHJlY29yZC51c2VkUmVnaXN0ZXJTZXQoKSwgUmVnaXN0ZXJTZXQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENhbGxUeXBlPgor
dm9pZCBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKFZlY3RvcjxDYWxsVHlwZT4mIGNhbGxzLCBT
dGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwKQoreworICAgIC8vIEhhbmRsaW5nIEpTIGNh
bGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUg
UEMgaW4gTExWTQorICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1
bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgorCisgICAgVmVjdG9yPENh
bGxUeXBlPiBvbGRDYWxsczsKKyAgICBvbGRDYWxscy5zd2FwKGNhbGxzKTsKKyAgICAKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Q2FsbFR5cGUmIGNhbGwgPSBvbGRDYWxsc1tpXTsKKyAgICAgICAgCisgICAgICAgIFN0YWNrTWFw
czo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2FsbC5zdGFja21h
cElEKCkpOworICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBp
dGVyLT52YWx1ZS5zaXplKCk7ICsraikgeworICAgICAgICAgICAgQ2FsbFR5cGUgY29weSA9IGNh
bGw7CisgICAgICAgICAgICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZVtq
XS5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChjb3B5KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6c29ydChjYWxscy5iZWdpbigpLCBjYWxscy5lbmQo
KSk7Cit9CisKIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICBT
dGF0ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKiBqaXRDb2RlLCBHZW5l
cmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKICAgICBTdGFja01hcHM6OlJlY29yZE1h
cCYgcmVjb3JkTWFwLCBib29sIGRpZFNlZVVud2luZEluZm8pCkBAIC0yNTEsMTYgKzI5MSwxNCBA
QCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgVk0mIHZtID0g
Z3JhcGgubV92bTsKICAgICBTdGFja01hcHMgc3RhY2ttYXBzID0gaml0Q29kZS0+c3RhY2ttYXBz
OwogICAgIAotICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3Jk
TWFwLmZpbmQoc3RhdGUuY2FwdHVyZWRTdGFja21hcElEKTsKLSAgICBSRUxFQVNFX0FTU0VSVChp
dGVyICE9IHJlY29yZE1hcC5lbmQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWUu
c2l6ZSgpID09IDEpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlWzBdLmxvY2F0aW9u
cy5zaXplKCkgPT0gMSk7Ci0gICAgTG9jYXRpb24gY2FwdHVyZWRMb2NhdGlvbiA9Ci0gICAgICAg
IExvY2F0aW9uOjpmb3JTdGFja21hcHMoJmppdENvZGUtPnN0YWNrbWFwcywgaXRlci0+dmFsdWVb
MF0ubG9jYXRpb25zWzBdKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExvY2F0aW9uLmtp
bmQoKSA9PSBMb2NhdGlvbjo6UmVnaXN0ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVk
TG9jYXRpb24uZ3ByKCkgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIFJFTEVB
U0VfQVNTRVJUKCEoY2FwdHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAlIHNpemVvZihSZWdpc3Rlcikp
KTsKLSAgICBpbnQzMl90IGxvY2Fsc09mZnNldCA9IGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkg
LyBzaXplb2YoUmVnaXN0ZXIpICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOworICAgIGludCBs
b2NhbHNPZmZzZXQgPQorICAgICAgICBvZmZzZXRPZlN0YWNrUmVnaW9uKHJlY29yZE1hcCwgc3Rh
dGUuY2FwdHVyZWRTdGFja21hcElEKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICAK
KyAgICBpbnQgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQ7CisgICAgaWYgKHN0YXRlLnZhcmFyZ3NT
cGlsbFNsb3RzU3RhY2ttYXBJRCAhPSBVSU5UX01BWCkKKyAgICAgICAgdmFyYXJnc1NwaWxsU2xv
dHNPZmZzZXQgPSBvZmZzZXRPZlN0YWNrUmVnaW9uKHJlY29yZE1hcCwgc3RhdGUudmFyYXJnc1Nw
aWxsU2xvdHNTdGFja21hcElEKTsKKyAgICBlbHNlCisgICAgICAgIHZhcmFyZ3NTcGlsbFNsb3Rz
T2Zmc2V0ID0gMDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5tX2lubGluZVZh
cmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YVtpXS5pbmxpbmVDYWxsRnJh
bWU7CkBAIC0zMzYsNyArMzc0LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBPU1Igc3RhY2ttYXAgIyIsIGV4aXQubV9z
dGFja21hcElELCAiIGZvciAiLCBleGl0Lm1fY29kZU9yaWdpbiwgIlxuIik7CiAKLSAgICAgICAg
ICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChleGl0Lm1fc3RhY2ttYXBJRCk7CisgICAgICAgICAg
ICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChleGl0Lm1fc3RhY2ttYXBJRCk7CiAgICAgICAg
ICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJ
dCB3YXMgb3B0aW1pemVkIG91dC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM3NSw3
ICs0MTMsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAg
ICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAg
IGRhdGFMb2coIkhhbmRsaW5nIEdldEJ5SWQgc3RhY2ttYXAgIyIsIGdldEJ5SWQuc3RhY2ttYXBJ
RCgpLCAiXG4iKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5m
aW5kKGdldEJ5SWQuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29y
ZE1hcC5maW5kKGdldEJ5SWQuc3RhY2ttYXBJRCgpKTsKICAgICAgICAgICAgIGlmIChpdGVyID09
IHJlY29yZE1hcC5lbmQoKSkgewogICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQg
b3V0LgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDEyLDcgKzQ1MCw3IEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxp
bmcgUHV0QnlJZCBzdGFja21hcCAjIiwgcHV0QnlJZC5zdGFja21hcElEKCksICJcbiIpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQocHV0QnlJZC5zdGFj
a21hcElEKCkpOworICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQocHV0QnlJ
ZC5zdGFja21hcElEKCkpOwogICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC00NDQsMTQgKzQ4MiwxMyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmNoZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgQ2hlY2tJbkRlc2NyaXB0b3ImIGNoZWNrSW4gPSBzdGF0ZS5jaGVja0luc1tpXTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQo
KSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBjaGVja0luIHN0YWNrbWFwICMi
LCBjaGVja0luLnN0YWNrbWFwSUQoKSwgIlxuIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGl0ZXIgPSByZWNvcmRNYXAuZmluZChjaGVja0luLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAg
ICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjaGVja0luLnN0YWNrbWFwSUQoKSk7CiAgICAg
ICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBJdCB3YXMgb3B0aW1pemVkIG91dC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ4
MCw3ICs1MTcsNiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgICAgICAgICAgICAgY2hlY2tJbi5tX2dlbmVyYXRvcnMuYXBwZW5kKENoZWNrSW5HZW5lcmF0
b3Ioc3R1YkluZm8sIHNsb3dDYWxsLCBiZWdpbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0KICAgICAgICAgCiAgICAgICAgIGV4Y2VwdGlvblRhcmdldC5saW5rKCZzbG93UGF0aEpJVCk7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkp1bXAgPSBzbG93UGF0aEpJ
VC5qdW1wKCk7CkBAIC01MDMsMjkgKzUzOSwxMSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJh
c2VkT25TdGFja01hcHMoCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmNoZWNrSW5z
LnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgZ2VuZXJhdGVDaGVja0luSUNGYXN0UGF0aCgK
ICAgICAgICAgICAgICAgICBzdGF0ZSwgY29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwgcmVj
b3JkTWFwLCBzdGF0ZS5jaGVja0luc1tpXSwKLSAgICAgICAgICAgICAgICBzaXplT2ZDaGVja0lu
KCkpOyAKKyAgICAgICAgICAgICAgICBzaXplT2ZJbigpKTsgCiAgICAgICAgIH0gCiAgICAgfQog
ICAgIAotICAgIC8vIEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3Vy
ZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUgUEMgaW4gTExWTQotICAgIC8vIGdlbmVyYXRlZCBj
b2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0
IGdlbmVyYXRlLgotICAgIFZlY3RvcjxKU0NhbGw+IG9sZENhbGxzID0gc3RhdGUuanNDYWxsczsK
LSAgICBzdGF0ZS5qc0NhbGxzLnJlc2l6ZSgwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSlNDYWxsJiBjYWxsID0gb2xkQ2Fs
bHNbaV07Ci0gICAgICAgIAotICAgICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3Ig
aXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3RhY2ttYXBJRCgpKTsKLSAgICAgICAgaWYgKGl0
ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytqKSB7Ci0gICAg
ICAgICAgICBKU0NhbGwgY29weSA9IGNhbGw7Ci0gICAgICAgICAgICBjb3B5Lm1faW5zdHJ1Y3Rp
b25PZmZzZXQgPSBpdGVyLT52YWx1ZVtqXS5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgICAg
IHN0YXRlLmpzQ2FsbHMuYXBwZW5kKGNvcHkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5kKCkpOwor
ICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUuanNDYWxscywgcmVjb3JkTWFwKTsK
ICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykg
ewogICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOwpAQCAtNTQ3LDkgKzU2
NSwzMiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAg
IGNhbGwubGluayh2bSwgbGlua0J1ZmZlcik7CiAgICAgfQogICAgIAorICAgIGFkanVzdENhbGxJ
Q3NGb3JTdGFja21hcHMoc3RhdGUuanNDYWxsVmFyYXJnc2VzLCByZWNvcmRNYXApOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nlcy5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgSlNDYWxsVmFyYXJncyYgY2FsbCA9IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nlc1tp
XTsKKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVC
bG9jayk7CisgICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCwgZ3JhcGgsIHZhcmFyZ3NTcGls
bFNsb3RzT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdp
c2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zm
c2V0OworICAgICAgICBzaXplX3Qgc2l6ZU9mSUMgPSBzaXplT2ZJQ0ZvcihjYWxsLm5vZGUoKSk7
CisKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBmYXN0UGF0aEpJVCwgc3RhcnRP
ZklDLCBzaXplT2ZJQyk7CisgICAgICAgIGlmICghbGlua0J1ZmZlci5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgICAgIGRhdGFMb2coIkZhaWxlZCB0byBpbnNlcnQgaW5saW5lIGNhY2hlIGZvciB2YXJh
cmdzIGNhbGwgKHNwZWNpZmljYWxseSwgIiwgR3JhcGg6Om9wTmFtZShjYWxsLm5vZGUoKS0+b3Ao
KSksICIpIGJlY2F1c2Ugd2UgdGhvdWdodCB0aGUgc2l6ZSB3b3VsZCBiZSAiLCBzaXplT2ZJQywg
IiBidXQgaXQgZW5kZWQgdXAgYmVpbmcgIiwgZmFzdFBhdGhKSVQubV9hc3NlbWJsZXIuY29kZVNp
emUoKSwgIiBwcmlvciB0byBjb21wYWN0aW9uLlxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9UOjpmaWxsTm9wcygKKyAgICAgICAgICAgIHN0YXJ0T2ZJ
QyArIGxpbmtCdWZmZXIuc2l6ZSgpLCBzaXplT2ZJQyAtIGxpbmtCdWZmZXIuc2l6ZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgc3RhdGUuZmluYWxpemVy
LT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpKTsKKyAgICB9CisgICAg
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAKLSAgICBpdGVy
ID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNr
bWFwSUQpOworICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YXRlLmhhbmRsZVN0YWNr
T3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEKTsKICAgICAvLyBJdCdzIHNvcnQgb2YgcmVtb3Rl
bHkgcG9zc2libGUgdGhhdCB3ZSB3b24ndCBoYXZlIGFuIGluLWJhbmQgZXhjZXB0aW9uIGhhbmRs
aW5nCiAgICAgLy8gcGF0aCwgZm9yIHNvbWUga2luZHMgb2YgZnVuY3Rpb25zLgogICAgIGlmIChp
dGVyICE9IHJlY29yZE1hcC5lbmQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDExICsyOCwxNCBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNs
dWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKIC8vIFRoZSBkZWZhdWx0IHNpemVzIGFyZSB4
ODYtNjQtc3BlY2lmaWMsIGFuZCB3ZXJlIGZvdW5kIGVtcGlyaWNhbGx5LiBUaGV5IGhhdmUgdG8g
Y292ZXIgdGhlIHdvcnN0CiAvLyBwb3NzaWJsZSBjb21iaW5hdGlvbiBvZiByZWdpc3RlcnMgbGVh
ZGluZyB0byB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBlbmNvZGluZyBvZiBlYWNoIGluc3RydWN0aW9u
IGluCiAvLyB0aGUgSUMuCkBAIC02MSwyNSArNjQsNzQgQEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQo
KQogI2VuZGlmCiB9CiAKLXNpemVfdCBzaXplT2ZDaGVja0luKCkKK3NpemVfdCBzaXplT2ZDYWxs
KCkKIHsKICNpZiBDUFUoQVJNNjQpCi0gICAgcmV0dXJuIDQ7CisgICAgcmV0dXJuIDU2OwogI2Vs
c2UKLSAgICByZXR1cm4gNTsgCisgICAgcmV0dXJuIDUzOwogI2VuZGlmCiB9CiAKK3NpemVfdCBz
aXplT2ZDYWxsVmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiA1NjsKKyNl
bHNlCisgICAgcmV0dXJuIDI3NTsKKyNlbmRpZgorfQogCi1zaXplX3Qgc2l6ZU9mQ2FsbCgpCitz
aXplX3Qgc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCkKIHsKICNpZiBDUFUoQVJNNjQpCiAgICAg
cmV0dXJuIDU2OwogI2Vsc2UKLSAgICByZXR1cm4gNTM7CisgICAgcmV0dXJuIDM3MjsKKyNlbmRp
ZgorfQorCitzaXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0
KQorICAgIHJldHVybiA1NjsKKyNlbHNlCisgICAgcmV0dXJuIDI1MzsKKyNlbmRpZgorfQorCitz
aXplX3Qgc2l6ZU9mSW4oKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1cm4gNDsKKyNlbHNl
CisgICAgcmV0dXJuIDU7IAogI2VuZGlmCiB9CiAKK3NpemVfdCBzaXplT2ZJQ0ZvcihOb2RlKiBu
b2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgR2V0QnlJZDoKKyAg
ICAgICAgcmV0dXJuIHNpemVPZkdldEJ5SWQoKTsKKyAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAg
IHJldHVybiBzaXplT2ZQdXRCeUlkKCk7CisgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgQ29uc3Ry
dWN0OgorICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbCgpOworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6
CisgICAgICAgIHJldHVybiBzaXplT2ZDYWxsVmFyYXJncygpOworICAgIGNhc2UgQ2FsbEZvcndh
cmRWYXJhcmdzOgorICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCk7Cisg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICByZXR1cm4gc2l6ZU9mQ29uc3RydWN0
VmFyYXJncygpOworICAgIGNhc2UgSW46CisgICAgICAgIHJldHVybiBzaXplT2ZJbigpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHJldmlzaW9uIDE4MDE4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI4LDEyICsyOCwyMyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3Bh
Y2UgREZHIHsKK3N0cnVjdCBOb2RlOworfQorCituYW1lc3BhY2UgRlRMIHsKIAogc2l6ZV90IHNp
emVPZkdldEJ5SWQoKTsKIHNpemVfdCBzaXplT2ZQdXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mQ2Fs
bCgpOwotc2l6ZV90IHNpemVPZkNoZWNrSW4oKTsKK3NpemVfdCBzaXplT2ZDYWxsVmFyYXJncygp
Oworc2l6ZV90IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOworc2l6ZV90IHNpemVPZkNvbnN0
cnVjdFZhcmFyZ3MoKTsKK3NpemVfdCBzaXplT2ZJbigpOworCitzaXplX3Qgc2l6ZU9mSUNGb3Io
REZHOjpOb2RlKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJl
dmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2lj
UmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDEwICs5OSwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUMsIGZ1
bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9KSVRP
cGVyYXRpb25fRUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAog
ICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VWd3NKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGlu
dFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FWkpaWlos
IGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnQzMiwgaW50NjQsIGludDMyLCBpbnQz
MiwgaW50MzIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKHZv
aWRUeXBlLCBpbnQ2NCkpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9aLCBmdW5jdGlvblR5
cGUodm9pZFR5cGUsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0QsIGZ1bmN0
aW9uVHlwZShpbnQzMiwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9F
QywgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGludFB0cikpCisgICAgbWFjcm8oWl9KSVRP
cGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKSBcCisgICAg
bWFjcm8oWl9KSVRPcGVyYXRpb25fRUpaLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50
NjQsIGludDMyKSkKICAgICAKIGNsYXNzIEludHJpbnNpY1JlcG9zaXRvcnkgOiBwdWJsaWMgQ29t
bW9uVmFsdWVzIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbC5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBKU0NhbGw6OkpT
Q2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBOb2RlCiAgICAgLCBtX3N0YWNrbWFwSUQoc3RhY2tt
YXBJRCkKICAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKIHsKKyAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBDYWxsIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGxCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbEJhc2UuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordXNpbmcgbmFtZXNwYWNlIERGRzsK
KwogSlNDYWxsQmFzZTo6SlNDYWxsQmFzZSgpCiAgICAgOiBtX3R5cGUoQ2FsbExpbmtJbmZvOjpO
b25lKQogICAgICwgbV9jYWxsTGlua0luZm8obnVsbHB0cikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NiArMzYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIExpbmtCdWZmZXI7CiAKK25hbWVz
cGFjZSBERkcgeworc3RydWN0IE5vZGU7Cit9CisKIG5hbWVzcGFjZSBGVEwgewogCiBjbGFzcyBK
U0NhbGxCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFy
YXJncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGxWYXJhcmdzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsVmFyYXJncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKKworI2lmIEVOQUJMRShGVExf
SklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5j
bHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitKU0NhbGxWYXJhcmdzOjpKU0NhbGxW
YXJhcmdzKCkKKyAgICA6IG1fc3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAsIG1fbm9kZShudWxs
cHRyKQorICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldChVSU5UX01BWCkKK3sKK30KKworSlNDYWxs
VmFyYXJnczo6SlNDYWxsVmFyYXJncyh1bnNpZ25lZCBzdGFja21hcElELCBOb2RlKiBub2RlKQor
ICAgIDogbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCisgICAgLCBtX25vZGUobm9kZSkKKyAgICAs
IG1fY2FsbEJhc2UoCisgICAgICAgIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0VmFyYXJncyA/IENh
bGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncyA6IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3Ms
CisgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYykKKyAgICAsIG1faW5zdHJ1Y3Rpb25PZmZz
ZXQoMCkKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDYWxsVmFyYXJncyB8fCBub2RlLT5v
cCgpID09IENhbGxGb3J3YXJkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFy
Z3MpOworfQorCit1bnNpZ25lZCBKU0NhbGxWYXJhcmdzOjpudW1TcGlsbFNsb3RzTmVlZGVkKCkK
K3sKKyAgICByZXR1cm4gNDsKK30KKwordm9pZCBKU0NhbGxWYXJhcmdzOjplbWl0KENDYWxsSGVs
cGVycyYgaml0LCBHcmFwaCYgZ3JhcGgsIGludDMyX3Qgc3BpbGxTbG90c09mZnNldCkKK3sKKyAg
ICAvLyBXZSBhcmUgcGFzc2VkIHRocmVlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoKKyAgICAvLyAt
IFRoZSBjYWxsZWUuCisgICAgLy8gLSBUaGUgYXJndW1lbnRzIG9iamVjdC4KKyAgICAvLyAtIFRo
ZSAidGhpcyIgdmFsdWUsIGlmIGl0J3MgYSBjb25zdHJ1Y3RvciBjYWxsLgorICAgIAorICAgIGJv
b2wgaXNDYWxsID0gbV9ub2RlLT5vcCgpICE9IENvbnN0cnVjdFZhcmFyZ3M7CisgICAgCisgICAg
Q2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKKyAgICAK
KyAgICBHUFJSZWcgY2FsbGVlR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgIAorICAg
IEdQUlJlZyBhcmd1bWVudHNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyB0aGlzR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICBib29sIGFyZ3VtZW50c09uU3RhY2sgPSBmYWxzZTsKKyAg
ICAKKyAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgeworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Cisg
ICAgICAgIGFyZ3VtZW50c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgdGhp
c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
YWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIHRoaXNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQ
UjE7CisgICAgICAgIGFyZ3VtZW50c09uU3RhY2sgPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAor
ICAgIGNvbnN0IHVuc2lnbmVkIGNhbGxlZVNwaWxsU2xvdCA9IDA7CisgICAgY29uc3QgdW5zaWdu
ZWQgYXJndW1lbnRzU3BpbGxTbG90ID0gMTsKKyAgICBjb25zdCB1bnNpZ25lZCB0aGlzU3BpbGxT
bG90ID0gMjsKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFja1BvaW50ZXJTcGlsbFNsb3QgPSAzOwor
ICAgIAorICAgIC8vIEdldCBzb21lIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnM7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6c3Rh
Y2tSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6cmVz
ZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMuc2V0KGNh
bGxlZUdQUik7CisgICAgaWYgKGFyZ3VtZW50c0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICB1c2VkUmVnaXN0ZXJzLnNldChhcmd1bWVudHNHUFIpOworICAgIGlmICh0aGlzR1BSICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNHUFIpOworICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAg
aWYgKGFyZ3VtZW50c09uU3RhY2spCisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLm51bWJl
ck9mUmV1c2VkUmVnaXN0ZXJzKCkpOworICAgIAorICAgIGF1dG8gbG9hZEFyZ3VtZW50cyA9IFsm
XSAoYm9vbCBjbG9iYmVyZWQpIHsKKyAgICAgICAgaWYgKGFyZ3VtZW50c09uU3RhY2spIHsKKyAg
ICAgICAgICAgIGppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjphZGRy
ZXNzRm9yKGdyYXBoLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQUik7CisgICAgICAgIH0gZWxz
ZSBpZiAoY2xvYmJlcmVkKSB7CisgICAgICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgYXJndW1lbnRz
U3BpbGxTbG90KSwgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAg
YXV0byBjb21wdXRlVXNlZFN0YWNrID0gWyZdIChHUFJSZWcgdGFyZ2V0R1BSLCB1bnNpZ25lZCBl
eHRyYSkgeworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdGFy
Z2V0R1BSKTsKKyAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCB0YXJnZXRHUFIpOworICAgICAgICBpZiAoZXh0cmEpCisgICAgICAgICAgICBqaXQu
c3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhKSwgdGFyZ2V0R1BSKTsKKyAg
ICAgICAgaml0LnVyc2hpZnRQdHIoQ0NhbGxIZWxwZXJzOjpJbW0zMigzKSwgdGFyZ2V0R1BSKTsK
KyAgICB9OworICAgIAorICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9p
ZCogY2FsbGVlKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAg
IGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAg
bV9leGNlcHRpb25zLmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVy
czo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7
CisgICAgfTsKKyAgICAKKyAgICBsb2FkQXJndW1lbnRzKGZhbHNlKTsKKworICAgIGppdC5zdG9y
ZVB0cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmFk
ZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHN0YWNrUG9pbnRlclNwaWxsU2xvdCkpOworICAg
IAorICAgIC8vIEF0dGVtcHQgdGhlIGZvcndhcmRpbmcgZmFzdCBwYXRoLCBpZiBpdCdzIGJlZW4g
cmVxdWVzdGVkLgorICAgIENDYWxsSGVscGVyczo6SnVtcCBoYXZlQXJndW1lbnRzOworICAgIGlm
IChtX25vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgIC8vIERvIHRo
ZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRpb24uCisgICAg
ICAgIC8vIEZJWE1FOiBkbyB0aGlzIG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwuCisgICAg
ICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGFy
Z3VtZW50c0dQUikpOworICAgICAgICAKKyAgICAgICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNo
R1BSMiwgMCk7CisgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgc2Ny
YXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG1fbm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQs
IHNsb3dDYXNlKTsKKyAgICAgICAgCisgICAgICAgIGppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICBoYXZlQXJndW1lbnRzID0gaml0Lmp1bXAoKTsKKyAgICAgICAg
c2xvd0Nhc2UubGluaygmaml0KTsKKyAgICB9CisgICAgCisgICAgLy8gR290dGEgc3BpbGwgdGhl
IGNhbGxlZSwgYXJndW1lbnRzLCBhbmQgdGhpcyBiZWNhdXNlIHdlIHdpbGwgbmVlZCB0aGVtIGxh
dGVyIGFuZCB3ZSB3aWxsIGhhdmUgc29tZQorICAgIC8vIGNhbGxzIHRoYXQgY2xvYmJlciB0aGVt
LgorICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNw
aWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3QpKTsKKyAgICBpZiAoIWFyZ3VtZW50c09u
U3RhY2spCisgICAgICAgIGppdC5zdG9yZTY0KGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBhcmd1bWVudHNTcGlsbFNsb3QpKTsKKyAgICBp
ZiAoaXNDYWxsKQorICAgICAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmFk
ZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBleHRyYVN0YWNrID0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKKyAgICAgICAg
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVv
Zih2b2lkKikpOworICAgIGNvbXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQUjEsIDApOworICAgIGpp
dC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXh0cmFTdGFjayksIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpKTsKKyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncykpOwor
ICAgIAorICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSk7
CisgICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgZXh0cmFTdGFjayk7CisgICAgbG9h
ZEFyZ3VtZW50cyh0cnVlKTsKKyAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKGppdCwgc2NyYXRjaEdQ
UjEsIGZhbHNlLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjIpOworICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWV4dHJhU3RhY2spLCBzY3JhdGNoR1BSMiwgQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwgYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCksIHNjcmF0Y2hHUFIxKTsKKyAgICBjYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2V0dXBWYXJh
cmdzRnJhbWUpKTsKKyAgICAKKyAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
c2NyYXRjaEdQUjIpOworICAgIAorICAgIGlmIChpc0NhbGwpCisgICAgICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90
KSwgdGhpc0dQUik7CisgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3Bp
bGxTbG90c09mZnNldCArIGNhbGxlZVNwaWxsU2xvdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAK
KyAgICBpZiAobV9ub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgaGF2
ZUFyZ3VtZW50cy5saW5rKCZqaXQpOworICAgIAorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgc2NyYXRjaEdQUjIsIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIAorICAgIGlmIChpc0NhbGwp
CisgICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIsIENDYWxsSGVscGVyczo6Y2FsbGVlQXJndW1l
bnRTbG90KDApKTsKKyAgICAKKyAgICAvLyBIZW5jZWZvcnRoIHdlIG1ha2UgdGhlIGNhbGwuIFRo
ZSBiYXNlIEZUTCBjYWxsIG1hY2hpbmVyeSBleHBlY3RzIHRoZSBjYWxsZWUgaW4gcmVnVDAgYW5k
IGZvciB0aGUKKyAgICAvLyBzdGFjayBmcmFtZSB0byBhbHJlYWR5IGJlIHNldCB1cCwgd2hpY2gg
aXQgaXMuCisgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6Y2Fs
bGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlZSkpOworICAgIAorICAgIG1fY2FsbEJhc2UuZW1p
dChqaXQpOworICAgIAorICAgIC8vIFVuZG8gdGhlIGRhbWFnZSB3ZSd2ZSBkb25lLgorICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgc3Rh
Y2tQb2ludGVyU3BpbGxTbG90KSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtC
dWZmZXIsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIpCit7CisgICAgbV9jYWxs
QmFzZS5saW5rKHZtLCBsaW5rQnVmZmVyKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsobV9leGNlcHRp
b25zLCBleGNlcHRpb25IYW5kbGVyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZUTEpTQ2FsbFZhcmFyZ3NfaAorI2RlZmluZSBGVExKU0NhbGxWYXJhcmdzX2gKKwor
I2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgTGlua0J1ZmZlcjsKKworbmFtZXNwYWNlIERGRyB7CitjbGFz
cyBHcmFwaDsKK3N0cnVjdCBOb2RlOworfQorCituYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSlND
YWxsVmFyYXJncyB7CitwdWJsaWM6CisgICAgSlNDYWxsVmFyYXJncygpOworICAgIEpTQ2FsbFZh
cmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgREZHOjpOb2RlKik7CisgICAgCisgICAgREZHOjpO
b2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgCisgICAgc3RhdGljIHVu
c2lnbmVkIG51bVNwaWxsU2xvdHNOZWVkZWQoKTsKKyAgICAKKyAgICB2b2lkIGVtaXQoQ0NhbGxI
ZWxwZXJzJiwgREZHOjpHcmFwaCYsIGludDMyX3Qgc3BpbGxTbG90c09mZnNldCk7CisgICAgdm9p
ZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRs
ZXIpOworICAgIAorICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0
YWNrbWFwSUQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU0NhbGxWYXJhcmdz
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luc3RydWN0aW9uT2Zmc2V0
IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKKyAgICBERkc6Ok5vZGUqIG1fbm9kZTsKKyAgICBKU0Nh
bGxCYXNlIG1fY2FsbEJhc2U7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBtX2V4Y2VwdGlv
bnM7CisKK3B1YmxpYzoKKyAgICB1aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KyNlbmRpZiAvLyBGVExKU0NhbGxWYXJhcmdzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODcsNiArMTg3LDMwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fb3V0LnN0
YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxTdGF0ZS5jYXB0dXJlZFN0
YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9vdXQuaW50MzJaZXJvLCBjYXB0dXJlZEFsbG9jYSk7
CiAgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSBoYXZlIGFueSBDYWxsVmFyYXJncyB0aGVuIHdl
IG5lZSB0byBoYXZlIGEgc3BpbGwgc2xvdCBmb3IgaXQuCisgICAgICAgIGJvb2wgaGFzVmFyYXJn
cyA9IGZhbHNlOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJlT3JkZXIpIHsK
KyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6
CisgICAgICAgICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICAg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICBoYXNWYXJhcmdz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChoYXNWYXJhcmdzKSB7CisgICAgICAg
ICAgICBMVmFsdWUgdmFyYXJnc1NwaWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCisgICAgICAgICAg
ICAgICAgYXJyYXlUeXBlKG1fb3V0LmludDY0LCBKU0NhbGxWYXJhcmdzOjpudW1TcGlsbFNsb3Rz
TmVlZGVkKCkpKTsKKyAgICAgICAgICAgIG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFj
a21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAgICAgbV9vdXQuY2FsbCgKKyAgICAg
ICAgICAgICAgICBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1f
ZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEKSwKKyAgICAgICAgICAgICAgICBt
X291dC5pbnQzMlplcm8sIHZhcmFyZ3NTcGlsbFNsb3RzKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wdHJUb0ludCgKICAgICAgICAgICAgIG1fb3V0
LmNhbGwobV9vdXQuZnJhbWVBZGRyZXNzSW50cmluc2ljKCksIG1fb3V0LmludDMyWmVybyksIG1f
b3V0LmludFB0cik7CiAgICAgICAgIG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQo
VGFnVHlwZU51bWJlcik7CkBAIC02ODMsNiArNzA3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQ29uc3RydWN0OgogICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
Q2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAg
ICAgICAgICBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxlTG9hZFZh
cmFyZ3MoKTsKKyAgICAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NBTExf
SU5MSU5JTkcpCiAgICAgICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICAgICAgY2FzZSBOYXRpdmVD
b25zdHJ1Y3Q6CkBAIC0yMDY0LDggKzIwOTYsMjIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IGNoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCgpOwogCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCAhbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAg
ICAgICAgc2V0SW50MzIobV9vdXQuYWRkKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBheWxvYWRG
b3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLCBtX291dC5jb25zdEludDMyKC0xKSkpOworICAg
ICAgICBpZiAobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAg
ICAgICAmJiAhbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkgeworICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMigKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAg
ICAgICAgIGlmICghbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0
YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBh
cmd1bWVudENvdW50UmVnaXN0ZXIgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIHNldEludDMyKAorICAg
ICAgICAgICAgICAgIG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMy
Tm9uTmVnYXRpdmUocGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsKKyAgICAgICAgfQogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAtMjA3NywxMCArMjEy
MywxNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBsaW1pdDsKLSAgICAgICAgaWYg
KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkpCiAgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LmNvbnN0SW50MzIoY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbGltaXQgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKHBheWxvYWRGb3Io
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAg
ICAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXI7CisgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LnN1YihtX291dC5sb2FkMzIocGF5bG9h
ZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoVW5jb3VudGFibGUsIG5vVmFsdWUoKSwgMCwg
bV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBsaW1pdCkpOwogICAgICAgICAKQEAgLTM3ODYsNiAr
MzgzOSw4NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsK
ICAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpCisg
ICAgeworICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbnVsbHB0cjsKKyAg
ICAgICAgTFZhbHVlIHRoaXNBcmcgPSBudWxscHRyOworICAgICAgICAKKyAgICAgICAgc3dpdGNo
IChtX25vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgICAg
IGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
IHRoaXNBcmcgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAgdGhpc0Fy
ZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAganNBcmd1bWVudHMgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiYmFkIG5v
ZGUgdHlwZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAgICAgIAorICAg
ICAgICBWZWN0b3I8TFZhbHVlPiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
bV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
bV9vdXQuY29uc3RJbnQzMihzaXplT2ZJQ0ZvcihtX25vZGUpKSk7CisgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQoY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVu
ZChtX291dC5jb25zdEludDMyKDEgKyAhIWpzQXJndW1lbnRzICsgISF0aGlzQXJnKSk7CisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQoanNDYWxsZWUpOworICAgICAgICBpZiAoanNBcmd1bWVudHMp
CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQXJndW1lbnRzKTsKKyAgICAgICAgaWYg
KHRoaXNBcmcpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNBcmcpOworICAgICAg
ICAKKyAgICAgICAgY2FsbFByZWZsaWdodCgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGNh
bGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVu
dHMpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1D
Q2FsbENvbnYpOworICAgICAgICAKKyAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxWYXJhcmdzZXMu
YXBwZW5kKEpTQ2FsbFZhcmFyZ3Moc3RhY2ttYXBJRCwgbV9ub2RlKSk7CisgICAgICAgIAorICAg
ICAgICBzZXRKU1ZhbHVlKGNhbGwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVMb2Fk
VmFyYXJncygpCisgICAgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9
IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJh
cmdzKSwgbV9jYWxsRnJhbWUsIGpzQXJndW1lbnRzLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5vZmZzZXQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBp
cyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5
IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0
aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21w
bGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJl
IG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAor
ICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBs
ZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuaW50MzJPbmUpOwor
ICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUo
KSwgbnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMs
IG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX291
dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNv
dW50KSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyBy
YXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIg
aW5zdGVhZAorICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291bGRuJ3QgaGF2
ZSB0byBkbyB0aGlzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQxNjYwCisgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBtX291dC5sU2hy
KAorICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0Lm9m
ZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBtX291dC5jb25zdElu
dFB0cigzKSk7CisgICAgICAgIAorICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAg
IG1fb3V0LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291dC5jb25z
dEludDMyKGRhdGEtPm9mZnNldCksCisgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNvbnN0SW50
MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUp1
bXAoKQogICAgIHsKQEAgLTQwOTAsNyArNDIyNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVP
ZkNoZWNrSW4oKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2tt
YXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mSW4oKSksCiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgY2VsbCk7CiAKICAg
ICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1B
bnlSZWdDYWxsQ29udik7CkBAIC02NDgzLDcgKzY2MTcsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
IC8vIEJ1ZmZlciBpcyBvdXQgb2Ygc3BhY2UsIGZsdXNoIGl0LgogICAgICAgICBtX291dC5hcHBl
bmRUbyhidWZmZXJJc0Z1bGwsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIHZtQ2FsbChtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpLCBtX2NhbGxGcmFtZSwg
YmFzZSwgTm9FeGNlcHRpb25zKTsKKyAgICAgICAgdm1DYWxsTm9FeGNlcHRpb25zKG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlciksIG1fY2FsbEZyYW1lLCBi
YXNlKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNjQ5Miw0NCArNjYyNiwyMyBA
QCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogCi0gICAgZW51bSBFeGNlcHRpb25DaGVja01vZGUg
eyBOb0V4Y2VwdGlvbnMsIENoZWNrRXhjZXB0aW9ucyB9OwotICAgIAotICAgIExWYWx1ZSB2bUNh
bGwoTFZhbHVlIGZ1bmN0aW9uLCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0
aW9ucykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSB2bUNhbGwo
TFZhbHVlIGZ1bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgewogICAgICAgICBjYWxsUHJlZmxp
Z2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uKTsKLSAg
ICAgICAgY2FsbENoZWNrKG1vZGUpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2Fs
bChmdW5jdGlvbiwgYXJncy4uLik7CisgICAgICAgIGNhbGxDaGVjaygpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZh
bHVlIGFyZzEsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQotICAg
IHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9v
dXQuY2FsbChmdW5jdGlvbiwgYXJnMSk7Ci0gICAgICAgIGNhbGxDaGVjayhtb2RlKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rp
b24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBD
aGVja0V4Y2VwdGlvbnMpCi0gICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAg
IExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxLCBhcmcyKTsKLSAgICAg
ICAgY2FsbENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBM
VmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBM
VmFsdWUgYXJnMywgRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0g
ICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBt
X291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczKTsKLSAgICAgICAgY2FsbENoZWNr
KG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBMVmFsdWUgdm1DYWxs
KExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywg
TFZhbHVlIGFyZzQsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIHZtQ2FsbE5v
RXhjZXB0aW9ucyhMVmFsdWUgZnVuY3Rpb24sIEFyZ3MuLi4gYXJncykKICAgICB7CiAgICAgICAg
IGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwoZnVu
Y3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7
CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmdzLi4uKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIGNhbGxQcmVm
bGlnaHQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgbV9vdXQuc3RvcmUz
MigKQEAgLTY1NDMsMTEgKzY2NTYsOCBAQCBwcml2YXRlOgogICAgICAgICBjYWxsUHJlZmxpZ2h0
KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjYWxsQ2hl
Y2soRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCisgICAgdm9pZCBj
YWxsQ2hlY2soKQogICAgIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gTm9FeGNlcHRpb25zKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZUV4
Y2VwdGlvbkZ1enooKSkKICAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvbkV4Y2VwdGlvbkZ1enopKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1NywxMyArMzU3LDggQEAg
cHVibGljOgogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgVmVjdG9yVHlw
ZSYgdmVjdG9yKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9y
KTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbikgeyByZXR1cm4gYnVpbGRDYWxs
KG1fYnVpbGRlciwgZnVuY3Rpb24pOyB9CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9u
LCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFy
ZzEpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZh
bHVlIGFyZzIpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBh
cmcyKTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExW
YWx1ZSBhcmcyLCBMVmFsdWUgYXJnMykgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVu
Y3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0
aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkg
eyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMs
IGFyZzQpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwg
TFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUpIHsgcmV0
dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0
LCBhcmc1KTsgfQotICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEs
IExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExWYWx1ZSBhcmc1LCBMVmFs
dWUgYXJnNikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFy
ZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1
bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJn
NCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBMVmFsdWUgYXJnNykgeyByZXR1cm4gYnVpbGRD
YWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFy
ZzYsIGFyZzcpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJn
MSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExW
YWx1ZSBhcmc2LCBMVmFsdWUgYXJnNywgTFZhbHVlIGFyZzgpIHsgcmV0dXJuIGJ1aWxkQ2FsbCht
X2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBh
cmc3LCBhcmc4KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgTFZhbHVl
IGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgQXJncy4uLiBhcmdzKSB7IHJldHVy
biBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJncy4uLik7IH0KICAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+CiAgICAgTFZhbHVlIG9wZXJhdGlv
bihGdW5jdGlvblR5cGUgZnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDYgKzQ5LDEwIEBAIFN0YXRlOjpTdGF0
ZShHcmFwaCYgZ3JhcGgpCiAgICAgLCBtb2R1bGUoMCkKICAgICAsIGZ1bmN0aW9uKDApCiAgICAg
LCBnZW5lcmF0ZWRGdW5jdGlvbigwKQorICAgICwgaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlv
blN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBoYW5kbGVFeGNlcHRpb25TdGFja21hcElEKFVJ
TlRfTUFYKQorICAgICwgY2FwdHVyZWRTdGFja21hcElEKFVJTlRfTUFYKQorICAgICwgdmFyYXJn
c1NwaWxsU2xvdHNTdGFja21hcElEKFVJTlRfTUFYKQogICAgICwgdW53aW5kRGF0YVNlY3Rpb24o
MCkKICAgICAsIHVud2luZERhdGFTZWN0aW9uU2l6ZSgwKQogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCiAj
aW5jbHVkZSAiRlRMSlNDYWxsLmgiCisjaW5jbHVkZSAiRlRMSlNDYWxsVmFyYXJncy5oIgogI2lu
Y2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CkBAIC03MSwxMCArNzIsMTIgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEOwogICAgIHVuc2lnbmVk
IGhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQ7CiAgICAgdW5zaWduZWQgY2FwdHVyZWRTdGFja21h
cElEOworICAgIHVuc2lnbmVkIHZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRDsKICAgICBTZWdt
ZW50ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFNlZ21lbnRlZFZl
Y3RvcjxQdXRCeUlkRGVzY3JpcHRvcj4gcHV0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPENo
ZWNrSW5EZXNjcmlwdG9yPiBjaGVja0luczsKICAgICBWZWN0b3I8SlNDYWxsPiBqc0NhbGxzOwor
ICAgIFZlY3RvcjxKU0NhbGxWYXJhcmdzPiBqc0NhbGxWYXJhcmdzZXM7CiAgICAgVmVjdG9yPENT
dHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0aW9u
TmFtZXM7CiAgICAgdm9pZCogdW53aW5kRGF0YVNlY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE4
MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiAgICAgcmV0dXJuIGludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGNh
bGxGcmFtZSwgdGhpc1ZhbHVlLCBjYWxsZXJTY29wZUNoYWluKTsKIH0KIAotdW5zaWduZWQgc2l6
ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTdGFjayogc3RhY2ssIEpT
VmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmly
c3RWYXJBcmdPZmZzZXQpCit1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCiB7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIGlmICghYXJndW1lbnRzKQpAQCAtMTU2LDYgKzE1Niwx
MyBAQCB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogCiAgICAgZWxzZQog
ICAgICAgICBsZW5ndGggPSAwOwogICAgIAorICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3Vuc2ln
bmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU3RhY2sqIHN0
YWNrLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMsIHVpbnQz
Ml90IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHNpemVPZlZh
cmFyZ3MoY2FsbEZyYW1lLCBhcmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICAKICAg
ICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbGVlRnJhbWVGb3JWYXJhcmdzKGNhbGxGcmFt
ZSwgbnVtVXNlZFN0YWNrU2xvdHMsIGxlbmd0aCArIDEpOwogICAgIGlmIChsZW5ndGggPiBBcmd1
bWVudHM6Ok1heEFyZ3VtZW50cyB8fCAhc3RhY2stPmVuc3VyZUNhcGFjaXR5Rm9yKGNhbGxlZUZy
YW1lLT5yZWdpc3RlcnMoKSkpIHsKICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2Fs
bEZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUoY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKSAtIHBhZGRlZENhbGxlZUZyYW1lT2Zmc2V0KTsKICAgICB9CiAK
KyAgICB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENhbGxGcmFtZSogZXhlYywgSlNWYWx1ZSBhcmd1
bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICB1bnNpZ25lZCBzaXplRnJh
bWVGb3JWYXJhcmdzKENhbGxGcmFtZSogZXhlYywgSlNTdGFjayosIEpTVmFsdWUgYXJndW1lbnRz
LCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQp
OwogICAgIHZvaWQgbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBWaXJ0dWFsUmVn
aXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgSlNWYWx1ZSBzb3VyY2UsIHVpbnQzMl90IG9mZnNldCwg
dWludDMyX3QgbGVuZ3RoKTsKICAgICB2b2lkIHNldHVwVmFyYXJnc0ZyYW1lKENhbGxGcmFtZSog
ZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWlu
dDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkocmV2
aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksMTAgQEAgdm9pZCBTdGFj
a1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbAogCiAgICAgICAgIG1fZnJhbWUubV9jYWxs
RnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBp
bmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZElu
dDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZnJhbWUubV9hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKICAgICAg
ICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxv
Y2soKTsKICAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsMTUgKzIxMiwy
NyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooCiAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudEJ5dGVzKCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNl
cHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCkKK0Fzc2VtYmx5SGVscGVyczo6SnVt
cCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQg
a2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewogICAgIGNhbGxFeGNlcHRpb25GdXp6
KCk7CisKKyAgICBpZiAod2lkdGggPT0gRmFySnVtcFdpZHRoKQorICAgICAgICBraW5kID0gKGtp
bmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrIDogTm9y
bWFsRXhjZXB0aW9uQ2hlY2spOwogICAgIAorICAgIEp1bXAgcmVzdWx0OwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNo
ZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSkpOworICAgIHJlc3VsdCA9IGJyYW5jaFRlc3Q2NChraW5kID09IE5vcm1hbEV4Y2Vw
dGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNz
T2ZFeGNlcHRpb24oKSkpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICByZXR1cm4gYnJh
bmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFi
c29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgcmVzdWx0ID0gYnJhbmNoMzIo
a2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRl
QWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24o
KSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAjZW5kaWYKKyAgICAKKyAgICBpZiAod2lkdGgg
PT0gTm9ybWFsSnVtcFdpZHRoKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIFBh
dGNoYWJsZUp1bXAgcmVhbEp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CisgICAgcmVzdWx0Lmxpbmso
dGhpcyk7CisgICAgCisgICAgcmV0dXJuIHJlYWxKdW1wLm1fanVtcDsKIH0KIAogdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhBc3NlbWJseUhlbHBl
cnMmIGppdCwgVHJ1c3RlZEltbVB0ciBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24g
MTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzM4LDYgKzMzOCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHN0
YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikK
ICAgICB7CisgICAgICAgIC8vIE5CLiBJdCdzIHRlbXB0aW5nIG9uIHNvbWUgYXJjaGl0ZWN0dXJl
cyB0byBzb21ldGltZXMgdXNlIGFuIG9mZnNldCBmcm9tIHRoZSBzdGFjaworICAgICAgICAvLyBy
ZWdpc3RlciBiZWNhdXNlIGZvciBzb21lIG9mZnNldHMgdGhhdCB3aWxsIGVuY29kZSB0byBhIHNt
YWxsZXIgaW5zdHJ1Y3Rpb24uIEJ1dCB3ZQorICAgICAgICAvLyBjYW5ub3QgZG8gdGhpcy4gV2Ug
dXNlIHRoaXMgaW4gcGxhY2VzIHdoZXJlIHRoZSBzdGFjayBwb2ludGVyIGhhcyBiZWVuIG1vdmVk
IHRvIHNvbWUKKyAgICAgICAgLy8gdW5wcmVkaWN0YWJsZSBsb2NhdGlvbi4KICAgICAgICAgQVNT
RVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQpAQCAtMzY3LDM5ICszNzEsMzkgQEAgcHVibGljOgogICAg
IH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBB
ZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxs
ZWVGcmFtZVNsb3QoaW50IHNsb3QpCiAgICAgewogICAgICAgICBBU1NFUlQoc2xvdCA+PSBKU1N0
YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSk7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihS
ZWdpc3RlcikgKiAoc2xvdCAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSk7CisgICAg
ICAgIHJldHVybiBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIp
ICogKHNsb3QgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpOwogICAgIH0KIAogICAg
IC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBBZGRyZXNzIGNh
bGxlZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVl
QXJndW1lbnRTbG90KGludCBhcmd1bWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVG
cmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKTsK
ICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkKKyAgICBz
dGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCiAgICAgewogICAgICAg
ICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAg
ICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoaW50IHNsb3QpCisgICAg
c3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNldChQYXlsb2FkT2Zm
c2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50VGFnU2xvdChpbnQgYXJn
dW1lbnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRUYWdTbG90KGludCBhcmd1
bWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVBcmd1bWVudFNsb3QoYXJndW1lbnQp
LndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3Vt
ZW50UGF5bG9hZFNsb3QoaW50IGFyZ3VtZW50KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFy
Z3VtZW50UGF5bG9hZFNsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNh
bGxlZUFyZ3VtZW50U2xvdChhcmd1bWVudCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAg
ICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQorICAgIHN0YXRpYyBB
ZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGNh
bGxlZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQo
KSk7CiAgICAgfQpAQCAtNDA5LDIxICs0MTMsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YnJhbmNoOChCZWxvdywgQWRkcmVzcyhjZWxsUmVnLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgR1BS
UmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQ
UlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxp
ZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCisgICAgc3RhdGljIEdQ
UlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBH
UFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFs
aWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2Vy
dmU1ID0gSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BS
SW5mbzo6cmVnVDAgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAh
PSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDApCisgICAgICAg
IGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUyICE9IEdQUkluZm86
OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTQgIT0gR1BS
SW5mbzo6cmVnVDAgJiYgcHJlc2VydmU1ICE9IEdQUkluZm86OnJlZ1QwKQogICAgICAgICAgICAg
cmV0dXJuIEdQUkluZm86OnJlZ1QwOwogCi0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5m
bzo6cmVnVDEgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMyAhPSBH
UFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDEpCisgICAgICAgIGlm
IChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJl
Z1QxICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5m
bzo6cmVnVDEgJiYgcHJlc2VydmU1ICE9IEdQUkluZm86OnJlZ1QxKQogICAgICAgICAgICAgcmV0
dXJuIEdQUkluZm86OnJlZ1QxOwogCi0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6
cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZlMyAhPSBHUFJJ
bmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDIpCisgICAgICAgIGlmIChw
cmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1Qy
ICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6
cmVnVDIgJiYgcHJlc2VydmU1ICE9IEdQUkluZm86OnJlZ1QyKQogICAgICAgICAgICAgcmV0dXJu
IEdQUkluZm86OnJlZ1QyOwogCi0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVn
VDMgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QzICYmIHByZXNlcnZlMyAhPSBHUFJJbmZv
OjpyZWdUMyAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDMpCisgICAgICAgIGlmIChwcmVz
ZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDMgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QzICYm
IHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMyAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVn
VDMgJiYgcHJlc2VydmU1ICE9IEdQUkluZm86OnJlZ1QzKQogICAgICAgICAgICAgcmV0dXJuIEdQ
UkluZm86OnJlZ1QzOwogCi0gICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUNDsKKyAgICAgICAg
aWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUNCAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6
cmVnVDQgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1Q0ICYmIHByZXNlcnZlNCAhPSBHUFJJ
bmZvOjpyZWdUNCAmJiBwcmVzZXJ2ZTUgIT0gR1BSSW5mbzo6cmVnVDQpCisgICAgICAgICAgICBy
ZXR1cm4gR1BSSW5mbzo6cmVnVDQ7CisKKyAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1Q1Owog
ICAgIH0KIAogICAgIC8vIEFkZCBhIGRlYnVnIGNhbGwuIFRoaXMgY2FsbCBoYXMgbm8gZWZmZWN0
IG9uIEpJVCBjb2RlIGV4ZWN1dGlvbiBzdGF0ZS4KQEAgLTU3MSw3ICs1NzgsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjYWxsRXhjZXB0aW9uRnV6eigpOwogICAgIAogICAgIGVudW0gRXhjZXB0aW9u
Q2hlY2tLaW5kIHsgTm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hlY2sg
fTsKLSAgICBKdW1wIGVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCA9
IE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKKyAgICBlbnVtIEV4Y2VwdGlvbkp1bXBXaWR0aCB7IE5v
cm1hbEp1bXBXaWR0aCwgRmFySnVtcFdpZHRoIH07CisgICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hl
Y2soCisgICAgICAgIEV4Y2VwdGlvbkNoZWNrS2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBF
eGNlcHRpb25KdW1wV2lkdGggPSBOb3JtYWxKdW1wV2lkdGgpOwogCiAjaWYgRU5BQkxFKFNBTVBM
SU5HX0NPVU5URVJTKQogICAgIHN0YXRpYyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYg
aml0LCBBYnN0cmFjdFNhbXBsaW5nQ291bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQg
PSAxKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZp
c2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzMpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBU
cnVzdGVkSW1tMzIgYXJnMykKKyAgICB7CisgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwor
ICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcy
KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgIH0KKwogICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3Vt
ZW50cygpOwpAQCAtMjk4LDYgKzMwNywyOSBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmczKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZElt
bTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKKyAgICB7CisgICAgICAg
IHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMp
OworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVu
dChhcmc1KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMs
IFRydXN0ZWRJbW0zMiBhcmc0LCBHUFJSZWcgYXJnNSwgVHJ1c3RlZEltbTMyIGFyZzYpCisgICAg
eworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzEpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmczKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOworICAgICAgICBhZGRD
YWxsQXJndW1lbnQoYXJnNSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc2KTsKKyAgICB9
CisKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAg
ICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CkBAIC0xNzc3LDYgKzE4MDksMTUgQEAgcHVibGljOgog
ICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIg
YXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgc2V0
dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50
R1BSND4oYXJnMiwgYXJnNCk7CisgICAgICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAg
ICBtb3ZlKGFyZzUsIEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCiAg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQs
IFRydXN0ZWRJbW0zMiBhcmc1KQogICAgIHsKICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxH
UFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMz4oYXJnMiwgYXJnMyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkocmV2aXNpb24gMTgwMTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwMiw2ICs0MDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5W
YWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBH
UFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAg
c3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3Rl
cnM6OmVzaTsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50
R1BSID0gWDg2UmVnaXN0ZXJzOjpyMTA7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBv
aW50U2NyYXRjaFJlZ2lzdGVyID0gTWFjcm9Bc3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3RlcjsKIAog
ICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKQEAgLTU3Nyw2ICs1
NzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9
IEFSTTY0UmVnaXN0ZXJzOjp4MDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJl
dHVyblZhbHVlR1BSMiA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsgLy8gcmVnVDEKICAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4
MjsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0g
QVJNNjRSZWdpc3RlcnM6Ong4OwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcGF0Y2hwb2ludFNj
cmF0Y2hSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDA7CiAKICAgICAvLyBHUFJSZWcgbWFw
cGluZyBpcyBkaXJlY3QsIHRoZSBtYWNoaW5lIHJlZ3NpdGVyIG51bWJlcnMgY2FuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NCwxMSArNDY0LDYg
QEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIERGRzo6Q2FuSW5saW5lOgot
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQgPSB0cnVlOwotICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVl
OwotICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERG
Rzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoT3Bjb2Rl
SUQsIEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB2
b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwot
ICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiopOworICAg
ICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiosIENhbGxMaW5r
SW5mbyopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0
KEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qCiAgICAgY29tcGlsZU9wQ2FsbChv
cF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewogICAgIGludCB0aGlzVmFsdWUg
PSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFyZ3VtZW50cyA9IGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE1MCw2ICsxNTAsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVT
ZXR1cFZhcmFyZ3NGcmFtZShJbnN0cgogICAgIGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgZW5k
LmxpbmsodGhpcyk7CiAKKyAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAgIGxv
YWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3Qg
PSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRlZCA9
IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmsodGhp
cyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBub3RC
aWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAgICAg
ZW1pdExvYWQodGhpc1ZhbHVlLCByZWdUMiwgcmVnVDApOwogICAgIHN0b3JlMzIocmVnVDAsIEFk
ZHJlc3MocmVnVDEsIFBheWxvYWRPZmZzZXQgKyAoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKSk7CkBAIC0xOTgsNiAr
MjA4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydQogCiB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKKyAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CiAgICAgaW50IGNhbGxlZSA9
IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CkBAIC0y
MTQsNyArMjI1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQog
ICAgICovCiAgICAgCiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKLSAgICAgICAgY29tcGlsZVNldHVwVmFyYXJn
c0ZyYW1lKGluc3RydWN0aW9uKTsKKyAgICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKGlu
c3RydWN0aW9uLCBpbmZvKTsKICAgICBlbHNlIHsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtMjM5LDggKzI1MCw2IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOwogICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpT
U3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdP
ZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKIAotICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKLQogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0aW9u
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklUOjplbWl0UHV0
Q2FsbFJlc3VsdChJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKLXZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQordm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBpbnQgdGhpc1ZhbHVl
ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CkBAIC05MCw2ICs5MCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZVNl
dHVwVmFyYXJnc0ZyYW1lKEluc3RyCiAgICAgaWYgKGNhbk9wdGltaXplKQogICAgICAgICBlbmQu
bGluayh0aGlzKTsKICAgICAKKyAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAg
IGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dl
c3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRl
ZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmso
dGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBu
b3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJlZ1QwKTsKICAgICBzdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwpAQCAtMTM0LDYgKzE0NCw4IEBA
IHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKIAogdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOworCiAgICAgaW50IGNhbGxlZSA9IGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CkBAIC0xNTIsNyAr
MTY0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIENP
TVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9j
YWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVf
bGVuZ3RoKTsKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9Q
Q09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBjYWxsX2FuZF9jb25zdHJ1Y3RfdmFy
YXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCi0gICAg
ICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbik7CisgICAgICAgIGNvbXBp
bGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbiwgaW5mbyk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE3Niw5ICsx
ODgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxs
ZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbygpOwotCi0gICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkg
eworICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2Fs
bEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4MDE4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTAsNiArMTUwLDcgQEAgdHlwZWRlZiBpbnQ2NF90IEpJVF9PUEVSQVRJT04oKlFfSklU
T3BlcgogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9EKShk
b3VibGUpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9F
KShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVy
YXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlwZWRlZiBpbnQzMl90IEpJVF9PUEVS
QVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FSlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBp
bnQzMl90KTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25f
RUpaWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QpOwogdHlw
ZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19K
SVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTE4OSw2ICsx
OTAsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWd3NKKShFeGVjU3RhdGUqLCBW
YXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpKKShFeGVjU3RhdGUq
LCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAo
KlZfSklUT3BlcmF0aW9uX0VaSlpaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFs
dWUsIGludDMyX3QsIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNTdGF0ZSosIFZNKik7CiB0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fWikoaW50MzJfdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAko
cmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFy
Z3NGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMSArMTAxLDMxIEBAIHZvaWQgZW1p
dFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwKIAogdm9pZCBlbWl0U2V0dXBWYXJhcmdz
RnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BS
MywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNs
b3dDYXNlKQogewotICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKAotICAgICAgICBq
aXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
MywKLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKFZpcnR1YWxSZWdp
c3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKSwKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpLAotICAgICAgICBm
aXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZh
c3RDYXNlKGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBudWxscHRyLCBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworfQorCit2
b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BS
MiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
dW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dD
YXNlKQoreworICAgIFZhbHVlUmVjb3ZlcnkgYXJndW1lbnRDb3VudFJlY292ZXJ5OworICAgIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEFyZ3VtZW50UmVnOworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUp
IHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAg
ICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNT
dGFjaygKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdp
c3RlciwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFy
Z3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KAorICAgICAgICAg
ICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpOworICAg
ICAgICB9CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgPiAx
KQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmaXJz
dEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOworICAgIH0gZWxzZSB7CisgICAgICAg
IGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFj
aygKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwg
RGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKKyAgICB9CisgICAgZW1pdFNldHVw
VmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGFyZ3VtZW50Q291bnRSZWNvdmVyeSwgZmlyc3RBcmd1
bWVudFJlZywgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NG
cmFtZS5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgdm9pZCBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAogLy8gVmFyaWFudCB0aGF0IGFzc3Vt
ZXMgbm9ybWFsIHN0YWNrIGZyYW1lLgogdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2Fz
ZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJz
dFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2UpOwogCisvLyBW
YXJpYW50IGZvciBwb3RlbnRpYWxseSBpbmxpbmVkIHN0YWNrIGZyYW1lcy4KK3ZvaWQgZW1pdFNl
dHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIG51bVVzZWRTbG90
c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3Jh
dGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiwgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIEND
YWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBBcmd1
bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1vZGUpCiAgICAgewotICAg
ICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFy
Z3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFycmF5KCkgKyByZWdpc3Rl
ckFycmF5U2l6ZUluQnl0ZXMoaW5saW5lQ2FsbEZyYW1lKSkpIEFyZ3VtZW50cyhjYWxsRnJhbWUp
OworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFycmF5KCkgKyBy
ZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUpKSkgQXJn
dW1lbnRzKGNhbGxGcmFtZSk7CiAgICAgICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3JlYXRpb24oY2Fs
bEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUsIG1vZGUpOwogICAgICAgICByZXR1cm4gYXJndW1lbnRz
OwogICAgIH0KQEAgLTEyNCw3ICsxMjQsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVN0
cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2FyeShFeGVjU3RhdGUqKTsKIAogICAgIHN0YXRpYyBzaXpl
X3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVy
biBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpOyB9Ci0gICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pICogKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpOyB9Cisg
ICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAg
dW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICByZXR1cm4gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKKyAgICB9
CiAgICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCk7CiAgICAgYm9vbCB0cnlTZXRBcmd1bWVudChW
TSYsIHNpemVfdCBhcmd1bWVudCwgSlNWYWx1ZSk7CiAgICAgSlNWYWx1ZSB0cnlHZXRBcmd1bWVu
dChzaXplX3QgYXJndW1lbnQpOwpAQCAtMzQwLDExICszNDgsMTUgQEAgaW5saW5lIHZvaWQgQXJn
dW1lbnRzOjpmaW5pc2hDcmVhdGlvbihDYQogICAgIG1fb3ZlcnJvZGVDYWxsZWUgPSBmYWxzZTsK
ICAgICBtX292ZXJyb2RlQ2FsbGVyID0gZmFsc2U7CiAgICAgbV9pc1N0cmljdE1vZGUgPSBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgp
KS0+aXNTdHJpY3RNb2RlKCk7Ci0KKyAgICAKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICBtX251bUFyZ3VtZW50cyA9IGNh
bGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQo
KSkudW5ib3hlZEludDMyKCk7CisgICAgZWxzZQorICAgICAgICBtX251bUFyZ3VtZW50cyA9IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICBtX251bUFyZ3VtZW50cy0tOwor
ICAgIAogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgTm9ybWFsQXJndW1lbnRzQ3JlYXRp
b25Nb2RlOiB7Ci0gICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHMuc2l6ZSgpIC0gMTsKLSAgICAgICAgCiAgICAgICAgIGlmIChtX251bUFyZ3VtZW50cykg
ewogICAgICAgICAgICAgaW50IG9mZnNldEZvckFyZ3VtZW50T25lID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgICAgICBt
X3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+
KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpICsgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgLSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKTsKQEAgLTM2MSw3ICszNzMsNiBAQCBpbmxp
bmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIENsb25lZEFyZ3VtZW50c0NyZWF0aW9uTW9kZTogewotICAgICAgICBtX251bUFyZ3Vt
ZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CiAgICAgICAgIGlm
IChtX251bUFyZ3VtZW50cykgewogICAgICAgICAgICAgaW50IG9mZnNldEZvckFyZ3VtZW50T25l
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCk7CiAgICAgICAgICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpICsgb2Zmc2V0Rm9yQXJn
dW1lbnRPbmUgLSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE4MDE4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjExLDYgKzIxMSw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwog
ICAgIC8qIGZyb20gc3VwZXIgbG9uZyBjb21waWxlcyB0aGF0IHRha2UgYSBsb3Qgb2YgbWVtb3J5
LiAqL1wKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtSW5saW5pbmdDYWxsZXJTaXplLCAxMDAwMCkg
XAogICAgIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhpbXVtVmFyYXJnc0ZvcklubGluaW5nLCAxMDAp
IFwKKyAgICBcCiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudENhbGxJbmxpbmluZywgdHJ1
ZSkgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRCeUlkSW5saW5pbmcsIHRydWUpIFwK
ICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVj
dC12YXJhcmdzLWlubGluZS1zbWFsbGVyLUZvby5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLWlubGluZS1zbWFsbGVy
LUZvby5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvY29uc3RydWN0LXZhcmFyZ3MtaW5saW5lLXNtYWxsZXItRm9vLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzUgQEAKK2Z1bmN0aW9uIEZvbyhhLCBiKSB7CisgICAgdmFyIGFycmF5ID0g
W107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAg
ICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICB0aGlzLmYgPSBhcnJheTsKK30KKwor
ZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJuIG5ldyBGb28oLi4uYXJyYXkpOworfQor
Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAgICBpZiAo
YS5sZW5ndGggIT0gYi5sZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9m
IGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEgKyAiIHZlcnN1cyAiICsgYjsKKyAgICBmb3IgKHZh
ciBpID0gYS5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsg
aSArICI6ICIgKyBhICsgIiB2ZXJzdXMgIiArIGI7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0
KGFycmF5KSB7CisgICAgdmFyIGV4cGVjdGVkID0gYXJyYXk7CisgICAgdmFyIGFjdHVhbCA9IGJh
cihhcnJheSkuZjsKKyAgICBjaGVja0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBm
b3IgKHZhciBqID0gMDsgaiA8IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7Cisg
ICAgdGVzdChhcnJheSk7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvY29uc3RydWN0LXZhcmFyZ3MtaW5saW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29uc3RydWN0LXZhcmFyZ3MtaW5saW5lLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1
Y3QtdmFyYXJncy1pbmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorZnVu
Y3Rpb24gRm9vKGEsIGIpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkucHVzaChhcmd1bWVu
dHNbaV0pOworICAgIHRoaXMuZiA9IHthOmEsIGI6YiwgYzphcnJheX07Cit9CisKK2Z1bmN0aW9u
IGJhcihhcnJheSkgeworICAgIHJldHVybiBuZXcgRm9vKC4uLmFycmF5KTsKK30KKworbm9Jbmxp
bmUoYmFyKTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAgaWYgKGEuYSAhPSBi
LmEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZl
cnN1cyAiICsgYi5hOworICAgIGlmIChhLmIgIT0gYi5iKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKKyAgICBpZiAoYS5j
Lmxlbmd0aCAhPSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGZv
ciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChhLmNbaV0gIT0gYi5j
W2ldKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0Y2gg
YXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgfQorfQor
CitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgdmFyIGV4cGVjdGVkID0ge2E6YXJyYXlbMF0s
IGI6YXJyYXlbMV0sIGM6YXJyYXl9OworICAgIHZhciBhY3R1YWwgPSBiYXIoYXJyYXkpLmY7Cisg
ICAgY2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNoKGopOworICAgIHRlc3QoYXJyYXkp
OworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVj
dC12YXJhcmdzLW5vLWlubGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLW5vLWlubGluZS5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29uc3RydWN0LXZhcmFy
Z3Mtbm8taW5saW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKK2Z1bmN0aW9u
IEZvbyhhLCBiKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ld
KTsKKyAgICB0aGlzLmYgPSB7YTphLCBiOmIsIGM6YXJyYXl9OworfQorCitub0lubGluZShGb28p
OworCitmdW5jdGlvbiBiYXIoYXJyYXkpIHsKKyAgICByZXR1cm4gbmV3IEZvbyguLi5hcnJheSk7
Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgeworICAg
IGlmIChhLmEgIT0gYi5hKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAi
ICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKKyAgICBpZiAoYS5iICE9IGIuYikKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7
CisgICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiAr
IGIuYzsKKyAgICBmb3IgKHZhciBpID0gYS5jLmxlbmd0aDsgaS0tOykgeworICAgICAgICBpZiAo
YS5jW2ldICE9IGIuY1tpXSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9m
IGMsIG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5j
OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIHZhciBleHBlY3RlZCA9
IHthOmFycmF5WzBdLCBiOmFycmF5WzFdLCBjOmFycmF5fTsKKyAgICB2YXIgYWN0dWFsID0gYmFy
KGFycmF5KS5mOworICAgIGNoZWNrRXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgaSAlIDY7ICsraikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAg
ICB0ZXN0KGFycmF5KTsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91dC1vZi1i
b3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9nZXQtYXJndW1lbnQtYnktdmFsLWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91dC1vZi1ib3Vu
ZHMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2dldC1hcmd1bWVudC1ieS12YWwtaW4taW5saW5lZC12YXJhcmdzLWNhbGwtb3V0LW9mLWJvdW5k
cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACit2YXIgZ2k7CisKK2Z1bmN0aW9u
IGZvbygpIHsKKyAgICByZXR1cm4gYXJndW1lbnRzW2dpXTsKK30KKworZnVuY3Rpb24gYmFyKGFy
cmF5LCBpKSB7CisgICAgZ2kgPSBpOworICAgIHJldHVybiBmb28uYXBwbHkodGhpcywgYXJyYXkp
OworfQorCitub0lubGluZShiYXIpOworCit2YXIgYmlnQXJyYXkgPSBbXTsKK2ZvciAodmFyIGkg
PSAwOyBpIDwgNTA7ICsraSkKKyAgICBiaWdBcnJheS5wdXNoKDQyKTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIG1pID0gaSAlIDUwOworICAgIHZhciByZXN1
bHQgPSBiYXIoYmlnQXJyYXksIG1pKTsKKyAgICBpZiAocmVzdWx0ICE9PSA0MikKKyAgICAgICAg
dGhyb3cgIkJhZCByZXN1bHQgaW4gZmlyc3QgbG9vcDogIiArIHJlc3VsdCArICI7IGV4cGVjdGVk
OiAiICsgNDI7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZh
ciBtaSA9IGkgJSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IGJhcihbNDJdLCBtaSk7CisgICAgdmFy
IGV4cGVjdGVkID0gbWkgPyB2b2lkIDAgOiA0MjsKKyAgICBpZiAocmVzdWx0ICE9PSBleHBlY3Rl
ZCkKKyAgICAgICAgdGhyb3cgIkJhZCByZXN1bHQgaW4gc2Vjb25kIGxvb3A6ICIgKyByZXN1bHQg
KyAiOyBleHBlY3RlZDogIiArIGV4cGVjdGVkOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLXNhZmUtaW4taW5saW5lZC12YXJh
cmdzLWNhbGwtb3V0LW9mLWJvdW5kcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2dldC1hcmd1bWVudC1ieS12YWwtc2FmZS1pbi1pbmxpbmVkLXZh
cmFyZ3MtY2FsbC1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLXNhZmUtaW4taW5saW5l
ZC12YXJhcmdzLWNhbGwtb3V0LW9mLWJvdW5kcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM1IEBACit2YXIgZ2k7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBpZiAoIWVmZmVjdGZ1bDQy
KCkpCisgICAgICAgIGFyZ3VtZW50cyA9ICJoZWxsbyI7CisgICAgcmV0dXJuIGFyZ3VtZW50c1tn
aV07Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSwgaSkgeworICAgIGdpID0gaTsKKyAgICByZXR1
cm4gZm9vLmFwcGx5KHRoaXMsIGFycmF5KTsKK30KKworbm9JbmxpbmUoYmFyKTsKKwordmFyIGJp
Z0FycmF5ID0gW107Citmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpCisgICAgYmlnQXJyYXku
cHVzaCg0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBt
aSA9IGkgJSA1MDsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKGJpZ0FycmF5LCBtaSk7CisgICAgaWYg
KHJlc3VsdCAhPT0gNDIpCisgICAgICAgIHRocm93ICJCYWQgcmVzdWx0IGluIGZpcnN0IGxvb3A6
ICIgKyByZXN1bHQgKyAiOyBleHBlY3RlZDogIiArIDQyOworfQorCisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBtaSA9IGkgJSAxMDA7CisgICAgdmFyIHJlc3Vs
dCA9IGJhcihbNDJdLCBtaSk7CisgICAgdmFyIGV4cGVjdGVkID0gbWkgPyB2b2lkIDAgOiA0MjsK
KyAgICBpZiAocmVzdWx0ICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgIkJhZCByZXN1bHQg
aW4gc2Vjb25kIGxvb3A6ICIgKyByZXN1bHQgKyAiOyBleHBlY3RlZDogIiArIGV4cGVjdGVkOwor
fQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dldC1teS1hcmd1
bWVudC1ieS12YWwtY3JlYXRlcy1hcmd1bWVudHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtbXktYXJndW1lbnQtYnktdmFsLWNyZWF0ZXMt
YXJndW1lbnRzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9nZXQtbXktYXJndW1lbnQtYnktdmFsLWNyZWF0ZXMtYXJndW1lbnRzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKK2Z1bmN0aW9uIGJsYWgoYXJncykgeworICAgIHZh
ciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkK
KyAgICAgICAgYXJyYXkucHVzaChhcmdzW2ldKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK2Z1
bmN0aW9uIGZvbygpIHsKKyAgICAvLyBGb3JjZSBjcmVhdGlvbiBvZiBhcmd1bWVudHMgYnkgZG9p
bmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCisgICAgdmFyIHRtcCA9IGFyZ3VtZW50c1s0Ml07Cisg
ICAgCisgICAgLy8gVXNlIHRoZSBjcmVhdGVkIGFyZ3VtZW50cyBvYmplY3QuCisgICAgcmV0dXJu
IGJsYWgoYXJndW1lbnRzKTsKK30KKworZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJu
IGZvby5hcHBseSh0aGlzLCBhcnJheSk7Cit9CisKK25vSW5saW5lKGJsYWgpOworbm9JbmxpbmUo
YmFyKTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAgaWYgKGEubGVuZ3RoICE9
IGIubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGxlbmd0aCBtaXNtYXRjaDogIiArIGEg
KyAiIHZlcnN1cyAiICsgYjsKKyAgICBmb3IgKHZhciBpID0gYS5sZW5ndGg7IGktLTspIHsKKyAg
ICAgICAgaWYgKGFbaV0gIT0gYltpXSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogbWlzbWF0
Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEgKyAiIHZlcnN1cyAiICsgYjsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICB2YXIgYWN0dWFsID0gYmFyKGFycmF5KTsKKyAg
ICBjaGVja0VxdWFsKGFjdHVhbCwgYXJyYXkpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8
IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7CisgICAgdGVzdChhcnJheSk7Cit9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10
aGVuLWlubGluZWQtY2FsbC1leGl0LWluLWZvby5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1l
eGl0LWluLWZvby5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWV4aXQtaW4tZm9vLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKK2Z1bmN0aW9uIGZvbyhhLCBiKSB7CisgICAg
dmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3Ro
OyArK2kpCisgICAgICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ldICsgMSk7CisgICAgcmV0dXJu
IHthOmEsIGI6YiwgYzphcnJheX07Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSkgeworICAgIHJl
dHVybiBmb28uYXBwbHkodGhpcywgYXJyYXkpOworfQorCitub0lubGluZShiYXIpOworCitmdW5j
dGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAgICBpZiAoYS5hICE9IGIuYSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTogIiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7Cisg
ICAgaWYgKGEuYiAhPSBiLmIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6
ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5iOworICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5s
ZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNt
YXRjaDogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgZm9yICh2YXIgaSA9IGEuYy5s
ZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0pCisgICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAi
OiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Qo
YXJyYXkpIHsKKyAgICB2YXIgZXhwZWN0ZWQgPSB7YTphcnJheVswXSwgYjphcnJheVsxXSwgYzph
cnJheS5tYXAoZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlICsgMSB9KX07CisgICAgdmFy
IGFjdHVhbCA9IGJhcihhcnJheSk7CisgICAgY2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsK
K30KKworLy8gVGhpcyBpcyBwcmV0dHkgZHVtYi4gV2UgbmVlZCB0byBmaXJzdCBtYWtlIHN1cmUg
dGhhdCB0aGUgVk0gaXMgcHJlcGFyZWQgZm9yIGRvdWJsZSBhcnJheXMgYmVpbmcKKy8vIGNyZWF0
ZWQuCit2YXIgYXJyYXkgPSBbXTsKK2FycmF5LnB1c2goNDIpOworYXJyYXkucHVzaCg0Mi41KTsK
KworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107
CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNo
KGopOworICAgIHRlc3QoYXJyYXkpOworfQorCit0ZXN0KFsxLjUsIDIuNSwgMy41XSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlu
bGluZWQtY2FsbC1pbmxpbmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWlubGluZWQuanMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQt
dmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDMgQEAKK2Z1bmN0aW9uIGZvbyhhLCBiKSB7CisgICAgdmFyIGFycmF5ID0gW107Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGFy
cmF5LnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICByZXR1cm4ge2E6YSwgYjpiLCBjOmFycmF5fTsK
K30KKworZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJuIGZvby5hcHBseSh0aGlzLCBh
cnJheSk7Cit9CisKK2Z1bmN0aW9uIGJheihhcnJheSkgeworICAgIHJldHVybiBiYXIoYXJyYXkp
OworfQorCitub0lubGluZShiYXopOworCitmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAg
ICBpZiAoYS5hICE9IGIuYSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTog
IiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7CisgICAgaWYgKGEuYiAhPSBiLmIpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5i
OworICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5sZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEuYyArICIgdmVyc3VzICIg
KyBiLmM7CisgICAgZm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYg
KGEuY1tpXSAhPSBiLmNbaV0pCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIu
YzsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICB2YXIgZXhwZWN0ZWQg
PSB7YTphcnJheVswXSwgYjphcnJheVsxXSwgYzphcnJheX07CisgICAgdmFyIGFjdHVhbCA9IGJh
eihhcnJheSk7CisgICAgY2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsKK30KKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNoKGopOworICAg
IHRlc3QoYXJyYXkpOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQt
Y2FsbC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzkgQEAKK2Z1bmN0aW9uIGZvbyhhLCBiKSB7CisgICAgdmFyIGFycmF5ID0gW107Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGFy
cmF5LnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICByZXR1cm4ge2E6YSwgYjpiLCBjOmFycmF5fTsK
K30KKworZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJuIGZvby5hcHBseSh0aGlzLCBh
cnJheSk7Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikg
eworICAgIGlmIChhLmEgIT0gYi5hKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKKyAgICBpZiAoYS5iICE9IGIuYikKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIg
KyBiLmI7CisgICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJz
dXMgIiArIGIuYzsKKyAgICBmb3IgKHZhciBpID0gYS5jLmxlbmd0aDsgaS0tOykgeworICAgICAg
ICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZh
bHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAi
ICsgYi5jOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIHZhciBleHBl
Y3RlZCA9IHthOmFycmF5WzBdLCBiOmFycmF5WzFdLCBjOmFycmF5fTsKKyAgICB2YXIgYWN0dWFs
ID0gYmFyKGFycmF5KTsKKyAgICBjaGVja0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQorCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7
CisgICAgdGVzdChhcnJheSk7Cit9CisKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDIwNikKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBACisyMDE1
LTAyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgREZHIHNo
b3VsZCByZWFsbHkgc3VwcG9ydCB2YXJhcmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEzMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZHMgYSB2ZXJzaW9uIG9mIGRlbHRhYmx1ZSB0
aGF0IHVzZXMgcmVzdCBhcmd1bWVudHMgcHJvZnVzZWx5LiBUaGlzIHNwZWVkcyB1cCBieSAyMCUg
d2l0aCB0aGlzCisgICAgICAgIHBhdGNoLiBJIGJlbGlldmUgdGhhdCB0aGUgbWFjaGluZXJ5IHRo
YXQgdGhpcyBwYXRjaCBwdXRzIGluIHBsYWNlIHdpbGwgYWxsb3cgdXMgdG8gdWx0aW1hdGVseQor
ICAgICAgICBydW4gZGVsdGFibHVlLXZhcmFyZ3MgYXQgdGhlIHNhbWUgc3RlYWR5LXN0YXRlIHBl
cmZvcm1hbmNlIGFzIG5vcm1hbCBkZWx0YWJsdWUuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL2Rl
bHRhYmx1ZS12YXJhcmdzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVz
cy9kZWx0YWJsdWUtdmFyYXJncy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9kZWx0YWJsdWUtdmFyYXJncy5qczogQWRkZWQuCisgICAgICAgIChhcmdzKToK
KyAgICAgICAgKE9iamVjdC5wcm90b3R5cGUuaW5oZXJpdHNGcm9tKToKKyAgICAgICAgKE9yZGVy
ZWRDb2xsZWN0aW9uKToKKyAgICAgICAgKE9yZGVyZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5hZGQp
OgorICAgICAgICAoT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLmF0KToKKyAgICAgICAgKE9y
ZGVyZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5zaXplKToKKyAgICAgICAgKE9yZGVyZWRDb2xsZWN0
aW9uLnByb3RvdHlwZS5yZW1vdmVGaXJzdCk6CisgICAgICAgIChPcmRlcmVkQ29sbGVjdGlvbi5w
cm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKFN0cmVuZ3RoKToKKyAgICAgICAgKFN0cmVuZ3Ro
LnN0cm9uZ2VyKToKKyAgICAgICAgKFN0cmVuZ3RoLndlYWtlcik6CisgICAgICAgIChTdHJlbmd0
aC53ZWFrZXN0T2YpOgorICAgICAgICAoU3RyZW5ndGguc3Ryb25nZXN0KToKKyAgICAgICAgKFN0
cmVuZ3RoLnByb3RvdHlwZS5uZXh0V2Vha2VyKToKKyAgICAgICAgKENvbnN0cmFpbnQpOgorICAg
ICAgICAoQ29uc3RyYWludC5wcm90b3R5cGUuYWRkQ29uc3RyYWludCk6CisgICAgICAgIChDb25z
dHJhaW50LnByb3RvdHlwZS5zYXRpc2Z5KToKKyAgICAgICAgKENvbnN0cmFpbnQucHJvdG90eXBl
LmRlc3Ryb3lDb25zdHJhaW50KToKKyAgICAgICAgKENvbnN0cmFpbnQucHJvdG90eXBlLmlzSW5w
dXQpOgorICAgICAgICAoVW5hcnlDb25zdHJhaW50KToKKyAgICAgICAgKFVuYXJ5Q29uc3RyYWlu
dC5wcm90b3R5cGUuYWRkVG9HcmFwaCk6CisgICAgICAgIChVbmFyeUNvbnN0cmFpbnQucHJvdG90
eXBlLmNob29zZU1ldGhvZCk6CisgICAgICAgIChVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlz
U2F0aXNmaWVkKToKKyAgICAgICAgKFVuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFya0lucHV0
cyk6CisgICAgICAgIChVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm91dHB1dCk6CisgICAgICAg
IChVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLnJlY2FsY3VsYXRlKToKKyAgICAgICAgKFVuYXJ5
Q29uc3RyYWludC5wcm90b3R5cGUubWFya1Vuc2F0aXNmaWVkKToKKyAgICAgICAgKFVuYXJ5Q29u
c3RyYWludC5wcm90b3R5cGUuaW5wdXRzS25vd24pOgorICAgICAgICAoVW5hcnlDb25zdHJhaW50
LnByb3RvdHlwZS5yZW1vdmVGcm9tR3JhcGgpOgorICAgICAgICAoU3RheUNvbnN0cmFpbnQpOgor
ICAgICAgICAoU3RheUNvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUpOgorICAgICAgICAoRWRp
dENvbnN0cmFpbnQucHJvdG90eXBlLmlzSW5wdXQpOgorICAgICAgICAoRWRpdENvbnN0cmFpbnQu
cHJvdG90eXBlLmV4ZWN1dGUpOgorICAgICAgICAoQmluYXJ5Q29uc3RyYWludCk6CisgICAgICAg
IChCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5jaG9vc2VNZXRob2QpOgorICAgICAgICAoQmlu
YXJ5Q29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9HcmFwaCk6CisgICAgICAgIChCaW5hcnlDb25z
dHJhaW50LnByb3RvdHlwZS5pc1NhdGlzZmllZCk6CisgICAgICAgIChCaW5hcnlDb25zdHJhaW50
LnByb3RvdHlwZS5tYXJrSW5wdXRzKToKKyAgICAgICAgKEJpbmFyeUNvbnN0cmFpbnQucHJvdG90
eXBlLmlucHV0KToKKyAgICAgICAgKEJpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm91dHB1dCk6
CisgICAgICAgIChCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5yZWNhbGN1bGF0ZSk6CisgICAg
ICAgIChCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5tYXJrVW5zYXRpc2ZpZWQpOgorICAgICAg
ICAoQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuaW5wdXRzS25vd24pOgorICAgICAgICAoQmlu
YXJ5Q29uc3RyYWludC5wcm90b3R5cGUucmVtb3ZlRnJvbUdyYXBoKToKKyAgICAgICAgKFNjYWxl
Q29uc3RyYWludCk6CisgICAgICAgIChTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLmFkZFRvR3Jh
cGgpOgorICAgICAgICAoU2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5yZW1vdmVGcm9tR3JhcGgp
OgorICAgICAgICAoU2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5tYXJrSW5wdXRzKToKKyAgICAg
ICAgKFNjYWxlQ29uc3RyYWludC5wcm90b3R5cGUuZXhlY3V0ZSk6CisgICAgICAgIChTY2FsZUNv
bnN0cmFpbnQucHJvdG90eXBlLnJlY2FsY3VsYXRlKToKKyAgICAgICAgKEVxdWFsaXR5Q29uc3Ry
YWludCk6CisgICAgICAgIChFcXVhbGl0eUNvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUpOgor
ICAgICAgICAoVmFyaWFibGUpOgorICAgICAgICAoVmFyaWFibGUucHJvdG90eXBlLmFkZENvbnN0
cmFpbnQpOgorICAgICAgICAoVmFyaWFibGUucHJvdG90eXBlLnJlbW92ZUNvbnN0cmFpbnQpOgor
ICAgICAgICAoUGxhbm5lcik6CisgICAgICAgIChQbGFubmVyLnByb3RvdHlwZS5pbmNyZW1lbnRh
bEFkZCk6CisgICAgICAgIChQbGFubmVyLnByb3RvdHlwZS5pbmNyZW1lbnRhbFJlbW92ZSk6Cisg
ICAgICAgIChQbGFubmVyLnByb3RvdHlwZS5uZXdNYXJrKToKKyAgICAgICAgKFBsYW5uZXIucHJv
dG90eXBlLm1ha2VQbGFuKToKKyAgICAgICAgKFBsYW5uZXIucHJvdG90eXBlLmV4dHJhY3RQbGFu
RnJvbUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFBsYW5uZXIucHJvdG90eXBlLmFkZFByb3BhZ2F0
ZSk6CisgICAgICAgIChQbGFubmVyLnByb3RvdHlwZS5yZW1vdmVQcm9wYWdhdGVGcm9tKToKKyAg
ICAgICAgKFBsYW5uZXIucHJvdG90eXBlLmFkZENvbnN0cmFpbnRzQ29uc3VtaW5nVG8pOgorICAg
ICAgICAoUGxhbik6CisgICAgICAgIChQbGFuLnByb3RvdHlwZS5hZGRDb25zdHJhaW50KToKKyAg
ICAgICAgKFBsYW4ucHJvdG90eXBlLnNpemUpOgorICAgICAgICAoUGxhbi5wcm90b3R5cGUuY29u
c3RyYWludEF0KToKKyAgICAgICAgKFBsYW4ucHJvdG90eXBlLmV4ZWN1dGUpOgorICAgICAgICAo
Y2hhaW5UZXN0KToKKyAgICAgICAgKHByb2plY3Rpb25UZXN0KToKKyAgICAgICAgKGNoYW5nZSk6
CisgICAgICAgIChkZWx0YUJsdWUpOgorCiAyMDE1LTAyLTE2ICBCZW5qYW1pbiBQb3VsYWluICA8
YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBDU1MgSklUOiBmaW5pc2ggOm50aC1sYXN0
LWNoaWxkKCkKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZGVsdGFibHVlLXZhcmFyZ3Mt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZGVsdGFi
bHVlLXZhcmFyZ3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2RlbHRhYmx1ZS12YXJhcmdzCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2RlbHRhYmx1ZS12YXJhcmdzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL2RlbHRhYmx1ZS12YXJhcmdzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2RlbHRhYmx1
ZS12YXJhcmdzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2RlbHRhYmx1ZS12YXJhcmdzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZGVsdGFibHVlLXZhcmFyZ3MuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4ODUgQEAKKy8vQCBza2lwIGlmICRhcmNoaXRlY3R1cmUgPT0gImFybSIg
YW5kICRob3N0T1MgPT0gImRhcndpbiIKKy8vIENvcHlyaWdodCAyMDA4IHRoZSBWOCBwcm9qZWN0
IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMTk5NiBKb2huIE1h
bG9uZXkgYW5kIE1hcmlvIFdvbGN6a28uCisKKy8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IKKy8vIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisv
LworLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjEx
MS0xMzA3ICBVU0EKKworCisvLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEZWx0YUJsdWUg
YmVuY2htYXJrIGlzIGRlcml2ZWQKKy8vIGZyb20gdGhlIFNtYWxsdGFsayBpbXBsZW1lbnRhdGlv
biBieSBKb2huIE1hbG9uZXkgYW5kIE1hcmlvCisvLyBXb2xjemtvLiBTb21lIHBhcnRzIGhhdmUg
YmVlbiB0cmFuc2xhdGVkIGRpcmVjdGx5LCB3aGVyZWFzCisvLyBvdGhlcnMgaGF2ZSBiZWVuIG1v
ZGlmaWVkIG1vcmUgYWdncmVzaXZlbHkgdG8gbWFrZSBpdCBmZWVsCisvLyBtb3JlIGxpa2UgYSBK
YXZhU2NyaXB0IHByb2dyYW0uCisKKy8qKgorICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9u
IG9mIHRoZSBEZWx0YUJsdWUgY29uc3RyYWludC1zb2x2aW5nCisgKiBhbGdvcml0aG0sIGFzIGRl
c2NyaWJlZCBpbjoKKyAqCisgKiAiVGhlIERlbHRhQmx1ZSBBbGdvcml0aG06IEFuIEluY3JlbWVu
dGFsIENvbnN0cmFpbnQgSGllcmFyY2h5IFNvbHZlciIKKyAqICAgQmpvcm4gTi4gRnJlZW1hbi1C
ZW5zb24gYW5kIEpvaG4gTWFsb25leQorICogICBKYW51YXJ5IDE5OTAgQ29tbXVuaWNhdGlvbnMg
b2YgdGhlIEFDTSwKKyAqICAgYWxzbyBhdmFpbGFibGUgYXMgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uIFRSIDg5LTA4LTA2LgorICoKKyAqIEJld2FyZTogdGhpcyBiZW5jaG1hcmsgaXMgd3JpdHRl
biBpbiBhIGdyb3Rlc3F1ZSBzdHlsZSB3aGVyZQorICogdGhlIGNvbnN0cmFpbnQgbW9kZWwgaXMg
YnVpbHQgYnkgc2lkZS1lZmZlY3RzIGZyb20gY29uc3RydWN0b3JzLgorICogSSd2ZSBrZXB0IGl0
IHRoaXMgd2F5IHRvIGF2b2lkIGRldmlhdGluZyB0b28gbXVjaCBmcm9tIHRoZSBvcmlnaW5hbAor
ICogaW1wbGVtZW50YXRpb24uCisgKi8KKworZnVuY3Rpb24gYXJncygpIHsKKyAgICB2YXIgYXJy
YXkgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkK
KyAgICAgICAgYXJyYXkucHVzaChhcmd1bWVudHNbaV0pOworICAgIHJldHVybiBhcnJheTsKK30K
KworCisvKiAtLS0gTyBiIGogZSBjIHQgICBNIG8gZCBlIGwgLS0tICovCisKK09iamVjdC5wcm90
b3R5cGUuaW5oZXJpdHNGcm9tID0gZnVuY3Rpb24gKHNodXBlcikgeworICBmdW5jdGlvbiBJbmhl
cml0ZXIoKSB7IH0KKyAgSW5oZXJpdGVyLnByb3RvdHlwZSA9IHNodXBlci5wcm90b3R5cGU7Cisg
IHRoaXMucHJvdG90eXBlID0gbmV3IEluaGVyaXRlciguLi5hcmdzKCkpOworICB0aGlzLnN1cGVy
Q29uc3RydWN0b3IgPSBzaHVwZXI7Cit9CisKK2Z1bmN0aW9uIE9yZGVyZWRDb2xsZWN0aW9uKCkg
eworICB0aGlzLmVsbXMgPSBuZXcgQXJyYXkoLi4uYXJncygpKTsKK30KKworT3JkZXJlZENvbGxl
Y3Rpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChlbG0pIHsKKyAgdGhpcy5lbG1zLnB1c2go
Li4uYXJncyhlbG0pKTsKK30KKworT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLmF0ID0gZnVu
Y3Rpb24gKGluZGV4KSB7CisgIHJldHVybiB0aGlzLmVsbXNbaW5kZXhdOworfQorCitPcmRlcmVk
Q29sbGVjdGlvbi5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMu
ZWxtcy5sZW5ndGg7Cit9CisKK09yZGVyZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5yZW1vdmVGaXJz
dCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMuZWxtcy5wb3AoLi4uYXJncygpKTsKK30K
KworT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChlbG0pIHsK
KyAgdmFyIGluZGV4ID0gMCwgc2tpcHBlZCA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5lbG1zLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIHZhbHVlID0gdGhpcy5lbG1zW2ldOworICAg
IGlmICh2YWx1ZSAhPSBlbG0pIHsKKyAgICAgIHRoaXMuZWxtc1tpbmRleF0gPSB2YWx1ZTsKKyAg
ICAgIGluZGV4Kys7CisgICAgfSBlbHNlIHsKKyAgICAgIHNraXBwZWQrKzsKKyAgICB9CisgIH0K
KyAgZm9yICh2YXIgaSA9IDA7IGkgPCBza2lwcGVkOyBpKyspCisgICAgdGhpcy5lbG1zLnBvcCgu
Li5hcmdzKCkpOworfQorCisvKiAtLS0gKgorICogUyB0IHIgZSBuIGcgdCBoCisgKiAtLS0gKi8K
KworLyoqCisgKiBTdHJlbmd0aHMgYXJlIHVzZWQgdG8gbWVhc3VyZSB0aGUgcmVsYXRpdmUgaW1w
b3J0YW5jZSBvZiBjb25zdHJhaW50cy4KKyAqIE5ldyBzdHJlbmd0aHMgbWF5IGJlIGluc2VydGVk
IGluIHRoZSBzdHJlbmd0aCBoaWVyYXJjaHkgd2l0aG91dAorICogZGlzcnVwdGluZyBjdXJyZW50
IGNvbnN0cmFpbnRzLiAgU3RyZW5ndGhzIGNhbm5vdCBiZSBjcmVhdGVkIG91dHNpZGUKKyAqIHRo
aXMgY2xhc3MsIHNvIHBvaW50ZXIgY29tcGFyaXNvbiBjYW4gYmUgdXNlZCBmb3IgdmFsdWUgY29t
cGFyaXNvbi4KKyAqLworZnVuY3Rpb24gU3RyZW5ndGgoc3RyZW5ndGhWYWx1ZSwgbmFtZSkgewor
ICB0aGlzLnN0cmVuZ3RoVmFsdWUgPSBzdHJlbmd0aFZhbHVlOworICB0aGlzLm5hbWUgPSBuYW1l
OworfQorCitTdHJlbmd0aC5zdHJvbmdlciA9IGZ1bmN0aW9uIChzMSwgczIpIHsKKyAgcmV0dXJu
IHMxLnN0cmVuZ3RoVmFsdWUgPCBzMi5zdHJlbmd0aFZhbHVlOworfQorCitTdHJlbmd0aC53ZWFr
ZXIgPSBmdW5jdGlvbiAoczEsIHMyKSB7CisgIHJldHVybiBzMS5zdHJlbmd0aFZhbHVlID4gczIu
c3RyZW5ndGhWYWx1ZTsKK30KKworU3RyZW5ndGgud2Vha2VzdE9mID0gZnVuY3Rpb24gKHMxLCBz
MikgeworICByZXR1cm4gdGhpcy53ZWFrZXIoLi4uYXJncyhzMSwgczIpKSA/IHMxIDogczI7Cit9
CisKK1N0cmVuZ3RoLnN0cm9uZ2VzdCA9IGZ1bmN0aW9uIChzMSwgczIpIHsKKyAgcmV0dXJuIHRo
aXMuc3Ryb25nZXIoLi4uYXJncyhzMSwgczIpKSA/IHMxIDogczI7Cit9CisKK1N0cmVuZ3RoLnBy
b3RvdHlwZS5uZXh0V2Vha2VyID0gZnVuY3Rpb24gKCkgeworICBzd2l0Y2ggKHRoaXMuc3RyZW5n
dGhWYWx1ZSkgeworICAgIGNhc2UgMDogcmV0dXJuIFN0cmVuZ3RoLldFQUtFU1Q7CisgICAgY2Fz
ZSAxOiByZXR1cm4gU3RyZW5ndGguV0VBS19ERUZBVUxUOworICAgIGNhc2UgMjogcmV0dXJuIFN0
cmVuZ3RoLk5PUk1BTDsKKyAgICBjYXNlIDM6IHJldHVybiBTdHJlbmd0aC5TVFJPTkdfREVGQVVM
VDsKKyAgICBjYXNlIDQ6IHJldHVybiBTdHJlbmd0aC5QUkVGRVJSRUQ7CisgICAgY2FzZSA1OiBy
ZXR1cm4gU3RyZW5ndGguUkVRVUlSRUQ7CisgIH0KK30KKworLy8gU3RyZW5ndGggY29uc3RhbnRz
LgorU3RyZW5ndGguUkVRVUlSRUQgICAgICAgID0gbmV3IFN0cmVuZ3RoKC4uLmFyZ3MoMCwgInJl
cXVpcmVkIikpOworU3RyZW5ndGguU1RPTkdfUFJFRkVSUkVEID0gbmV3IFN0cmVuZ3RoKC4uLmFy
Z3MoMSwgInN0cm9uZ1ByZWZlcnJlZCIpKTsKK1N0cmVuZ3RoLlBSRUZFUlJFRCAgICAgICA9IG5l
dyBTdHJlbmd0aCguLi5hcmdzKDIsICJwcmVmZXJyZWQiKSk7CitTdHJlbmd0aC5TVFJPTkdfREVG
QVVMVCAgPSBuZXcgU3RyZW5ndGgoLi4uYXJncygzLCAic3Ryb25nRGVmYXVsdCIpKTsKK1N0cmVu
Z3RoLk5PUk1BTCAgICAgICAgICA9IG5ldyBTdHJlbmd0aCguLi5hcmdzKDQsICJub3JtYWwiKSk7
CitTdHJlbmd0aC5XRUFLX0RFRkFVTFQgICAgPSBuZXcgU3RyZW5ndGgoLi4uYXJncyg1LCAid2Vh
a0RlZmF1bHQiKSk7CitTdHJlbmd0aC5XRUFLRVNUICAgICAgICAgPSBuZXcgU3RyZW5ndGgoLi4u
YXJncyg2LCAid2Vha2VzdCIpKTsKKworLyogLS0tICoKKyAqIEMgbyBuIHMgdCByIGEgaSBuIHQK
KyAqIC0tLSAqLworCisvKioKKyAqIEFuIGFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyBhIHN5
c3RlbS1tYWludGFpbmFibGUgcmVsYXRpb25zaGlwCisgKiAob3IgImNvbnN0cmFpbnQiKSBiZXR3
ZWVuIGEgc2V0IG9mIHZhcmlhYmxlcy4gQSBjb25zdHJhaW50IHN1cHBsaWVzCisgKiBhIHN0cmVu
Z3RoIGluc3RhbmNlIHZhcmlhYmxlOyBjb25jcmV0ZSBzdWJjbGFzc2VzIHByb3ZpZGUgYSBtZWFu
cworICogb2Ygc3RvcmluZyB0aGUgY29uc3RyYWluZWQgdmFyaWFibGVzIGFuZCBvdGhlciBpbmZv
cm1hdGlvbiByZXF1aXJlZAorICogdG8gcmVwcmVzZW50IGEgY29uc3RyYWludC4KKyAqLworZnVu
Y3Rpb24gQ29uc3RyYWludChzdHJlbmd0aCkgeworICB0aGlzLnN0cmVuZ3RoID0gc3RyZW5ndGg7
Cit9CisKKy8qKgorICogQWN0aXZhdGUgdGhpcyBjb25zdHJhaW50IGFuZCBhdHRlbXB0IHRvIHNh
dGlzZnkgaXQuCisgKi8KK0NvbnN0cmFpbnQucHJvdG90eXBlLmFkZENvbnN0cmFpbnQgPSBmdW5j
dGlvbiAoKSB7CisgIHRoaXMuYWRkVG9HcmFwaCguLi5hcmdzKCkpOworICBwbGFubmVyLmluY3Jl
bWVudGFsQWRkKC4uLmFyZ3ModGhpcykpOworfQorCisvKioKKyAqIEF0dGVtcHQgdG8gZmluZCBh
IHdheSB0byBlbmZvcmNlIHRoaXMgY29uc3RyYWludC4gSWYgc3VjY2Vzc2Z1bCwKKyAqIHJlY29y
ZCB0aGUgc29sdXRpb24sIHBlcmhhcHMgbW9kaWZ5aW5nIHRoZSBjdXJyZW50IGRhdGFmbG93Cisg
KiBncmFwaC4gQW5zd2VyIHRoZSBjb25zdHJhaW50IHRoYXQgdGhpcyBjb25zdHJhaW50IG92ZXJy
aWRlcywgaWYKKyAqIHRoZXJlIGlzIG9uZSwgb3IgbmlsLCBpZiB0aGVyZSBpc24ndC4KKyAqIEFz
c3VtZTogSSBhbSBub3QgYWxyZWFkeSBzYXRpc2ZpZWQuCisgKi8KK0NvbnN0cmFpbnQucHJvdG90
eXBlLnNhdGlzZnkgPSBmdW5jdGlvbiAobWFyaykgeworICB0aGlzLmNob29zZU1ldGhvZCguLi5h
cmdzKG1hcmspKTsKKyAgaWYgKCF0aGlzLmlzU2F0aXNmaWVkKC4uLmFyZ3MoKSkpIHsKKyAgICBp
ZiAodGhpcy5zdHJlbmd0aCA9PSBTdHJlbmd0aC5SRVFVSVJFRCkKKyAgICAgIGFsZXJ0KC4uLmFy
Z3MoIkNvdWxkIG5vdCBzYXRpc2Z5IGEgcmVxdWlyZWQgY29uc3RyYWludCEiKSk7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKyAgdGhpcy5tYXJrSW5wdXRzKC4uLmFyZ3MobWFyaykpOworICB2YXIg
b3V0ID0gdGhpcy5vdXRwdXQoLi4uYXJncygpKTsKKyAgdmFyIG92ZXJyaWRkZW4gPSBvdXQuZGV0
ZXJtaW5lZEJ5OworICBpZiAob3ZlcnJpZGRlbiAhPSBudWxsKSBvdmVycmlkZGVuLm1hcmtVbnNh
dGlzZmllZCguLi5hcmdzKCkpOworICBvdXQuZGV0ZXJtaW5lZEJ5ID0gdGhpczsKKyAgaWYgKCFw
bGFubmVyLmFkZFByb3BhZ2F0ZSguLi5hcmdzKHRoaXMsIG1hcmspKSkKKyAgICBhbGVydCguLi5h
cmdzKCJDeWNsZSBlbmNvdW50ZXJlZCIpKTsKKyAgb3V0Lm1hcmsgPSBtYXJrOworICByZXR1cm4g
b3ZlcnJpZGRlbjsKK30KKworQ29uc3RyYWludC5wcm90b3R5cGUuZGVzdHJveUNvbnN0cmFpbnQg
PSBmdW5jdGlvbiAoKSB7CisgIGlmICh0aGlzLmlzU2F0aXNmaWVkKC4uLmFyZ3MoKSkpIHBsYW5u
ZXIuaW5jcmVtZW50YWxSZW1vdmUoLi4uYXJncyh0aGlzKSk7CisgIGVsc2UgdGhpcy5yZW1vdmVG
cm9tR3JhcGgoLi4uYXJncygpKTsKK30KKworLyoqCisgKiBOb3JtYWwgY29uc3RyYWludHMgYXJl
IG5vdCBpbnB1dCBjb25zdHJhaW50cy4gIEFuIGlucHV0IGNvbnN0cmFpbnQKKyAqIGlzIG9uZSB0
aGF0IGRlcGVuZHMgb24gZXh0ZXJuYWwgc3RhdGUsIHN1Y2ggYXMgdGhlIG1vdXNlLCB0aGUKKyAq
IGtleWJvcmQsIGEgY2xvY2ssIG9yIHNvbWUgYXJiaXRyYXR5IHBpZWNlIG9mIGltcGVyYXRpdmUg
Y29kZS4KKyAqLworQ29uc3RyYWludC5wcm90b3R5cGUuaXNJbnB1dCA9IGZ1bmN0aW9uICgpIHsK
KyAgcmV0dXJuIGZhbHNlOworfQorCisvKiAtLS0gKgorICogVSBuIGEgciB5ICAgQyBvIG4gcyB0
IHIgYSBpIG4gdAorICogLS0tICovCisKKy8qKgorICogQWJzdHJhY3Qgc3VwZXJjbGFzcyBmb3Ig
Y29uc3RyYWludHMgaGF2aW5nIGEgc2luZ2xlIHBvc3NpYmxlIG91dHB1dAorICogdmFyaWFibGUu
CisgKi8KK2Z1bmN0aW9uIFVuYXJ5Q29uc3RyYWludCh2LCBzdHJlbmd0aCkgeworICBVbmFyeUNv
bnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHN0cmVuZ3RoKTsKKyAgdGhpcy5t
eU91dHB1dCA9IHY7CisgIHRoaXMuc2F0aXNmaWVkID0gZmFsc2U7CisgIHRoaXMuYWRkQ29uc3Ry
YWludCguLi5hcmdzKCkpOworfQorCitVbmFyeUNvbnN0cmFpbnQuaW5oZXJpdHNGcm9tKC4uLmFy
Z3MoQ29uc3RyYWludCkpOworCisvKioKKyAqIEFkZHMgdGhpcyBjb25zdHJhaW50IHRvIHRoZSBj
b25zdHJhaW50IGdyYXBoCisgKi8KK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9HcmFw
aCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5teU91dHB1dC5hZGRDb25zdHJhaW50KC4uLmFyZ3Mo
dGhpcykpOworICB0aGlzLnNhdGlzZmllZCA9IGZhbHNlOworfQorCisvKioKKyAqIERlY2lkZXMg
aWYgdGhpcyBjb25zdHJhaW50IGNhbiBiZSBzYXRpc2ZpZWQgYW5kIHJlY29yZHMgdGhhdAorICog
ZGVjaXNpb24uCisgKi8KK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuY2hvb3NlTWV0aG9kID0g
ZnVuY3Rpb24gKG1hcmspIHsKKyAgdGhpcy5zYXRpc2ZpZWQgPSAodGhpcy5teU91dHB1dC5tYXJr
ICE9IG1hcmspCisgICAgJiYgU3RyZW5ndGguc3Ryb25nZXIoLi4uYXJncyh0aGlzLnN0cmVuZ3Ro
LCB0aGlzLm15T3V0cHV0LndhbGtTdHJlbmd0aCkpOworfQorCisvKioKKyAqIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkIGluIHRoZSBjdXJyZW50IHNvbHV0aW9u
LgorICovCitVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlzU2F0aXNmaWVkID0gZnVuY3Rpb24g
KCkgeworICByZXR1cm4gdGhpcy5zYXRpc2ZpZWQ7Cit9CisKK1VuYXJ5Q29uc3RyYWludC5wcm90
b3R5cGUubWFya0lucHV0cyA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIC8vIGhhcyBubyBpbnB1dHMK
K30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG91dHB1dCB2YXJpYWJsZS4KKyAqLwor
VW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5vdXRwdXQgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVy
biB0aGlzLm15T3V0cHV0OworfQorCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgd2Fsa2Fib3V0IHN0
cmVuZ3RoLCB0aGUgc3RheSBmbGFnLCBhbmQsIGlmIGl0IGlzCisgKiAnc3RheScsIHRoZSB2YWx1
ZSBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IG9mIHRoaXMgY29uc3RyYWludC4gQXNzdW1lCisgKiB0
aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkLgorICovCitVbmFyeUNvbnN0cmFpbnQucHJvdG90
eXBlLnJlY2FsY3VsYXRlID0gZnVuY3Rpb24gKCkgeworICB0aGlzLm15T3V0cHV0LndhbGtTdHJl
bmd0aCA9IHRoaXMuc3RyZW5ndGg7CisgIHRoaXMubXlPdXRwdXQuc3RheSA9ICF0aGlzLmlzSW5w
dXQoLi4uYXJncygpKTsKKyAgaWYgKHRoaXMubXlPdXRwdXQuc3RheSkgdGhpcy5leGVjdXRlKC4u
LmFyZ3MoKSk7IC8vIFN0YXkgb3B0aW1pemF0aW9uCit9CisKKy8qKgorICogUmVjb3JkcyB0aGF0
IHRoaXMgY29uc3RyYWludCBpcyB1bnNhdGlzZmllZAorICovCitVbmFyeUNvbnN0cmFpbnQucHJv
dG90eXBlLm1hcmtVbnNhdGlzZmllZCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5zYXRpc2ZpZWQg
PSBmYWxzZTsKK30KKworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pbnB1dHNLbm93biA9IGZ1
bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRydWU7Cit9CisKK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5
cGUucmVtb3ZlRnJvbUdyYXBoID0gZnVuY3Rpb24gKCkgeworICBpZiAodGhpcy5teU91dHB1dCAh
PSBudWxsKSB0aGlzLm15T3V0cHV0LnJlbW92ZUNvbnN0cmFpbnQoLi4uYXJncyh0aGlzKSk7Cisg
IHRoaXMuc2F0aXNmaWVkID0gZmFsc2U7Cit9CisKKy8qIC0tLSAqCisgKiBTIHQgYSB5ICAgQyBv
IG4gcyB0IHIgYSBpIG4gdAorICogLS0tICovCisKKy8qKgorICogVmFyaWFibGVzIHRoYXQgc2hv
dWxkLCB3aXRoIHNvbWUgbGV2ZWwgb2YgcHJlZmVyZW5jZSwgc3RheSB0aGUgc2FtZS4KKyAqIFBs
YW5uZXJzIG1heSBleHBsb2l0IHRoZSBmYWN0IHRoYXQgaW5zdGFuY2VzLCBpZiBzYXRpc2ZpZWQs
IHdpbGwgbm90CisgKiBjaGFuZ2UgdGhlaXIgb3V0cHV0IGR1cmluZyBwbGFuIGV4ZWN1dGlvbi4g
IFRoaXMgaXMgY2FsbGVkICJzdGF5CisgKiBvcHRpbWl6YXRpb24iLgorICovCitmdW5jdGlvbiBT
dGF5Q29uc3RyYWludCh2LCBzdHIpIHsKKyAgU3RheUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rv
ci5jYWxsKHRoaXMsIHYsIHN0cik7Cit9CisKK1N0YXlDb25zdHJhaW50LmluaGVyaXRzRnJvbSgu
Li5hcmdzKFVuYXJ5Q29uc3RyYWludCkpOworCitTdGF5Q29uc3RyYWludC5wcm90b3R5cGUuZXhl
Y3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgLy8gU3RheSBjb25zdHJhaW50cyBkbyBub3RoaW5nCit9
CisKKy8qIC0tLSAqCisgKiBFIGQgaSB0ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAorICogLS0tICov
CisKKy8qKgorICogQSB1bmFyeSBpbnB1dCBjb25zdHJhaW50IHVzZWQgdG8gbWFyayBhIHZhcmlh
YmxlIHRoYXQgdGhlIGNsaWVudAorICogd2lzaGVzIHRvIGNoYW5nZS4KKyAqLworZnVuY3Rpb24g
RWRpdENvbnN0cmFpbnQodiwgc3RyKSB7CisgIEVkaXRDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0
b3IuY2FsbCh0aGlzLCB2LCBzdHIpOworfQorCitFZGl0Q29uc3RyYWludC5pbmhlcml0c0Zyb20o
Li4uYXJncyhVbmFyeUNvbnN0cmFpbnQpKTsKKworLyoqCisgKiBFZGl0cyBpbmRpY2F0ZSB0aGF0
IGEgdmFyaWFibGUgaXMgdG8gYmUgY2hhbmdlZCBieSBpbXBlcmF0aXZlIGNvZGUuCisgKi8KK0Vk
aXRDb25zdHJhaW50LnByb3RvdHlwZS5pc0lucHV0ID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4g
dHJ1ZTsKK30KKworRWRpdENvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAo
KSB7CisgIC8vIEVkaXQgY29uc3RyYWludHMgZG8gbm90aGluZworfQorCisvKiAtLS0gKgorICog
QiBpIG4gYSByIHkgICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKwordmFyIERpcmVj
dGlvbiA9IG5ldyBPYmplY3QoLi4uYXJncygpKTsKK0RpcmVjdGlvbi5OT05FICAgICA9IDA7CitE
aXJlY3Rpb24uRk9SV0FSRCAgPSAxOworRGlyZWN0aW9uLkJBQ0tXQVJEID0gLTE7CisKKy8qKgor
ICogQWJzdHJhY3Qgc3VwZXJjbGFzcyBmb3IgY29uc3RyYWludHMgaGF2aW5nIHR3byBwb3NzaWJs
ZSBvdXRwdXQKKyAqIHZhcmlhYmxlcy4KKyAqLworZnVuY3Rpb24gQmluYXJ5Q29uc3RyYWludCh2
YXIxLCB2YXIyLCBzdHJlbmd0aCkgeworICBCaW5hcnlDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0
b3IuY2FsbCh0aGlzLCBzdHJlbmd0aCk7CisgIHRoaXMudjEgPSB2YXIxOworICB0aGlzLnYyID0g
dmFyMjsKKyAgdGhpcy5kaXJlY3Rpb24gPSBEaXJlY3Rpb24uTk9ORTsKKyAgdGhpcy5hZGRDb25z
dHJhaW50KC4uLmFyZ3MoKSk7Cit9CisKK0JpbmFyeUNvbnN0cmFpbnQuaW5oZXJpdHNGcm9tKC4u
LmFyZ3MoQ29uc3RyYWludCkpOworCisvKioKKyAqIERlY2lkZXMgaWYgdGhpcyBjb25zdHJhaW50
IGNhbiBiZSBzYXRpc2ZpZWQgYW5kIHdoaWNoIHdheSBpdAorICogc2hvdWxkIGZsb3cgYmFzZWQg
b24gdGhlIHJlbGF0aXZlIHN0cmVuZ3RoIG9mIHRoZSB2YXJpYWJsZXMgcmVsYXRlZCwKKyAqIGFu
ZCByZWNvcmQgdGhhdCBkZWNpc2lvbi4KKyAqLworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUu
Y2hvb3NlTWV0aG9kID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgaWYgKHRoaXMudjEubWFyayA9PSBt
YXJrKSB7CisgICAgdGhpcy5kaXJlY3Rpb24gPSAodGhpcy52Mi5tYXJrICE9IG1hcmsgJiYgU3Ry
ZW5ndGguc3Ryb25nZXIoLi4uYXJncyh0aGlzLnN0cmVuZ3RoLCB0aGlzLnYyLndhbGtTdHJlbmd0
aCkpKQorICAgICAgPyBEaXJlY3Rpb24uRk9SV0FSRAorICAgICAgOiBEaXJlY3Rpb24uTk9ORTsK
KyAgfQorICBpZiAodGhpcy52Mi5tYXJrID09IG1hcmspIHsKKyAgICB0aGlzLmRpcmVjdGlvbiA9
ICh0aGlzLnYxLm1hcmsgIT0gbWFyayAmJiBTdHJlbmd0aC5zdHJvbmdlciguLi5hcmdzKHRoaXMu
c3RyZW5ndGgsIHRoaXMudjEud2Fsa1N0cmVuZ3RoKSkpCisgICAgICA/IERpcmVjdGlvbi5CQUNL
V0FSRAorICAgICAgOiBEaXJlY3Rpb24uTk9ORTsKKyAgfQorICBpZiAoU3RyZW5ndGgud2Vha2Vy
KC4uLmFyZ3ModGhpcy52MS53YWxrU3RyZW5ndGgsIHRoaXMudjIud2Fsa1N0cmVuZ3RoKSkpIHsK
KyAgICB0aGlzLmRpcmVjdGlvbiA9IFN0cmVuZ3RoLnN0cm9uZ2VyKC4uLmFyZ3ModGhpcy5zdHJl
bmd0aCwgdGhpcy52MS53YWxrU3RyZW5ndGgpKQorICAgICAgPyBEaXJlY3Rpb24uQkFDS1dBUkQK
KyAgICAgIDogRGlyZWN0aW9uLk5PTkU7CisgIH0gZWxzZSB7CisgICAgdGhpcy5kaXJlY3Rpb24g
PSBTdHJlbmd0aC5zdHJvbmdlciguLi5hcmdzKHRoaXMuc3RyZW5ndGgsIHRoaXMudjIud2Fsa1N0
cmVuZ3RoKSkKKyAgICAgID8gRGlyZWN0aW9uLkZPUldBUkQKKyAgICAgIDogRGlyZWN0aW9uLkJB
Q0tXQVJECisgIH0KK30KKworLyoqCisgKiBBZGQgdGhpcyBjb25zdHJhaW50IHRvIHRoZSBjb25z
dHJhaW50IGdyYXBoCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmFkZFRvR3JhcGgg
PSBmdW5jdGlvbiAoKSB7CisgIHRoaXMudjEuYWRkQ29uc3RyYWludCguLi5hcmdzKHRoaXMpKTsK
KyAgdGhpcy52Mi5hZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworICB0aGlzLmRpcmVjdGlv
biA9IERpcmVjdGlvbi5OT05FOworfQorCisvKioKKyAqIEFuc3dlciB0cnVlIGlmIHRoaXMgY29u
c3RyYWludCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGN1cnJlbnQgc29sdXRpb24uCisgKi8KK0JpbmFy
eUNvbnN0cmFpbnQucHJvdG90eXBlLmlzU2F0aXNmaWVkID0gZnVuY3Rpb24gKCkgeworICByZXR1
cm4gdGhpcy5kaXJlY3Rpb24gIT0gRGlyZWN0aW9uLk5PTkU7Cit9CisKKy8qKgorICogTWFyayB0
aGUgaW5wdXQgdmFyaWFibGUgd2l0aCB0aGUgZ2l2ZW4gbWFyay4KKyAqLworQmluYXJ5Q29uc3Ry
YWludC5wcm90b3R5cGUubWFya0lucHV0cyA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIHRoaXMuaW5w
dXQoLi4uYXJncygpKS5tYXJrID0gbWFyazsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJy
ZW50IGlucHV0IHZhcmlhYmxlCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlucHV0
ID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gKHRoaXMuZGlyZWN0aW9uID09IERpcmVjdGlvbi5G
T1JXQVJEKSA/IHRoaXMudjEgOiB0aGlzLnYyOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIGN1
cnJlbnQgb3V0cHV0IHZhcmlhYmxlCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm91
dHB1dCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuICh0aGlzLmRpcmVjdGlvbiA9PSBEaXJlY3Rp
b24uRk9SV0FSRCkgPyB0aGlzLnYyIDogdGhpcy52MTsKK30KKworLyoqCisgKiBDYWxjdWxhdGUg
dGhlIHdhbGthYm91dCBzdHJlbmd0aCwgdGhlIHN0YXkgZmxhZywgYW5kLCBpZiBpdCBpcworICog
J3N0YXknLCB0aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBvZiB0aGlzCisgKiBjb25z
dHJhaW50LiBBc3N1bWUgdGhpcyBjb25zdHJhaW50IGlzIHNhdGlzZmllZC4KKyAqLworQmluYXJ5
Q29uc3RyYWludC5wcm90b3R5cGUucmVjYWxjdWxhdGUgPSBmdW5jdGlvbiAoKSB7CisgIHZhciBp
aG4gPSB0aGlzLmlucHV0KC4uLmFyZ3MoKSksIG91dCA9IHRoaXMub3V0cHV0KC4uLmFyZ3MoKSk7
CisgIG91dC53YWxrU3RyZW5ndGggPSBTdHJlbmd0aC53ZWFrZXN0T2YoLi4uYXJncyh0aGlzLnN0
cmVuZ3RoLCBpaG4ud2Fsa1N0cmVuZ3RoKSk7CisgIG91dC5zdGF5ID0gaWhuLnN0YXk7CisgIGlm
IChvdXQuc3RheSkgdGhpcy5leGVjdXRlKC4uLmFyZ3MoKSk7Cit9CisKKy8qKgorICogUmVjb3Jk
IHRoZSBmYWN0IHRoYXQgdGhpcyBjb25zdHJhaW50IGlzIHVuc2F0aXNmaWVkLgorICovCitCaW5h
cnlDb25zdHJhaW50LnByb3RvdHlwZS5tYXJrVW5zYXRpc2ZpZWQgPSBmdW5jdGlvbiAoKSB7Cisg
IHRoaXMuZGlyZWN0aW9uID0gRGlyZWN0aW9uLk5PTkU7Cit9CisKK0JpbmFyeUNvbnN0cmFpbnQu
cHJvdG90eXBlLmlucHV0c0tub3duID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgdmFyIGkgPSB0aGlz
LmlucHV0KC4uLmFyZ3MoKSk7CisgIHJldHVybiBpLm1hcmsgPT0gbWFyayB8fCBpLnN0YXkgfHwg
aS5kZXRlcm1pbmVkQnkgPT0gbnVsbDsKK30KKworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUu
cmVtb3ZlRnJvbUdyYXBoID0gZnVuY3Rpb24gKCkgeworICBpZiAodGhpcy52MSAhPSBudWxsKSB0
aGlzLnYxLnJlbW92ZUNvbnN0cmFpbnQoLi4uYXJncyh0aGlzKSk7CisgIGlmICh0aGlzLnYyICE9
IG51bGwpIHRoaXMudjIucmVtb3ZlQ29uc3RyYWludCguLi5hcmdzKHRoaXMpKTsKKyAgdGhpcy5k
aXJlY3Rpb24gPSBEaXJlY3Rpb24uTk9ORTsKK30KKworLyogLS0tICoKKyAqIFMgYyBhIGwgZSAg
IEMgbyBuIHMgdCByIGEgaSBuIHQKKyAqIC0tLSAqLworCisvKioKKyAqIFJlbGF0ZXMgdHdvIHZh
cmlhYmxlcyBieSB0aGUgbGluZWFyIHNjYWxpbmcgcmVsYXRpb25zaGlwOiAidjIgPQorICogKHYx
ICogc2NhbGUpICsgb2Zmc2V0Ii4gRWl0aGVyIHYxIG9yIHYyIG1heSBiZSBjaGFuZ2VkIHRvIG1h
aW50YWluCisgKiB0aGlzIHJlbGF0aW9uc2hpcCBidXQgdGhlIHNjYWxlIGZhY3RvciBhbmQgb2Zm
c2V0IGFyZSBjb25zaWRlcmVkCisgKiByZWFkLW9ubHkuCisgKi8KK2Z1bmN0aW9uIFNjYWxlQ29u
c3RyYWludChzcmMsIHNjYWxlLCBvZmZzZXQsIGRlc3QsIHN0cmVuZ3RoKSB7CisgIHRoaXMuZGly
ZWN0aW9uID0gRGlyZWN0aW9uLk5PTkU7CisgIHRoaXMuc2NhbGUgPSBzY2FsZTsKKyAgdGhpcy5v
ZmZzZXQgPSBvZmZzZXQ7CisgIFNjYWxlQ29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9yLmNhbGwo
dGhpcywgc3JjLCBkZXN0LCBzdHJlbmd0aCk7Cit9CisKK1NjYWxlQ29uc3RyYWludC5pbmhlcml0
c0Zyb20oLi4uYXJncyhCaW5hcnlDb25zdHJhaW50KSk7CisKKy8qKgorICogQWRkcyB0aGlzIGNv
bnN0cmFpbnQgdG8gdGhlIGNvbnN0cmFpbnQgZ3JhcGguCisgKi8KK1NjYWxlQ29uc3RyYWludC5w
cm90b3R5cGUuYWRkVG9HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgU2NhbGVDb25zdHJhaW50LnN1
cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLmFkZFRvR3JhcGguY2FsbCh0aGlzKTsKKyAgdGhpcy5z
Y2FsZS5hZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworICB0aGlzLm9mZnNldC5hZGRDb25z
dHJhaW50KC4uLmFyZ3ModGhpcykpOworfQorCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLnJl
bW92ZUZyb21HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgU2NhbGVDb25zdHJhaW50LnN1cGVyQ29u
c3RydWN0b3IucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaC5jYWxsKHRoaXMpOworICBpZiAodGhp
cy5zY2FsZSAhPSBudWxsKSB0aGlzLnNjYWxlLnJlbW92ZUNvbnN0cmFpbnQoLi4uYXJncyh0aGlz
KSk7CisgIGlmICh0aGlzLm9mZnNldCAhPSBudWxsKSB0aGlzLm9mZnNldC5yZW1vdmVDb25zdHJh
aW50KC4uLmFyZ3ModGhpcykpOworfQorCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtJ
bnB1dHMgPSBmdW5jdGlvbiAobWFyaykgeworICBTY2FsZUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1
Y3Rvci5wcm90b3R5cGUubWFya0lucHV0cy5jYWxsKHRoaXMsIG1hcmspOworICB0aGlzLnNjYWxl
Lm1hcmsgPSB0aGlzLm9mZnNldC5tYXJrID0gbWFyazsKK30KKworLyoqCisgKiBFbmZvcmNlIHRo
aXMgY29uc3RyYWludC4gQXNzdW1lIHRoYXQgaXQgaXMgc2F0aXNmaWVkLgorICovCitTY2FsZUNv
bnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgIGlmICh0aGlzLmRp
cmVjdGlvbiA9PSBEaXJlY3Rpb24uRk9SV0FSRCkgeworICAgIHRoaXMudjIudmFsdWUgPSB0aGlz
LnYxLnZhbHVlICogdGhpcy5zY2FsZS52YWx1ZSArIHRoaXMub2Zmc2V0LnZhbHVlOworICB9IGVs
c2UgeworICAgIHRoaXMudjEudmFsdWUgPSAodGhpcy52Mi52YWx1ZSAtIHRoaXMub2Zmc2V0LnZh
bHVlKSAvIHRoaXMuc2NhbGUudmFsdWU7CisgIH0KK30KKworLyoqCisgKiBDYWxjdWxhdGUgdGhl
IHdhbGthYm91dCBzdHJlbmd0aCwgdGhlIHN0YXkgZmxhZywgYW5kLCBpZiBpdCBpcworICogJ3N0
YXknLCB0aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBvZiB0aGlzIGNvbnN0cmFpbnQu
IEFzc3VtZQorICogdGhpcyBjb25zdHJhaW50IGlzIHNhdGlzZmllZC4KKyAqLworU2NhbGVDb25z
dHJhaW50LnByb3RvdHlwZS5yZWNhbGN1bGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgdmFyIGlobiA9
IHRoaXMuaW5wdXQoLi4uYXJncygpKSwgb3V0ID0gdGhpcy5vdXRwdXQoLi4uYXJncygpKTsKKyAg
b3V0LndhbGtTdHJlbmd0aCA9IFN0cmVuZ3RoLndlYWtlc3RPZiguLi5hcmdzKHRoaXMuc3RyZW5n
dGgsIGlobi53YWxrU3RyZW5ndGgpKTsKKyAgb3V0LnN0YXkgPSBpaG4uc3RheSAmJiB0aGlzLnNj
YWxlLnN0YXkgJiYgdGhpcy5vZmZzZXQuc3RheTsKKyAgaWYgKG91dC5zdGF5KSB0aGlzLmV4ZWN1
dGUoLi4uYXJncygpKTsKK30KKworLyogLS0tICoKKyAqIEUgcSB1IGEgbCBpIHQgIHkgICBDIG8g
biBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKworLyoqCisgKiBDb25zdHJhaW5zIHR3byB2YXJp
YWJsZXMgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZS4KKyAqLworZnVuY3Rpb24gRXF1YWxpdHlDb25z
dHJhaW50KHZhcjEsIHZhcjIsIHN0cmVuZ3RoKSB7CisgIEVxdWFsaXR5Q29uc3RyYWludC5zdXBl
ckNvbnN0cnVjdG9yLmNhbGwodGhpcywgdmFyMSwgdmFyMiwgc3RyZW5ndGgpOworfQorCitFcXVh
bGl0eUNvbnN0cmFpbnQuaW5oZXJpdHNGcm9tKC4uLmFyZ3MoQmluYXJ5Q29uc3RyYWludCkpOwor
CisvKioKKyAqIEVuZm9yY2UgdGhpcyBjb25zdHJhaW50LiBBc3N1bWUgdGhhdCBpdCBpcyBzYXRp
c2ZpZWQuCisgKi8KK0VxdWFsaXR5Q29uc3RyYWludC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0
aW9uICgpIHsKKyAgdGhpcy5vdXRwdXQoLi4uYXJncygpKS52YWx1ZSA9IHRoaXMuaW5wdXQoLi4u
YXJncygpKS52YWx1ZTsKK30KKworLyogLS0tICoKKyAqIFYgYSByIGkgYSBiIGwgZQorICogLS0t
ICovCisKKy8qKgorICogQSBjb25zdHJhaW5lZCB2YXJpYWJsZS4gSW4gYWRkaXRpb24gdG8gaXRz
IHZhbHVlLCBpdCBtYWludGFpbiB0aGUKKyAqIHN0cnVjdHVyZSBvZiB0aGUgY29uc3RyYWludCBn
cmFwaCwgdGhlIGN1cnJlbnQgZGF0YWZsb3cgZ3JhcGgsIGFuZAorICogdmFyaW91cyBwYXJhbWV0
ZXJzIG9mIGludGVyZXN0IHRvIHRoZSBEZWx0YUJsdWUgaW5jcmVtZW50YWwKKyAqIGNvbnN0cmFp
bnQgc29sdmVyLgorICoqLworZnVuY3Rpb24gVmFyaWFibGUobmFtZSwgaW5pdGlhbFZhbHVlKSB7
CisgIHRoaXMudmFsdWUgPSBpbml0aWFsVmFsdWUgfHwgMDsKKyAgdGhpcy5jb25zdHJhaW50cyA9
IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOworICB0aGlzLmRldGVybWluZWRCeSA9
IG51bGw7CisgIHRoaXMubWFyayA9IDA7CisgIHRoaXMud2Fsa1N0cmVuZ3RoID0gU3RyZW5ndGgu
V0VBS0VTVDsKKyAgdGhpcy5zdGF5ID0gdHJ1ZTsKKyAgdGhpcy5uYW1lID0gbmFtZTsKK30KKwor
LyoqCisgKiBBZGQgdGhlIGdpdmVuIGNvbnN0cmFpbnQgdG8gdGhlIHNldCBvZiBhbGwgY29uc3Ry
YWludHMgdGhhdCByZWZlcgorICogdGhpcyB2YXJpYWJsZS4KKyAqLworVmFyaWFibGUucHJvdG90
eXBlLmFkZENvbnN0cmFpbnQgPSBmdW5jdGlvbiAoYykgeworICB0aGlzLmNvbnN0cmFpbnRzLmFk
ZCguLi5hcmdzKGMpKTsKK30KKworLyoqCisgKiBSZW1vdmVzIGFsbCB0cmFjZXMgb2YgYyBmcm9t
IHRoaXMgdmFyaWFibGUuCisgKi8KK1ZhcmlhYmxlLnByb3RvdHlwZS5yZW1vdmVDb25zdHJhaW50
ID0gZnVuY3Rpb24gKGMpIHsKKyAgdGhpcy5jb25zdHJhaW50cy5yZW1vdmUoLi4uYXJncyhjKSk7
CisgIGlmICh0aGlzLmRldGVybWluZWRCeSA9PSBjKSB0aGlzLmRldGVybWluZWRCeSA9IG51bGw7
Cit9CisKKy8qIC0tLSAqCisgKiBQIGwgYSBuIG4gZSByCisgKiAtLS0gKi8KKworLyoqCisgKiBU
aGUgRGVsdGFCbHVlIHBsYW5uZXIKKyAqLworZnVuY3Rpb24gUGxhbm5lcigpIHsKKyAgdGhpcy5j
dXJyZW50TWFyayA9IDA7Cit9CisKKy8qKgorICogQXR0ZW1wdCB0byBzYXRpc2Z5IHRoZSBnaXZl
biBjb25zdHJhaW50IGFuZCwgaWYgc3VjY2Vzc2Z1bCwKKyAqIGluY3JlbWVudGFsbHkgdXBkYXRl
IHRoZSBkYXRhZmxvdyBncmFwaC4gIERldGFpbHM6IElmIHNhdGlmeWluZworICogdGhlIGNvbnN0
cmFpbnQgaXMgc3VjY2Vzc2Z1bCwgaXQgbWF5IG92ZXJyaWRlIGEgd2Vha2VyIGNvbnN0cmFpbnQK
KyAqIG9uIGl0cyBvdXRwdXQuIFRoZSBhbGdvcml0aG0gYXR0ZW1wdHMgdG8gcmVzYXRpc2Z5IHRo
YXQKKyAqIGNvbnN0cmFpbnQgdXNpbmcgc29tZSBvdGhlciBtZXRob2QuIFRoaXMgcHJvY2VzcyBp
cyByZXBlYXRlZAorICogdW50aWwgZWl0aGVyIGEpIGl0IHJlYWNoZXMgYSB2YXJpYWJsZSB0aGF0
IHdhcyBub3QgcHJldmlvdXNseQorICogZGV0ZXJtaW5lZCBieSBhbnkgY29uc3RyYWludCBvciBi
KSBpdCByZWFjaGVzIGEgY29uc3RyYWludCB0aGF0CisgKiBpcyB0b28gd2VhayB0byBiZSBzYXRp
c2ZpZWQgdXNpbmcgYW55IG9mIGl0cyBtZXRob2RzLiBUaGUKKyAqIHZhcmlhYmxlcyBvZiBjb25z
dHJhaW50cyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQgYXJlIG1hcmtlZCB3aXRoCisgKiBhIHVu
aXF1ZSBtYXJrIHZhbHVlIHNvIHRoYXQgd2Uga25vdyB3aGVyZSB3ZSd2ZSBiZWVuLiBUaGlzIGFs
bG93cworICogdGhlIGFsZ29yaXRobSB0byBhdm9pZCBnZXR0aW5nIGludG8gYW4gaW5maW5pdGUg
bG9vcCBldmVuIGlmIHRoZQorICogY29uc3RyYWludCBncmFwaCBoYXMgYW4gaW5hZHZlcnRlbnQg
Y3ljbGUuCisgKi8KK1BsYW5uZXIucHJvdG90eXBlLmluY3JlbWVudGFsQWRkID0gZnVuY3Rpb24g
KGMpIHsKKyAgdmFyIG1hcmsgPSB0aGlzLm5ld01hcmsoLi4uYXJncygpKTsKKyAgdmFyIG92ZXJy
aWRkZW4gPSBjLnNhdGlzZnkoLi4uYXJncyhtYXJrKSk7CisgIHdoaWxlIChvdmVycmlkZGVuICE9
IG51bGwpCisgICAgb3ZlcnJpZGRlbiA9IG92ZXJyaWRkZW4uc2F0aXNmeSguLi5hcmdzKG1hcmsp
KTsKK30KKworLyoqCisgKiBFbnRyeSBwb2ludCBmb3IgcmV0cmFjdGluZyBhIGNvbnN0cmFpbnQu
IFJlbW92ZSB0aGUgZ2l2ZW4KKyAqIGNvbnN0cmFpbnQgYW5kIGluY3JlbWVudGFsbHkgdXBkYXRl
IHRoZSBkYXRhZmxvdyBncmFwaC4KKyAqIERldGFpbHM6IFJldHJhY3RpbmcgdGhlIGdpdmVuIGNv
bnN0cmFpbnQgbWF5IGFsbG93IHNvbWUgY3VycmVudGx5CisgKiB1bnNhdGlzZmlhYmxlIGRvd25z
dHJlYW0gY29uc3RyYWludCB0byBiZSBzYXRpc2ZpZWQuIFdlIHRoZXJlZm9yZSBjb2xsZWN0Cisg
KiBhIGxpc3Qgb2YgdW5zYXRpc2ZpZWQgZG93bnN0cmVhbSBjb25zdHJhaW50cyBhbmQgYXR0ZW1w
dCB0bworICogc2F0aXNmeSBlYWNoIG9uZSBpbiB0dXJuLiBUaGlzIGxpc3QgaXMgdHJhdmVyc2Vk
IGJ5IGNvbnN0cmFpbnQKKyAqIHN0cmVuZ3RoLCBzdHJvbmdlc3QgZmlyc3QsIGFzIGEgaGV1cmlz
dGljIGZvciBhdm9pZGluZworICogdW5uZWNlc3NhcmlseSBhZGRpbmcgYW5kIHRoZW4gb3ZlcnJp
ZGluZyB3ZWFrIGNvbnN0cmFpbnRzLgorICogQXNzdW1lOiBjIGlzIHNhdGlzZmllZC4KKyAqLwor
UGxhbm5lci5wcm90b3R5cGUuaW5jcmVtZW50YWxSZW1vdmUgPSBmdW5jdGlvbiAoYykgeworICB2
YXIgb3V0ID0gYy5vdXRwdXQoLi4uYXJncygpKTsKKyAgYy5tYXJrVW5zYXRpc2ZpZWQoLi4uYXJn
cygpKTsKKyAgYy5yZW1vdmVGcm9tR3JhcGgoLi4uYXJncygpKTsKKyAgdmFyIHVuc2F0aXNmaWVk
ID0gdGhpcy5yZW1vdmVQcm9wYWdhdGVGcm9tKC4uLmFyZ3Mob3V0KSk7CisgIHZhciBzdHJlbmd0
aCA9IFN0cmVuZ3RoLlJFUVVJUkVEOworICBkbyB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1
bnNhdGlzZmllZC5zaXplKC4uLmFyZ3MoKSk7IGkrKykgeworICAgICAgdmFyIHUgPSB1bnNhdGlz
ZmllZC5hdCguLi5hcmdzKGkpKTsKKyAgICAgIGlmICh1LnN0cmVuZ3RoID09IHN0cmVuZ3RoKQor
ICAgICAgICB0aGlzLmluY3JlbWVudGFsQWRkKC4uLmFyZ3ModSkpOworICAgIH0KKyAgICBzdHJl
bmd0aCA9IHN0cmVuZ3RoLm5leHRXZWFrZXIoLi4uYXJncygpKTsKKyAgfSB3aGlsZSAoc3RyZW5n
dGggIT0gU3RyZW5ndGguV0VBS0VTVCk7Cit9CisKKy8qKgorICogU2VsZWN0IGEgcHJldmlvdXNs
eSB1bnVzZWQgbWFyayB2YWx1ZS4KKyAqLworUGxhbm5lci5wcm90b3R5cGUubmV3TWFyayA9IGZ1
bmN0aW9uICgpIHsKKyAgcmV0dXJuICsrdGhpcy5jdXJyZW50TWFyazsKK30KKworLyoqCisgKiBF
eHRyYWN0IGEgcGxhbiBmb3IgcmVzYXRpc2ZhY3Rpb24gc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4g
c291cmNlCisgKiBjb25zdHJhaW50cywgdXN1YWxseSBhIHNldCBvZiBpbnB1dCBjb25zdHJhaW50
cy4gVGhpcyBtZXRob2QKKyAqIGFzc3VtZXMgdGhhdCBzdGF5IG9wdGltaXphdGlvbiBpcyBkZXNp
cmVkOyB0aGUgcGxhbiB3aWxsIGNvbnRhaW4KKyAqIG9ubHkgY29uc3RyYWludHMgd2hvc2Ugb3V0
cHV0IHZhcmlhYmxlcyBhcmUgbm90IHN0YXkuIENvbnN0cmFpbnRzCisgKiB0aGF0IGRvIG5vIGNv
bXB1dGF0aW9uLCBzdWNoIGFzIHN0YXkgYW5kIGVkaXQgY29uc3RyYWludHMsIGFyZQorICogbm90
IGluY2x1ZGVkIGluIHRoZSBwbGFuLgorICogRGV0YWlsczogVGhlIG91dHB1dHMgb2YgYSBjb25z
dHJhaW50IGFyZSBtYXJrZWQgd2hlbiBpdCBpcyBhZGRlZAorICogdG8gdGhlIHBsYW4gdW5kZXIg
Y29uc3RydWN0aW9uLiBBIGNvbnN0cmFpbnQgbWF5IGJlIGFwcGVuZGVkIHRvCisgKiB0aGUgcGxh
biB3aGVuIGFsbCBpdHMgaW5wdXQgdmFyaWFibGVzIGFyZSBrbm93bi4gQSB2YXJpYWJsZSBpcwor
ICoga25vd24gaWYgZWl0aGVyIGEpIHRoZSB2YXJpYWJsZSBpcyBtYXJrZWQgKGluZGljYXRpbmcg
dGhhdCBoYXMKKyAqIGJlZW4gY29tcHV0ZWQgYnkgYSBjb25zdHJhaW50IGFwcGVhcmluZyBlYXJs
aWVyIGluIHRoZSBwbGFuKSwgYikKKyAqIHRoZSB2YXJpYWJsZSBpcyAnc3RheScgKGkuZS4gaXQg
aXMgYSBjb25zdGFudCBhdCBwbGFuIGV4ZWN1dGlvbgorICogdGltZSksIG9yIGMpIHRoZSB2YXJp
YWJsZSBpcyBub3QgZGV0ZXJtaW5lZCBieSBhbnkKKyAqIGNvbnN0cmFpbnQuIFRoZSBsYXN0IHBy
b3Zpc2lvbiBpcyBmb3IgcGFzdCBzdGF0ZXMgb2YgaGlzdG9yeQorICogdmFyaWFibGVzLCB3aGlj
aCBhcmUgbm90IHN0YXkgYnV0IHdoaWNoIGFyZSBhbHNvIG5vdCBjb21wdXRlZCBieQorICogYW55
IGNvbnN0cmFpbnQuCisgKiBBc3N1bWU6IHNvdXJjZXMgYXJlIGFsbCBzYXRpc2ZpZWQuCisgKi8K
K1BsYW5uZXIucHJvdG90eXBlLm1ha2VQbGFuID0gZnVuY3Rpb24gKHNvdXJjZXMpIHsKKyAgdmFy
IG1hcmsgPSB0aGlzLm5ld01hcmsoLi4uYXJncygpKTsKKyAgdmFyIHBsYW4gPSBuZXcgUGxhbigu
Li5hcmdzKCkpOworICB2YXIgdG9kbyA9IHNvdXJjZXM7CisgIHdoaWxlICh0b2RvLnNpemUoLi4u
YXJncygpKSA+IDApIHsKKyAgICB2YXIgYyA9IHRvZG8ucmVtb3ZlRmlyc3QoLi4uYXJncygpKTsK
KyAgICBpZiAoYy5vdXRwdXQoLi4uYXJncygpKS5tYXJrICE9IG1hcmsgJiYgYy5pbnB1dHNLbm93
biguLi5hcmdzKG1hcmspKSkgeworICAgICAgcGxhbi5hZGRDb25zdHJhaW50KC4uLmFyZ3MoYykp
OworICAgICAgYy5vdXRwdXQoLi4uYXJncygpKS5tYXJrID0gbWFyazsKKyAgICAgIHRoaXMuYWRk
Q29uc3RyYWludHNDb25zdW1pbmdUbyguLi5hcmdzKGMub3V0cHV0KC4uLmFyZ3MoKSksIHRvZG8p
KTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHBsYW47Cit9CisKKy8qKgorICogRXh0cmFjdCBhIHBs
YW4gZm9yIHJlc2F0aXNmeWluZyBzdGFydGluZyBmcm9tIHRoZSBvdXRwdXQgb2YgdGhlCisgKiBn
aXZlbiBjb25zdHJhaW50cywgdXN1YWxseSBhIHNldCBvZiBpbnB1dCBjb25zdHJhaW50cy4KKyAq
LworUGxhbm5lci5wcm90b3R5cGUuZXh0cmFjdFBsYW5Gcm9tQ29uc3RyYWludHMgPSBmdW5jdGlv
biAoY29uc3RyYWludHMpIHsKKyAgdmFyIHNvdXJjZXMgPSBuZXcgT3JkZXJlZENvbGxlY3Rpb24o
Li4uYXJncygpKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25zdHJhaW50cy5zaXplKC4uLmFy
Z3MoKSk7IGkrKykgeworICAgIHZhciBjID0gY29uc3RyYWludHMuYXQoLi4uYXJncyhpKSk7Cisg
ICAgaWYgKGMuaXNJbnB1dCguLi5hcmdzKCkpICYmIGMuaXNTYXRpc2ZpZWQoLi4uYXJncygpKSkK
KyAgICAgIC8vIG5vdCBpbiBwbGFuIGFscmVhZHkgYW5kIGVsaWdpYmxlIGZvciBpbmNsdXNpb24K
KyAgICAgIHNvdXJjZXMuYWRkKC4uLmFyZ3MoYykpOworICB9CisgIHJldHVybiB0aGlzLm1ha2VQ
bGFuKC4uLmFyZ3Moc291cmNlcykpOworfQorCisvKioKKyAqIFJlY29tcHV0ZSB0aGUgd2Fsa2Fi
b3V0IHN0cmVuZ3RocyBhbmQgc3RheSBmbGFncyBvZiBhbGwgdmFyaWFibGVzCisgKiBkb3duc3Ry
ZWFtIG9mIHRoZSBnaXZlbiBjb25zdHJhaW50IGFuZCByZWNvbXB1dGUgdGhlIGFjdHVhbAorICog
dmFsdWVzIG9mIGFsbCB2YXJpYWJsZXMgd2hvc2Ugc3RheSBmbGFnIGlzIHRydWUuIElmIGEgY3lj
bGUgaXMKKyAqIGRldGVjdGVkLCByZW1vdmUgdGhlIGdpdmVuIGNvbnN0cmFpbnQgYW5kIGFuc3dl
cgorICogZmFsc2UuIE90aGVyd2lzZSwgYW5zd2VyIHRydWUuCisgKiBEZXRhaWxzOiBDeWNsZXMg
YXJlIGRldGVjdGVkIHdoZW4gYSBtYXJrZWQgdmFyaWFibGUgaXMKKyAqIGVuY291bnRlcmVkIGRv
d25zdHJlYW0gb2YgdGhlIGdpdmVuIGNvbnN0cmFpbnQuIFRoZSBzZW5kZXIgaXMKKyAqIGFzc3Vt
ZWQgdG8gaGF2ZSBtYXJrZWQgdGhlIGlucHV0cyBvZiB0aGUgZ2l2ZW4gY29uc3RyYWludCB3aXRo
CisgKiB0aGUgZ2l2ZW4gbWFyay4gVGh1cywgZW5jb3VudGVyaW5nIGEgbWFya2VkIG5vZGUgZG93
bnN0cmVhbSBvZgorICogdGhlIG91dHB1dCBjb25zdHJhaW50IG1lYW5zIHRoYXQgdGhlcmUgaXMg
YSBwYXRoIGZyb20gdGhlCisgKiBjb25zdHJhaW50J3Mgb3V0cHV0IHRvIG9uZSBvZiBpdHMgaW5w
dXRzLgorICovCitQbGFubmVyLnByb3RvdHlwZS5hZGRQcm9wYWdhdGUgPSBmdW5jdGlvbiAoYywg
bWFyaykgeworICB2YXIgdG9kbyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOwor
ICB0b2RvLmFkZCguLi5hcmdzKGMpKTsKKyAgd2hpbGUgKHRvZG8uc2l6ZSguLi5hcmdzKCkpID4g
MCkgeworICAgIHZhciBkID0gdG9kby5yZW1vdmVGaXJzdCguLi5hcmdzKCkpOworICAgIGlmIChk
Lm91dHB1dCguLi5hcmdzKCkpLm1hcmsgPT0gbWFyaykgeworICAgICAgdGhpcy5pbmNyZW1lbnRh
bFJlbW92ZSguLi5hcmdzKGMpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZC5y
ZWNhbGN1bGF0ZSguLi5hcmdzKCkpOworICAgIHRoaXMuYWRkQ29uc3RyYWludHNDb25zdW1pbmdU
byguLi5hcmdzKGQub3V0cHV0KC4uLmFyZ3MoKSksIHRvZG8pKTsKKyAgfQorICByZXR1cm4gdHJ1
ZTsKK30KKworCisvKioKKyAqIFVwZGF0ZSB0aGUgd2Fsa2Fib3V0IHN0cmVuZ3RocyBhbmQgc3Rh
eSBmbGFncyBvZiBhbGwgdmFyaWFibGVzCisgKiBkb3duc3RyZWFtIG9mIHRoZSBnaXZlbiBjb25z
dHJhaW50LiBBbnN3ZXIgYSBjb2xsZWN0aW9uIG9mCisgKiB1bnNhdGlzZmllZCBjb25zdHJhaW50
cyBzb3J0ZWQgaW4gb3JkZXIgb2YgZGVjcmVhc2luZyBzdHJlbmd0aC4KKyAqLworUGxhbm5lci5w
cm90b3R5cGUucmVtb3ZlUHJvcGFnYXRlRnJvbSA9IGZ1bmN0aW9uIChvdXQpIHsKKyAgb3V0LmRl
dGVybWluZWRCeSA9IG51bGw7CisgIG91dC53YWxrU3RyZW5ndGggPSBTdHJlbmd0aC5XRUFLRVNU
OworICBvdXQuc3RheSA9IHRydWU7CisgIHZhciB1bnNhdGlzZmllZCA9IG5ldyBPcmRlcmVkQ29s
bGVjdGlvbiguLi5hcmdzKCkpOworICB2YXIgdG9kbyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbigu
Li5hcmdzKCkpOworICB0b2RvLmFkZCguLi5hcmdzKG91dCkpOworICB3aGlsZSAodG9kby5zaXpl
KC4uLmFyZ3MoKSkgPiAwKSB7CisgICAgdmFyIHYgPSB0b2RvLnJlbW92ZUZpcnN0KC4uLmFyZ3Mo
KSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2LmNvbnN0cmFpbnRzLnNpemUoLi4uYXJncygp
KTsgaSsrKSB7CisgICAgICB2YXIgYyA9IHYuY29uc3RyYWludHMuYXQoLi4uYXJncyhpKSk7Cisg
ICAgICBpZiAoIWMuaXNTYXRpc2ZpZWQoLi4uYXJncygpKSkKKyAgICAgICAgdW5zYXRpc2ZpZWQu
YWRkKC4uLmFyZ3MoYykpOworICAgIH0KKyAgICB2YXIgZGV0ZXJtaW5pbmcgPSB2LmRldGVybWlu
ZWRCeTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHYuY29uc3RyYWludHMuc2l6ZSguLi5hcmdz
KCkpOyBpKyspIHsKKyAgICAgIHZhciBuZXh0ID0gdi5jb25zdHJhaW50cy5hdCguLi5hcmdzKGkp
KTsKKyAgICAgIGlmIChuZXh0ICE9IGRldGVybWluaW5nICYmIG5leHQuaXNTYXRpc2ZpZWQoLi4u
YXJncygpKSkgeworICAgICAgICBuZXh0LnJlY2FsY3VsYXRlKC4uLmFyZ3MoKSk7CisgICAgICAg
IHRvZG8uYWRkKC4uLmFyZ3MobmV4dC5vdXRwdXQoLi4uYXJncygpKSkpOworICAgICAgfQorICAg
IH0KKyAgfQorICByZXR1cm4gdW5zYXRpc2ZpZWQ7Cit9CisKK1BsYW5uZXIucHJvdG90eXBlLmFk
ZENvbnN0cmFpbnRzQ29uc3VtaW5nVG8gPSBmdW5jdGlvbiAodiwgY29sbCkgeworICB2YXIgZGV0
ZXJtaW5pbmcgPSB2LmRldGVybWluZWRCeTsKKyAgdmFyIGNjID0gdi5jb25zdHJhaW50czsKKyAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjYy5zaXplKC4uLmFyZ3MoKSk7IGkrKykgeworICAgIHZhciBj
ID0gY2MuYXQoLi4uYXJncyhpKSk7CisgICAgaWYgKGMgIT0gZGV0ZXJtaW5pbmcgJiYgYy5pc1Nh
dGlzZmllZCguLi5hcmdzKCkpKQorICAgICAgY29sbC5hZGQoLi4uYXJncyhjKSk7CisgIH0KK30K
KworLyogLS0tICoKKyAqIFAgbCBhIG4KKyAqIC0tLSAqLworCisvKioKKyAqIEEgUGxhbiBpcyBh
biBvcmRlcmVkIGxpc3Qgb2YgY29uc3RyYWludHMgdG8gYmUgZXhlY3V0ZWQgaW4gc2VxdWVuY2UK
KyAqIHRvIHJlc2F0aXNmeSBhbGwgY3VycmVudGx5IHNhdGlzZmlhYmxlIGNvbnN0cmFpbnRzIGlu
IHRoZSBmYWNlIG9mCisgKiBvbmUgb3IgbW9yZSBjaGFuZ2luZyBpbnB1dHMuCisgKi8KK2Z1bmN0
aW9uIFBsYW4oKSB7CisgIHRoaXMudiA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkp
OworfQorCitQbGFuLnByb3RvdHlwZS5hZGRDb25zdHJhaW50ID0gZnVuY3Rpb24gKGMpIHsKKyAg
dGhpcy52LmFkZCguLi5hcmdzKGMpKTsKK30KKworUGxhbi5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0
aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMudi5zaXplKC4uLmFyZ3MoKSk7Cit9CisKK1BsYW4ucHJv
dG90eXBlLmNvbnN0cmFpbnRBdCA9IGZ1bmN0aW9uIChpbmRleCkgeworICByZXR1cm4gdGhpcy52
LmF0KC4uLmFyZ3MoaW5kZXgpKTsKK30KKworUGxhbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0
aW9uICgpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemUoLi4uYXJncygpKTsgaSsr
KSB7CisgICAgdmFyIGMgPSB0aGlzLmNvbnN0cmFpbnRBdCguLi5hcmdzKGkpKTsKKyAgICBjLmV4
ZWN1dGUoLi4uYXJncygpKTsKKyAgfQorfQorCisvKiAtLS0gKgorICogTSBhIGkgbgorICogLS0t
ICovCisKKy8qKgorICogVGhpcyBpcyB0aGUgc3RhbmRhcmQgRGVsdGFCbHVlIGJlbmNobWFyay4g
QSBsb25nIGNoYWluIG9mIGVxdWFsaXR5CisgKiBjb25zdHJhaW50cyBpcyBjb25zdHJ1Y3RlZCB3
aXRoIGEgc3RheSBjb25zdHJhaW50IG9uIG9uZSBlbmQuIEFuCisgKiBlZGl0IGNvbnN0cmFpbnQg
aXMgdGhlbiBhZGRlZCB0byB0aGUgb3Bwb3NpdGUgZW5kIGFuZCB0aGUgdGltZSBpcworICogbWVh
c3VyZWQgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgdGhpcyBjb25zdHJhaW50LCBhbmQgZXh0cmFj
dGluZworICogYW5kIGV4ZWN1dGluZyBhIGNvbnN0cmFpbnQgc2F0aXNmYWN0aW9uIHBsYW4uIFRo
ZXJlIGFyZSB0d28gY2FzZXMuCisgKiBJbiBjYXNlIDEsIHRoZSBhZGRlZCBjb25zdHJhaW50IGlz
IHN0cm9uZ2VyIHRoYW4gdGhlIHN0YXkKKyAqIGNvbnN0cmFpbnQgYW5kIHZhbHVlcyBtdXN0IHBy
b3BhZ2F0ZSBkb3duIHRoZSBlbnRpcmUgbGVuZ3RoIG9mIHRoZQorICogY2hhaW4uIEluIGNhc2Ug
MiwgdGhlIGFkZGVkIGNvbnN0cmFpbnQgaXMgd2Vha2VyIHRoYW4gdGhlIHN0YXkKKyAqIGNvbnN0
cmFpbnQgc28gaXQgY2Fubm90IGJlIGFjY29tb2RhdGVkLiBUaGUgY29zdCBpbiB0aGlzIGNhc2Ug
aXMsCisgKiBvZiBjb3Vyc2UsIHZlcnkgbG93LiBUeXBpY2FsIHNpdHVhdGlvbnMgbGllIHNvbWV3
aGVyZSBiZXR3ZWVuIHRoZXNlCisgKiB0d28gZXh0cmVtZXMuCisgKi8KK2Z1bmN0aW9uIGNoYWlu
VGVzdChuKSB7CisgIHBsYW5uZXIgPSBuZXcgUGxhbm5lciguLi5hcmdzKCkpOworICB2YXIgcHJl
diA9IG51bGwsIGZpcnN0ID0gbnVsbCwgbGFzdCA9IG51bGw7CisKKyAgLy8gQnVpbGQgY2hhaW4g
b2YgbiBlcXVhbGl0eSBjb25zdHJhaW50cworICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKysp
IHsKKyAgICB2YXIgbmFtZSA9ICJ2IiArIGk7CisgICAgdmFyIHYgPSBuZXcgVmFyaWFibGUoLi4u
YXJncyhuYW1lKSk7CisgICAgaWYgKHByZXYgIT0gbnVsbCkKKyAgICAgIG5ldyBFcXVhbGl0eUNv
bnN0cmFpbnQoLi4uYXJncyhwcmV2LCB2LCBTdHJlbmd0aC5SRVFVSVJFRCkpOworICAgIGlmIChp
ID09IDApIGZpcnN0ID0gdjsKKyAgICBpZiAoaSA9PSBuKSBsYXN0ID0gdjsKKyAgICBwcmV2ID0g
djsKKyAgfQorCisgIG5ldyBTdGF5Q29uc3RyYWludCguLi5hcmdzKGxhc3QsIFN0cmVuZ3RoLlNU
Uk9OR19ERUZBVUxUKSk7CisgIHZhciBlZGl0ID0gbmV3IEVkaXRDb25zdHJhaW50KC4uLmFyZ3Mo
Zmlyc3QsIFN0cmVuZ3RoLlBSRUZFUlJFRCkpOworICB2YXIgZWRpdHMgPSBuZXcgT3JkZXJlZENv
bGxlY3Rpb24oLi4uYXJncygpKTsKKyAgZWRpdHMuYWRkKC4uLmFyZ3MoZWRpdCkpOworICB2YXIg
cGxhbiA9IHBsYW5uZXIuZXh0cmFjdFBsYW5Gcm9tQ29uc3RyYWludHMoLi4uYXJncyhlZGl0cykp
OworICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgZmlyc3QudmFsdWUgPSBp
OworICAgIHBsYW4uZXhlY3V0ZSguLi5hcmdzKCkpOworICAgIGlmIChsYXN0LnZhbHVlICE9IGkp
CisgICAgICBhbGVydCguLi5hcmdzKCJDaGFpbiB0ZXN0IGZhaWxlZC4iKSk7CisgIH0KK30KKwor
LyoqCisgKiBUaGlzIHRlc3QgY29uc3RydWN0cyBhIHR3byBzZXRzIG9mIHZhcmlhYmxlcyByZWxh
dGVkIHRvIGVhY2gKKyAqIG90aGVyIGJ5IGEgc2ltcGxlIGxpbmVhciB0cmFuc2Zvcm1hdGlvbiAo
c2NhbGUgYW5kIG9mZnNldCkuIFRoZQorICogdGltZSBpcyBtZWFzdXJlZCB0byBjaGFuZ2UgYSB2
YXJpYWJsZSBvbiBlaXRoZXIgc2lkZSBvZiB0aGUKKyAqIG1hcHBpbmcgYW5kIHRvIGNoYW5nZSB0
aGUgc2NhbGUgYW5kIG9mZnNldCBmYWN0b3JzLgorICovCitmdW5jdGlvbiBwcm9qZWN0aW9uVGVz
dChuKSB7CisgIHBsYW5uZXIgPSBuZXcgUGxhbm5lciguLi5hcmdzKCkpOworICB2YXIgc2NhbGUg
PSBuZXcgVmFyaWFibGUoLi4uYXJncygic2NhbGUiLCAxMCkpOworICB2YXIgb2Zmc2V0ID0gbmV3
IFZhcmlhYmxlKC4uLmFyZ3MoIm9mZnNldCIsIDEwMDApKTsKKyAgdmFyIHNyYyA9IG51bGwsIGRz
dCA9IG51bGw7CisKKyAgdmFyIGRlc3RzID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKC4uLmFyZ3Mo
KSk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgc3JjID0gbmV3IFZhcmlh
YmxlKC4uLmFyZ3MoInNyYyIgKyBpLCBpKSk7CisgICAgZHN0ID0gbmV3IFZhcmlhYmxlKC4uLmFy
Z3MoImRzdCIgKyBpLCBpKSk7CisgICAgZGVzdHMuYWRkKC4uLmFyZ3MoZHN0KSk7CisgICAgbmV3
IFN0YXlDb25zdHJhaW50KC4uLmFyZ3Moc3JjLCBTdHJlbmd0aC5OT1JNQUwpKTsKKyAgICBuZXcg
U2NhbGVDb25zdHJhaW50KC4uLmFyZ3Moc3JjLCBzY2FsZSwgb2Zmc2V0LCBkc3QsIFN0cmVuZ3Ro
LlJFUVVJUkVEKSk7CisgIH0KKworICBjaGFuZ2UoLi4uYXJncyhzcmMsIDE3KSk7CisgIGlmIChk
c3QudmFsdWUgIT0gMTE3MCkgYWxlcnQoLi4uYXJncygiUHJvamVjdGlvbiAxIGZhaWxlZCIpKTsK
KyAgY2hhbmdlKC4uLmFyZ3MoZHN0LCAxMDUwKSk7CisgIGlmIChzcmMudmFsdWUgIT0gNSkgYWxl
cnQoLi4uYXJncygiUHJvamVjdGlvbiAyIGZhaWxlZCIpKTsKKyAgY2hhbmdlKC4uLmFyZ3Moc2Nh
bGUsIDUpKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CisgICAgaWYgKGRl
c3RzLmF0KC4uLmFyZ3MoaSkpLnZhbHVlICE9IGkgKiA1ICsgMTAwMCkKKyAgICAgIGFsZXJ0KC4u
LmFyZ3MoIlByb2plY3Rpb24gMyBmYWlsZWQiKSk7CisgIH0KKyAgY2hhbmdlKC4uLmFyZ3Mob2Zm
c2V0LCAyMDAwKSk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgeworICAgIGlm
IChkZXN0cy5hdCguLi5hcmdzKGkpKS52YWx1ZSAhPSBpICogNSArIDIwMDApCisgICAgICBhbGVy
dCguLi5hcmdzKCJQcm9qZWN0aW9uIDQgZmFpbGVkIikpOworICB9Cit9CisKK2Z1bmN0aW9uIGNo
YW5nZSh2LCBuZXdWYWx1ZSkgeworICB2YXIgZWRpdCA9IG5ldyBFZGl0Q29uc3RyYWludCguLi5h
cmdzKHYsIFN0cmVuZ3RoLlBSRUZFUlJFRCkpOworICB2YXIgZWRpdHMgPSBuZXcgT3JkZXJlZENv
bGxlY3Rpb24oLi4uYXJncygpKTsKKyAgZWRpdHMuYWRkKC4uLmFyZ3MoZWRpdCkpOworICB2YXIg
cGxhbiA9IHBsYW5uZXIuZXh0cmFjdFBsYW5Gcm9tQ29uc3RyYWludHMoLi4uYXJncyhlZGl0cykp
OworICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICB2LnZhbHVlID0gbmV3VmFs
dWU7CisgICAgcGxhbi5leGVjdXRlKC4uLmFyZ3MoKSk7CisgIH0KKyAgZWRpdC5kZXN0cm95Q29u
c3RyYWludCguLi5hcmdzKCkpOworfQorCisvLyBHbG9iYWwgdmFyaWFibGUgaG9sZGluZyB0aGUg
Y3VycmVudCBwbGFubmVyLgordmFyIHBsYW5uZXIgPSBudWxsOworCitmdW5jdGlvbiBkZWx0YUJs
dWUoKSB7CisgIGNoYWluVGVzdCguLi5hcmdzKDEwMCkpOworICBwcm9qZWN0aW9uVGVzdCguLi5h
cmdzKDEwMCkpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDMwOyArK2kpCisgICAgZGVsdGFC
bHVlKC4uLmFyZ3MoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246724</attachid>
            <date>2015-02-16 21:15:51 -0800</date>
            <delta_ts>2015-02-17 11:10:22 -0800</delta_ts>
            <desc>x86 32-bit and 64-bit pass all tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>291960</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwMjA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwNyBA
QAorMjAxNS0wMi0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgcmVhbGx5IHN1cHBvcnQgdmFyYXJncworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgY29tcHJlaGVuc2l2
ZSB2YXJhcmcgY2FsbCBzdXBwb3J0IHRvIHRoZSBERkcgYW5kIEZUTCBjb21waWxlcnMuIFByZXZp
b3VzbHksIGlmIGEKKyAgICAgICAgZnVuY3Rpb24gaGFkIGEgdmFyYXJncyBjYWxsLCB0aGVuIGl0
IGNvdWxkIG9ubHkgYmUgY29tcGlsZWQgaWYgdGhhdCB2YXJhcmdzIGNhbGwgd2FzIGp1c3QKKyAg
ICAgICAgZm9yd2FyZGluZyBhcmd1bWVudHMgYW5kIHdlIHdlcmUgaW5saW5pbmcgdGhlIGZ1bmN0
aW9uIHJhdGhlciB0aGFuIGNvbXBpbGluZyBpdCBkaXJlY3RseS4gQWxzbywKKyAgICAgICAgb25s
eSB2YXJhcmdzIGNhbGxzIHdlcmUgZGVhbHQgd2l0aDsgdmFyYXJncyBjb25zdHJ1Y3RzIHdlcmUg
bm90LgorICAgICAgICAKKyAgICAgICAgVGhpcyBsaWZ0cyBhbGwgb2YgdGhvc2UgcmVzdHJpY3Rp
b25zLiBFdmVyeSB2YXJhcmdzIGNhbGwgb3IgY29uc3RydWN0IGNhbiBub3cgYmUgY29tcGlsZWQg
YnkgYm90aAorICAgICAgICB0aGUgREZHIGFuZCB0aGUgRlRMLiBUaG9zZSBjYWxscyBjYW4gYWxz
byBiZSBpbmxpbmVkLCB0b28gLSBwcm92aWRlZCB0aGF0IHByb2ZpbGluZyBnaXZlcyB1cyBhCisg
ICAgICAgIHNlbnNpYmxlIGJvdW5kIG9uIGFyZ3VtZW50cyBsaXN0IGxlbmd0aC4gV2hlbiB3ZSBp
bmxpbmUgYSB2YXJhcmdzIGNhbGwsIHRoZSBhY3Qgb2YgbG9hZGluZyB0aGUKKyAgICAgICAgdmFy
YXJncyBpcyBub3cgbWFkZSBleHBsaWNpdCBpbiBJUi4gSSBiZWxpZXZlIHRoYXQgd2UgaGF2ZSBl
bm91Z2ggSVIgbWFjaGluZXJ5IGluIHBsYWNlIHRoYXQgd2UKKyAgICAgICAgd291bGQgYmUgYWJs
ZSB0byBkbyB0aGUgYXJndW1lbnRzIGZvcndhcmRpbmcgb3B0aW1pemF0aW9uIGFzIGFuIElSIHRy
YW5zZm9ybWF0aW9uLiBUaGlzIHBhdGNoCisgICAgICAgIGRvZXNuJ3QgaW1wbGVtZW50IHRoYXQg
eWV0LCBhbmQga2VlcHMgdGhlIG9sZCBieXRlY29kZS1iYXNlZCB2YXJhcmdzIGFyZ3VtZW50IGZv
cndhcmRpbmcKKyAgICAgICAgb3B0aW1pemF0aW9uIGZvciBub3cuCisgICAgICAgIAorICAgICAg
ICBUaGVyZSBhcmUgdGhyZWUgbWFqb3IgSVIgZmVhdHVyZXMgaW50cm9kdWNlZCBpbiB0aGlzIHBh
dGNoOgorICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmFyZ3MvQ29uc3RydWN0VmFyYXJnczogdGhl
c2UgYXJlIGxpa2UgQ2FsbC9Db25zdHJ1Y3QgZXhjZXB0IHRoYXQgdGhleSB0YWtlIGFuIGFyZ3Vt
ZW50cworICAgICAgICBhcnJheSByYXRoZXIgdGhhbiBhIGxpc3Qgb2YgYXJndW1lbnRzLiBDdXJy
ZW50bHksIHRoZXkgc3BsYXQgdGhpcyBhcmd1bWVudHMgYXJyYXkgb250byB0aGUgc3RhY2sKKyAg
ICAgICAgdXNpbmcgdGhlIHNhbWUgYmFzaWMgdGVjaG5pcXVlIGFzIHRoZSBiYXNlbGluZSBKSVQg
aGFzIGFsd2F5cyBkb25lLiBFeGNlcHQsIHRoZXNlIG5vZGVzIGluZGljYXRlCisgICAgICAgIHRo
YXQgd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIGRvaW5nIHRoZSBub24tZXNjYXBpbmcgImFyZ3Vt
ZW50cyIgb3B0aW1pemF0aW9uLgorICAgICAgICAKKyAgICAgICAgQ2FsbEZvcndhcmRWYXJhcmdz
OiB0aGlzIGlzIGEgZm9ybSBvZiBDYWxsVmFyYXJncyB0aGF0IGp1c3QgZG9lcyB0aGUgbm9uLWVz
Y2FwaW5nICJhcmd1bWVudHMiCisgICAgICAgIG9wdGltaXphdGlvbiwgYWthIGZvcndhcmRpbmcg
YXJndW1lbnRzLiBJdCdzIHNvbWV3aGF0IGxhenkgdGhhdCB0aGlzIGRvZXNuJ3QgaW5jbHVkZQor
ICAgICAgICBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncywgYnV0IHRoZSByZWFzb24gaXMgdGhhdCBv
bmNlIHdlIGVsaW1pbmF0ZSB0aGUgbGF6eSB0ZWFyLW9mZiBmb3IKKyAgICAgICAgYXJndW1lbnRz
LCB0aGlzIHdob2xlIHRoaW5nIHdpbGwgaGF2ZSB0byBiZSB0d2Vha2VkIC0gYW5kIGZvciBub3cg
Zm9yd2FyZGluZyBvbiBjb25zdHJ1Y3QgaXMganVzdAorICAgICAgICBub3QgaW1wb3J0YW50IGlu
IGJlbmNobWFya3MuIENvbnN0cnVjdFZhcmFyZ3Mgd2lsbCBzdGlsbCBkbyBmb3J3YXJkaW5nLCBq
dXN0IG5vdCBpbmxpbmVkLgorICAgICAgICAKKyAgICAgICAgTG9hZFZhcmFyZ3M6IGxvYWRzIGFs
bCBlbGVtZW50cyBvdXQgb2YgYW4gYXJyYXkgb250byB0aGUgc3RhY2sgaW4gYSBtYW5uZXIgc3Vp
dGFibGUgZm9yIGEgdmFyYXJncworICAgICAgICBjYWxsLiBUaGlzIGlzIHVzZWQgb25seSB3aGVu
IGEgdmFyYXJncyBjYWxsIChvciBjb25zdHJ1Y3QpIHdhcyBpbmxpbmVkLiBUaGUgYnl0ZWNvZGUg
cGFyc2VyIHdpbGwKKyAgICAgICAgbWFrZSByb29tIG9uIHRoZSBzdGFjayBmb3IgdGhlIGFyZ3Vt
ZW50cywgYW5kIHdpbGwgdXNlIExvYWRWYXJhcnMgdG8gcHV0IHRob3NlIGFyZ3VtZW50cyBpbnRv
CisgICAgICAgIHBsYWNlLgorICAgICAgICAKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2UgY2Fu
IGNvbnNpZGVyIGFkZGluZyBzdHJlbmd0aCByZWR1Y3Rpb25zIGxpa2U6CisgICAgICAgIAorICAg
ICAgICAtIElmIENhbGxWYXJhcmdzL0NvbnN0cnVjdFZhcmFyZ3Mgc2VlIGFuIGFycmF5IG9mIGtu
b3duIHNpemUgd2l0aCBrbm93biBlbGVtZW50cywgdHVybiB0aGVtIGludG8KKyAgICAgICAgICBD
YWxsL0NvbnN0cnVjdC4KKyAgICAgICAgCisgICAgICAgIC0gSWYgQ2FsbFZhcmFyZ3MvQ29uc3Ry
dWN0VmFyYXJncyBhcmUgcGFzc2VkIGFuIHVubW9kaWZpZWQsIHVuZXNjYXBlZCBBcmd1bWVudHMg
b2JqZWN0LCB0aGVuCisgICAgICAgICAgdHVybiB0aGVtIGludG8gQ2FsbEZvcndhcmRWYXJhcmdz
L0NvbnN0cnVjdEZvcndhcmRWYXJhcmdzLgorICAgICAgICAKKyAgICAgICAgLSBJZiBMb2FkVmFy
YXJncyBzZWVzIGFuIGFycmF5IG9mIGtub3duIHNpemUsIHRoZW4gdHVybiBpdCBpbnRvIGEgc2Vx
dWVuY2Ugb2YgR2V0QnlWYWxzIGFuZAorICAgICAgICAgIFB1dExvY2Fscy4KKyAgICAgICAgCisg
ICAgICAgIC0gSWYgTG9hZFZhcmFyZ3Mgc2VlcyBhbiB1bm1vZGlmaWVkLCB1bmVzY2FwZWQgQXJn
dW1lbnRzIG9iamVjdCwgdGhlbiB0dXJuIGl0IGludG8gc29tZXRoaW5nIGxpa2UKKyAgICAgICAg
ICBMb2FkRm9yd2FyZFZhcmFyZ3MuCisgICAgICAgIAorICAgICAgICAtIElmIENhbGxWYXJhcmdz
L0NvbnN0cnVjdFZhcmFyZ3MvTG9hZFZhcmFyZ3Mgc2VlIHRoZSByZXN1bHQgb2YgYSBzcGxpY2Ug
KG9yIG90aGVyIEFycmF5CisgICAgICAgICAgcHJvdG90eXBlIGZ1bmN0aW9uKSwgdGhlbiBkbyB0
aGUgc3BsaWNlIGFuZCB2YXJhcmdzIGxvYWRpbmcgaW4gb25lIGdvIChtYXliZSB2aWEgYSBuZXcg
bm9kZQorICAgICAgICAgIHR5cGUpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyOjpyc2hpZnRQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6dXJzaGlmdFB0
cik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6dXJzaGlmdDY0KToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OnVyc2hpZnQ2NCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnNocnFfaThyKToKKyAgICAgICAgKiBieXRlY29k
ZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpDYWxsTGlua0lu
Zm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0
YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0
YXR1czo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaDoKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6Om1heE51bUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rU3RhdHVzOjpzZXRJc1Byb3ZlZCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1l
Ojp2YXJhcmdzS2luZEZvcik6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6c3BlY2lh
bGl6YXRpb25LaW5kRm9yKToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmlzTm9ybWFsQ2FsbCk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvRXhpdEtpbmQuY3BwOgorICAgICAgICAoSlNDOjpleGl0
S2luZFRvU3RyaW5nKToKKyAgICAgICAgKiBieXRlY29kZS9FeGl0S2luZC5oOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5
OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmlubGluaW5nQ29zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmlubGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0
VG9JbmxpbmVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5N
YXgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVUeXBlZEFycmF5Q29u
c3RydWN0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25z
dGFudEludGVybmFsRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cmVtb3Zl
TGFzdE5vZGVGcm9tR3JhcGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjp1bmRvRnVuY3Rpb25DaGVja3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6Cisg
ICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgorICAgICAgICAoSlNDOjpERkc6OmZ1bmN0
aW9uQ2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5j
dGlvbkZvcik6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmNwcDoKKyAgICAgICAg
KFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAg
ICAoSlNDOjpERkc6OmNhbklubGluZSk6CisgICAgICAgIChKU0M6OkRGRzo6bGVhc3RVcHBlckJv
dW5kKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wQmxvY2tIZWFkZXIp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6dmFsdWVQcm9maWxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcik6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlUHJvZmlsZUZvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGVGb3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9E
RkdNYXlFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjptYXlFeGl0KToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0NhbGxWYXJhcmdzRGF0
YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2FsbFZhcmFyZ3NEYXRhKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmxvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkxvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAo
SlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAqIGRmZy9ERkdPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRm
Zy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkdW1wQW5kVmVyaWZ5R3JhcGgpOgor
ICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAq
IGRmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6UHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWRUb3ApOgorICAgICAgICAoSlNDOjpERkc6
OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3cml0ZVRvcCk6CisgICAgICAgICogZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
aXNGbHVzaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJh
dGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RhY2tM
YXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNlOjph
c3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRl
Ojp2YWxpZGF0ZUNQUyk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpmdW5jdGlvblR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2Fs
bCk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgICogZnRsL0ZUTElubGlu
ZUNhY2hlU2l6ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAg
IChKU0M6OkZUTDo6c2l6ZU9mQ2FsbFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVP
ZkNhbGxGb3J3YXJkVmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ29uc3RydWN0
VmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mSW4pOgorICAgICAgICAoSlNDOjpG
VEw6OnNpemVPZklDRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZDaGVja0luKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmg6CisgICAgICAgICogZnRs
L0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTEpT
Q2FsbEJhc2UuY3BwOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGxCYXNlLmg6CisgICAgICAgICog
ZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpKU0Nh
bGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJh
cmdzOjpudW1TcGlsbFNsb3RzTmVlZGVkKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJh
cmdzOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpsaW5rKToKKyAg
ICAgICAgKiBmdGwvRlRMSlNDYWxsVmFyYXJncy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRM
OjpKU0NhbGxWYXJhcmdzOjpub2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdz
OjpzdGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpvcGVyYXRv
cjwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlR2V0TXlBcmd1bWVudHNMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW4pOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6dm1DYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6dm1DYWxsTm9FeGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y2FsbENoZWNrKToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgIChK
U0M6OkZUTDo6T3V0cHV0OjpjYWxsKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpz
aXplT2ZWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6c2l6ZUZyYW1lRm9yVmFyYXJncyk6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9T
dGFja1Zpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVk
RnJhbWUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayk6CisgICAgICAgICogaml0L0Fz
c2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdCk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWxsZWVGcmFtZVRhZ1Nsb3QpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50VGFnU2xvdCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdCk6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FsbGVlRnJhbWVDYWxsZXJGcmFtZSk6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUik6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZSk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKiBq
aXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAg
ICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBp
bGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBq
aXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjplbWl0U2V0dXBWYXJhcmdz
RnJhbWVGYXN0Q2FzZSk6CisgICAgICAgICogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmg6CisgICAg
ICAgICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyk6
CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJn
cy1pbmxpbmUtc21hbGxlci1Gb28uanM6IEFkZGVkLgorICAgICAgICAoRm9vKToKKyAgICAgICAg
KGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAq
IHRlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1pbmxpbmUuanM6IEFkZGVkLgorICAgICAg
ICAoRm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAgICAgICAg
KHRlc3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1uby1pbmxp
bmUuanM6IEFkZGVkLgorICAgICAgICAoRm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChj
aGVja0VxdWFsKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9nZXQt
YXJndW1lbnQtYnktdmFsLWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91dC1vZi1ib3VuZHMuanM6
IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogdGVzdHMv
c3RyZXNzL2dldC1hcmd1bWVudC1ieS12YWwtc2FmZS1pbi1pbmxpbmVkLXZhcmFyZ3MtY2FsbC1v
dXQtb2YtYm91bmRzLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgor
ICAgICAgICAqIHRlc3RzL3N0cmVzcy9nZXQtbXktYXJndW1lbnQtYnktdmFsLWNyZWF0ZXMtYXJn
dW1lbnRzLmpzOiBBZGRlZC4KKyAgICAgICAgKGJsYWgpOgorICAgICAgICAoZm9vKToKKyAgICAg
ICAgKGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAgICAgICAgKHRlc3QpOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtZXhpdC1pbi1m
b28uanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChj
aGVja0VxdWFsKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5s
aW5lZC1jYWxsLWlubGluZWQuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJh
cik6CisgICAgICAgIChiYXopOgorICAgICAgICAoY2hlY2tFcXVhbCk6CisgICAgICAgICh0ZXN0
KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxs
LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoY2hl
Y2tFcXVhbCk6CisgICAgICAgICh0ZXN0KToKKwogMjAxNS0wMi0xNSAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBleHBlcmltZW50YWwgPGF0dGFjaG1lbnQ+IGVs
ZW1lbnQgc3VwcG9ydApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC04NDQsNiArODQ0LDcgQEAgaWYgKEVOQUJMRV9GVExfSklUKQogICAg
ICAgICBmdGwvRlRMSklURmluYWxpemVyLmNwcAogICAgICAgICBmdGwvRlRMSlNDYWxsLmNwcAog
ICAgICAgICBmdGwvRlRMSlNDYWxsQmFzZS5jcHAKKyAgICAgICAgZnRsL0ZUTEpTQ2FsbFZhcmFy
Z3MuY3BwCiAgICAgICAgIGZ0bC9GVExMaW5rLmNwcAogICAgICAgICBmdGwvRlRMTG9jYXRpb24u
Y3BwCiAgICAgICAgIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNTExLDYgKzUxMSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxmdGxcRlRMSklURmluYWxpemVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExKU0NhbGwuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTEpTQ2FsbEJhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRs
XEZUTEpTQ2FsbFZhcmFyZ3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRs
XEZUTExpbmsuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvY2F0
aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb3dlckRGR1Rv
TExWTS5jcHAiIC8+CkBAIC0xMTk0LDYgKzExOTUsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEpJVEZpbmFsaXplci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZnRsXEZUTEpTQ2FsbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEpTQ2FsbEJhc2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0Nh
bGxWYXJhcmdzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMTGluay5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvY2F0aW9uLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMTG93ZXJERkdUb0xMVk0uaCIgLz4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4IEBACiAJCTBGQ0VGQUUwMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEMTIw
MkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1MjgwIC8q
IEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAgLyog
RlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQxMjAzMzFBOEM4
NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyogRlRM
SlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAvKiBG
VExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJDOTI0
MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyog
U3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDEx
NUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYw
MEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsg
fTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAvKiBG
VExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMb2NhdGlv
bi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3BwOyBwYXRoID0g
ZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQx
MjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxsQmFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQxMjAzMTFBOEM4NUJEMDAwRjUy
ODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxWYXJhcmdz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMTIwMzIxQThDODVCRDAwMEY1
MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0
cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0
dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0
aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MDYs
NiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5o
ICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAq
LywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovLAor
CQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAqLywK
KwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICovLAog
CQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkwRjhG
MkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC01NDQ5LDYgKzU0NTUsNyBAQAog
CQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Q
cm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVGMzAw
NUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4NEVF
MzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3IEBACiAJCQkJQTc4QTk3NzQxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJh
cmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBE
RkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMy
OERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlz
aW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzEsNiArNDcx
LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxzaGlmdDMyKHRydXN0ZWRJbW0zMkZvclNo
aWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdFB0cihJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKHRydXN0
ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlm
dFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHVyc2hp
ZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKKyAgICB9CiAKICAgICB2
b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtNzUwLDYgKzc2MCwxNiBAQCBw
dWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rl
c3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBz
cmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQodHJ1c3RlZEltbTMyRm9yU2hpZnQoaW1t
KSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0UHRyKEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgdXJzaGlmdDY0KHRydXN0ZWRJbW0zMkZv
clNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwogICAgIHZvaWQgbmVnUHRyKFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRlc3QpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJl
dmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk02NC5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODksNiArNjg5LDI2IEBAIHB1Ymxp
YzoKICAgICAgICAgdXJzaGlmdDMyKGRlc3QsIGltbSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9p
ZCB1cnNoaWZ0NjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxzcjw2ND4oZGVzdCwgc3Jj
LCBzaGlmdEFtb3VudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdXJzaGlmdDY0KFJlZ2lzdGVy
SUQgc3JjLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sc3I8NjQ+KGRlc3QsIHNyYywgaW1tLm1fdmFsdWUgJiAweDFmKTsKKyAg
ICB9CisKKyAgICB2b2lkIHVyc2hpZnQ2NChSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICB1cnNoaWZ0NjQoZGVzdCwgc2hpZnRBbW91bnQsIGRl
c3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB1cnNoaWZ0NjQoZGVzdCwgaW1tLCBkZXN0
KTsKKyAgICB9CisKICAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICB4b3IzMihkZXN0LCBzcmMsIGRlc3QpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMzQsNiArMzM0LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2Fy
cV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2
NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAogICAgIHZv
aWQgbXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE4MDE4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgxLDYgKzg4MSwxNiBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFfaThyKGludCBpbW0sIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0
ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9VUDJf
RXZJYiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVk
aWF0ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2hscV9pOHIoaW50IGlt
bSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBpZiAoaW1tID09IDEpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6
IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNl
KQogICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5v
bmUpCisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDApCiAgICAgICAgICwgc2xvd1BhdGhDb3Vu
dCgwKQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8g
OiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1
bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BS
IDogODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50czsgLy8gT25seSB1c2VkIGZvciB2YXJh
cmdzIGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
OSw3ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAg
ICAgLy8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBk
ZWJ1ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFS
QU0ocHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJ
bmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBj
b21wdXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CisgICAgcmVzdWx0
Lm1fbWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZvLm1heE51bUFyZ3VtZW50czsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZyb21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkzLDEzIEBAIENhbGxMaW5rU3RhdHVzIENh
bGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJs
b2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJhc2VsaW5lTWFwKTsKIH0KIAordm9pZCBD
YWxsTGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFu
dCkKK3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlhbnRMaXN0eyB2YXJpYW50IH07CisgICAg
bV9jb3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAgIG1faXNQcm92ZWQgPSB0cnVlOworfQor
CiBib29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsgaS0tOykgewpAQCAtMzIyLDYgKzMzMSw5
IEBAIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICAKICAgICBp
ZiAoIW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3RE
dW1wKG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAobV9tYXhOdW1Bcmd1bWVudHMpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3VtZW50cyA9ICIsIG1fbWF4TnVtQXJndW1l
bnRzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTgwMTg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAg
IENhbGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQotICAgIHsKLSAgICAg
ICAgbV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
ICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2Rl
QmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsK
IApAQCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMg
Y29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExp
bmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAorICAgIHZvaWQgc2V0UHJvdmVu
Q29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25z
dCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsg
fQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0K
QEAgLTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxs
KCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxs
LgogICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgQ2Fs
bFZhcmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwog
ICAgIGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25lZCBtX21heE51bUFyZ3VtZW50czsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEpTQwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAg
b3V0LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJ
bmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJh
cmdzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpD
b25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNh
bGw6CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlz
aW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVj
dCBJbmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAg
ICAgIENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAgIENvbnN0cnVjdFZh
cmFyZ3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBp
bmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAg
ICAgICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZy
YW1lIHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBLaW5k
IHZhcmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAg
ICAgcmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6Cisg
ICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICB9
CisgICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25L
aW5kRm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAg
ICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0
dGVyQ2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAg
IH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
IENvZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc05vcm1hbENhbGwo
S2luZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewog
ICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNl
IENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25z
dHJ1Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisgICAgYm9vbCBp
c1ZhcmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFyYXJncyhzdGF0aWNf
Y2FzdDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5
PiBhcmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0
RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwxMCArMTkxLDExIEBAIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2FsbGVyOwogICAgIEJpdFZlY3RvciBjYXB0
dXJlZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hpbmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxl
IG51bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI5OwotICAgIHVuc2lnbmVk
IGtpbmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAorICAgIHNpZ25lZCBzdGFja09mZnNldCA6
IDI4OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyByZWFsIHR5cGUgaXMgS2luZAogICAgIGJv
b2wgaXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNlIHRoZW4gd2Uga25vdyB0aGF0IGNhbGxl
ZS9zY29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZHIHdvbid0IHRyZWF0IHRoZW0gYXMgdmFy
aWFibGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNvdmVyZWQgbWFudWFsbHkuCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRo
ZSBjb2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2RpZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIg
Zm9sbG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKCkgY29udmVudGlvbiAoc2Vl
IENvZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVy
OyAvLyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KICAgICAKICAgICAv
LyBUaGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZh
bHVlcyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0
b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Niw2ICs2Niw4IEBAIGNvbnN0IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmco
RXhpdEtpbmQga2kKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHNFc2NhcGVkIjsKICAgICBjYXNl
IE5vdFN0cmluZ09iamVjdDoKICAgICAgICAgcmV0dXJuICJOb3RTdHJpbmdPYmplY3QiOworICAg
IGNhc2UgVmFyYXJnc092ZXJmbG93OgorICAgICAgICByZXR1cm4gIlZhcmFyZ3NPdmVyZmxvdyI7
CiAgICAgY2FzZSBVbmNvdW50YWJsZToKICAgICAgICAgcmV0dXJuICJVbmNvdW50YWJsZSI7CiAg
ICAgY2FzZSBVbmNvdW50YWJsZUludmFsaWRhdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00NSw2ICs0NSw3IEBAIGVudW0gRXhpdEtpbmQgOiB1aW50OF90IHsKICAgICBJbmFkZXF1YXRl
Q292ZXJhZ2UsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIGVuZGVkIHVwIGluIGNvZGUgdGhhdCBk
aWRuJ3QgaGF2ZSBwcm9maWxpbmcgY292ZXJhZ2UuCiAgICAgQXJndW1lbnRzRXNjYXBlZCwgLy8g
V2UgZXhpdGVkIGJlY2F1c2UgYXJndW1lbnRzIGVzY2FwZWQgYnV0IHdlIGRpZG4ndCBleHBlY3Qg
dGhlbSB0by4KICAgICBOb3RTdHJpbmdPYmplY3QsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIHNo
b3VsZG4ndCBoYXZlIGF0dGVtcHRlZCB0byBvcHRpbWl6ZSBzdHJpbmcgb2JqZWN0IGFjY2Vzcy4K
KyAgICBWYXJhcmdzT3ZlcmZsb3csIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGEgdmFyYXJncyBjYWxs
IHBhc3NlZCBtb3JlIGFyZ3VtZW50cyB0aGFuIHdlIGV4cGVjdGVkLgogICAgIFVuY291bnRhYmxl
LCAvLyBXZSBleGl0ZWQgZm9yIG5vbmUgb2YgdGhlIGFib3ZlIHJlYXNvbnMsIGFuZCB3ZSBzaG91
bGQgbm90IGNvdW50IGl0LiBNb3N0IHVzZXMgb2YgdGhpcyBzaG91bGQgYmUgdmlld2VkIGFzIGEg
RklYTUUuCiAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIC8vIFdlIGV4aXRlZCBiZWNhdXNl
IHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlkYXRlZDsgdGhpcyBtZWFucyB0aGF0IHdlJ3ZlIGFs
cmVhZHkgY291bnRlZCB0aGUgcmVhc29ucyB3aHkgdGhlIGNvZGUgYmxvY2sgd2FzIGludmFsaWRh
dGVkLgogICAgIFdhdGNoZG9nVGltZXJGaXJlZCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgbmVl
ZCB0byBzZXJ2aWNlIHRoZSB3YXRjaGRvZyB0aW1lci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAJKHJldmlzaW9uIDE4MDE4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsMjUgKzkyLDI1IEBAIHZvaWQgVmFsdWVSZWNvdmVy
eTo6ZHVtcEluQ29udGV4dChQcmludFMKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgY2Fz
ZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludGYoIiolZCIsIHZpcnR1YWxS
ZWdpc3RlcigpLm9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIqIiwgdmlydHVhbFJlZ2lz
dGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFj
azoKLSAgICAgICAgb3V0LnByaW50ZigiKmludDMyKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIqaW50MzIoIiwgdmlydHVhbFJlZ2lzdGVyKCks
ICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNr
OgotICAgICAgICBvdXQucHJpbnRmKCIqaW50NTIoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zm
c2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIippbnQ1MigiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwg
IikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpT
U3RhY2s6Ci0gICAgICAgIG91dC5wcmludGYoIipzdHJpY3RJbnQ1MiglZCkiLCB2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKnN0cmljdEludDUyKCIsIHZp
cnR1YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBEb3VibGVE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludGYoIipkb3VibGUoJWQpIiwgdmly
dHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIipkb3VibGUoIiwg
dmlydHVhbFJlZ2lzdGVyKCksICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENlbGxE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludGYoIipjZWxsKCVkKSIsIHZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIqY2VsbCgiLCB2aXJ0
dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQm9vbGVhbkRp
c3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50ZigiKmJvb2woJWQpIiwgdmlydHVh
bFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIipib29sKCIsIHZpcnR1
YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcmd1bWVudHNU
aGF0V2VyZU5vdENyZWF0ZWQ6CiAgICAgICAgIG91dC5wcmludGYoImFyZ3VtZW50cyIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE5NCw5ICsxOTQsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKLSAgICAgICAg
Ly8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCi0gICAg
ICAgIEFTU0VSVCghbV9zdGF0ZS5ibG9jaygpLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLT5s
b2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2Yg
YXJndW1lbnRzIGhhcyBiZWVuIHNldC4gU2V0QXJndW1lbnQgbWVhbnMgdGhhdCBzb21lb25lIHNl
dAorICAgICAgICAvLyB0aGUgYXJndW1lbnQgdmFsdWVzIG91dC1vZi1iYW5kLCBhbmQgY3VycmVu
dGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8gYQorICAgICAgICAvLyBub24tY2xlYXIg
dmFsdWUuCisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNl
IExvYWRWYXJhcmdzOiB7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50
aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQo
ZGF0YS0+Y291bnQpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS0+bGltaXQgLSAxOyBpLS07KQorICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2Fz
ZSBCaXRPcjoKQEAgLTEzMjQsNyArMTMzNSw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0
IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwogICAgICAg
ICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0
aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRo
ZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICBpZiAobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICBzZXRD
b25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAvLyBQcmV0ZW5kIHRoYXQgd2UgY2xvYmJl
cmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4KQEAgLTE5NzMsNiArMTk4NSw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3Ao
KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwMyw2ICs1
MDMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0g
bm9kZS0+b3JpZ2luOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwg
cmV0dXJuLiBCdXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhhdCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw4IEBAIHByaXZhdGU6CiAgICAgfQog
CiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KLSAgICBib29sIGhhbmRsZU1pbk1heChp
bnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NG
dW5jdG9yPgorICAgIGJvb2wgaGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlw
ZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgCiAgICAgLy8gSGFuZGxl
IGNhbGxzLiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGluZyBpbmxpbmluZyBhbmQgaW50
cmluc2ljcy4KICAgICB2b2lkIGhhbmRsZUNhbGwoCkBAIC0xODIsMjAgKzE4MywyNSBAQCBwcml2
YXRlOgogICAgICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rl
ck9mZnNldCwgQ2FsbExpbmtTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0
LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rp
b25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAg
ICAgdm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOwotICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50
LCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQpOwotICAgIHZvaWQgdW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50KTsKKyAgICB2
b2lkIGhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJp
YW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtbnQpOwogICAg
IHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHVuc2ln
bmVkIGlubGluaW5nQ29zdChDYWxsVmFyaWFudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mg
bm90IGFuIGlubGluaW5nIGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZl
IGEgY29zdCBvZiAxLgogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQg
c3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhh
bmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29u
c3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxp
bmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOworICAgIGJvb2wg
aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBj
b25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVy
IHRoaXNBcmd1bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25l
ZCBhcmd1bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWdu
ZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIGVudW0gQ2FsbGVyTGlua2FiaWxpdHkgeyBD
YWxsZXJEb2VzTm9ybWFsTGlua2luZywgQ2FsbGVyTGlua3NNYW51YWxseSB9OwotICAgIGJvb2wg
YXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJh
bmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBD
YWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlu
bGluaW5nQmFsYW5jZSk7Ci0gICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVD
YWxsRnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGVja3NGdW5jdG9yPgorICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNl
dCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVu
Y3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9y
PgorICAgIHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9w
ZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5k
LCBDYWxsZXJMaW5rYWJpbGl0eSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsK
ICAgICB2b2lkIGNhbmNlbExpbmtpbmdGb3JCbG9jayhJbmxpbmVTdGFja0VudHJ5KiwgQmFzaWNC
bG9jayopOyAvLyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdpdmVuIGJsb2NrIGlzIHRoZSBsYXN0IG9u
ZSB0byBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5saW5lIHN0YWNrIGVudHJ5LgogICAgIC8v
IEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQs
IGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW50cmlu
c2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsK
LSAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwg
SW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgYm9vbCBoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAg
ICBib29sIGhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIGJvb2wgaGFuZGxlVHlwZWRB
cnJheUNvbnN0cnVjdG9yKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJy
YXlUeXBlLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFs
RnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBo
YW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0
eU9mZnNldCwgTm9kZSogdmFsdWUpOwogICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1
bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7
CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlkKApAQCAtNTI4LDYgKzUzNCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXpl
KCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAg
ICAgICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpOworICAgICAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3QoaW5s
aW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1
bWVudENvdW50KSkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG51bUFyZ3VtZW50cyA9
IGlubGluZVN0YWNrRW50cnktPm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBudW1Bcmd1bWVudHM7IGFyZ3VtZW50LS0gPiAxOykK
QEAgLTY1NCwxMyArNjYyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCByZW1vdmVMYXN0Tm9kZUZyb21HcmFwaChOb2RlVHlwZSBleHBl
Y3RlZE5vZGVUeXBlKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2Nr
LT50YWtlTGFzdCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IGV4cGVj
dGVkTm9kZVR5cGUpOwotICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUobm9kZSk7Ci0g
ICAgfQotCiAgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChOb2RlKiBjaGlsZCkKICAgICB7CiAgICAg
ICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoRWRnZShjaGlsZCkpOwpAQCAtNjkx
LDcgKzY5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBvcCwgb3BJbmZvLCBjYWxsZWUsIGFy
Z0NvdW50LCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRSZWcocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdCksIGNhbGwpOworICAgICAg
ICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0K
ICAgICAKQEAgLTEwNDIsOCArMTA0Myw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNh
bGwoCiB7CiAgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIAotICAgIGlmIChj
YWxsVGFyZ2V0LT5oYXNDb25zdGFudCgpKQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxM
aW5rU3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKKyAg
ICBpZiAoY2FsbFRhcmdldC0+aXNDZWxsQ29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0
dXMuc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQoY2FsbFRhcmdldC0+YXNDZWxs
KCkpKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygp
KQogICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBjdXJyZW50Q29kZU9y
aWdpbigpLCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CkBAIC0xMDYwLDcgKzEwNjEsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogICAgIE9wSW5mbyBjYWxs
T3BJbmZvOwogICAgIAotICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQs
IGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgeworICAgIGlmIChoYW5kbGVJ
bmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNl
dCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFs
UmVnaXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9w
LCBraW5kLCBwcmVkaWN0aW9uKSkgewogICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigp
KQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgp
OwogICAgICAgICByZXR1cm47CkBAIC0xMDcyLDcgKzEwNzMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKAogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5m
dW5jdGlvbigpOwogICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9u
S2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAg
ICAgICBpZiAoZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUsIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zm
c2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tz
KGNhbGxlZSwgY2FsbFRhcmdldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0
ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIGNhbGxPcEluZm8gPSBPcEluZm8obV9ncmFwaC5mcmVl
emUoZnVuY3Rpb24pKTsKIAogICAgICAgICAgICAgaWYgKG9wID09IENhbGwpCkBAIC0xMDg4LDEx
ICsxMDg5LDU0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2Fs
bChyZXN1bHQsIG9wLCBjYWxsT3BJbmZvLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogfQogCi12b2lkIEJ5dGVDb2Rl
UGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxs
VGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
K3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywg
Tm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBOb2RlKiB0
aGlzQXJndW1lbnQ7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9
PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7CisgICAgCisgICAgaW50IHJl
c3VsdCA9IHBjWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgY2FsbGVlID0gcGNbMl0udS5vcGVyYW5k
OworICAgIGludCB0aGlzUmVnID0gcGNbM10udS5vcGVyYW5kOworICAgIGludCBhcmd1bWVudHMg
PSBwY1s0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJlZVJlZyA9IHBjWzVdLnUub3BlcmFu
ZDsKKyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBwY1s2XS51Lm9wZXJhbmQ7CisgICAgCisg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAKKyAg
ICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsKKyAgICAK
KyAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRm9yKAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJl
bnRDb2RlT3JpZ2luKCksCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZv
cywgbV9jYWxsQ29udGV4dE1hcCk7CisgICAgaWYgKGNhbGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50
KCkpCisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFByb3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxW
YXJpYW50KGNhbGxUYXJnZXQtPmFzQ2VsbCgpKSk7CisgICAgCisgICAgaWYgKGNhbGxMaW5rU3Rh
dHVzLmNhbk9wdGltaXplKCkKKyAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwg
cmVzdWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhp
c1JlZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNldCwgMCwg
bV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9wLCBJbmxp
bmVDYWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQpLCBwcmVkaWN0aW9uKSkgeworICAgICAg
ICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9jYWxsVmFyYXJnc0RhdGEu
YWRkKCk7CisgICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsK
KyAgICAKKyAgICBOb2RlKiB0aGlzQ2hpbGQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwp
Ci0gICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgw
LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICB0aGlzQ2hpbGQgPSBnZXQoVmlydHVhbFJlZ2lz
dGVyKHRoaXNSZWcpKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXNDaGlsZCA9IG51bGxwdHI7Cisg
ICAgCisgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBjYWxsVGFyZ2V0LCBnZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykp
LCB0aGlzQ2hpbGQpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKKyAg
ICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7
Cit9CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFu
dCBjYWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnRS
ZWcpCit7CisgICAgTm9kZSogdGhpc0FyZ3VtZW50OworICAgIGlmICh0aGlzQXJndW1lbnRSZWcu
aXNWYWxpZCgpKQorICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQodGhpc0FyZ3VtZW50UmVnKTsK
ICAgICBlbHNlCiAgICAgICAgIHRoaXNBcmd1bWVudCA9IDA7CiAKQEAgLTExMTAsMTMgKzExNTQs
NiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoCiAgICAgYWRkVG9H
cmFwaChDaGVja0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjYWxsZWVDZWxsKSksIGNhbGxU
YXJnZXRGb3JDaGVjaywgdGhpc0FyZ3VtZW50KTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6
dW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNhbGxlZSkKLXsKLSAgICByZW1vdmVMYXN0
Tm9kZUZyb21HcmFwaChDaGVja0NlbGwpOwotICAgIGlmIChjYWxsZWUuaXNDbG9zdXJlQ2FsbCgp
KQotICAgICAgICByZW1vdmVMYXN0Tm9kZUZyb21HcmFwaChHZXRFeGVjdXRhYmxlKTsKLX0KLQog
dm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKICAgICBmb3IgKGludCBpID0ga2luZCA9PSBDb2RlRm9yQ2FsbCA/IDAgOiAx
OyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkKQEAgLTExMzEsNyArMTE2OCw3
IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2EKICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCk7CiAg
ICAgaWYgKCFleGVjdXRhYmxlKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGVyZSBpcyBubyBmdW5jdGlvbiBleGVjdXRh
YmxlLiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGVyZSBp
cyBubyBmdW5jdGlvbiBleGVjdXRhYmxlLlxuIik7CiAgICAgICAgIHJldHVybiBVSU5UX01BWDsK
ICAgICB9CiAgICAgCkBAIC0xMTU4LDYgKzExOTUsMTYgQEAgdW5zaWduZWQgQnl0ZUNvZGVQYXJz
ZXI6OmlubGluaW5nQ29zdChDYQogICAgIH0KICAgICBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0
eUxldmVsID0gaW5saW5lRnVuY3Rpb25Gb3JDYXBhYmlsaXR5TGV2ZWwoCiAgICAgICAgIGNvZGVC
bG9jaywga2luZCwgY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSk7CisgICAgaWYgKHZlcmJvc2UpIHsK
KyAgICAgICAgZGF0YUxvZygiICAgIEtpbmQ6ICIsIGtpbmQsICJcbiIpOworICAgICAgICBkYXRh
TG9nKCIgICAgSXMgY2xvc3VyZSBjYWxsOiAiLCBjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpLCAiXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiICAgIENhcGFiaWxpdHkgbGV2ZWw6ICIsIGNhcGFiaWxpdHlM
ZXZlbCwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICBNaWdodCBpbmxpbmUgZnVuY3Rpb246
ICIsIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3IoY29kZUJsb2NrLCBraW5kKSwgIlxuIik7CisgICAg
ICAgIGRhdGFMb2coIiAgICBNaWdodCBjb21waWxlIGZ1bmN0aW9uOiAiLCBtaWdodENvbXBpbGVG
dW5jdGlvbkZvcihjb2RlQmxvY2ssIGtpbmQpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiICAg
IElzIHN1cHBvcnRlZCBmb3IgaW5saW5pbmc6ICIsIGlzU3VwcG9ydGVkRm9ySW5saW5pbmcoY29k
ZUJsb2NrKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICBOZWVkcyBhY3RpdmF0aW9uOiAi
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRpb24oKSwgIlxuIik7
CisgICAgICAgIGRhdGFMb2coIiAgICBJcyBpbmxpbmluZyBjYW5kaWRhdGU6ICIsIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCktPmlzSW5saW5pbmdDYW5kaWRhdGUoKSwgIlxuIik7CisgICAg
fQogICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCkpIHsKICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBiZWNhdXNlIHRoZSBmdW5j
dGlvbiBpcyBub3QgaW5saW5lYWJsZS5cbiIpOwpAQCAtMTIxMCwxMyArMTI1NywxNSBAQCB1bnNp
Z25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhCiAgICAgcmV0dXJuIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25Db3VudCgpOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQg
Y2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxl
ckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tz
RnVuY3Rvcj4KK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVy
TGlua2FiaWxpdHksIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFt
ZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIAogICAgIEFTU0VSVChpbmxpbmlu
Z0Nvc3QoY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25L
aW5kKSAhPSBVSU5UX01BWCk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
ZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0
aW9uS2luZCk7CisgICAgaW5zZXJ0Q2hlY2tzKGNvZGVCbG9jayk7CiAKICAgICAvLyBGSVhNRTog
RG9uJ3QgZmx1c2ggY29uc3RhbnRzIQogICAgIApAQCAtMTM1Niw0NCArMTQwNSw2MiBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpjYW5jZWxMaW5raW5nRm9yQmxvCiAgICAgfQogfQogCi1ib29sIEJ5
dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBp
bnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5s
aW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmls
aXR5LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNl
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6
OmF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVy
YW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxpdHksIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIGNvbnN0IENoZWNr
c0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNw
ZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9y
KGtpbmQpOwogICAgIAogICAgIGlmICghaW5saW5pbmdCYWxhbmNlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCisgICAgYm9vbCBkaWRJbnNlcnRDaGVja3MgPSBmYWxzZTsKKyAgICBhdXRv
IGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nID0gWyZdICgpIHsKKyAgICAgICAgaW5zZXJ0Q2hl
Y2tzKG51bGxwdHIpOworICAgICAgICBkaWRJbnNlcnRDaGVja3MgPSB0cnVlOworICAgIH07Cisg
ICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICBDb25zaWRlcmluZyBj
YWxsZWUgIiwgY2FsbGVlLCAiXG4iKTsKKyAgICAKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiog
ZnVuY3Rpb24gPSBjYWxsZWUuaW50ZXJuYWxGdW5jdGlvbigpKSB7Ci0gICAgICAgIGlmIChoYW5k
bGVDb25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lz
dGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5k
KSkgeworICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKHJlc3VsdE9w
ZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHNwZWNpYWxpemF0aW9uS2luZCwgaW5zZXJ0Q2hlY2tzV2l0aEFjY291bnRpbmcpKSB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRJbnNlcnRDaGVja3MpOwogICAgICAgICAgICAg
YWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0Tm9kZSk7CiAgICAgICAgICAgICBlbWl0QXJn
dW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UtLTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENoZWNrcyk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgCiAgICAgSW50cmluc2ljIGludHJpbnNpYyA9IGNhbGxlZS5pbnRy
aW5zaWNGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50
cmluc2ljKSB7Ci0gICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWMocmVzdWx0T3BlcmFuZCwgaW50
cmluc2ljLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRp
Y3Rpb24pKSB7CisgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWMocmVzdWx0T3BlcmFuZCwgaW50
cmluc2ljLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRp
Y3Rpb24sIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nKSkgeworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZGlkSW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSwgY2FsbFRhcmdldE5vZGUpOwogICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVn
aXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktp
bmQpOwogICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlLS07CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFkaWRJbnNlcnRDaGVja3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAogICAgIHVuc2lnbmVkIG15SW5saW5pbmdDb3N0ID0gaW5saW5pbmdDb3N0KGNhbGxlZSwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaWYgKG15
SW5saW5pbmdDb3N0ID4gaW5saW5pbmdCYWxhbmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgaW5saW5lQ2FsbChjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbGVl
LCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQs
IGtpbmQsIGNhbGxlckxpbmthYmlsaXR5KTsKKworICAgIGlubGluZUNhbGwoY2FsbFRhcmdldE5v
ZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxlZSwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBjYWxsZXJMaW5rYWJpbGl0eSwgaW5zZXJ0
Q2hlY2tzKTsKICAgICBpbmxpbmluZ0JhbGFuY2UgLT0gbXlJbmxpbmluZ0Nvc3Q7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMm
IGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVD
YWxsRnJhbWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKK2Jvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAorICAgIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBp
bnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLAor
ICAgIGludCByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c0FyZ3VtZW50LAorICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWdu
ZWQgYXJndW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCisgICAg
dW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6Oktp
bmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBpZiAodmVyYm9zZSkg
ewogICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuIik7CkBAIC0xNDA3LDYg
KzE0NzQsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6
OmlzVmFyYXJncyhraW5kKQorICAgICAgICAmJiBjYWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVu
dHMoKSA+IE9wdGlvbnM6Om1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcoKSkgeworICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgYmVjYXVz
ZSBvZiB2YXJhcmdzLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAg
IAogICAgIHVuc2lnbmVkIGlubGluaW5nQmFsYW5jZSA9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlv
bkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiAgICAgaWYgKHNwZWNp
YWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KQogICAgICAgICBpbmxpbmluZ0JhbGFu
Y2UgPSBzdGQ6Om1pbihpbmxpbmluZ0JhbGFuY2UsIE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZv
ckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKSk7CkBAIC0xNDE3LDE3
ICsxNDkxLDEwNSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAg
ICAgLy8gc2ltcGxpZmljYXRpb24gb24gdGhlIGZseSBhbmQgdGhpcyBoZWxwcyByZWR1Y2UgY29t
cGlsZSB0aW1lcywgYnV0IHdlIGNhbiBvbmx5IGxldmVyYWdlCiAgICAgLy8gdGhpcyBpbiBjYXNl
cyB3aGVyZSB3ZSBkb24ndCBuZWVkIGNvbnRyb2wgZmxvdyBkaWFtb25kcyB0byBjaGVjayB0aGUg
Y2FsbGVlLgogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSAmJiBj
YWxsTGlua1N0YXR1cy5zaXplKCkgPT0gMSkgewotICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3Mo
Ci0gICAgICAgICAgICBjYWxsTGlua1N0YXR1c1swXSwgY2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVy
T2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQ7
CisgICAgICAgIAorICAgICAgICAvLyBPbmx5IHVzZWQgZm9yIHZhcmFyZ3MgY2FsbHMuCisgICAg
ICAgIHVuc2lnbmVkIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAgICAgICB1bnNpZ25lZCBtYXhO
dW1Bcmd1bWVudHMgPSAwOworCisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJn
cyhraW5kKSkgeworICAgICAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25F
eGVjdXRhYmxlID0gY2FsbExpbmtTdGF0dXNbMF0uZnVuY3Rpb25FeGVjdXRhYmxlKCkpCisgICAg
ICAgICAgICAgICAgbWFuZGF0b3J5TWluaW11bSA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cGFyYW1l
dGVyQ291bnQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlN
aW5pbXVtID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gaW5jbHVkZXMgInRoaXMi
CisgICAgICAgICAgICBtYXhOdW1Bcmd1bWVudHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgICAg
ICBjYWxsTGlua1N0YXR1cy5tYXhOdW1Bcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBtYW5k
YXRvcnlNaW5pbXVtICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHNvcnQg
b2YgcHJldGVuZCB0aGF0IHRoaXMgKmlzKiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IHdl
cmUgcGFzc2VkLgorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBtYXhO
dW1Bcmd1bWVudHM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0g
cmVnaXN0ZXJPZmZzZXRPckZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICByZWdpc3Rlck9m
ZnNldCAtPSBtYXhOdW1Bcmd1bWVudHM7IC8vIGluY2x1ZGVzICJ0aGlzIgorICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAg
ICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAg
ICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAgICAgICAgIC1yZWdp
c3Rlck9mZnNldCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQg
PSByZWdpc3Rlck9mZnNldE9yRmlyc3RGcmVlUmVnOworICAgICAgICAKICAgICAgICAgYm9vbCBy
ZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVDYWxsKAogICAgICAgICAgICAgY2FsbFRhcmdldE5vZGUs
IHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwKICAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxs
ZXJEb2VzTm9ybWFsTGlua2luZywgcHJlZGljdGlvbiwKLSAgICAgICAgICAgIGlubGluaW5nQmFs
YW5jZSk7Ci0gICAgICAgIGlmICghcmVzdWx0ICYmICFjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgp
KQotICAgICAgICAgICAgdW5kb0Z1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdKTsKKyAg
ICAgICAgICAgIGlubGluaW5nQmFsYW5jZSwgWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewor
ICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSwgY2Fs
bFRhcmdldE5vZGUsIHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCA/IHRoaXNBcmd1
bWVudCA6IFZpcnR1YWxSZWdpc3RlcigpKTsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIGhh
dmUgYSB2YXJhcmdzIGNhbGwsIHdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgYXJndW1lbnRzIHJpZ2h0
IG5vdy4KKyAgICAgICAgICAgICAgICBpZiAoSW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2lu
ZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQgPQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLm9mZnNldCgpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdpc3Rlck9m
ZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICAgICAgICAg
IGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0
KSkub2Zmc2V0KCk7CisKKyAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbV9ncmFwaC5tX2xvYWRWYXJhcmdzRGF0YS5hZGQoKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YS0+c3RhcnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVudFN0YXJ0ICsgMSk7
CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNvdW50ID0gVmlydHVhbFJlZ2lzdGVyKHJlbWFw
cGVkUmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gYXJndW1lbnRzT2Zmc2V0OworICAgICAgICAgICAgICAg
ICAgICBkYXRhLT5saW1pdCA9IG1heE51bUFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YS0+bWFuZGF0b3J5TWluaW11bSA9IG1hbmRhdG9yeU1pbmltdW07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJbmZvKGRhdGEp
LCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAvLyBJbiBERkcgSVIgYmVmb3JlIFNTQSwgd2UgY2Fubm90IGluc2VydCBjb250cm9sIGZs
b3cgYmV0d2VlbiBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3Mg
YW5kIHRoZSBsYXN0IFNldEFyZ3VtZW50LiBUaGlzIGlzbid0IGEgcHJvYmxlbSBvbmNlIHdlIGdl
dCB0byBERkcKKyAgICAgICAgICAgICAgICAgICAgLy8gU1NBLiBGb3J0dW5hdGVseSwgd2UgYWxz
byBoYXZlIG90aGVyIHJlYXNvbnMgZm9yIG5vdCBpbnNlcnRpbmcgY29udHJvbCBmbG93CisgICAg
ICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBTU0EuCisgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb3VudFZhcmlhYmxlID0gbmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKAorICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlbWFw
cGVkUmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgZmFsc2UpOworICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQgd2lsbCBmb3Jj
ZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24ndAorICAgICAg
ICAgICAgICAgICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0
QXJndW1lbnQgYW5kIEZsdXNoZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBpcworICAgICAgICAgICAg
ICAgICAgICAvLyBtb3N0bHkganVzdCBhIGZvcm1hbGl0eS4KKyAgICAgICAgICAgICAgICAgICAg
Y291bnRWYXJpYWJsZS0+cHJlZGljdChTcGVjSW50MzIpOworICAgICAgICAgICAgICAgICAgICBj
b3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50
LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJsZS0+bG9jYWwoKSwg
c2V0QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlzQXJndW1lbnQp
LCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IG1heE51bUFyZ3VtZW50czsgKythcmd1bWVudCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIocmVtYXBwZWRBcmd1bWVudFN0YXJ0ICsgYXJndW1lbnQpLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VTaG91bGROZXZlclVuYm94KHRydWUp
OyAvLyBXZSBjdXJyZW50bHkgaGF2ZSBub3doZXJlIHRvIHB1dCB0aGUgdHlwZSBjaGVjayBvbiB0
aGUgTG9hZFZhcmFyZ3MuIExvYWRWYXJhcmdzIGlzIGVmZmVjdGZ1bCwgc28gYWZ0ZXIgaXQgZmlu
aXNoZXMsIHdlIGNhbm5vdCBleGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBGb3IgYSB3aGlsZSBpdCBoYWQgYmVlbiBteSBpbnRlbnRpb24g
dG8gZG8gdGhpbmdzIGxpa2UgdGhpcyBpbnNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBwcmVkaWN0aW9uIGluamVjdGlvbiBwaGFzZS4gQnV0IGluIHRoaXMgY2FzZSBpdCdzIHJl
YWxseSBiZXN0IHRvIGRvIGl0IGhlcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNh
dXNlIGl0J3MgaGVyZSB0aGF0IHdlIGhhdmUgYWNjZXNzIHRvIHRoZSB2YXJpYWJsZSBhY2Nlc3Mg
ZGF0YXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5saW5pbmcgd2UncmUg
YWJvdXQgdG8gZG8uCisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU29tZXRoaW5nIGVsc2UgdGhhdCdzIGludGVyZXN0aW5nIGhlcmUgaXMgdGhh
dCB3ZSdkIHJlYWxseSBsb3ZlIHRvIGdldAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJl
ZGljdGlvbnMgZnJvbSB0aGUgYXJndW1lbnRzIGxvYWRlZCBhdCB0aGUgY2FsbHNpdGUsIHJhdGhl
ciB0aGFuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRzIHJlY2VpdmVk
IGluc2lkZSB0aGUgY2FsbGVlLiBCdXQgdGhhdCBwcm9iYWJseSB3b24ndCBtYXR0ZXIgZm9yIG1v
c3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxzLgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvZGVCbG9jayAmJiBhcmd1bWVudCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGNvZGVCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50
ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKHZhcmlhYmxlKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCksIHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOwogICAgICAgICBpZiAodmVyYm9zZSkg
ewogICAgICAgICAgICAgZGF0YUxvZygiRG9uZSBpbmxpbmluZyAoc2ltcGxlKS5cbiIpOwogICAg
ICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwor
ICAgICAgICAgICAgZGF0YUxvZygiUmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMTQzNywxMSArMTU5OSw5IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBkbyBtb3JlIGRl
dGFpbGVkIHBvbHl2YXJpYW50L3BvbHltb3JwaGljIHByb2ZpbGluZzsgYW5kIHNlY29uZCwgaXQg
cmVkdWNlcyBjb21waWxlIHRpbWVzIGluCiAgICAgLy8gdGhlIERGRy4gQW5kIGJ5IHBvbHl2YXJp
YW50IHByb2ZpbGluZyB3ZSBtZWFuIHBvbHl2YXJpYW50IHByb2ZpbGluZyBvZiAqdGhpcyogY2Fs
bC4gTm90ZSB0aGF0CiAgICAgLy8gd2UgY291bGQgaW1wcm92ZSB0aGF0IGFzcGVjdCBvZiB0aGlz
IGJ5IGRvaW5nIHBvbHltb3JwaGljIGlubGluaW5nIGJ1dCBoYXZpbmcgdGhlIHByb2ZpbGluZwot
ICAgIC8vIGFsc28uIEN1cnJlbnRseSB3ZSBvcHQgYWdhaW5zdCB0aGlzLCBidXQgaXQgY291bGQg
YmUgaW50ZXJlc3RpbmcuIFRoYXQgd291bGQgcmVxdWlyZSBoYXZpbmcgYQotICAgIC8vIHNlcGFy
YXRlIG5vZGUgZm9yIGNhbGwgZWRnZSBwcm9maWxpbmcuCi0gICAgLy8gRklYTUU6IEludHJvZHVj
ZSB0aGUgbm90aW9uIG9mIGEgc2VwYXJhdGUgY2FsbCBlZGdlIHByb2ZpbGluZyBub2RlLgotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYwMzMKLSAgICBp
ZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9y
cGhpY0NhbGxJbmxpbmluZygpKSB7CisgICAgLy8gYWxzby4KKyAgICBpZiAoIWlzRlRMKG1fZ3Jh
cGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0NhbGxJbmxpbmlu
ZygpCisgICAgICAgIHx8IElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpKSB7CiAgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlubGluaW5n
IChoYXJkKS5cbiIpOwogICAgICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2Rl
T3JpZ2luKCksICJcbiIpOwpAQCAtMTQ4Miw2ICsxNjQyLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVu
dENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgfQogICAgIAorICAgIGludCByZWdpc3Rlck9mZnNl
dCA9IHJlZ2lzdGVyT2Zmc2V0T3JGaXJzdEZyZWVSZWc7CisgICAgCiAgICAgLy8gVGhpcyBtYWtl
cyBtZSB3aXNoIHRoYXQgd2Ugd2VyZSBpbiBTU0EgYWxsIHRoZSB0aW1lLiBXZSBuZWVkIHRvIHBp
Y2sgYSB2YXJpYWJsZSBpbnRvIHdoaWNoIHRvCiAgICAgLy8gc3RvcmUgdGhlIGNhbGxlZSBzbyB0
aGF0IGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byBhbGwgb2YgdGhlIGJsb2NrcyB3ZSdyZSBhYm91
dCB0byBjcmVhdGUuIFdlCiAgICAgLy8gZ2V0IGF3YXkgd2l0aCBkb2luZyBhbiBpbW1lZGlhdGUt
c2V0IGhlcmUgYmVjYXVzZSB3ZSB3b3VsZG4ndCBoYXZlIHBlcmZvcm1lZCBhbnkgc2lkZSBlZmZl
Y3RzCkBAIC0xNTI2LDcgKzE2ODgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZyhOb2RlCiAgICAgICAgIGJvb2wgaW5saW5pbmdSZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVD
YWxsKAogICAgICAgICAgICAgbXlDYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExp
bmtTdGF0dXNbaV0sIHJlZ2lzdGVyT2Zmc2V0LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxlckxpbmtzTWFudWFsbHksIHByZWRp
Y3Rpb24sCi0gICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UpOworICAgICAgICAgICAgaW5saW5p
bmdCYWxhbmNlLCBbJl0gKENvZGVCbG9jayopIHsgfSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
IWlubGluaW5nUmVzdWx0KSB7CiAgICAgICAgICAgICAvLyBUaGF0IGZhaWxlZCBzbyB3ZSBsZXQg
dGhlIGJsb2NrIGRpZS4gTm90aGluZyBpbnRlcmVzdGluZyBzaG91bGQgaGF2ZSBiZWVuIGFkZGVk
IHRvCkBAIC0xNjEwLDE0ICsxNzcyLDE3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKE5vZGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGVja3NGdW5jdG9yPgorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCBy
ZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykK
IHsKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRoLm1p
bigpCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50
TmFOKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgIAogICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7IC8vIE1hdGgubWluKHgpCisgICAgICAgIGlu
c2VydENoZWNrcygpOwogICAgICAgICBOb2RlKiByZXN1bHQgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAg
ICBhZGRUb0dyYXBoKFBoYW50b20sIEVkZ2UocmVzdWx0LCBOdW1iZXJVc2UpKTsKICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0KTsKQEAgLTE2MjUsNiAr
MTc5MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChpbnQgcmUKICAgICB9
CiAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDMpIHsgLy8gTWF0
aC5taW4oeCwgeSkKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgob3AsIGdldCh2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC0xNjMzLDExICsxNzk5LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1p
bk1heChpbnQgcmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgor
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludCByZXN1bHRPcGVyYW5kLCBJ
bnRyaW5zaWMgaW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgQ2hlY2tzRnVu
Y3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIHN3aXRjaCAoaW50cmluc2ljKSB7CiAgICAgY2Fz
ZSBBYnNJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID09IDEpIHsgLy8gTWF0aC5hYnMoKQorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpT
Q29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTE2NDUsNiArMTgxMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9y
dHNGbG9hdGluZ1BvaW50QWJzKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAg
ICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKEFyaXRo
QWJzLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7
CiAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykpCiAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdz
KE5vZGVNYXlPdmVyZmxvd0luREZHKTsKQEAgLTE2NTMsMjkgKzE4MjIsMzMgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIH0KIAogICAgIGNhc2UgTWluSW50
cmluc2ljOgotICAgICAgICByZXR1cm4gaGFuZGxlTWluTWF4KHJlc3VsdE9wZXJhbmQsIEFyaXRo
TWluLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgICAg
ICByZXR1cm4gaGFuZGxlTWluTWF4KHJlc3VsdE9wZXJhbmQsIEFyaXRoTWluLCByZWdpc3Rlck9m
ZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGluc2VydENoZWNrcyk7CiAgICAgICAg
IAogICAgIGNhc2UgTWF4SW50cmluc2ljOgotICAgICAgICByZXR1cm4gaGFuZGxlTWluTWF4KHJl
c3VsdE9wZXJhbmQsIEFyaXRoTWF4LCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpOworICAgICAgICByZXR1cm4gaGFuZGxlTWluTWF4KHJlc3VsdE9wZXJhbmQsIEFy
aXRoTWF4LCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGluc2Vy
dENoZWNrcyk7CiAgICAgICAgIAogICAgIGNhc2UgU3FydEludHJpbnNpYzoKICAgICBjYXNlIENv
c0ludHJpbnNpYzoKICAgICBjYXNlIFNpbkludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeworICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7
CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAoaW50cmluc2lj
KSB7CiAgICAgICAgIGNhc2UgU3FydEludHJpbnNpYzoKKyAgICAgICAgICAgIGluc2VydENoZWNr
cygpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRk
VG9HcmFwaChBcml0aFNxcnQsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdp
c3Rlck9mZnNldCkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIENvc0ludHJpbnNpYzoKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwog
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFw
aChBcml0aENvcywgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zm
c2V0KSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgU2luSW50cmluc2ljOgorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRo
U2luLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKQEAgLTE2ODgsOSArMTg2
MSwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgY2Fz
ZSBQb3dJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IDwgMykgewogICAgICAgICAgICAgLy8gTWF0aC5wb3coKSBhbmQgTWF0aC5wb3coeCkgcmV0dXJu
IE5hTi4KKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8o
bV9jb25zdGFudE5hTikpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Cisg
ICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgeE9wZXJhbmQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB5T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIs
IHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgYWRkVG9HcmFwaChBcml0aFBvdywgZ2V0KHhPcGVyYW5kKSwgZ2V0KHlPcGVyYW5kKSkp
OwpAQCAtMTcxMCw2ICsxODg1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKGludAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBOb2RlKiBhcnJheVB1c2ggPSBhZGRU
b0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0
KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsK
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFycmF5UHVz
aCk7CiAgICAgICAgICAgICAKQEAgLTE3MzMsNiArMTkwOSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAg
ICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICAgICAgTm9kZSog
YXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgp
KSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwg
cmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dE9wZXJhbmQpLCBhcnJheVBvcCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3NDcs
NiArMTkyNCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzT3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lz
dGVyT2Zmc2V0KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgTm9kZSog
Y2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJDb2RlQXQsIE9wSW5mbyhBcnJheU1vZGUo
QXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBnZXQoaW5kZXhPcGVy
YW5kKSk7CkBAIC0xNzU5LDYgKzE5MzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAy
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIGluc2VydENoZWNrcygpOwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc09wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7
CiAgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQsIE9wSW5m
byhBcnJheU1vZGUoQXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBn
ZXQoaW5kZXhPcGVyYW5kKSk7CkBAIC0xNzcwLDYgKzE5NDksNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIGluc2Vy
dENoZWNrcygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXhPcGVyYW5kID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBOb2RlKiBj
aGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nRnJvbUNoYXJDb2RlLCBnZXQoaW5kZXhPcGVyYW5k
KSk7CiAKQEAgLTE3ODIsNiArMTk2Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
dHJpbnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKICAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwRXhlYywg
T3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
T3BlcmFuZCksIHJlZ0V4cEV4ZWMpOwogICAgICAgICAKQEAgLTE3OTIsNiArMTk3Myw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgTm9kZSogcmVnRXhwRXhl
YyA9IGFkZFRvR3JhcGgoUmVnRXhwVGVzdCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiks
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlZ0V4cEV4ZWMpOwogICAgICAg
ICAKQEAgLTE4MDEsNiArMTk4Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyhpbnQKICAgICBjYXNlIElNdWxJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICE9IDMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbGVmdE9wZXJhbmQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciByaWdodE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgyLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIE5vZGUqIGxlZnQgPSBnZXQobGVmdE9wZXJh
bmQpOwpAQCAtMTgxMiwyOSArMTk5NSwzNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bnRyaW5zaWMoaW50CiAgICAgY2FzZSBGUm91bmRJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChBcml0aEZS
b3VuZCwgZ2V0KG9wZXJhbmQpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBERkdUcnVlSW50cmluc2ljOiB7CisgICAgICAgIGluc2VydENoZWNrcygp
OwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBqc0NvbnN0YW50
KGpzQm9vbGVhbih0cnVlKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgT1NSRXhpdEludHJpbnNpYzogeworICAgICAgICBpbnNlcnRDaGVja3MoKTsK
ICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwogICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2Nv
bnN0YW50VW5kZWZpbmVkKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgSXNGaW5hbFRpZXJJbnRyaW5zaWM6IHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksCiAgICAgICAg
ICAgICBqc0NvbnN0YW50KGpzQm9vbGVhbihPcHRpb25zOjp1c2VGVExKSVQoKSA/IGlzRlRMKG1f
Z3JhcGgubV9wbGFuLm1vZGUpIDogdHJ1ZSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIFNldEludDMySGVhcFByZWRpY3Rpb25JbnRyaW5zaWM6IHsK
KyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpOwogICAg
ICAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCkBAIC0xODQ3LDYgKzIwMzUs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgY2FzZSBG
aWF0SW50NTJJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGluc2VydENoZWNr
cygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgaWYgKGVuYWJsZUludDUyKCkp
CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dy
YXBoKEZpYXRJbnQ1MiwgZ2V0KG9wZXJhbmQpKSk7CkBAIC0xODYwLDkgKzIwNDksMTAgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIH0KIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVR5
cGVkQXJyYXlDb25zdHJ1Y3RvcigKICAgICBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5j
dGlvbiogZnVuY3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKLSAgICBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCisgICAgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBDaGVja3NGdW5jdG9y
JiBpbnNlcnRDaGVja3MpCiB7CiAgICAgaWYgKCFpc1R5cGVkVmlldyh0eXBlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTkwNiwxNiArMjA5NiwyMSBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVUeXBlZEFycmF5Q29uCiAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICE9IDIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIGluc2VydENo
ZWNrcygpOwogICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksCiAgICAgICAg
IGFkZFRvR3JhcGgoTmV3VHlwZWRBcnJheSwgT3BJbmZvKHR5cGUpLCBnZXQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKAogICAgIGludCByZXN1bHRPcGVyYW5k
LCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgaW50IHJlZ2lzdGVyT2Zmc2V0LAotICAgIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQorICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpCiB7CisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICBIYW5kbGluZyBjb25zdGFudCBpbnRlcm5h
bCBmdW5jdGlvbiAiLCBKU1ZhbHVlKGZ1bmN0aW9uKSwgIlxuIik7CisgICAgCiAgICAgLy8gSWYg
d2UgZXZlciBmaW5kIHRoYXQgd2UgaGF2ZSBhIGxvdCBvZiBpbnRlcm5hbCBmdW5jdGlvbnMgdGhh
dCB3ZSBzcGVjaWFsaXplIGZvciwKICAgICAvLyB0aGVuIHdlIHNob3VsZCBwcm9iYWJseSBoYXZl
IHNvbWUgc29ydCBvZiBoYXNodGFibGUgZGlzcGF0Y2gsIG9yIG1heWJlIGV2ZW4KICAgICAvLyBk
aXNwYXRjaCBzdHJhaWdodCB0aHJvdWdoIHRoZSBNZXRob2RUYWJsZSBvZiB0aGUgSW50ZXJuYWxG
dW5jdGlvbi4gQnV0IGZvciBub3csCkBAIC0xOTI3LDYgKzIxMjIsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2xvYmFs
T2JqZWN0KCkgIT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAgICAgaW5zZXJ0Q2hl
Y2tzKCk7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7CiAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAogICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVj
aWRlZCksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkp
KSk7CkBAIC0xOTQxLDYgKzIxMzcsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25z
dGFudEludGVyCiAgICAgfQogICAgIAogICAgIGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZvKCkgPT0g
U3RyaW5nQ29uc3RydWN0b3I6OmluZm8oKSkgeworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAg
ICAgICAgCiAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSAxKQpAQCAtMTk1OCw3ICsyMTU2LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgIGZvciAodW5zaWduZWQgdHlw
ZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTOyArK3R5
cGVJbmRleCkgewogICAgICAgICBib29sIHJlc3VsdCA9IGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1
Y3RvcigKICAgICAgICAgICAgIHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNl
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCi0gICAgICAgICAgICBpbmRleFRvVHlwZWRB
cnJheVR5cGUodHlwZUluZGV4KSk7CisgICAgICAgICAgICBpbmRleFRvVHlwZWRBcnJheVR5cGUo
dHlwZUluZGV4KSwgaW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTMxMjIsNDMgKzMzMjAsNzAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaW50IHRoaXNSZWcg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQg
Zmlyc3RGcmVlUmVnID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUoKSk7
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFyZ3VtZW50cywgYXJndW1lbnRzID09IG1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpLm9mZnNldCgpKTsK
LSAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPnNsb3dBcmd1bWVudHMoKSk7Ci0KLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQg
PSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LiBXZSBzdGFydCB3
aXRoIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIsIGFuZAotICAgICAgICAgICAgLy8gdGhlbiBhZGp1
c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0aGUgY2FsbCBmcmFtZS4KLSAgICAgICAgICAg
IGludCByZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7Ci0gICAgICAgICAgICByZWdp
c3Rlck9mZnNldCAtPSBhcmdDb3VudDsgLy8gV2Ugd2lsbCBiZSBwYXNzaW5nIHNvbWUgYXJndW1l
bnRzLgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhlYWRlci4K
KyAgICAgICAgICAgIGlmIChhcmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKKyAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dB
cmd1bWVudHMoKSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKQorICAg
ICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lKCktPmlzVmFyYXJncygpCisgICAg
ICAgICAgICAgICAgICAgICYmICFmaXJzdFZhckFyZ09mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBpbmxpbmVDYWxsRnJhbWUoKS0+YXJndW1lbnRz
LnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21w
dXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNlZCByZWdp
c3RlciwgYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gYWRqdXN0IGZvciB0aGUgdGhp
bmdzIHdlIHdhbnQgaW4gdGhlIGNhbGwgZnJhbWUuCisgICAgICAgICAgICAgICAgICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IGZpcnN0RnJlZVJlZyArIDE7CisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0IC09IGFyZ0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1
bWVudHMuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemU7IC8vIFdlIHdpbGwgcHJldGVuZCB0byBoYXZlIGEgY2FsbCBmcmFt
ZSBoZWFkZXIuCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBh
bGlnbm1lbnQgcmlnaHQuCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0ID0gLVdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZz
ZXQpOworCisgICAgICAgICAgICAgICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS50b0xvY2FsKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBieXRlY29kZSB3b3Vs
ZG4ndCBoYXZlIHNldCB1cCB0aGUgYXJndW1lbnRzLiBCdXQgd2UnbGwgZG8gaXQgYW5kIG1ha2Ug
aXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbG9vayBsaWtlIHRoZSBieXRlY29kZSBoYWQgZG9u
ZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldChWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1JlZykpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQor
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVO
YWtlZFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09E
RV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxl
ZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gRW1pdCBDYWxsRm9yd2FyZFZhcmFyZ3MKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB3ZSBjYW5ub3QgaW5saW5lIGZvcndhcmRlZCB2
YXJhcmdzIGNhbGxzIGluc2lkZSBhIHZhcmFyZ3MKKyAgICAgICAgICAgICAgICAvLyBjYWxsIGZy
YW1lLiBXZSB3aWxsIHByb2JhYmx5IGZpeCB0aGF0IG9uY2Ugd2UgZmluYWxseSBnZXQgcmlkIG9m
IHRoZQorICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBvYmplY3Qgc3BlY2lhbC1jYXNpbmcu
CisgICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2NhbGxW
YXJhcmdzRGF0YS5hZGQoKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNl
dCA9IGZpcnN0VmFyQXJnT2Zmc2V0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgICAgICBDYWxsRm9yd2Fy
ZFZhcmFyZ3MsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAg
ICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSksIGdldChWaXJ0dWFsUmVn
aXN0ZXIodGhpc1JlZykpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
UmVnKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgIHNldChyZXN1bHRSZWcsIGNhbGwpOworICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgotICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAotICAgICAgICAgICAg
ICAgIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksCi0gICAgICAgICAgICAgICAgLXJlZ2lzdGVy
T2Zmc2V0KTsKLQotICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0KSkudG9Mb2NhbCgpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0IGhhdmUgc2V0IHVwIHRoZSBhcmd1bWVu
dHMuIEJ1dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAotICAgICAgICAgICAgLy8gbG9vayBsaWtl
IHRoZSBieXRlY29kZSBoYWQgZG9uZSBpdC4KLSAgICAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIg
PSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KFZpcnR1YWxSZWdp
c3Rlcih0aGlzUmVnKSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQotICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKSwgSW1tZWRpYXRlTmFrZWRTZXQpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVDYWxsKAotICAgICAgICAgICAgICAgIHJl
c3VsdCwgQ2FsbCwgQ29kZUZvckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwK
LSAgICAgICAgICAgICAgICBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCk7CisgICAg
ICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGxWYXJhcmdz
LCBDb2RlRm9yQ2FsbCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3Mp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnczogeworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9u
LCBDb25zdHJ1Y3RWYXJhcmdzLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6CiAgICAgICAgICAgICAvLyBTdGF0aWNhbGx5IHNwZWN1
bGF0ZSBmb3Igbm93LiBJdCBtYWtlcyBzZW5zZSB0byBsZXQgc3BlY3VsYXRlLW9ubHkgam5lcV9w
dHIKICAgICAgICAgICAgIC8vIHN1cHBvcnQgc2ltbWVyIGZvciBhIHdoaWxlIGJlZm9yZSBtYWtp
bmcgaXQgbW9yZSBnZW5lcmFsLCBzaW5jZSBpdCdzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtOTYsNiArOTYsOCBAQCBpbmxpbmUgdm9pZCBkZWJ1Z0ZhaWwoQ29k
ZUJsb2NrKiBjb2RlQmxvCiAKIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2Rl
SUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogcGMpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7IC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBzb21lIGJ5
dGVjb2RlIHBhcnNpbmcuIE9yZGluYXJpbHkgYnl0ZWNvZGUgcGFyc2luZyByZXF1aXJlcyB0aGUg
b3duaW5nIENvZGVCbG9jay4gSXQncyBzb3J0IG9mIHN0cmFuZ2UgdGhhdCB3ZSBkb24ndCB1c2Ug
aXQgaGVyZSByaWdodCBub3cuCisgICAgCiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIGNh
c2Ugb3BfZW50ZXI6CiAgICAgY2FzZSBvcF90b3VjaF9lbnRyeToKQEAgLTE4Miw2ICsxODQsOCBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF90
aHJvd19zdGF0aWNfZXJyb3I6CiAgICAgY2FzZSBvcF9jYWxsOgogICAgIGNhc2Ugb3BfY29uc3Ry
dWN0OgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3Zh
cmFyZ3M6CiAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOgogICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czoKICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czoKQEAgLTIyMywxNCArMjI3
LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgICAgICBy
ZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKICAgICB9CiAKLSAgICBjYXNlIG9wX2NhbGxfdmFy
YXJnczoKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYmIHBjWzRdLnUu
b3BlcmFuZCA9PSBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkKLSAgICAg
ICAgICAgICYmICFwY1s2XS51Lm9wZXJhbmQpCi0gICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5l
OwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSB0aGlzLgotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI2Ci0gICAgICAgIHJl
dHVybiBDYW5ub3RDb21waWxlOwotCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiAKICAgICBjYXNl
IG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgogICAgIGNhc2Ugb3BfbmV3X2Z1bmM6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlz
aW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsOSArODYsNyBAQCBpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGZ1bmN0aW9uQ2FwYWJpbGl0CiAgICAgICAgIHJldHVybiBsZWFzdFVw
cGVyQm91bmQoQ2FuQ29tcGlsZUFuZElubGluZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwog
ICAgIGlmIChtaWdodENvbXBpbGUgJiYgIW1pZ2h0SW5saW5lKQogICAgICAgICByZXR1cm4gbGVh
c3RVcHBlckJvdW5kKENhbkNvbXBpbGUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKLSAgICBp
ZiAoIW1pZ2h0Q29tcGlsZSAmJiBtaWdodElubGluZSkKLSAgICAgICAgcmV0dXJuIGxlYXN0VXBw
ZXJCb3VuZChDYW5JbmxpbmUsIGNvbXB1dGVkQ2FwYWJpbGl0eUxldmVsKTsKLSAgICBpZiAoIW1p
Z2h0Q29tcGlsZSAmJiAhbWlnaHRJbmxpbmUpCisgICAgaWYgKCFtaWdodENvbXBpbGUpCiAgICAg
ICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CkBAIC0xNDIsNiArMTQwLDE0IEBAIGlubGlu
ZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3IoQ29kZUIKICAgICByZXR1cm4gbWlnaHRJbmxp
bmVGdW5jdGlvbkZvckNvbnN0cnVjdChjb2RlQmxvY2spOwogfQogCitpbmxpbmUgYm9vbCBtaWdo
dENvbXBpbGVGdW5jdGlvbkZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQoreworICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICBy
ZXR1cm4gbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jayk7CisgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIG1pZ2h0Q29tcGlsZUZ1bmN0
aW9uRm9yQ29uc3RydWN0KGNvZGVCbG9jayk7Cit9CisKIGlubGluZSBib29sIG1pZ2h0SW5saW5l
RnVuY3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIG1pZ2h0SW5saW5l
RnVuY3Rpb25Gb3IoY29kZUJsb2NrLCBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lv
biAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzY2LDYgKzM2Niw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIE5hdGl2ZUNh
bGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAg
ICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAg
ICAgY2FzZSBUb1ByaW1pdGl2ZToKICAgICBjYXNlIEluOgogICAgIGNhc2UgR2V0TXlBcmd1bWVu
dHNMZW5ndGhTYWZlOgpAQCAtNDAxLDYgKzQwNCwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2Ms
IEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKSwgbm9kZS0+Y2hpbGQxKCku
bm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdz
OgorICAgICAgICAvLyBUaGlzIGFjdHVhbGx5IHdyaXRlcyB0byBsb2NhbCB2YXJpYWJsZXMgYXMg
d2VsbC4gQnV0IHdoZW4gaXQgcmVhZHMgdGhlIGFycmF5LCBpdCBkb2VzCisgICAgICAgIC8vIHNv
IGluIGEgd2F5IHRoYXQgbWF5IHRyaWdnZXIgZ2V0dGVycyBvciB2YXJpb3VzIHRyYXBzLgorICAg
ICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKICAgICAgICAgcmVhZChBYnN0
cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
dW5saW5rZWRMb2NhbCgpKSksIG5vZGUpOwpAQCAtODgxLDcgKzg5MSw3IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIERGR19DUkFTSChncmFw
aCwgbm9kZSwgdG9DU3RyaW5nKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiLCBHcmFwaDo6b3BO
YW1lKG5vZGUtPm9wKCkpKS5kYXRhKCkpOwogfQogCiBjbGFzcyBOb09wQ2xvYmJlcml6ZSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAxODAx
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjYsMTAgKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiREZHQ29tbW9uLmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLQogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCkBAIC0xMzEsMyArMTMyLDI4IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBQcm8KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCituYW1lc3BhY2UgV1RG
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCkKK3sKKyAgICBz
d2l0Y2ggKGNhcGFiaWxpdHlMZXZlbCkgeworICAgIGNhc2UgQ2Fubm90Q29tcGlsZToKKyAgICAg
ICAgb3V0LnByaW50KCJDYW5ub3RDb21waWxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENhbkNvbXBpbGU6CisgICAgICAgIG91dC5wcmludCgiQ2FuQ29tcGlsZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBDYW5Db21waWxlQW5kSW5saW5lOgorICAgICAgICBvdXQucHJpbnQo
IkNhbkNvbXBpbGVBbmRJbmxpbmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FwYWJp
bGl0eUxldmVsTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoIkNhcGFiaWxpdHlMZXZlbE5vdFNl
dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTIsNyArMjkyLDYgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBlbnVtIENhcGFiaWxpdHlMZXZlbCB7
CiAgICAgQ2Fubm90Q29tcGlsZSwKLSAgICBDYW5JbmxpbmUsCiAgICAgQ2FuQ29tcGlsZSwKICAg
ICBDYW5Db21waWxlQW5kSW5saW5lLAogICAgIENhcGFiaWxpdHlMZXZlbE5vdFNldApAQCAtMzEy
LDcgKzMxMSw2IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoQ2FwYWJpbGl0eUxldmVsIGwKIGlu
bGluZSBib29sIGNhbklubGluZShDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwpCiB7CiAgICAgc3dpdGNo
IChsZXZlbCkgewotICAgIGNhc2UgQ2FuSW5saW5lOgogICAgIGNhc2UgQ2FuQ29tcGlsZUFuZElu
bGluZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTMyNSwxNCArMzIz
LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBsZWFzdFVwcGVyQm91bmQoQwogICAgIHN3aXRj
aCAoYSkgewogICAgIGNhc2UgQ2Fubm90Q29tcGlsZToKICAgICAgICAgcmV0dXJuIENhbm5vdENv
bXBpbGU7Ci0gICAgY2FzZSBDYW5JbmxpbmU6Ci0gICAgICAgIHN3aXRjaCAoYikgewotICAgICAg
ICBjYXNlIENhbklubGluZToKLSAgICAgICAgY2FzZSBDYW5Db21waWxlQW5kSW5saW5lOgotICAg
ICAgICAgICAgcmV0dXJuIENhbklubGluZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBDYW5ub3RDb21waWxlOwotICAgICAgICB9CiAgICAgY2FzZSBDYW5Db21waWxlOgog
ICAgICAgICBzd2l0Y2ggKGIpIHsKICAgICAgICAgY2FzZSBDYW5Db21waWxlOgpAQCAtMzY0LDUg
KzM1NCwxMSBAQCBpbmxpbmUgYm9vbCBzaG91bGRTaG93RGlzYXNzZW1ibHkoQ29tcGlsCiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpDYXBhYmlsaXR5TGV2ZWwpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIERGR0NvbW1vbl9oCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDYgKzExNywxMCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0
OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2Fz
ZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgQnJlYWtw
b2ludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEzLDYgKzMxMywxOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2Rl
LT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgaWYgKG5vZGUtPmhhc09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT5vYmplY3RNYXRlcmlh
bGl6YXRpb25EYXRhKCkpOworICAgIGlmIChub2RlLT5oYXNDYWxsVmFyYXJnc0RhdGEoKSkKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiZmlyc3RWYXJBcmdPZmZzZXQgPSAiLCBub2RlLT5jYWxs
VmFyYXJnc0RhdGEoKS0+Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGlmIChub2RlLT5oYXNMb2Fk
VmFyYXJnc0RhdGEoKSkgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RhcnQgPSAiLCBk
YXRhLT5zdGFydCwgIiwgY291bnQgPSAiLCBkYXRhLT5jb3VudCk7CisgICAgICAgIGlmIChkYXRh
LT5tYWNoaW5lU3RhcnQuaXNWYWxpZCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIG1hY2hp
bmVTdGFydCA9ICIsIGRhdGEtPm1hY2hpbmVTdGFydCk7CisgICAgICAgIGlmIChkYXRhLT5tYWNo
aW5lQ291bnQuaXNWYWxpZCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIG1hY2hpbmVDb3Vu
dCA9ICIsIGRhdGEtPm1hY2hpbmVDb3VudCk7CisgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQg
PSAiLCBkYXRhLT5vZmZzZXQsICIsIG1hbmRhdG9yeU1pbmltdW0gPSAiLCBkYXRhLT5tYW5kYXRv
cnlNaW5pbXVtKTsKKyAgICAgICAgb3V0LnByaW50KCIsIGxpbWl0ID0gIiwgZGF0YS0+bGltaXQp
OworICAgIH0KICAgICBpZiAobm9kZS0+aXNDb25zdGFudCgpKQogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5vZGUtPmNvbnN0YW50KCksIGNvbnRleHQpKTsK
ICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCkBAIC00MDAsNyArNDEyLDcgQEAgdm9pZCBHcmFwaDo6
ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9
IGJsb2NrLT5waGlzW2ldOwogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0
ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4
KCksICI8IiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAgICAgICAgIG91dC5w
cmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPmxvY2FsKCksICIsIiwg
cGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5j
aGlsZDEoKSkgewogICAgICAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxk
MSgpLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsK
QEAgLTg2OSwxMCArODgxLDEyIEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVh
bFJlZ2kKICAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVnLm9mZnNldCgpIDwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+aXNDbG9zdXJlQ2FsbAorICAgICAgICAgICAgICAgICAgICAmJiByZWcub2Zmc2V0KCkgPT0g
SlNTdGFjazo6Q2FsbGVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocmVnLm9mZnNldCgpID09IEpTU3RhY2s6
OkNhbGxlZSkKKyAgICAgICAgICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpCisgICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBKU1N0
YWNrOjpBcmd1bWVudENvdW50KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjM1LDYg
KzEyNDksNTEgQEAgdm9pZCBHcmFwaDo6aGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSgKICAgICBjcmFz
aCgqdGhpcywgdG9DU3RyaW5nKCJXaGlsZSBoYW5kbGluZyBibG9jayAiLCBwb2ludGVyRHVtcChi
bG9jayksICJcblxuIiksIGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBhc3NlcnRpb24pOwogfQogCitW
YWx1ZVByb2ZpbGUqIEdyYXBoOjp2YWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSkKK3sKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworICAgICAgICAKKyAgICBpZiAobm9kZS0+aGFzTG9jYWwoKnRoaXMpKSB7CisgICAg
ICAgIGlmICghbm9kZS0+bG9jYWwoKS5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50
KCk7CisgICAgICAgIE5vZGUqIGFyZ3VtZW50Tm9kZSA9IG1fYXJndW1lbnRzW2FyZ3VtZW50XTsK
KyAgICAgICAgaWYgKCFhcmd1bWVudE5vZGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IGFyZ3VtZW50Tm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50
KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQor
ICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBHcmFwaDo6
bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQoreworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKTsKKyAg
ICAKKyAgICBpZiAoVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUgPSB2YWx1ZVByb2ZpbGVGb3Io
bm9kZSkpCisgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVl
UHJvZmlsZSk7CisgICAgCisgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCisgICAgICAgICAgICBwcm9maWxlZEJs
b2NrLAorICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCisgICAgICAgICAg
ICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgsIG5vZGUtPmxvY2FsKCkp
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUo
KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
ODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcyLDUwICs0NzIsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX3Byb2ZpbGVkQmxvY2stPnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlcigpOwog
ICAgIH0KICAgICAKLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2Rl
KQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIAotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAKLSAgICAgICAgaWYg
KG5vZGUtPmhhc0xvY2FsKCp0aGlzKSkgewotICAgICAgICAgICAgaWYgKCFub2RlLT5sb2NhbCgp
LmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGlu
dCBhcmd1bWVudCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOwotICAgICAgICAgICAgTm9k
ZSogYXJndW1lbnROb2RlID0gbV9hcmd1bWVudHNbYXJndW1lbnRdOwotICAgICAgICAgICAgaWYg
KCFhcmd1bWVudE5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
ICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gYXJndW1lbnROb2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1
bWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5oYXNIZWFwUHJl
ZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsK
LSAgICAgICAgCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlIG1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSog
bm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgIHJldHVybiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoVmFsdWVQ
cm9maWxlKiB2YWx1ZVByb2ZpbGUgPSB2YWx1ZVByb2ZpbGVGb3Iobm9kZSkpCi0gICAgICAgICAg
ICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAg
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKLSAgICAgICAgICAgICAgICBwcm9m
aWxlZEJsb2NrLAotICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAot
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCwg
bm9kZS0+bG9jYWwoKSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOwotICAgIH0KKyAgICBWYWx1ZVByb2ZpbGUqIHZh
bHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKTsKKyAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlIG1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogbm9kZSk7CiAgICAgCiAg
ICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QKICAgICB7CkBAIC04NTMsNiArODExLDggQEAg
cHVibGljOgogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aUdldEJ5T2Zmc2V0
RGF0YTsKICAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQdXRCeU9mZnNldERh
dGE7CiAgICAgQmFnPE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE+IG1fb2JqZWN0TWF0ZXJpYWxp
emF0aW9uRGF0YTsKKyAgICBCYWc8Q2FsbFZhcmFyZ3NEYXRhPiBtX2NhbGxWYXJhcmdzRGF0YTsK
KyAgICBCYWc8TG9hZFZhcmFyZ3NEYXRhPiBtX2xvYWRWYXJhcmdzRGF0YTsKICAgICBWZWN0b3I8
SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBIYXNoTWFw
PENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0
ZWNvZGVMaXZlbmVzczsKICAgICBib29sIG1faGFzQXJndW1lbnRzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE4MDE4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMiw2ICsxMjIsNyBAQCB2b2lkIEpJVENvbXBpbGVy
Ojpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhl
IGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKG1fZ3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogI2lm
IENQVShYODYpCiAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZSBjYWxsIGFic3RyYWN0
aW9uLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgaW4gdGhlIFNwZWN1bGF0aXZlSklUIGxheWVyIQpA
QCAtMjQ3LDcgKzI0OCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlu
a0IKICAgICAgICAgSlNDYWxsUmVjb3JkJiByZWNvcmQgPSBtX2pzQ2FsbHNbaV07CiAgICAgICAg
IENhbGxMaW5rSW5mbyYgaW5mbyA9ICpyZWNvcmQubV9pbmZvOwogICAgICAgICBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCi0gICAgICAgICAgICBpbmZv
LmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6
IENvZGVGb3JDYWxsLAorICAgICAgICAgICAgaW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSwKICAg
ICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogICAgICAgICBsaW5r
QnVmZmVyLmxpbmsocmVjb3JkLm1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKG1fdm0tPmdldENUSVN0
dWIoZ2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBpbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHJlY29y
ZC5tX3Nsb3dDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0
LmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
YXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQsNiArODQsNyBAQCBib29sIG1heUV4aXQoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgIGNhc2UgR2V0
U2NvcGU6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMjAgQEAg
c3RydWN0IFN3aXRjaERhdGEgewogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwogfTsKIAorc3Ry
dWN0IENhbGxWYXJhcmdzRGF0YSB7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0OworfTsKKwor
c3RydWN0IExvYWRWYXJhcmdzRGF0YSB7CisgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0OyAvLyBM
b2NhbCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQuCisgICAgVmlydHVhbFJlZ2lzdGVyIGNvdW50OyAv
LyBMb2NhbCBmb3IgdGhlIGNvdW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lU3RhcnQ7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVDb3VudDsKKyAgICB1bnNpZ25lZCBvZmZzZXQ7
IC8vIFdoaWNoIGFycmF5IGVsZW1lbnQgdG8gc3RhcnQgd2l0aC4gVXN1YWxseSB0aGlzIGlzIDAu
CisgICAgdW5zaWduZWQgbWFuZGF0b3J5TWluaW11bTsgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50
cyBvbiB0aGUgc3RhY2sgdGhhdCBtdXN0IGJlIGluaXRpYWxpemVkOyBpZiB0aGUgYXJyYXkgaXMg
dG9vIHNob3J0IHRoZW4gdGhlIG1pc3NpbmcgZWxlbWVudHMgbXVzdCBnZXQgdW5kZWZpbmVkLiBE
b2VzIG5vdCBpbmNsdWRlICJ0aGlzIi4KKyAgICB1bnNpZ25lZCBsaW1pdDsgLy8gTWF4aW11bSBu
dW1iZXIgb2YgZWxlbWVudHMgdG8gbG9hZC4gSW5jbHVkZXMgInRoaXMiLgorfTsKKwogLy8gVGhp
cyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1lZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25z
dHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkg
YW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0cnVjdHVyZSAtIAogLy8gYSBjb25zdGFu
dCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIpIGZyb20gYSBOb2RlKi4KQEAgLTg5NSw2
ICs5MDksMzUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdy
aXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBo
YXNDYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAg
ICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBDYWxsVmFyYXJnc0RhdGEqIGNhbGxWYXJhcmdzRGF0YSgpCisgICAg
eworICAgICAgICBBU1NFUlQoaGFzQ2FsbFZhcmFyZ3NEYXRhKCkpOworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PENhbGxWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBoYXNMb2FkVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkg
PT0gTG9hZFZhcmFyZ3M7CisgICAgfQorICAgIAorICAgIExvYWRWYXJhcmdzRGF0YSogbG9hZFZh
cmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNMb2FkVmFyYXJnc0RhdGEoKSk7
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8TG9hZFZhcmFyZ3NEYXRhKj4obV9vcEluZm8p
OworICAgIH0KKyAgICAKICAgICBib29sIGhhc1Jlc3VsdCgpCiAgICAgewogICAgICAgICByZXR1
cm4gISFyZXN1bHQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiB0aGlzIG11c3QgYmUgdGhlIGRpcmVjdGx5IHN1YnNl
cXVlbnQgcHJvcGVydHkgcHV0LiBOb3RlIHRoYXQgUHV0QnlWYWwgKi9cCiAgICAgLyogb3Bjb2Rl
cyB1c2UgVmFyQXJncyBiZWF1c2UgdGhleSBtYXkgaGF2ZSB1cCB0byA0IGNoaWxkcmVuLiAqL1wK
ICAgICBtYWNybyhHZXRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgIG1hY3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0
QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1h
Y3JvKFB1dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBt
YWNybyhQdXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwK
QEAgLTIxNyw2ICsyMTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
LyogQ2FsbHMuICovXAogICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKENvbnN0cnVjdCwgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oQ2Fs
bFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhD
YWxsRm9yd2FyZFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhDb25zdHJ1Y3RWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oTmF0aXZlQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oTmF0aXZlQ29uc3RydWN0LCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTU2LDYgKzE1NiwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmls
aXR5Q2FsY3VsYXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAg
Y2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3Bl
cmFuZChkYXRhLT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChG
bHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBkYXRhLT5saW1pdDsgaS0tOykgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkg
PQorICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUs
IFZpcnR1YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTgwMTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1Miw3ICsxNTIsOSBAQCB2b2lkIHJlaWZ5SW5saW5lZENh
bGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKGlubGluZUNh
bGxGcmFtZS0+a2luZCkgewogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKLSAg
ICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDogeworICAgICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6
Q2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJh
cmdzOiB7CiAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9CiAgICAgICAg
ICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5
dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvKTsKQEAgLTE5NSwxMiArMTk3LDEzIEBAIHZvaWQgcmVpZnlJbmxpbmVk
Q2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgaWYgKHRydWVSZXR1cm5QQykKICAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodHJ1ZVJl
dHVyblBDKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0j
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNT
dGFjazo6Q29kZUJsb2NrKSkpOworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkpCisgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAg
ICAgaml0LnN0b3JlNjQoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
ckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAg
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFz
Qnl0ZWNvZGVPZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAgICAgaml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsK
ICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAg
ICBqaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICAKQEAgLTIwOCwxMiArMjEx
LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAg
aWYgKGJhc2VsaW5lQ29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpCiAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYmFz
ZWxpbmVDb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgpKSksIEdQUkluZm86
OnJlZ1QzKTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJp
dCBwYXJ0Ci0gICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYmFzZWxpbmVDb2RlQmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNvZGVC
bG9jaykpKTsKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVP
ZmZzZXQoKSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eDsKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6
ZW5jb2RlQXNCeXRlY29kZUluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKICAgICAgICAgaml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsK
ICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgaml0LnN0
b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDE4LDYgKzEwMTgsMjcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKAogICAgIHNldC0+bm90aWZ5
V3JpdGUodm0sIHZhbHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3JpdGUiKTsKIH0KIAoraW50MzJfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRBcmd1bWVudHMpOworICAgIAorICAgIHJldHVybiBzaXplT2ZWYXJhcmdzKGV4ZWMs
IGFyZ3VtZW50cywgZmlyc3RWYXJBcmdPZmZzZXQpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGZpcnN0RWxlbWVu
dERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3Qgb2Zmc2V0LCBp
bnQzMl90IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQoreworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVu
dHMpOworICAgIAorICAgIGxvYWRWYXJhcmdzKGV4ZWMsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVs
ZW1lbnREZXN0KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgCisgICAgZm9yIChp
bnQzMl90IGkgPSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisgICAgICAgIGV4
ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKK30KKwogZG91Ymxl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikK
IHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMjUsNiArMTI1LDggQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3Bl
MwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91
YmxlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3Qg
dGFibGVJbmRleCwgSlNTdHJpbmcqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1
ZSk7CitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQp
Owordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSosIGlu
dDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90
IG9mZnNldCwgaW50MzJfdCBsZW5ndGgsIGludDMyX3QgbWFuZGF0b3J5TWluaW11bSk7CiAKIGlu
dDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0ludDUyKEVu
Y29kZWRKU1ZhbHVlKTsKIGludDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG91
YmxlVG9JbnQ1Mihkb3VibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywxMCArODcsMTAgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCi1zdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3Jh
cGgmIGdyYXBoLCBjb25zdCBjaGFyKiB0ZXh0KQorc3RhdGljIHZvaWQgZHVtcEFuZFZlcmlmeUdy
YXBoKEdyYXBoJiBncmFwaCwgY29uc3QgY2hhciogdGV4dCwgYm9vbCBmb3JjZUR1bXAgPSBmYWxz
ZSkKIHsKICAgICBHcmFwaER1bXBNb2RlIG1vZGVGb3JGaW5hbFZhbGlkYXRlID0gRHVtcEdyYXBo
OwotICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKGdyYXBoLm1fcGxhbi5tb2RlKSkg
eworICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKGdyYXBoLm1fcGxhbi5tb2RlKSB8
fCBmb3JjZUR1bXApIHsKICAgICAgICAgZGF0YUxvZyh0ZXh0LCAiXG4iKTsKICAgICAgICAgZ3Jh
cGguZHVtcCgpOwogICAgICAgICBtb2RlRm9yRmluYWxWYWxpZGF0ZSA9IERvbnREdW1wR3JhcGg7
CkBAIC0zNjksNyArMzY5LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJ
blRocgogICAgICAgICAgICAgcmV0dXJuIEZhaWxQYXRoOwogICAgICAgICB9CiAKLSAgICAgICAg
ZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoi
KTsKKyAgICAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZU
TCBsb3dlcmluZzoiLCBzaG91bGRTaG93RGlzYXNzZW1ibHkobW9kZSkpOwogICAgICAgICAKICAg
ICAgICAgYm9vbCBoYXZlTExWTTsKICAgICAgICAgU2FmZXBvaW50OjpSZXN1bHQgc2FmZXBvaW50
UmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxD
bG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMzMsMTEgKzEzMywyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpOworICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAg
ICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZv
aWQgd3JpdGVUb3AoKQogICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBMb2FkVmFy
YXJncykgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIG5vdGUgdGhlIHdyaXRlcyB0byB0
aGUgbG9jYWxzIHRoYXQgd2lsbCBzdG9yZSB0aGUgYXJyYXkgZWxlbWVudHMgYW5kCisgICAgICAg
ICAgICAvLyBjb3VudC4KKyAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICBtX3dyaXRlKGRhdGEtPmNvdW50KTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAg
ICAgICAgICAgIG1fd3JpdGUoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsg
aSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3Qg
bmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBDYWxsRm9yd2FyZFZhcmFyZ3MsIHNpbmNl
IGl0IHJlYWRzCisgICAgICAgIC8vIG91ciBhcmd1bWVudHMgdGhlIHNhbWUgd2F5IHRoYXQgYW55
IGVmZmVjdGZ1bCB0aGluZyBtaWdodC4KKyAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLm1f
Y29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCiAgICAg
ICAgICAgICAgICAgbV93cml0ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4MDE4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE4OSw2ICsxODksMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0
U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ2FsbDoK
ICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29u
c3RydWN0VmFyYXJnczoKKyAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndh
cmRWYXJhcmdzOgogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAg
Y2FzZSBOZXdBcnJheVdpdGhTaXplOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxODAxODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVk
ZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
QEAgLTYzOCwzNSArNjM5LDE3MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0
cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGw7Ci0gICAgaWYgKCFpc0NhbGwpCi0g
ICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IENvbnN0cnVjdCk7Ci0KLSAgICAvLyBGb3IgY29u
c3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRv
IG1ha2Ugc3BhY2UKLSAgICAvLyBmb3IgaXQuCi0gICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0g
aXNDYWxsID8gMCA6IDE7Ci0KLSAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlID0g
aXNDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7Ci0K
LSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9k
ZS0+Zmlyc3RDaGlsZCgpXTsKKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOwor
ICAgIGJvb2wgaXNDYWxsOworICAgIGJvb2wgaXNWYXJhcmdzOworICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgeworICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86
OkNhbGw7CisgICAgICAgIGlzQ2FsbCA9IHRydWU7CisgICAgICAgIGlzVmFyYXJncyA9IGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FsbFR5cGUg
PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAg
ICAgIGlzVmFyYXJncyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhbGxWYXJh
cmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENh
bGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CisgICAgICAgIGlzQ2FsbCA9IHRydWU7CisgICAgICAg
IGlzVmFyYXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3M7
CisgICAgICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgImJhZCBub2RlIHR5cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAg
Ly8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyBlaXRoZXIgdGhlIGZ1bmN0
aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCi0gICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxsKS4g
c3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KLSAgICBpbnQgbnVtUGFzc2Vk
QXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1f
aml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7CiAgICAgCi0gICAgaW50IG51bUFyZ3MgPSBudW1Q
YXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7Ci0KLSAgICBtX2ppdC5zdG9yZTMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9h
ZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFy
Z3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlzIHRyaWNraWVyLgorICAgIGlmIChpc1ZhcmFyZ3Mp
IHsKKyAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRh
KCk7CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAg
ICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+
Zmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywg
YXJnRWRnZSk7Ci0gICAgICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7Ci0gICAg
ICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRHUFIoKTsKLSAgICAgICAgdXNl
KGFyZ0VkZ2UpOworICAgICAgICBHUFJSZWcgYXJndW1lbnRzUGF5bG9hZEdQUjsKKyAgICAgICAg
R1BSUmVnIGFyZ3VtZW50c1RhZ0dQUjsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjI7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAg
ICAgICAgCisgICAgICAgIGlmIChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgewor
ICAgICAgICAgICAgLy8gV2UgYXZvaWQgY2FsbGluZyBmbHVzaFJlZ2lzdGVycygpIGluc2lkZSB0
aGUgY29udHJvbCBmbG93IG9mIENhbGxGb3J3YXJkVmFyYXJncy4KKyAgICAgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGF1dG8gbG9hZEFyZ3Vt
ZW50c0dQUiA9IFsmXSAoR1BSUmVnIHJlc2VydmVkR1BSKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dHNUYWdHUFIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihyZXNlcnZlZEdQUik7Cisg
ICAgICAgICAgICAgICAgYXJndW1lbnRzUGF5bG9hZEdQUiA9IEpJVENvbXBpbGVyOjpzZWxlY3RT
Y3JhdGNoR1BSKHJlc2VydmVkR1BSLCBhcmd1bWVudHNUYWdHUFIpOworICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OnRhZ0ZvcigK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBh
cmd1bWVudHNUYWdHUFIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzUGF5bG9hZEdQUik7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgICAgICAgICBsb2NrKHJlc2VydmVkR1BSKTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgICAgIGFyZ3VtZW50c1RhZ0dQUiA9IGFyZ3VtZW50cy50YWdH
UFIoKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNQYXlsb2FkR1BSID0gYXJndW1lbnRzLnBh
eWxvYWRHUFIoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgICAgICAgICAgICAgdW5sb2NrKHJlc2VydmVkR1BSKTsKKyAgICAgICAg
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBzY3JhdGNoR1BSMSA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKGFy
Z3VtZW50c1BheWxvYWRHUFIsIGFyZ3VtZW50c1RhZ0dQUiwgcmVzZXJ2ZWRHUFIpOworICAgICAg
ICAgICAgc2NyYXRjaEdQUjIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVu
dHNQYXlsb2FkR1BSLCBhcmd1bWVudHNUYWdHUFIsIHNjcmF0Y2hHUFIxLCByZXNlcnZlZEdQUik7
CisgICAgICAgICAgICBzY3JhdGNoR1BSMyA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BS
KGFyZ3VtZW50c1BheWxvYWRHUFIsIGFyZ3VtZW50c1RhZ0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyLCByZXNlcnZlZEdQUik7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBsb2Fk
QXJndW1lbnRzR1BSKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhp
cyBwb2ludCB3ZSBoYXZlIHRoZSB3aG9sZSByZWdpc3RlciBmaWxlIHRvIG91cnNlbHZlcywgYW5k
IGFyZ3VtZW50c0dQUiBoYXMgdGhlCisgICAgICAgIC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gU2Vs
ZWN0IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMuCisgICAgICAgIAorICAgICAgICAvLyBXZSB3aWxs
IHVzZSBzY3JhdGNoR1BSMiB0byBwb2ludCB0byBvdXIgc3RhY2sgZnJhbWUuCisgICAgICAgIAor
ICAgICAgICB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyA9IG1faml0LmdyYXBoKCkubV9uZXh0
TWFjaGluZUxvY2FsOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGF2ZUFy
Z3VtZW50czsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEdQUkluZm86OnJlZ1QwOworICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAg
IC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRp
b24uCisgICAgICAgICAgICAvLyBGSVhNRTogZG8gdGhpcyBvcHRpbWl6YXRpb24gYXQgdGhlIElS
IGxldmVsIGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYnkgdGVzdGluZyB0aGUKKyAgICAgICAgICAg
IC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gVGhpcyB3aWxsIGhhcHBlbiBvbmNlIHdlIGdldCByaWQg
b2YgdGhlIGFyZ3VtZW50cyBsYXp5IGNyZWF0aW9uIGFuZAorICAgICAgICAgICAgLy8gbGF6eSB0
ZWFyLW9mZi4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKAorICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1
YWwsCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1RhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKG51bVVzZWRTdGFja1Nsb3RzKSwgc2NyYXRjaEdQUjIpOworICAg
ICAgICAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UobV9qaXQsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2Up
OworICAgICAgICAgICAgcmVzdWx0R1BSID0gc2NyYXRjaEdQUjI7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGhhdmVBcmd1bWVudHMgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICBzbG93
Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0KIAotICAgICAgICBtX2ppdC5zdG9yZTMyKGFy
Z1RhZ0dQUiwgbV9qaXQuY2FsbGVlQXJndW1lbnRUYWdTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVu
dCkpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIG1faml0LmNhbGxlZUFy
Z3VtZW50UGF5bG9hZFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAgIERGR19B
U1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAg
ICAgLy8gUmlnaHQgbm93LCBhcmd1bWVudHMgaXMgaW4gYXJndW1lbnRzVGFnR1BSL2FyZ3VtZW50
c1BheWxvYWRHUFIgYW5kIHRoZSByZWdpc3RlciBmaWxlIGlzCisgICAgICAgIC8vIGZsdXNoZWQu
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncywgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c1RhZ0dQUiwgYXJndW1lbnRzUGF5bG9hZEdQ
UiwgbnVtVXNlZFN0YWNrU2xvdHMsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICAgICAg
CisgICAgICAgIC8vIE5vdyB3ZSBoYXZlIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0aGUgY2FsbGVl
IGZyYW1lLCBidXQgd2UndmUgbG9zdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQuCisgICAgICAgIC8v
IFJlY29uc3RydWN0IHRoZSBhcmd1bWVudHMgb3BlcmFuZCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBj
YWxsZWUgZnJhbWUuCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihudW1Vc2VkU3RhY2tTbG90
cyksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShtX2ppdCwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIGZhbHNlLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjEpOwor
ICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAq
IHNpemVvZih2b2lkKikpKSksIHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXR1
cFZhcmFyZ3NGcmFtZSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIxLCBhcmd1
bWVudHNUYWdHUFIsIGFyZ3VtZW50c1BheWxvYWRHUFIsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIo
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFw
aCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3Ao
KSAhPSBDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICAKKyAgICAgICAgaWYgKGlzQ2FsbCkgeworICAgICAgICAgICAgLy8gTm93IHNl
dCB1cCB0aGUgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhp
c0FyZ3VtZW50KHRoaXMsIG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzID8gbm9kZS0+
Y2hpbGQyKCkgOiBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc0FyZ3Vt
ZW50VGFnR1BSID0gdGhpc0FyZ3VtZW50LnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIHRo
aXNBcmd1bWVudFBheWxvYWRHUFIgPSB0aGlzQXJndW1lbnQucGF5bG9hZEdQUigpOworICAgICAg
ICAgICAgdGhpc0FyZ3VtZW50LnVzZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHRoaXNBcmd1bWVudFRhZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50
VGFnU2xvdCgwKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRoaXNBcmd1bWVudFBheWxv
YWRHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFBheWxvYWRTbG90KDApKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlz
IGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQorICAgICAg
ICAvLyBmb3IgaXQuCisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAg
OiAxOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBj
aGlsZCBpcyBlaXRoZXIgdGhlIGZ1bmN0aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCisgICAgICAg
IC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBh
cmd1bWVudHMuCisgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4o
KSAtIDE7CisgICAgICAgIAorICAgICAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBk
dW1teVRoaXNBcmd1bWVudDsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1BcmdzKSwgbV9qaXQuY2FsbGVlRnJhbWVQYXlsb2Fk
U2xvdChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgIAorICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgeworICAgICAgICAgICAgRWRnZSBhcmdF
ZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSAr
IDEgKyBpXTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsK
KyAgICAgICAgICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7CisgICAgICAgICAg
ICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICB1
c2UoYXJnRWRnZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoYXJn
VGFnR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFRhZ1Nsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50
KSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIG1faml0LmNhbGxl
ZUFyZ3VtZW50UGF5bG9hZFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CkBA
IC03MjQsNiArODYxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKICAgICBpbmZvLT5jb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOwogICAgIGlu
Zm8tPmNhbGxlZUdQUiA9IGNhbGxlZVBheWxvYWRHUFI7CiAgICAgbV9qaXQuYWRkSlNDYWxsKGZh
c3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaW5mbyk7CisgICAgCisgICAgLy8gSWYg
d2Ugd2VyZSB2YXJhcmdzLCB0aGVuIGFmdGVyIHRoZSBjYWxscyBhcmUgZG9uZSwgd2UgbmVlZCB0
byByZWVzdGFibGlzaCBvdXIgc3RhY2sgcG9pbnRlci4KKyAgICBpZiAoaXNWYXJhcmdzKQorICAg
ICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmdyYXBoKCkuc3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKIHRlbXBsYXRlPGJvb2wg
c3RyaWN0PgpAQCAtNDE1Niw5ICs0Mjk3LDU5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKKyAg
ICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNh
c2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogCisgICAgY2FzZSBMb2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJl
ZyBhcmd1bWVudHNUYWdHUFI7CisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNQYXlsb2FkR1BSOwor
ICAgICAgICB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYXJndW1lbnRzVGFnR1BSID0gYXJndW1lbnRzLnRh
Z0dQUigpOworICAgICAgICAgICAgYXJndW1lbnRzUGF5bG9hZEdQUiA9IGFyZ3VtZW50cy5wYXls
b2FkR1BSKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNUYWdHUFIsIGFyZ3VtZW50c1BheWxvYWRHUFIs
IGRhdGEtPm9mZnNldCk7CisgICAgICAgIAorICAgICAgICBsb2NrKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRz
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50c1RhZ0dQUiA9IGFy
Z3VtZW50cy50YWdHUFIoKTsKKyAgICAgICAgICAgIGFyZ3VtZW50c1BheWxvYWRHUFIgPSBhcmd1
bWVudHMucGF5bG9hZEdQUigpOworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAg
ICAgfQorICAgICAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAK
KyAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFu
IGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAv
LyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3Vi
dGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4g
VGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0
aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAor
CisgICAgICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQorICAgICAgICAgICAg
SklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFy
Z3VtZW50c1RhZ0dQUiwgYXJndW1lbnRzUGF5bG9hZEdQUik7CisgICAgICAgIAorICAgICAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmdD
b3VudEluY2x1ZGluZ1RoaXNHUFIpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAg
ICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJh
bmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLAorICAgICAgICAg
ICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwKKyAgICAgICAgICAgICAgICBUcnVzdGVk
SW1tMzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTMyKGFy
Z0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoZGF0YS0+bWFj
aGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxv
YWRWYXJhcmdzLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1RhZ0dQUiwg
YXJndW1lbnRzUGF5bG9hZEdQUiwgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChu
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFj
dGl2YXRpb246IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTQyNzgsOSArNDQ2OSwyMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAg
ICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBBU1NFUlQoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNT
dGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LnN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgbV9qaXQubW92
ZSgKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpLAorICAgICAgICAgICAgICAgIHJl
c3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdp
c3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRD
b3VudFJlZ2lzdGVyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogICAgICAgICBpbnQzMlJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00Mjk2LDE0ICs0NDk4
LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVn
aXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksCiAgICAgICAgICAgICBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAg
bV9qaXQubW92ZSgKLSAgICAgICAgICAgICAgICBJbW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSksCisgICAgICAgICAgICAgICAg
VHJ1c3RlZEltbTMyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkgLSAxKSwKICAgICAgICAgICAgICAgICByZXN1bHRQYXlsb2FkR1BSKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5
bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAg
ICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpB
cmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0UGF5bG9hZEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRH
UFIpOwogICAgICAgICB9CisgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7CiAgICAgICAgIAogICAgICAgICAv
LyBGSVhNRTogdGhlIHNsb3cgcGF0aCBnZW5lcmF0b3Igc2hvdWxkIHBlcmZvcm0gYSBmb3J3YXJk
IHNwZWN1bGF0aW9uIHRoYXQgdGhlCkBAIC00MzM5LDcgKzQ1NDgsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAg
ICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAg
ICAgICYmICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICBVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MigKQEAgLTQzNDcsNyArNDU1NywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGluZGV4R1BSLAogICAgICAgICAgICAgICAg
ICAgICBJbW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHMuc2l6ZSgpIC0gMSkpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVz
dWx0UGF5bG9hZEdQUik7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3Vu
dFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1
YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVy
KSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
ICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKQEAgLTQ0MTYs
MTQgKzQ2MzEsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9qaXQuZ3JhcGgoKS5tYWNoaW5l
QXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksCiAgICAgICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CiAgICAgICAgIAot
ICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgeworICAg
ICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAgICAg
ICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
KSB7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWws
CiAgICAgICAgICAgICAgICAgICAgIGluZGV4R1BSLAogICAgICAgICAgICAgICAgICAgICBJbW0z
Mihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMSkpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0UGF5bG9h
ZEdQUik7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVy
OworICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rl
cihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0
UGF5bG9hZEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
c3VsdFBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAogICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BS
LCByZXN1bHRQYXlsb2FkR1BSKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmpl
Y3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUg
IlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogCkBA
IC02MjQsMzggKzYyNSwxNjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1pc2NTdHJp
Y3RFcQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogewotICAg
IGJvb2wgaXNDYWxsID0gbm9kZS0+b3AoKSA9PSBDYWxsOwotICAgIGlmICghaXNDYWxsKQotICAg
ICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPm9wKCkgPT0gQ29uc3Ry
dWN0KTsKLSAgICAKLSAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBp
cyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKLSAgICAvLyBmb3IgaXQuCi0g
ICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gaXNDYWxsID8gMCA6IDE7CisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBib29sIGlzQ2FsbDsKKyAgICBib29sIGlzVmFy
YXJnczsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGw6CisgICAgICAg
IGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOworICAgICAgICBpc0NhbGwgPSB0cnVlOwor
ICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25z
dHJ1Y3Q6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CisgICAg
ICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJn
czoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOworICAgICAg
ICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExp
bmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICBpc0NhbGwgPSBmYWxzZTsKKyAgICAg
ICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCku
Y2hpbGQobm9kZSwgMCk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlw
ZSA9IGlzQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0
OworICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlzIHRy
aWNraWVyLgorICAgIGlmIChpc1ZhcmFyZ3MpIHsKKyAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBk
YXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisKKyAgICAgICAgR1BSUmVnIGFyZ3VtZW50
c0dQUjsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUjI7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMzsKKyAgICAgICAgCisgICAgICAgIGlm
IChub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8gV2Ug
YXZvaWQgY2FsbGluZyBmbHVzaFJlZ2lzdGVycygpIGluc2lkZSB0aGUgY29udHJvbCBmbG93IG9m
IENhbGxGb3J3YXJkVmFyYXJncy4KKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGF1dG8gbG9hZEFyZ3VtZW50c0dQUiA9IFsmXSAoR1BS
UmVnIHJlc2VydmVkR1BSKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9y
d2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBKSVRDb21waWxl
cjo6c2VsZWN0U2NyYXRjaEdQUihyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDY0KAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBhcmd1
bWVudHNHUFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocmVz
ZXJ2ZWRHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAgICAgbG9jayhyZXNl
cnZlZEdQUik7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIgPSBhcmd1bWVu
dHMuZ3ByKCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgICAgICAgICAgICAgIHVubG9jayhyZXNlcnZlZEdQUik7CisgICAgICAgICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc2NyYXRjaEdQUjEgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1
bWVudHNHUFIsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIyID0gSklUQ29t
cGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgcmVzZXJ2
ZWRHUFIpOworICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBKSVRDb21waWxlcjo6c2VsZWN0U2Ny
YXRjaEdQUihhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgcmVzZXJ2ZWRH
UFIpOworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0
aGUgd2hvbGUgcmVnaXN0ZXIgZmlsZSB0byBvdXJzZWx2ZXMsIGFuZCBhcmd1bWVudHNHUFIgaGFz
IHRoZQorICAgICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFNlbGVjdCBzb21lIHNjcmF0Y2gg
cmVnaXN0ZXJzLgorICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lsbCB1c2Ugc2NyYXRjaEdQUjIg
dG8gcG9pbnQgdG8gb3VyIHN0YWNrIGZyYW1lLgorCisgICAgICAgIHVuc2lnbmVkIG51bVVzZWRT
dGFja1Nsb3RzID0gbV9qaXQuZ3JhcGgoKS5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgICAgIAor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZlQXJndW1lbnRzOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IENh
bGxGb3J3YXJkVmFyYXJncykgeworICAgICAgICAgICAgLy8gRG8gdGhlIGhvcnJpZmljIGZvby5h
cHBseSh0aGlzLCBhcmd1bWVudHMpIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIC8vIEZJWE1F
OiBkbyB0aGlzIG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwgaW5zdGVhZCBvZiBkeW5hbWlj
YWxseSBieSB0ZXN0aW5nIHRoZQorICAgICAgICAgICAgLy8gYXJndW1lbnRzIHJlZ2lzdGVyLiBU
aGlzIHdpbGwgaGFwcGVuIG9uY2Ugd2UgZ2V0IHJpZCBvZiB0aGUgYXJndW1lbnRzIGxhenkgY3Jl
YXRpb24gYW5kCisgICAgICAgICAgICAvLyBsYXp5IHRlYXItb2ZmLgorICAgICAgICAgICAgCisg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBh
cmd1bWVudHNHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShtX2ppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hH
UFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgICAg
ICAgICByZXN1bHRHUFIgPSBzY3JhdGNoR1BSMjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aGF2ZUFyZ3VtZW50cyA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmxpbmso
Jm1faml0KTsKKyAgICAgICAgfQorCisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gUmlnaHQgbm93LCBhcmd1
bWVudHMgaXMgaW4gYXJndW1lbnRzR1BSIGFuZCB0aGUgcmVnaXN0ZXIgZmlsZSBpcyBmbHVzaGVk
LgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIsIG51bVVzZWRTdGFja1Nsb3RzLCBk
YXRhLT5maXJzdFZhckFyZ09mZnNldCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgd2UgaGF2
ZSB0aGUgYXJndW1lbnQgY291bnQgb2YgdGhlIGNhbGxlZSBmcmFtZSwgYnV0IHdlJ3ZlIGxvc3Qg
dGhlIGFyZ3VtZW50cyBvcGVyYW5kLgorICAgICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgYXJndW1l
bnRzIG9wZXJhbmQgd2hpbGUgcHJlc2VydmluZyB0aGUgY2FsbGVlIGZyYW1lLgorICAgICAgICBs
b2FkQXJndW1lbnRzR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMSk7CisgICAg
ICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUobV9qaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBm
YWxzZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRy
dXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCBzY3Jh
dGNoR1BSMSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSwgYXJndW1lbnRzR1BSLCBkYXRhLT5maXJzdFZh
ckFyZ09mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3Zl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgaGF2ZUFy
Z3VtZW50cy5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1
c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlc3VsdEdQUiwgSklUQ29tcGls
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIERGR19BU1NFUlQo
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8g
V2UgZG9uJ3QgbmVlZCB0aGUgYXJndW1lbnRzIGFycmF5IGFueW1vcmUuCisgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgIHVzZShub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNDYWxsKSB7CisgICAgICAgICAgICAv
LyBOb3cgc2V0IHVwIHRoZSAidGhpcyIgYXJndW1lbnQuCisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB0aGlzQXJndW1lbnQodGhpcywgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3Mg
PyBub2RlLT5jaGlsZDIoKSA6IG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQUlJlZyB0
aGlzQXJndW1lbnRHUFIgPSB0aGlzQXJndW1lbnQuZ3ByKCk7CisgICAgICAgICAgICB0aGlzQXJn
dW1lbnQudXNlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQodGhp
c0FyZ3VtZW50R1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlz
IGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQorICAgICAg
ICAvLyBmb3IgaXQuCisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAg
OiAxOwogICAgIAotICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdD
aGlsZHJlbltub2RlLT5maXJzdENoaWxkKCldOwotICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9u
J3MgZmlyc3QgY2hpbGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBh
cmUgdGhlCi0gICAgLy8gYXJndW1lbnRzLgotICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+
bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmly
c3QgY2hpbGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhl
CisgICAgICAgIC8vIGFyZ3VtZW50cy4KKyAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2Rl
LT5udW1DaGlsZHJlbigpIC0gMTsKICAgICAKLSAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFy
Z3MgKyBkdW1teVRoaXNBcmd1bWVudDsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRB
cmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRT
bG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJh
bWVQYXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgRWRnZSBhcmdFZGdl
ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEg
KyBpXTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwotICAgICAg
ICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOwotICAgICAgICB1c2UoYXJnRWRnZSk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7CisgICAgICAgICAg
ICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmly
c3RDaGlsZCgpICsgMSArIGldOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMs
IGFyZ0VkZ2UpOworICAgICAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAg
ICAgICAgIHVzZShhcmdFZGdlKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQoYXJn
R1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3Vt
ZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKICAgICBHUFJSZWcgY2Fs
bGVlR1BSID0gY2FsbGVlLmdwcigpOwotICAgIHVzZShjYWxsZWVFZGdlKTsKLSAgICBtX2ppdC5z
dG9yZTY0KGNhbGxlZUdQUiwgbV9qaXQuY2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlZSkp
OworICAgIGNhbGxlZS51c2UoKTsKKyAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29t
cGlsZXI6OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKICAgICAKICAgICBmbHVz
aFJlZ2lzdGVycygpOwogCkBAIC02OTIsNiArODE4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICBjYWxsTGlua0luZm8tPmNhbGxlZUdQUiA9IGNhbGxl
ZUdQUjsKICAgICAKICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJn
ZXRUb0NoZWNrLCBjYWxsTGlua0luZm8pOworICAgIAorICAgIC8vIElmIHdlIHdlcmUgdmFyYXJn
cywgdGhlbiBhZnRlciB0aGUgY2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2gg
b3VyIHN0YWNrIHBvaW50ZXIuCisgICAgaWYgKGlzVmFyYXJncykKKyAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5yZWFj
aGFibGUgW1tjbGFuZzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYgYW55
IHRlbXBsYXRlIGV4cGFuc2lvbiB1c2VzIGl0CkBAIC00MjIxLDkgKzQzNTEsNTYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBDYWxsOgogICAg
IGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9y
d2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBlbWl0Q2Fs
bChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6
IHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSOworICAgICAgICB7Cisg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
YXJndW1lbnRzR1BSLCBkYXRhLT5vZmZzZXQpOworICAgICAgICAKKyAgICAgICAgbG9jayhHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVu
dHNHUFIgPSBhcmd1bWVudHMuZ3ByKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwor
ICAgICAgICB9CisgICAgICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNh
bGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCisgICAg
ICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQn
cyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAgICAvLyBzdGFuZHBv
aW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmlu
dG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5n
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQx
NDQ4CisKKyAgICAgICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9CisgICAgICAg
ICAgICBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQ
Uik7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZs
b3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCisgICAgICAgICAgICAgICAgYXJnQ291bnRJbmNs
dWRpbmdUaGlzR1BSLAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkp
KTsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlz
R1BSLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAg
ICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIGRhdGEtPm1h
Y2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzR1BSLCBkYXRhLT5vZmZzZXQsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgCisgICAg
ICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAg
IGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBo
KCksIG5vZGUsICFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKICAgICAg
ICAgCkBAIC00MzI4LDkgKzQ1MDUsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5l
QXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0
R1BSKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwor
ICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAg
ICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKAorICAgICAgICAgICAgICAgIFRydXN0ZWRJ
bW0zMihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMSksCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAg
ICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFy
Z3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAg
ICAgICB9CiAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTQzNDQsMjAgKzQ1MzIsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
CiAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAg
bV9qaXQubW92ZSgKICAgICAgICAgICAgICAgICBJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSAtIDEpKSksCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihKU1N0YWNr
OjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJl
Z2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsK
KyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVu
dENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIC8vIEZJWE1FOiB0aGUgc2xvdyBwYXRoIGdlbmVyYXRvciBzaG91bGQgcGVyZm9y
bSBhIGZvcndhcmQgc3BlY3VsYXRpb24gdGhhdCB0aGUKLSAgICAgICAgLy8gcmVzdWx0IGlzIGFu
IGludGVnZXIuIEZvciBub3cgd2UgcG9zdHBvbmUgdGhlIHNwZWN1bGF0aW9uIGJ5IGhhdmluZyB0
aGlzIHJldHVybgotICAgICAgICAvLyBhIEpTVmFsdWUuCi0gICAgICAgIAogICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
ICAgICBjcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25HZXRBcmd1bWVudHNMZW5ndGgsIHJlc3VsdEdQ
UiwKQEAgLTQzODQsNyArNDU3NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFy
Z3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgewor
ICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAg
ICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKApAQCAtNDM5Miw3ICs0NTgzLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIsCiAgICAgICAgICAgICAg
ICAgICAgIEltbTMyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkgLSAxKSkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdp
c3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVn
aXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJl
c3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLApAQCAtNDQ0OSwxNCArNDY0NSwyMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCku
bWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAg
ICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSkgeworICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQor
ICAgICAgICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKSB7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92
ZU9yRXF1YWwsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAg
ICAgICAgSW1tMzIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSAtIDEpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5s
b2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lz
dGVyOworICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdp
c3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgcmVzdWx0R1BS
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTc4LDcgKzU3
OCw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotI2lmbmRlZiBOREVCVUcKICAgICAv
LyBVc2VkIHRvIEFTU0VSVCBmbHVzaFJlZ2lzdGVycygpIGhhcyBiZWVuIGNhbGxlZCBwcmlvciB0
bwogICAgIC8vIGNhbGxpbmcgb3V0IGZyb20gSklUIGNvZGUgdG8gYSBDIGhlbHBlciBmdW5jdGlv
bi4KICAgICBib29sIGlzRmx1c2hlZCgpCkBAIC01OTMsNyArNTkyLDYgQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSNlbmRpZgogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVlT2ZKU0NvbnN0
YW50QXNJbW02NChOb2RlKiBub2RlKQpAQCAtMTQ1NCw2ICsxNDUyLDI2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oWl9KSVRPcGVyYXRpb25fRUpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCB1bnNpZ25lZCBhcmcyLCB1bnNpZ25lZCBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1
c3RlZEltbTMyKGFyZzMpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEZfSklUT3BlcmF0aW9uX0VGSlpaIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB1bnNpZ25lZCBhcmczLCBHUFJS
ZWcgYXJnNCkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tMzIoYXJnMyksIGFyZzQpOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRp
b25fRUpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHVuc2lnbmVkIGFy
ZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgVHJ1c3RlZEltbTMyKGFyZzIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VaSlpaWiBvcGVyYXRp
b24sIHVuc2lnbmVkIGFyZzEsIEdQUlJlZyBhcmcyLCB1bnNpZ25lZCBhcmczLCBHUFJSZWcgYXJn
NCwgdW5zaWduZWQgYXJnNSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIoYXJnMSksIGFyZzIsIFRydXN0ZWRJbW0zMihhcmczKSwg
YXJnNCwgVHJ1c3RlZEltbTMyKGFyZzUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMy
XzY0KQogCiAvLyBFbmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQgaW50
ZWdlci4gV2hlbiBiZWluZyBjb21waWxlZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBiZSBhbGlnbmVk
IGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBbc3BdKS4KQEAgLTE3NTAsNiArMTc2
OCwyNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWlogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCB1bnNpZ25lZCBh
cmcyLCB1bnNpZ25lZCBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRy
dXN0ZWRJbW0zMihhcmczKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihGX0pJVE9wZXJhdGlvbl9FRkpaWiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXls
b2FkLCB1bnNpZ25lZCBhcmczLCBHUFJSZWcgYXJnNCkKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZywgVHJ1
c3RlZEltbTMyKGFyZzMpLCBhcmc0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHVuc2ln
bmVkIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMVBheWxvYWQsIGFyZzFUYWcsIFRydXN0ZWRJbW0zMihhcmcyKSk7CisgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9w
ZXJhdGlvbl9FWkpaWlogb3BlcmF0aW9uLCB1bnNpZ25lZCBhcmcxLCBHUFJSZWcgYXJnMlRhZywg
R1BSUmVnIGFyZzJQYXlsb2FkLCB1bnNpZ25lZCBhcmczLCBHUFJSZWcgYXJnNCwgdW5zaWduZWQg
YXJnNSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tMzIoYXJnMSksIGFyZzJQYXlsb2FkLCBhcmcyVGFnLCBUcnVzdGVkSW1tMzIoYXJn
MyksIGFyZzQsIFRydXN0ZWRJbW0zMihhcmc1KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQogI3VuZGVmIEVBQklfMzJCSVRf
RFVNTVlfQVJHCiAjdW5kZWYgU0g0XzMyQklUX0RVTU1ZX0FSRwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCShyZXZp
c2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
Qml0VmVjdG9yIHVzZWRMb2NhbHM7CiAgICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3Nl
IHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZyb20gSVIuCi0gICAgICAgIGJvb2wgaGFzR2V0TG9j
YWxVbmxpbmtlZCA9IGZhbHNlOworICAgICAgICBib29sIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9
IGZhbHNlOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBA
IC04MSw3ICs4MSwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB1c2VkTG9jYWxzLnNldChvcGVyYW5kLnRvTG9jYWwoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGhhc0dldExvY2FsVW5saW5rZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB1c2Vk
TG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0eSBvZiBzdGFjayBsYXlvdXQK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGRh
dGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkg
KyBpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICB9IC8vIHRoZSBlbHNlIGNhc2Ug
c2hvdWxkbid0IGhhcHBlbi4KKyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVlZEZp
eHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKQEAgLTExMyw2ICsxMjgsMTEgQEAgcHVibGljOgogICAg
ICAgICAgICAgdXNlZExvY2Fscy5zZXQoYXJndW1lbnRzUmVnaXN0ZXIudG9Mb2NhbCgpKTsKICAg
ICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1
bWVudHNSZWdpc3RlcikudG9Mb2NhbCgpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgIEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBhcmd1bWVudC0tID4g
MTspIHsKICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCiAg
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5v
ZmZzZXQoKSArCkBAIC0xNDgsMjQgKzE2OCwyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAo
YWxsb2NhdGlvbltsb2NhbF0gPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bdmFyaWFi
bGUtPmxvY2FsKCkudG9Mb2NhbCgpXSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkgPSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSkgewot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyID0gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvbltjb2RlQmxvY2soKS0+
YXJndW1lbnRzUmVnaXN0ZXIoKS50b0xvY2FsKCldKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBhcmd1bWVudHNSZWdpc3RlciA9CisgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRp
b24sIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGFsbG9j
YXRpb25bCi0gICAgICAgICAgICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3Rlcigp
KS50b0xvY2FsKCldKQorICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCB1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpKQog
ICAgICAgICAgICAgICAgID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNS
ZWdpc3RlcikpOwogICAgICAgICAgICAgY29kZUJsb2NrKCktPnNldEFyZ3VtZW50c1JlZ2lzdGVy
KGFyZ3VtZW50c1JlZ2lzdGVyKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNv
ZGVCbG9jaygpLT51bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpIHsKICAg
ICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRBY3RpdmF0aW9uUmVnaXN0ZXIoCi0gICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltjb2RlQmxvY2soKS0+YWN0
aXZhdGlvblJlZ2lzdGVyKCkudG9Mb2NhbCgpXSkpOworICAgICAgICAgICAgICAgIGFzc2lnbihh
bGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgLy8gVGhpcyByZWdpc3RlciBpcyBuZXZlciB2YWxpZCBmb3Ig
REZHIGNvZGUgYmxvY2tzLgpAQCAtMTc2LDE1ICsxOTMsMTkgQEAgcHVibGljOgogICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxGcmFt
ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0
YWJsZS0+dXNlc0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHNSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAotICAgICAgICAg
ICAgICAgICAgICBhbGxvY2F0aW9uW21fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5l
Q2FsbEZyYW1lKS50b0xvY2FsKCldKTsKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50c1JlZ2lzdGVyID0gYXNzaWduKAorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0
aW9uLCBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpOwogCiAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGFsbG9jYXRpb25bdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihp
bmxpbmVDYWxsRnJhbWUpKS50b0xvY2FsKCldKQorICAgICAgICAgICAgICAgICAgICBhc3NpZ24o
YWxsb2NhdGlvbiwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKG1fZ3JhcGguYXJndW1lbnRz
UmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSkpCiAgICAgICAgICAgICAgICAgICAgID09IHVu
bW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1JlZ2lz
dGVyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgPSBhc3NpZ24oCisgICAgICAgICAgICAgICAgICAg
IGFsbG9jYXRpb24sIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpOyBhcmd1bWVudC0tID4gMTspIHsKICAgICAgICAgICAgICAgICBBcmd1
bWVudFBvc2l0aW9uJiBwb3NpdGlvbiA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9uc1sKICAg
ICAgICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQgKyBhcmd1bWVudF07
CkBAIC0yMjcsOSArMjQ4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBzeW1ib2xU
YWJsZS0+cGFyYW1ldGVyQ291bnQoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IHN5bWJvbFRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAg
ICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0gPSBzbG93QXJndW1lbnRzW2ldOwotICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKHNsb3dBcmd1bWVu
dHNbaV0uaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uW3JlZy50b0xvY2FsKCldKS5vZmZzZXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbmV3U2xvd0FyZ3VtZW50c1tpXS5pbmRleCA9IGFzc2lnbihhbGxv
Y2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIoc2xvd0FyZ3VtZW50c1tpXS5pbmRleCkpLm9mZnNldCgp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9zbG93QXJndW1lbnRzID0gV1RGOjptb3ZlKG5ld1Nsb3dBcmd1bWVudHMpOwpAQCAtMjM3
LDcgKzI1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRml4
IEdldExvY2FsVW5saW5rZWQncyB2YXJpYWJsZSByZWZlcmVuY2VzLgotICAgICAgICBpZiAoaGFz
R2V0TG9jYWxVbmxpbmtlZCkgeworICAgICAgICBpZiAoaGFzTm9kZXNUaGF0TmVlZEZpeHVwKSB7
CiAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKCFibG9j
aykKQEAgLTI0NiwxMCArMjY1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlu
a2VkOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IG5vZGUtPnVubGlua2VkTG9jYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLmlzTG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kID0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoYWxsb2NhdGlvbltvcGVyYW5kLnRvTG9jYWwoKV0pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwob3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRVbmxpbmtlZE1hY2hpbmVMb2Nh
bChhc3NpZ24oYWxsb2NhdGlvbiwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50
ID0gYXNzaWduKGFsbG9jYXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yNjIsNiArMjg1LDIwIEBAIHB1YmxpYzoKICAg
ICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZp
cnR1YWxSZWdpc3RlciBzcmMpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
ID0gc3JjOworICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgeworICAgICAgICAgICAgdW5z
aWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9Mb2NhbCgpXTsKKyAgICAg
ICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIH07CiAKIGJvb2wgcGVyZm9ybVN0
YWNrTGF5b3V0KEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgw
MTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
UGhhbnRvbUxvY2FsOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldENhbGxlZToKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlz
aW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBz
dGFydENyYXNoaW5nKCk7IFwKICAgICAgICAgICAgIGRhdGFMb2dGKCJcblxuXG5BdCAiKTsgXAog
ICAgICAgICAgICAgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQgY29udGV4dDsgXAotICAgICAgICAg
ICAgZGF0YUxvZ0YoIjogdmFsaWRhdGlvbiAlcyAoJXM6JWQpIGZhaWxlZC5cbiIsICNhc3NlcnRp
b24sIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKyAgICAgICAgICAgIGRhdGFMb2dGKCI6IHZhbGlk
YXRpb24gZmFpbGVkOiAlcyAoJXM6JWQpLlxuIiwgI2Fzc2VydGlvbiwgX19GSUxFX18sIF9fTElO
RV9fKTsgXAogICAgICAgICAgICAgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgpOyBcCiAgICAgICAg
ICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BS
RVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKICAgICAgICAgICAgIENSQVNIKCk7IFwKQEAg
LTYyLDExICs2MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdGFydENyYXNoaW5nKCk7IFwK
ICAgICAgICAgICAgIGRhdGFMb2dGKCJcblxuXG5BdCAiKTsgXAogICAgICAgICAgICAgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQgY29udGV4dDsgXAotICAgICAgICAgICAgZGF0YUxvZ0YoIjogdmFs
aWRhdGlvbiAoJXMgPSAiLCAjbGVmdCk7IFwKKyAgICAgICAgICAgIGRhdGFMb2dGKCI6IHZhbGlk
YXRpb24gZmFpbGVkOiAoJXMgPSAiLCAjbGVmdCk7IFwKICAgICAgICAgICAgIGRhdGFMb2cobGVm
dCk7IFwKICAgICAgICAgICAgIGRhdGFMb2dGKCIpID09ICglcyA9ICIsICNyaWdodCk7IFwKICAg
ICAgICAgICAgIGRhdGFMb2cocmlnaHQpOyBcCi0gICAgICAgICAgICBkYXRhTG9nRigiKSAoJXM6
JWQpIGZhaWxlZC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKyAgICAgICAgICAgIGRhdGFM
b2dGKCIpICglczolZCkuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCiAgICAgICAgICAgICBk
dW1wR3JhcGhJZkFwcHJvcHJpYXRlKCk7IFwKICAgICAgICAgICAgIFdURlJlcG9ydEFzc2VydGlv
bkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjbGVmdCAi
ID09ICIgI3JpZ2h0KTsgXAogICAgICAgICAgICAgQ1JBU0goKTsgXApAQCAtNDU2LDYgKzQ1Niwx
NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50OgorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGFjdHMgbGlrZSBhIHJlc2V0LiBJdCdzIG9rIHRvIGhhdmUgYSBz
ZWNvbmQgR2V0TG9jYWwgZm9yIGEgbG9jYWwgaW4gdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gYmxvY2sgaWYgd2UgaGFkIGEgU2V0QXJndW1lbnQgZm9yIHRoYXQgbG9jYWwuCisgICAg
ICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQo
bm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2
aWF0aW9ucy5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFiYnJldmlhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsNiArNzcsOSBAQCBzdGF0aWMg
aW5saW5lIExUeXBlIHN0cnVjdFR5cGUoTENvbnRleHQgCiAgICAgcmV0dXJuIHN0cnVjdFR5cGUo
Y29udGV4dCwgZWxlbWVudHMsIDIsIHBhY2tpbmcpOwogfQogCisvLyBGSVhNRTogTWFrZSB0aGUg
VmFyaWFkaWNpdHkgYXJndW1lbnQgbm90IGJlIHRoZSBsYXN0IGFyZ3VtZW50IHRvIGZ1bmN0aW9u
VHlwZSgpIHNvIHRoYXQgdGhpcyBmdW5jdGlvbgorLy8gY2FuIHVzZSBDKysxMSB2YXJpYWRpYyB0
ZW1wbGF0ZXMKKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE1
NzUKIGVudW0gVmFyaWFkaWNpdHkgeyBOb3RWYXJpYWRpYywgVmFyaWFkaWMgfTsKIHN0YXRpYyBp
bmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIGNvbnN0IExUeXBlKiBw
YXJhbVR5cGVzLCB1bnNpZ25lZCBwYXJhbUNvdW50LCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSkK
IHsKQEAgLTExMCw2ICsxMTMsMTYgQEAgc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUo
TFR5cGUgcgogICAgIExUeXBlIHBhcmFtVHlwZXNbXSA9IHsgcGFyYW0xLCBwYXJhbTIsIHBhcmFt
MywgcGFyYW00IH07CiAgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5
cGVzLCA0LCB2YXJpYWRpY2l0eSk7CiB9CitzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlw
ZShMVHlwZSByZXR1cm5UeXBlLCBMVHlwZSBwYXJhbTEsIExUeXBlIHBhcmFtMiwgTFR5cGUgcGFy
YW0zLCBMVHlwZSBwYXJhbTQsIExUeXBlIHBhcmFtNSwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkg
PSBOb3RWYXJpYWRpYykKK3sKKyAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFy
YW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01IH07CisgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShy
ZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCA1LCB2YXJpYWRpY2l0eSk7Cit9CitzdGF0aWMgaW5saW5l
IExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBMVHlwZSBwYXJhbTEsIExUeXBl
IHBhcmFtMiwgTFR5cGUgcGFyYW0zLCBMVHlwZSBwYXJhbTQsIExUeXBlIHBhcmFtNSwgTFR5cGUg
cGFyYW02LCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQoreworICAgIExU
eXBlIHBhcmFtVHlwZXNbXSA9IHsgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJh
bTUsIHBhcmFtNiB9OworICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1U
eXBlcywgNiwgdmFyaWFkaWNpdHkpOworfQogCiBzdGF0aWMgaW5saW5lIExUeXBlIHR5cGVPZihM
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIGxsdm0tPlR5cGVPZih2YWx1ZSk7IH0KIApAQCAtMjk4LDQx
ICszMTEsMTMgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIAogewog
ICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sICZhcmcxLCAxKTsKIH0KLXN0
YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVu
Y3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0g
eyBhcmcxLCBhcmcyIH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwg
YXJncywgMik7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVp
bGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBh
cmczKQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMgfTsKLSAgICBy
ZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCAzKTsKLX0KLXN0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24s
IExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0KQordGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KK0xWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgQXJncy4uLiBhcmdzKQogewotICAgIExW
YWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQgfTsKLSAgICByZXR1cm4gYnVp
bGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA0KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBh
cmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSkK
LXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1IH07
Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgNSk7Ci19Ci1z
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1
bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJn
NCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2KQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFy
ZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxs
KGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA2KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1
aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBM
VmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVl
IGFyZzYsIExWYWx1ZSBhcmc3KQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIs
IGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcgfTsKLSAgICByZXR1cm4gYnVpbGRDYWxsKGJ1
aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCA3KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
Q2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFs
dWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFy
ZzYsIExWYWx1ZSBhcmc3LCBMVmFsdWUgYXJnOCkKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBh
cmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBhcmc4IH07Ci0gICAgcmV0
dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgOCk7CisgICAgTFZhbHVlIGFy
Z3NBcnJheVtdID0geyBhcmcxLCBhcmdzLi4uIH07CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChidWls
ZGVyLCBmdW5jdGlvbiwgYXJnc0FycmF5LCBzaXplb2YoYXJnc0FycmF5KSAvIHNpemVvZihMVmFs
dWUpKTsKIH0KKwogc3RhdGljIGlubGluZSB2b2lkIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZl
bnRpb24oTFZhbHVlIGluc3RydWN0aW9uLCBMQ2FsbENvbnYgY2FsbGluZ0NvbnZlbnRpb24pIHsg
bGx2bS0+U2V0SW5zdHJ1Y3Rpb25DYWxsQ29udihpbnN0cnVjdGlvbiwgY2FsbGluZ0NvbnZlbnRp
b24pOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEV4dHJhY3RWYWx1ZShMQnVpbGRlciBi
dWlsZGVyLCBMVmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbGx2bS0+QnVp
bGRFeHRyYWN0VmFsdWUoYnVpbGRlciwgYWdnVmFsLCBpbmRleCwgIiIpOyB9CiBzdGF0aWMgaW5s
aW5lIExWYWx1ZSBidWlsZFNlbGVjdChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgY29uZGl0aW9u
LCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikgeyByZXR1cm4gbGx2bS0+QnVpbGRTZWxl
Y3QoYnVpbGRlciwgY29uZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4sICIiKTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMCw2ICsxMjAsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVj
azoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFy
YXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZh
cmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAg
Y2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5n
IEVsZWN0cm9uaWNzCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQK
ICAqCkBAIC0xMjgsNiArMTI4LDIwIEBAIHN0YXRpYyB2b2lkIGR1bXBEYXRhU2VjdGlvbihEYXRh
U2VjdGlvbioKICAgICB9CiB9CiAKK3N0YXRpYyBpbnQgb2Zmc2V0T2ZTdGFja1JlZ2lvbihTdGFj
a01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwLCB1aW50MzJfdCBzdGFja21hcElEKQoreworICAg
IFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3Rh
Y2ttYXBJRCk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSByZWNvcmRNYXAuZW5kKCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlLnNpemUoKSA9PSAxKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnMuc2l6ZSgpID09IDEpOworICAgIExvY2F0
aW9uIGNhcHR1cmVkTG9jYXRpb24gPQorICAgICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKG51
bGxwdHIsIGl0ZXItPnZhbHVlWzBdLmxvY2F0aW9uc1swXSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FwdHVyZWRMb2NhdGlvbi5raW5kKCkgPT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChjYXB0dXJlZExvY2F0aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkg
JSBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgcmV0dXJuIGNhcHR1cmVkTG9jYXRpb24uYWRkZW5k
KCkgLyBzaXplb2YoUmVnaXN0ZXIpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBEZXNjcmlwdG9y
VHlwZT4KIHZvaWQgZ2VuZXJhdGVJQ0Zhc3RQYXRoKAogICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uLApAQCAt
MjQzLDYgKzI1NywzMiBAQCBzdGF0aWMgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyc0Zvcihjb25z
CiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0KHJlY29yZC51c2VkUmVnaXN0ZXJTZXQoKSwgUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENh
bGxUeXBlPgordm9pZCBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKFZlY3RvcjxDYWxsVHlwZT4m
IGNhbGxzLCBTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwKQoreworICAgIC8vIEhhbmRs
aW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhl
bSBieSB0aGUgUEMgaW4gTExWTQorICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMg
Zmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgorCisgICAg
VmVjdG9yPENhbGxUeXBlPiBvbGRDYWxsczsKKyAgICBvbGRDYWxscy5zd2FwKGNhbGxzKTsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgQ2FsbFR5cGUmIGNhbGwgPSBvbGRDYWxsc1tpXTsKKyAgICAgICAgCisgICAgICAg
IFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2Fs
bC5zdGFja21hcElEKCkpOworICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraikgeworICAgICAgICAgICAgQ2FsbFR5cGUg
Y29weSA9IGNhbGw7CisgICAgICAgICAgICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVy
LT52YWx1ZVtqXS5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChj
b3B5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6c29ydChjYWxscy5iZWdpbigpLCBj
YWxscy5lbmQoKSk7Cit9CisKIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFw
cygKICAgICBTdGF0ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKiBqaXRD
b2RlLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKICAgICBTdGFja01hcHM6
OlJlY29yZE1hcCYgcmVjb3JkTWFwLCBib29sIGRpZFNlZVVud2luZEluZm8pCkBAIC0yNTEsMTYg
KzI5MSwxNCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAg
Vk0mIHZtID0gZ3JhcGgubV92bTsKICAgICBTdGFja01hcHMgc3RhY2ttYXBzID0gaml0Q29kZS0+
c3RhY2ttYXBzOwogICAgIAotICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVy
ID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuY2FwdHVyZWRTdGFja21hcElEKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRl
ci0+dmFsdWUuc2l6ZSgpID09IDEpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlWzBd
LmxvY2F0aW9ucy5zaXplKCkgPT0gMSk7Ci0gICAgTG9jYXRpb24gY2FwdHVyZWRMb2NhdGlvbiA9
Ci0gICAgICAgIExvY2F0aW9uOjpmb3JTdGFja21hcHMoJmppdENvZGUtPnN0YWNrbWFwcywgaXRl
ci0+dmFsdWVbMF0ubG9jYXRpb25zWzBdKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjYXB0dXJlZExv
Y2F0aW9uLmtpbmQoKSA9PSBMb2NhdGlvbjo6UmVnaXN0ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJU
KGNhcHR1cmVkTG9jYXRpb24uZ3ByKCkgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKCEoY2FwdHVyZWRMb2NhdGlvbi5hZGRlbmQoKSAlIHNpemVvZihS
ZWdpc3RlcikpKTsKLSAgICBpbnQzMl90IGxvY2Fsc09mZnNldCA9IGNhcHR1cmVkTG9jYXRpb24u
YWRkZW5kKCkgLyBzaXplb2YoUmVnaXN0ZXIpICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwor
ICAgIGludCBsb2NhbHNPZmZzZXQgPQorICAgICAgICBvZmZzZXRPZlN0YWNrUmVnaW9uKHJlY29y
ZE1hcCwgc3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2Nh
bDsKKyAgICAKKyAgICBpbnQgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQ7CisgICAgaWYgKHN0YXRl
LnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCAhPSBVSU5UX01BWCkKKyAgICAgICAgdmFyYXJn
c1NwaWxsU2xvdHNPZmZzZXQgPSBvZmZzZXRPZlN0YWNrUmVnaW9uKHJlY29yZE1hcCwgc3RhdGUu
dmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEKTsKKyAgICBlbHNlCisgICAgICAgIHZhcmFyZ3NT
cGlsbFNsb3RzT2Zmc2V0ID0gMDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5t
X2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YVtpXS5pbmxp
bmVDYWxsRnJhbWU7CkBAIC0zMzYsNyArMzc0LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBPU1Igc3RhY2ttYXAgIyIs
IGV4aXQubV9zdGFja21hcElELCAiIGZvciAiLCBleGl0Lm1fY29kZU9yaWdpbiwgIlxuIik7CiAK
LSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChleGl0Lm1fc3RhY2ttYXBJRCk7Cisg
ICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChleGl0Lm1fc3RhY2ttYXBJRCk7
CiAgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTM3NSw3ICs0MTMsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01h
cHMoCiAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIEdldEJ5SWQgc3RhY2ttYXAgIyIsIGdldEJ5SWQu
c3RhY2ttYXBJRCgpLCAiXG4iKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaXRlciA9IHJl
Y29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRl
ciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2ttYXBJRCgpKTsKICAgICAgICAgICAgIGlm
IChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgewogICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBv
cHRpbWl6ZWQgb3V0LgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDEyLDcgKzQ1MCw3
IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiSGFuZGxpbmcgUHV0QnlJZCBzdGFja21hcCAjIiwgcHV0QnlJZC5zdGFja21hcElEKCksICJc
biIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQocHV0
QnlJZC5zdGFja21hcElEKCkpOworICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZp
bmQocHV0QnlJZC5zdGFja21hcElEKCkpOwogICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3Jk
TWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NDQsMTQgKzQ4MiwxMyBAQCBzdGF0aWMgdm9p
ZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmNoZWNrSW5zLnNpemUoKTsgaS0t
OykgewogICAgICAgICAgICAgQ2hlY2tJbkRlc2NyaXB0b3ImIGNoZWNrSW4gPSBzdGF0ZS5jaGVj
a0luc1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlv
bkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBjaGVja0luIHN0
YWNrbWFwICMiLCBjaGVja0luLnN0YWNrbWFwSUQoKSwgIlxuIik7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjaGVja0luLnN0YWNrbWFwSUQoKSk7Cisg
ICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjaGVja0luLnN0YWNrbWFwSUQo
KSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTQ4MCw3ICs1MTcsNiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMoCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5tX2dlbmVyYXRvcnMuYXBwZW5kKENoZWNr
SW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNsb3dDYWxsLCBiZWdpbikpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0KICAgICAgICAgCiAgICAgICAgIGV4Y2VwdGlvblRhcmdldC5saW5rKCZzbG93
UGF0aEpJVCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkp1bXAgPSBz
bG93UGF0aEpJVC5qdW1wKCk7CkBAIC01MDMsMjkgKzUzOSwxMSBAQCBzdGF0aWMgdm9pZCBmaXhG
dW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRl
LmNoZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgZ2VuZXJhdGVDaGVja0luSUNG
YXN0UGF0aCgKICAgICAgICAgICAgICAgICBzdGF0ZSwgY29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5j
dGlvbiwgcmVjb3JkTWFwLCBzdGF0ZS5jaGVja0luc1tpXSwKLSAgICAgICAgICAgICAgICBzaXpl
T2ZDaGVja0luKCkpOyAKKyAgICAgICAgICAgICAgICBzaXplT2ZJbigpKTsgCiAgICAgICAgIH0g
CiAgICAgfQogICAgIAotICAgIC8vIEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVk
IHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUgUEMgaW4gTExWTQotICAgIC8vIGdl
bmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0IExM
Vk0gZGlkbid0IGdlbmVyYXRlLgotICAgIFZlY3RvcjxKU0NhbGw+IG9sZENhbGxzID0gc3RhdGUu
anNDYWxsczsKLSAgICBzdGF0ZS5qc0NhbGxzLnJlc2l6ZSgwKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSlNDYWxsJiBjYWxs
ID0gb2xkQ2FsbHNbaV07Ci0gICAgICAgIAotICAgICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6
aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3RhY2ttYXBJRCgpKTsKLSAgICAg
ICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytq
KSB7Ci0gICAgICAgICAgICBKU0NhbGwgY29weSA9IGNhbGw7Ci0gICAgICAgICAgICBjb3B5Lm1f
aW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZVtqXS5pbnN0cnVjdGlvbk9mZnNldDsKLSAg
ICAgICAgICAgIHN0YXRlLmpzQ2FsbHMuYXBwZW5kKGNvcHkpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMu
ZW5kKCkpOworICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUuanNDYWxscywgcmVj
b3JkTWFwKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUo
KTsgaS0tOykgewogICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOwpAQCAt
NTQ3LDkgKzU2NSwzMiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMo
CiAgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlcik7CiAgICAgfQogICAgIAorICAgIGFk
anVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUuanNDYWxsVmFyYXJnc2VzLCByZWNvcmRNYXAp
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nlcy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgSlNDYWxsVmFyYXJncyYgY2FsbCA9IHN0YXRlLmpzQ2FsbFZh
cmFyZ3Nlc1tpXTsKKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgm
dm0sIGNvZGVCbG9jayk7CisgICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCwgZ3JhcGgsIHZh
cmFyZ3NTcGlsbFNsb3RzT2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJ
QyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3Ry
dWN0aW9uT2Zmc2V0OworICAgICAgICBzaXplX3Qgc2l6ZU9mSUMgPSBzaXplT2ZJQ0ZvcihjYWxs
Lm5vZGUoKSk7CisKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBmYXN0UGF0aEpJ
VCwgc3RhcnRPZklDLCBzaXplT2ZJQyk7CisgICAgICAgIGlmICghbGlua0J1ZmZlci5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkZhaWxlZCB0byBpbnNlcnQgaW5saW5lIGNhY2hl
IGZvciB2YXJhcmdzIGNhbGwgKHNwZWNpZmljYWxseSwgIiwgR3JhcGg6Om9wTmFtZShjYWxsLm5v
ZGUoKS0+b3AoKSksICIpIGJlY2F1c2Ugd2UgdGhvdWdodCB0aGUgc2l6ZSB3b3VsZCBiZSAiLCBz
aXplT2ZJQywgIiBidXQgaXQgZW5kZWQgdXAgYmVpbmcgIiwgZmFzdFBhdGhKSVQubV9hc3NlbWJs
ZXIuY29kZVNpemUoKSwgIiBwcmlvciB0byBjb21wYWN0aW9uLlxuIik7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9UOjpmaWxsTm9wcygKKyAgICAgICAgICAg
IHN0YXJ0T2ZJQyArIGxpbmtCdWZmZXIuc2l6ZSgpLCBzaXplT2ZJQyAtIGxpbmtCdWZmZXIuc2l6
ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgc3RhdGUu
ZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpKTsKKyAg
ICB9CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAK
LSAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2Vw
dGlvblN0YWNrbWFwSUQpOworICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YXRlLmhh
bmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEKTsKICAgICAvLyBJdCdzIHNvcnQg
b2YgcmVtb3RlbHkgcG9zc2libGUgdGhhdCB3ZSB3b24ndCBoYXZlIGFuIGluLWJhbmQgZXhjZXB0
aW9uIGhhbmRsaW5nCiAgICAgLy8gcGF0aCwgZm9yIHNvbWUga2luZHMgb2YgZnVuY3Rpb25zLgog
ICAgIGlmIChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24gMTgwMTg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExICsyOCwxNCBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQp
CiAKKyNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKIC8vIFRoZSBkZWZhdWx0IHNp
emVzIGFyZSB4ODYtNjQtc3BlY2lmaWMsIGFuZCB3ZXJlIGZvdW5kIGVtcGlyaWNhbGx5LiBUaGV5
IGhhdmUgdG8gY292ZXIgdGhlIHdvcnN0CiAvLyBwb3NzaWJsZSBjb21iaW5hdGlvbiBvZiByZWdp
c3RlcnMgbGVhZGluZyB0byB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBlbmNvZGluZyBvZiBlYWNoIGlu
c3RydWN0aW9uIGluCiAvLyB0aGUgSUMuCkBAIC02MSwyNSArNjQsNzQgQEAgc2l6ZV90IHNpemVP
ZlB1dEJ5SWQoKQogI2VuZGlmCiB9CiAKLXNpemVfdCBzaXplT2ZDaGVja0luKCkKK3NpemVfdCBz
aXplT2ZDYWxsKCkKIHsKICNpZiBDUFUoQVJNNjQpCi0gICAgcmV0dXJuIDQ7CisgICAgcmV0dXJu
IDU2OwogI2Vsc2UKLSAgICByZXR1cm4gNTsgCisgICAgcmV0dXJuIDUzOwogI2VuZGlmCiB9CiAK
K3NpemVfdCBzaXplT2ZDYWxsVmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0KQorICAgIHJldHVy
biA1NjsKKyNlbHNlCisgICAgcmV0dXJuIDI3NTsKKyNlbmRpZgorfQogCi1zaXplX3Qgc2l6ZU9m
Q2FsbCgpCitzaXplX3Qgc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCkKIHsKICNpZiBDUFUoQVJN
NjQpCiAgICAgcmV0dXJuIDU2OwogI2Vsc2UKLSAgICByZXR1cm4gNTM7CisgICAgcmV0dXJuIDM3
MjsKKyNlbmRpZgorfQorCitzaXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpCit7CisjaWYg
Q1BVKEFSTTY0KQorICAgIHJldHVybiA1NjsKKyNlbHNlCisgICAgcmV0dXJuIDI1MzsKKyNlbmRp
ZgorfQorCitzaXplX3Qgc2l6ZU9mSW4oKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1cm4g
NDsKKyNlbHNlCisgICAgcmV0dXJuIDU7IAogI2VuZGlmCiB9CiAKK3NpemVfdCBzaXplT2ZJQ0Zv
cihOb2RlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgR2V0
QnlJZDoKKyAgICAgICAgcmV0dXJuIHNpemVPZkdldEJ5SWQoKTsKKyAgICBjYXNlIFB1dEJ5SWQ6
CisgICAgICAgIHJldHVybiBzaXplT2ZQdXRCeUlkKCk7CisgICAgY2FzZSBDYWxsOgorICAgIGNh
c2UgQ29uc3RydWN0OgorICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbCgpOworICAgIGNhc2UgQ2Fs
bFZhcmFyZ3M6CisgICAgICAgIHJldHVybiBzaXplT2ZDYWxsVmFyYXJncygpOworICAgIGNhc2Ug
Q2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbEZvcndhcmRWYXJh
cmdzKCk7CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICByZXR1cm4gc2l6ZU9m
Q29uc3RydWN0VmFyYXJncygpOworICAgIGNhc2UgSW46CisgICAgICAgIHJldHVybiBzaXplT2ZJ
bigpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHJldmlz
aW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEyICsyOCwyMyBAQAogCiAjaWYgRU5BQkxFKEZUTF9K
SVQpCiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKK25hbWVzcGFjZSBKU0Mgewor
CituYW1lc3BhY2UgREZHIHsKK3N0cnVjdCBOb2RlOworfQorCituYW1lc3BhY2UgRlRMIHsKIAog
c2l6ZV90IHNpemVPZkdldEJ5SWQoKTsKIHNpemVfdCBzaXplT2ZQdXRCeUlkKCk7CiBzaXplX3Qg
c2l6ZU9mQ2FsbCgpOwotc2l6ZV90IHNpemVPZkNoZWNrSW4oKTsKK3NpemVfdCBzaXplT2ZDYWxs
VmFyYXJncygpOworc2l6ZV90IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOworc2l6ZV90IHNp
emVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsKK3NpemVfdCBzaXplT2ZJbigpOworCitzaXplX3Qgc2l6
ZU9mSUNGb3IoREZHOjpOb2RlKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0
b3J5LmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDEwICs5OSwxMiBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRp
b25fRUMsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFj
cm8oVl9KSVRPcGVyYXRpb25fRUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50
UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VWd3NKLCBmdW5jdGlvblR5cGUodm9p
ZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlv
bl9FWkpaWlosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnQzMiwgaW50NjQsIGlu
dDMyLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fSiwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlLCBpbnQ2NCkpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9aLCBm
dW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklUT3BlcmF0aW9u
X0QsIGZ1bmN0aW9uVHlwZShpbnQzMiwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhaX0pJVE9w
ZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGludFB0cikpCisgICAgbWFj
cm8oWl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIp
KSBcCisgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUpaLCBmdW5jdGlvblR5cGUoaW50MzIsIGlu
dFB0ciwgaW50NjQsIGludDMyKSkKICAgICAKIGNsYXNzIEludHJpbnNpY1JlcG9zaXRvcnkgOiBw
dWJsaWMgQ29tbW9uVmFsdWVzIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBK
U0NhbGw6OkpTQ2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBOb2RlCiAgICAgLCBtX3N0YWNrbWFw
SUQoc3RhY2ttYXBJRCkKICAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKIHsKKyAgICBBU1NF
UlQobm9kZS0+b3AoKSA9PSBDYWxsIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU0NhbGxCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordXNpbmcgbmFtZXNw
YWNlIERGRzsKKwogSlNDYWxsQmFzZTo6SlNDYWxsQmFzZSgpCiAgICAgOiBtX3R5cGUoQ2FsbExp
bmtJbmZvOjpOb25lKQogICAgICwgbV9jYWxsTGlua0luZm8obnVsbHB0cikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCShyZXZpc2lvbiAxODAxODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIExpbmtCdWZmZXI7
CiAKK25hbWVzcGFjZSBERkcgeworc3RydWN0IE5vZGU7Cit9CisKIG5hbWVzcGFjZSBGVEwgewog
CiBjbGFzcyBKU0NhbGxCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SlNDYWxsVmFyYXJncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU0NhbGxWYXJhcmdzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2Rl
LmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiCisjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitKU0NhbGxWYXJhcmdz
OjpKU0NhbGxWYXJhcmdzKCkKKyAgICA6IG1fc3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAsIG1f
bm9kZShudWxscHRyKQorICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldChVSU5UX01BWCkKK3sKK30K
KworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncyh1bnNpZ25lZCBzdGFja21hcElELCBOb2Rl
KiBub2RlKQorICAgIDogbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCisgICAgLCBtX25vZGUobm9k
ZSkKKyAgICAsIG1fY2FsbEJhc2UoCisgICAgICAgIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0VmFy
YXJncyA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncyA6IENhbGxMaW5rSW5mbzo6Q2Fs
bFZhcmFyZ3MsCisgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYykKKyAgICAsIG1faW5zdHJ1
Y3Rpb25PZmZzZXQoMCkKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDYWxsVmFyYXJncyB8
fCBub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IENvbnN0
cnVjdFZhcmFyZ3MpOworfQorCit1bnNpZ25lZCBKU0NhbGxWYXJhcmdzOjpudW1TcGlsbFNsb3Rz
TmVlZGVkKCkKK3sKKyAgICByZXR1cm4gNDsKK30KKwordm9pZCBKU0NhbGxWYXJhcmdzOjplbWl0
KENDYWxsSGVscGVycyYgaml0LCBHcmFwaCYgZ3JhcGgsIGludDMyX3Qgc3BpbGxTbG90c09mZnNl
dCkKK3sKKyAgICAvLyBXZSBhcmUgcGFzc2VkIHRocmVlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoK
KyAgICAvLyAtIFRoZSBjYWxsZWUuCisgICAgLy8gLSBUaGUgYXJndW1lbnRzIG9iamVjdC4KKyAg
ICAvLyAtIFRoZSAidGhpcyIgdmFsdWUsIGlmIGl0J3MgYSBjb25zdHJ1Y3RvciBjYWxsLgorICAg
IAorICAgIGJvb2wgaXNDYWxsID0gbV9ub2RlLT5vcCgpICE9IENvbnN0cnVjdFZhcmFyZ3M7Cisg
ICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5jYWxsVmFyYXJnc0RhdGEo
KTsKKyAgICAKKyAgICBHUFJSZWcgY2FsbGVlR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwor
ICAgIAorICAgIEdQUlJlZyBhcmd1bWVudHNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJl
ZyB0aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBib29sIGFyZ3VtZW50c09uU3RhY2sgPSBm
YWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgeworICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAg
ICAgICAgdGhpc0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIHRoaXNHUFIgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjE7CisgICAgICAgIGFyZ3VtZW50c09uU3RhY2sgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIGFyZ3VtZW50c0dQUiA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIGNvbnN0IHVuc2lnbmVkIGNhbGxlZVNwaWxsU2xvdCA9IDA7CisgICAgY29u
c3QgdW5zaWduZWQgYXJndW1lbnRzU3BpbGxTbG90ID0gMTsKKyAgICBjb25zdCB1bnNpZ25lZCB0
aGlzU3BpbGxTbG90ID0gMjsKKyAgICBjb25zdCB1bnNpZ25lZCBzdGFja1BvaW50ZXJTcGlsbFNs
b3QgPSAzOworICAgIAorICAgIC8vIEdldCBzb21lIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3Rl
clNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3Rl
clNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLm1l
cmdlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3Rl
cnMuc2V0KGNhbGxlZUdQUik7CisgICAgaWYgKGFyZ3VtZW50c0dQUiAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChhcmd1bWVudHNHUFIpOworICAgIGlmICh0aGlz
R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNHUFIp
OworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CisgICAgaWYgKGFyZ3VtZW50c09uU3RhY2spCisgICAgICAgIGFyZ3VtZW50c0dQUiA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2Nh
dG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJzKCkpOworICAgIAorICAgIGF1dG8gbG9hZEFyZ3Vt
ZW50cyA9IFsmXSAoYm9vbCBjbG9iYmVyZWQpIHsKKyAgICAgICAgaWYgKGFyZ3VtZW50c09uU3Rh
Y2spIHsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKGdyYXBoLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50c0dQUik7CisgICAg
ICAgIH0gZWxzZSBpZiAoY2xvYmJlcmVkKSB7CisgICAgICAgICAgICBqaXQubG9hZDY0KAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsg
YXJndW1lbnRzU3BpbGxTbG90KSwgYXJndW1lbnRzR1BSKTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgCisgICAgYXV0byBjb21wdXRlVXNlZFN0YWNrID0gWyZdIChHUFJSZWcgdGFyZ2V0R1BSLCB1
bnNpZ25lZCBleHRyYSkgeworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCB0YXJnZXRHUFIpOworICAgICAgICBpZiAoZXh0cmEpCisgICAgICAg
ICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhKSwgdGFyZ2V0
R1BSKTsKKyAgICAgICAgaml0LnVyc2hpZnRQdHIoQ0NhbGxIZWxwZXJzOjpJbW0zMigzKSwgdGFy
Z2V0R1BSKTsKKyAgICB9OworICAgIAorICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9
IFsmXSAodm9pZCogY2FsbGVlKSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7
CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsK
KyAgICAgICAgbV9leGNlcHRpb25zLmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2Vt
Ymx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVt
cFdpZHRoKSk7CisgICAgfTsKKyAgICAKKyAgICBsb2FkQXJndW1lbnRzKGZhbHNlKTsKKworICAg
IGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHN0YWNrUG9pbnRlclNwaWxsU2xv
dCkpOworICAgIAorICAgIC8vIEF0dGVtcHQgdGhlIGZvcndhcmRpbmcgZmFzdCBwYXRoLCBpZiBp
dCdzIGJlZW4gcmVxdWVzdGVkLgorICAgIENDYWxsSGVscGVyczo6SnVtcCBoYXZlQXJndW1lbnRz
OworICAgIGlmIChtX25vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAg
IC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJndW1lbnRzKSBvcHRpbWl6YXRp
b24uCisgICAgICAgIC8vIEZJWE1FOiBkbyB0aGlzIG9wdGltaXphdGlvbiBhdCB0aGUgSVIgbGV2
ZWwuCisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOwor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5v
blplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAKKyAgICAgICAgY29tcHV0ZVVzZWRTdGFj
ayhzY3JhdGNoR1BSMiwgMCk7CisgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNl
KGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMs
IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJB
cmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgCisgICAgICAgIGppdC5tb3ZlKGNhbGxlZUdQ
UiwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBoYXZlQXJndW1lbnRzID0gaml0Lmp1bXAoKTsK
KyAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAgICB9CisgICAgCisgICAgLy8gR290dGEg
c3BpbGwgdGhlIGNhbGxlZSwgYXJndW1lbnRzLCBhbmQgdGhpcyBiZWNhdXNlIHdlIHdpbGwgbmVl
ZCB0aGVtIGxhdGVyIGFuZCB3ZSB3aWxsIGhhdmUgc29tZQorICAgIC8vIGNhbGxzIHRoYXQgY2xv
YmJlciB0aGVtLgorICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0NhbGxIZWxwZXJzOjphZGRy
ZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3QpKTsKKyAgICBpZiAoIWFy
Z3VtZW50c09uU3RhY2spCisgICAgICAgIGppdC5zdG9yZTY0KGFyZ3VtZW50c0dQUiwgQ0NhbGxI
ZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBhcmd1bWVudHNTcGlsbFNsb3Qp
KTsKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhl
bHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrID0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsK
KyAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
NSAqIHNpemVvZih2b2lkKikpOworICAgIGNvbXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQUjEsIDAp
OworICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXh0cmFTdGFjayks
IENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpKTsKKyAgICBjYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFy
YXJncykpOworICAgIAorICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBzY3Jh
dGNoR1BSMSk7CisgICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgZXh0cmFTdGFjayk7
CisgICAgbG9hZEFyZ3VtZW50cyh0cnVlKTsKKyAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKGppdCwg
c2NyYXRjaEdQUjEsIGZhbHNlLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjIpOworICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWV4dHJhU3RhY2spLCBzY3JhdGNoR1BS
MiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwgYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCksIHNjcmF0Y2hHUFIxKTsK
KyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9u
U2V0dXBWYXJhcmdzRnJhbWUpKTsKKyAgICAKKyAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgc2NyYXRjaEdQUjIpOworICAgIAorICAgIGlmIChpc0NhbGwpCisgICAgICAgIGpp
dC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlz
U3BpbGxTbG90KSwgdGhpc0dQUik7CisgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OmFkZHJl
c3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxlZVNwaWxsU2xvdCksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAKKyAgICBpZiAobV9ub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncykKKyAg
ICAgICAgaGF2ZUFyZ3VtZW50cy5saW5rKCZqaXQpOworICAgIAorICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgc2NyYXRj
aEdQUjIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIAorICAgIGlm
IChpc0NhbGwpCisgICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIsIENDYWxsSGVscGVyczo6Y2Fs
bGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAKKyAgICAvLyBIZW5jZWZvcnRoIHdlIG1ha2UgdGhl
IGNhbGwuIFRoZSBiYXNlIEZUTCBjYWxsIG1hY2hpbmVyeSBleHBlY3RzIHRoZSBjYWxsZWUgaW4g
cmVnVDAgYW5kIGZvciB0aGUKKyAgICAvLyBzdGFjayBmcmFtZSB0byBhbHJlYWR5IGJlIHNldCB1
cCwgd2hpY2ggaXQgaXMuCisgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVs
cGVyczo6Y2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlZSkpOworICAgIAorICAgIG1fY2Fs
bEJhc2UuZW1pdChqaXQpOworICAgIAorICAgIC8vIFVuZG8gdGhlIGRhbWFnZSB3ZSd2ZSBkb25l
LgorICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zm
c2V0ICsgc3RhY2tQb2ludGVyU3BpbGxTbG90KSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6bGluayhWTSYgdm0sIExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIpCit7Cisg
ICAgbV9jYWxsQmFzZS5saW5rKHZtLCBsaW5rQnVmZmVyKTsKKyAgICBsaW5rQnVmZmVyLmxpbmso
bV9leGNlcHRpb25zLCBleGNlcHRpb25IYW5kbGVyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEZUTEpTQ2FsbFZhcmFyZ3NfaAorI2RlZmluZSBGVExKU0NhbGxWYXJh
cmdzX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTGlua0J1ZmZlcjsKKworbmFtZXNwYWNlIERG
RyB7CitjbGFzcyBHcmFwaDsKK3N0cnVjdCBOb2RlOworfQorCituYW1lc3BhY2UgRlRMIHsKKwor
Y2xhc3MgSlNDYWxsVmFyYXJncyB7CitwdWJsaWM6CisgICAgSlNDYWxsVmFyYXJncygpOworICAg
IEpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgREZHOjpOb2RlKik7CisgICAgCisg
ICAgREZHOjpOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgCisgICAg
c3RhdGljIHVuc2lnbmVkIG51bVNwaWxsU2xvdHNOZWVkZWQoKTsKKyAgICAKKyAgICB2b2lkIGVt
aXQoQ0NhbGxIZWxwZXJzJiwgREZHOjpHcmFwaCYsIGludDMyX3Qgc3BpbGxTbG90c09mZnNldCk7
CisgICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2Vw
dGlvbkhhbmRsZXIpOworICAgIAorICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YWNrbWFwSUQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU0Nh
bGxWYXJhcmdzJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luc3RydWN0
aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKKyAgICBERkc6Ok5vZGUqIG1fbm9kZTsK
KyAgICBKU0NhbGxCYXNlIG1fY2FsbEJhc2U7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBt
X2V4Y2VwdGlvbnM7CisKK3B1YmxpYzoKKyAgICB1aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCisKKyNlbmRpZiAvLyBGVExKU0NhbGxWYXJhcmdzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4
MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDMwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxTdGF0ZS5j
YXB0dXJlZFN0YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9vdXQuaW50MzJaZXJvLCBjYXB0dXJl
ZEFsbG9jYSk7CiAgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSBoYXZlIGFueSBDYWxsVmFyYXJn
cyB0aGVuIHdlIG5lZSB0byBoYXZlIGEgc3BpbGwgc2xvdCBmb3IgaXQuCisgICAgICAgIGJvb2wg
aGFzVmFyYXJncyA9IGZhbHNlOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJl
T3JkZXIpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ2Fs
bFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAg
ICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICBo
YXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChoYXNWYXJhcmdzKSB7
CisgICAgICAgICAgICBMVmFsdWUgdmFyYXJnc1NwaWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCisg
ICAgICAgICAgICAgICAgYXJyYXlUeXBlKG1fb3V0LmludDY0LCBKU0NhbGxWYXJhcmdzOjpudW1T
cGlsbFNsb3RzTmVlZGVkKCkpKTsKKyAgICAgICAgICAgIG1fZnRsU3RhdGUudmFyYXJnc1NwaWxs
U2xvdHNTdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAgICAgbV9vdXQuY2Fs
bCgKKyAgICAgICAgICAgICAgICBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25z
dEludDY0KG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEKSwKKyAgICAgICAg
ICAgICAgICBtX291dC5pbnQzMlplcm8sIHZhcmFyZ3NTcGlsbFNsb3RzKTsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wdHJUb0ludCgKICAgICAgICAg
ICAgIG1fb3V0LmNhbGwobV9vdXQuZnJhbWVBZGRyZXNzSW50cmluc2ljKCksIG1fb3V0LmludDMy
WmVybyksIG1fb3V0LmludFB0cik7CiAgICAgICAgIG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNv
bnN0SW50NjQoVGFnVHlwZU51bWJlcik7CkBAIC02ODMsNiArNzA3LDE0IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVj
dCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAg
ICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFy
Z3M6CisgICAgICAgICAgICBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgICAgICBjb21w
aWxlTG9hZFZhcmFyZ3MoKTsKKyAgICAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShGVExfTkFU
SVZFX0NBTExfSU5MSU5JTkcpCiAgICAgICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICAgICAgY2Fz
ZSBOYXRpdmVDb25zdHJ1Y3Q6CkBAIC0yMDY0LDggKzIwOTYsMjIgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIGNoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCgpOwogCi0gICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCAhbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQuYWRkKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZl
KHBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLCBtX291dC5jb25zdEludDMyKC0x
KSkpOworICAgICAgICBpZiAobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
CisgICAgICAgICAgICAmJiAhbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnQzMigKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3Rl
cjsKKyAgICAgICAgICAgIGlmICghbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdp
c3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIHNldElu
dDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsKKyAgICAgICAgfQog
ICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAtMjA3
NywxMCArMjEyMywxNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBsaW1pdDsKLSAg
ICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBpZiAoY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LmNvbnN0SW50
MzIoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbGltaXQgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKHBh
eWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLCBtX291dC5pbnQzMk9uZSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdp
c3RlcjsKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFy
Z3VtZW50Q291bnRSZWdpc3RlciA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LnN1YihtX291dC5sb2Fk
MzIocGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwgbV9vdXQuaW50MzJPbmUpOwor
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoVW5jb3VudGFibGUsIG5vVmFs
dWUoKSwgMCwgbV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBsaW1pdCkpOwogICAgICAgICAKQEAg
LTM3ODYsNiArMzgzOSw4NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc2V0SlNWYWx1
ZShjYWxsKTsKICAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFy
YXJncygpCisgICAgeworICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbnVs
bHB0cjsKKyAgICAgICAgTFZhbHVlIHRoaXNBcmcgPSBudWxscHRyOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAg
ICAgICAgICAgIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIHRoaXNBcmcgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAg
ICAgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAganNBcmd1
bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAg
ICAgIAorICAgICAgICBWZWN0b3I8TFZhbHVlPiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihzaXplT2ZJQ0ZvcihtX25vZGUpKSk7CisgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQoY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKDEgKyAhIWpzQXJndW1lbnRzICsgISF0aGlzQXJn
KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNDYWxsZWUpOworICAgICAgICBpZiAoanNB
cmd1bWVudHMpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQXJndW1lbnRzKTsKKyAg
ICAgICAgaWYgKHRoaXNBcmcpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNBcmcp
OworICAgICAgICAKKyAgICAgICAgY2FsbFByZWZsaWdodCgpOworICAgICAgICAKKyAgICAgICAg
TFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygp
LCBhcmd1bWVudHMpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNh
bGwsIExMVk1DQ2FsbENvbnYpOworICAgICAgICAKKyAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxW
YXJhcmdzZXMuYXBwZW5kKEpTQ2FsbFZhcmFyZ3Moc3RhY2ttYXBJRCwgbV9ub2RlKSk7CisgICAg
ICAgIAorICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVMb2FkVmFyYXJncygpCisgICAgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1bWVudHMg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IGxlbmd0aCA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25T
aXplT2ZWYXJhcmdzKSwgbV9jYWxsRnJhbWUsIGpzQXJndW1lbnRzLAorICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3Ro
IHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRw
b2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEg
c3BlYyBjb21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9u
IHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJn
cyByaWdodAorICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAg
IExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuaW50
MzJPbmUpOworICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1
ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAg
ICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+
bWFjaGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRh
dGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9vayBh
IHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCisgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBt
X291dC5sU2hyKAorICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGlu
ZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBtX291
dC5jb25zdEludFB0cigzKSk7CisgICAgICAgIAorICAgICAgICB2bUNhbGwoCisgICAgICAgICAg
ICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwKKyAg
ICAgICAgICAgIG1fb3V0LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBt
X291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCisgICAgICAgICAgICBsZW5ndGgsIG1fb3V0
LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgIH0KIAogICAgIHZvaWQg
Y29tcGlsZUp1bXAoKQogICAgIHsKQEAgLTQwOTAsNyArNDIyNCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAotICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdElu
dDMyKHNpemVPZkNoZWNrSW4oKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mSW4oKSksCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgY2Vs
bCk7CiAKICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNh
bGwsIExMVk1BbnlSZWdDYWxsQ29udik7CkBAIC02NDgzLDcgKzY2MTcsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgIC8vIEJ1ZmZlciBpcyBvdXQgb2Ygc3BhY2UsIGZsdXNoIGl0LgogICAgICAgICBt
X291dC5hcHBlbmRUbyhidWZmZXJJc0Z1bGwsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIHZtQ2Fs
bChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpLCBtX2Nh
bGxGcmFtZSwgYmFzZSwgTm9FeGNlcHRpb25zKTsKKyAgICAgICAgdm1DYWxsTm9FeGNlcHRpb25z
KG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlciksIG1fY2Fs
bEZyYW1lLCBiYXNlKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNjQ5Miw0NCAr
NjYyNiwyMyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogCi0gICAgZW51bSBFeGNlcHRpb25D
aGVja01vZGUgeyBOb0V4Y2VwdGlvbnMsIENoZWNrRXhjZXB0aW9ucyB9OwotICAgIAotICAgIExW
YWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENo
ZWNrRXhjZXB0aW9ucykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1
ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgewogICAgICAgICBj
YWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0
aW9uKTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
bV9vdXQuY2FsbChmdW5jdGlvbiwgYXJncy4uLik7CisgICAgICAgIGNhbGxDaGVjaygpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5j
dGlvbiwgTFZhbHVlIGFyZzEsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRp
b25zKQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSk7Ci0gICAgICAgIGNhbGxDaGVjayhtb2Rl
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgTFZhbHVlIHZtQ2FsbChMVmFs
dWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgRXhjZXB0aW9uQ2hlY2tNb2Rl
IG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0gICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7
Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxLCBhcmcy
KTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1
ZSBhcmcyLCBMVmFsdWUgYXJnMywgRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2Vw
dGlvbnMpCi0gICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczKTsKLSAgICAgICAg
Y2FsbENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBMVmFs
dWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFs
dWUgYXJnMywgTFZhbHVlIGFyZzQsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNl
cHRpb25zKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgTFZhbHVl
IHZtQ2FsbE5vRXhjZXB0aW9ucyhMVmFsdWUgZnVuY3Rpb24sIEFyZ3MuLi4gYXJncykKICAgICB7
CiAgICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
LmNhbGwoZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwotICAgICAgICBjYWxsQ2hl
Y2sobW9kZSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBh
cmdzLi4uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgCisKICAgICB2b2lk
IGNhbGxQcmVmbGlnaHQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgbV9v
dXQuc3RvcmUzMigKQEAgLTY1NDMsMTEgKzY2NTYsOCBAQCBwcml2YXRlOgogICAgICAgICBjYWxs
UHJlZmxpZ2h0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBjYWxsQ2hlY2soRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCisg
ICAgdm9pZCBjYWxsQ2hlY2soKQogICAgIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gTm9FeGNlcHRp
b25zKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6
OmVuYWJsZUV4Y2VwdGlvbkZ1enooKSkKICAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enopKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU3LDEz
ICszNTcsOCBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBjb25z
dCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0
aW9uLCB2ZWN0b3IpOyB9CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVy
biBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFs
dWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBm
dW5jdGlvbiwgYXJnMSk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1
ZSBhcmcxLCBMVmFsdWUgYXJnMikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rp
b24sIGFyZzEsIGFyZzIpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFs
dWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczKSB7IHJldHVybiBidWlsZENhbGwobV9i
dWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMyk7IH0KLSAgICBMVmFsdWUgY2FsbChM
VmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExW
YWx1ZSBhcmc0KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwg
YXJnMiwgYXJnMywgYXJnNCk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExW
YWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUg
YXJnNSkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIs
IGFyZzMsIGFyZzQsIGFyZzUpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBM
VmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVl
IGFyZzUsIExWYWx1ZSBhcmc2KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlv
biwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNik7IH0KLSAgICBMVmFsdWUgY2Fs
bChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMs
IExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1ZSBhcmc3KSB7IHJl
dHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJn
NCwgYXJnNSwgYXJnNiwgYXJnNyk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24s
IExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFs
dWUgYXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1ZSBhcmc3LCBMVmFsdWUgYXJnOCkgeyByZXR1cm4g
YnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFy
ZzUsIGFyZzYsIGFyZzcsIGFyZzgpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
KyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBBcmdzLi4uIGFy
Z3MpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmdzLi4u
KTsgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KICAgICBMVmFs
dWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5jdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNiArNDksMTAgQEAg
U3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICAsIG1vZHVsZSgwKQogICAgICwgZnVuY3Rp
b24oMCkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDApCisgICAgLCBoYW5kbGVTdGFja092ZXJm
bG93RXhjZXB0aW9uU3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAsIGhhbmRsZUV4Y2VwdGlvblN0
YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBjYXB0dXJlZFN0YWNrbWFwSUQoVUlOVF9NQVgpCisg
ICAgLCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQoVUlOVF9NQVgpCiAgICAgLCB1bndpbmRE
YXRhU2VjdGlvbigwKQogICAgICwgdW53aW5kRGF0YVNlY3Rpb25TaXplKDApCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYs
NiArMzYsNyBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5h
bGl6ZXIuaCIKICNpbmNsdWRlICJGVExKU0NhbGwuaCIKKyNpbmNsdWRlICJGVExKU0NhbGxWYXJh
cmdzLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIK
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTcxLDEwICs3MiwxMiBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQ7CiAg
ICAgdW5zaWduZWQgaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRDsKICAgICB1bnNpZ25lZCBjYXB0
dXJlZFN0YWNrbWFwSUQ7CisgICAgdW5zaWduZWQgdmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElE
OwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3JpcHRvcj4gZ2V0QnlJZHM7CiAgICAg
U2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9yPiBwdXRCeUlkczsKICAgICBTZWdtZW50
ZWRWZWN0b3I8Q2hlY2tJbkRlc2NyaXB0b3I+IGNoZWNrSW5zOwogICAgIFZlY3RvcjxKU0NhbGw+
IGpzQ2FsbHM7CisgICAgVmVjdG9yPEpTQ2FsbFZhcmFyZ3M+IGpzQ2FsbFZhcmFyZ3NlczsKICAg
ICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsKICAgICBWZWN0b3I8Q1N0cmluZz4g
ZGF0YVNlY3Rpb25OYW1lczsKICAgICB2b2lkKiB1bndpbmREYXRhU2VjdGlvbjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
cmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIEpTVmFsdWUg
ZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICByZXR1cm4gaW50ZXJwcmV0ZXItPmV4ZWN1
dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4pOwogfQogCi11
bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1N0YWNr
KiBzdGFjaywgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1
aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3Vuc2lnbmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09m
ZnNldCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgaWYgKCFhcmd1bWVudHMpCkBAIC0x
NTYsNiArMTU2LDEzIEBAIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiAK
ICAgICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAgCisgICAgcmV0dXJuIGxlbmd0aDsK
K30KKwordW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNTdGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tT
bG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit7CisgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc2l6ZU9mVmFyYXJncyhjYWxsRnJhbWUsIGFyZ3VtZW50cywgZmlyc3RWYXJBcmdPZmZzZXQp
OworICAgIAogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBjYWxsZWVGcmFtZUZvclZhcmFy
Z3MoY2FsbEZyYW1lLCBudW1Vc2VkU3RhY2tTbG90cywgbGVuZ3RoICsgMSk7CiAgICAgaWYgKGxl
bmd0aCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzIHx8ICFzdGFjay0+ZW5zdXJlQ2FwYWNpdHlG
b3IoY2FsbGVlRnJhbWUtPnJlZ2lzdGVycygpKSkgewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcihjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDgsNiArMzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWU6
OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gcGFkZGVkQ2FsbGVlRnJhbWVPZmZzZXQp
OwogICAgIH0KIAorICAgIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBleGVjLCBK
U1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIHVuc2ln
bmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBleGVjLCBKU1N0YWNrKiwgSlNWYWx1
ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZh
ckFyZ09mZnNldCk7CiAgICAgdm9pZCBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWNDYWxsZXIs
IFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMy
X3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUo
Q2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgYXJn
dW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDcgKzE0OSwxMCBAQCB2
b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZShDYWxsCiAKICAgICAgICAgbV9mcmFt
ZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxG
cmFtZSA9IGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZy
YW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51
bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
OwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGlu
ZUNvZGVCbG9jaygpOwogICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQgPSBjb2RlT3Jp
Z2luLT5ieXRlY29kZUluZGV4OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjEyLDE1ICsyMTIsMjcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhbGxFeGNl
cHRpb25GdXp6KAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygp
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCi1Bc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQp
CitBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hl
Y2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQsIEV4Y2VwdGlvbkp1bXBXaWR0aCB3aWR0aCkKIHsK
ICAgICBjYWxsRXhjZXB0aW9uRnV6eigpOworCisgICAgaWYgKHdpZHRoID09IEZhckp1bXBXaWR0
aCkKKyAgICAgICAga2luZCA9IChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gSW52ZXJ0
ZWRFeGNlcHRpb25DaGVjayA6IE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKICAgICAKKyAgICBKdW1w
IHJlc3VsdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2lu
ZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJl
c3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKKyAgICByZXN1bHQgPSBicmFuY2hUZXN0
NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0
ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKICNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgcmV0dXJuIGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sg
PyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwor
ICAgIHJlc3VsdCA9IGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RF
cXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0o
KS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlm
CisgICAgCisgICAgaWYgKHdpZHRoID09IE5vcm1hbEp1bXBXaWR0aCkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIHJlYWxKdW1wID0gcGF0Y2hhYmxlSnVt
cCgpOworICAgIHJlc3VsdC5saW5rKHRoaXMpOworICAgIAorICAgIHJldHVybiByZWFsSnVtcC5t
X2p1bXA7CiB9CiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRo
VHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBS
ZWdpc3RlcklEIGRlc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzM4
LDYgKzMzOCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NG
b3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7CisgICAgICAgIC8vIE5C
LiBJdCdzIHRlbXB0aW5nIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBzb21ldGltZXMgdXNlIGFu
IG9mZnNldCBmcm9tIHRoZSBzdGFjaworICAgICAgICAvLyByZWdpc3RlciBiZWNhdXNlIGZvciBz
b21lIG9mZnNldHMgdGhhdCB3aWxsIGVuY29kZSB0byBhIHNtYWxsZXIgaW5zdHJ1Y3Rpb24uIEJ1
dCB3ZQorICAgICAgICAvLyBjYW5ub3QgZG8gdGhpcy4gV2UgdXNlIHRoaXMgaW4gcGxhY2VzIHdo
ZXJlIHRoZSBzdGFjayBwb2ludGVyIGhhcyBiZWVuIG1vdmVkIHRvIHNvbWUKKyAgICAgICAgLy8g
dW5wcmVkaWN0YWJsZSBsb2NhdGlvbi4KICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5p
c1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAg
fQpAQCAtMzY3LDM5ICszNzEsMzkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0
byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lU2xv
dChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IHNsb3Qp
CiAgICAgewogICAgICAgICBBU1NFUlQoc2xvdCA+PSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBD
U2l6ZSk7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSk7CisgICAgICAgIHJldHVybiBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBKU1N0YWNrOjpD
YWxsZXJGcmFtZUFuZFBDU2l6ZSkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4
ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50U2xvdChpbnQg
YXJndW1lbnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRTbG90KGludCBhcmd1
bWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKTsKICAgICB9CiAKLSAgICBBZGRyZXNz
IGNhbGxlZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVG
cmFtZVRhZ1Nsb3QoaW50IHNsb3QpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVT
bG90KHNsb3QpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNh
bGxlZUZyYW1lUGF5bG9hZFNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVl
RnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVG
cmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CiAKLSAgICBB
ZGRyZXNzIGNhbGxlZUFyZ3VtZW50VGFnU2xvdChpbnQgYXJndW1lbnQpCisgICAgc3RhdGljIEFk
ZHJlc3MgY2FsbGVlQXJndW1lbnRUYWdTbG90KGludCBhcmd1bWVudCkKICAgICB7CiAgICAgICAg
IHJldHVybiBjYWxsZWVBcmd1bWVudFNsb3QoYXJndW1lbnQpLndpdGhPZmZzZXQoVGFnT2Zmc2V0
KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50UGF5bG9hZFNsb3QoaW50IGFy
Z3VtZW50KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50UGF5bG9hZFNsb3QoaW50
IGFyZ3VtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUFyZ3VtZW50U2xvdChhcmd1
bWVudCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNh
bGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lQ2Fs
bGVyRnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCgwKS53aXRo
T2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgfQpAQCAtNDA5LDIx
ICs0MTMsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoOChCZWxvdywgQWRkcmVz
cyhjZWxsUmVnLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9i
amVjdFR5cGUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIo
R1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZh
bGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNl
cnZlNCA9IEludmFsaWRHUFJSZWcpCisgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BS
KEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVz
ZXJ2ZTQgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU1ID0gSW52YWxpZEdQUlJlZykK
ICAgICB7Ci0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2Vy
dmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMCAmJiBw
cmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDApCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BS
SW5mbzo6cmVnVDAgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAh
PSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2Vy
dmU1ICE9IEdQUkluZm86OnJlZ1QwKQogICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1Qw
OwogCi0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmUy
ICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVz
ZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDEpCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5m
bzo6cmVnVDEgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMyAhPSBH
UFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmU1
ICE9IEdQUkluZm86OnJlZ1QxKQogICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QxOwog
Ci0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUyICE9
IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2
ZTQgIT0gR1BSSW5mbzo6cmVnVDIpCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6
cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZlMyAhPSBHUFJJ
bmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmU1ICE9
IEdQUkluZm86OnJlZ1QyKQogICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QyOwogCi0g
ICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDMgJiYgcHJlc2VydmUyICE9IEdQ
UkluZm86OnJlZ1QzICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMyAmJiBwcmVzZXJ2ZTQg
IT0gR1BSSW5mbzo6cmVnVDMpCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVn
VDMgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QzICYmIHByZXNlcnZlMyAhPSBHUFJJbmZv
OjpyZWdUMyAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDMgJiYgcHJlc2VydmU1ICE9IEdQ
UkluZm86OnJlZ1QzKQogICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QzOwogCi0gICAg
ICAgIHJldHVybiBHUFJJbmZvOjpyZWdUNDsKKyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJ
bmZvOjpyZWdUNCAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDQgJiYgcHJlc2VydmUzICE9
IEdQUkluZm86OnJlZ1Q0ICYmIHByZXNlcnZlNCAhPSBHUFJJbmZvOjpyZWdUNCAmJiBwcmVzZXJ2
ZTUgIT0gR1BSSW5mbzo6cmVnVDQpCisgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDQ7
CisKKyAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1Q1OwogICAgIH0KIAogICAgIC8vIEFkZCBh
IGRlYnVnIGNhbGwuIFRoaXMgY2FsbCBoYXMgbm8gZWZmZWN0IG9uIEpJVCBjb2RlIGV4ZWN1dGlv
biBzdGF0ZS4KQEAgLTU3MSw3ICs1NzgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsRXhjZXB0
aW9uRnV6eigpOwogICAgIAogICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsgTm9ybWFsRXhj
ZXB0aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKLSAgICBKdW1wIGVtaXRFeGNl
cHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNr
KTsKKyAgICBlbnVtIEV4Y2VwdGlvbkp1bXBXaWR0aCB7IE5vcm1hbEp1bXBXaWR0aCwgRmFySnVt
cFdpZHRoIH07CisgICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soCisgICAgICAgIEV4Y2VwdGlv
bkNoZWNrS2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25KdW1wV2lkdGggPSBO
b3JtYWxKdW1wV2lkdGgpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIHN0
YXRpYyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBsaW5n
Q291bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxODAxODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yODks
NiArMjg5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwogICAg
IH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
R1BSUmVnIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMykKKyAgICB7
CisgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJn
MSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3Vt
ZW50KGFyZzMpOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJn
MykKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwpAQCAtMjk4LDYgKzMwNywy
OSBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKICAgICB9CiAKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW0zMiBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBU
cnVzdGVkSW1tMzIgYXJnNSkKKyAgICB7CisgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwor
ICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcy
KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgICAgICBhZGRDYWxsQXJndW1l
bnQoYXJnNCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc1KTsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0z
MiBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0LCBHUFJS
ZWcgYXJnNSwgVHJ1c3RlZEltbTMyIGFyZzYpCisgICAgeworICAgICAgICByZXNldENhbGxBcmd1
bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAgICBhZGRDYWxsQXJn
dW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKKyAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzQpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNSk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmc2KTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7
CkBAIC0xNzc3LDYgKzE4MDksMTUgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0KIAorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMy
IGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0
ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxHUFJJbmZv
Ojphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSND4oYXJnMiwgYXJnNCk7CisgICAg
ICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShhcmcz
LCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBtb3ZlKGFyZzUsIEdQUkluZm86OmFy
Z3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcy
LCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQogICAg
IHsKICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMz4oYXJnMiwgYXJnMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0dQUkluZm8uaAkocmV2aXNpb24gMTgwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6
ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0g
WDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25Q
cmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OmVzaTsKKyAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gWDg2UmVnaXN0ZXJzOjpyMTA7
CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRjaFJlZ2lzdGVyID0gTWFj
cm9Bc3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3RlcjsKIAogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdp
c3Rlcih1bnNpZ25lZCBpbmRleCkKQEAgLTU3Nyw2ICs1NzgsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MDsgLy8g
cmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IEFSTTY0UmVn
aXN0ZXJzOjp4MTsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZl
ZE5vblJldHVybkdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MjsKKyAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gQVJNNjRSZWdpc3RlcnM6Ong4OwogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgcGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IEFSTTY0UmVn
aXN0ZXJzOjppcDA7CiAKICAgICAvLyBHUFJSZWcgbWFwcGluZyBpcyBkaXJlY3QsIHRoZSBtYWNo
aW5lIHJlZ3NpdGVyIG51bWJlcnMgY2FuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CShyZXZpc2lvbiAxODAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2NCwxMSArNDY0LDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklU
Ojpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0g
ZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIERGRzo6Q2FuSW5saW5lOgotICAgICAgICBtX2NhbkJlT3B0aW1pemVk
ID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwotICAg
ICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKICAgICBj
YXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToK
ICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShPcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwotICAgICAgICB2b2lkIGNvbXBpbGVTZXR1
cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZh
cmFyZ3NGcmFtZShJbnN0cnVjdGlvbiosIENhbGxMaW5rSW5mbyopOwogICAgICAgICB2b2lkIGNv
bXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxODAx
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3Qo
SW5zdHJ1Y3Rpb24qCiAgICAgY29tcGlsZU9wQ2FsbChvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVT
ZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29t
cGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJ
bmZvKiBpbmZvKQogewogICAgIGludCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CiAgICAgaW50IGFyZ3VtZW50cyA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE1
MCw2ICsxNTAsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cgog
ICAgIGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgZW5kLmxpbmsodGhpcyk7CiAKKyAgICAvLyBQ
cm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNT
dGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAgIGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVu
dHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAs
IHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRlZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCBy
ZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmsodGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAm
aW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAg
CiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAgICAgZW1pdExvYWQodGhpc1ZhbHVlLCByZWdU
MiwgcmVnVDApOwogICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFBheWxvYWRPZmZz
ZXQgKyAoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKSk7CkBAIC0xOTgsNiArMjA4LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydQogCiB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNv
ZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCkKIHsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRk
Q2FsbExpbmtJbmZvKCk7CiAgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CkBAIC0yMTQsNyArMjI1LDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgICovCiAgICAgCiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFy
YXJncykKLSAgICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKGluc3RydWN0aW9uKTsKKyAg
ICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKGluc3RydWN0aW9uLCBpbmZvKTsKICAgICBl
bHNlIHsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwog
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpA
QCAtMjM5LDggKzI1MCw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29k
ZUkKICAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0
YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9h
ZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgIHN0b3JlMzIocmVnVDEs
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkNhbGxlZSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKIAotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRD
YWxsTGlua0luZm8oKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKICAg
ICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0aW9uKTsKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxODAxODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw3ICs1NSw3IEBAIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChJbnN0cnVjdGlvbioK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxl
U2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQordm9pZCBKSVQ6OmNv
bXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENhbGxMaW5r
SW5mbyogaW5mbykKIHsKICAgICBpbnQgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwogICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CkBAIC05
MCw2ICs5MCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RyCiAg
ICAgaWYgKGNhbk9wdGltaXplKQogICAgICAgICBlbmQubGluayh0aGlzKTsKICAgICAKKyAgICAv
LyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwg
SlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAgIGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1
bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVn
VDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRlZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVh
bCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUp
LCByZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmsodGhpcyk7CisgICAgc3RvcmU4KHJlZ1Qy
LCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7Cisg
ICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih0aGlzVmFsdWUsIHJlZ1QwKTsKICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBD
YWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSkpOwpAQCAtMTM0LDYgKzE0NCw4IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShJbnN0cnUKIAogdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bj
b2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpCiB7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbygpOworCiAgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIAog
ICAgIC8qIENhbGxlciBhbHdheXM6CkBAIC0xNTIsNyArMTY0LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5H
VEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9j
YWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBDT01QSUxFX0FT
U0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0
X3ZhcmFyZ3MpLCBjYWxsX2FuZF9jb25zdHJ1Y3RfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2Ft
ZV9sZW5ndGgpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCi0gICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NG
cmFtZShpbnN0cnVjdGlvbik7CisgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0
cnVjdGlvbiwgaW5mbyk7CiAgICAgZWxzZSB7CiAgICAgICAgIGludCBhcmdDb3VudCA9IGluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE3Niw5ICsxODgsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgCi0gICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotCi0g
ICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgeworICAgaWYgKG9wY29kZUlEID09IG9w
X2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgdHlw
ZWRlZiBpbnQ2NF90IEpJVF9PUEVSQVRJT04oKlFfSklUT3BlcgogdHlwZWRlZiBpbnQzMl90IEpJ
VF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9EKShkb3VibGUpOwogdHlwZWRlZiBpbnQzMl90
IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYg
aW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopOwordHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9F
SlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKIHR5cGVkZWYgaW50MzJf
dCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRUpaWikoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElP
TiAoKlNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0
eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTE4OSw2ICsxOTAsNyBAQCB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VWd3NKKShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBF
bmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9O
ICgqVl9KSVRPcGVyYXRpb25fRVpKKShFeGVjU3RhdGUqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1
ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaSlpaWiko
RXhlY1N0YXRlKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QsIGlu
dDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0p
KEV4ZWNTdGF0ZSosIFZNKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fWikoaW50MzJfdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkocmV2aXNpb24gMTgwMTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSwxMSArMTAxLDMxIEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENh
c2UoQ0NhbGwKIAogdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJS
ZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgdW5zaWduZWQgZmlyc3RWYXJBcmdP
ZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKQogewotICAgIGVtaXRTZXR1
cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKAotICAgICAgICBqaXQsIG51bVVzZWRTbG90c0dQUiwgc2Ny
YXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywKLSAgICAgICAgVmFsdWVSZWNvdmVy
eTo6ZGlzcGxhY2VkSW5KU1N0YWNrKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSwgRGF0YUZvcm1hdEludDMyKSwKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXQoMCkpLAotICAgICAgICBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nh
c2UpOworICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgbnVtVXNlZFNsb3Rz
R1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBudWxscHRyLCBmaXJz
dFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworfQorCit2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFt
ZUZhc3RDYXNlKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJS
ZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCBJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZz
ZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKQoreworICAgIFZhbHVlUmVjb3Zl
cnkgYXJndW1lbnRDb3VudFJlY292ZXJ5OworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdEFyZ3Vt
ZW50UmVnOworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVy
eSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciwgRGF0YUZvcm1hdEludDMyKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZh
bHVlUmVjb3Zlcnk6OmNvbnN0YW50KAorICAgICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgPiAxKQorICAgICAgICAgICAgZmlyc3RBcmd1
bWVudFJlZyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3Rlcigp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJl
Z2lzdGVyKDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9
IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAg
ICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50
T2Zmc2V0KDApKTsKKyAgICB9CisgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0
LCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMs
IGFyZ3VtZW50Q291bnRSZWNvdmVyeSwgZmlyc3RBcmd1bWVudFJlZywgZmlyc3RWYXJBcmdPZmZz
ZXQsIHNsb3dDYXNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCShyZXZpc2lvbiAxODAxODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0
Q2FzZShDQ2FsbAogLy8gVmFyaWFudCB0aGF0IGFzc3VtZXMgbm9ybWFsIHN0YWNrIGZyYW1lLgog
dm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
bnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwg
R1BSUmVnIHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJzdFZhckFyZ09mZnNldCwgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2UpOwogCisvLyBWYXJpYW50IGZvciBwb3RlbnRpYWxseSBp
bmxpbmVkIHN0YWNrIGZyYW1lcy4KK3ZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIx
LCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgSW5saW5lQ2FsbEZyYW1l
KiwgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNs
b3dDYXNlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9u
IDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgc3Rh
dGljIEFyZ3VtZW50cyogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBBcmd1bWVudHNNb2RlIG1vZGUgPSBOb3JtYWxB
cmd1bWVudHNDcmVhdGlvbk1vZGUpCiAgICAgewotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50
cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwgb2Zmc2V0
T2ZJbmxpbmVSZWdpc3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoaW5saW5l
Q2FsbEZyYW1lKSkpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOworICAgICAgICBBcmd1bWVudHMqIGFy
Z3VtZW50cyA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4odm0uaGVhcCwg
b2Zmc2V0T2ZJbmxpbmVSZWdpc3RlckFycmF5KCkgKyByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMo
Y2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CiAgICAg
ICAgIGFyZ3VtZW50cy0+ZmluaXNoQ3JlYXRpb24oY2FsbEZyYW1lLCBpbmxpbmVDYWxsRnJhbWUs
IG1vZGUpOwogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KQEAgLTEyNCw3ICsxMjQs
MTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5lY2Vzc2Fy
eShFeGVjU3RhdGUqKTsKIAogICAgIHN0YXRpYyBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5
dGVzKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSAqIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyB9Ci0gICAgc3RhdGljIHNpemVf
dCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogKGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpOyB9CisgICAgc3RhdGljIHNpemVfdCByZWdpc3Rl
ckFycmF5U2l6ZUluQnl0ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5v
ZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
OworICAgICAgICByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKKyAgICB9CiAgICAgYm9vbCBpc0FyZ3VtZW50KHNp
emVfdCk7CiAgICAgYm9vbCB0cnlTZXRBcmd1bWVudChWTSYsIHNpemVfdCBhcmd1bWVudCwgSlNW
YWx1ZSk7CiAgICAgSlNWYWx1ZSB0cnlHZXRBcmd1bWVudChzaXplX3QgYXJndW1lbnQpOwpAQCAt
MzQwLDExICszNDgsMTUgQEAgaW5saW5lIHZvaWQgQXJndW1lbnRzOjpmaW5pc2hDcmVhdGlvbihD
YQogICAgIG1fb3ZlcnJvZGVDYWxsZWUgPSBmYWxzZTsKICAgICBtX292ZXJyb2RlQ2FsbGVyID0g
ZmFsc2U7CiAgICAgbV9pc1N0cmljdE1vZGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
aW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKS0+aXNTdHJpY3RNb2RlKCk7Ci0KKyAg
ICAKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxp
ZCgpKQorICAgICAgICBtX251bUFyZ3VtZW50cyA9IGNhbGxGcmFtZS0+cihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5vZmZzZXQoKSkudW5ib3hlZEludDMyKCk7CisgICAg
ZWxzZQorICAgICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKTsKKyAgICBtX251bUFyZ3VtZW50cy0tOworICAgIAogICAgIHN3aXRjaCAobW9kZSkg
ewogICAgIGNhc2UgTm9ybWFsQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0gICAgICAgIG1fbnVt
QXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKLSAgICAg
ICAgCiAgICAgICAgIGlmIChtX251bUFyZ3VtZW50cykgewogICAgICAgICAgICAgaW50IG9mZnNl
dEZvckFyZ3VtZW50T25lID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJl
Z2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgICAgICBtX3JlZ2lzdGVycyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkp
ICsgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgLSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5v
ZmZzZXQoKTsKQEAgLTM2MSw3ICszNzMsNiBAQCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlz
aENyZWF0aW9uKENhCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENsb25lZEFyZ3VtZW50c0Ny
ZWF0aW9uTW9kZTogewotICAgICAgICBtX251bUFyZ3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDE7CiAgICAgICAgIGlmIChtX251bUFyZ3VtZW50cykgewogICAg
ICAgICAgICAgaW50IG9mZnNldEZvckFyZ3VtZW50T25lID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CiAgICAgICAgICAgICBtX3JlZ2lz
dGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPio+KGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkpICsgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgLSB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE4MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTEs
NiArMjExLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgLyogZnJv
bSBzdXBlciBsb25nIGNvbXBpbGVzIHRoYXQgdGFrZSBhIGxvdCBvZiBtZW1vcnkuICovXAogICAg
IHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ0NhbGxlclNpemUsIDEwMDAwKSBcCiAgICAgXAor
ICAgIHYodW5zaWduZWQsIG1heGltdW1WYXJhcmdzRm9ySW5saW5pbmcsIDEwMCkgXAorICAgIFwK
ICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50Q2FsbElubGluaW5nLCB0cnVlKSBcCiAgICAg
dihib29sLCBlbmFibGVQb2x5dmFyaWFudEJ5SWRJbmxpbmluZywgdHJ1ZSkgXAogICAgIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29uc3RydWN0LXZhcmFyZ3Mt
aW5saW5lLXNtYWxsZXItRm9vLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvY29uc3RydWN0LXZhcmFyZ3MtaW5saW5lLXNtYWxsZXItRm9vLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1
Y3QtdmFyYXJncy1pbmxpbmUtc21hbGxlci1Gb28uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzNSBAQAorZnVuY3Rpb24gRm9vKGEsIGIpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXku
cHVzaChhcmd1bWVudHNbaV0pOworICAgIHRoaXMuZiA9IGFycmF5OworfQorCitmdW5jdGlvbiBi
YXIoYXJyYXkpIHsKKyAgICByZXR1cm4gbmV3IEZvbyguLi5hcnJheSk7Cit9CisKK25vSW5saW5l
KGJhcik7CisKK2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAh
PSBiLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3Ro
IG1pc21hdGNoOiAiICsgYSArICIgdmVyc3VzICIgKyBiOworICAgIGZvciAodmFyIGkgPSBhLmxl
bmd0aDsgaS0tOykgeworICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiAr
IGEgKyAiIHZlcnN1cyAiICsgYjsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsK
KyAgICB2YXIgZXhwZWN0ZWQgPSBhcnJheTsKKyAgICB2YXIgYWN0dWFsID0gYmFyKGFycmF5KS5m
OworICAgIGNoZWNrRXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGog
PSAwOyBqIDwgaSAlIDY7ICsraikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAgICB0ZXN0KGFy
cmF5KTsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25z
dHJ1Y3QtdmFyYXJncy1pbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1pbmxpbmUuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdz
LWlubGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACitmdW5jdGlvbiBGb28o
YSwgYikgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJn
dW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7Cisg
ICAgdGhpcy5mID0ge2E6YSwgYjpiLCBjOmFycmF5fTsKK30KKworZnVuY3Rpb24gYmFyKGFycmF5
KSB7CisgICAgcmV0dXJuIG5ldyBGb28oLi4uYXJyYXkpOworfQorCitub0lubGluZShiYXIpOwor
CitmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAgICBpZiAoYS5hICE9IGIuYSkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTogIiArIGEuYSArICIgdmVyc3VzICIgKyBi
LmE7CisgICAgaWYgKGEuYiAhPSBiLmIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVl
IG9mIGI6ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5iOworICAgIGlmIChhLmMubGVuZ3RoICE9
IGIuYy5sZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0
aCBtaXNtYXRjaDogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgZm9yICh2YXIgaSA9
IGEuYy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0pCisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiAr
IGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICB9Cit9CisKK2Z1bmN0aW9u
IHRlc3QoYXJyYXkpIHsKKyAgICB2YXIgZXhwZWN0ZWQgPSB7YTphcnJheVswXSwgYjphcnJheVsx
XSwgYzphcnJheX07CisgICAgdmFyIGFjdHVhbCA9IGJhcihhcnJheSkuZjsKKyAgICBjaGVja0Vx
dWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IGkgJSA2
OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7CisgICAgdGVzdChhcnJheSk7Cit9CisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29uc3RydWN0LXZhcmFyZ3Mt
bm8taW5saW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvY29uc3RydWN0LXZhcmFyZ3Mtbm8taW5saW5lLmpzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1uby1pbmxp
bmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorZnVuY3Rpb24gRm9vKGEsIGIp
IHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50
cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkucHVzaChhcmd1bWVudHNbaV0pOworICAgIHRo
aXMuZiA9IHthOmEsIGI6YiwgYzphcnJheX07Cit9CisKK25vSW5saW5lKEZvbyk7CisKK2Z1bmN0
aW9uIGJhcihhcnJheSkgeworICAgIHJldHVybiBuZXcgRm9vKC4uLmFycmF5KTsKK30KKworbm9J
bmxpbmUoYmFyKTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAgaWYgKGEuYSAh
PSBiLmEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAi
IHZlcnN1cyAiICsgYi5hOworICAgIGlmIChhLmIgIT0gYi5iKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKKyAgICBpZiAo
YS5jLmxlbmd0aCAhPSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1
ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAg
IGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChhLmNbaV0gIT0g
Yi5jW2ldKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0
Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgfQor
fQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgdmFyIGV4cGVjdGVkID0ge2E6YXJyYXlb
MF0sIGI6YXJyYXlbMV0sIGM6YXJyYXl9OworICAgIHZhciBhY3R1YWwgPSBiYXIoYXJyYXkpLmY7
CisgICAgY2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsKK30KKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNoKGopOworICAgIHRlc3QoYXJy
YXkpOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dldC1h
cmd1bWVudC1ieS12YWwtaW4taW5saW5lZC12YXJhcmdzLWNhbGwtb3V0LW9mLWJvdW5kcy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dldC1hcmd1
bWVudC1ieS12YWwtaW4taW5saW5lZC12YXJhcmdzLWNhbGwtb3V0LW9mLWJvdW5kcy5qcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LWFyZ3Vt
ZW50LWJ5LXZhbC1pbi1pbmxpbmVkLXZhcmFyZ3MtY2FsbC1vdXQtb2YtYm91bmRzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKK3ZhciBnaTsKKworZnVuY3Rpb24gZm9vKCkgewor
ICAgIHJldHVybiBhcmd1bWVudHNbZ2ldOworfQorCitmdW5jdGlvbiBiYXIoYXJyYXksIGkpIHsK
KyAgICBnaSA9IGk7CisgICAgcmV0dXJuIGZvby5hcHBseSh0aGlzLCBhcnJheSk7Cit9CisKK25v
SW5saW5lKGJhcik7CisKK3ZhciBiaWdBcnJheSA9IFtdOworZm9yICh2YXIgaSA9IDA7IGkgPCA1
MDsgKytpKQorICAgIGJpZ0FycmF5LnB1c2goNDIpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICB2YXIgbWkgPSBpICUgNTA7CisgICAgdmFyIHJlc3VsdCA9IGJhcihi
aWdBcnJheSwgbWkpOworICAgIGlmIChyZXN1bHQgIT09IDQyKQorICAgICAgICB0aHJvdyAiQmFk
IHJlc3VsdCBpbiBmaXJzdCBsb29wOiAiICsgcmVzdWx0ICsgIjsgZXhwZWN0ZWQ6ICIgKyA0MjsK
K30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIG1pID0gaSAl
IDEwMDsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKFs0Ml0sIG1pKTsKKyAgICB2YXIgZXhwZWN0ZWQg
PSBtaSA/IHZvaWQgMCA6IDQyOworICAgIGlmIChyZXN1bHQgIT09IGV4cGVjdGVkKQorICAgICAg
ICB0aHJvdyAiQmFkIHJlc3VsdCBpbiBzZWNvbmQgbG9vcDogIiArIHJlc3VsdCArICI7IGV4cGVj
dGVkOiAiICsgZXhwZWN0ZWQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2dldC1hcmd1bWVudC1ieS12YWwtc2FmZS1pbi1pbmxpbmVkLXZhcmFyZ3MtY2FsbC1v
dXQtb2YtYm91bmRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvZ2V0LWFyZ3VtZW50LWJ5LXZhbC1zYWZlLWluLWlubGluZWQtdmFyYXJncy1jYWxs
LW91dC1vZi1ib3VuZHMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2dldC1hcmd1bWVudC1ieS12YWwtc2FmZS1pbi1pbmxpbmVkLXZhcmFyZ3Mt
Y2FsbC1vdXQtb2YtYm91bmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKK3Zh
ciBnaTsKKworZnVuY3Rpb24gZm9vKCkgeworICAgIGlmICghZWZmZWN0ZnVsNDIoKSkKKyAgICAg
ICAgYXJndW1lbnRzID0gImhlbGxvIjsKKyAgICByZXR1cm4gYXJndW1lbnRzW2dpXTsKK30KKwor
ZnVuY3Rpb24gYmFyKGFycmF5LCBpKSB7CisgICAgZ2kgPSBpOworICAgIHJldHVybiBmb28uYXBw
bHkodGhpcywgYXJyYXkpOworfQorCitub0lubGluZShiYXIpOworCit2YXIgYmlnQXJyYXkgPSBb
XTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkKKyAgICBiaWdBcnJheS5wdXNoKDQyKTsK
KworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIG1pID0gaSAlIDUw
OworICAgIHZhciByZXN1bHQgPSBiYXIoYmlnQXJyYXksIG1pKTsKKyAgICBpZiAocmVzdWx0ICE9
PSA0MikKKyAgICAgICAgdGhyb3cgIkJhZCByZXN1bHQgaW4gZmlyc3QgbG9vcDogIiArIHJlc3Vs
dCArICI7IGV4cGVjdGVkOiAiICsgNDI7Cit9CisKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgdmFyIG1pID0gaSAlIDEwMDsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKFs0
Ml0sIG1pKTsKKyAgICB2YXIgZXhwZWN0ZWQgPSBtaSA/IHZvaWQgMCA6IDQyOworICAgIGlmIChy
ZXN1bHQgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyAiQmFkIHJlc3VsdCBpbiBzZWNvbmQg
bG9vcDogIiArIHJlc3VsdCArICI7IGV4cGVjdGVkOiAiICsgZXhwZWN0ZWQ7Cit9CisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LW15LWFyZ3VtZW50LWJ5LXZh
bC1jcmVhdGVzLWFyZ3VtZW50cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2dldC1teS1hcmd1bWVudC1ieS12YWwtY3JlYXRlcy1hcmd1bWVudHMu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dl
dC1teS1hcmd1bWVudC1ieS12YWwtY3JlYXRlcy1hcmd1bWVudHMuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MiBAQAorZnVuY3Rpb24gYmxhaChhcmdzKSB7CisgICAgdmFyIGFycmF5ID0g
W107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKQorICAgICAgICBh
cnJheS5wdXNoKGFyZ3NbaV0pOworICAgIHJldHVybiBhcnJheTsKK30KKworZnVuY3Rpb24gZm9v
KCkgeworICAgIC8vIEZvcmNlIGNyZWF0aW9uIG9mIGFyZ3VtZW50cyBieSBkb2luZyBvdXQtb2Yt
Ym91bmRzIGFjY2Vzcy4KKyAgICB2YXIgdG1wID0gYXJndW1lbnRzWzQyXTsKKyAgICAKKyAgICAv
LyBVc2UgdGhlIGNyZWF0ZWQgYXJndW1lbnRzIG9iamVjdC4KKyAgICByZXR1cm4gYmxhaChhcmd1
bWVudHMpOworfQorCitmdW5jdGlvbiBiYXIoYXJyYXkpIHsKKyAgICByZXR1cm4gZm9vLmFwcGx5
KHRoaXMsIGFycmF5KTsKK30KKworbm9JbmxpbmUoYmxhaCk7Citub0lubGluZShiYXIpOworCitm
dW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgp
CisgICAgICAgIHRocm93ICJFcnJvcjogbGVuZ3RoIG1pc21hdGNoOiAiICsgYSArICIgdmVyc3Vz
ICIgKyBiOworICAgIGZvciAodmFyIGkgPSBhLmxlbmd0aDsgaS0tOykgeworICAgICAgICBpZiAo
YVtpXSAhPSBiW2ldKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBtaXNtYXRjaCBhdCBpID0g
IiArIGkgKyAiOiAiICsgYSArICIgdmVyc3VzICIgKyBiOworICAgIH0KK30KKworZnVuY3Rpb24g
dGVzdChhcnJheSkgeworICAgIHZhciBhY3R1YWwgPSBiYXIoYXJyYXkpOworICAgIGNoZWNrRXF1
YWwoYWN0dWFsLCBhcnJheSk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAlIDY7ICsr
aikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAgICB0ZXN0KGFycmF5KTsKK30KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5l
ZC1jYWxsLWV4aXQtaW4tZm9vLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWV4aXQtaW4tZm9v
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9s
b2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtZXhpdC1pbi1mb28uanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NiBAQAorZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICB2YXIgYXJyYXkg
PSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgYXJyYXkucHVzaChhcmd1bWVudHNbaV0gKyAxKTsKKyAgICByZXR1cm4ge2E6YSwgYjpi
LCBjOmFycmF5fTsKK30KKworZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJuIGZvby5h
cHBseSh0aGlzLCBhcnJheSk7Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGNoZWNr
RXF1YWwoYSwgYikgeworICAgIGlmIChhLmEgIT0gYi5hKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKKyAgICBpZiAoYS5i
ICE9IGIuYikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiAr
ICIgdmVyc3VzICIgKyBiLmI7CisgICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsg
YS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBmb3IgKHZhciBpID0gYS5jLmxlbmd0aDsgaS0t
OykgeworICAgICAgICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBhLmMg
KyAiIHZlcnN1cyAiICsgYi5jOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgewor
ICAgIHZhciBleHBlY3RlZCA9IHthOmFycmF5WzBdLCBiOmFycmF5WzFdLCBjOmFycmF5Lm1hcChm
dW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWUgKyAxIH0pfTsKKyAgICB2YXIgYWN0dWFsID0g
YmFyKGFycmF5KTsKKyAgICBjaGVja0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQorCisvLyBU
aGlzIGlzIHByZXR0eSBkdW1iLiBXZSBuZWVkIHRvIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBW
TSBpcyBwcmVwYXJlZCBmb3IgZG91YmxlIGFycmF5cyBiZWluZworLy8gY3JlYXRlZC4KK3ZhciBh
cnJheSA9IFtdOworYXJyYXkucHVzaCg0Mik7CithcnJheS5wdXNoKDQyLjUpOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7CisgICAg
dGVzdChhcnJheSk7Cit9CisKK3Rlc3QoWzEuNSwgMi41LCAzLjVdKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxs
LWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtaW5saW5lZC5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRo
ZW4taW5saW5lZC1jYWxsLWlubGluZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBA
QAorZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkucHVzaChh
cmd1bWVudHNbaV0pOworICAgIHJldHVybiB7YTphLCBiOmIsIGM6YXJyYXl9OworfQorCitmdW5j
dGlvbiBiYXIoYXJyYXkpIHsKKyAgICByZXR1cm4gZm9vLmFwcGx5KHRoaXMsIGFycmF5KTsKK30K
KworZnVuY3Rpb24gYmF6KGFycmF5KSB7CisgICAgcmV0dXJuIGJhcihhcnJheSk7Cit9CisKK25v
SW5saW5lKGJheik7CisKK2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgeworICAgIGlmIChhLmEg
IT0gYi5hKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsg
IiB2ZXJzdXMgIiArIGIuYTsKKyAgICBpZiAoYS5iICE9IGIuYikKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7CisgICAgaWYg
KGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAg
ICBmb3IgKHZhciBpID0gYS5jLmxlbmd0aDsgaS0tOykgeworICAgICAgICBpZiAoYS5jW2ldICE9
IGIuY1tpXSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21h
dGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIH0K
K30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIHZhciBleHBlY3RlZCA9IHthOmFycmF5
WzBdLCBiOmFycmF5WzFdLCBjOmFycmF5fTsKKyAgICB2YXIgYWN0dWFsID0gYmF6KGFycmF5KTsK
KyAgICBjaGVja0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQorCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBqID0g
MDsgaiA8IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7CisgICAgdGVzdChhcnJh
eSk7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbG9hZC12
YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZh
cmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBA
QAorZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkucHVzaChh
cmd1bWVudHNbaV0pOworICAgIHJldHVybiB7YTphLCBiOmIsIGM6YXJyYXl9OworfQorCitmdW5j
dGlvbiBiYXIoYXJyYXkpIHsKKyAgICByZXR1cm4gZm9vLmFwcGx5KHRoaXMsIGFycmF5KTsKK30K
Kworbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAgaWYg
KGEuYSAhPSBiLmEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBh
LmEgKyAiIHZlcnN1cyAiICsgYi5hOworICAgIGlmIChhLmIgIT0gYi5iKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKKyAg
ICBpZiAoYS5jLmxlbmd0aCAhPSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5j
OworICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChhLmNb
aV0gIT0gYi5jW2ldKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywg
bWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7Cisg
ICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgdmFyIGV4cGVjdGVkID0ge2E6
YXJyYXlbMF0sIGI6YXJyYXlbMV0sIGM6YXJyYXl9OworICAgIHZhciBhY3R1YWwgPSBiYXIoYXJy
YXkpOworICAgIGNoZWNrRXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9CisKK2ZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFy
IGogPSAwOyBqIDwgaSAlIDY7ICsraikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAgICB0ZXN0
KGFycmF5KTsKK30KKwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwMjA2KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTUtMDItMTYgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBERkcgc2hvdWxkIHJlYWxs
eSBzdXBwb3J0IHZhcmFyZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MTMzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgQWRkcyBhIHZlcnNpb24gb2YgZGVsdGFibHVlIHRoYXQgdXNlcyBy
ZXN0IGFyZ3VtZW50cyBwcm9mdXNlbHkuIFRoaXMgc3BlZWRzIHVwIGJ5IDIwJSB3aXRoIHRoaXMK
KyAgICAgICAgcGF0Y2guIEkgYmVsaWV2ZSB0aGF0IHRoZSBtYWNoaW5lcnkgdGhhdCB0aGlzIHBh
dGNoIHB1dHMgaW4gcGxhY2Ugd2lsbCBhbGxvdyB1cyB0byB1bHRpbWF0ZWx5CisgICAgICAgIHJ1
biBkZWx0YWJsdWUtdmFyYXJncyBhdCB0aGUgc2FtZSBzdGVhZHktc3RhdGUgcGVyZm9ybWFuY2Ug
YXMgbm9ybWFsIGRlbHRhYmx1ZS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvZGVsdGFibHVlLXZh
cmFyZ3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2RlbHRhYmx1
ZS12YXJhcmdzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2RlbHRhYmx1ZS12YXJhcmdzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFyZ3MpOgorICAgICAgICAo
T2JqZWN0LnByb3RvdHlwZS5pbmhlcml0c0Zyb20pOgorICAgICAgICAoT3JkZXJlZENvbGxlY3Rp
b24pOgorICAgICAgICAoT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLmFkZCk6CisgICAgICAg
IChPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5cGUuYXQpOgorICAgICAgICAoT3JkZXJlZENvbGxl
Y3Rpb24ucHJvdG90eXBlLnNpemUpOgorICAgICAgICAoT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90
eXBlLnJlbW92ZUZpcnN0KToKKyAgICAgICAgKE9yZGVyZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5y
ZW1vdmUpOgorICAgICAgICAoU3RyZW5ndGgpOgorICAgICAgICAoU3RyZW5ndGguc3Ryb25nZXIp
OgorICAgICAgICAoU3RyZW5ndGgud2Vha2VyKToKKyAgICAgICAgKFN0cmVuZ3RoLndlYWtlc3RP
Zik6CisgICAgICAgIChTdHJlbmd0aC5zdHJvbmdlc3QpOgorICAgICAgICAoU3RyZW5ndGgucHJv
dG90eXBlLm5leHRXZWFrZXIpOgorICAgICAgICAoQ29uc3RyYWludCk6CisgICAgICAgIChDb25z
dHJhaW50LnByb3RvdHlwZS5hZGRDb25zdHJhaW50KToKKyAgICAgICAgKENvbnN0cmFpbnQucHJv
dG90eXBlLnNhdGlzZnkpOgorICAgICAgICAoQ29uc3RyYWludC5wcm90b3R5cGUuZGVzdHJveUNv
bnN0cmFpbnQpOgorICAgICAgICAoQ29uc3RyYWludC5wcm90b3R5cGUuaXNJbnB1dCk6CisgICAg
ICAgIChVbmFyeUNvbnN0cmFpbnQpOgorICAgICAgICAoVW5hcnlDb25zdHJhaW50LnByb3RvdHlw
ZS5hZGRUb0dyYXBoKToKKyAgICAgICAgKFVuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuY2hvb3Nl
TWV0aG9kKToKKyAgICAgICAgKFVuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuaXNTYXRpc2ZpZWQp
OgorICAgICAgICAoVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5tYXJrSW5wdXRzKToKKyAgICAg
ICAgKFVuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUub3V0cHV0KToKKyAgICAgICAgKFVuYXJ5Q29u
c3RyYWludC5wcm90b3R5cGUucmVjYWxjdWxhdGUpOgorICAgICAgICAoVW5hcnlDb25zdHJhaW50
LnByb3RvdHlwZS5tYXJrVW5zYXRpc2ZpZWQpOgorICAgICAgICAoVW5hcnlDb25zdHJhaW50LnBy
b3RvdHlwZS5pbnB1dHNLbm93bik6CisgICAgICAgIChVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBl
LnJlbW92ZUZyb21HcmFwaCk6CisgICAgICAgIChTdGF5Q29uc3RyYWludCk6CisgICAgICAgIChT
dGF5Q29uc3RyYWludC5wcm90b3R5cGUuZXhlY3V0ZSk6CisgICAgICAgIChFZGl0Q29uc3RyYWlu
dC5wcm90b3R5cGUuaXNJbnB1dCk6CisgICAgICAgIChFZGl0Q29uc3RyYWludC5wcm90b3R5cGUu
ZXhlY3V0ZSk6CisgICAgICAgIChCaW5hcnlDb25zdHJhaW50KToKKyAgICAgICAgKEJpbmFyeUNv
bnN0cmFpbnQucHJvdG90eXBlLmNob29zZU1ldGhvZCk6CisgICAgICAgIChCaW5hcnlDb25zdHJh
aW50LnByb3RvdHlwZS5hZGRUb0dyYXBoKToKKyAgICAgICAgKEJpbmFyeUNvbnN0cmFpbnQucHJv
dG90eXBlLmlzU2F0aXNmaWVkKToKKyAgICAgICAgKEJpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBl
Lm1hcmtJbnB1dHMpOgorICAgICAgICAoQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuaW5wdXQp
OgorICAgICAgICAoQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUub3V0cHV0KToKKyAgICAgICAg
KEJpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLnJlY2FsY3VsYXRlKToKKyAgICAgICAgKEJpbmFy
eUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtVbnNhdGlzZmllZCk6CisgICAgICAgIChCaW5hcnlD
b25zdHJhaW50LnByb3RvdHlwZS5pbnB1dHNLbm93bik6CisgICAgICAgIChCaW5hcnlDb25zdHJh
aW50LnByb3RvdHlwZS5yZW1vdmVGcm9tR3JhcGgpOgorICAgICAgICAoU2NhbGVDb25zdHJhaW50
KToKKyAgICAgICAgKFNjYWxlQ29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9HcmFwaCk6CisgICAg
ICAgIChTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaCk6CisgICAgICAg
IChTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtJbnB1dHMpOgorICAgICAgICAoU2NhbGVD
b25zdHJhaW50LnByb3RvdHlwZS5leGVjdXRlKToKKyAgICAgICAgKFNjYWxlQ29uc3RyYWludC5w
cm90b3R5cGUucmVjYWxjdWxhdGUpOgorICAgICAgICAoRXF1YWxpdHlDb25zdHJhaW50KToKKyAg
ICAgICAgKEVxdWFsaXR5Q29uc3RyYWludC5wcm90b3R5cGUuZXhlY3V0ZSk6CisgICAgICAgIChW
YXJpYWJsZSk6CisgICAgICAgIChWYXJpYWJsZS5wcm90b3R5cGUuYWRkQ29uc3RyYWludCk6Cisg
ICAgICAgIChWYXJpYWJsZS5wcm90b3R5cGUucmVtb3ZlQ29uc3RyYWludCk6CisgICAgICAgIChQ
bGFubmVyKToKKyAgICAgICAgKFBsYW5uZXIucHJvdG90eXBlLmluY3JlbWVudGFsQWRkKToKKyAg
ICAgICAgKFBsYW5uZXIucHJvdG90eXBlLmluY3JlbWVudGFsUmVtb3ZlKToKKyAgICAgICAgKFBs
YW5uZXIucHJvdG90eXBlLm5ld01hcmspOgorICAgICAgICAoUGxhbm5lci5wcm90b3R5cGUubWFr
ZVBsYW4pOgorICAgICAgICAoUGxhbm5lci5wcm90b3R5cGUuZXh0cmFjdFBsYW5Gcm9tQ29uc3Ry
YWludHMpOgorICAgICAgICAoUGxhbm5lci5wcm90b3R5cGUuYWRkUHJvcGFnYXRlKToKKyAgICAg
ICAgKFBsYW5uZXIucHJvdG90eXBlLnJlbW92ZVByb3BhZ2F0ZUZyb20pOgorICAgICAgICAoUGxh
bm5lci5wcm90b3R5cGUuYWRkQ29uc3RyYWludHNDb25zdW1pbmdUbyk6CisgICAgICAgIChQbGFu
KToKKyAgICAgICAgKFBsYW4ucHJvdG90eXBlLmFkZENvbnN0cmFpbnQpOgorICAgICAgICAoUGxh
bi5wcm90b3R5cGUuc2l6ZSk6CisgICAgICAgIChQbGFuLnByb3RvdHlwZS5jb25zdHJhaW50QXQp
OgorICAgICAgICAoUGxhbi5wcm90b3R5cGUuZXhlY3V0ZSk6CisgICAgICAgIChjaGFpblRlc3Qp
OgorICAgICAgICAocHJvamVjdGlvblRlc3QpOgorICAgICAgICAoY2hhbmdlKToKKyAgICAgICAg
KGRlbHRhQmx1ZSk6CisKIDIwMTUtMDItMTYgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIENTUyBKSVQ6IGZpbmlzaCA6bnRoLWxhc3QtY2hpbGQoKQpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJn
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2Rl
bHRhYmx1ZS12YXJhcmdzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvZGVsdGFibHVlLXZhcmFyZ3MKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvZGVsdGFibHVlLXZhcmFyZ3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2RlbHRhYmx1ZS12YXJhcmdzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2RlbHRhYmx1ZS12YXJhcmdzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvZGVsdGFibHVlLXZhcmFyZ3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZGVsdGFibHVlLXZhcmFyZ3Mu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZGVs
dGFibHVlLXZhcmFyZ3MuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9kZWx0YWJsdWUtdmFyYXJncy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg4OSBAQAorLy9AIHNraXAgaWYgJGFyY2hpdGVjdHVyZSA9PSAiYXJtIiBhbmQgJGhvc3RP
UyA9PSAiZGFyd2luIgorLy8gQ29weXJpZ2h0IDIwMDggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAxOTk2IEpvaG4gTWFsb25leSBhbmQg
TWFyaW8gV29sY3prby4KKworLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvcgorLy8gKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorLy8KKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisvLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVT
QQorCisKKy8vIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIERlbHRhQmx1ZSBiZW5jaG1hcmsg
aXMgZGVyaXZlZAorLy8gZnJvbSB0aGUgU21hbGx0YWxrIGltcGxlbWVudGF0aW9uIGJ5IEpvaG4g
TWFsb25leSBhbmQgTWFyaW8KKy8vIFdvbGN6a28uIFNvbWUgcGFydHMgaGF2ZSBiZWVuIHRyYW5z
bGF0ZWQgZGlyZWN0bHksIHdoZXJlYXMKKy8vIG90aGVycyBoYXZlIGJlZW4gbW9kaWZpZWQgbW9y
ZSBhZ2dyZXNpdmVseSB0byBtYWtlIGl0IGZlZWwKKy8vIG1vcmUgbGlrZSBhIEphdmFTY3JpcHQg
cHJvZ3JhbS4KKworLyoqCisgKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIERl
bHRhQmx1ZSBjb25zdHJhaW50LXNvbHZpbmcKKyAqIGFsZ29yaXRobSwgYXMgZGVzY3JpYmVkIGlu
OgorICoKKyAqICJUaGUgRGVsdGFCbHVlIEFsZ29yaXRobTogQW4gSW5jcmVtZW50YWwgQ29uc3Ry
YWludCBIaWVyYXJjaHkgU29sdmVyIgorICogICBCam9ybiBOLiBGcmVlbWFuLUJlbnNvbiBhbmQg
Sm9obiBNYWxvbmV5CisgKiAgIEphbnVhcnkgMTk5MCBDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNN
LAorICogICBhbHNvIGF2YWlsYWJsZSBhcyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24gVFIgODkt
MDgtMDYuCisgKgorICogQmV3YXJlOiB0aGlzIGJlbmNobWFyayBpcyB3cml0dGVuIGluIGEgZ3Jv
dGVzcXVlIHN0eWxlIHdoZXJlCisgKiB0aGUgY29uc3RyYWludCBtb2RlbCBpcyBidWlsdCBieSBz
aWRlLWVmZmVjdHMgZnJvbSBjb25zdHJ1Y3RvcnMuCisgKiBJJ3ZlIGtlcHQgaXQgdGhpcyB3YXkg
dG8gYXZvaWQgZGV2aWF0aW5nIHRvbyBtdWNoIGZyb20gdGhlIG9yaWdpbmFsCisgKiBpbXBsZW1l
bnRhdGlvbi4KKyAqLworCisvLyBUaGlzIHRoaW5nIGlzIGFuIGV2aWwgaGFjayB0aGF0IHdlIHVz
ZSB0aHJvdWdob3V0IHRoaXMgYmVuY2htYXJrIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGlzIGJlbmNo
bWFyayB0bworLy8gc3RyZXNzIG91ciB2YXJhcmdzIGltcGxlbWVudGF0aW9uLiBXZSBhbHNvIGhh
dmUgdGVzdHMgZm9yIHNwZWNpZmljIGZlYXR1cmVzIG9mIHRoZSB2YXJhcmdzIGNvZGUsIGJ1dAor
Ly8gaGF2aW5nIGEgc29tZXdoYXQgbGFyZ2UtaXNoIGJlbmNobWFyayB0aGF0IHVzZXMgdmFyYXJn
cyBhIGxvdCAoZXZlbiBpZiBpdCdzIGluIGEgc2lsbHkgd2F5KSBpcyBncmVhdAorLy8gZm9yIHNo
YWtpbmcgb3V0IGJ1Z3MuCitmdW5jdGlvbiBhcmdzKCkgeworICAgIHZhciBhcnJheSA9IFtdOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBh
cnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCisKKy8qIC0t
LSBPIGIgaiBlIGMgdCAgIE0gbyBkIGUgbCAtLS0gKi8KKworT2JqZWN0LnByb3RvdHlwZS5pbmhl
cml0c0Zyb20gPSBmdW5jdGlvbiAoc2h1cGVyKSB7CisgIGZ1bmN0aW9uIEluaGVyaXRlcigpIHsg
fQorICBJbmhlcml0ZXIucHJvdG90eXBlID0gc2h1cGVyLnByb3RvdHlwZTsKKyAgdGhpcy5wcm90
b3R5cGUgPSBuZXcgSW5oZXJpdGVyKC4uLmFyZ3MoKSk7CisgIHRoaXMuc3VwZXJDb25zdHJ1Y3Rv
ciA9IHNodXBlcjsKK30KKworZnVuY3Rpb24gT3JkZXJlZENvbGxlY3Rpb24oKSB7CisgIHRoaXMu
ZWxtcyA9IG5ldyBBcnJheSguLi5hcmdzKCkpOworfQorCitPcmRlcmVkQ29sbGVjdGlvbi5wcm90
b3R5cGUuYWRkID0gZnVuY3Rpb24gKGVsbSkgeworICB0aGlzLmVsbXMucHVzaCguLi5hcmdzKGVs
bSkpOworfQorCitPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiAoaW5k
ZXgpIHsKKyAgcmV0dXJuIHRoaXMuZWxtc1tpbmRleF07Cit9CisKK09yZGVyZWRDb2xsZWN0aW9u
LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5lbG1zLmxlbmd0
aDsKK30KKworT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLnJlbW92ZUZpcnN0ID0gZnVuY3Rp
b24gKCkgeworICByZXR1cm4gdGhpcy5lbG1zLnBvcCguLi5hcmdzKCkpOworfQorCitPcmRlcmVk
Q29sbGVjdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVsbSkgeworICB2YXIgaW5k
ZXggPSAwLCBza2lwcGVkID0gMDsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsbXMubGVu
Z3RoOyBpKyspIHsKKyAgICB2YXIgdmFsdWUgPSB0aGlzLmVsbXNbaV07CisgICAgaWYgKHZhbHVl
ICE9IGVsbSkgeworICAgICAgdGhpcy5lbG1zW2luZGV4XSA9IHZhbHVlOworICAgICAgaW5kZXgr
KzsKKyAgICB9IGVsc2UgeworICAgICAgc2tpcHBlZCsrOworICAgIH0KKyAgfQorICBmb3IgKHZh
ciBpID0gMDsgaSA8IHNraXBwZWQ7IGkrKykKKyAgICB0aGlzLmVsbXMucG9wKC4uLmFyZ3MoKSk7
Cit9CisKKy8qIC0tLSAqCisgKiBTIHQgciBlIG4gZyB0IGgKKyAqIC0tLSAqLworCisvKioKKyAq
IFN0cmVuZ3RocyBhcmUgdXNlZCB0byBtZWFzdXJlIHRoZSByZWxhdGl2ZSBpbXBvcnRhbmNlIG9m
IGNvbnN0cmFpbnRzLgorICogTmV3IHN0cmVuZ3RocyBtYXkgYmUgaW5zZXJ0ZWQgaW4gdGhlIHN0
cmVuZ3RoIGhpZXJhcmNoeSB3aXRob3V0CisgKiBkaXNydXB0aW5nIGN1cnJlbnQgY29uc3RyYWlu
dHMuICBTdHJlbmd0aHMgY2Fubm90IGJlIGNyZWF0ZWQgb3V0c2lkZQorICogdGhpcyBjbGFzcywg
c28gcG9pbnRlciBjb21wYXJpc29uIGNhbiBiZSB1c2VkIGZvciB2YWx1ZSBjb21wYXJpc29uLgor
ICovCitmdW5jdGlvbiBTdHJlbmd0aChzdHJlbmd0aFZhbHVlLCBuYW1lKSB7CisgIHRoaXMuc3Ry
ZW5ndGhWYWx1ZSA9IHN0cmVuZ3RoVmFsdWU7CisgIHRoaXMubmFtZSA9IG5hbWU7Cit9CisKK1N0
cmVuZ3RoLnN0cm9uZ2VyID0gZnVuY3Rpb24gKHMxLCBzMikgeworICByZXR1cm4gczEuc3RyZW5n
dGhWYWx1ZSA8IHMyLnN0cmVuZ3RoVmFsdWU7Cit9CisKK1N0cmVuZ3RoLndlYWtlciA9IGZ1bmN0
aW9uIChzMSwgczIpIHsKKyAgcmV0dXJuIHMxLnN0cmVuZ3RoVmFsdWUgPiBzMi5zdHJlbmd0aFZh
bHVlOworfQorCitTdHJlbmd0aC53ZWFrZXN0T2YgPSBmdW5jdGlvbiAoczEsIHMyKSB7CisgIHJl
dHVybiB0aGlzLndlYWtlciguLi5hcmdzKHMxLCBzMikpID8gczEgOiBzMjsKK30KKworU3RyZW5n
dGguc3Ryb25nZXN0ID0gZnVuY3Rpb24gKHMxLCBzMikgeworICByZXR1cm4gdGhpcy5zdHJvbmdl
ciguLi5hcmdzKHMxLCBzMikpID8gczEgOiBzMjsKK30KKworU3RyZW5ndGgucHJvdG90eXBlLm5l
eHRXZWFrZXIgPSBmdW5jdGlvbiAoKSB7CisgIHN3aXRjaCAodGhpcy5zdHJlbmd0aFZhbHVlKSB7
CisgICAgY2FzZSAwOiByZXR1cm4gU3RyZW5ndGguV0VBS0VTVDsKKyAgICBjYXNlIDE6IHJldHVy
biBTdHJlbmd0aC5XRUFLX0RFRkFVTFQ7CisgICAgY2FzZSAyOiByZXR1cm4gU3RyZW5ndGguTk9S
TUFMOworICAgIGNhc2UgMzogcmV0dXJuIFN0cmVuZ3RoLlNUUk9OR19ERUZBVUxUOworICAgIGNh
c2UgNDogcmV0dXJuIFN0cmVuZ3RoLlBSRUZFUlJFRDsKKyAgICBjYXNlIDU6IHJldHVybiBTdHJl
bmd0aC5SRVFVSVJFRDsKKyAgfQorfQorCisvLyBTdHJlbmd0aCBjb25zdGFudHMuCitTdHJlbmd0
aC5SRVFVSVJFRCAgICAgICAgPSBuZXcgU3RyZW5ndGgoLi4uYXJncygwLCAicmVxdWlyZWQiKSk7
CitTdHJlbmd0aC5TVE9OR19QUkVGRVJSRUQgPSBuZXcgU3RyZW5ndGgoLi4uYXJncygxLCAic3Ry
b25nUHJlZmVycmVkIikpOworU3RyZW5ndGguUFJFRkVSUkVEICAgICAgID0gbmV3IFN0cmVuZ3Ro
KC4uLmFyZ3MoMiwgInByZWZlcnJlZCIpKTsKK1N0cmVuZ3RoLlNUUk9OR19ERUZBVUxUICA9IG5l
dyBTdHJlbmd0aCguLi5hcmdzKDMsICJzdHJvbmdEZWZhdWx0IikpOworU3RyZW5ndGguTk9STUFM
ICAgICAgICAgID0gbmV3IFN0cmVuZ3RoKC4uLmFyZ3MoNCwgIm5vcm1hbCIpKTsKK1N0cmVuZ3Ro
LldFQUtfREVGQVVMVCAgICA9IG5ldyBTdHJlbmd0aCguLi5hcmdzKDUsICJ3ZWFrRGVmYXVsdCIp
KTsKK1N0cmVuZ3RoLldFQUtFU1QgICAgICAgICA9IG5ldyBTdHJlbmd0aCguLi5hcmdzKDYsICJ3
ZWFrZXN0IikpOworCisvKiAtLS0gKgorICogQyBvIG4gcyB0IHIgYSBpIG4gdAorICogLS0tICov
CisKKy8qKgorICogQW4gYWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIGEgc3lzdGVtLW1haW50
YWluYWJsZSByZWxhdGlvbnNoaXAKKyAqIChvciAiY29uc3RyYWludCIpIGJldHdlZW4gYSBzZXQg
b2YgdmFyaWFibGVzLiBBIGNvbnN0cmFpbnQgc3VwcGxpZXMKKyAqIGEgc3RyZW5ndGggaW5zdGFu
Y2UgdmFyaWFibGU7IGNvbmNyZXRlIHN1YmNsYXNzZXMgcHJvdmlkZSBhIG1lYW5zCisgKiBvZiBz
dG9yaW5nIHRoZSBjb25zdHJhaW5lZCB2YXJpYWJsZXMgYW5kIG90aGVyIGluZm9ybWF0aW9uIHJl
cXVpcmVkCisgKiB0byByZXByZXNlbnQgYSBjb25zdHJhaW50LgorICovCitmdW5jdGlvbiBDb25z
dHJhaW50KHN0cmVuZ3RoKSB7CisgIHRoaXMuc3RyZW5ndGggPSBzdHJlbmd0aDsKK30KKworLyoq
CisgKiBBY3RpdmF0ZSB0aGlzIGNvbnN0cmFpbnQgYW5kIGF0dGVtcHQgdG8gc2F0aXNmeSBpdC4K
KyAqLworQ29uc3RyYWludC5wcm90b3R5cGUuYWRkQ29uc3RyYWludCA9IGZ1bmN0aW9uICgpIHsK
KyAgdGhpcy5hZGRUb0dyYXBoKC4uLmFyZ3MoKSk7CisgIHBsYW5uZXIuaW5jcmVtZW50YWxBZGQo
Li4uYXJncyh0aGlzKSk7Cit9CisKKy8qKgorICogQXR0ZW1wdCB0byBmaW5kIGEgd2F5IHRvIGVu
Zm9yY2UgdGhpcyBjb25zdHJhaW50LiBJZiBzdWNjZXNzZnVsLAorICogcmVjb3JkIHRoZSBzb2x1
dGlvbiwgcGVyaGFwcyBtb2RpZnlpbmcgdGhlIGN1cnJlbnQgZGF0YWZsb3cKKyAqIGdyYXBoLiBB
bnN3ZXIgdGhlIGNvbnN0cmFpbnQgdGhhdCB0aGlzIGNvbnN0cmFpbnQgb3ZlcnJpZGVzLCBpZgor
ICogdGhlcmUgaXMgb25lLCBvciBuaWwsIGlmIHRoZXJlIGlzbid0LgorICogQXNzdW1lOiBJIGFt
IG5vdCBhbHJlYWR5IHNhdGlzZmllZC4KKyAqLworQ29uc3RyYWludC5wcm90b3R5cGUuc2F0aXNm
eSA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIHRoaXMuY2hvb3NlTWV0aG9kKC4uLmFyZ3MobWFyaykp
OworICBpZiAoIXRoaXMuaXNTYXRpc2ZpZWQoLi4uYXJncygpKSkgeworICAgIGlmICh0aGlzLnN0
cmVuZ3RoID09IFN0cmVuZ3RoLlJFUVVJUkVEKQorICAgICAgYWxlcnQoLi4uYXJncygiQ291bGQg
bm90IHNhdGlzZnkgYSByZXF1aXJlZCBjb25zdHJhaW50ISIpKTsKKyAgICByZXR1cm4gbnVsbDsK
KyAgfQorICB0aGlzLm1hcmtJbnB1dHMoLi4uYXJncyhtYXJrKSk7CisgIHZhciBvdXQgPSB0aGlz
Lm91dHB1dCguLi5hcmdzKCkpOworICB2YXIgb3ZlcnJpZGRlbiA9IG91dC5kZXRlcm1pbmVkQnk7
CisgIGlmIChvdmVycmlkZGVuICE9IG51bGwpIG92ZXJyaWRkZW4ubWFya1Vuc2F0aXNmaWVkKC4u
LmFyZ3MoKSk7CisgIG91dC5kZXRlcm1pbmVkQnkgPSB0aGlzOworICBpZiAoIXBsYW5uZXIuYWRk
UHJvcGFnYXRlKC4uLmFyZ3ModGhpcywgbWFyaykpKQorICAgIGFsZXJ0KC4uLmFyZ3MoIkN5Y2xl
IGVuY291bnRlcmVkIikpOworICBvdXQubWFyayA9IG1hcms7CisgIHJldHVybiBvdmVycmlkZGVu
OworfQorCitDb25zdHJhaW50LnByb3RvdHlwZS5kZXN0cm95Q29uc3RyYWludCA9IGZ1bmN0aW9u
ICgpIHsKKyAgaWYgKHRoaXMuaXNTYXRpc2ZpZWQoLi4uYXJncygpKSkgcGxhbm5lci5pbmNyZW1l
bnRhbFJlbW92ZSguLi5hcmdzKHRoaXMpKTsKKyAgZWxzZSB0aGlzLnJlbW92ZUZyb21HcmFwaCgu
Li5hcmdzKCkpOworfQorCisvKioKKyAqIE5vcm1hbCBjb25zdHJhaW50cyBhcmUgbm90IGlucHV0
IGNvbnN0cmFpbnRzLiAgQW4gaW5wdXQgY29uc3RyYWludAorICogaXMgb25lIHRoYXQgZGVwZW5k
cyBvbiBleHRlcm5hbCBzdGF0ZSwgc3VjaCBhcyB0aGUgbW91c2UsIHRoZQorICoga2V5Ym9yZCwg
YSBjbG9jaywgb3Igc29tZSBhcmJpdHJhdHkgcGllY2Ugb2YgaW1wZXJhdGl2ZSBjb2RlLgorICov
CitDb25zdHJhaW50LnByb3RvdHlwZS5pc0lucHV0ID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4g
ZmFsc2U7Cit9CisKKy8qIC0tLSAqCisgKiBVIG4gYSByIHkgICBDIG8gbiBzIHQgciBhIGkgbiB0
CisgKiAtLS0gKi8KKworLyoqCisgKiBBYnN0cmFjdCBzdXBlcmNsYXNzIGZvciBjb25zdHJhaW50
cyBoYXZpbmcgYSBzaW5nbGUgcG9zc2libGUgb3V0cHV0CisgKiB2YXJpYWJsZS4KKyAqLworZnVu
Y3Rpb24gVW5hcnlDb25zdHJhaW50KHYsIHN0cmVuZ3RoKSB7CisgIFVuYXJ5Q29uc3RyYWludC5z
dXBlckNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3RyZW5ndGgpOworICB0aGlzLm15T3V0cHV0ID0g
djsKKyAgdGhpcy5zYXRpc2ZpZWQgPSBmYWxzZTsKKyAgdGhpcy5hZGRDb25zdHJhaW50KC4uLmFy
Z3MoKSk7Cit9CisKK1VuYXJ5Q29uc3RyYWludC5pbmhlcml0c0Zyb20oLi4uYXJncyhDb25zdHJh
aW50KSk7CisKKy8qKgorICogQWRkcyB0aGlzIGNvbnN0cmFpbnQgdG8gdGhlIGNvbnN0cmFpbnQg
Z3JhcGgKKyAqLworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5hZGRUb0dyYXBoID0gZnVuY3Rp
b24gKCkgeworICB0aGlzLm15T3V0cHV0LmFkZENvbnN0cmFpbnQoLi4uYXJncyh0aGlzKSk7Cisg
IHRoaXMuc2F0aXNmaWVkID0gZmFsc2U7Cit9CisKKy8qKgorICogRGVjaWRlcyBpZiB0aGlzIGNv
bnN0cmFpbnQgY2FuIGJlIHNhdGlzZmllZCBhbmQgcmVjb3JkcyB0aGF0CisgKiBkZWNpc2lvbi4K
KyAqLworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5jaG9vc2VNZXRob2QgPSBmdW5jdGlvbiAo
bWFyaykgeworICB0aGlzLnNhdGlzZmllZCA9ICh0aGlzLm15T3V0cHV0Lm1hcmsgIT0gbWFyaykK
KyAgICAmJiBTdHJlbmd0aC5zdHJvbmdlciguLi5hcmdzKHRoaXMuc3RyZW5ndGgsIHRoaXMubXlP
dXRwdXQud2Fsa1N0cmVuZ3RoKSk7Cit9CisKKy8qKgorICogUmV0dXJucyB0cnVlIGlmIHRoaXMg
Y29uc3RyYWludCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGN1cnJlbnQgc29sdXRpb24uCisgKi8KK1Vu
YXJ5Q29uc3RyYWludC5wcm90b3R5cGUuaXNTYXRpc2ZpZWQgPSBmdW5jdGlvbiAoKSB7CisgIHJl
dHVybiB0aGlzLnNhdGlzZmllZDsKK30KKworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5tYXJr
SW5wdXRzID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgLy8gaGFzIG5vIGlucHV0cworfQorCisvKioK
KyAqIFJldHVybnMgdGhlIGN1cnJlbnQgb3V0cHV0IHZhcmlhYmxlLgorICovCitVbmFyeUNvbnN0
cmFpbnQucHJvdG90eXBlLm91dHB1dCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMubXlP
dXRwdXQ7Cit9CisKKy8qKgorICogQ2FsY3VsYXRlIHRoZSB3YWxrYWJvdXQgc3RyZW5ndGgsIHRo
ZSBzdGF5IGZsYWcsIGFuZCwgaWYgaXQgaXMKKyAqICdzdGF5JywgdGhlIHZhbHVlIGZvciB0aGUg
Y3VycmVudCBvdXRwdXQgb2YgdGhpcyBjb25zdHJhaW50LiBBc3N1bWUKKyAqIHRoaXMgY29uc3Ry
YWludCBpcyBzYXRpc2ZpZWQuCisgKi8KK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUucmVjYWxj
dWxhdGUgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMubXlPdXRwdXQud2Fsa1N0cmVuZ3RoID0gdGhp
cy5zdHJlbmd0aDsKKyAgdGhpcy5teU91dHB1dC5zdGF5ID0gIXRoaXMuaXNJbnB1dCguLi5hcmdz
KCkpOworICBpZiAodGhpcy5teU91dHB1dC5zdGF5KSB0aGlzLmV4ZWN1dGUoLi4uYXJncygpKTsg
Ly8gU3RheSBvcHRpbWl6YXRpb24KK30KKworLyoqCisgKiBSZWNvcmRzIHRoYXQgdGhpcyBjb25z
dHJhaW50IGlzIHVuc2F0aXNmaWVkCisgKi8KK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFy
a1Vuc2F0aXNmaWVkID0gZnVuY3Rpb24gKCkgeworICB0aGlzLnNhdGlzZmllZCA9IGZhbHNlOwor
fQorCitVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlucHV0c0tub3duID0gZnVuY3Rpb24gKCkg
eworICByZXR1cm4gdHJ1ZTsKK30KKworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5yZW1vdmVG
cm9tR3JhcGggPSBmdW5jdGlvbiAoKSB7CisgIGlmICh0aGlzLm15T3V0cHV0ICE9IG51bGwpIHRo
aXMubXlPdXRwdXQucmVtb3ZlQ29uc3RyYWludCguLi5hcmdzKHRoaXMpKTsKKyAgdGhpcy5zYXRp
c2ZpZWQgPSBmYWxzZTsKK30KKworLyogLS0tICoKKyAqIFMgdCBhIHkgICBDIG8gbiBzIHQgciBh
IGkgbiB0CisgKiAtLS0gKi8KKworLyoqCisgKiBWYXJpYWJsZXMgdGhhdCBzaG91bGQsIHdpdGgg
c29tZSBsZXZlbCBvZiBwcmVmZXJlbmNlLCBzdGF5IHRoZSBzYW1lLgorICogUGxhbm5lcnMgbWF5
IGV4cGxvaXQgdGhlIGZhY3QgdGhhdCBpbnN0YW5jZXMsIGlmIHNhdGlzZmllZCwgd2lsbCBub3QK
KyAqIGNoYW5nZSB0aGVpciBvdXRwdXQgZHVyaW5nIHBsYW4gZXhlY3V0aW9uLiAgVGhpcyBpcyBj
YWxsZWQgInN0YXkKKyAqIG9wdGltaXphdGlvbiIuCisgKi8KK2Z1bmN0aW9uIFN0YXlDb25zdHJh
aW50KHYsIHN0cikgeworICBTdGF5Q29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9yLmNhbGwodGhp
cywgdiwgc3RyKTsKK30KKworU3RheUNvbnN0cmFpbnQuaW5oZXJpdHNGcm9tKC4uLmFyZ3MoVW5h
cnlDb25zdHJhaW50KSk7CisKK1N0YXlDb25zdHJhaW50LnByb3RvdHlwZS5leGVjdXRlID0gZnVu
Y3Rpb24gKCkgeworICAvLyBTdGF5IGNvbnN0cmFpbnRzIGRvIG5vdGhpbmcKK30KKworLyogLS0t
ICoKKyAqIEUgZCBpIHQgICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKworLyoqCisg
KiBBIHVuYXJ5IGlucHV0IGNvbnN0cmFpbnQgdXNlZCB0byBtYXJrIGEgdmFyaWFibGUgdGhhdCB0
aGUgY2xpZW50CisgKiB3aXNoZXMgdG8gY2hhbmdlLgorICovCitmdW5jdGlvbiBFZGl0Q29uc3Ry
YWludCh2LCBzdHIpIHsKKyAgRWRpdENvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRo
aXMsIHYsIHN0cik7Cit9CisKK0VkaXRDb25zdHJhaW50LmluaGVyaXRzRnJvbSguLi5hcmdzKFVu
YXJ5Q29uc3RyYWludCkpOworCisvKioKKyAqIEVkaXRzIGluZGljYXRlIHRoYXQgYSB2YXJpYWJs
ZSBpcyB0byBiZSBjaGFuZ2VkIGJ5IGltcGVyYXRpdmUgY29kZS4KKyAqLworRWRpdENvbnN0cmFp
bnQucHJvdG90eXBlLmlzSW5wdXQgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0cnVlOworfQor
CitFZGl0Q29uc3RyYWludC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgLy8g
RWRpdCBjb25zdHJhaW50cyBkbyBub3RoaW5nCit9CisKKy8qIC0tLSAqCisgKiBCIGkgbiBhIHIg
eSAgIEMgbyBuIHMgdCByIGEgaSBuIHQKKyAqIC0tLSAqLworCit2YXIgRGlyZWN0aW9uID0gbmV3
IE9iamVjdCguLi5hcmdzKCkpOworRGlyZWN0aW9uLk5PTkUgICAgID0gMDsKK0RpcmVjdGlvbi5G
T1JXQVJEICA9IDE7CitEaXJlY3Rpb24uQkFDS1dBUkQgPSAtMTsKKworLyoqCisgKiBBYnN0cmFj
dCBzdXBlcmNsYXNzIGZvciBjb25zdHJhaW50cyBoYXZpbmcgdHdvIHBvc3NpYmxlIG91dHB1dAor
ICogdmFyaWFibGVzLgorICovCitmdW5jdGlvbiBCaW5hcnlDb25zdHJhaW50KHZhcjEsIHZhcjIs
IHN0cmVuZ3RoKSB7CisgIEJpbmFyeUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRo
aXMsIHN0cmVuZ3RoKTsKKyAgdGhpcy52MSA9IHZhcjE7CisgIHRoaXMudjIgPSB2YXIyOworICB0
aGlzLmRpcmVjdGlvbiA9IERpcmVjdGlvbi5OT05FOworICB0aGlzLmFkZENvbnN0cmFpbnQoLi4u
YXJncygpKTsKK30KKworQmluYXJ5Q29uc3RyYWludC5pbmhlcml0c0Zyb20oLi4uYXJncyhDb25z
dHJhaW50KSk7CisKKy8qKgorICogRGVjaWRlcyBpZiB0aGlzIGNvbnN0cmFpbnQgY2FuIGJlIHNh
dGlzZmllZCBhbmQgd2hpY2ggd2F5IGl0CisgKiBzaG91bGQgZmxvdyBiYXNlZCBvbiB0aGUgcmVs
YXRpdmUgc3RyZW5ndGggb2YgdGhlIHZhcmlhYmxlcyByZWxhdGVkLAorICogYW5kIHJlY29yZCB0
aGF0IGRlY2lzaW9uLgorICovCitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5jaG9vc2VNZXRo
b2QgPSBmdW5jdGlvbiAobWFyaykgeworICBpZiAodGhpcy52MS5tYXJrID09IG1hcmspIHsKKyAg
ICB0aGlzLmRpcmVjdGlvbiA9ICh0aGlzLnYyLm1hcmsgIT0gbWFyayAmJiBTdHJlbmd0aC5zdHJv
bmdlciguLi5hcmdzKHRoaXMuc3RyZW5ndGgsIHRoaXMudjIud2Fsa1N0cmVuZ3RoKSkpCisgICAg
ICA/IERpcmVjdGlvbi5GT1JXQVJECisgICAgICA6IERpcmVjdGlvbi5OT05FOworICB9CisgIGlm
ICh0aGlzLnYyLm1hcmsgPT0gbWFyaykgeworICAgIHRoaXMuZGlyZWN0aW9uID0gKHRoaXMudjEu
bWFyayAhPSBtYXJrICYmIFN0cmVuZ3RoLnN0cm9uZ2VyKC4uLmFyZ3ModGhpcy5zdHJlbmd0aCwg
dGhpcy52MS53YWxrU3RyZW5ndGgpKSkKKyAgICAgID8gRGlyZWN0aW9uLkJBQ0tXQVJECisgICAg
ICA6IERpcmVjdGlvbi5OT05FOworICB9CisgIGlmIChTdHJlbmd0aC53ZWFrZXIoLi4uYXJncyh0
aGlzLnYxLndhbGtTdHJlbmd0aCwgdGhpcy52Mi53YWxrU3RyZW5ndGgpKSkgeworICAgIHRoaXMu
ZGlyZWN0aW9uID0gU3RyZW5ndGguc3Ryb25nZXIoLi4uYXJncyh0aGlzLnN0cmVuZ3RoLCB0aGlz
LnYxLndhbGtTdHJlbmd0aCkpCisgICAgICA/IERpcmVjdGlvbi5CQUNLV0FSRAorICAgICAgOiBE
aXJlY3Rpb24uTk9ORTsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLmRpcmVjdGlvbiA9IFN0cmVuZ3Ro
LnN0cm9uZ2VyKC4uLmFyZ3ModGhpcy5zdHJlbmd0aCwgdGhpcy52Mi53YWxrU3RyZW5ndGgpKQor
ICAgICAgPyBEaXJlY3Rpb24uRk9SV0FSRAorICAgICAgOiBEaXJlY3Rpb24uQkFDS1dBUkQKKyAg
fQorfQorCisvKioKKyAqIEFkZCB0aGlzIGNvbnN0cmFpbnQgdG8gdGhlIGNvbnN0cmFpbnQgZ3Jh
cGgKKyAqLworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9HcmFwaCA9IGZ1bmN0aW9u
ICgpIHsKKyAgdGhpcy52MS5hZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworICB0aGlzLnYy
LmFkZENvbnN0cmFpbnQoLi4uYXJncyh0aGlzKSk7CisgIHRoaXMuZGlyZWN0aW9uID0gRGlyZWN0
aW9uLk5PTkU7Cit9CisKKy8qKgorICogQW5zd2VyIHRydWUgaWYgdGhpcyBjb25zdHJhaW50IGlz
IHNhdGlzZmllZCBpbiB0aGUgY3VycmVudCBzb2x1dGlvbi4KKyAqLworQmluYXJ5Q29uc3RyYWlu
dC5wcm90b3R5cGUuaXNTYXRpc2ZpZWQgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzLmRp
cmVjdGlvbiAhPSBEaXJlY3Rpb24uTk9ORTsKK30KKworLyoqCisgKiBNYXJrIHRoZSBpbnB1dCB2
YXJpYWJsZSB3aXRoIHRoZSBnaXZlbiBtYXJrLgorICovCitCaW5hcnlDb25zdHJhaW50LnByb3Rv
dHlwZS5tYXJrSW5wdXRzID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgdGhpcy5pbnB1dCguLi5hcmdz
KCkpLm1hcmsgPSBtYXJrOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgaW5wdXQg
dmFyaWFibGUKKyAqLworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuaW5wdXQgPSBmdW5jdGlv
biAoKSB7CisgIHJldHVybiAodGhpcy5kaXJlY3Rpb24gPT0gRGlyZWN0aW9uLkZPUldBUkQpID8g
dGhpcy52MSA6IHRoaXMudjI7Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgY3VycmVudCBvdXRw
dXQgdmFyaWFibGUKKyAqLworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUub3V0cHV0ID0gZnVu
Y3Rpb24gKCkgeworICByZXR1cm4gKHRoaXMuZGlyZWN0aW9uID09IERpcmVjdGlvbi5GT1JXQVJE
KSA/IHRoaXMudjIgOiB0aGlzLnYxOworfQorCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgd2Fsa2Fi
b3V0IHN0cmVuZ3RoLCB0aGUgc3RheSBmbGFnLCBhbmQsIGlmIGl0IGlzCisgKiAnc3RheScsIHRo
ZSB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IG9mIHRoaXMKKyAqIGNvbnN0cmFpbnQuIEFz
c3VtZSB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkLgorICovCitCaW5hcnlDb25zdHJhaW50
LnByb3RvdHlwZS5yZWNhbGN1bGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgdmFyIGlobiA9IHRoaXMu
aW5wdXQoLi4uYXJncygpKSwgb3V0ID0gdGhpcy5vdXRwdXQoLi4uYXJncygpKTsKKyAgb3V0Lndh
bGtTdHJlbmd0aCA9IFN0cmVuZ3RoLndlYWtlc3RPZiguLi5hcmdzKHRoaXMuc3RyZW5ndGgsIGlo
bi53YWxrU3RyZW5ndGgpKTsKKyAgb3V0LnN0YXkgPSBpaG4uc3RheTsKKyAgaWYgKG91dC5zdGF5
KSB0aGlzLmV4ZWN1dGUoLi4uYXJncygpKTsKK30KKworLyoqCisgKiBSZWNvcmQgdGhlIGZhY3Qg
dGhhdCB0aGlzIGNvbnN0cmFpbnQgaXMgdW5zYXRpc2ZpZWQuCisgKi8KK0JpbmFyeUNvbnN0cmFp
bnQucHJvdG90eXBlLm1hcmtVbnNhdGlzZmllZCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5kaXJl
Y3Rpb24gPSBEaXJlY3Rpb24uTk9ORTsKK30KKworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUu
aW5wdXRzS25vd24gPSBmdW5jdGlvbiAobWFyaykgeworICB2YXIgaSA9IHRoaXMuaW5wdXQoLi4u
YXJncygpKTsKKyAgcmV0dXJuIGkubWFyayA9PSBtYXJrIHx8IGkuc3RheSB8fCBpLmRldGVybWlu
ZWRCeSA9PSBudWxsOworfQorCitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5yZW1vdmVGcm9t
R3JhcGggPSBmdW5jdGlvbiAoKSB7CisgIGlmICh0aGlzLnYxICE9IG51bGwpIHRoaXMudjEucmVt
b3ZlQ29uc3RyYWludCguLi5hcmdzKHRoaXMpKTsKKyAgaWYgKHRoaXMudjIgIT0gbnVsbCkgdGhp
cy52Mi5yZW1vdmVDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworICB0aGlzLmRpcmVjdGlvbiA9
IERpcmVjdGlvbi5OT05FOworfQorCisvKiAtLS0gKgorICogUyBjIGEgbCBlICAgQyBvIG4gcyB0
IHIgYSBpIG4gdAorICogLS0tICovCisKKy8qKgorICogUmVsYXRlcyB0d28gdmFyaWFibGVzIGJ5
IHRoZSBsaW5lYXIgc2NhbGluZyByZWxhdGlvbnNoaXA6ICJ2MiA9CisgKiAodjEgKiBzY2FsZSkg
KyBvZmZzZXQiLiBFaXRoZXIgdjEgb3IgdjIgbWF5IGJlIGNoYW5nZWQgdG8gbWFpbnRhaW4KKyAq
IHRoaXMgcmVsYXRpb25zaGlwIGJ1dCB0aGUgc2NhbGUgZmFjdG9yIGFuZCBvZmZzZXQgYXJlIGNv
bnNpZGVyZWQKKyAqIHJlYWQtb25seS4KKyAqLworZnVuY3Rpb24gU2NhbGVDb25zdHJhaW50KHNy
Yywgc2NhbGUsIG9mZnNldCwgZGVzdCwgc3RyZW5ndGgpIHsKKyAgdGhpcy5kaXJlY3Rpb24gPSBE
aXJlY3Rpb24uTk9ORTsKKyAgdGhpcy5zY2FsZSA9IHNjYWxlOworICB0aGlzLm9mZnNldCA9IG9m
ZnNldDsKKyAgU2NhbGVDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcmMs
IGRlc3QsIHN0cmVuZ3RoKTsKK30KKworU2NhbGVDb25zdHJhaW50LmluaGVyaXRzRnJvbSguLi5h
cmdzKEJpbmFyeUNvbnN0cmFpbnQpKTsKKworLyoqCisgKiBBZGRzIHRoaXMgY29uc3RyYWludCB0
byB0aGUgY29uc3RyYWludCBncmFwaC4KKyAqLworU2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5h
ZGRUb0dyYXBoID0gZnVuY3Rpb24gKCkgeworICBTY2FsZUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1
Y3Rvci5wcm90b3R5cGUuYWRkVG9HcmFwaC5jYWxsKHRoaXMpOworICB0aGlzLnNjYWxlLmFkZENv
bnN0cmFpbnQoLi4uYXJncyh0aGlzKSk7CisgIHRoaXMub2Zmc2V0LmFkZENvbnN0cmFpbnQoLi4u
YXJncyh0aGlzKSk7Cit9CisKK1NjYWxlQ29uc3RyYWludC5wcm90b3R5cGUucmVtb3ZlRnJvbUdy
YXBoID0gZnVuY3Rpb24gKCkgeworICBTY2FsZUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5w
cm90b3R5cGUucmVtb3ZlRnJvbUdyYXBoLmNhbGwodGhpcyk7CisgIGlmICh0aGlzLnNjYWxlICE9
IG51bGwpIHRoaXMuc2NhbGUucmVtb3ZlQ29uc3RyYWludCguLi5hcmdzKHRoaXMpKTsKKyAgaWYg
KHRoaXMub2Zmc2V0ICE9IG51bGwpIHRoaXMub2Zmc2V0LnJlbW92ZUNvbnN0cmFpbnQoLi4uYXJn
cyh0aGlzKSk7Cit9CisKK1NjYWxlQ29uc3RyYWludC5wcm90b3R5cGUubWFya0lucHV0cyA9IGZ1
bmN0aW9uIChtYXJrKSB7CisgIFNjYWxlQ29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9yLnByb3Rv
dHlwZS5tYXJrSW5wdXRzLmNhbGwodGhpcywgbWFyayk7CisgIHRoaXMuc2NhbGUubWFyayA9IHRo
aXMub2Zmc2V0Lm1hcmsgPSBtYXJrOworfQorCisvKioKKyAqIEVuZm9yY2UgdGhpcyBjb25zdHJh
aW50LiBBc3N1bWUgdGhhdCBpdCBpcyBzYXRpc2ZpZWQuCisgKi8KK1NjYWxlQ29uc3RyYWludC5w
cm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgaWYgKHRoaXMuZGlyZWN0aW9uID09
IERpcmVjdGlvbi5GT1JXQVJEKSB7CisgICAgdGhpcy52Mi52YWx1ZSA9IHRoaXMudjEudmFsdWUg
KiB0aGlzLnNjYWxlLnZhbHVlICsgdGhpcy5vZmZzZXQudmFsdWU7CisgIH0gZWxzZSB7CisgICAg
dGhpcy52MS52YWx1ZSA9ICh0aGlzLnYyLnZhbHVlIC0gdGhpcy5vZmZzZXQudmFsdWUpIC8gdGhp
cy5zY2FsZS52YWx1ZTsKKyAgfQorfQorCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgd2Fsa2Fib3V0
IHN0cmVuZ3RoLCB0aGUgc3RheSBmbGFnLCBhbmQsIGlmIGl0IGlzCisgKiAnc3RheScsIHRoZSB2
YWx1ZSBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IG9mIHRoaXMgY29uc3RyYWludC4gQXNzdW1lCisg
KiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkLgorICovCitTY2FsZUNvbnN0cmFpbnQucHJv
dG90eXBlLnJlY2FsY3VsYXRlID0gZnVuY3Rpb24gKCkgeworICB2YXIgaWhuID0gdGhpcy5pbnB1
dCguLi5hcmdzKCkpLCBvdXQgPSB0aGlzLm91dHB1dCguLi5hcmdzKCkpOworICBvdXQud2Fsa1N0
cmVuZ3RoID0gU3RyZW5ndGgud2Vha2VzdE9mKC4uLmFyZ3ModGhpcy5zdHJlbmd0aCwgaWhuLndh
bGtTdHJlbmd0aCkpOworICBvdXQuc3RheSA9IGlobi5zdGF5ICYmIHRoaXMuc2NhbGUuc3RheSAm
JiB0aGlzLm9mZnNldC5zdGF5OworICBpZiAob3V0LnN0YXkpIHRoaXMuZXhlY3V0ZSguLi5hcmdz
KCkpOworfQorCisvKiAtLS0gKgorICogRSBxIHUgYSBsIGkgdCAgeSAgIEMgbyBuIHMgdCByIGEg
aSBuIHQKKyAqIC0tLSAqLworCisvKioKKyAqIENvbnN0cmFpbnMgdHdvIHZhcmlhYmxlcyB0byBo
YXZlIHRoZSBzYW1lIHZhbHVlLgorICovCitmdW5jdGlvbiBFcXVhbGl0eUNvbnN0cmFpbnQodmFy
MSwgdmFyMiwgc3RyZW5ndGgpIHsKKyAgRXF1YWxpdHlDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0
b3IuY2FsbCh0aGlzLCB2YXIxLCB2YXIyLCBzdHJlbmd0aCk7Cit9CisKK0VxdWFsaXR5Q29uc3Ry
YWludC5pbmhlcml0c0Zyb20oLi4uYXJncyhCaW5hcnlDb25zdHJhaW50KSk7CisKKy8qKgorICog
RW5mb3JjZSB0aGlzIGNvbnN0cmFpbnQuIEFzc3VtZSB0aGF0IGl0IGlzIHNhdGlzZmllZC4KKyAq
LworRXF1YWxpdHlDb25zdHJhaW50LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgewor
ICB0aGlzLm91dHB1dCguLi5hcmdzKCkpLnZhbHVlID0gdGhpcy5pbnB1dCguLi5hcmdzKCkpLnZh
bHVlOworfQorCisvKiAtLS0gKgorICogViBhIHIgaSBhIGIgbCBlCisgKiAtLS0gKi8KKworLyoq
CisgKiBBIGNvbnN0cmFpbmVkIHZhcmlhYmxlLiBJbiBhZGRpdGlvbiB0byBpdHMgdmFsdWUsIGl0
IG1haW50YWluIHRoZQorICogc3RydWN0dXJlIG9mIHRoZSBjb25zdHJhaW50IGdyYXBoLCB0aGUg
Y3VycmVudCBkYXRhZmxvdyBncmFwaCwgYW5kCisgKiB2YXJpb3VzIHBhcmFtZXRlcnMgb2YgaW50
ZXJlc3QgdG8gdGhlIERlbHRhQmx1ZSBpbmNyZW1lbnRhbAorICogY29uc3RyYWludCBzb2x2ZXIu
CisgKiovCitmdW5jdGlvbiBWYXJpYWJsZShuYW1lLCBpbml0aWFsVmFsdWUpIHsKKyAgdGhpcy52
YWx1ZSA9IGluaXRpYWxWYWx1ZSB8fCAwOworICB0aGlzLmNvbnN0cmFpbnRzID0gbmV3IE9yZGVy
ZWRDb2xsZWN0aW9uKC4uLmFyZ3MoKSk7CisgIHRoaXMuZGV0ZXJtaW5lZEJ5ID0gbnVsbDsKKyAg
dGhpcy5tYXJrID0gMDsKKyAgdGhpcy53YWxrU3RyZW5ndGggPSBTdHJlbmd0aC5XRUFLRVNUOwor
ICB0aGlzLnN0YXkgPSB0cnVlOworICB0aGlzLm5hbWUgPSBuYW1lOworfQorCisvKioKKyAqIEFk
ZCB0aGUgZ2l2ZW4gY29uc3RyYWludCB0byB0aGUgc2V0IG9mIGFsbCBjb25zdHJhaW50cyB0aGF0
IHJlZmVyCisgKiB0aGlzIHZhcmlhYmxlLgorICovCitWYXJpYWJsZS5wcm90b3R5cGUuYWRkQ29u
c3RyYWludCA9IGZ1bmN0aW9uIChjKSB7CisgIHRoaXMuY29uc3RyYWludHMuYWRkKC4uLmFyZ3Mo
YykpOworfQorCisvKioKKyAqIFJlbW92ZXMgYWxsIHRyYWNlcyBvZiBjIGZyb20gdGhpcyB2YXJp
YWJsZS4KKyAqLworVmFyaWFibGUucHJvdG90eXBlLnJlbW92ZUNvbnN0cmFpbnQgPSBmdW5jdGlv
biAoYykgeworICB0aGlzLmNvbnN0cmFpbnRzLnJlbW92ZSguLi5hcmdzKGMpKTsKKyAgaWYgKHRo
aXMuZGV0ZXJtaW5lZEJ5ID09IGMpIHRoaXMuZGV0ZXJtaW5lZEJ5ID0gbnVsbDsKK30KKworLyog
LS0tICoKKyAqIFAgbCBhIG4gbiBlIHIKKyAqIC0tLSAqLworCisvKioKKyAqIFRoZSBEZWx0YUJs
dWUgcGxhbm5lcgorICovCitmdW5jdGlvbiBQbGFubmVyKCkgeworICB0aGlzLmN1cnJlbnRNYXJr
ID0gMDsKK30KKworLyoqCisgKiBBdHRlbXB0IHRvIHNhdGlzZnkgdGhlIGdpdmVuIGNvbnN0cmFp
bnQgYW5kLCBpZiBzdWNjZXNzZnVsLAorICogaW5jcmVtZW50YWxseSB1cGRhdGUgdGhlIGRhdGFm
bG93IGdyYXBoLiAgRGV0YWlsczogSWYgc2F0aWZ5aW5nCisgKiB0aGUgY29uc3RyYWludCBpcyBz
dWNjZXNzZnVsLCBpdCBtYXkgb3ZlcnJpZGUgYSB3ZWFrZXIgY29uc3RyYWludAorICogb24gaXRz
IG91dHB1dC4gVGhlIGFsZ29yaXRobSBhdHRlbXB0cyB0byByZXNhdGlzZnkgdGhhdAorICogY29u
c3RyYWludCB1c2luZyBzb21lIG90aGVyIG1ldGhvZC4gVGhpcyBwcm9jZXNzIGlzIHJlcGVhdGVk
CisgKiB1bnRpbCBlaXRoZXIgYSkgaXQgcmVhY2hlcyBhIHZhcmlhYmxlIHRoYXQgd2FzIG5vdCBw
cmV2aW91c2x5CisgKiBkZXRlcm1pbmVkIGJ5IGFueSBjb25zdHJhaW50IG9yIGIpIGl0IHJlYWNo
ZXMgYSBjb25zdHJhaW50IHRoYXQKKyAqIGlzIHRvbyB3ZWFrIHRvIGJlIHNhdGlzZmllZCB1c2lu
ZyBhbnkgb2YgaXRzIG1ldGhvZHMuIFRoZQorICogdmFyaWFibGVzIG9mIGNvbnN0cmFpbnRzIHRo
YXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCBhcmUgbWFya2VkIHdpdGgKKyAqIGEgdW5pcXVlIG1hcmsg
dmFsdWUgc28gdGhhdCB3ZSBrbm93IHdoZXJlIHdlJ3ZlIGJlZW4uIFRoaXMgYWxsb3dzCisgKiB0
aGUgYWxnb3JpdGhtIHRvIGF2b2lkIGdldHRpbmcgaW50byBhbiBpbmZpbml0ZSBsb29wIGV2ZW4g
aWYgdGhlCisgKiBjb25zdHJhaW50IGdyYXBoIGhhcyBhbiBpbmFkdmVydGVudCBjeWNsZS4KKyAq
LworUGxhbm5lci5wcm90b3R5cGUuaW5jcmVtZW50YWxBZGQgPSBmdW5jdGlvbiAoYykgeworICB2
YXIgbWFyayA9IHRoaXMubmV3TWFyayguLi5hcmdzKCkpOworICB2YXIgb3ZlcnJpZGRlbiA9IGMu
c2F0aXNmeSguLi5hcmdzKG1hcmspKTsKKyAgd2hpbGUgKG92ZXJyaWRkZW4gIT0gbnVsbCkKKyAg
ICBvdmVycmlkZGVuID0gb3ZlcnJpZGRlbi5zYXRpc2Z5KC4uLmFyZ3MobWFyaykpOworfQorCisv
KioKKyAqIEVudHJ5IHBvaW50IGZvciByZXRyYWN0aW5nIGEgY29uc3RyYWludC4gUmVtb3ZlIHRo
ZSBnaXZlbgorICogY29uc3RyYWludCBhbmQgaW5jcmVtZW50YWxseSB1cGRhdGUgdGhlIGRhdGFm
bG93IGdyYXBoLgorICogRGV0YWlsczogUmV0cmFjdGluZyB0aGUgZ2l2ZW4gY29uc3RyYWludCBt
YXkgYWxsb3cgc29tZSBjdXJyZW50bHkKKyAqIHVuc2F0aXNmaWFibGUgZG93bnN0cmVhbSBjb25z
dHJhaW50IHRvIGJlIHNhdGlzZmllZC4gV2UgdGhlcmVmb3JlIGNvbGxlY3QKKyAqIGEgbGlzdCBv
ZiB1bnNhdGlzZmllZCBkb3duc3RyZWFtIGNvbnN0cmFpbnRzIGFuZCBhdHRlbXB0IHRvCisgKiBz
YXRpc2Z5IGVhY2ggb25lIGluIHR1cm4uIFRoaXMgbGlzdCBpcyB0cmF2ZXJzZWQgYnkgY29uc3Ry
YWludAorICogc3RyZW5ndGgsIHN0cm9uZ2VzdCBmaXJzdCwgYXMgYSBoZXVyaXN0aWMgZm9yIGF2
b2lkaW5nCisgKiB1bm5lY2Vzc2FyaWx5IGFkZGluZyBhbmQgdGhlbiBvdmVycmlkaW5nIHdlYWsg
Y29uc3RyYWludHMuCisgKiBBc3N1bWU6IGMgaXMgc2F0aXNmaWVkLgorICovCitQbGFubmVyLnBy
b3RvdHlwZS5pbmNyZW1lbnRhbFJlbW92ZSA9IGZ1bmN0aW9uIChjKSB7CisgIHZhciBvdXQgPSBj
Lm91dHB1dCguLi5hcmdzKCkpOworICBjLm1hcmtVbnNhdGlzZmllZCguLi5hcmdzKCkpOworICBj
LnJlbW92ZUZyb21HcmFwaCguLi5hcmdzKCkpOworICB2YXIgdW5zYXRpc2ZpZWQgPSB0aGlzLnJl
bW92ZVByb3BhZ2F0ZUZyb20oLi4uYXJncyhvdXQpKTsKKyAgdmFyIHN0cmVuZ3RoID0gU3RyZW5n
dGguUkVRVUlSRUQ7CisgIGRvIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuc2F0aXNmaWVk
LnNpemUoLi4uYXJncygpKTsgaSsrKSB7CisgICAgICB2YXIgdSA9IHVuc2F0aXNmaWVkLmF0KC4u
LmFyZ3MoaSkpOworICAgICAgaWYgKHUuc3RyZW5ndGggPT0gc3RyZW5ndGgpCisgICAgICAgIHRo
aXMuaW5jcmVtZW50YWxBZGQoLi4uYXJncyh1KSk7CisgICAgfQorICAgIHN0cmVuZ3RoID0gc3Ry
ZW5ndGgubmV4dFdlYWtlciguLi5hcmdzKCkpOworICB9IHdoaWxlIChzdHJlbmd0aCAhPSBTdHJl
bmd0aC5XRUFLRVNUKTsKK30KKworLyoqCisgKiBTZWxlY3QgYSBwcmV2aW91c2x5IHVudXNlZCBt
YXJrIHZhbHVlLgorICovCitQbGFubmVyLnByb3RvdHlwZS5uZXdNYXJrID0gZnVuY3Rpb24gKCkg
eworICByZXR1cm4gKyt0aGlzLmN1cnJlbnRNYXJrOworfQorCisvKioKKyAqIEV4dHJhY3QgYSBw
bGFuIGZvciByZXNhdGlzZmFjdGlvbiBzdGFydGluZyBmcm9tIHRoZSBnaXZlbiBzb3VyY2UKKyAq
IGNvbnN0cmFpbnRzLCB1c3VhbGx5IGEgc2V0IG9mIGlucHV0IGNvbnN0cmFpbnRzLiBUaGlzIG1l
dGhvZAorICogYXNzdW1lcyB0aGF0IHN0YXkgb3B0aW1pemF0aW9uIGlzIGRlc2lyZWQ7IHRoZSBw
bGFuIHdpbGwgY29udGFpbgorICogb25seSBjb25zdHJhaW50cyB3aG9zZSBvdXRwdXQgdmFyaWFi
bGVzIGFyZSBub3Qgc3RheS4gQ29uc3RyYWludHMKKyAqIHRoYXQgZG8gbm8gY29tcHV0YXRpb24s
IHN1Y2ggYXMgc3RheSBhbmQgZWRpdCBjb25zdHJhaW50cywgYXJlCisgKiBub3QgaW5jbHVkZWQg
aW4gdGhlIHBsYW4uCisgKiBEZXRhaWxzOiBUaGUgb3V0cHV0cyBvZiBhIGNvbnN0cmFpbnQgYXJl
IG1hcmtlZCB3aGVuIGl0IGlzIGFkZGVkCisgKiB0byB0aGUgcGxhbiB1bmRlciBjb25zdHJ1Y3Rp
b24uIEEgY29uc3RyYWludCBtYXkgYmUgYXBwZW5kZWQgdG8KKyAqIHRoZSBwbGFuIHdoZW4gYWxs
IGl0cyBpbnB1dCB2YXJpYWJsZXMgYXJlIGtub3duLiBBIHZhcmlhYmxlIGlzCisgKiBrbm93biBp
ZiBlaXRoZXIgYSkgdGhlIHZhcmlhYmxlIGlzIG1hcmtlZCAoaW5kaWNhdGluZyB0aGF0IGhhcwor
ICogYmVlbiBjb21wdXRlZCBieSBhIGNvbnN0cmFpbnQgYXBwZWFyaW5nIGVhcmxpZXIgaW4gdGhl
IHBsYW4pLCBiKQorICogdGhlIHZhcmlhYmxlIGlzICdzdGF5JyAoaS5lLiBpdCBpcyBhIGNvbnN0
YW50IGF0IHBsYW4gZXhlY3V0aW9uCisgKiB0aW1lKSwgb3IgYykgdGhlIHZhcmlhYmxlIGlzIG5v
dCBkZXRlcm1pbmVkIGJ5IGFueQorICogY29uc3RyYWludC4gVGhlIGxhc3QgcHJvdmlzaW9uIGlz
IGZvciBwYXN0IHN0YXRlcyBvZiBoaXN0b3J5CisgKiB2YXJpYWJsZXMsIHdoaWNoIGFyZSBub3Qg
c3RheSBidXQgd2hpY2ggYXJlIGFsc28gbm90IGNvbXB1dGVkIGJ5CisgKiBhbnkgY29uc3RyYWlu
dC4KKyAqIEFzc3VtZTogc291cmNlcyBhcmUgYWxsIHNhdGlzZmllZC4KKyAqLworUGxhbm5lci5w
cm90b3R5cGUubWFrZVBsYW4gPSBmdW5jdGlvbiAoc291cmNlcykgeworICB2YXIgbWFyayA9IHRo
aXMubmV3TWFyayguLi5hcmdzKCkpOworICB2YXIgcGxhbiA9IG5ldyBQbGFuKC4uLmFyZ3MoKSk7
CisgIHZhciB0b2RvID0gc291cmNlczsKKyAgd2hpbGUgKHRvZG8uc2l6ZSguLi5hcmdzKCkpID4g
MCkgeworICAgIHZhciBjID0gdG9kby5yZW1vdmVGaXJzdCguLi5hcmdzKCkpOworICAgIGlmIChj
Lm91dHB1dCguLi5hcmdzKCkpLm1hcmsgIT0gbWFyayAmJiBjLmlucHV0c0tub3duKC4uLmFyZ3Mo
bWFyaykpKSB7CisgICAgICBwbGFuLmFkZENvbnN0cmFpbnQoLi4uYXJncyhjKSk7CisgICAgICBj
Lm91dHB1dCguLi5hcmdzKCkpLm1hcmsgPSBtYXJrOworICAgICAgdGhpcy5hZGRDb25zdHJhaW50
c0NvbnN1bWluZ1RvKC4uLmFyZ3MoYy5vdXRwdXQoLi4uYXJncygpKSwgdG9kbykpOworICAgIH0K
KyAgfQorICByZXR1cm4gcGxhbjsKK30KKworLyoqCisgKiBFeHRyYWN0IGEgcGxhbiBmb3IgcmVz
YXRpc2Z5aW5nIHN0YXJ0aW5nIGZyb20gdGhlIG91dHB1dCBvZiB0aGUKKyAqIGdpdmVuIGNvbnN0
cmFpbnRzLCB1c3VhbGx5IGEgc2V0IG9mIGlucHV0IGNvbnN0cmFpbnRzLgorICovCitQbGFubmVy
LnByb3RvdHlwZS5leHRyYWN0UGxhbkZyb21Db25zdHJhaW50cyA9IGZ1bmN0aW9uIChjb25zdHJh
aW50cykgeworICB2YXIgc291cmNlcyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkp
OworICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnN0cmFpbnRzLnNpemUoLi4uYXJncygpKTsgaSsr
KSB7CisgICAgdmFyIGMgPSBjb25zdHJhaW50cy5hdCguLi5hcmdzKGkpKTsKKyAgICBpZiAoYy5p
c0lucHV0KC4uLmFyZ3MoKSkgJiYgYy5pc1NhdGlzZmllZCguLi5hcmdzKCkpKQorICAgICAgLy8g
bm90IGluIHBsYW4gYWxyZWFkeSBhbmQgZWxpZ2libGUgZm9yIGluY2x1c2lvbgorICAgICAgc291
cmNlcy5hZGQoLi4uYXJncyhjKSk7CisgIH0KKyAgcmV0dXJuIHRoaXMubWFrZVBsYW4oLi4uYXJn
cyhzb3VyY2VzKSk7Cit9CisKKy8qKgorICogUmVjb21wdXRlIHRoZSB3YWxrYWJvdXQgc3RyZW5n
dGhzIGFuZCBzdGF5IGZsYWdzIG9mIGFsbCB2YXJpYWJsZXMKKyAqIGRvd25zdHJlYW0gb2YgdGhl
IGdpdmVuIGNvbnN0cmFpbnQgYW5kIHJlY29tcHV0ZSB0aGUgYWN0dWFsCisgKiB2YWx1ZXMgb2Yg
YWxsIHZhcmlhYmxlcyB3aG9zZSBzdGF5IGZsYWcgaXMgdHJ1ZS4gSWYgYSBjeWNsZSBpcworICog
ZGV0ZWN0ZWQsIHJlbW92ZSB0aGUgZ2l2ZW4gY29uc3RyYWludCBhbmQgYW5zd2VyCisgKiBmYWxz
ZS4gT3RoZXJ3aXNlLCBhbnN3ZXIgdHJ1ZS4KKyAqIERldGFpbHM6IEN5Y2xlcyBhcmUgZGV0ZWN0
ZWQgd2hlbiBhIG1hcmtlZCB2YXJpYWJsZSBpcworICogZW5jb3VudGVyZWQgZG93bnN0cmVhbSBv
ZiB0aGUgZ2l2ZW4gY29uc3RyYWludC4gVGhlIHNlbmRlciBpcworICogYXNzdW1lZCB0byBoYXZl
IG1hcmtlZCB0aGUgaW5wdXRzIG9mIHRoZSBnaXZlbiBjb25zdHJhaW50IHdpdGgKKyAqIHRoZSBn
aXZlbiBtYXJrLiBUaHVzLCBlbmNvdW50ZXJpbmcgYSBtYXJrZWQgbm9kZSBkb3duc3RyZWFtIG9m
CisgKiB0aGUgb3V0cHV0IGNvbnN0cmFpbnQgbWVhbnMgdGhhdCB0aGVyZSBpcyBhIHBhdGggZnJv
bSB0aGUKKyAqIGNvbnN0cmFpbnQncyBvdXRwdXQgdG8gb25lIG9mIGl0cyBpbnB1dHMuCisgKi8K
K1BsYW5uZXIucHJvdG90eXBlLmFkZFByb3BhZ2F0ZSA9IGZ1bmN0aW9uIChjLCBtYXJrKSB7Cisg
IHZhciB0b2RvID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKC4uLmFyZ3MoKSk7CisgIHRvZG8uYWRk
KC4uLmFyZ3MoYykpOworICB3aGlsZSAodG9kby5zaXplKC4uLmFyZ3MoKSkgPiAwKSB7CisgICAg
dmFyIGQgPSB0b2RvLnJlbW92ZUZpcnN0KC4uLmFyZ3MoKSk7CisgICAgaWYgKGQub3V0cHV0KC4u
LmFyZ3MoKSkubWFyayA9PSBtYXJrKSB7CisgICAgICB0aGlzLmluY3JlbWVudGFsUmVtb3ZlKC4u
LmFyZ3MoYykpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBkLnJlY2FsY3VsYXRl
KC4uLmFyZ3MoKSk7CisgICAgdGhpcy5hZGRDb25zdHJhaW50c0NvbnN1bWluZ1RvKC4uLmFyZ3Mo
ZC5vdXRwdXQoLi4uYXJncygpKSwgdG9kbykpOworICB9CisgIHJldHVybiB0cnVlOworfQorCisK
Ky8qKgorICogVXBkYXRlIHRoZSB3YWxrYWJvdXQgc3RyZW5ndGhzIGFuZCBzdGF5IGZsYWdzIG9m
IGFsbCB2YXJpYWJsZXMKKyAqIGRvd25zdHJlYW0gb2YgdGhlIGdpdmVuIGNvbnN0cmFpbnQuIEFu
c3dlciBhIGNvbGxlY3Rpb24gb2YKKyAqIHVuc2F0aXNmaWVkIGNvbnN0cmFpbnRzIHNvcnRlZCBp
biBvcmRlciBvZiBkZWNyZWFzaW5nIHN0cmVuZ3RoLgorICovCitQbGFubmVyLnByb3RvdHlwZS5y
ZW1vdmVQcm9wYWdhdGVGcm9tID0gZnVuY3Rpb24gKG91dCkgeworICBvdXQuZGV0ZXJtaW5lZEJ5
ID0gbnVsbDsKKyAgb3V0LndhbGtTdHJlbmd0aCA9IFN0cmVuZ3RoLldFQUtFU1Q7CisgIG91dC5z
dGF5ID0gdHJ1ZTsKKyAgdmFyIHVuc2F0aXNmaWVkID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKC4u
LmFyZ3MoKSk7CisgIHZhciB0b2RvID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKC4uLmFyZ3MoKSk7
CisgIHRvZG8uYWRkKC4uLmFyZ3Mob3V0KSk7CisgIHdoaWxlICh0b2RvLnNpemUoLi4uYXJncygp
KSA+IDApIHsKKyAgICB2YXIgdiA9IHRvZG8ucmVtb3ZlRmlyc3QoLi4uYXJncygpKTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHYuY29uc3RyYWludHMuc2l6ZSguLi5hcmdzKCkpOyBpKyspIHsK
KyAgICAgIHZhciBjID0gdi5jb25zdHJhaW50cy5hdCguLi5hcmdzKGkpKTsKKyAgICAgIGlmICgh
Yy5pc1NhdGlzZmllZCguLi5hcmdzKCkpKQorICAgICAgICB1bnNhdGlzZmllZC5hZGQoLi4uYXJn
cyhjKSk7CisgICAgfQorICAgIHZhciBkZXRlcm1pbmluZyA9IHYuZGV0ZXJtaW5lZEJ5OworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdi5jb25zdHJhaW50cy5zaXplKC4uLmFyZ3MoKSk7IGkrKykg
eworICAgICAgdmFyIG5leHQgPSB2LmNvbnN0cmFpbnRzLmF0KC4uLmFyZ3MoaSkpOworICAgICAg
aWYgKG5leHQgIT0gZGV0ZXJtaW5pbmcgJiYgbmV4dC5pc1NhdGlzZmllZCguLi5hcmdzKCkpKSB7
CisgICAgICAgIG5leHQucmVjYWxjdWxhdGUoLi4uYXJncygpKTsKKyAgICAgICAgdG9kby5hZGQo
Li4uYXJncyhuZXh0Lm91dHB1dCguLi5hcmdzKCkpKSk7CisgICAgICB9CisgICAgfQorICB9Cisg
IHJldHVybiB1bnNhdGlzZmllZDsKK30KKworUGxhbm5lci5wcm90b3R5cGUuYWRkQ29uc3RyYWlu
dHNDb25zdW1pbmdUbyA9IGZ1bmN0aW9uICh2LCBjb2xsKSB7CisgIHZhciBkZXRlcm1pbmluZyA9
IHYuZGV0ZXJtaW5lZEJ5OworICB2YXIgY2MgPSB2LmNvbnN0cmFpbnRzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNjLnNpemUoLi4uYXJncygpKTsgaSsrKSB7CisgICAgdmFyIGMgPSBjYy5hdCgu
Li5hcmdzKGkpKTsKKyAgICBpZiAoYyAhPSBkZXRlcm1pbmluZyAmJiBjLmlzU2F0aXNmaWVkKC4u
LmFyZ3MoKSkpCisgICAgICBjb2xsLmFkZCguLi5hcmdzKGMpKTsKKyAgfQorfQorCisvKiAtLS0g
KgorICogUCBsIGEgbgorICogLS0tICovCisKKy8qKgorICogQSBQbGFuIGlzIGFuIG9yZGVyZWQg
bGlzdCBvZiBjb25zdHJhaW50cyB0byBiZSBleGVjdXRlZCBpbiBzZXF1ZW5jZQorICogdG8gcmVz
YXRpc2Z5IGFsbCBjdXJyZW50bHkgc2F0aXNmaWFibGUgY29uc3RyYWludHMgaW4gdGhlIGZhY2Ug
b2YKKyAqIG9uZSBvciBtb3JlIGNoYW5naW5nIGlucHV0cy4KKyAqLworZnVuY3Rpb24gUGxhbigp
IHsKKyAgdGhpcy52ID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKC4uLmFyZ3MoKSk7Cit9CisKK1Bs
YW4ucHJvdG90eXBlLmFkZENvbnN0cmFpbnQgPSBmdW5jdGlvbiAoYykgeworICB0aGlzLnYuYWRk
KC4uLmFyZ3MoYykpOworfQorCitQbGFuLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkgewor
ICByZXR1cm4gdGhpcy52LnNpemUoLi4uYXJncygpKTsKK30KKworUGxhbi5wcm90b3R5cGUuY29u
c3RyYWludEF0ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgIHJldHVybiB0aGlzLnYuYXQoLi4uYXJn
cyhpbmRleCkpOworfQorCitQbGFuLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgewor
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZSguLi5hcmdzKCkpOyBpKyspIHsKKyAgICB2
YXIgYyA9IHRoaXMuY29uc3RyYWludEF0KC4uLmFyZ3MoaSkpOworICAgIGMuZXhlY3V0ZSguLi5h
cmdzKCkpOworICB9Cit9CisKKy8qIC0tLSAqCisgKiBNIGEgaSBuCisgKiAtLS0gKi8KKworLyoq
CisgKiBUaGlzIGlzIHRoZSBzdGFuZGFyZCBEZWx0YUJsdWUgYmVuY2htYXJrLiBBIGxvbmcgY2hh
aW4gb2YgZXF1YWxpdHkKKyAqIGNvbnN0cmFpbnRzIGlzIGNvbnN0cnVjdGVkIHdpdGggYSBzdGF5
IGNvbnN0cmFpbnQgb24gb25lIGVuZC4gQW4KKyAqIGVkaXQgY29uc3RyYWludCBpcyB0aGVuIGFk
ZGVkIHRvIHRoZSBvcHBvc2l0ZSBlbmQgYW5kIHRoZSB0aW1lIGlzCisgKiBtZWFzdXJlZCBmb3Ig
YWRkaW5nIGFuZCByZW1vdmluZyB0aGlzIGNvbnN0cmFpbnQsIGFuZCBleHRyYWN0aW5nCisgKiBh
bmQgZXhlY3V0aW5nIGEgY29uc3RyYWludCBzYXRpc2ZhY3Rpb24gcGxhbi4gVGhlcmUgYXJlIHR3
byBjYXNlcy4KKyAqIEluIGNhc2UgMSwgdGhlIGFkZGVkIGNvbnN0cmFpbnQgaXMgc3Ryb25nZXIg
dGhhbiB0aGUgc3RheQorICogY29uc3RyYWludCBhbmQgdmFsdWVzIG11c3QgcHJvcGFnYXRlIGRv
d24gdGhlIGVudGlyZSBsZW5ndGggb2YgdGhlCisgKiBjaGFpbi4gSW4gY2FzZSAyLCB0aGUgYWRk
ZWQgY29uc3RyYWludCBpcyB3ZWFrZXIgdGhhbiB0aGUgc3RheQorICogY29uc3RyYWludCBzbyBp
dCBjYW5ub3QgYmUgYWNjb21vZGF0ZWQuIFRoZSBjb3N0IGluIHRoaXMgY2FzZSBpcywKKyAqIG9m
IGNvdXJzZSwgdmVyeSBsb3cuIFR5cGljYWwgc2l0dWF0aW9ucyBsaWUgc29tZXdoZXJlIGJldHdl
ZW4gdGhlc2UKKyAqIHR3byBleHRyZW1lcy4KKyAqLworZnVuY3Rpb24gY2hhaW5UZXN0KG4pIHsK
KyAgcGxhbm5lciA9IG5ldyBQbGFubmVyKC4uLmFyZ3MoKSk7CisgIHZhciBwcmV2ID0gbnVsbCwg
Zmlyc3QgPSBudWxsLCBsYXN0ID0gbnVsbDsKKworICAvLyBCdWlsZCBjaGFpbiBvZiBuIGVxdWFs
aXR5IGNvbnN0cmFpbnRzCisgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykgeworICAgIHZh
ciBuYW1lID0gInYiICsgaTsKKyAgICB2YXIgdiA9IG5ldyBWYXJpYWJsZSguLi5hcmdzKG5hbWUp
KTsKKyAgICBpZiAocHJldiAhPSBudWxsKQorICAgICAgbmV3IEVxdWFsaXR5Q29uc3RyYWludCgu
Li5hcmdzKHByZXYsIHYsIFN0cmVuZ3RoLlJFUVVJUkVEKSk7CisgICAgaWYgKGkgPT0gMCkgZmly
c3QgPSB2OworICAgIGlmIChpID09IG4pIGxhc3QgPSB2OworICAgIHByZXYgPSB2OworICB9CisK
KyAgbmV3IFN0YXlDb25zdHJhaW50KC4uLmFyZ3MobGFzdCwgU3RyZW5ndGguU1RST05HX0RFRkFV
TFQpKTsKKyAgdmFyIGVkaXQgPSBuZXcgRWRpdENvbnN0cmFpbnQoLi4uYXJncyhmaXJzdCwgU3Ry
ZW5ndGguUFJFRkVSUkVEKSk7CisgIHZhciBlZGl0cyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbigu
Li5hcmdzKCkpOworICBlZGl0cy5hZGQoLi4uYXJncyhlZGl0KSk7CisgIHZhciBwbGFuID0gcGxh
bm5lci5leHRyYWN0UGxhbkZyb21Db25zdHJhaW50cyguLi5hcmdzKGVkaXRzKSk7CisgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBmaXJzdC52YWx1ZSA9IGk7CisgICAgcGxh
bi5leGVjdXRlKC4uLmFyZ3MoKSk7CisgICAgaWYgKGxhc3QudmFsdWUgIT0gaSkKKyAgICAgIGFs
ZXJ0KC4uLmFyZ3MoIkNoYWluIHRlc3QgZmFpbGVkLiIpKTsKKyAgfQorfQorCisvKioKKyAqIFRo
aXMgdGVzdCBjb25zdHJ1Y3RzIGEgdHdvIHNldHMgb2YgdmFyaWFibGVzIHJlbGF0ZWQgdG8gZWFj
aAorICogb3RoZXIgYnkgYSBzaW1wbGUgbGluZWFyIHRyYW5zZm9ybWF0aW9uIChzY2FsZSBhbmQg
b2Zmc2V0KS4gVGhlCisgKiB0aW1lIGlzIG1lYXN1cmVkIHRvIGNoYW5nZSBhIHZhcmlhYmxlIG9u
IGVpdGhlciBzaWRlIG9mIHRoZQorICogbWFwcGluZyBhbmQgdG8gY2hhbmdlIHRoZSBzY2FsZSBh
bmQgb2Zmc2V0IGZhY3RvcnMuCisgKi8KK2Z1bmN0aW9uIHByb2plY3Rpb25UZXN0KG4pIHsKKyAg
cGxhbm5lciA9IG5ldyBQbGFubmVyKC4uLmFyZ3MoKSk7CisgIHZhciBzY2FsZSA9IG5ldyBWYXJp
YWJsZSguLi5hcmdzKCJzY2FsZSIsIDEwKSk7CisgIHZhciBvZmZzZXQgPSBuZXcgVmFyaWFibGUo
Li4uYXJncygib2Zmc2V0IiwgMTAwMCkpOworICB2YXIgc3JjID0gbnVsbCwgZHN0ID0gbnVsbDsK
KworICB2YXIgZGVzdHMgPSBuZXcgT3JkZXJlZENvbGxlY3Rpb24oLi4uYXJncygpKTsKKyAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICBzcmMgPSBuZXcgVmFyaWFibGUoLi4uYXJn
cygic3JjIiArIGksIGkpKTsKKyAgICBkc3QgPSBuZXcgVmFyaWFibGUoLi4uYXJncygiZHN0IiAr
IGksIGkpKTsKKyAgICBkZXN0cy5hZGQoLi4uYXJncyhkc3QpKTsKKyAgICBuZXcgU3RheUNvbnN0
cmFpbnQoLi4uYXJncyhzcmMsIFN0cmVuZ3RoLk5PUk1BTCkpOworICAgIG5ldyBTY2FsZUNvbnN0
cmFpbnQoLi4uYXJncyhzcmMsIHNjYWxlLCBvZmZzZXQsIGRzdCwgU3RyZW5ndGguUkVRVUlSRUQp
KTsKKyAgfQorCisgIGNoYW5nZSguLi5hcmdzKHNyYywgMTcpKTsKKyAgaWYgKGRzdC52YWx1ZSAh
PSAxMTcwKSBhbGVydCguLi5hcmdzKCJQcm9qZWN0aW9uIDEgZmFpbGVkIikpOworICBjaGFuZ2Uo
Li4uYXJncyhkc3QsIDEwNTApKTsKKyAgaWYgKHNyYy52YWx1ZSAhPSA1KSBhbGVydCguLi5hcmdz
KCJQcm9qZWN0aW9uIDIgZmFpbGVkIikpOworICBjaGFuZ2UoLi4uYXJncyhzY2FsZSwgNSkpOwor
ICBmb3IgKHZhciBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKKyAgICBpZiAoZGVzdHMuYXQoLi4u
YXJncyhpKSkudmFsdWUgIT0gaSAqIDUgKyAxMDAwKQorICAgICAgYWxlcnQoLi4uYXJncygiUHJv
amVjdGlvbiAzIGZhaWxlZCIpKTsKKyAgfQorICBjaGFuZ2UoLi4uYXJncyhvZmZzZXQsIDIwMDAp
KTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CisgICAgaWYgKGRlc3RzLmF0
KC4uLmFyZ3MoaSkpLnZhbHVlICE9IGkgKiA1ICsgMjAwMCkKKyAgICAgIGFsZXJ0KC4uLmFyZ3Mo
IlByb2plY3Rpb24gNCBmYWlsZWQiKSk7CisgIH0KK30KKworZnVuY3Rpb24gY2hhbmdlKHYsIG5l
d1ZhbHVlKSB7CisgIHZhciBlZGl0ID0gbmV3IEVkaXRDb25zdHJhaW50KC4uLmFyZ3ModiwgU3Ry
ZW5ndGguUFJFRkVSUkVEKSk7CisgIHZhciBlZGl0cyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbigu
Li5hcmdzKCkpOworICBlZGl0cy5hZGQoLi4uYXJncyhlZGl0KSk7CisgIHZhciBwbGFuID0gcGxh
bm5lci5leHRyYWN0UGxhbkZyb21Db25zdHJhaW50cyguLi5hcmdzKGVkaXRzKSk7CisgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgIHYudmFsdWUgPSBuZXdWYWx1ZTsKKyAgICBw
bGFuLmV4ZWN1dGUoLi4uYXJncygpKTsKKyAgfQorICBlZGl0LmRlc3Ryb3lDb25zdHJhaW50KC4u
LmFyZ3MoKSk7Cit9CisKKy8vIEdsb2JhbCB2YXJpYWJsZSBob2xkaW5nIHRoZSBjdXJyZW50IHBs
YW5uZXIuCit2YXIgcGxhbm5lciA9IG51bGw7CisKK2Z1bmN0aW9uIGRlbHRhQmx1ZSgpIHsKKyAg
Y2hhaW5UZXN0KC4uLmFyZ3MoMTAwKSk7CisgIHByb2plY3Rpb25UZXN0KC4uLmFyZ3MoMTAwKSk7
Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMzA7ICsraSkKKyAgICBkZWx0YUJsdWUoLi4uYXJn
cygpKTsK
</data>
<flag name="review"
          id="271676"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246757</attachid>
            <date>2015-02-17 11:10:22 -0800</date>
            <delta_ts>2015-02-18 09:06:36 -0800</delta_ts>
            <desc>closer to landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>298987</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxOCBA
QAorMjAxNS0wMi0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgcmVhbGx5IHN1cHBvcnQgdmFyYXJncworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
T2xpdmVyIEh1bnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgY29tcHJlaGVuc2l2ZSB2
YXJhcmcgY2FsbCBzdXBwb3J0IHRvIHRoZSBERkcgYW5kIEZUTCBjb21waWxlcnMuIFByZXZpb3Vz
bHksIGlmIGEKKyAgICAgICAgZnVuY3Rpb24gaGFkIGEgdmFyYXJncyBjYWxsLCB0aGVuIGl0IGNv
dWxkIG9ubHkgYmUgY29tcGlsZWQgaWYgdGhhdCB2YXJhcmdzIGNhbGwgd2FzIGp1c3QKKyAgICAg
ICAgZm9yd2FyZGluZyBhcmd1bWVudHMgYW5kIHdlIHdlcmUgaW5saW5pbmcgdGhlIGZ1bmN0aW9u
IHJhdGhlciB0aGFuIGNvbXBpbGluZyBpdCBkaXJlY3RseS4gQWxzbywKKyAgICAgICAgb25seSB2
YXJhcmdzIGNhbGxzIHdlcmUgZGVhbHQgd2l0aDsgdmFyYXJncyBjb25zdHJ1Y3RzIHdlcmUgbm90
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBsaWZ0cyBhbGwgb2YgdGhvc2UgcmVzdHJpY3Rpb25z
LiBFdmVyeSB2YXJhcmdzIGNhbGwgb3IgY29uc3RydWN0IGNhbiBub3cgYmUgY29tcGlsZWQgYnkg
Ym90aAorICAgICAgICB0aGUgREZHIGFuZCB0aGUgRlRMLiBUaG9zZSBjYWxscyBjYW4gYWxzbyBi
ZSBpbmxpbmVkLCB0b28gLSBwcm92aWRlZCB0aGF0IHByb2ZpbGluZyBnaXZlcyB1cyBhCisgICAg
ICAgIHNlbnNpYmxlIGJvdW5kIG9uIGFyZ3VtZW50cyBsaXN0IGxlbmd0aC4gV2hlbiB3ZSBpbmxp
bmUgYSB2YXJhcmdzIGNhbGwsIHRoZSBhY3Qgb2YgbG9hZGluZyB0aGUKKyAgICAgICAgdmFyYXJn
cyBpcyBub3cgbWFkZSBleHBsaWNpdCBpbiBJUi4gSSBiZWxpZXZlIHRoYXQgd2UgaGF2ZSBlbm91
Z2ggSVIgbWFjaGluZXJ5IGluIHBsYWNlIHRoYXQgd2UKKyAgICAgICAgd291bGQgYmUgYWJsZSB0
byBkbyB0aGUgYXJndW1lbnRzIGZvcndhcmRpbmcgb3B0aW1pemF0aW9uIGFzIGFuIElSIHRyYW5z
Zm9ybWF0aW9uLiBUaGlzIHBhdGNoCisgICAgICAgIGRvZXNuJ3QgaW1wbGVtZW50IHRoYXQgeWV0
LCBhbmQga2VlcHMgdGhlIG9sZCBieXRlY29kZS1iYXNlZCB2YXJhcmdzIGFyZ3VtZW50IGZvcndh
cmRpbmcKKyAgICAgICAgb3B0aW1pemF0aW9uIGZvciBub3cuCisgICAgICAgIAorICAgICAgICBU
aGVyZSBhcmUgdGhyZWUgbWFqb3IgSVIgZmVhdHVyZXMgaW50cm9kdWNlZCBpbiB0aGlzIHBhdGNo
OgorICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmFyZ3MvQ29uc3RydWN0VmFyYXJnczogdGhlc2Ug
YXJlIGxpa2UgQ2FsbC9Db25zdHJ1Y3QgZXhjZXB0IHRoYXQgdGhleSB0YWtlIGFuIGFyZ3VtZW50
cworICAgICAgICBhcnJheSByYXRoZXIgdGhhbiBhIGxpc3Qgb2YgYXJndW1lbnRzLiBDdXJyZW50
bHksIHRoZXkgc3BsYXQgdGhpcyBhcmd1bWVudHMgYXJyYXkgb250byB0aGUgc3RhY2sKKyAgICAg
ICAgdXNpbmcgdGhlIHNhbWUgYmFzaWMgdGVjaG5pcXVlIGFzIHRoZSBiYXNlbGluZSBKSVQgaGFz
IGFsd2F5cyBkb25lLiBFeGNlcHQsIHRoZXNlIG5vZGVzIGluZGljYXRlCisgICAgICAgIHRoYXQg
d2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIGRvaW5nIHRoZSBub24tZXNjYXBpbmcgImFyZ3VtZW50
cyIgb3B0aW1pemF0aW9uLgorICAgICAgICAKKyAgICAgICAgQ2FsbEZvcndhcmRWYXJhcmdzOiB0
aGlzIGlzIGEgZm9ybSBvZiBDYWxsVmFyYXJncyB0aGF0IGp1c3QgZG9lcyB0aGUgbm9uLWVzY2Fw
aW5nICJhcmd1bWVudHMiCisgICAgICAgIG9wdGltaXphdGlvbiwgYWthIGZvcndhcmRpbmcgYXJn
dW1lbnRzLiBJdCdzIHNvbWV3aGF0IGxhenkgdGhhdCB0aGlzIGRvZXNuJ3QgaW5jbHVkZQorICAg
ICAgICBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncywgYnV0IHRoZSByZWFzb24gaXMgdGhhdCBvbmNl
IHdlIGVsaW1pbmF0ZSB0aGUgbGF6eSB0ZWFyLW9mZiBmb3IKKyAgICAgICAgYXJndW1lbnRzLCB0
aGlzIHdob2xlIHRoaW5nIHdpbGwgaGF2ZSB0byBiZSB0d2Vha2VkIC0gYW5kIGZvciBub3cgZm9y
d2FyZGluZyBvbiBjb25zdHJ1Y3QgaXMganVzdAorICAgICAgICBub3QgaW1wb3J0YW50IGluIGJl
bmNobWFya3MuIENvbnN0cnVjdFZhcmFyZ3Mgd2lsbCBzdGlsbCBkbyBmb3J3YXJkaW5nLCBqdXN0
IG5vdCBpbmxpbmVkLgorICAgICAgICAKKyAgICAgICAgTG9hZFZhcmFyZ3M6IGxvYWRzIGFsbCBl
bGVtZW50cyBvdXQgb2YgYW4gYXJyYXkgb250byB0aGUgc3RhY2sgaW4gYSBtYW5uZXIgc3VpdGFi
bGUgZm9yIGEgdmFyYXJncworICAgICAgICBjYWxsLiBUaGlzIGlzIHVzZWQgb25seSB3aGVuIGEg
dmFyYXJncyBjYWxsIChvciBjb25zdHJ1Y3QpIHdhcyBpbmxpbmVkLiBUaGUgYnl0ZWNvZGUgcGFy
c2VyIHdpbGwKKyAgICAgICAgbWFrZSByb29tIG9uIHRoZSBzdGFjayBmb3IgdGhlIGFyZ3VtZW50
cywgYW5kIHdpbGwgdXNlIExvYWRWYXJhcnMgdG8gcHV0IHRob3NlIGFyZ3VtZW50cyBpbnRvCisg
ICAgICAgIHBsYWNlLgorICAgICAgICAKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIGNv
bnNpZGVyIGFkZGluZyBzdHJlbmd0aCByZWR1Y3Rpb25zIGxpa2U6CisgICAgICAgIAorICAgICAg
ICAtIElmIENhbGxWYXJhcmdzL0NvbnN0cnVjdFZhcmFyZ3Mgc2VlIGFuIGFycmF5IG9mIGtub3du
IHNpemUgd2l0aCBrbm93biBlbGVtZW50cywgdHVybiB0aGVtIGludG8KKyAgICAgICAgICBDYWxs
L0NvbnN0cnVjdC4KKyAgICAgICAgCisgICAgICAgIC0gSWYgQ2FsbFZhcmFyZ3MvQ29uc3RydWN0
VmFyYXJncyBhcmUgcGFzc2VkIGFuIHVubW9kaWZpZWQsIHVuZXNjYXBlZCBBcmd1bWVudHMgb2Jq
ZWN0LCB0aGVuCisgICAgICAgICAgdHVybiB0aGVtIGludG8gQ2FsbEZvcndhcmRWYXJhcmdzL0Nv
bnN0cnVjdEZvcndhcmRWYXJhcmdzLgorICAgICAgICAKKyAgICAgICAgLSBJZiBMb2FkVmFyYXJn
cyBzZWVzIGFuIGFycmF5IG9mIGtub3duIHNpemUsIHRoZW4gdHVybiBpdCBpbnRvIGEgc2VxdWVu
Y2Ugb2YgR2V0QnlWYWxzIGFuZAorICAgICAgICAgIFB1dExvY2Fscy4KKyAgICAgICAgCisgICAg
ICAgIC0gSWYgTG9hZFZhcmFyZ3Mgc2VlcyBhbiB1bm1vZGlmaWVkLCB1bmVzY2FwZWQgQXJndW1l
bnRzIG9iamVjdCwgdGhlbiB0dXJuIGl0IGludG8gc29tZXRoaW5nIGxpa2UKKyAgICAgICAgICBM
b2FkRm9yd2FyZFZhcmFyZ3MuCisgICAgICAgIAorICAgICAgICAtIElmIENhbGxWYXJhcmdzL0Nv
bnN0cnVjdFZhcmFyZ3MvTG9hZFZhcmFyZ3Mgc2VlIHRoZSByZXN1bHQgb2YgYSBzcGxpY2UgKG9y
IG90aGVyIEFycmF5CisgICAgICAgICAgcHJvdG90eXBlIGZ1bmN0aW9uKSwgdGhlbiBkbyB0aGUg
c3BsaWNlIGFuZCB2YXJhcmdzIGxvYWRpbmcgaW4gb25lIGdvIChtYXliZSB2aWEgYSBuZXcgbm9k
ZQorICAgICAgICAgIHR5cGUpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
Ojpyc2hpZnRQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6dXJzaGlmdFB0cik6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6dXJzaGlmdDY0KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OnVyc2hpZnQ2NCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAg
ICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnNocnFfaThyKToKKyAgICAgICAgKiBieXRlY29kZS9D
YWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpDYWxsTGlua0luZm8p
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1
czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1
czo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaDoKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtTdGF0dXM6Om1heE51bUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rU3RhdHVzOjpzZXRJc1Byb3ZlZCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZU9yaWdpbi5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjp2
YXJhcmdzS2luZEZvcik6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6
YXRpb25LaW5kRm9yKToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Mp
OgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmlzTm9ybWFsQ2FsbCk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvRXhpdEtpbmQuY3BwOgorICAgICAgICAoSlNDOjpleGl0S2lu
ZFRvU3RyaW5nKToKKyAgICAgICAgKiBieXRlY29kZS9FeGl0S2luZC5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5Ojpk
dW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVWYXJhcmdzQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmlubGluaW5nQ29zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omlu
bGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9J
bmxpbmVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVUeXBlZEFycmF5Q29uc3Ry
dWN0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFu
dEludGVybmFsRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cmVtb3ZlTGFz
dE5vZGVGcm9tR3JhcGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjp1bmRvRnVuY3Rpb25DaGVja3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAg
ICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgorICAgICAgICAoSlNDOjpERkc6OmZ1bmN0aW9u
Q2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlv
bkZvcik6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmNwcDoKKyAgICAgICAgKFdU
Rjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAo
SlNDOjpERkc6OmNhbklubGluZSk6CisgICAgICAgIChKU0M6OkRGRzo6bGVhc3RVcHBlckJvdW5k
KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2Vz
R0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wQmxvY2tIZWFkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVQcm9maWxlRm9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcik6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZh
bHVlUHJvZmlsZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVF
eGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjptYXlF
eGl0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc0NhbGxWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2FsbFZhcmFy
Z3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmxvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlw
ZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1
dGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZHVtcEFuZFZlcmlmeUdy
YXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpyZWFkVG9wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6d3JpdGVUb3ApOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICog
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6aXNGbHVzaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9w
ZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Rh
Y2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
Ojphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
VmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZUNQUyk6
CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpm
dW5jdGlvblR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om1tQWxs
b2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6c2l6
ZU9mQ2FsbFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVPZkNhbGxGb3J3YXJkVmFy
YXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ29uc3RydWN0VmFyYXJncyk6CisgICAg
ICAgIChKU0M6OkZUTDo6c2l6ZU9mSW4pOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVPZklDRm9y
KToKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZDaGVja0luKTogRGVsZXRlZC4KKyAgICAgICAg
KiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmg6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1Jl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOgor
ICAgICAgICAqIGZ0bC9GVExKU0NhbGxCYXNlLmg6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbFZh
cmFyZ3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpKU0Nh
bGxWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpudW1TcGlsbFNs
b3RzTmVlZGVkKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjplbWl0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRM
SlNDYWxsVmFyYXJncy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdz
Ojpub2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpzdGFja21hcElEKToK
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpvcGVyYXRvcjwpOgorICAgICAgICAq
IGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TXlB
cmd1bWVudHNMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlR2V0TXlBcmd1bWVudEJ5VmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlSW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjplbWl0U3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6dm1DYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6dm1DYWxsTm9F
eGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y2FsbENoZWNr
KToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjpjYWxsKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpzaXplT2ZWYXJhcmdzKToK
KyAgICAgICAgKEpTQzo6c2l6ZUZyYW1lRm9yVmFyYXJncyk6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUpOgorICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXRFeGNlcHRpb25DaGVjayk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdCk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpjYWxsZWVGcmFtZVRhZ1Nsb3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmNhbGxlZUFyZ3VtZW50VGFnU2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6Y2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6Y2FsbGVlRnJhbWVDYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUik6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5o
OgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZSk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0
dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAg
ICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVT
ZXR1cFZhcmFyZ3NGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Y2F0Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1l
RmFzdENhc2UpOgorICAgICAgICAqIGppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAg
ICAgKEpTQzo6QXJndW1lbnRzOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnJl
Z2lzdGVyQXJyYXlTaXplSW5CeXRlcyk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1pbmxpbmUtc21hbGxlci1Gb28uanM6IEFkZGVkLgor
ICAgICAgICAoRm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAg
ICAgICAgKHRlc3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1p
bmxpbmUuanM6IEFkZGVkLgorICAgICAgICAoRm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAg
IChjaGVja0VxdWFsKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9j
b25zdHJ1Y3QtdmFyYXJncy1uby1pbmxpbmUuanM6IEFkZGVkLgorICAgICAgICAoRm9vKToKKyAg
ICAgICAgKGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAgICAgICAgKHRlc3QpOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLWluLWlubGluZWQtdmFyYXJn
cy1jYWxsLW91dC1vZi1ib3VuZHMuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAg
KGJhcik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2dldC1hcmd1bWVudC1ieS12YWwtc2FmZS1p
bi1pbmxpbmVkLXZhcmFyZ3MtY2FsbC1vdXQtb2YtYm91bmRzLmpzOiBBZGRlZC4KKyAgICAgICAg
KGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9nZXQtbXktYXJn
dW1lbnQtYnktdmFsLWNyZWF0ZXMtYXJndW1lbnRzLmpzOiBBZGRlZC4KKyAgICAgICAgKGJsYWgp
OgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToK
KyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhl
bi1pbmxpbmVkLWNhbGwtZXhpdC1pbi1mb28uanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAg
ICAgICAgKGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWlubGluZWQuanM6IEFkZGVkLgorICAg
ICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChiYXopOgorICAgICAgICAoY2hl
Y2tFcXVhbCk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbG9hZC12
YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAg
ICAgIChiYXIpOgorICAgICAgICAoY2hlY2tFcXVhbCk6CisgICAgICAgICh0ZXN0KToKKwogMjAx
NS0wMi0xNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBleHBl
cmltZW50YWwgPGF0dGFjaG1lbnQ+IGVsZW1lbnQgc3VwcG9ydApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NDQsNiArODQ0LDcgQEAg
aWYgKEVOQUJMRV9GVExfSklUKQogICAgICAgICBmdGwvRlRMSklURmluYWxpemVyLmNwcAogICAg
ICAgICBmdGwvRlRMSlNDYWxsLmNwcAogICAgICAgICBmdGwvRlRMSlNDYWxsQmFzZS5jcHAKKyAg
ICAgICAgZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCiAgICAgICAgIGZ0bC9GVExMaW5rLmNwcAog
ICAgICAgICBmdGwvRlRMTG9jYXRpb24uY3BwCiAgICAgICAgIGZ0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNp
b24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTExLDYgKzUxMSw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSklURmluYWxpemVyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGwuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbEJhc2UuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbFZhcmFyZ3MuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTExpbmsuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZnRsXEZUTExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExMb3dlckRGR1RvTExWTS5jcHAiIC8+CkBAIC0xMTk0LDYgKzExOTUsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpJVEZpbmFsaXplci5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbEJhc2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGxWYXJhcmdzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMTGluay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
TG93ZXJERkdUb0xMVk0uaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4
IEBACiAJCTBGQ0VGQUUwMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAw
NDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEMTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
MTIwMkQxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQx
MjAzMDFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8q
IEZUTEpTQ2FsbEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkQxMjAzMzFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAz
MTFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEy
MDM0MUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQy
QzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZE
ODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87
IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZE
ODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VG
QURFMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExMb2NhdGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBG
VExKU0NhbGxCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZU
TEpTQ2FsbEJhc2UuY3BwOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxs
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7
IHBhdGggPSBmdGwvRlRMSlNDYWxsQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0
aCA9IGZ0bC9GVExKU0NhbGxWYXJhcmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZEMTIwMzIxQThDODVCRDAwMEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRs
L0ZUTEpTQ2FsbFZhcmFyZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5
MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBk
ZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIx
NDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlF
OTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4
MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oICovLAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBG
VExKU0NhbGxWYXJhcmdzLmNwcCAqLywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5oICovLAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBG
VExMaW5rLmNwcCAqLywKIAkJCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5o
ICovLAogCQkJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8s
CkBAIC01NDQ5LDYgKzU0NTUsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBC
eXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAv
KiBBUk12N0RPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQx
MjAzNDFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdBOEFGMzUxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZDOTlENTE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJp
bmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIx
NzQgLyogQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3
IEBACiAJCQkJQTc4QTk3NzQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmlu
YWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAv
KiBERkdGaXh1cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQw
MDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQz
Mzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NzEsNiArNDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxz
aGlmdDMyKHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAK
KyAgICB2b2lkIHJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7
CisgICAgICAgIHJzaGlmdDMyKHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgdXJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVz
dCkKKyAgICB7CisgICAgICAgIHVyc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBz
cmNEZXN0KTsKKyAgICB9CiAKICAgICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewpAQCAtNzUwLDYgKzc2MCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJ
bW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRy
KEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQo
dHJ1c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1
cnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAg
dXJzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwog
ICAgIHZvaWQgbmVnUHRyKFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRl
c3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02ODksNiArNjg5LDI2IEBAIHB1YmxpYzoKICAgICAgICAgdXJzaGlmdDMyKGRlc3QsIGltbSwg
ZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB1cnNoaWZ0NjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxzcjw2ND4oZGVzdCwgc3JjLCBzaGlmdEFtb3VudCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgdXJzaGlmdDY0KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sc3I8NjQ+KGRlc3QsIHNyYywg
aW1tLm1fdmFsdWUgJiAweDFmKTsKKyAgICB9CisKKyAgICB2b2lkIHVyc2hpZnQ2NChSZWdpc3Rl
cklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB1cnNoaWZ0
NjQoZGVzdCwgc2hpZnRBbW91bnQsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHVyc2hp
ZnQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB1
cnNoaWZ0NjQoZGVzdCwgaW1tLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHhvcjMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICB4b3IzMihkZXN0LCBz
cmMsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMzQsNiArMzM0LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0K
ICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVz
dCk7CisgICAgfQorICAgIAogICAgIHZvaWQgbXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgx
LDYgKzg4MSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFf
aThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAx
KQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JP
VVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJYiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAg
ICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcg
QEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhh
c1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQogICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNl
KQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUpCisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDAp
CiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgwKQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3
IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhh
c1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBl
CiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDogODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50
czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdzIGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRo
Q291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE4
MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAgLy8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywg
YnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNw
ZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0
dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBD
YWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNh
bGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1fbWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZv
Lm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1
cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkz
LDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1
cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJh
c2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxsTGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRD
YWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkKK3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlh
bnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9jb3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAg
IG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBib29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVD
YWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsg
aS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBAIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJp
bnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAoIW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1wKG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAo
bV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3Vt
ZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMu
aAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogICAgIAotICAgIENhbGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29s
IGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAgbV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBj
b21wdXRlRm9yKAogICAgICAgICBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBj
b25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApAQCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwg
Q29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwog
ICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAg
IAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkg
fHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAgLTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkg
Y2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3Vt
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEz
NSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZhcmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9v
bCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAgIGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25l
ZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24g
MTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAg
ICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJp
bnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJ
bmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2Fs
bCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2lu
ZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAgIENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFy
Z3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFyZ3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3Ig
dGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBs
dXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAgICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0
OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAg
fQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZhcmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNl
IENvZGVGb3JDYWxsOgorICAgICAgICAgICAgcmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBj
YXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJn
czsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gQ2FsbDsKKyAgICB9CisgICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXph
dGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kRm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAg
IHN3aXRjaCAoa2luZCkgewogICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVyQ2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxs
OgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENvZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2luZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFy
YXJncyhLaW5kIGtpbmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAg
Y2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFy
YXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CisgICAgYm9vbCBpc1ZhcmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAog
ICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4K
ICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwx
MCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2Fs
bGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJlZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hp
bmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09m
ZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtpbmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAor
ICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyBy
ZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNl
IHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9zY29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZH
IHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFibGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNv
dmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAv
LyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBjb2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2Rp
ZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9sbG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1Jl
Z2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENvZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAvLyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZh
cmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBUaGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24g
b2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVlcyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUn
cyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNp
b24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNw
cAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw2ICs2Niw4IEBAIGNvbnN0
IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQga2kKICAgICAgICAgcmV0dXJuICJBcmd1
bWVudHNFc2NhcGVkIjsKICAgICBjYXNlIE5vdFN0cmluZ09iamVjdDoKICAgICAgICAgcmV0dXJu
ICJOb3RTdHJpbmdPYmplY3QiOworICAgIGNhc2UgVmFyYXJnc092ZXJmbG93OgorICAgICAgICBy
ZXR1cm4gIlZhcmFyZ3NPdmVyZmxvdyI7CiAgICAgY2FzZSBVbmNvdW50YWJsZToKICAgICAgICAg
cmV0dXJuICJVbmNvdW50YWJsZSI7CiAgICAgY2FzZSBVbmNvdW50YWJsZUludmFsaWRhdGlvbjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCShyZXZpc2lv
biAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw2ICs0NSw3IEBAIGVudW0gRXhpdEtpbmQgOiB1
aW50OF90IHsKICAgICBJbmFkZXF1YXRlQ292ZXJhZ2UsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdl
IGVuZGVkIHVwIGluIGNvZGUgdGhhdCBkaWRuJ3QgaGF2ZSBwcm9maWxpbmcgY292ZXJhZ2UuCiAg
ICAgQXJndW1lbnRzRXNjYXBlZCwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYXJndW1lbnRzIGVzY2Fw
ZWQgYnV0IHdlIGRpZG4ndCBleHBlY3QgdGhlbSB0by4KICAgICBOb3RTdHJpbmdPYmplY3QsIC8v
IFdlIGV4aXRlZCBiZWNhdXNlIHdlIHNob3VsZG4ndCBoYXZlIGF0dGVtcHRlZCB0byBvcHRpbWl6
ZSBzdHJpbmcgb2JqZWN0IGFjY2Vzcy4KKyAgICBWYXJhcmdzT3ZlcmZsb3csIC8vIFdlIGV4aXRl
ZCBiZWNhdXNlIGEgdmFyYXJncyBjYWxsIHBhc3NlZCBtb3JlIGFyZ3VtZW50cyB0aGFuIHdlIGV4
cGVjdGVkLgogICAgIFVuY291bnRhYmxlLCAvLyBXZSBleGl0ZWQgZm9yIG5vbmUgb2YgdGhlIGFi
b3ZlIHJlYXNvbnMsIGFuZCB3ZSBzaG91bGQgbm90IGNvdW50IGl0LiBNb3N0IHVzZXMgb2YgdGhp
cyBzaG91bGQgYmUgdmlld2VkIGFzIGEgRklYTUUuCiAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRp
b24sIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlkYXRlZDsg
dGhpcyBtZWFucyB0aGF0IHdlJ3ZlIGFscmVhZHkgY291bnRlZCB0aGUgcmVhc29ucyB3aHkgdGhl
IGNvZGUgYmxvY2sgd2FzIGludmFsaWRhdGVkLgogICAgIFdhdGNoZG9nVGltZXJGaXJlZCwgLy8g
V2UgZXhpdGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBzZXJ2aWNlIHRoZSB3YXRjaGRvZyB0aW1lci4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsMjUgKzky
LDI1IEBAIHZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcEluQ29udGV4dChQcmludFMKICAgICAgICAg
cmV0dXJuOwogI2VuZGlmCiAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91
dC5wcmludGYoIiolZCIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKKyAgICAgICAgb3V0
LnByaW50KCIqIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50ZigiKmludDMyKCVk
KSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIqaW50
MzIoIiwgdmlydHVhbFJlZ2lzdGVyKCksICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJpbnRmKCIqaW50NTIoJWQp
IiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIippbnQ1
MigiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
U3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludGYoIipzdHJp
Y3RJbnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CisgICAgICAgIG91dC5w
cmludCgiKnN0cmljdEludDUyKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5w
cmludGYoIipkb3VibGUoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAg
ICBvdXQucHJpbnQoIipkb3VibGUoIiwgdmlydHVhbFJlZ2lzdGVyKCksICIpIik7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5w
cmludGYoIipjZWxsKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKKyAgICAgICAg
b3V0LnByaW50KCIqY2VsbCgiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgb3V0LnBy
aW50ZigiKmJvb2woJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBv
dXQucHJpbnQoIipib29sKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CiAgICAgICAgIG91dC5w
cmludGYoImFyZ3VtZW50cyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTgw
MjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5NCw5ICsxOTQsMjAgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKLSAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3Vt
ZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS5ibG9jaygpLT52YWx1
ZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICAvLyBB
c3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4gU2V0QXJndW1l
bnQgbWVhbnMgdGhhdCBzb21lb25lIHNldAorICAgICAgICAvLyB0aGUgYXJndW1lbnQgdmFsdWVz
IG91dC1vZi1iYW5kLCBhbmQgY3VycmVudGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8g
YQorICAgICAgICAvLyBub24tY2xlYXIgdmFsdWUuCisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS52
YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIExvYWRW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBtX3N0
YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldFR5cGUoU3BlY0ludDMyKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQgLSAxOyBpLS07KQorICAgICAg
ICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsg
aSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKQEAgLTEzMjQsNyArMTMzNSw4IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFy
Z3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2Ug
Y29uc3RhbnQgZm9sZGluZwogICAgICAgICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVj
YXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAg
ICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9u
LgotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgewor
ICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAg
ICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKSB7CiAgICAgICAgICAgICBzZXRDb25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBq
c051bWJlcihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpIC0gMSkpOwogICAgICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAv
LyBQcmV0ZW5kIHRoYXQgd2UgY2xvYmJlcmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4K
QEAgLTE5NzMsNiArMTk4NSw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2Fz
ZSBOYXRpdmVDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxG
b3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUwMyw2ICs1MDMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIW9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBXZSBrbm93
IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBCdXQgb25seSBhZnRlciB3ZSBoYXZlIGNo
ZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBub2JvZHkgaGFzIGVzY2FwZWQgb3Vy
IGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3
MCw4IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4K
LSAgICBib29sIGhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIGJvb2wgaGFuZGxlTWluTWF4KGlu
dCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNr
cyk7CiAgICAgCiAgICAgLy8gSGFuZGxlIGNhbGxzLiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJy
b3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmluc2ljcy4KICAgICB2b2lkIGhhbmRsZUNhbGwoCkBA
IC0xODIsMjAgKzE4MywyNSBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBp
bnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtTdGF0dXMpOwogICAgIHZv
aWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQs
IGludCByZWdpc3Rlck9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBw
YywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAgIHZvaWQgZW1pdEZ1
bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAgIHZvaWQgdW5kb0Z1bmN0aW9uQ2hl
Y2tzKENhbGxWYXJpYW50KTsKKyAgICB2b2lkIGhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9u
KiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgZW1p
dEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc0FyZ3VtbnQpOwogICAgIHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOwogICAgIHVuc2lnbmVkIGlubGluaW5nQ29zdChDYWxsVmFyaWFudCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsgLy8g
UmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFuIGlubGluaW5nIGNhbmRpZGF0ZS4gQnkgY29u
dmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29zdCBvZiAxLgogICAgIC8vIEhhbmRsZSBpbmxp
bmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBs
YW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNl
dCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24pOworICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rl
ck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJ
bmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIGVu
dW0gQ2FsbGVyTGlua2FiaWxpdHkgeyBDYWxsZXJEb2VzTm9ybWFsTGlua2luZywgQ2FsbGVyTGlu
a3NNYW51YWxseSB9OwotICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSk7Ci0gICAgdm9pZCBpbmxpbmVD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQs
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNp
Z25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIGJvb2wgYXR0ZW1w
dFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENh
bGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJM
aW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5n
QmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNl
dCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgY29uc3QgQ2hlY2tz
RnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB2b2lkIGNhbmNlbExpbmtpbmdGb3JCbG9jayhJ
bmxpbmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAvLyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdp
dmVuIGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5s
aW5lIHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1
cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxs
LgotICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMs
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKLSAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1
Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSk7Ci0g
ICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQs
IEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICBib29sIGhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0
T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgQ2hlY2tzRnVu
Y3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9y
PgorICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGludCByZXN1bHRPcGVyYW5k
LCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNl
cnRDaGVja3MpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9v
bCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVy
bmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5z
ZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUpOwogICAgIE5vZGUq
IGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9k
ZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlkKApAQCAtNTI4
LDYgKzUzNCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0
YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkp
OworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAg
ICAgICAgICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZVN0YWNrRW50cnktPm1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBudW1Bcmd1
bWVudHM7IGFyZ3VtZW50LS0gPiAxOykKQEAgLTY1NCwxMyArNjYyLDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZW1vdmVMYXN0Tm9k
ZUZyb21HcmFwaChOb2RlVHlwZSBleHBlY3RlZE5vZGVUeXBlKQotICAgIHsKLSAgICAgICAgTm9k
ZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT50YWtlTGFzdCgpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVChub2RlLT5vcCgpID09IGV4cGVjdGVkTm9kZVR5cGUpOwotICAgICAgICBtX2dyYXBoLm1f
YWxsb2NhdG9yLmZyZWUobm9kZSk7Ci0gICAgfQotCiAgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChO
b2RlKiBjaGlsZCkKICAgICB7CiAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBl
bmQoRWRnZShjaGlsZCkpOwpAQCAtNjkxLDcgKzY5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBvcCwgb3BJbmZvLCBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlv
bik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKICAgICAgICAg
aWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCksIGNhbGwpOworICAgICAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CiAgICAg
ICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKQEAgLTEwNDIsOCArMTA0Myw4IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiB7CiAgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0
IDw9IDApOwogICAgIAotICAgIGlmIChjYWxsVGFyZ2V0LT5oYXNDb25zdGFudCgpKQotICAgICAg
ICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgp
KS5zZXRJc1Byb3ZlZCh0cnVlKTsKKyAgICBpZiAoY2FsbFRhcmdldC0+aXNDZWxsQ29uc3RhbnQo
KSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZh
cmlhbnQoY2FsbFRhcmdldC0+YXNDZWxsKCkpKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxpbmcg
Y2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxu
Iik7CkBAIC0xMDYwLDcgKzEwNjEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxs
KAogICAgIAogICAgIE9wSW5mbyBjYWxsT3BJbmZvOwogICAgIAotICAgIGlmIChoYW5kbGVJbmxp
bmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0
aW9uKSkgeworICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxM
aW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwg
cmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgewogICAgICAgICBp
ZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOwogICAgICAgICByZXR1cm47CkBAIC0xMDcyLDcgKzEw
NzMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5mdW5jdGlvbigpOwogICAgICAgICBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6
YXRpb25LaW5kRm9yKGtpbmQpOwogICAgICAgICBpZiAoZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlz
SG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUs
IGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxlZSwgY2FsbFRhcmdldCwgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIGNhbGxPcElu
Zm8gPSBPcEluZm8obV9ncmFwaC5mcmVlemUoZnVuY3Rpb24pKTsKIAogICAgICAgICAgICAgaWYg
KG9wID09IENhbGwpCkBAIC0xMDg4LDExICsxMDg5LDU0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsT3BJbmZvLCBjYWxsVGFy
Z2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rp
b24pOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZh
cmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFy
Z3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKLSAgICBOb2RlKiB0aGlzQXJndW1lbnQ7CisgICAgQVNTRVJUKE9QQ09ERV9M
RU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJh
cmdzKSk7CisgICAgCisgICAgaW50IHJlc3VsdCA9IHBjWzFdLnUub3BlcmFuZDsKKyAgICBpbnQg
Y2FsbGVlID0gcGNbMl0udS5vcGVyYW5kOworICAgIGludCB0aGlzUmVnID0gcGNbM10udS5vcGVy
YW5kOworICAgIGludCBhcmd1bWVudHMgPSBwY1s0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0
RnJlZVJlZyA9IHBjWzVdLnUub3BlcmFuZDsKKyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBw
Y1s2XS51Lm9wZXJhbmQ7CisgICAgCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdl
dFByZWRpY3Rpb24oKTsKKyAgICAKKyAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjYWxsZWUpKTsKKyAgICAKKyAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1
cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksCisgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1hcCk7CisgICAgaWYgKGNh
bGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50KCkpCisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFBy
b3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxWYXJpYW50KGNhbGxUYXJnZXQtPmFzQ2VsbCgpKSk7Cisg
ICAgCisgICAgaWYgKGNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkKKyAgICAgICAgJiYgaGFu
ZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVl
UmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMp
LCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVDYWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQp
LCBwcmVkaWN0aW9uKSkgeworICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAg
ICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1f
Z3JhcGgubV9jYWxsVmFyYXJnc0RhdGEuYWRkKCk7CisgICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZz
ZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAgICAKKyAgICBOb2RlKiB0aGlzQ2hpbGQ7CiAgICAg
aWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICB0aGlz
Q2hpbGQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKTsKKyAgICBlbHNlCisgICAgICAg
IHRoaXNDaGlsZCA9IG51bGxwdHI7CisgICAgCisgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgo
b3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBjYWxsVGFyZ2V0LCBnZXQoVmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLCB0aGlzQ2hpbGQpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRSZWcocmVzdWx0KTsKKyAgICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKKyAgICAg
ICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7Cit9CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRG
dW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBjYWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1
YWxSZWdpc3RlciB0aGlzQXJndW1lbnRSZWcpCit7CisgICAgTm9kZSogdGhpc0FyZ3VtZW50Owor
ICAgIGlmICh0aGlzQXJndW1lbnRSZWcuaXNWYWxpZCgpKQorICAgICAgICB0aGlzQXJndW1lbnQg
PSBnZXQodGhpc0FyZ3VtZW50UmVnKTsKICAgICBlbHNlCiAgICAgICAgIHRoaXNBcmd1bWVudCA9
IDA7CiAKQEAgLTExMTAsMTMgKzExNTQsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVu
Y3Rpb25DaGVja3MoCiAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZy
ZWV6ZShjYWxsZWVDZWxsKSksIGNhbGxUYXJnZXRGb3JDaGVjaywgdGhpc0FyZ3VtZW50KTsKIH0K
IAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6dW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNh
bGxlZSkKLXsKLSAgICByZW1vdmVMYXN0Tm9kZUZyb21HcmFwaChDaGVja0NlbGwpOwotICAgIGlm
IChjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpKQotICAgICAgICByZW1vdmVMYXN0Tm9kZUZyb21HcmFw
aChHZXRFeGVjdXRhYmxlKTsKLX0KLQogdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50
UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBmb3IgKGludCBpID0ga2lu
ZCA9PSBDb2RlRm9yQ2FsbCA/IDAgOiAxOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
ICsraSkKQEAgLTExMzEsNyArMTE2OCw3IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjppbmxp
bmluZ0Nvc3QoQ2EKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsZWUu
ZnVuY3Rpb25FeGVjdXRhYmxlKCk7CiAgICAgaWYgKCFleGVjdXRhYmxlKSB7CiAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGVy
ZSBpcyBubyBmdW5jdGlvbiBleGVjdXRhYmxlLiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAg
IEZhaWxpbmcgYmVjYXVzZSB0aGVyZSBpcyBubyBmdW5jdGlvbiBleGVjdXRhYmxlLlxuIik7CiAg
ICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICB9CiAgICAgCkBAIC0xMTU4LDYgKzExOTUsMTYg
QEAgdW5zaWduZWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29zdChDYQogICAgIH0KICAgICBD
YXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsID0gaW5saW5lRnVuY3Rpb25Gb3JDYXBhYmls
aXR5TGV2ZWwoCiAgICAgICAgIGNvZGVCbG9jaywga2luZCwgY2FsbGVlLmlzQ2xvc3VyZUNhbGwo
KSk7CisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygiICAgIEtpbmQ6ICIsIGtp
bmQsICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgSXMgY2xvc3VyZSBjYWxsOiAiLCBjYWxs
ZWUuaXNDbG9zdXJlQ2FsbCgpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiICAgIENhcGFiaWxp
dHkgbGV2ZWw6ICIsIGNhcGFiaWxpdHlMZXZlbCwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAg
ICBNaWdodCBpbmxpbmUgZnVuY3Rpb246ICIsIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3IoY29kZUJs
b2NrLCBraW5kKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICBNaWdodCBjb21waWxlIGZ1
bmN0aW9uOiAiLCBtaWdodENvbXBpbGVGdW5jdGlvbkZvcihjb2RlQmxvY2ssIGtpbmQpLCAiXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiICAgIElzIHN1cHBvcnRlZCBmb3IgaW5saW5pbmc6ICIsIGlz
U3VwcG9ydGVkRm9ySW5saW5pbmcoY29kZUJsb2NrKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2co
IiAgICBOZWVkcyBhY3RpdmF0aW9uOiAiLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5u
ZWVkc0FjdGl2YXRpb24oKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICBJcyBpbmxpbmlu
ZyBjYW5kaWRhdGU6ICIsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlzSW5saW5pbmdD
YW5kaWRhdGUoKSwgIlxuIik7CisgICAgfQogICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlM
ZXZlbCkpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
RmFpbGluZyBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgaW5saW5lYWJsZS5cbiIpOwpAQCAt
MTIxMCwxMyArMTI1NywxNSBAQCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0
KENhCiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpOwogfQogCi12b2lk
IEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVz
dWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2Fs
bEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5KQor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6Omlu
bGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFy
aWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwg
Q2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxpdHksIGNvbnN0IENoZWNrc0Z1bmN0b3Im
IGluc2VydENoZWNrcykKIHsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0
aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwog
ICAgIAogICAgIEFTU0VSVChpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKSAhPSBVSU5UX01BWCk7CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCktPmJhc2VsaW5l
Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgaW5zZXJ0Q2hlY2tzKGNvZGVC
bG9jayk7CiAKICAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2ggY29uc3RhbnRzIQogICAgIApAQCAt
MTM1Niw0NCArMTQwNSw2MiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpjYW5jZWxMaW5raW5nRm9y
QmxvCiAgICAgfQogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxs
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2Fs
bGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
dW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxp
bmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1
bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rv
cj4KK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2Fs
bGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxp
bmluZ0JhbGFuY2UsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFt
ZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIAogICAgIGlmICghaW5saW5pbmdC
YWxhbmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgYm9vbCBkaWRJbnNlcnRD
aGVja3MgPSBmYWxzZTsKKyAgICBhdXRvIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nID0gWyZd
ICgpIHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKG51bGxwdHIpOworICAgICAgICBkaWRJbnNlcnRD
aGVja3MgPSB0cnVlOworICAgIH07CisgICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRh
dGFMb2coIiAgICBDb25zaWRlcmluZyBjYWxsZWUgIiwgY2FsbGVlLCAiXG4iKTsKKyAgICAKICAg
ICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUuaW50ZXJuYWxGdW5jdGlv
bigpKSB7Ci0gICAgICAgIGlmIChoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0
T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKSkgeworICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJ
bnRlcm5hbEZ1bmN0aW9uKHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCwgaW5zZXJ0Q2hl
Y2tzV2l0aEFjY291bnRpbmcpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRJbnNl
cnRDaGVja3MpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0Tm9k
ZSk7CiAgICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAg
ICBpbmxpbmluZ0JhbGFuY2UtLTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkaWRJbnNlcnRDaGVja3MpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIEludHJpbnNpYyBpbnRyaW5zaWMgPSBjYWxsZWUu
aW50cmluc2ljRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaWYgKGludHJpbnNpYyAhPSBO
b0ludHJpbnNpYykgewotICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3VsdE9wZXJhbmQs
IGludHJpbnNpYywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBw
cmVkaWN0aW9uKSkgeworICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3VsdE9wZXJhbmQs
IGludHJpbnNpYywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBw
cmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGRpZEluc2VydENoZWNrcyk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20sIGNhbGxUYXJnZXROb2RlKTsKICAgICAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21z
KHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENo
ZWNrcyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQg
bXlJbmxpbmluZ0Nvc3QgPSBpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpZiAobXlJbmxpbmluZ0Nvc3QgPiBp
bmxpbmluZ0JhbGFuY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpbmxpbmVD
YWxsKGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsZWUsIHJlZ2lzdGVyT2Zmc2V0
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgY2FsbGVyTGlu
a2FiaWxpdHkpOworCisgICAgaW5saW5lQ2FsbChjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFu
ZCwgY2FsbGVlLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIGNhbGxlckxpbmthYmlsaXR5LCBpbnNlcnRDaGVja3MpOwogICAgIGlu
bGluaW5nQmFsYW5jZSAtPSBteUlubGluaW5nQ29zdDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUs
IGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMs
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNp
Z25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBr
aW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoCisgICAgTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5k
LCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsCisgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0T3JGaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCisgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFM
b2coIkhhbmRsaW5nIGlubGluaW5nLi4uXG4iKTsKQEAgLTE0MDcsNiArMTQ3NCwxMyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCisgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQp
CisgICAgICAgICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9uczo6
bWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZygpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZhcmFyZ3MuXG4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAgdW5zaWduZWQg
aW5saW5pbmdCYWxhbmNlID0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5kID09
IENvZGVGb3JDb25zdHJ1Y3QpCiAgICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0ZDo6bWluKGlu
bGluaW5nQmFsYW5jZSwgT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5l
Q2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpKTsKQEAgLTE0MTcsMTcgKzE0OTEsMTA1IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBzaW1wbGlmaWNh
dGlvbiBvbiB0aGUgZmx5IGFuZCB0aGlzIGhlbHBzIHJlZHVjZSBjb21waWxlIHRpbWVzLCBidXQg
d2UgY2FuIG9ubHkgbGV2ZXJhZ2UKICAgICAvLyB0aGlzIGluIGNhc2VzIHdoZXJlIHdlIGRvbid0
IG5lZWQgY29udHJvbCBmbG93IGRpYW1vbmRzIHRvIGNoZWNrIHRoZSBjYWxsZWUuCiAgICAgaWYg
KCFjYWxsTGlua1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVzLnNp
emUoKSA9PSAxKSB7Ci0gICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcygKLSAgICAgICAgICAgIGNh
bGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxp
emF0aW9uS2luZCk7CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldDsKKyAgICAgICAgCisgICAg
ICAgIC8vIE9ubHkgdXNlZCBmb3IgdmFyYXJncyBjYWxscy4KKyAgICAgICAgdW5zaWduZWQgbWFu
ZGF0b3J5TWluaW11bSA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IDA7
CisKKyAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpKSB7CisgICAg
ICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBjYWxs
TGlua1N0YXR1c1swXS5mdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICBtYW5k
YXRvcnlNaW5pbXVtID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBpbmNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIG1h
eE51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVz
Lm1heE51bUFyZ3VtZW50cygpLAorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gKyAx
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugc29ydCBvZiBwcmV0ZW5kIHRoYXQg
dGhpcyAqaXMqIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgd2VyZSBwYXNzZWQuCisgICAg
ICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IG1heE51bUFyZ3VtZW50czsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9y
Rmlyc3RGcmVlUmVnICsgMTsKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IG1heE51bUFy
Z3VtZW50czsgLy8gaW5jbHVkZXMgInRoaXMiCisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAt
PSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAgICAgICAgIHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0
T3JGaXJzdEZyZWVSZWc7CisgICAgICAgIAogICAgICAgICBib29sIHJlc3VsdCA9IGF0dGVtcHRU
b0lubGluZUNhbGwoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwg
Y2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0LAogICAgICAgICAgICAgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxlckRvZXNOb3JtYWxMaW5r
aW5nLCBwcmVkaWN0aW9uLAotICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlKTsKLSAgICAgICAg
aWYgKCFyZXN1bHQgJiYgIWNhbGxMaW5rU3RhdHVzLmlzUHJvdmVkKCkpCi0gICAgICAgICAgICB1
bmRvRnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXNbMF0pOworICAgICAgICAgICAgaW5saW5p
bmdCYWxhbmNlLCBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgc3Bl
Y2lhbGl6YXRpb25LaW5kID09IENvZGVGb3JDYWxsID8gdGhpc0FyZ3VtZW50IDogVmlydHVhbFJl
Z2lzdGVyKCkpOworCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHZhcmFyZ3MgY2Fs
bCwgd2Ugd2FudCB0byBleHRyYWN0IHRoZSBhcmd1bWVudHMgcmlnaHQgbm93LgorICAgICAgICAg
ICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgeworICAgICAgICAg
ICAgICAgICAgICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0KSkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpbnQgYXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlbWFwcGVkQXJn
dW1lbnRTdGFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpKS5vZmZzZXQoKTsKKwor
ICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9h
ZFZhcmFyZ3NEYXRhLmFkZCgpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGFydCA9IFZp
cnR1YWxSZWdpc3RlcihyZW1hcHBlZEFyZ3VtZW50U3RhcnQgKyAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YS0+Y291bnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNl
dCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5v
ZmZzZXQgPSBhcmd1bWVudHNPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmxpbWl0
ID0gbWF4TnVtQXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYW5kYXRvcnlN
aW5pbXVtID0gbWFuZGF0b3J5TWluaW11bTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNB
cmd1bWVudCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIEluIERGRyBJ
UiBiZWZvcmUgU1NBLCB3ZSBjYW5ub3QgaW5zZXJ0IGNvbnRyb2wgZmxvdyBiZXR3ZWVuIGFmdGVy
IHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBhbmQgdGhlIGxhc3QgU2V0
QXJndW1lbnQuIFRoaXMgaXNuJ3QgYSBwcm9ibGVtIG9uY2Ugd2UgZ2V0IHRvIERGRworICAgICAg
ICAgICAgICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVh
c29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKKyAgICAgICAgICAgICAgICAgICAg
Ly8gYmVmb3JlIFNTQS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAg
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNl
dCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgcHJldHR5IGxhbWUsIGJ1dCBpdCB3aWxsIGZvcmNlIHRoZSBjb3VudCB0byBi
ZSBmbHVzaGVkIGFzIGFuIGludC4gVGhpcyBkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgIC8v
IG1hdHRlciB2ZXJ5IG11Y2gsIHNpbmNlIG91ciB1c2Ugb2YgYSBTZXRBcmd1bWVudCBhbmQgRmx1
c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCisgICAgICAgICAgICAgICAgICAgIC8vIG1vc3Rs
eSBqdXN0IGEgZm9ybWFsaXR5LgorICAgICAgICAgICAgICAgICAgICBjb3VudFZhcmlhYmxlLT5w
cmVkaWN0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgICAgIGNvdW50VmFyaWFibGUtPm1l
cmdlSXNQcm9maXRhYmxlVG9VbmJveCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
c2V0QXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhjb3VudFZh
cmlhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudENvdW50
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbGl6YXRpb25L
aW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2Vk
U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFy
Z3VtZW50IDwgbWF4TnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZW1hcHBl
ZEFyZ3VtZW50U3RhcnQgKyBhcmd1bWVudCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1ZSk7IC8vIFdlIGN1cnJlbnRs
eSBoYXZlIG5vd2hlcmUgdG8gcHV0IHRoZSB0eXBlIGNoZWNrIG9uIHRoZSBMb2FkVmFyYXJncy4g
TG9hZFZhcmFyZ3MgaXMgZWZmZWN0ZnVsLCBzbyBhZnRlciBpdCBmaW5pc2hlcywgd2UgY2Fubm90
IGV4aXQuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZvciBhIHdoaWxlIGl0IGhhZCBiZWVuIG15IGludGVudGlvbiB0byBkbyB0aGluZ3MgbGlr
ZSB0aGlzIGluc2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZWRpY3Rpb24g
aW5qZWN0aW9uIHBoYXNlLiBCdXQgaW4gdGhpcyBjYXNlIGl0J3MgcmVhbGx5IGJlc3QgdG8gZG8g
aXQgaGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQncyBoZXJlIHRo
YXQgd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHZhcmlhYmxlIGFjY2VzcyBkYXRhcyBmb3IgdGhlCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmxpbmluZyB3ZSdyZSBhYm91dCB0byBkby4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb21l
dGhpbmcgZWxzZSB0aGF0J3MgaW50ZXJlc3RpbmcgaGVyZSBpcyB0aGF0IHdlJ2QgcmVhbGx5IGxv
dmUgdG8gZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmVkaWN0aW9ucyBmcm9tIHRo
ZSBhcmd1bWVudHMgbG9hZGVkIGF0IHRoZSBjYWxsc2l0ZSwgcmF0aGVyIHRoYW4gdGhlCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgcmVjZWl2ZWQgaW5zaWRlIHRoZSBjYWxs
ZWUuIEJ1dCB0aGF0IHByb2JhYmx5IHdvbid0IG1hdHRlciBmb3IgbW9zdAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2FsbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZUJs
b2NrICYmIGFyZ3VtZW50IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoVmFsdWVQcm9maWxlKiBwcm9maWxlID0gY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVG
b3JBcmd1bWVudChhcmd1bWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBk
YXRhTG9nKCJEb25lIGlubGluaW5nIChzaW1wbGUpLlxuIik7CiAgICAgICAgICAgICBkYXRhTG9n
KCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CisgICAgICAgICAgICBkYXRh
TG9nKCJSZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CkBAIC0xNDM3LDExICsxNTk5LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIGRvIG1vcmUgZGV0YWlsZWQgcG9seXZhcmlh
bnQvcG9seW1vcnBoaWMgcHJvZmlsaW5nOyBhbmQgc2Vjb25kLCBpdCByZWR1Y2VzIGNvbXBpbGUg
dGltZXMgaW4KICAgICAvLyB0aGUgREZHLiBBbmQgYnkgcG9seXZhcmlhbnQgcHJvZmlsaW5nIHdl
IG1lYW4gcG9seXZhcmlhbnQgcHJvZmlsaW5nIG9mICp0aGlzKiBjYWxsLiBOb3RlIHRoYXQKICAg
ICAvLyB3ZSBjb3VsZCBpbXByb3ZlIHRoYXQgYXNwZWN0IG9mIHRoaXMgYnkgZG9pbmcgcG9seW1v
cnBoaWMgaW5saW5pbmcgYnV0IGhhdmluZyB0aGUgcHJvZmlsaW5nCi0gICAgLy8gYWxzby4gQ3Vy
cmVudGx5IHdlIG9wdCBhZ2FpbnN0IHRoaXMsIGJ1dCBpdCBjb3VsZCBiZSBpbnRlcmVzdGluZy4g
VGhhdCB3b3VsZCByZXF1aXJlIGhhdmluZyBhCi0gICAgLy8gc2VwYXJhdGUgbm9kZSBmb3IgY2Fs
bCBlZGdlIHByb2ZpbGluZy4KLSAgICAvLyBGSVhNRTogSW50cm9kdWNlIHRoZSBub3Rpb24gb2Yg
YSBzZXBhcmF0ZSBjYWxsIGVkZ2UgcHJvZmlsaW5nIG5vZGUuCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjAzMwotICAgIGlmICghaXNGVEwobV9ncmFw
aC5tX3BsYW4ubW9kZSkgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5n
KCkpIHsKKyAgICAvLyBhbHNvLgorICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkg
fHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nKCkKKyAgICAgICAgfHwg
SW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkpIHsKICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgKGhhcmQpLlxuIik7CiAg
ICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7
CkBAIC0xNDgyLDYgKzE2NDIsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmlu
ZyhOb2RlCiAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAi
XG4iKTsKICAgICB9CiAgICAgCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJPZmZz
ZXRPckZpcnN0RnJlZVJlZzsKKyAgICAKICAgICAvLyBUaGlzIG1ha2VzIG1lIHdpc2ggdGhhdCB3
ZSB3ZXJlIGluIFNTQSBhbGwgdGhlIHRpbWUuIFdlIG5lZWQgdG8gcGljayBhIHZhcmlhYmxlIGlu
dG8gd2hpY2ggdG8KICAgICAvLyBzdG9yZSB0aGUgY2FsbGVlIHNvIHRoYXQgaXQgd2lsbCBiZSBh
Y2Nlc3NpYmxlIHRvIGFsbCBvZiB0aGUgYmxvY2tzIHdlJ3JlIGFib3V0IHRvIGNyZWF0ZS4gV2UK
ICAgICAvLyBnZXQgYXdheSB3aXRoIGRvaW5nIGFuIGltbWVkaWF0ZS1zZXQgaGVyZSBiZWNhdXNl
IHdlIHdvdWxkbid0IGhhdmUgcGVyZm9ybWVkIGFueSBzaWRlIGVmZmVjdHMKQEAgLTE1MjYsNyAr
MTY4OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAg
ICAgYm9vbCBpbmxpbmluZ1Jlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCiAgICAgICAgICAg
ICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1tpXSwgcmVn
aXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4
dE9mZnNldCwga2luZCwgQ2FsbGVyTGlua3NNYW51YWxseSwgcHJlZGljdGlvbiwKLSAgICAgICAg
ICAgIGlubGluaW5nQmFsYW5jZSk7CisgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UsIFsmXSAo
Q29kZUJsb2NrKikgeyB9KTsKICAgICAgICAgCiAgICAgICAgIGlmICghaW5saW5pbmdSZXN1bHQp
IHsKICAgICAgICAgICAgIC8vIFRoYXQgZmFpbGVkIHNvIHdlIGxldCB0aGUgYmxvY2sgZGllLiBO
b3RoaW5nIGludGVyZXN0aW5nIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgdG8KQEAgLTE2MTAsMTQg
KzE3NzIsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50
IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+
Citib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJhbmQsIE5v
ZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGgubWluKCkKKyAgICAgICAgaW5z
ZXJ0Q2hlY2tzKCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCks
IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID09IDIpIHsgLy8gTWF0aC5taW4oeCkKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAg
ICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSwgRWRnZShyZXN1bHQsIE51bWJlclVzZSkpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOwpAQCAtMTYyNSw2ICsxNzkwLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZQogICAgIH0KICAgICAKICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMykgeyAvLyBNYXRoLm1pbih4LCB5KQorICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRP
cGVyYW5kKSwgYWRkVG9HcmFwaChvcCwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdp
c3Rlck9mZnNldCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE2MzMsMTEg
KzE3OTksMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+Citib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5z
aWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVj
a3MpCiB7CiAgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKICAgICBjYXNlIEFic0ludHJpbnNpYzog
ewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRo
LmFicygpCisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZv
KG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpA
QCAtMTY0NSw2ICsxODEzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGludAogICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRB
YnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoQXJpdGhBYnMsIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgaWYgKG1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IE92ZXJmbG93KSkKICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJmbG93
SW5ERkcpOwpAQCAtMTY1MywyOSArMTgyMiwzMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbnRyaW5zaWMoaW50CiAgICAgfQogCiAgICAgY2FzZSBNaW5JbnRyaW5zaWM6Ci0gICAgICAg
IHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4sIHJlZ2lzdGVyT2Zm
c2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIHJldHVybiBoYW5kbGVN
aW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgaW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgCiAgICAgY2FzZSBNYXhJ
bnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJp
dGhNYXgsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAg
ICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNYXgsIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW5zZXJ0Q2hlY2tzKTsKICAgICAg
ICAgCiAgICAgY2FzZSBTcXJ0SW50cmluc2ljOgogICAgIGNhc2UgQ29zSW50cmluc2ljOgogICAg
IGNhc2UgU2luSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9PSAxKSB7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwg
T3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKICAgICAgICAgY2Fz
ZSBTcXJ0SW50cmluc2ljOgorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRoU3Fy
dCwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ29z
SW50cmluc2ljOgorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRoQ29zLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTaW5JbnRyaW5z
aWM6CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhTaW4sIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIApAQCAtMTY4OCw5ICsxODYxLDExIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICBjYXNlIFBvd0ludHJpbnNpYzog
ewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCAzKSB7CiAgICAgICAg
ICAgICAvLyBNYXRoLnBvdygpIGFuZCBNYXRoLnBvdyh4KSByZXR1cm4gTmFOLgorICAgICAgICAg
ICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0Q2hl
Y2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHlPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQp
OwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBo
KEFyaXRoUG93LCBnZXQoeE9wZXJhbmQpLCBnZXQoeU9wZXJhbmQpKSk7CkBAIC0xNzEwLDYgKzE4
ODUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKICAgICAgICAgICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNo
LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYXJyYXlQdXNoKTsKICAgICAgICAgICAg
IApAQCAtMTczMyw2ICsxOTA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKGludAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBOb2RlKiBhcnJheVBvcCA9IGFkZFRv
R3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkp
KTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFycmF5
UG9wKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc0Nyw2ICsxOTI0LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVy
YW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRv
R3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5h
c1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldChpbmRleE9wZXJhbmQpKTsKQEAgLTE3NTks
NiArMTkzNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzT3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lz
dGVyT2Zmc2V0KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgTm9kZSog
Y2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJh
eTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldChpbmRleE9wZXJhbmQp
KTsKQEAgLTE3NzAsNiArMTk0OSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9H
cmFwaChTdHJpbmdGcm9tQ2hhckNvZGUsIGdldChpbmRleE9wZXJhbmQpKTsKIApAQCAtMTc4Miw2
ICsxOTYyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBO
b2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5m
byhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVy
T2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNl
dCkpKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVnRXhw
RXhlYyk7CiAgICAgICAgIApAQCAtMTc5Miw2ICsxOTczLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAg
IGluc2VydENoZWNrcygpOwogICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChS
ZWdFeHBUZXN0LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRPcGVyYW5kKSwgcmVnRXhwRXhlYyk7CiAgICAgICAgIApAQCAtMTgwMSw2ICsx
OTgzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNh
c2UgSU11bEludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgIT0gMykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsZWZ0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJpZ2h0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zm
c2V0KTsKICAgICAgICAgTm9kZSogbGVmdCA9IGdldChsZWZ0T3BlcmFuZCk7CkBAIC0xODEyLDI5
ICsxOTk1LDM0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAg
ICBjYXNlIEZSb3VuZEludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0
Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRoRlJvdW5kLCBnZXQob3BlcmFu
ZCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIERG
R1RydWVJbnRyaW5zaWM6IHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGpzQ29uc3RhbnQoanNCb29sZWFuKHRydWUp
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBPU1JF
eGl0SW50cmluc2ljOiB7CisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3Bl
cmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnRVbmRlZmluZWQp
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJc0Zp
bmFsVGllckludHJpbnNpYzogeworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgICAgIGpzQ29uc3RhbnQo
anNCb29sZWFuKE9wdGlvbnM6OnVzZUZUTEpJVCgpID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9k
ZSkgOiB0cnVlKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgU2V0SW50MzJIZWFwUHJlZGljdGlvbkludHJpbnNpYzogeworICAgICAgICBpbnNlcnRD
aGVja3MoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpczsgKytpKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAobm9k
ZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKQEAgLTE4NDcsNiArMjAzNSw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICBjYXNlIEZpYXRJbnQ1MkludHJpbnNp
YzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVn
aXN0ZXJPZmZzZXQpOwogICAgICAgICBpZiAoZW5hYmxlSW50NTIoKSkKICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoRmlhdEludDUyLCBn
ZXQob3BlcmFuZCkpKTsKQEAgLTE4NjAsOSArMjA0OSwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgfQogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVj
a3NGdW5jdG9yPgogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbnN0cnVj
dG9yKAogICAgIGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwg
aW50IHJlZ2lzdGVyT2Zmc2V0LAotICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
VHlwZWRBcnJheVR5cGUgdHlwZSkKKyAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IFR5cGVkQXJyYXlUeXBlIHR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykK
IHsKICAgICBpZiAoIWlzVHlwZWRWaWV3KHR5cGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xOTA2LDE2ICsyMDk2LDIxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVR5cGVkQXJy
YXlDb24KICAgICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgYWRkVG9HcmFwaChOZXdU
eXBlZEFycmF5LCBPcEluZm8odHlwZSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgx
LCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFu
dEludGVybmFsRnVuY3Rpb24oCiAgICAgaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rp
b24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCi0gICAgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIGNvbnN0
IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiICAgIEhhbmRsaW5nIGNvbnN0YW50IGludGVybmFsIGZ1bmN0aW9uICIsIEpT
VmFsdWUoZnVuY3Rpb24pLCAiXG4iKTsKKyAgICAKICAgICAvLyBJZiB3ZSBldmVyIGZpbmQgdGhh
dCB3ZSBoYXZlIGEgbG90IG9mIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IHdlIHNwZWNpYWxpemUg
Zm9yLAogICAgIC8vIHRoZW4gd2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgc29tZSBzb3J0IG9mIGhh
c2h0YWJsZSBkaXNwYXRjaCwgb3IgbWF5YmUgZXZlbgogICAgIC8vIGRpc3BhdGNoIHN0cmFpZ2h0
IHRocm91Z2ggdGhlIE1ldGhvZFRhYmxlIG9mIHRoZSBJbnRlcm5hbEZ1bmN0aW9uLiBCdXQgZm9y
IG5vdywKQEAgLTE5MjcsNiArMjEyMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNv
bnN0YW50SW50ZXIKICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nbG9iYWxPYmplY3QoKSAhPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsKICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChOZXdBcnJheVdpdGhTaXplLCBPcEluZm8oQXJyYXlXaXRoVW5kZWNpZGVkKSwgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKQEAgLTE5NDEsNiAr
MjEzNyw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICB9
CiAgICAgCiAgICAgaWYgKGZ1bmN0aW9uLT5jbGFzc0luZm8oKSA9PSBTdHJpbmdDb25zdHJ1Y3Rv
cjo6aW5mbygpKSB7CisgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAKICAgICAgICAg
Tm9kZSogcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIDw9IDEpCkBAIC0xOTU4LDcgKzIxNTYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVDb25zdGFudEludGVyCiAgICAgZm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0eXBl
SW5kZXggPCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7ICsrdHlwZUluZGV4KSB7CiAgICAg
ICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAogICAgICAgICAg
ICAgcmVzdWx0T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywKLSAgICAgICAgICAgIGluZGV4VG9UeXBlZEFycmF5VHlwZSh0eXBlSW5k
ZXgpKTsKKyAgICAgICAgICAgIGluZGV4VG9UeXBlZEFycmF5VHlwZSh0eXBlSW5kZXgpLCBpbnNl
cnRDaGVja3MpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtMzEyMiw0MyArMzMyMCw3MCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpbnQgdGhpc1JlZyA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgYXJndW1lbnRzID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBmaXJzdEZyZWVSZWcgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGZpcnN0VmFy
QXJnT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZSgpKTsKLSAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoYXJndW1lbnRzLCBhcmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOwotICAgICAgICAgICAgQVNT
RVJUKCFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xvd0Fy
Z3VtZW50cygpKTsKLQotICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0FyZ3VtZW50c05vdENy
ZWF0ZWQpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGlubGluZUNhbGxGcmFt
ZSgpLT5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBMZXQn
cyBjb21wdXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNl
ZCByZWdpc3RlciwgYW5kCi0gICAgICAgICAgICAvLyB0aGVuIGFkanVzdCBmb3IgdGhlIHRoaW5n
cyB3ZSB3YW50IGluIHRoZSBjYWxsIGZyYW1lLgotICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gZmlyc3RGcmVlUmVnICsgMTsKLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IGFy
Z0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1bWVudHMuCi0gICAgICAgICAg
ICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyAvLyBXZSB3
aWxsIHByZXRlbmQgdG8gaGF2ZSBhIGNhbGwgZnJhbWUgaGVhZGVyLgorICAgICAgICAgICAgaWYg
KGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dW5jaGVja2VkQXJn
dW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xvd0FyZ3VtZW50cygpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpCisgICAgICAgICAgICAgICAgICAg
ICYmICFpbmxpbmVDYWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkKKyAgICAgICAgICAgICAgICAgICAg
JiYgIWZpcnN0VmFyQXJnT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKKworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhcmdDb3VudCA9IGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVy
IG9mZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyLCBhbmQKKyAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0
aGUgY2FsbCBmcmFtZS4KKyAgICAgICAgICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
Zmlyc3RGcmVlUmVnICsgMTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0g
YXJnQ291bnQ7IC8vIFdlIHdpbGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KKyAgICAgICAg
ICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhlYWRlci4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4K
KyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0IGhhdmUgc2V0IHVw
IHRoZSBhcmd1bWVudHMuIEJ1dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAorICAgICAgICAgICAg
ICAgICAgICAvLyBsb29rIGxpa2UgdGhlIGJ5dGVjb2RlIGhhZCBkb25lIGl0LgorICAgICAgICAg
ICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSksIEltbWVk
aWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBoYW5kbGVDYWxsKAorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LCBDYWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxs
X3ZhcmFyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVn
aXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3Zh
cmFyZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBFbWl0IENhbGxGb3J3YXJkVmFyYXJncworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG1lYW5zIHdlIGNhbm5vdCBpbmxpbmUgZm9yd2FyZGVkIHZhcmFyZ3MgY2FsbHMgaW5z
aWRlIGEgdmFyYXJncworICAgICAgICAgICAgICAgIC8vIGNhbGwgZnJhbWUuIFdlIHdpbGwgcHJv
YmFibHkgZml4IHRoYXQgb25jZSB3ZSBmaW5hbGx5IGdldCByaWQgb2YgdGhlCisgICAgICAgICAg
ICAgICAgLy8gYXJndW1lbnRzIG9iamVjdCBzcGVjaWFsLWNhc2luZy4KKyAgICAgICAgICAgICAg
ICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgp
OworICAgICAgICAgICAgICAgIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJBcmdP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogY2FsbCA9IGFk
ZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgICAgIENhbGxGb3J3YXJkVmFyYXJncywgT3BJbmZv
KGRhdGEpLCBPcEluZm8oZ2V0UHJlZGljdGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0
KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSkp
OworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Y2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gR2V0IHRoZSBhbGlnbm1lbnQgcmlnaHQuCi0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9
IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCi0gICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwotCi0gICAg
ICAgICAgICBlbnN1cmVMb2NhbHMoCi0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXQpKS50b0xvY2FsKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUaGUg
Ynl0ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4gQnV0IHdlJ2xsIGRv
IGl0IGFuZCBtYWtlIGl0Ci0gICAgICAgICAgICAvLyBsb29rIGxpa2UgdGhlIGJ5dGVjb2RlIGhh
ZCBkb25lIGl0LgotICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0
ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKSwg
SW1tZWRpYXRlTmFrZWRTZXQpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9
IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGhhbmRsZUNhbGwoCi0gICAgICAgICAgICAgICAgcmVzdWx0LCBDYWxsLCBDb2Rl
Rm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAotICAgICAgICAgICAgICAg
IGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgIGhhbmRsZVZh
cmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbFZhcmFyZ3MsIENvZGVGb3JDYWxsKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAg
ICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdFZhcmFy
Z3MsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY29uc3Ry
dWN0X3ZhcmFyZ3MpOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9q
bmVxX3B0cjoKICAgICAgICAgICAgIC8vIFN0YXRpY2FsbHkgc3BlY3VsYXRlIGZvciBub3cuIEl0
IG1ha2VzIHNlbnNlIHRvIGxldCBzcGVjdWxhdGUtb25seSBqbmVxX3B0cgogICAgICAgICAgICAg
Ly8gc3VwcG9ydCBzaW1tZXIgZm9yIGEgd2hpbGUgYmVmb3JlIG1ha2luZyBpdCBtb3JlIGdlbmVy
YWwsIHNpbmNlIGl0J3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC05Niw2ICs5Niw4IEBAIGlubGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxvY2sqIGNvZGVCbG8K
IAogQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiBwYykKIHsKKyAgICBVTlVTRURfUEFSQU0o
Y29kZUJsb2NrKTsgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIHNvbWUgYnl0ZWNvZGUgcGFyc2luZy4g
T3JkaW5hcmlseSBieXRlY29kZSBwYXJzaW5nIHJlcXVpcmVzIHRoZSBvd25pbmcgQ29kZUJsb2Nr
LiBJdCdzIHNvcnQgb2Ygc3RyYW5nZSB0aGF0IHdlIGRvbid0IHVzZSBpdCBoZXJlIHJpZ2h0IG5v
dy4KKyAgICAKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgY2FzZSBvcF9lbnRlcjoKICAg
ICBjYXNlIG9wX3RvdWNoX2VudHJ5OgpAQCAtMTgyLDYgKzE4NCw4IEBAIENhcGFiaWxpdHlMZXZl
bCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJv
cjoKICAgICBjYXNlIG9wX2NhbGw6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNl
IG9wX2luaXRfbGF6eV9yZWc6CiAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOgogICAgIGNh
c2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOgpAQCAtMjIzLDE0ICsyMjcsNiBAQCBDYXBhYmlsaXR5
TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgICAgIHJldHVybiBDYW5Db21waWxl
QW5kSW5saW5lOwogICAgIH0KIAotICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgotICAgICAgICBp
ZiAoY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgcGNbNF0udS5vcGVyYW5kID09IGNvZGVC
bG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQotICAgICAgICAgICAgJiYgIXBjWzZd
LnUub3BlcmFuZCkKLSAgICAgICAgICAgIHJldHVybiBDYW5JbmxpbmU7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgaGFuZGxlIHRoaXMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjYKLSAgICAgICAgcmV0dXJuIENhbm5vdENvbXBp
bGU7Ci0KICAgICBjYXNlIG9wX25ld19yZWdleHA6IAogICAgIGNhc2Ugb3BfY3JlYXRlX2xleGlj
YWxfZW52aXJvbm1lbnQ6CiAgICAgY2FzZSBvcF9uZXdfZnVuYzoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMTgwMjI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04Niw5ICs4Niw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwg
ZnVuY3Rpb25DYXBhYmlsaXQKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5Db21w
aWxlQW5kSW5saW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7CiAgICAgaWYgKG1pZ2h0Q29t
cGlsZSAmJiAhbWlnaHRJbmxpbmUpCiAgICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2Fu
Q29tcGlsZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwotICAgIGlmICghbWlnaHRDb21waWxl
ICYmIG1pZ2h0SW5saW5lKQotICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbklubGlu
ZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwotICAgIGlmICghbWlnaHRDb21waWxlICYmICFt
aWdodElubGluZSkKKyAgICBpZiAoIW1pZ2h0Q29tcGlsZSkKICAgICAgICAgcmV0dXJuIENhbm5v
dENvbXBpbGU7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4g
Q2Fubm90Q29tcGlsZTsKQEAgLTE0Miw2ICsxNDAsMTQgQEAgaW5saW5lIGJvb2wgbWlnaHRJbmxp
bmVGdW5jdGlvbkZvcihDb2RlQgogICAgIHJldHVybiBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29u
c3RydWN0KGNvZGVCbG9jayk7CiB9CiAKK2lubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7
CisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgIHJldHVybiBtaWdodENvbXBp
bGVGdW5jdGlvbkZvckNhbGwoY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0KTsKKyAgICByZXR1cm4gbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3Qo
Y29kZUJsb2NrKTsKK30KKwogaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbihDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZvcihjb2Rl
QmxvY2ssIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjYsNiArMzY2LDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5h
dGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndh
cmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIFRvUHJpbWl0
aXZlOgogICAgIGNhc2UgSW46CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CkBA
IC00MDEsNiArNDA0LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgIC8vIFRo
aXMgYWN0dWFsbHkgd3JpdGVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBp
dCByZWFkcyB0aGUgYXJyYXksIGl0IGRvZXMKKyAgICAgICAgLy8gc28gaW4gYSB3YXkgdGhhdCBt
YXkgdHJpZ2dlciBnZXR0ZXJzIG9yIHZhcmlvdXMgdHJhcHMuCisgICAgICAgIHJlYWQoV29ybGQp
OworICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAg
Y2FzZSBHZXRMb2NhbFVubGlua2VkOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZh
cmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkp
KSwgbm9kZSk7CkBAIC04ODEsNyArODkxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgREZHX0NSQVNIKGdyYXBoLCBub2RlLCB0b0NTdHJp
bmcoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3AoKSkp
LmRhdGEoKSk7CiB9CiAKIGNsYXNzIE5vT3BDbG9iYmVyaXplIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwx
MCArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIK
IAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTEzMSwz
ICsxMzIsMjggQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFBybwogCiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBD
YXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKQoreworICAgIHN3aXRjaCAoY2FwYWJpbGl0
eUxldmVsKSB7CisgICAgY2FzZSBDYW5ub3RDb21waWxlOgorICAgICAgICBvdXQucHJpbnQoIkNh
bm5vdENvbXBpbGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FuQ29tcGlsZToKKyAg
ICAgICAgb3V0LnByaW50KCJDYW5Db21waWxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENhbkNvbXBpbGVBbmRJbmxpbmU6CisgICAgICAgIG91dC5wcmludCgiQ2FuQ29tcGlsZUFuZElu
bGluZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXBhYmlsaXR5TGV2ZWxOb3RTZXQ6
CisgICAgICAgIG91dC5wcmludCgiQ2FwYWJpbGl0eUxldmVsTm90U2V0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Miw3ICsyOTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKIGVudW0gQ2FwYWJpbGl0eUxldmVsIHsKICAgICBDYW5ub3RDb21w
aWxlLAotICAgIENhbklubGluZSwKICAgICBDYW5Db21waWxlLAogICAgIENhbkNvbXBpbGVBbmRJ
bmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxldmVsTm90U2V0CkBAIC0zMTIsNyArMzExLDYgQEAgaW5s
aW5lIGJvb2wgY2FuQ29tcGlsZShDYXBhYmlsaXR5TGV2ZWwgbAogaW5saW5lIGJvb2wgY2FuSW5s
aW5lKENhcGFiaWxpdHlMZXZlbCBsZXZlbCkKIHsKICAgICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAg
Y2FzZSBDYW5JbmxpbmU6CiAgICAgY2FzZSBDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMzI1LDE0ICszMjMsNiBAQCBpbmxpbmUgQ2Fw
YWJpbGl0eUxldmVsIGxlYXN0VXBwZXJCb3VuZChDCiAgICAgc3dpdGNoIChhKSB7CiAgICAgY2Fz
ZSBDYW5ub3RDb21waWxlOgogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLSAgICBjYXNl
IENhbklubGluZToKLSAgICAgICAgc3dpdGNoIChiKSB7Ci0gICAgICAgIGNhc2UgQ2FuSW5saW5l
OgotICAgICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6Ci0gICAgICAgICAgICByZXR1cm4g
Q2FuSW5saW5lOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIENhbm5vdENv
bXBpbGU7Ci0gICAgICAgIH0KICAgICBjYXNlIENhbkNvbXBpbGU6CiAgICAgICAgIHN3aXRjaCAo
YikgewogICAgICAgICBjYXNlIENhbkNvbXBpbGU6CkBAIC0zNjQsNSArMzU0LDExIEBAIGlubGlu
ZSBib29sIHNob3VsZFNob3dEaXNhc3NlbWJseShDb21waWwKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpERkc6OkNhcGFiaWxpdHlMZXZlbCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CiAjZW5kaWYgLy8gREZHQ29tbW9uX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDEwIEBAIGJv
b2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENvbXBhcmVTdHJp
Y3RFcToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxs
VmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJn
czoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAg
ICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBCcmVha3BvaW50OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODAy
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjE0LDYgKzEyMTQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBB
bGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAg
Y2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93Ogog
ICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4MDIy
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTMsNiArMzEzLDE4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnN0b3Jh
Z2VQb2ludGVyKCkpKTsKICAgICBpZiAobm9kZS0+aGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEoKSk7CisgICAgaWYgKG5vZGUtPmhhc0NhbGxWYXJhcmdzRGF0YSgpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJmaXJzdFZhckFyZ09mZnNldCA9ICIsIG5vZGUtPmNhbGxWYXJhcmdz
RGF0YSgpLT5maXJzdFZhckFyZ09mZnNldCk7CisgICAgaWYgKG5vZGUtPmhhc0xvYWRWYXJhcmdz
RGF0YSgpKSB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJh
cmdzRGF0YSgpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdGFydCA9ICIsIGRhdGEtPnN0
YXJ0LCAiLCBjb3VudCA9ICIsIGRhdGEtPmNvdW50KTsKKyAgICAgICAgaWYgKGRhdGEtPm1hY2hp
bmVTdGFydC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgbWFjaGluZVN0YXJ0
ID0gIiwgZGF0YS0+bWFjaGluZVN0YXJ0KTsKKyAgICAgICAgaWYgKGRhdGEtPm1hY2hpbmVDb3Vu
dC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgbWFjaGluZUNvdW50ID0gIiwg
ZGF0YS0+bWFjaGluZUNvdW50KTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIGRh
dGEtPm9mZnNldCwgIiwgbWFuZGF0b3J5TWluaW11bSA9ICIsIGRhdGEtPm1hbmRhdG9yeU1pbmlt
dW0pOworICAgICAgICBvdXQucHJpbnQoIiwgbGltaXQgPSAiLCBkYXRhLT5saW1pdCk7CisgICAg
fQogICAgIGlmIChub2RlLT5pc0NvbnN0YW50KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
cG9pbnRlckR1bXBJbkNvbnRleHQobm9kZS0+Y29uc3RhbnQoKSwgY29udGV4dCkpOwogICAgIGlm
IChub2RlLT5pc0p1bXAoKSkKQEAgLTQwMCw3ICs0MTIsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxv
Y2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2st
PnBoaXNbaV07CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYg
cGhpTm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwi
LCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAgICAgICAgb3V0LnByaW50KCIg
QCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+bG9jYWwoKSwgIiwiLCBwaGlOb2Rl
LT5yZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgp
KSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmlu
ZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewpAQCAtODY5
LDEwICs4ODEsMTIgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaQog
ICAgICAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZWcub2Zmc2V0KCkgPCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsCisgICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNr
OjpDYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChyZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVl
KQorICAgICAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVnLm9mZnNldCgpID09IEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMzUsNiArMTI0OSw1
MSBAQCB2b2lkIEdyYXBoOjpoYW5kbGVBc3NlcnRpb25GYWlsdXJlKAogICAgIGNyYXNoKCp0aGlz
LCB0b0NTdHJpbmcoIldoaWxlIGhhbmRsaW5nIGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwg
IlxuXG4iKSwgZmlsZSwgbGluZSwgZnVuY3Rpb24sIGFzc2VydGlvbik7CiB9CiAKK1ZhbHVlUHJv
ZmlsZSogR3JhcGg6OnZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQoreworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CisgICAgICAgIAorICAgIGlmIChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKKyAgICAgICAgaWYg
KCFub2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKTsKKyAg
ICAgICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9hcmd1bWVudHNbYXJndW1lbnRdOworICAgICAg
ICBpZiAoIWFyZ3VtZW50Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gYXJndW1lbnROb2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOworICAg
IH0KKyAgICAgICAgCisgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAg
IHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2Rl
LT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgIHJldHVybiBu
dWxscHRyOworfQorCitNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOworICAgIAorICAg
IGlmIChWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSA9IHZhbHVlUHJvZmlsZUZvcihub2RlKSkK
KyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFsdWVQcm9maWxl
KTsKKyAgICAKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICBDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKKyAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCisg
ICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKKyAgICAgICAgICAgICAgICBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCwgbm9kZS0+bG9jYWwoKSkpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOworfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4MDIyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00NzIsNTAgKzQ3Miw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fcHJvZmlsZWRCbG9jay0+dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCk7CiAgICAgfQog
ICAgIAotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgCi0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+
aGFzTG9jYWwoKnRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1
bWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7Ci0gICAgICAgICAgICBOb2RlKiBhcmd1
bWVudE5vZGUgPSBtX2FyZ3VtZW50c1thcmd1bWVudF07Ci0gICAgICAgICAgICBpZiAoIWFyZ3Vt
ZW50Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBhcmd1bWVudE5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAg
cmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9u
KCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOwotICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQot
ICAgIHsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChWYWx1ZVByb2ZpbGUq
IHZhbHVlUHJvZmlsZSA9IHZhbHVlUHJvZmlsZUZvcihub2RlKSkKLSAgICAgICAgICAgIHJldHVy
biBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKLSAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAotICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxv
Y2ssCi0gICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4LCBub2RlLT5s
b2NhbCgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlKCk7Ci0gICAgfQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9m
aWxlRm9yKE5vZGUqKTsKKyAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSopOwogICAgIAogICAgIGJvb2wgdXNlc0FyZ3Vt
ZW50cygpIGNvbnN0CiAgICAgewpAQCAtODUzLDYgKzgxMSw4IEBAIHB1YmxpYzoKICAgICBCYWc8
TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11
bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOwogICAgIEJhZzxPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAg
QmFnPENhbGxWYXJhcmdzRGF0YT4gbV9jYWxsVmFyYXJnc0RhdGE7CisgICAgQmFnPExvYWRWYXJh
cmdzRGF0YT4gbV9sb2FkVmFyYXJnc0RhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0
YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6
OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAg
ICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMjIsNiArMTIyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlv
bkhhbmRsZQogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1l
IGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZy
YW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX2dyYXBoLnN0
YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2KQogICAgICAg
ICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGUgY2FsbCBhYnN0cmFjdGlvbiwgYnV0IHRoaXMgaXMg
Y3VycmVudGx5IGluIHRoZSBTcGVjdWxhdGl2ZUpJVCBsYXllciEKQEAgLTI0Nyw3ICsyNDgsNyBA
QCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIEpTQ2Fs
bFJlY29yZCYgcmVjb3JkID0gbV9qc0NhbGxzW2ldOwogICAgICAgICBDYWxsTGlua0luZm8mIGlu
Zm8gPSAqcmVjb3JkLm1faW5mbzsKICAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0g
bGlua1RodW5rR2VuZXJhdG9yRm9yKAotICAgICAgICAgICAgaW5mby5jYWxsVHlwZSA9PSBDYWxs
TGlua0luZm86OkNvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAg
ICAgICAgICAgIGluZm8uc3BlY2lhbGl6YXRpb25LaW5kKCksCiAgICAgICAgICAgICBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29y
ZC5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cihtX3ZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQubV9zbG93Q2FsbCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE4
MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg0LDYgKzg0LDcgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2Ug
UGhhbnRvbUxvY2FsOgorICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDIwIEBAIHN0cnVjdCBTd2l0Y2hEYXRh
IHsKICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKIH07CiAKK3N0cnVjdCBDYWxsVmFyYXJnc0Rh
dGEgeworICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsKK307CisKK3N0cnVjdCBMb2FkVmFyYXJn
c0RhdGEgeworICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydDsgLy8gTG9jYWwgZm9yIHRoZSBmaXJz
dCBlbGVtZW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBjb3VudDsgLy8gTG9jYWwgZm9yIHRoZSBj
b3VudC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVN0YXJ0OworICAgIFZpcnR1YWxSZWdp
c3RlciBtYWNoaW5lQ291bnQ7CisgICAgdW5zaWduZWQgb2Zmc2V0OyAvLyBXaGljaCBhcnJheSBl
bGVtZW50IHRvIHN0YXJ0IHdpdGguIFVzdWFsbHkgdGhpcyBpcyAwLgorICAgIHVuc2lnbmVkIG1h
bmRhdG9yeU1pbmltdW07IC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb24gdGhlIHN0YWNrIHRo
YXQgbXVzdCBiZSBpbml0aWFsaXplZDsgaWYgdGhlIGFycmF5IGlzIHRvbyBzaG9ydCB0aGVuIHRo
ZSBtaXNzaW5nIGVsZW1lbnRzIG11c3QgZ2V0IHVuZGVmaW5lZC4gRG9lcyBub3QgaW5jbHVkZSAi
dGhpcyIuCisgICAgdW5zaWduZWQgbGltaXQ7IC8vIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRz
IHRvIGxvYWQuIEluY2x1ZGVzICJ0aGlzIi4KK307CisKIC8vIFRoaXMgdHlwZSB1c2VkIGluIHBh
c3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0
aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBD
b2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50
LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCkBAIC04OTUsNiArOTA5LDM1IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93
bj4qPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzQ2FsbFZhcmFyZ3NEYXRh
KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIENhbGxWYXJh
cmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Q2FsbFZhcmFyZ3NEYXRhKiBjYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGhhc0NhbGxWYXJhcmdzRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxDYWxs
VmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzTG9hZFZh
cmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzOwor
ICAgIH0KKyAgICAKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJhcmdzRGF0YSgpCisgICAg
eworICAgICAgICBBU1NFUlQoaGFzTG9hZFZhcmFyZ3NEYXRhKCkpOworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PExvYWRWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAg
ICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKICAgICAgICAgcmV0dXJuICEhcmVzdWx0KCk7CkBA
IC0xMDQ5LDYgKzEwOTIsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsU2FmZToKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBOYXRp
dmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICAvKiB0aGlzIG11c3QgYmUgdGhlIGRpcmVjdGx5IHN1YnNlcXVlbnQg
cHJvcGVydHkgcHV0LiBOb3RlIHRoYXQgUHV0QnlWYWwgKi9cCiAgICAgLyogb3Bjb2RlcyB1c2Ug
VmFyQXJncyBiZWF1c2UgdGhleSBtYXkgaGF2ZSB1cCB0byA0IGNoaWxkcmVuLiAqL1wKICAgICBt
YWNybyhHZXRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1h
Y3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxE
aXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1
dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQ
dXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKQEAgLTIx
Nyw2ICsyMTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogQ2Fs
bHMuICovXAogICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oQ2FsbFZhcmFy
Z3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDYWxsRm9y
d2FyZFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhDb25zdHJ1Y3RWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oTmF0aXZlQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oTmF0aXZlQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTU2LDYgKzE1NiwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBM
b2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChk
YXRhLT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVk
SW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBk
YXRhLT5saW1pdDsgaS0tOykgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQorICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1
YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE1Miw3ICsxNTIsOSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKGlubGluZUNhbGxGcmFt
ZS0+a2luZCkgewogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKLSAgICAgICAg
Y2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDogeworICAgICAgICBjYXNlIElubGluZUNh
bGxGcmFtZTo6Q29uc3RydWN0OgorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZh
cmFyZ3M6CisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOiB7
CiAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9CiAgICAgICAgICAgICAg
ICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2Rl
SW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2Fs
bExpbmtJbmZvKTsKQEAgLTE5NSwxMiArMTk3LDEzIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgaWYgKHRydWVSZXR1cm5QQykKICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodHJ1ZVJldHVyblBD
KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0jaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6
Q29kZUJsb2NrKSkpOworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
CisgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxv
YWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0
LnN0b3JlNjQoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVP
ZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNv
ZGVPZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQu
c3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICAKQEAgLTIwOCwxMiArMjExLDEwIEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgaWYgKGJh
c2VsaW5lQ29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpCiAgICAgICAgICAgICBqaXQubG9hZFB0
cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYmFzZWxpbmVD
b2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgpKSksIEdQUkluZm86OnJlZ1Qz
KTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0
Ci0gICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFz
ZWxpbmVDb2RlQmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNvZGVCbG9jaykp
KTsKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQo
KSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKICAg
ICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2Rl
QXNCeXRlY29kZUluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKICAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgaml0LnN0b3JlUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNv
bnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rlciko
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDE4LDYgKzEwMTgsMjcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKAogICAgIHNldC0+bm90aWZ5V3JpdGUo
dm0sIHZhbHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3JpdGUiKTsKIH0KIAoraW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRBcmd1bWVudHMpOworICAgIAorICAgIHJldHVybiBzaXplT2ZWYXJhcmdzKGV4ZWMsIGFyZ3Vt
ZW50cywgZmlyc3RWYXJBcmdPZmZzZXQpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90
IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwor
ICAgIAorICAgIGxvYWRWYXJhcmdzKGV4ZWMsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnRE
ZXN0KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgCisgICAgZm9yIChpbnQzMl90
IGkgPSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisgICAgICAgIGV4ZWMtPnIo
Zmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKK30KKwogZG91YmxlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAg
ICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjUs
NiArMTI1LDggQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMwogY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJ
bmRleCwgSlNTdHJpbmcqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0
ZShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7Citp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSosIGludDMyX3Qg
Zmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IG9mZnNl
dCwgaW50MzJfdCBsZW5ndGgsIGludDMyX3QgbWFuZGF0b3J5TWluaW11bSk7CiAKIGludDY0X3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0ludDUyKEVuY29kZWRK
U1ZhbHVlKTsKIGludDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG91YmxlVG9J
bnQ1Mihkb3VibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShy
ZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NywxMCArODcsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCi1zdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdy
YXBoLCBjb25zdCBjaGFyKiB0ZXh0KQorc3RhdGljIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdy
YXBoJiBncmFwaCwgY29uc3QgY2hhciogdGV4dCwgYm9vbCBmb3JjZUR1bXAgPSBmYWxzZSkKIHsK
ICAgICBHcmFwaER1bXBNb2RlIG1vZGVGb3JGaW5hbFZhbGlkYXRlID0gRHVtcEdyYXBoOwotICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKGdyYXBoLm1fcGxhbi5tb2RlKSkgeworICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKGdyYXBoLm1fcGxhbi5tb2RlKSB8fCBmb3Jj
ZUR1bXApIHsKICAgICAgICAgZGF0YUxvZyh0ZXh0LCAiXG4iKTsKICAgICAgICAgZ3JhcGguZHVt
cCgpOwogICAgICAgICBtb2RlRm9yRmluYWxWYWxpZGF0ZSA9IERvbnREdW1wR3JhcGg7CkBAIC0z
NjksNyArMzY5LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgog
ICAgICAgICAgICAgcmV0dXJuIEZhaWxQYXRoOwogICAgICAgICB9CiAKLSAgICAgICAgZHVtcEFu
ZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiKTsKKyAg
ICAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dl
cmluZzoiLCBzaG91bGRTaG93RGlzYXNzZW1ibHkobW9kZSkpOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBoYXZlTExWTTsKICAgICAgICAgU2FmZXBvaW50OjpSZXN1bHQgc2FmZXBvaW50UmVzdWx0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNl
TG9jYWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzMs
MTEgKzEzMywyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVn
aXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgbV9y
ZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgd3Jp
dGVUb3AoKQogICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncykg
eworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIG5vdGUgdGhlIHdyaXRlcyB0byB0aGUgbG9j
YWxzIHRoYXQgd2lsbCBzdG9yZSB0aGUgYXJyYXkgZWxlbWVudHMgYW5kCisgICAgICAgICAgICAv
LyBjb3VudC4KKyAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICBtX3dyaXRlKGRhdGEtPmNvdW50KTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAg
ICAgIG1fd3JpdGUoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0
byBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBDYWxsRm9yd2FyZFZhcmFyZ3MsIHNpbmNlIGl0IHJl
YWRzCisgICAgICAgIC8vIG91ciBhcmd1bWVudHMgdGhlIHNhbWUgd2F5IHRoYXQgYW55IGVmZmVj
dGZ1bCB0aGluZyBtaWdodC4KKyAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLm1fY29kZUJs
b2NrLT51c2VzQXJndW1lbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
Z3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCiAgICAgICAgICAg
ICAgICAgbV93cml0ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTg4LDYgKzE4OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
R2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgTmF0
aXZlQ2FsbDoKICAgICAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgR2V0
R2xvYmFsVmFyOgpAQCAtNjM1LDYgKzYzOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29u
c3RhbnRTdG9yYWdlUG9pbnRlcjoKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0
IG9ubHkgcHJldGVuZHMgdG8gcHJvZHVjZSBhIHZhbHVlLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24g
MTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODks
NiArMTg5LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAg
ICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1
Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Cisg
ICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBj
YXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRo
U2l6ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEx
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
IgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxv
Zy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC02MzgsMzUgKzYzOSwx
NzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1pc2NTdHJpY3RFcQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogewotICAgIGJvb2wgaXNDYWxsID0g
bm9kZS0+b3AoKSA9PSBDYWxsOwotICAgIGlmICghaXNDYWxsKQotICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBDb25zdHJ1Y3QpOwotCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRo
aXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAg
Ly8gZm9yIGl0LgotICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOwot
Ci0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGlzQ2FsbCA/IENhbGxMaW5r
SW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OwotCi0gICAgRWRnZSBjYWxsZWVF
ZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKV07
CisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBib29sIGlzQ2FsbDsK
KyAgICBib29sIGlzVmFyYXJnczsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNl
IENhbGw6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOworICAgICAgICBp
c0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpD
b25zdHJ1Y3Q7CisgICAgICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSBm
YWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENh
bGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxW
YXJhcmdzOworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIGNh
bGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICBpc0NhbGwg
PSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJiYWQgbm9k
ZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KIAotICAgIC8vIFRoZSBjYWxsIGluc3Ry
dWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBmdW5jdGlvbiAobm9ybWFsIGNhbGwp
IG9yIHRoZQotICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1YnNlcXVlbnQgY2hpbGRy
ZW4gYXJlIHRoZSBhcmd1bWVudHMuCi0gICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1D
aGlsZHJlbigpIC0gMTsKKyAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxk
KG5vZGUsIDApOwogICAgIAotICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15
VGhpc0FyZ3VtZW50OwotCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKTsKKyAgICAvLyBHb3R0YSBsb2FkIHRoZSBhcmd1bWVudHMgc29tZWhvdy4g
VmFyYXJncyBpcyB0cmlja2llci4KKyAgICBpZiAoaXNWYXJhcmdzKSB7CisgICAgICAgIENhbGxW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOwogCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgRWRnZSBhcmdFZGdl
ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEg
KyBpXTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwotICAgICAg
ICBHUFJSZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgYXJnUGF5
bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAg
ICAgR1BSUmVnIGFyZ3VtZW50c1BheWxvYWRHUFI7CisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNU
YWdHUFI7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIyOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIAorICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIFdl
IGF2b2lkIGNhbGxpbmcgZmx1c2hSZWdpc3RlcnMoKSBpbnNpZGUgdGhlIGNvbnRyb2wgZmxvdyBv
ZiBDYWxsRm9yd2FyZFZhcmFyZ3MuCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBhdXRvIGxvYWRBcmd1bWVudHNHUFIgPSBbJl0gKEdQ
UlJlZyByZXNlcnZlZEdQUikgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZv
cndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICAgICAgYXJndW1lbnRzVGFnR1BSID0gSklUQ29t
cGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIocmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIGFy
Z3VtZW50c1BheWxvYWRHUFIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihyZXNlcnZl
ZEdQUiwgYXJndW1lbnRzVGFnR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisg
ICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IoCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzVGFnR1BSKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgo
KS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksCisg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1BheWxvYWRHUFIpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgICAgICAgICAgICAgbG9jayhyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudHNUYWdHUFIgPSBhcmd1bWVudHMudGFnR1BSKCk7CisgICAgICAgICAg
ICAgICAgYXJndW1lbnRzUGF5bG9hZEdQUiA9IGFyZ3VtZW50cy5wYXlsb2FkR1BSKCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICAgICAgICAgIHVubG9jayhyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2NyYXRj
aEdQUjEgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNQYXlsb2FkR1BS
LCBhcmd1bWVudHNUYWdHUFIsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIy
ID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzUGF5bG9hZEdQUiwgYXJn
dW1lbnRzVGFnR1BSLCBzY3JhdGNoR1BSMSwgcmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgc2Ny
YXRjaEdQUjMgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNQYXlsb2Fk
R1BSLCBhcmd1bWVudHNUYWdHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgcmVzZXJ2ZWRH
UFIpOworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0
aGUgd2hvbGUgcmVnaXN0ZXIgZmlsZSB0byBvdXJzZWx2ZXMsIGFuZCBhcmd1bWVudHNHUFIgaGFz
IHRoZQorICAgICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFNlbGVjdCBzb21lIHNjcmF0Y2gg
cmVnaXN0ZXJzLgorICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lsbCB1c2Ugc2NyYXRjaEdQUjIg
dG8gcG9pbnQgdG8gb3VyIHN0YWNrIGZyYW1lLgorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
bnVtVXNlZFN0YWNrU2xvdHMgPSBtX2ppdC5ncmFwaCgpLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAg
ICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICAvLyBEbyB0aGUgaG9ycmlm
aWMgZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0aW1pemF0aW9uLgorICAgICAgICAgICAg
Ly8gRklYTUU6IGRvIHRoaXMgb3B0aW1pemF0aW9uIGF0IHRoZSBJUiBsZXZlbCBpbnN0ZWFkIG9m
IGR5bmFtaWNhbGx5IGJ5IHRlc3RpbmcgdGhlCisgICAgICAgICAgICAvLyBhcmd1bWVudHMgcmVn
aXN0ZXIuIFRoaXMgd2lsbCBoYXBwZW4gb25jZSB3ZSBnZXQgcmlkIG9mIHRoZSBhcmd1bWVudHMg
bGF6eSBjcmVhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGxhenkgdGVhci1vZmYuCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigK
KyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHNUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihudW1Vc2VkU3RhY2tTbG90cyksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGVtaXRTZXR1
cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNj
cmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIHJl
c3VsdEdQUiA9IHNjcmF0Y2hHUFIyOworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXZlQXJn
dW1lbnRzID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQp
OworICAgICAgICB9CiAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdUYWdHUFIsIG1faml0LmNh
bGxlZUFyZ3VtZW50VGFnU2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKLSAgICAgICAgbV9q
aXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFBheWxvYWRTbG90
KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBo
KCksIG5vZGUsIGlzRmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJpZ2h0IG5vdywg
YXJndW1lbnRzIGlzIGluIGFyZ3VtZW50c1RhZ0dQUi9hcmd1bWVudHNQYXlsb2FkR1BSIGFuZCB0
aGUgcmVnaXN0ZXIgZmlsZSBpcworICAgICAgICAvLyBmbHVzaGVkLgorICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBhcmd1bWVudHNUYWdHUFIsIGFyZ3VtZW50c1BheWxvYWRHUFIsIG51bVVzZWRTdGFja1Ns
b3RzLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cg
d2UgaGF2ZSB0aGUgYXJndW1lbnQgY291bnQgb2YgdGhlIGNhbGxlZSBmcmFtZSwgYnV0IHdlJ3Zl
IGxvc3QgdGhlIGFyZ3VtZW50cyBvcGVyYW5kLgorICAgICAgICAvLyBSZWNvbnN0cnVjdCB0aGUg
YXJndW1lbnRzIG9wZXJhbmQgd2hpbGUgcHJlc2VydmluZyB0aGUgY2FsbGVlIGZyYW1lLgorICAg
ICAgICBsb2FkQXJndW1lbnRzR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMSk7
CisgICAgICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUobV9qaXQsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBmYWxzZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDYgKiBzaXplb2Yodm9pZCopKSkp
LCBzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAg
ICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSwgYXJndW1lbnRzVGFnR1BSLCBhcmd1
bWVudHNQYXlsb2FkR1BSLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndh
cmRWYXJhcmdzKQorICAgICAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5rKCZtX2ppdCk7CisgICAg
ICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSksIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICAgICAgCisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVz
aGVkKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ2FsbEZvcndhcmRW
YXJhcmdzKQorICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChpc0NhbGwpIHsKKyAgICAgICAgICAgIC8vIE5vdyBzZXQgdXAgdGhlICJ0aGlzIiBh
cmd1bWVudC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNBcmd1bWVudCh0aGlzLCBu
b2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncyA/IG5vZGUtPmNoaWxkMigpIDogbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNBcmd1bWVudFRhZ0dQUiA9IHRoaXNB
cmd1bWVudC50YWdHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzQXJndW1lbnRQYXlsb2Fk
R1BSID0gdGhpc0FyZ3VtZW50LnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIHRoaXNBcmd1bWVu
dC51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih0aGlzQXJn
dW1lbnRUYWdHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFRhZ1Nsb3QoMCkpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMih0aGlzQXJndW1lbnRQYXlsb2FkR1BSLCBKSVRDb21waWxl
cjo6Y2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdCgwKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3Qg
cGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKKyAgICAgICAgLy8gZm9yIGl0LgorICAg
ICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBpc0NhbGwgPyAwIDogMTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRo
ZSBmdW5jdGlvbiAobm9ybWFsIGNhbGwpIG9yIHRoZQorICAgICAgICAvLyByZWNlaXZlciAobWV0
aG9kIGNhbGwpLiBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1lbnRzLgorICAgICAg
ICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICAK
KyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7
CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIobnVtQXJncyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Q
YXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7CisgICAgICAgICAgICBHUFJS
ZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIGFyZ1BheWxv
YWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOworICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgbV9qaXQuY2Fs
bGVlQXJndW1lbnRUYWdTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFBheWxvYWRT
bG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgSlNW
YWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwpAQCAtNzI0LDYgKzg2MSwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgaW5mby0+Y29k
ZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKICAgICBpbmZvLT5jYWxsZWVHUFIgPSBj
YWxsZWVQYXlsb2FkR1BSOwogICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGws
IHRhcmdldFRvQ2hlY2ssIGluZm8pOworICAgIAorICAgIC8vIElmIHdlIHdlcmUgdmFyYXJncywg
dGhlbiBhZnRlciB0aGUgY2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3Vy
IHN0YWNrIHBvaW50ZXIuCisgICAgaWYgKGlzVmFyYXJncykKKyAgICAgICAgbV9qaXQuYWRkUHRy
KFRydXN0ZWRJbW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KQEAgLTQxNTYs
OSArNDI5Nyw1OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAK
ICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJn
czoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFy
Z3M6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYXJndW1lbnRzVGFnR1BS
OworICAgICAgICBHUFJSZWcgYXJndW1lbnRzUGF5bG9hZEdQUjsKKyAgICAgICAgeworICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGFyZ3VtZW50c1RhZ0dQUiA9IGFyZ3VtZW50cy50YWdHUFIoKTsKKyAgICAgICAg
ICAgIGFyZ3VtZW50c1BheWxvYWRHUFIgPSBhcmd1bWVudHMucGF5bG9hZEdQUigpOworICAgICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgYXJndW1lbnRzVGFnR1BSLCBhcmd1bWVudHNQYXlsb2FkR1BSLCBkYXRhLT5vZmZzZXQpOwor
ICAgICAgICAKKyAgICAgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNUYWdHUFIgPSBhcmd1bWVudHMudGFnR1BSKCk7
CisgICAgICAgICAgICBhcmd1bWVudHNQYXlsb2FkR1BSID0gYXJndW1lbnRzLnBheWxvYWRHUFIo
KTsKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgdW5s
b2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3Ro
IHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRw
b2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEg
c3BlYyBjb21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9u
IHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJn
cyByaWdodAorICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKworICAgICAgICBHUFJSZWcg
YXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpzZWxl
Y3RTY3JhdGNoR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNUYWdHUFIsIGFy
Z3VtZW50c1BheWxvYWRHUFIpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlz
R1BSKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFZhcmFyZ3NPdmVy
ZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKKyAgICAgICAgICAgICAgICBhcmdDb3VudElu
Y2x1ZGluZ1RoaXNHUFIsCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0
KSkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudEluY2x1ZGluZ1Ro
aXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAg
ICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgZGF0YS0+
bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNUYWdHUFIsIGFyZ3VtZW50c1BheWxvYWRH
UFIsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9y
eU1pbmltdW0pOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOiB7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CkBAIC00Mjc4LDkgKzQ0NjksMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
QVNTRVJUKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
c3VsdEdQUik7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoCisgICAgICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkgLSAxKSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdp
c3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVn
aXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dEdQUik7CisgICAgICAgIH0KICAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDI5NiwxNCArNDQ5OCwyMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
dGFnRm9yKG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCi0gICAg
ICAgICAgICAgICAgSW1tMzIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpLAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSks
CiAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6
QXJndW1lbnRDb3VudCksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENv
dW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lz
dGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFy
Z3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICAgICAgbV9q
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpLCByZXN1bHRUYWdHUFIpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHRoZSBzbG93
IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2FyZCBzcGVjdWxhdGlvbiB0aGF0
IHRoZQpAQCAtNDMzOSw3ICs0NTQ4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpKTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIDAsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCkBAIC00MzQ3LDcgKzQ1
NTcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgICAgICAgICBpbmRleEdQUiwKICAgICAgICAgICAgICAgICAgICAgSW1tMzIobm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdFBheWxvYWRHUFIpOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFj
azo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJn
dW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdFBheWxvYWRH
UFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXls
b2FkR1BSKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCkBAIC00NDE2LDE0ICs0NjMxLDIwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6dGFnRm9yKG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAogICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLAogICAgICAgICAgICAgICAg
ICAgICBpbmRleEdQUiwKICAgICAgICAgICAgICAgICAgICAgSW1tMzIobm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlm
ICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1l
bnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdFBheWxvYWRHUFIpOwogICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsK
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgcmVzdWx0UGF5bG9hZEdQ
UikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCisj
aW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01v
ZGUuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKIApAQCAtNjI0LDM4ICs2MjUsMTYz
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEKIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBib29sIGlzQ2FsbCA9IG5v
ZGUtPm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlzQ2FsbCkKLSAgICAgICAgREZHX0FTU0VSVCht
X2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7Ci0gICAgCi0gICAg
Ly8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQg
d2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0LgotICAgIGludCBkdW1teVRoaXNB
cmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2Fs
bFR5cGU7CisgICAgYm9vbCBpc0NhbGw7CisgICAgYm9vbCBpc1ZhcmFyZ3M7CisgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDYWxsOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxM
aW5rSW5mbzo6Q2FsbDsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsKKyAgICAgICAgaXNWYXJhcmdz
ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBj
YWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgICAgICBpc0NhbGwgPSBmYWxz
ZTsKKyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhbGxU
eXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsK
KyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0
VmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAgIGlzVmFyYXJncyA9IHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIERGR19DUkFTSChtX2pp
dC5ncmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOwog
ICAgIAotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBpc0NhbGwgPyBDYWxs
TGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKKyAgICAvLyBHb3R0YSBs
b2FkIHRoZSBhcmd1bWVudHMgc29tZWhvdy4gVmFyYXJncyBpcyB0cmlja2llci4KKyAgICBpZiAo
aXNWYXJhcmdzKSB7CisgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxW
YXJhcmdzRGF0YSgpOworCisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBD
YWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIFdlIGF2b2lkIGNhbGxpbmcgZmx1
c2hSZWdpc3RlcnMoKSBpbnNpZGUgdGhlIGNvbnRyb2wgZmxvdyBvZiBDYWxsRm9yd2FyZFZhcmFy
Z3MuCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBhdXRvIGxvYWRBcmd1bWVudHNHUFIgPSBbJl0gKEdQUlJlZyByZXNlcnZlZEdQUikg
eworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7Cisg
ICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hH
UFIocmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NCgKKyAgICAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIGxvY2socmVzZXJ2ZWRHUFIpOworICAgICAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAg
ICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAg
ICAgICAgICB1bmxvY2socmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIxID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCByZXNlcnZl
ZEdQUik7CisgICAgICAgICAgICBzY3JhdGNoR1BSMiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3Jh
dGNoR1BSKGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIHJlc2VydmVkR1BSKTsKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIzID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRz
R1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgfTsK
KyAgICAgICAgCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgdGhlIHdob2xlIHJlZ2lzdGVy
IGZpbGUgdG8gb3Vyc2VsdmVzLCBhbmQgYXJndW1lbnRzR1BSIGhhcyB0aGUKKyAgICAgICAgLy8g
YXJndW1lbnRzIHJlZ2lzdGVyLiBTZWxlY3Qgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAg
ICAgCisgICAgICAgIC8vIFdlIHdpbGwgdXNlIHNjcmF0Y2hHUFIyIHRvIHBvaW50IHRvIG91ciBz
dGFjayBmcmFtZS4KKworICAgICAgICB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyA9IG1faml0
LmdyYXBoKCkubV9uZXh0TWFjaGluZUxvY2FsOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaGF2ZUFyZ3VtZW50czsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEdQUklu
Zm86OnJlZ1QwOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3Mp
IHsKKyAgICAgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJndW1l
bnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAgICAgICAvLyBGSVhNRTogZG8gdGhpcyBvcHRpbWl6
YXRpb24gYXQgdGhlIElSIGxldmVsIGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYnkgdGVzdGluZyB0
aGUKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gVGhpcyB3aWxsIGhhcHBlbiBv
bmNlIHdlIGdldCByaWQgb2YgdGhlIGFyZ3VtZW50cyBsYXp5IGNyZWF0aW9uIGFuZAorICAgICAg
ICAgICAgLy8gbGF6eSB0ZWFyLW9mZi4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJndW1lbnRzR1BSKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKG51bVVzZWRT
dGFja1Nsb3RzKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgZW1pdFNldHVwVmFyYXJnc0Zy
YW1lRmFzdENhc2UobV9qaXQsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIzLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRh
LT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgICAgICAgICAgcmVzdWx0R1BSID0g
c2NyYXRjaEdQUjI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhdmVBcmd1bWVudHMgPSBt
X2ppdC5qdW1wKCk7CisgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IH0KKworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlzRmx1c2hlZCgp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFJpZ2h0IG5vdywgYXJndW1lbnRzIGlzIGluIGFyZ3Vt
ZW50c0dQUiBhbmQgdGhlIHJlZ2lzdGVyIGZpbGUgaXMgZmx1c2hlZC4KKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgYXJndW1lbnRzR1BSLCBudW1Vc2VkU3RhY2tTbG90cywgZGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGhhdmUgdGhlIGFyZ3VtZW50IGNv
dW50IG9mIHRoZSBjYWxsZWUgZnJhbWUsIGJ1dCB3ZSd2ZSBsb3N0IHRoZSBhcmd1bWVudHMgb3Bl
cmFuZC4KKyAgICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBvcGVyYW5kIHdoaWxl
IHByZXNlcnZpbmcgdGhlIGNhbGxlZSBmcmFtZS4KKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMy
KG51bVVzZWRTdGFja1Nsb3RzKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBlbWl0U2V0VmFyYXJn
c0ZyYW1lKG1faml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHNjcmF0Y2hHUFIx
LCBzY3JhdGNoR1BSMSk7CisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgc2NyYXRjaEdQUjEsIEpJVENvbXBp
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
c2NyYXRjaEdQUjEsIGFyZ3VtZW50c0dQUiwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgIGhhdmVBcmd1bWVudHMubGluaygmbV9q
aXQpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsIGlzRmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdGhl
IGFyZ3VtZW50cyBhcnJheSBhbnltb3JlLgorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDYWxs
Rm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGlzQ2FsbCkgeworICAgICAgICAgICAgLy8gTm93IHNldCB1cCB0aGUg
InRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc0FyZ3VtZW50
KHRoaXMsIG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzID8gbm9kZS0+Y2hpbGQyKCkg
OiBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc0FyZ3VtZW50R1BSID0g
dGhpc0FyZ3VtZW50LmdwcigpOworICAgICAgICAgICAgdGhpc0FyZ3VtZW50LnVzZSgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHRoaXNBcmd1bWVudEdQUiwgSklU
Q29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3Qg
cGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKKyAgICAgICAgLy8gZm9yIGl0LgorICAg
ICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBpc0NhbGwgPyAwIDogMTsKICAgICAKLSAgICBF
ZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmly
c3RDaGlsZCgpXTsKLSAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlz
IHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQotICAgIC8vIGFy
Z3VtZW50cy4KLSAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAx
OworICAgICAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIHRoZSBm
dW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQorICAgICAgICAvLyBhcmd1
bWVudHMuCisgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAt
IDE7CiAgICAgCi0gICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJn
dW1lbnQ7CisgICAgICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0Fy
Z3VtZW50OwogICAgIAotICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihudW1BcmdzKSwgbV9qaXQuY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1
bWVudENvdW50KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihudW1BcmdzKSwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNT
dGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
UGFzc2VkQXJnczsgaSsrKSB7Ci0gICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKLSAgICAgICAgR1BSUmVnIGFyZ0dQUiA9
IGFyZy5ncHIoKTsKLSAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgeworICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0g
bV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBp
XTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgICAgICAgICB1c2UoYXJnRWRn
ZSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgbV9qaXQuY2FsbGVl
QXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChhcmdHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFNsb3QoaSArIGR1bW15
VGhpc0FyZ3VtZW50KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlT3BlcmFuZCBj
YWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5n
cHIoKTsKLSAgICB1c2UoY2FsbGVlRWRnZSk7Ci0gICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIs
IG1faml0LmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICBjYWxsZWUudXNl
KCk7CisgICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFt
ZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIApA
QCAtNjkyLDYgKzgxOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlCiAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgCiAgICAg
bV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbExp
bmtJbmZvKTsKKyAgICAKKyAgICAvLyBJZiB3ZSB3ZXJlIHZhcmFyZ3MsIHRoZW4gYWZ0ZXIgdGhl
IGNhbGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0YWJsaXNoIG91ciBzdGFjayBwb2ludGVy
LgorICAgIGlmIChpc1ZhcmFyZ3MpCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIo
bV9qaXQuZ3JhcGgoKS5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKIH0KIAogLy8gQ2xhbmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtbY2xhbmc6OmZh
bGx0aHJvdWdoXV0gaW4gdGVtcGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0ZSBleHBhbnNp
b24gdXNlcyBpdApAQCAtNDIyMSw5ICs0MzUxLDU2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoK
KyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAg
IGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIExvYWRW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAKKyAg
ICAgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICAgICAgeworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGFy
Z3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2l6ZU9mVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c0dQUiwgZGF0
YS0+b2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRz
LmdwcigpOworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAg
ICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBs
ZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAvLyBmcm9tIHRoZSBz
dGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZy
b20gYSBzcGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29s
dXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92
YXJhcmdzIHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorCisgICAgICAgIEdQ
UlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQorICAgICAgICAgICAgSklUQ29tcGlsZXI6
OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c0dQUik7
CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOworICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNl
KCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlLAorICAgICAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwKKyAg
ICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAg
ICAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6
OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0
KCksIGFyZ3VtZW50c0dQUiwgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
ZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2
YXRpb246IHsKICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIApAQCAtNDMyOCw5ICs0
NTA1LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1f
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAg
ICAgbV9qaXQubW92ZSgKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpLAorICAgICAg
ICAgICAgICAgIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0
ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogICAgICAgICBp
bnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00
MzQ0LDIwICs0NTMyLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAg
IG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCiAgICAg
ICAgICAgICAgICAgSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSkpLAogICAgICAg
ICAgICAgICAgIHJlc3VsdEdQUik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJl
Z2lzdGVyOworICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxS
ZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZXN1bHRHUFIpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhN
RTogdGhlIHNsb3cgcGF0aCBnZW5lcmF0b3Igc2hvdWxkIHBlcmZvcm0gYSBmb3J3YXJkIHNwZWN1
bGF0aW9uIHRoYXQgdGhlCi0gICAgICAgIC8vIHJlc3VsdCBpcyBhbiBpbnRlZ2VyLiBGb3Igbm93
IHdlIHBvc3Rwb25lIHRoZSBzcGVjdWxhdGlvbiBieSBoYXZpbmcgdGhpcyByZXR1cm4KLSAgICAg
ICAgLy8gYSBKU1ZhbHVlLgotICAgICAgICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgY3JlYXRlZCwgdGhp
cywgb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoLCByZXN1bHRHUFIsCkBAIC00Mzg0LDcgKzQ1
NzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKQEAgLTQzOTIsNyAr
NDU4MywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIGluZGV4R1BSLAogICAgICAgICAgICAgICAgICAgICBJbW0zMihub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkp
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAg
ICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50
Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIpOwogICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgMCwKQEAgLTQ0NDksMTQgKzQ2NDUsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICAKLSAgICAgICAg
aWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYg
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMy
KAogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLAogICAgICAg
ICAgICAgICAgICAgICByZXN1bHRHUFIsCiAgICAgICAgICAgICAgICAgICAgIEltbTMyKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSkp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAg
IGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJn
dW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRD
b3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29t
cGlsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIHJlc3VsdEdQUikpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTgw
MjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3OCw3ICs1NzgsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgLy8gVXNlZCB0byBBU1NFUlQg
Zmx1c2hSZWdpc3RlcnMoKSBoYXMgYmVlbiBjYWxsZWQgcHJpb3IgdG8KICAgICAvLyBjYWxsaW5n
IG91dCBmcm9tIEpJVCBjb2RlIHRvIGEgQyBoZWxwZXIgZnVuY3Rpb24uCiAgICAgYm9vbCBpc0Zs
dXNoZWQoKQpAQCAtNTkzLDcgKzU5Miw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQoTm9kZSog
bm9kZSkKQEAgLTE0NTQsNiArMTQ1MiwyNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9u
X0VKWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQgYXJn
MiwgdW5zaWduZWQgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihGX0pJVE9wZXJhdGlvbl9FRkpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgewor
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1
c3RlZEltbTMyKGFyZzMpLCBhcmc0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcyKQorICAgIHsKKyAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihh
cmcyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FWkpaWlogb3BlcmF0aW9uLCB1bnNpZ25lZCBhcmcx
LCBHUFJSZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQsIHVuc2lnbmVkIGFyZzUp
CisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbTMyKGFyZzEpLCBhcmcyLCBUcnVzdGVkSW1tMzIoYXJnMyksIGFyZzQsIFRydXN0ZWRJbW0z
Mihhcmc1KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CisgICAgfQogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogLy8gRW5jb2Rl
ZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcg
Y29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJl
Z2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCkBAIC0xNzUwLDYgKzE3NjgsMjYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihaX0pJVE9wZXJhdGlvbl9FSlpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgdW5zaWduZWQgYXJnMiwgdW5zaWduZWQgYXJn
MykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
UGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbTMyKGFyZzIpLCBUcnVzdGVkSW1tMzIoYXJnMykp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oRl9KSVRPcGVyYXRpb25fRUZKWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCwgdW5zaWduZWQgYXJn
MywgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMlBheWxvYWQsIGFyZzJUYWcsIFRydXN0ZWRJbW0zMihhcmczKSwg
YXJnNCk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCB1bnNpZ25lZCBhcmcyKQorICAgIHsK
KyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBh
cmcxVGFnLCBUcnVzdGVkSW1tMzIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVpKWlpaIG9w
ZXJhdGlvbiwgdW5zaWduZWQgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9h
ZCwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQsIHVuc2lnbmVkIGFyZzUpCisgICAgeworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEp
LCBhcmcyUGF5bG9hZCwgYXJnMlRhZywgVHJ1c3RlZEltbTMyKGFyZzMpLCBhcmc0LCBUcnVzdGVk
SW1tMzIoYXJnNSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOworICAgIH0KICN1bmRlZiBFQUJJXzMyQklUX0RVTU1ZX0FSRwogI3VuZGVm
IFNINF8zMkJJVF9EVU1NWV9BUkcKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIEJpdFZlY3RvciB1c2VkTG9j
YWxzOwogICAgICAgICAKICAgICAgICAgLy8gQ29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhhdCBh
cmUgdXNlZCBmcm9tIElSLgotICAgICAgICBib29sIGhhc0dldExvY2FsVW5saW5rZWQgPSBmYWxz
ZTsKKyAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSBmYWxzZTsKICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQpAQCAtODEsNyArODEsMjIgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgdXNlZExv
Y2Fscy5zZXQob3BlcmFuZC50b0xvY2FsKCkpOwotICAgICAgICAgICAgICAgICAgICBoYXNHZXRM
b2NhbFVubGlua2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVl
ZEZpeHVwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJh
cmdzOiB7CisgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQu
aXNMb2NhbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+
Y291bnQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0Lmlz
TG9jYWwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxseSBy
ZWxpZXMgb24gdGhlIGNvbnRpZ3VpdHkgb2Ygc3RhY2sgbGF5b3V0CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhc3NpZ25tZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChW
aXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlz
TG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRh
LT5saW1pdDsgaS0tOykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5z
ZXQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgfSAvLyB0aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4u
CisgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCkBAIC0xMTMsNiArMTI4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHVzZWRMb2Nh
bHMuc2V0KGFyZ3VtZW50c1JlZ2lzdGVyLnRvTG9jYWwoKSk7CiAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpLnRv
TG9jYWwoKSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJl
Z2lzdGVyKAorICAgICAgICAgICAgICAgICAgICBKU1N0YWNrOjpBcmd1bWVudENvdW50ICsgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgYXJndW1lbnQtLSA+IDE7KSB7CiAgICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwpAQCAtMTQ4
LDI0ICsxNjgsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxd
ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbCgKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW3ZhcmlhYmxlLT5sb2NhbCgpLnRvTG9j
YWwoKV0pOworICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFs
bG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKGNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAot
ICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVy
KCkudG9Mb2NhbCgpXSk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVn
aXN0ZXIgPQorICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+
YXJndW1lbnRzUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKLSAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uWwotICAgICAgICAg
ICAgICAgICAgICB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkudG9Mb2NhbCgpXSkKKyAg
ICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lz
dGVyKGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKSkKICAgICAgICAgICAgICAgICA9
PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAg
ICAgICAgIGNvZGVCbG9jaygpLT5zZXRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rl
cik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+dW5jaGVj
a2VkQWN0aXZhdGlvblJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBjb2RlQmxv
Y2soKS0+c2V0QWN0aXZhdGlvblJlZ2lzdGVyKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGFsbG9jYXRpb25bY29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3Rlcigp
LnRvTG9jYWwoKV0pKTsKKyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJs
b2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIC8vIFRoaXMgcmVnaXN0ZXIgaXMgbmV2ZXIgdmFsaWQgZm9yIERGRyBjb2RlIGJsb2Nrcy4K
QEAgLTE3NiwxNSArMTkzLDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUtPnVzZXNBcmd1bWVu
dHMoKSkgewotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0
ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICAgICAgYWxsb2Nh
dGlvblttX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkudG9Mb2Nh
bCgpXSk7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3Rl
ciA9IGFzc2lnbigKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgbV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIAogICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChhbGxvY2F0aW9uW3VubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSku
dG9Mb2NhbCgpXSkKKyAgICAgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGlu
ZUNhbGxGcmFtZSkpKQogICAgICAgICAgICAgICAgICAgICA9PSB1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3RlcikpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkgeworICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dFJlZ2lzdGVyID0gYXNzaWduKAorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsg
YXJndW1lbnQtLSA+IDE7KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9z
aXRpb24gPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAg
IGRhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjI3LDkgKzI0OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnBhcmFtZXRlckNv
dW50KCkpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzeW1ib2xUYWJsZS0+cGFy
YW1ldGVyQ291bnQoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1l
bnRzW2ldID0gc2xvd0FyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1lbnRzW2ldLmluZGV4KTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
YWxsb2NhdGlvbltyZWcudG9Mb2NhbCgpXSkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBhc3NpZ24oYWxsb2NhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyKHNsb3dBcmd1bWVudHNbaV0uaW5kZXgpKS5vZmZzZXQoKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd0FyZ3VtZW50
cyA9IFdURjo6bW92ZShuZXdTbG93QXJndW1lbnRzKTsKQEAgLTIzNyw3ICsyNTYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZpeCBHZXRMb2NhbFVubGlua2Vk
J3MgdmFyaWFibGUgcmVmZXJlbmNlcy4KLSAgICAgICAgaWYgKGhhc0dldExvY2FsVW5saW5rZWQp
IHsKKyAgICAgICAgaWYgKGhhc05vZGVzVGhhdE5lZWRGaXh1cCkgewogICAgICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CiAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC0yNDYsMTAgKzI2
NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogewotICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT51bmxpbmtlZExv
Y2FsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGFsbG9jYXRpb25bb3BlcmFuZC50b0xvY2FsKCldKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldFVubGlua2VkTWFjaGluZUxvY2FsKG9wZXJhbmQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwoYXNzaWduKGFsbG9jYXRp
b24sIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0
aW9uLCBkYXRhLT5jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5l
U3RhcnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMjYyLDYgKzI4NSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2ln
bihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
KQorICAgIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IHNyYzsKKyAgICAgICAg
aWYgKHJlc3VsdC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlv
biA9IGFsbG9jYXRpb25bcmVzdWx0LnRvTG9jYWwoKV07CisgICAgICAgICAgICBpZiAobXlBbGxv
Y2F0aW9uID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdp
c3RlcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CiB9OwogCiBib29sIHBlcmZvcm1TdGFja0xheW91dChHcmFwaCYg
Z3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3MSw2ICsyNzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBj
YXNlIEdldFNjb3BlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgQ291bnRFeGVjdXRpb246CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
eXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1
LDcgKzExNSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBub2RlLCBi
ZWZvcmUgZG9pbmcgYW55IGFwcGVuZGluZy4KICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIElu
c2VydCBhIEdldExvY2FsIGFuZCBhIENoZWNrU3RydWN0dXJlIGltbWVkaWF0ZWx5IGZvbGxvd2lu
ZyB0aGlzCiAgICAgICAgICAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50LCBpZiB0aGUgdmFyaWFi
bGUgd2FzIGEgY2FuZGlkYXRlIGZvciBzdHJ1Y3R1cmUgaG9pc3RpbmcuCiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBiYXNpYyBibG9jayBwcmV2aW91c2x5IG9ubHkgaGFkIHRoZSBTZXRB
cmd1bWVudCBhcyBpdHMKQEAgLTEyNyw2ICsxMjYsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUgJiYgIWl0ZXItPnZhbHVlLm1fYXJy
YXlNb2RlSXNWYWxpZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAg
ICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBzaG91bGQgb25seSBiZSBkb2luZyB0aGlzIGhv
aXN0aW5nIGZvciBTZXRBcmd1bWVudHMgYXQgdGhlIHByb2xvZ3VlLgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIWJsb2NrSW5kZXgpOworCiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmln
aW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogZ2V0TG9jYWwgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAx
ODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgc3RhcnRD
cmFzaGluZygpOyBcCiAgICAgICAgICAgICBkYXRhTG9nRigiXG5cblxuQXQgIik7IFwKICAgICAg
ICAgICAgIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQ7IFwKLSAgICAgICAgICAgIGRh
dGFMb2dGKCI6IHZhbGlkYXRpb24gJXMgKCVzOiVkKSBmYWlsZWQuXG4iLCAjYXNzZXJ0aW9uLCBf
X0ZJTEVfXywgX19MSU5FX18pOyBcCisgICAgICAgICAgICBkYXRhTG9nRigiOiB2YWxpZGF0aW9u
IGZhaWxlZDogJXMgKCVzOiVkKS5cbiIsICNhc3NlcnRpb24sIF9fRklMRV9fLCBfX0xJTkVfXyk7
IFwKICAgICAgICAgICAgIGR1bXBHcmFwaElmQXBwcm9wcmlhdGUoKTsgXAogICAgICAgICAgICAg
V1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlf
RlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCiAgICAgICAgICAgICBDUkFTSCgpOyBcCkBAIC02Miwx
MSArNjIsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgc3RhcnRDcmFzaGluZygpOyBcCiAgICAg
ICAgICAgICBkYXRhTG9nRigiXG5cblxuQXQgIik7IFwKICAgICAgICAgICAgIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0IGNvbnRleHQ7IFwKLSAgICAgICAgICAgIGRhdGFMb2dGKCI6IHZhbGlkYXRp
b24gKCVzID0gIiwgI2xlZnQpOyBcCisgICAgICAgICAgICBkYXRhTG9nRigiOiB2YWxpZGF0aW9u
IGZhaWxlZDogKCVzID0gIiwgI2xlZnQpOyBcCiAgICAgICAgICAgICBkYXRhTG9nKGxlZnQpOyBc
CiAgICAgICAgICAgICBkYXRhTG9nRigiKSA9PSAoJXMgPSAiLCAjcmlnaHQpOyBcCiAgICAgICAg
ICAgICBkYXRhTG9nKHJpZ2h0KTsgXAotICAgICAgICAgICAgZGF0YUxvZ0YoIikgKCVzOiVkKSBm
YWlsZWQuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisgICAgICAgICAgICBkYXRhTG9nRigi
KSAoJXM6JWQpLlxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAogICAgICAgICAgICAgZHVtcEdy
YXBoSWZBcHByb3ByaWF0ZSgpOyBcCiAgICAgICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWls
dXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2xlZnQgIiA9PSAi
ICNyaWdodCk7IFwKICAgICAgICAgICAgIENSQVNIKCk7IFwKQEAgLTQ1Niw2ICs0NTYsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZlIGEgc2Vjb25k
IEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIC8v
IGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50IGZvciB0aGF0IGxvY2FsLgorICAgICAgICAg
ICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90
U2V0OworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlv
bnMuaAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDYgKzc3LDkgQEAgc3RhdGljIGlubGlu
ZSBMVHlwZSBzdHJ1Y3RUeXBlKExDb250ZXh0IAogICAgIHJldHVybiBzdHJ1Y3RUeXBlKGNvbnRl
eHQsIGVsZW1lbnRzLCAyLCBwYWNraW5nKTsKIH0KIAorLy8gRklYTUU6IE1ha2UgdGhlIFZhcmlh
ZGljaXR5IGFyZ3VtZW50IG5vdCBiZSB0aGUgbGFzdCBhcmd1bWVudCB0byBmdW5jdGlvblR5cGUo
KSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24KKy8vIGNhbiB1c2UgQysrMTEgdmFyaWFkaWMgdGVtcGxh
dGVzCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTc1CiBl
bnVtIFZhcmlhZGljaXR5IHsgTm90VmFyaWFkaWMsIFZhcmlhZGljIH07CiBzdGF0aWMgaW5saW5l
IExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBjb25zdCBMVHlwZSogcGFyYW1U
eXBlcywgdW5zaWduZWQgcGFyYW1Db3VudCwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkpCiB7CkBA
IC0xMTAsNiArMTEzLDE2IEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBl
IHIKICAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBh
cmFtNCB9OwogICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywg
NCwgdmFyaWFkaWNpdHkpOwogfQorc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5
cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFtMywg
TFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90
VmFyaWFkaWMpCit7CisgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFtMiwg
cGFyYW0zLCBwYXJhbTQsIHBhcmFtNSB9OworICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJu
VHlwZSwgcGFyYW1UeXBlcywgNSwgdmFyaWFkaWNpdHkpOworfQorc3RhdGljIGlubGluZSBMVHlw
ZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJh
bTIsIExUeXBlIHBhcmFtMywgTFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIExUeXBlIHBhcmFt
NiwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKK3sKKyAgICBMVHlwZSBw
YXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01LCBw
YXJhbTYgfTsKKyAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMs
IDYsIHZhcmlhZGljaXR5KTsKK30KIAogc3RhdGljIGlubGluZSBMVHlwZSB0eXBlT2YoTFZhbHVl
IHZhbHVlKSB7IHJldHVybiBsbHZtLT5UeXBlT2YodmFsdWUpOyB9CiAKQEAgLTI5OCw0MSArMzEx
LDEzIEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIHsKICAgICBy
ZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCAmYXJnMSwgMSk7CiB9Ci1zdGF0aWMg
aW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9u
LCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJn
MSwgYXJnMiB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3Ms
IDIpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMykK
LXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczIH07Ci0gICAgcmV0dXJu
IGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgMyk7Ci19Ci1zdGF0aWMgaW5saW5l
IExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFs
dWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkKK3RlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+CitMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExW
YWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykKIHsKLSAgICBMVmFsdWUg
YXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2Fs
bChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgNCk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBi
dWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwg
TFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUpCi17Ci0g
ICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSB9OwotICAg
IHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDUpOwotfQotc3RhdGlj
IGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlv
biwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExW
YWx1ZSBhcmc1LCBMVmFsdWUgYXJnNikKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBh
cmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWls
ZGVyLCBmdW5jdGlvbiwgYXJncywgNik7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENh
bGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVl
IGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2
LCBMVmFsdWUgYXJnNykKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmcz
LCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVy
LCBmdW5jdGlvbiwgYXJncywgNyk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFy
ZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBM
VmFsdWUgYXJnNywgTFZhbHVlIGFyZzgpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwg
YXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCB9OwotICAgIHJldHVybiBi
dWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDgpOworICAgIExWYWx1ZSBhcmdzQXJy
YXlbXSA9IHsgYXJnMSwgYXJncy4uLiB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwg
ZnVuY3Rpb24sIGFyZ3NBcnJheSwgc2l6ZW9mKGFyZ3NBcnJheSkgLyBzaXplb2YoTFZhbHVlKSk7
CiB9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9u
KExWYWx1ZSBpbnN0cnVjdGlvbiwgTENhbGxDb252IGNhbGxpbmdDb252ZW50aW9uKSB7IGxsdm0t
PlNldEluc3RydWN0aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxpbmdDb252ZW50aW9uKTsg
fQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRXh0
cmFjdFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQogc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZh
bHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2VsZWN0KGJ1
aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4MDIy
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMjAsNiArMTIwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAg
ICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6
CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2Ug
TmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgVmFsdWVUb0ludDMyOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVj
dHJvbmljcwogICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgpA
QCAtMTI4LDYgKzEyOCwyMCBAQCBzdGF0aWMgdm9pZCBkdW1wRGF0YVNlY3Rpb24oRGF0YVNlY3Rp
b24qCiAgICAgfQogfQogCitzdGF0aWMgaW50IG9mZnNldE9mU3RhY2tSZWdpb24oU3RhY2tNYXBz
OjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgdWludDMyX3Qgc3RhY2ttYXBJRCkKK3sKKyAgICBTdGFj
a01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YWNrbWFw
SUQpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsKKyAgICBMb2NhdGlvbiBj
YXB0dXJlZExvY2F0aW9uID0KKyAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFwcyhudWxscHRy
LCBpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnNbMF0pOworICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1
cmVkTG9jYXRpb24ua2luZCgpID09IExvY2F0aW9uOjpSZWdpc3Rlcik7CisgICAgUkVMRUFTRV9B
U1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUgc2l6
ZW9mKFJlZ2lzdGVyKSkpOworICAgIHJldHVybiBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpIC8g
c2l6ZW9mKFJlZ2lzdGVyKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRGVzY3JpcHRvclR5cGU+
CiB2b2lkIGdlbmVyYXRlSUNGYXN0UGF0aCgKICAgICBTdGF0ZSYgc3RhdGUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKQEAgLTI0Myw2
ICsyNTcsMzIgQEAgc3RhdGljIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnNGb3IoY29ucwogICAg
IHJldHVybiBSZWdpc3RlclNldChyZWNvcmQudXNlZFJlZ2lzdGVyU2V0KCksIFJlZ2lzdGVyU2V0
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsVHlw
ZT4KK3ZvaWQgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhWZWN0b3I8Q2FsbFR5cGU+JiBjYWxs
cywgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCkKK3sKKyAgICAvLyBIYW5kbGluZyBK
UyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkg
dGhlIFBDIGluIExMVk0KKyAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0
IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KKworICAgIFZlY3Rv
cjxDYWxsVHlwZT4gb2xkQ2FsbHM7CisgICAgb2xkQ2FsbHMuc3dhcChjYWxscyk7CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIENhbGxUeXBlJiBjYWxsID0gb2xkQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBTdGFj
a01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3Rh
Y2ttYXBJRCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIENhbGxUeXBlIGNvcHkg
PSBjYWxsOworICAgICAgICAgICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFs
dWVbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoY29weSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnNvcnQoY2FsbHMuYmVnaW4oKSwgY2FsbHMu
ZW5kKCkpOworfQorCiBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgU3RhdGUmIHN0YXRlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29kZSwg
R2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb24sCiAgICAgU3RhY2tNYXBzOjpSZWNv
cmRNYXAmIHJlY29yZE1hcCwgYm9vbCBkaWRTZWVVbndpbmRJbmZvKQpAQCAtMjUxLDE2ICsyOTEs
MTQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFZNJiB2
bSA9IGdyYXBoLm1fdm07CiAgICAgU3RhY2tNYXBzIHN0YWNrbWFwcyA9IGppdENvZGUtPnN0YWNr
bWFwczsKICAgICAKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJl
Y29yZE1hcC5maW5kKHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoaXRlciAhPSByZWNvcmRNYXAuZW5kKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZh
bHVlLnNpemUoKSA9PSAxKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZVswXS5sb2Nh
dGlvbnMuc2l6ZSgpID09IDEpOwotICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24gPQotICAg
ICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZqaXRDb2RlLT5zdGFja21hcHMsIGl0ZXItPnZh
bHVlWzBdLmxvY2F0aW9uc1swXSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlv
bi5raW5kKCkgPT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjYXB0
dXJlZExvY2F0aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBS
RUxFQVNFX0FTU0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2YoUmVnaXN0
ZXIpKSk7Ci0gICAgaW50MzJfdCBsb2NhbHNPZmZzZXQgPSBjYXB0dXJlZExvY2F0aW9uLmFkZGVu
ZCgpIC8gc2l6ZW9mKFJlZ2lzdGVyKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICBp
bnQgbG9jYWxzT2Zmc2V0ID0KKyAgICAgICAgb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAs
IHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCkgKyBncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7Cisg
ICAgCisgICAgaW50IHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0OworICAgIGlmIChzdGF0ZS52YXJh
cmdzU3BpbGxTbG90c1N0YWNrbWFwSUQgIT0gVUlOVF9NQVgpCisgICAgICAgIHZhcmFyZ3NTcGls
bFNsb3RzT2Zmc2V0ID0gb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLnZhcmFy
Z3NTcGlsbFNsb3RzU3RhY2ttYXBJRCk7CisgICAgZWxzZQorICAgICAgICB2YXJhcmdzU3BpbGxT
bG90c09mZnNldCA9IDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubV9pbmxp
bmVWYXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lID0gZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV0uaW5saW5lQ2Fs
bEZyYW1lOwpAQCAtMjkzLDE4ICszMzEsMTIgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNl
ZE9uU3RhY2tNYXBzKAogICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCdzIHBl
cmZlY3RseSBmYWlyIHRvIGp1c3QgYmxvdyBhd2F5IGFsbCBzdGF0ZSBhbmQgcmVzdG9yZSB0aGUK
ICAgICAgICAgLy8gSlMgSklUIHZpZXcgb2YgdGhlIHVuaXZlcnNlLgotICAgICAgICBjaGVja0pJ
VC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIGNoZWNrSklULm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KTsKLQogICAgICAgICBjaGVja0pJVC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGNoZWNrSklULm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVyID0gY2hlY2tK
SVQuY2FsbCgpOwogICAgICAgICBjaGVja0pJVC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CiAK
ICAgICAgICAgc3RhY2tPdmVyZmxvd0V4Y2VwdGlvbiA9IGNoZWNrSklULmxhYmVsKCk7Ci0gICAg
ICAgIGNoZWNrSklULm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVt
YmVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgY2hlY2tKSVQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOwotCiAgICAgICAgIGNoZWNrSklULm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgY2hlY2tK
SVQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXJGcm9tQ2FsbGVyRnJhbWUgPSBjaGVja0pJVC5jYWxsKCk7CkBAIC0zMzYsNyArMzY4LDcgQEAg
c3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgaWYg
KHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJI
YW5kbGluZyBPU1Igc3RhY2ttYXAgIyIsIGV4aXQubV9zdGFja21hcElELCAiIGZvciAiLCBleGl0
Lm1fY29kZU9yaWdpbiwgIlxuIik7CiAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmlu
ZChleGl0Lm1fc3RhY2ttYXBJRCk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChleGl0Lm1fc3RhY2ttYXBJRCk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRN
YXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM3NSw3ICs0MDcsNyBAQCBzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBp
bGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIEdldEJ5
SWQgc3RhY2ttYXAgIyIsIGdldEJ5SWQuc3RhY2ttYXBJRCgpLCAiXG4iKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2ttYXBJRCgp
KTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2tt
YXBJRCgpKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgewogICAg
ICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtNDEyLDcgKzQ0NCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRP
blN0YWNrTWFwcygKICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkp
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgUHV0QnlJZCBzdGFja21hcCAjIiwg
cHV0QnlJZC5zdGFja21hcElEKCksICJcbiIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
dGVyID0gcmVjb3JkTWFwLmZpbmQocHV0QnlJZC5zdGFja21hcElEKCkpOworICAgICAgICAgICAg
YXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQocHV0QnlJZC5zdGFja21hcElEKCkpOwogICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
SXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NDQs
MTQgKzQ3NiwxMyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0
YXRlLmNoZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgQ2hlY2tJbkRlc2NyaXB0
b3ImIGNoZWNrSW4gPSBzdGF0ZS5jaGVja0luc1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJIYW5kbGluZyBjaGVja0luIHN0YWNrbWFwICMiLCBjaGVja0luLnN0YWNrbWFwSUQoKSwg
IlxuIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChj
aGVja0luLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChjaGVja0luLnN0YWNrbWFwSUQoKSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNv
cmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4K
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ4MCw3ICs1MTEsNiBAQCBzdGF0aWMgdm9p
ZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5t
X2dlbmVyYXRvcnMuYXBwZW5kKENoZWNrSW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNsb3dDYWxsLCBi
ZWdpbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgCiAgICAgICAgIGV4
Y2VwdGlvblRhcmdldC5saW5rKCZzbG93UGF0aEpJVCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGV4Y2VwdGlvbkp1bXAgPSBzbG93UGF0aEpJVC5qdW1wKCk7CkBAIC01MDMsMjkgKzUz
MywxMSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmNoZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAgICAg
ICAgICAgZ2VuZXJhdGVDaGVja0luSUNGYXN0UGF0aCgKICAgICAgICAgICAgICAgICBzdGF0ZSwg
Y29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBzdGF0ZS5jaGVja0luc1tp
XSwKLSAgICAgICAgICAgICAgICBzaXplT2ZDaGVja0luKCkpOyAKKyAgICAgICAgICAgICAgICBz
aXplT2ZJbigpKTsgCiAgICAgICAgIH0gCiAgICAgfQogICAgIAotICAgIC8vIEhhbmRsaW5nIEpT
IGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0
aGUgUEMgaW4gTExWTQotICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3Qg
cHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgotICAgIFZlY3RvcjxK
U0NhbGw+IG9sZENhbGxzID0gc3RhdGUuanNDYWxsczsKLSAgICBzdGF0ZS5qc0NhbGxzLnJlc2l6
ZSgwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgSlNDYWxsJiBjYWxsID0gb2xkQ2FsbHNbaV07Ci0gICAgICAgIAotICAgICAg
ICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNh
bGwuc3RhY2ttYXBJRCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IGl0ZXItPnZhbHVlLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBKU0NhbGwgY29weSA9IGNh
bGw7Ci0gICAgICAgICAgICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZVtq
XS5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgICAgIHN0YXRlLmpzQ2FsbHMuYXBwZW5kKGNv
cHkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxz
LmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5kKCkpOworICAgIGFkanVzdENhbGxJQ3NGb3JTdGFj
a21hcHMoc3RhdGUuanNDYWxscywgcmVjb3JkTWFwKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykgewogICAgICAgICBKU0NhbGwmIGNhbGwg
PSBzdGF0ZS5qc0NhbGxzW2ldOwpAQCAtNTQ3LDkgKzU1OSwzMiBAQCBzdGF0aWMgdm9pZCBmaXhG
dW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZl
cik7CiAgICAgfQogICAgIAorICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUuanND
YWxsVmFyYXJnc2VzLCByZWNvcmRNYXApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHN0
YXRlLmpzQ2FsbFZhcmFyZ3Nlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgSlNDYWxsVmFyYXJn
cyYgY2FsbCA9IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nlc1tpXTsKKyAgICAgICAgCisgICAgICAgIEND
YWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7CisgICAgICAgIGNhbGwuZW1p
dChmYXN0UGF0aEpJVCwgZ3JhcGgsIHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0KTsKKyAgICAgICAg
CisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVk
RnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OworICAgICAgICBzaXplX3Qgc2l6
ZU9mSUMgPSBzaXplT2ZJQ0ZvcihjYWxsLm5vZGUoKSk7CisKKyAgICAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKHZtLCBmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZJQyk7CisgICAgICAg
IGlmICghbGlua0J1ZmZlci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkZhaWxl
ZCB0byBpbnNlcnQgaW5saW5lIGNhY2hlIGZvciB2YXJhcmdzIGNhbGwgKHNwZWNpZmljYWxseSwg
IiwgR3JhcGg6Om9wTmFtZShjYWxsLm5vZGUoKS0+b3AoKSksICIpIGJlY2F1c2Ugd2UgdGhvdWdo
dCB0aGUgc2l6ZSB3b3VsZCBiZSAiLCBzaXplT2ZJQywgIiBidXQgaXQgZW5kZWQgdXAgYmVpbmcg
IiwgZmFzdFBhdGhKSVQubV9hc3NlbWJsZXIuY29kZVNpemUoKSwgIiBwcmlvciB0byBjb21wYWN0
aW9uLlxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9U
OjpmaWxsTm9wcygKKyAgICAgICAgICAgIHN0YXJ0T2ZJQyArIGxpbmtCdWZmZXIuc2l6ZSgpLCBz
aXplT2ZJQyAtIGxpbmtCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGNhbGwubGlu
ayh2bSwgbGlua0J1ZmZlciwgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1
ZmZlci0+ZW50cnlwb2ludCgpKTsKKyAgICB9CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CiAKLSAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUu
aGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQpOworICAgIGF1dG8gaXRlciA9
IHJlY29yZE1hcC5maW5kKHN0YXRlLmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21h
cElEKTsKICAgICAvLyBJdCdzIHNvcnQgb2YgcmVtb3RlbHkgcG9zc2libGUgdGhhdCB3ZSB3b24n
dCBoYXZlIGFuIGluLWJhbmQgZXhjZXB0aW9uIGhhbmRsaW5nCiAgICAgLy8gcGF0aCwgZm9yIHNv
bWUga2luZHMgb2YgZnVuY3Rpb25zLgogICAgIGlmIChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExICsyOCwxNCBA
QAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVk
ZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBE
Rkc7CisKIC8vIFRoZSBkZWZhdWx0IHNpemVzIGFyZSB4ODYtNjQtc3BlY2lmaWMsIGFuZCB3ZXJl
IGZvdW5kIGVtcGlyaWNhbGx5LiBUaGV5IGhhdmUgdG8gY292ZXIgdGhlIHdvcnN0CiAvLyBwb3Nz
aWJsZSBjb21iaW5hdGlvbiBvZiByZWdpc3RlcnMgbGVhZGluZyB0byB0aGUgbGFyZ2VzdCBwb3Nz
aWJsZSBlbmNvZGluZyBvZiBlYWNoIGluc3RydWN0aW9uIGluCiAvLyB0aGUgSUMuCkBAIC02MSwy
NSArNjQsNzQgQEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQogI2VuZGlmCiB9CiAKLXNpemVfdCBz
aXplT2ZDaGVja0luKCkKK3NpemVfdCBzaXplT2ZDYWxsKCkKIHsKICNpZiBDUFUoQVJNNjQpCi0g
ICAgcmV0dXJuIDQ7CisgICAgcmV0dXJuIDU2OwogI2Vsc2UKLSAgICByZXR1cm4gNTsgCisgICAg
cmV0dXJuIDUzOwogI2VuZGlmCiB9CiAKK3NpemVfdCBzaXplT2ZDYWxsVmFyYXJncygpCit7Cisj
aWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiA1NjsKKyNlbHNlCisgICAgcmV0dXJuIDI3NTsKKyNl
bmRpZgorfQogCi1zaXplX3Qgc2l6ZU9mQ2FsbCgpCitzaXplX3Qgc2l6ZU9mQ2FsbEZvcndhcmRW
YXJhcmdzKCkKIHsKICNpZiBDUFUoQVJNNjQpCiAgICAgcmV0dXJuIDU2OwogI2Vsc2UKLSAgICBy
ZXR1cm4gNTM7CisgICAgcmV0dXJuIDM3MjsKKyNlbmRpZgorfQorCitzaXplX3Qgc2l6ZU9mQ29u
c3RydWN0VmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiA1NjsKKyNlbHNl
CisgICAgcmV0dXJuIDI1MzsKKyNlbmRpZgorfQorCitzaXplX3Qgc2l6ZU9mSW4oKQoreworI2lm
IENQVShBUk02NCkKKyAgICByZXR1cm4gNDsKKyNlbHNlCisgICAgcmV0dXJuIDU7IAogI2VuZGlm
CiB9CiAKK3NpemVfdCBzaXplT2ZJQ0ZvcihOb2RlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgcmV0dXJuIHNpemVPZkdldEJ5
SWQoKTsKKyAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIHJldHVybiBzaXplT2ZQdXRCeUlkKCk7
CisgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICByZXR1cm4gc2l6
ZU9mQ2FsbCgpOworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIHJldHVybiBzaXplT2ZD
YWxsVmFyYXJncygpOworICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICByZXR1
cm4gc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCk7CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgorICAgICAgICByZXR1cm4gc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpOworICAgIGNhc2UgSW46
CisgICAgICAgIHJldHVybiBzaXplT2ZJbigpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGlu
ZUNhY2hlU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW5saW5lQ2FjaGVTaXplLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEyICsyOCwy
MyBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgREZHIHsKK3N0cnVjdCBOb2RlOwor
fQorCituYW1lc3BhY2UgRlRMIHsKIAogc2l6ZV90IHNpemVPZkdldEJ5SWQoKTsKIHNpemVfdCBz
aXplT2ZQdXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mQ2FsbCgpOwotc2l6ZV90IHNpemVPZkNoZWNr
SW4oKTsKK3NpemVfdCBzaXplT2ZDYWxsVmFyYXJncygpOworc2l6ZV90IHNpemVPZkNhbGxGb3J3
YXJkVmFyYXJncygpOworc2l6ZV90IHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsKK3NpemVfdCBz
aXplT2ZJbigpOworCitzaXplX3Qgc2l6ZU9mSUNGb3IoREZHOjpOb2RlKik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJ
bnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTk5LDEwICs5OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50
UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUNiLCBmdW5jdGlvblR5
cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9u
X0VWd3NKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwK
KyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FWkpaWlosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwg
aW50UHRyLCBpbnQzMiwgaW50NjQsIGludDMyLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8o
Vl9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCkpIFwKICAgICBt
YWNybyhWX0pJVE9wZXJhdGlvbl9aLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyKSkgXAog
ICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0QsIGZ1bmN0aW9uVHlwZShpbnQzMiwgZG91YmxlVHlw
ZSkpIFwKLSAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKGludDMyLCBp
bnRQdHIsIGludFB0cikpCisgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlw
ZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKSBcCisgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUpa
LCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50NjQsIGludDMyKSkKICAgICAKIGNsYXNz
IEludHJpbnNpY1JlcG9zaXRvcnkgOiBwdWJsaWMgQ29tbW9uVmFsdWVzIHsKIHB1YmxpYzoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDE4MDIy
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNiArNDgsNyBAQCBKU0NhbGw6OkpTQ2FsbCh1bnNpZ25lZCBzdGFja21hcElE
LCBOb2RlCiAgICAgLCBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKICAgICAsIG1faW5zdHJ1Y3Rp
b25PZmZzZXQoMCkKIHsKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDYWxsIHx8IG5vZGUtPm9w
KCkgPT0gQ29uc3RydWN0KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCShyZXZpc2lvbiAx
ODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIAordXNpbmcgbmFtZXNwYWNlIERGRzsKKwogSlNDYWxsQmFzZTo6SlNDYWxsQmFz
ZSgpCiAgICAgOiBtX3R5cGUoQ2FsbExpbmtJbmZvOjpOb25lKQogICAgICwgbV9jYWxsTGlua0lu
Zm8obnVsbHB0cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFz
ZS5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIExpbmtCdWZmZXI7CiAKK25hbWVzcGFjZSBERkcgeworc3RydWN0IE5vZGU7
Cit9CisKIG5hbWVzcGFjZSBGVEwgewogCiBjbGFzcyBKU0NhbGxCYXNlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEpT
Q2FsbFZhcmFyZ3MuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVk
ZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJh
bWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3Bh
Y2UgREZHOworCitKU0NhbGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKCkKKyAgICA6IG1fc3RhY2tt
YXBJRChVSU5UX01BWCkKKyAgICAsIG1fbm9kZShudWxscHRyKQorICAgICwgbV9pbnN0cnVjdGlv
bk9mZnNldChVSU5UX01BWCkKK3sKK30KKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncyh1
bnNpZ25lZCBzdGFja21hcElELCBOb2RlKiBub2RlKQorICAgIDogbV9zdGFja21hcElEKHN0YWNr
bWFwSUQpCisgICAgLCBtX25vZGUobm9kZSkKKyAgICAsIG1fY2FsbEJhc2UoCisgICAgICAgIG5v
ZGUtPm9wKCkgPT0gQ29uc3RydWN0VmFyYXJncyA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFy
YXJncyA6IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MsCisgICAgICAgIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykKKyAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKK3sKKyAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBDYWxsVmFyYXJncyB8fCBub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJn
cyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MpOworfQorCit1bnNpZ25lZCBKU0Nh
bGxWYXJhcmdzOjpudW1TcGlsbFNsb3RzTmVlZGVkKCkKK3sKKyAgICByZXR1cm4gNDsKK30KKwor
dm9pZCBKU0NhbGxWYXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgaml0LCBHcmFwaCYgZ3JhcGgs
IGludDMyX3Qgc3BpbGxTbG90c09mZnNldCkKK3sKKyAgICAvLyBXZSBhcmUgcGFzc2VkIHRocmVl
IHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoKKyAgICAvLyAtIFRoZSBjYWxsZWUuCisgICAgLy8gLSBU
aGUgYXJndW1lbnRzIG9iamVjdC4KKyAgICAvLyAtIFRoZSAidGhpcyIgdmFsdWUsIGlmIGl0J3Mg
YSBjb25zdHJ1Y3RvciBjYWxsLgorICAgIAorICAgIGJvb2wgaXNDYWxsID0gbV9ub2RlLT5vcCgp
ICE9IENvbnN0cnVjdFZhcmFyZ3M7CisgICAgCisgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0g
bV9ub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKKyAgICAKKyAgICBHUFJSZWcgY2FsbGVlR1BSID0g
R1BSSW5mbzo6YXJndW1lbnRHUFIwOworICAgIAorICAgIEdQUlJlZyBhcmd1bWVudHNHUFIgPSBJ
bnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyB0aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBi
b29sIGFyZ3VtZW50c09uU3RhY2sgPSBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fbm9kZS0+
b3AoKSkgeworICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IEdQ
UkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAgdGhpc0dQUiA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAg
ICAgIHRoaXNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIGFyZ3VtZW50c09u
U3RhY2sgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6
CisgICAgICAgIGFyZ3VtZW50c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNvbnN0IHVuc2lnbmVkIGNhbGxl
ZVNwaWxsU2xvdCA9IDA7CisgICAgY29uc3QgdW5zaWduZWQgYXJndW1lbnRzU3BpbGxTbG90ID0g
MTsKKyAgICBjb25zdCB1bnNpZ25lZCB0aGlzU3BpbGxTbG90ID0gMjsKKyAgICBjb25zdCB1bnNp
Z25lZCBzdGFja1BvaW50ZXJTcGlsbFNsb3QgPSAzOworICAgIAorICAgIC8vIEdldCBzb21lIHNj
cmF0Y2ggcmVnaXN0ZXJzLgorICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgdXNl
ZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgdXNl
ZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygp
KTsKKyAgICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMuc2V0KGNhbGxlZUdQUik7CisgICAgaWYgKGFyZ3Vt
ZW50c0dQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChhcmd1
bWVudHNHUFIpOworICAgIGlmICh0aGlzR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHVz
ZWRSZWdpc3RlcnMuc2V0KHRoaXNHUFIpOworICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBh
bGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBhbGxv
Y2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgaWYgKGFyZ3VtZW50c09uU3RhY2spCisg
ICAgICAgIGFyZ3VtZW50c0dQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJzKCkpOwor
ICAgIAorICAgIGF1dG8gbG9hZEFyZ3VtZW50cyA9IFsmXSAoYm9vbCBjbG9iYmVyZWQpIHsKKyAg
ICAgICAgaWYgKGFyZ3VtZW50c09uU3RhY2spIHsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKGdyYXBoLm1hY2hpbmVBcmd1
bWVudHNSZWdpc3RlckZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c0dQUik7CisgICAgICAgIH0gZWxzZSBpZiAoY2xvYmJlcmVkKSB7CisgICAg
ICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6YWRkcmVz
c0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgYXJndW1lbnRzU3BpbGxTbG90KSwgYXJndW1lbnRzR1BS
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgYXV0byBjb21wdXRlVXNlZFN0YWNrID0g
WyZdIChHUFJSZWcgdGFyZ2V0R1BSLCB1bnNpZ25lZCBleHRyYSkgeworICAgICAgICBqaXQubW92
ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaml0LnN1
YlB0cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0YXJnZXRHUFIpOworICAg
ICAgICBpZiAoZXh0cmEpCisgICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGV4dHJhKSwgdGFyZ2V0R1BSKTsKKyAgICAgICAgaml0LnVyc2hpZnRQdHIoQ0Nh
bGxIZWxwZXJzOjpJbW0zMigzKSwgdGFyZ2V0R1BSKTsKKyAgICB9OworICAgIAorICAgIGF1dG8g
Y2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CisgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25Q
cmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgbV9leGNlcHRpb25zLmFwcGVuZChqaXQu
ZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ss
IEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CisgICAgfTsKKyAgICAKKyAgICBsb2Fk
QXJndW1lbnRzKGZhbHNlKTsKKworICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNl
dCArIHN0YWNrUG9pbnRlclNwaWxsU2xvdCkpOworICAgIAorICAgIC8vIEF0dGVtcHQgdGhlIGZv
cndhcmRpbmcgZmFzdCBwYXRoLCBpZiBpdCdzIGJlZW4gcmVxdWVzdGVkLgorICAgIENDYWxsSGVs
cGVyczo6SnVtcCBoYXZlQXJndW1lbnRzOworICAgIGlmIChtX25vZGUtPm9wKCkgPT0gQ2FsbEZv
cndhcmRWYXJhcmdzKSB7CisgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhp
cywgYXJndW1lbnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAgIC8vIEZJWE1FOiBkbyB0aGlzIG9w
dGltaXphdGlvbiBhdCB0aGUgSVIgbGV2ZWwuCisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGFyZ3VtZW50c0dQUikpOworICAgICAgICAK
KyAgICAgICAgY29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgMCk7CisgICAgICAgIGVtaXRT
ZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgCisg
ICAgICAgIGppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBoYXZl
QXJndW1lbnRzID0gaml0Lmp1bXAoKTsKKyAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAg
ICB9CisgICAgCisgICAgLy8gR290dGEgc3BpbGwgdGhlIGNhbGxlZSwgYXJndW1lbnRzLCBhbmQg
dGhpcyBiZWNhdXNlIHdlIHdpbGwgbmVlZCB0aGVtIGxhdGVyIGFuZCB3ZSB3aWxsIGhhdmUgc29t
ZQorICAgIC8vIGNhbGxzIHRoYXQgY2xvYmJlciB0aGVtLgorICAgIGppdC5zdG9yZTY0KGNhbGxl
ZUdQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVT
cGlsbFNsb3QpKTsKKyAgICBpZiAoIWFyZ3VtZW50c09uU3RhY2spCisgICAgICAgIGppdC5zdG9y
ZTY0KGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZz
ZXQgKyBhcmd1bWVudHNTcGlsbFNsb3QpKTsKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICBqaXQu
c3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNl
dCArIHRoaXNTcGlsbFNsb3QpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrID0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKKyAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpOworICAgIGNvbXB1dGVV
c2VkU3RhY2soc2NyYXRjaEdQUjEsIDApOworICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoZXh0cmFTdGFjayksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzR1BSLCBz
Y3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQpKTsKKyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4o
b3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncykpOworICAgIAorICAgIGppdC5tb3ZlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSk7CisgICAgY29tcHV0ZVVzZWRTdGFjayhz
Y3JhdGNoR1BSMiwgZXh0cmFTdGFjayk7CisgICAgbG9hZEFyZ3VtZW50cyh0cnVlKTsKKyAgICBl
bWl0U2V0VmFyYXJnc0ZyYW1lKGppdCwgc2NyYXRjaEdQUjEsIGZhbHNlLCBzY3JhdGNoR1BSMiwg
c2NyYXRjaEdQUjIpOworICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
LWV4dHJhU3RhY2spLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwg
YXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFy
Z09mZnNldCksIHNjcmF0Y2hHUFIxKTsKKyAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdp
c2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpKTsKKyAgICAKKyAgICBq
aXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjIpOworICAgIAorICAg
IGlmIChpc0NhbGwpCisgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9y
KHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSwgdGhpc0dQUik7CisgICAgaml0Lmxv
YWQ2NChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxlZVNw
aWxsU2xvdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBpZiAobV9ub2RlLT5vcCgpID09
IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5rKCZqaXQpOwor
ICAgIAorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIAorICAgIGlmIChpc0NhbGwpCisgICAgICAgIGppdC5zdG9yZTY0KHRo
aXNHUFIsIENDYWxsSGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAKKyAgICAv
LyBIZW5jZWZvcnRoIHdlIG1ha2UgdGhlIGNhbGwuIFRoZSBiYXNlIEZUTCBjYWxsIG1hY2hpbmVy
eSBleHBlY3RzIHRoZSBjYWxsZWUgaW4gcmVnVDAgYW5kIGZvciB0aGUKKyAgICAvLyBzdGFjayBm
cmFtZSB0byBhbHJlYWR5IGJlIHNldCB1cCwgd2hpY2ggaXQgaXMuCisgICAgaml0LnN0b3JlNjQo
R1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6Y2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OkNh
bGxlZSkpOworICAgIAorICAgIG1fY2FsbEJhc2UuZW1pdChqaXQpOworICAgIAorICAgIC8vIFVu
ZG8gdGhlIGRhbWFnZSB3ZSd2ZSBkb25lLgorICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgc3RhY2tQb2ludGVyU3BpbGxTbG90KSwgQ0Nh
bGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJn
czo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENvZGVMb2NhdGlvbkxhYmVs
IGV4Y2VwdGlvbkhhbmRsZXIpCit7CisgICAgbV9jYWxsQmFzZS5saW5rKHZtLCBsaW5rQnVmZmVy
KTsKKyAgICBsaW5rQnVmZmVyLmxpbmsobV9leGNlcHRpb25zLCBleGNlcHRpb25IYW5kbGVyKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJn
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxW
YXJhcmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEpTQ2FsbFZhcmFyZ3Nf
aAorI2RlZmluZSBGVExKU0NhbGxWYXJhcmdzX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTGlu
a0J1ZmZlcjsKKworbmFtZXNwYWNlIERGRyB7CitjbGFzcyBHcmFwaDsKK3N0cnVjdCBOb2RlOwor
fQorCituYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSlNDYWxsVmFyYXJncyB7CitwdWJsaWM6Cisg
ICAgSlNDYWxsVmFyYXJncygpOworICAgIEpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJ
RCwgREZHOjpOb2RlKik7CisgICAgCisgICAgREZHOjpOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1
cm4gbV9ub2RlOyB9CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIG51bVNwaWxsU2xvdHNOZWVk
ZWQoKTsKKyAgICAKKyAgICB2b2lkIGVtaXQoQ0NhbGxIZWxwZXJzJiwgREZHOjpHcmFwaCYsIGlu
dDMyX3Qgc3BpbGxTbG90c09mZnNldCk7CisgICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYs
IENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIpOworICAgIAorICAgIHVuc2lnbmVk
IHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7IH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yPChjb25zdCBKU0NhbGxWYXJhcmdzJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2luc3RydWN0aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9m
ZnNldDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsK
KyAgICBERkc6Ok5vZGUqIG1fbm9kZTsKKyAgICBKU0NhbGxCYXNlIG1fY2FsbEJhc2U7CisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBtX2V4Y2VwdGlvbnM7CisKK3B1YmxpYzoKKyAgICB1aW50
MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKU0NhbGxWYXJh
cmdzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDMw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0
LmNvbnN0SW50NjQobV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpLAogICAgICAgICAgICAg
bV9vdXQuaW50MzJaZXJvLCBjYXB0dXJlZEFsbG9jYSk7CiAgICAgICAgIAorICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGFueSBDYWxsVmFyYXJncyB0aGVuIHdlIG5lZSB0byBoYXZlIGEgc3BpbGwgc2xv
dCBmb3IgaXQuCisgICAgICAgIGJvb2wgaGFzVmFyYXJncyA9IGZhbHNlOworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogcHJlT3JkZXIpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSog
bm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBD
YWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgorICAgICAgICAgICAgICAgICAgICBoYXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGlmIChoYXNWYXJhcmdzKSB7CisgICAgICAgICAgICBMVmFsdWUgdmFyYXJnc1NwaWxs
U2xvdHMgPSBtX291dC5hbGxvY2EoCisgICAgICAgICAgICAgICAgYXJyYXlUeXBlKG1fb3V0Lmlu
dDY0LCBKU0NhbGxWYXJhcmdzOjpudW1TcGlsbFNsb3RzTmVlZGVkKCkpKTsKKyAgICAgICAgICAg
IG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEID0gbV9zdGFja21hcElEcysr
OworICAgICAgICAgICAgbV9vdXQuY2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5zdGFja21h
cEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xv
dHNTdGFja21hcElEKSwKKyAgICAgICAgICAgICAgICBtX291dC5pbnQzMlplcm8sIHZhcmFyZ3NT
cGlsbFNsb3RzKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBt
X291dC5wdHJUb0ludCgKICAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQuZnJhbWVBZGRyZXNz
SW50cmluc2ljKCksIG1fb3V0LmludDMyWmVybyksIG1fb3V0LmludFB0cik7CiAgICAgICAgIG1f
dGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7CkBAIC02ODMs
NiArNzA3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAg
ICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAg
ICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxlQ2FsbE9yQ29u
c3RydWN0VmFyYXJncygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZFZh
cmFyZ3M6CisgICAgICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3MoKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5JTkcpCiAgICAgICAgIGNhc2Ug
TmF0aXZlQ2FsbDoKICAgICAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CkBAIC0yMDY0LDggKzIw
OTYsMjIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGNoZWNrQXJndW1lbnRzTm90Q3JlYXRl
ZCgpOwogCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhbV9ub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQuYWRk
KG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpLCBtX291dC5jb25zdEludDMyKC0xKSkpOworICAgICAgICBpZiAobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgc2V0
SW50MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigKKyAgICAgICAgICAgICAg
ICAgICAgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpIC0gMSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbV9ub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBt
X25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdp
c3RlcjsKKyAgICAgICAgICAgIHNldEludDMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmFkZCgK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihh
cmd1bWVudENvdW50UmVnaXN0ZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMigtMSkpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRN
eUFyZ3VtZW50QnlWYWwoKQpAQCAtMjA3NywxMCArMjEyMywxNyBAQCBwcml2YXRlOgogICAgICAg
ICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAg
ICAgICAgIExWYWx1ZSBsaW1pdDsKLSAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAg
ICYmICFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAg
ICBsaW1pdCA9IG1fb3V0LmNvbnN0SW50MzIoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkgLSAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbGltaXQgPSBt
X291dC5zdWIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
LCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVy
ID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBsaW1p
dCA9IG1fb3V0LnN1YihtX291dC5sb2FkMzIocGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0
ZXIpKSwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzcGVj
dWxhdGUoVW5jb3VudGFibGUsIG5vVmFsdWUoKSwgMCwgbV9vdXQuYWJvdmVPckVxdWFsKGluZGV4
LCBsaW1pdCkpOwogICAgICAgICAKQEAgLTM3ODYsNiArMzgzOSw4NyBAQCBwcml2YXRlOgogICAg
ICAgICAKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAgICB9CisgICAgCisgICAgdm9pZCBj
b21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpCisgICAgeworICAgICAgICBMVmFsdWUganND
YWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAg
TFZhbHVlIGpzQXJndW1lbnRzID0gbnVsbHB0cjsKKyAgICAgICAgTFZhbHVlIHRoaXNBcmcgPSBu
dWxscHRyOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICAg
ICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgICAgIGpzQXJndW1lbnRzID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHRoaXNBcmcgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgorICAgICAgICAgICAgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgorICAgICAgICAgICAganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQg
PSBtX3N0YWNrbWFwSURzKys7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TFZhbHVlPiBhcmd1
bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFja21h
cElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihzaXplT2ZJ
Q0ZvcihtX25vZGUpKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY29uc3ROdWxsKG1fb3V0
LnJlZjgpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKDEgKyAh
IWpzQXJndW1lbnRzICsgISF0aGlzQXJnKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanND
YWxsZWUpOworICAgICAgICBpZiAoanNBcmd1bWVudHMpCisgICAgICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKGpzQXJndW1lbnRzKTsKKyAgICAgICAgaWYgKHRoaXNBcmcpCisgICAgICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKHRoaXNBcmcpOworICAgICAgICAKKyAgICAgICAgY2FsbFByZWZsaWdo
dCgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LnBh
dGNocG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVudHMpOworICAgICAgICBzZXRJbnN0cnVj
dGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1DQ2FsbENvbnYpOworICAgICAgICAKKyAg
ICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxWYXJhcmdzZXMuYXBwZW5kKEpTQ2FsbFZhcmFyZ3Moc3Rh
Y2ttYXBJRCwgbV9ub2RlKSk7CisgICAgICAgIAorICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCisgICAgeworICAgICAg
ICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAg
ICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlbmd0aCA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzKSwgbV9jYWxsRnJhbWUsIGpzQXJn
dW1lbnRzLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwg
Y2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAg
ICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBp
dCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3BlYyBjb21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5k
cG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAq
aW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAorICAgICAgICAvLyBwYXN0IHRoZSBzaXpp
bmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDE0NDgKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9v
dXQuYWRkKGxlbmd0aCwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICBzcGVjdWxhdGUoCisgICAg
ICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAg
IG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+
bGltaXQpKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAg
ICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlv
bkxhb2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBvZiBh
IFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCisgICAgICAg
IExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBtX291dC5sU2hyKAorICAgICAgICAgICAgbV9vdXQuc3Vi
KGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxG
cmFtZSksCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigzKSk7CisgICAgICAgIAorICAg
ICAgICB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZh
cmFyZ3MpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgIG1fb3V0LmNhc3RUb0ludDMyKG1hY2hp
bmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCisg
ICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11
bSkpOworICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUp1bXAoKQogICAgIHsKQEAgLTQwOTAsNyAr
NDIyNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMVmFsdWUg
Y2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJ
bnQ2NEludHJpbnNpYygpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0
YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkNoZWNrSW4oKSksCisgICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIo
c2l6ZU9mSW4oKSksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwg
bV9vdXQuY29uc3RJbnQzMigxKSwgY2VsbCk7CiAKICAgICAgICAgICAgICAgICBzZXRJbnN0cnVj
dGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CkBAIC02NDgz
LDcgKzY2MTcsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIEJ1ZmZlciBpcyBvdXQgb2Ygc3Bh
Y2UsIGZsdXNoIGl0LgogICAgICAgICBtX291dC5hcHBlbmRUbyhidWZmZXJJc0Z1bGwsIGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hX
cml0ZUJhcnJpZXJCdWZmZXIpLCBtX2NhbGxGcmFtZSwgYmFzZSwgTm9FeGNlcHRpb25zKTsKKyAg
ICAgICAgdm1DYWxsTm9FeGNlcHRpb25zKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdy
aXRlQmFycmllckJ1ZmZlciksIG1fY2FsbEZyYW1lLCBiYXNlKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwpAQCAtNjQ5Miw0NCArNjYyNiwyMyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAg
fQogCi0gICAgZW51bSBFeGNlcHRpb25DaGVja01vZGUgeyBOb0V4Y2VwdGlvbnMsIENoZWNrRXhj
ZXB0aW9ucyB9OwotICAgIAotICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBFeGNl
cHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNrRXhjZXB0aW9ucykKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBBcmdzLi4u
IGFyZ3MpCiAgICAgewogICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uKTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOwor
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJncy4uLik7Cisg
ICAgICAgIGNhbGxDaGVjaygpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBM
VmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEV4Y2VwdGlvbkNoZWNr
TW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdo
dCgpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSk7
Ci0gICAgICAgIGNhbGxDaGVjayhtb2RlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUg
YXJnMiwgRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0gICAgewot
ICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5j
YWxsKGZ1bmN0aW9uLCBhcmcxLCBhcmcyKTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5j
dGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgRXhjZXB0aW9uQ2hl
Y2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0gICAgewotICAgICAgICBjYWxsUHJlZmxp
Z2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcx
LCBhcmcyLCBhcmczKTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVl
IGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIEV4Y2VwdGlvbkNo
ZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25zKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIHZtQ2FsbE5vRXhjZXB0aW9ucyhMVmFsdWUgZnVuY3Rp
b24sIEFyZ3MuLi4gYXJncykKICAgICB7CiAgICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwoZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMs
IGFyZzQpOwotICAgICAgICBjYWxsQ2hlY2sobW9kZSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmdzLi4uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9Ci0gICAgCisKICAgICB2b2lkIGNhbGxQcmVmbGlnaHQoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQogICAgIHsKICAgICAgICAgbV9vdXQuc3RvcmUzMigKQEAgLTY1NDMsMTEgKzY2NTYsOCBA
QCBwcml2YXRlOgogICAgICAgICBjYWxsUHJlZmxpZ2h0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjYWxsQ2hlY2soRXhjZXB0aW9uQ2hlY2tNb2RlIG1v
ZGUgPSBDaGVja0V4Y2VwdGlvbnMpCisgICAgdm9pZCBjYWxsQ2hlY2soKQogICAgIHsKLSAgICAg
ICAgaWYgKG1vZGUgPT0gTm9FeGNlcHRpb25zKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKICAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZUV4Y2VwdGlvbkZ1enooKSkKICAgICAgICAg
ICAgIG1fb3V0LmNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enopKTsK
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlz
aW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzU3LDEzICszNTcsOCBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGNh
bGwoTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIGJ1
aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IpOyB9CiAgICAgTFZhbHVlIGNhbGwo
TFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbik7
IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxKSB7IHJldHVy
biBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSk7IH0KLSAgICBMVmFsdWUgY2Fs
bChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikgeyByZXR1cm4gYnVp
bGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIpOyB9Ci0gICAgTFZhbHVlIGNh
bGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmcz
KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJn
Myk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFs
dWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0KSB7IHJldHVybiBidWlsZENhbGwobV9i
dWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7IH0KLSAgICBMVmFsdWUg
Y2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFy
ZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRl
ciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOyB9Ci0gICAgTFZhbHVl
IGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBh
cmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2KSB7IHJldHVybiBidWls
ZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwg
YXJnNik7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBM
VmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVl
IGFyZzYsIExWYWx1ZSBhcmc3KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlv
biwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyk7IH0KLSAgICBMVmFs
dWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVl
IGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1ZSBhcmc3
LCBMVmFsdWUgYXJnOCkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFy
ZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzgpOyB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24s
IExWYWx1ZSBhcmcxLCBBcmdzLi4uIGFyZ3MpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIs
IGZ1bmN0aW9uLCBhcmcxLCBhcmdzLi4uKTsgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0aW9uVHlwZT4KICAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5jdGlv
bikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAx
ODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDksNiArNDksMTAgQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICAs
IG1vZHVsZSgwKQogICAgICwgZnVuY3Rpb24oMCkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDAp
CisgICAgLCBoYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRChVSU5UX01BWCkK
KyAgICAsIGhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBjYXB0dXJl
ZFN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQo
VUlOVF9NQVgpCiAgICAgLCB1bndpbmREYXRhU2VjdGlvbigwKQogICAgICwgdW53aW5kRGF0YVNl
Y3Rpb25TaXplKDApCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShy
ZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUu
aCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExKU0NhbGwuaCIK
KyNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgi
CiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAg
LTcxLDEwICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaGFuZGxlU3RhY2tPdmVyZmxv
d0V4Y2VwdGlvblN0YWNrbWFwSUQ7CiAgICAgdW5zaWduZWQgaGFuZGxlRXhjZXB0aW9uU3RhY2tt
YXBJRDsKICAgICB1bnNpZ25lZCBjYXB0dXJlZFN0YWNrbWFwSUQ7CisgICAgdW5zaWduZWQgdmFy
YXJnc1NwaWxsU2xvdHNTdGFja21hcElEOwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVz
Y3JpcHRvcj4gZ2V0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9y
PiBwdXRCeUlkczsKICAgICBTZWdtZW50ZWRWZWN0b3I8Q2hlY2tJbkRlc2NyaXB0b3I+IGNoZWNr
SW5zOwogICAgIFZlY3RvcjxKU0NhbGw+IGpzQ2FsbHM7CisgICAgVmVjdG9yPEpTQ2FsbFZhcmFy
Z3M+IGpzQ2FsbFZhcmFyZ3NlczsKICAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1l
czsKICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKICAgICB2b2lkKiB1bndp
bmREYXRhU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM0LDcgKzEzNCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBy
ZXR1cm4gaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNh
bGxlclNjb3BlQ2hhaW4pOwogfQogCi11bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1N0YWNrKiBzdGFjaywgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2ln
bmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3Vuc2ln
bmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYXJndW1lbnRz
LCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAg
ICAgaWYgKCFhcmd1bWVudHMpCkBAIC0xNTYsNiArMTU2LDEzIEBAIHVuc2lnbmVkIHNpemVGcmFt
ZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiAKICAgICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IDA7CiAg
ICAgCisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwordW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJn
cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTdGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1lbnRz
LCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQp
Cit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc2l6ZU9mVmFyYXJncyhjYWxsRnJhbWUsIGFyZ3Vt
ZW50cywgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIAogICAgIENhbGxGcmFtZSogY2FsbGVlRnJh
bWUgPSBjYWxsZWVGcmFtZUZvclZhcmFyZ3MoY2FsbEZyYW1lLCBudW1Vc2VkU3RhY2tTbG90cywg
bGVuZ3RoICsgMSk7CiAgICAgaWYgKGxlbmd0aCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzIHx8
ICFzdGFjay0+ZW5zdXJlQ2FwYWNpdHlGb3IoY2FsbGVlRnJhbWUtPnJlZ2lzdGVycygpKSkgewog
ICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9u
IDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0g
cGFkZGVkQ2FsbGVlRnJhbWVPZmZzZXQpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIHNpemVPZlZh
cmFyZ3MoQ2FsbEZyYW1lKiBleGVjLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RW
YXJBcmdPZmZzZXQpOwogICAgIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1l
KiBleGVjLCBKU1N0YWNrKiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFj
a1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdm9pZCBsb2FkVmFyYXJn
cyhDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0
LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAg
IHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUq
IGV4ZWNDYWxsZWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNl
dCwgdWludDMyX3QgbGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTQ5LDcgKzE0OSwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFt
ZShDYWxsCiAKICAgICAgICAgbV9mcmFtZS5tX2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAg
ICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAg
bV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
aW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpOwogICAgICAgICBtX2ZyYW1lLm1f
Ynl0ZWNvZGVPZmZzZXQgPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAx
ODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEyLDE1ICsyMTIsMjcgQEAgdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KAogICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCi1B
c3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2so
RXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQpCitBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQsIEV4Y2Vw
dGlvbkp1bXBXaWR0aCB3aWR0aCkKIHsKICAgICBjYWxsRXhjZXB0aW9uRnV6eigpOworCisgICAg
aWYgKHdpZHRoID09IEZhckp1bXBXaWR0aCkKKyAgICAgICAga2luZCA9IChraW5kID09IE5vcm1h
bEV4Y2VwdGlvbkNoZWNrID8gSW52ZXJ0ZWRFeGNlcHRpb25DaGVjayA6IE5vcm1hbEV4Y2VwdGlv
bkNoZWNrKTsKICAgICAKKyAgICBKdW1wIHJlc3VsdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblpl
cm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsK
KyAgICByZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/
IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9u
KCkpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmV0dXJuIGJyYW5jaDMyKGtpbmQg
PT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIHJlc3VsdCA9IGJyYW5jaDMyKGtpbmQgPT0gTm9y
bWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCisgICAgCisgICAgaWYgKHdpZHRoID09IE5vcm1hbEp1
bXBXaWR0aCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1w
IHJlYWxKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOworICAgIHJlc3VsdC5saW5rKHRoaXMpOworICAg
IAorICAgIHJldHVybiByZWFsSnVtcC5tX2p1bXA7CiB9CiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJz
OjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRy
dXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4MDIyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzM4LDYgKzMzOCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAg
IHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
cikKICAgICB7CisgICAgICAgIC8vIE5CLiBJdCdzIHRlbXB0aW5nIG9uIHNvbWUgYXJjaGl0ZWN0
dXJlcyB0byBzb21ldGltZXMgdXNlIGFuIG9mZnNldCBmcm9tIHRoZSBzdGFjaworICAgICAgICAv
LyByZWdpc3RlciBiZWNhdXNlIGZvciBzb21lIG9mZnNldHMgdGhhdCB3aWxsIGVuY29kZSB0byBh
IHNtYWxsZXIgaW5zdHJ1Y3Rpb24uIEJ1dCB3ZQorICAgICAgICAvLyBjYW5ub3QgZG8gdGhpcy4g
V2UgdXNlIHRoaXMgaW4gcGxhY2VzIHdoZXJlIHRoZSBzdGFjayBwb2ludGVyIGhhcyBiZWVuIG1v
dmVkIHRvIHNvbWUKKyAgICAgICAgLy8gdW5wcmVkaWN0YWJsZSBsb2NhdGlvbi4KICAgICAgICAg
QVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQpAQCAtMzY3LDM5ICszNzEsMzkgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAg
ICBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBj
YWxsZWVGcmFtZVNsb3QoaW50IHNsb3QpCiAgICAgewogICAgICAgICBBU1NFUlQoc2xvdCA+PSBK
U1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSk7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVv
ZihSZWdpc3RlcikgKiAoc2xvdCAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSk7Cisg
ICAgICAgIHJldHVybiBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0
ZXIpICogKHNsb3QgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpOwogICAgIH0KIAog
ICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBBZGRyZXNz
IGNhbGxlZUFyZ3VtZW50U2xvdChpbnQgYXJndW1lbnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2Fs
bGVlQXJndW1lbnRTbG90KGludCBhcmd1bWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxs
ZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgp
KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkKKyAg
ICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVRhZ1Nsb3QoaW50IHNsb3QpCiAgICAgewogICAg
ICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KHNsb3QpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsK
ICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoaW50IHNsb3QpCisg
ICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKICAgICB7
CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNldChQYXlsb2Fk
T2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50VGFnU2xvdChpbnQg
YXJndW1lbnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRUYWdTbG90KGludCBh
cmd1bWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVBcmd1bWVudFNsb3QoYXJndW1l
bnQpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUFy
Z3VtZW50UGF5bG9hZFNsb3QoaW50IGFyZ3VtZW50KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxl
ZUFyZ3VtZW50UGF5bG9hZFNsb3QoaW50IGFyZ3VtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJu
IGNhbGxlZUFyZ3VtZW50U2xvdChhcmd1bWVudCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsK
ICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQorICAgIHN0YXRp
YyBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVyRnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGNhbGxlZUZyYW1lU2xvdCgwKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKSk7CiAgICAgfQpAQCAtNDA5LDIxICs0MTMsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYnJhbmNoOChCZWxvdywgQWRkcmVzcyhjZWxsUmVnLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
R1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcs
IEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCisgICAgc3RhdGlj
IEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVn
LCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IElu
dmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJl
c2VydmU1ID0gSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0g
R1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZl
MyAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDApCisgICAg
ICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUyICE9IEdQUklu
Zm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTQgIT0g
R1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmU1ICE9IEdQUkluZm86OnJlZ1QwKQogICAgICAgICAg
ICAgcmV0dXJuIEdQUkluZm86OnJlZ1QwOwogCi0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BS
SW5mbzo6cmVnVDEgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMyAh
PSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDEpCisgICAgICAg
IGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmUyICE9IEdQUkluZm86
OnJlZ1QxICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTQgIT0gR1BS
SW5mbzo6cmVnVDEgJiYgcHJlc2VydmU1ICE9IEdQUkluZm86OnJlZ1QxKQogICAgICAgICAgICAg
cmV0dXJuIEdQUkluZm86OnJlZ1QxOwogCi0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5m
bzo6cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZlMyAhPSBH
UFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDIpCisgICAgICAgIGlm
IChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJl
Z1QyICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5m
bzo6cmVnVDIgJiYgcHJlc2VydmU1ICE9IEdQUkluZm86OnJlZ1QyKQogICAgICAgICAgICAgcmV0
dXJuIEdQUkluZm86OnJlZ1QyOwogCi0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6
cmVnVDMgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QzICYmIHByZXNlcnZlMyAhPSBHUFJJ
bmZvOjpyZWdUMyAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDMpCisgICAgICAgIGlmIChw
cmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDMgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1Qz
ICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMyAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6
cmVnVDMgJiYgcHJlc2VydmU1ICE9IEdQUkluZm86OnJlZ1QzKQogICAgICAgICAgICAgcmV0dXJu
IEdQUkluZm86OnJlZ1QzOwogCi0gICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUNDsKKyAgICAg
ICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUNCAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5m
bzo6cmVnVDQgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1Q0ICYmIHByZXNlcnZlNCAhPSBH
UFJJbmZvOjpyZWdUNCAmJiBwcmVzZXJ2ZTUgIT0gR1BSSW5mbzo6cmVnVDQpCisgICAgICAgICAg
ICByZXR1cm4gR1BSSW5mbzo6cmVnVDQ7CisKKyAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1Q1
OwogICAgIH0KIAogICAgIC8vIEFkZCBhIGRlYnVnIGNhbGwuIFRoaXMgY2FsbCBoYXMgbm8gZWZm
ZWN0IG9uIEpJVCBjb2RlIGV4ZWN1dGlvbiBzdGF0ZS4KQEAgLTU3MSw3ICs1NzgsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjYWxsRXhjZXB0aW9uRnV6eigpOwogICAgIAogICAgIGVudW0gRXhjZXB0
aW9uQ2hlY2tLaW5kIHsgTm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hl
Y2sgfTsKLSAgICBKdW1wIGVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2lu
ZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKKyAgICBlbnVtIEV4Y2VwdGlvbkp1bXBXaWR0aCB7
IE5vcm1hbEp1bXBXaWR0aCwgRmFySnVtcFdpZHRoIH07CisgICAgSnVtcCBlbWl0RXhjZXB0aW9u
Q2hlY2soCisgICAgICAgIEV4Y2VwdGlvbkNoZWNrS2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNr
LCBFeGNlcHRpb25KdW1wV2lkdGggPSBOb3JtYWxKdW1wV2lkdGgpOwogCiAjaWYgRU5BQkxFKFNB
TVBMSU5HX0NPVU5URVJTKQogICAgIHN0YXRpYyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxl
ciYgaml0LCBBYnN0cmFjdFNhbXBsaW5nQ291bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1l
bnQgPSAxKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShy
ZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yODksNiArMjg5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzMpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBU
cnVzdGVkSW1tMzIgYXJnMykKKyAgICB7CisgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwor
ICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcy
KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgIH0KKwogICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3Vt
ZW50cygpOwpAQCAtMjk4LDYgKzMwNywyOSBAQCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmczKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZElt
bTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVzdGVkSW1tMzIgYXJnNSkKKyAgICB7CisgICAgICAg
IHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMp
OworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVu
dChhcmc1KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMs
IFRydXN0ZWRJbW0zMiBhcmc0LCBHUFJSZWcgYXJnNSwgVHJ1c3RlZEltbTMyIGFyZzYpCisgICAg
eworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzEpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmczKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOworICAgICAgICBhZGRD
YWxsQXJndW1lbnQoYXJnNSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc2KTsKKyAgICB9
CisKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAg
ICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CkBAIC0xNzc3LDYgKzE4MDksMTUgQEAgcHVibGljOgog
ICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIg
YXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgc2V0
dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50
R1BSND4oYXJnMiwgYXJnNCk7CisgICAgICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICAgICAgbW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAg
ICBtb3ZlKGFyZzUsIEdQUkluZm86OmFyZ3VtZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCiAg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQs
IFRydXN0ZWRJbW0zMiBhcmc1KQogICAgIHsKICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxH
UFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMz4oYXJnMiwgYXJnMyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkocmV2aXNpb24gMTgwMjI3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwMiw2ICs0MDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5W
YWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBH
UFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAg
c3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3Rl
cnM6OmVzaTsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50
R1BSID0gWDg2UmVnaXN0ZXJzOjpyMTA7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBv
aW50U2NyYXRjaFJlZ2lzdGVyID0gTWFjcm9Bc3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3RlcjsKIAog
ICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKQEAgLTU3Nyw2ICs1
NzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9
IEFSTTY0UmVnaXN0ZXJzOjp4MDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJl
dHVyblZhbHVlR1BSMiA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsgLy8gcmVnVDEKICAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4
MjsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0g
QVJNNjRSZWdpc3RlcnM6Ong4OwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcGF0Y2hwb2ludFNj
cmF0Y2hSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDA7CiAKICAgICAvLyBHUFJSZWcgbWFw
cGluZyBpcyBkaXJlY3QsIHRoZSBtYWNoaW5lIHJlZ3NpdGVyIG51bWJlcnMgY2FuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NCwxMSArNDY0LDYg
QEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIERGRzo6Q2FuSW5saW5lOgot
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQgPSB0cnVlOwotICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVl
OwotICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERG
Rzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoT3Bjb2Rl
SUQsIEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB2
b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwot
ICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiopOworICAg
ICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiosIENhbGxMaW5r
SW5mbyopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0
KEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qCiAgICAgY29tcGlsZU9wQ2FsbChv
cF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewogICAgIGludCB0aGlzVmFsdWUg
PSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFyZ3VtZW50cyA9IGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE1MCw2ICsxNTAsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVT
ZXR1cFZhcmFyZ3NGcmFtZShJbnN0cgogICAgIGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgZW5k
LmxpbmsodGhpcyk7CiAKKyAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAgIGxv
YWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3Qg
PSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRlZCA9
IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmsodGhp
cyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBub3RC
aWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAgICAg
ZW1pdExvYWQodGhpc1ZhbHVlLCByZWdUMiwgcmVnVDApOwogICAgIHN0b3JlMzIocmVnVDAsIEFk
ZHJlc3MocmVnVDEsIFBheWxvYWRPZmZzZXQgKyAoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKSk7CkBAIC0xOTgsNiAr
MjA4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydQogCiB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKKyAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CiAgICAgaW50IGNhbGxlZSA9
IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CkBAIC0y
MTQsNyArMjI1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQog
ICAgICovCiAgICAgCiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKLSAgICAgICAgY29tcGlsZVNldHVwVmFyYXJn
c0ZyYW1lKGluc3RydWN0aW9uKTsKKyAgICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKGlu
c3RydWN0aW9uLCBpbmZvKTsKICAgICBlbHNlIHsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAtMjM5LDggKzI1MCw2IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOwogICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpT
U3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdP
ZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKIAotICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKLQogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0aW9u
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSklUOjplbWl0UHV0
Q2FsbFJlc3VsdChJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKLXZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQordm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBpbnQgdGhpc1ZhbHVl
ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CkBAIC05MCw2ICs5MCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZVNl
dHVwVmFyYXJnc0ZyYW1lKEluc3RyCiAgICAgaWYgKGNhbk9wdGltaXplKQogICAgICAgICBlbmQu
bGluayh0aGlzKTsKICAgICAKKyAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAg
IGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dl
c3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRl
ZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmso
dGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBu
b3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJlZ1QwKTsKICAgICBzdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwpAQCAtMTM0LDYgKzE0NCw4IEBA
IHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKIAogdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOworCiAgICAgaW50IGNhbGxlZSA9IGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CkBAIC0xNTIsNyAr
MTY0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIENP
TVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9j
YWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVf
bGVuZ3RoKTsKICAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9Q
Q09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBjYWxsX2FuZF9jb25zdHJ1Y3RfdmFy
YXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCi0gICAg
ICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbik7CisgICAgICAgIGNvbXBp
bGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVjdGlvbiwgaW5mbyk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE3Niw4ICsx
ODgsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxs
ZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbygpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkg
ewogICAgICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5Miw2ICs0OTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHVzaF9u
YW1lX3Njb3BlKEluc3RydQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIFJlZXN0YWJsaXNoIHRhZ3MKKyAgICBtb3Zl
KFRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW02NChUYWdNYXNrKSwgdGFnTWFza1JlZ2lzdGVyKTsKKyAgICAKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2FkNjQoQWRkcmVzcyhy
ZWdUMywgVk06OmNhbGxGcmFtZUZvclRocm93T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7
CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjp2bUVudHJ5RnJhbWVGb3JUaHJvd09mZnNl
dCgpKSwgcmVnVDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgdHlwZWRlZiBp
bnQ2NF90IEpJVF9PUEVSQVRJT04oKlFfSklUT3BlcgogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVS
QVRJT04gKCpaX0pJVE9wZXJhdGlvbl9EKShkb3VibGUpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9P
UEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgaW50MzJf
dCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OwordHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FSlopKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKIHR5cGVkZWYgaW50MzJfdCBKSVRf
T1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRUpaWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNf
SklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVm
IHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlKTsKQEAgLTE4OSw2ICsxOTAsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJB
VElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0aW9uX0VWd3NKKShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVk
SlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0Va
KShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fRVpKKShFeGVjU3RhdGUqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaSlpaWikoRXhlY1N0
YXRlKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QsIGludDMyX3Qp
OwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNT
dGF0ZSosIFZNKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9u
X0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRP
cGVyYXRpb25fWikoaW50MzJfdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMSwxMSArMTAxLDMxIEBAIHZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0Nh
bGwKIAogdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2Ny
YXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQs
IENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKQogewotICAgIGVtaXRTZXR1cFZhcmFy
Z3NGcmFtZUZhc3RDYXNlKAotICAgICAgICBqaXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQ
UjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywKLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwg
RGF0YUZvcm1hdEludDMyKSwKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXQoMCkpLAotICAgICAgICBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwor
ICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgbnVtVXNlZFNsb3RzR1BSLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBudWxscHRyLCBmaXJzdFZhckFy
Z09mZnNldCwgc2xvd0Nhc2UpOworfQorCit2b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RD
YXNlKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2Ny
YXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIEND
YWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKQoreworICAgIFZhbHVlUmVjb3ZlcnkgYXJn
dW1lbnRDb3VudFJlY292ZXJ5OworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdEFyZ3VtZW50UmVn
OworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZh
bHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVj
b3Zlcnk6OmNvbnN0YW50KAorICAgICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgPiAxKQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJl
ZyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVy
KDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVl
UmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
cihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgZmly
c3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0
KDApKTsKKyAgICB9CisgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1V
c2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGFyZ3Vt
ZW50Q291bnRSZWNvdmVyeSwgZmlyc3RBcmd1bWVudFJlZywgZmlyc3RWYXJBcmdPZmZzZXQsIHNs
b3dDYXNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDkgQEAgdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShD
Q2FsbAogLy8gVmFyaWFudCB0aGF0IGFzc3VtZXMgbm9ybWFsIHN0YWNrIGZyYW1lLgogdm9pZCBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgbnVtVXNl
ZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVn
IHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJzdFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCYgc2xvd0Nhc2UpOwogCisvLyBWYXJpYW50IGZvciBwb3RlbnRpYWxseSBpbmxpbmVk
IHN0YWNrIGZyYW1lcy4KK3ZvaWQgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJS
ZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiwgdW5z
aWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNl
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xODQ1LDYgKzE4
NDUsMTAgQEAgX2xsaW50X29wX3RvX3ByaW1pdGl2ZToKIAogCiBfbGxpbnRfb3BfY2F0Y2g6Cisg
ICAgIyBSZWVzdGFibGlzaCB0YWdzCisgICAgbW92ZSB0YWdUeXBlTnVtYmVyVmFsdWUsIHRhZ1R5
cGVOdW1iZXIKKyAgICBtb3ZlIHRhZ01hc2tWYWx1ZSwgdGFnTWFzaworCiAgICAgIyBUaGlzIGlz
IHdoZXJlIHdlIGVuZCB1cCBmcm9tIHRoZSBKSVQncyB0aHJvdyB0cmFtcG9saW5lIChiZWNhdXNl
IHRoZQogICAgICMgbWFjaGluZSBjb2RlIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgc2V0IHRvIF9s
bGludF9vcF9jYXRjaCksIGFuZCBmcm9tCiAgICAgIyB0aGUgaW50ZXJwcmV0ZXIncyB0aHJvdyB0
cmFtcG9saW5lIChzZWUgX2xsaW50X3Rocm93X3RyYW1wb2xpbmUpLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2
aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDggQEAgaWYgSlNWQUxV
RTY0CiAgICAgY29uc3QgUEIgPSB0NgogICAgIGNvbnN0IHRhZ1R5cGVOdW1iZXIgPSBjc3IxCiAg
ICAgY29uc3QgdGFnTWFzayA9IGNzcjIKKyAgICBjb25zdCB0YWdUeXBlTnVtYmVyVmFsdWUgPSAw
eGZmZmYwMDAwMDAwMDAwMDAKKyAgICBjb25zdCB0YWdNYXNrVmFsdWUgPSAweGZmZmYwMDAwMDAw
MDAwMDIKICAgICAKICAgICBtYWNybyBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24ob2Zmc2V0LCBkZXN0
KQogICAgICAgICBsb2FkaXMgb2Zmc2V0ICogOFtQQiwgUEMsIDhdLCBkZXN0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gMTgwMjI3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBzdGF0aWMgQXJndW1l
bnRzKiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSA9IE5vcm1hbEFyZ3VtZW50c0Ny
ZWF0aW9uTW9kZSkKICAgICB7Ci0gICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFwLCBvZmZzZXRPZklubGluZVJl
Z2lzdGVyQXJyYXkoKSArIHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhpbmxpbmVDYWxsRnJhbWUp
KSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJndW1lbnRzPih2bS5oZWFwLCBvZmZzZXRPZklu
bGluZVJlZ2lzdGVyQXJyYXkoKSArIHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhjYWxsRnJhbWUs
IGlubGluZUNhbGxGcmFtZSkpKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKICAgICAgICAgYXJndW1l
bnRzLT5maW5pc2hDcmVhdGlvbihjYWxsRnJhbWUsIGlubGluZUNhbGxGcmFtZSwgbW9kZSk7CiAg
ICAgICAgIHJldHVybiBhcmd1bWVudHM7CiAgICAgfQpAQCAtMTI0LDcgKzEyNCwxNSBAQCBwcml2
YXRlOgogICAgIHZvaWQgY3JlYXRlU3RyaWN0TW9kZUNhbGxlZUlmTmVjZXNzYXJ5KEV4ZWNTdGF0
ZSopOwogCiAgICAgc3RhdGljIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICog
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVy
QXJyYXlTaXplSW5CeXRlcyhJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkgeyByZXR1
cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHMuc2l6ZSgpIC0gMSk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXpl
SW5CeXRlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCisgICAgeworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZy
YW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51
bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAg
IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDEpOworICAgIH0KICAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90KTsKICAg
ICBib29sIHRyeVNldEFyZ3VtZW50KFZNJiwgc2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlKTsKICAg
ICBKU1ZhbHVlIHRyeUdldEFyZ3VtZW50KHNpemVfdCBhcmd1bWVudCk7CkBAIC0zNDAsMTEgKzM0
OCwxNSBAQCBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgbV9v
dmVycm9kZUNhbGxlZSA9IGZhbHNlOwogICAgIG1fb3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsKICAg
ICBtX2lzU3RyaWN0TW9kZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVDYWxs
RnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5pc1N0cmljdE1vZGUoKTsKLQorICAgIAorICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAg
ICAgIG1fbnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwor
ICAgIG1fbnVtQXJndW1lbnRzLS07CisgICAgCiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2Fz
ZSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1vZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMg
PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICAKICAgICAg
ICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1l
bnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5v
ZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRG
b3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpA
QCAtMzYxLDcgKzM3Myw2IEBAIGlubGluZSB2b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24o
Q2EKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2Rl
OiB7Ci0gICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpIC0gMTsKICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBp
bnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52
aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVp
bnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdp
c3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEpLm9mZnNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxMSw2ICsyMTEsOCBA
QCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICAvKiBmcm9tIHN1cGVyIGxv
bmcgY29tcGlsZXMgdGhhdCB0YWtlIGEgbG90IG9mIG1lbW9yeS4gKi9cCiAgICAgdih1bnNpZ25l
ZCwgbWF4aW11bUlubGluaW5nQ2FsbGVyU2l6ZSwgMTAwMDApIFwKICAgICBcCisgICAgdih1bnNp
Z25lZCwgbWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZywgMTAwKSBcCisgICAgXAogICAgIHYoYm9v
bCwgZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcsIHRydWUpIFwKICAgICB2KGJvb2wsIGVu
YWJsZVBvbHl2YXJpYW50QnlJZElubGluaW5nLCB0cnVlKSBcCiAgICAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1pbmxpbmUtc21h
bGxlci1Gb28uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1pbmxpbmUtc21hbGxlci1Gb28uanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdz
LWlubGluZS1zbWFsbGVyLUZvby5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACitm
dW5jdGlvbiBGb28oYSwgYikgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5wdXNoKGFyZ3Vt
ZW50c1tpXSk7CisgICAgdGhpcy5mID0gYXJyYXk7Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSkg
eworICAgIHJldHVybiBuZXcgRm9vKC4uLmFycmF5KTsKK30KKworbm9JbmxpbmUoYmFyKTsKKwor
ZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3Ro
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6
ICIgKyBhICsgIiB2ZXJzdXMgIiArIGI7CisgICAgZm9yICh2YXIgaSA9IGEubGVuZ3RoOyBpLS07
KSB7CisgICAgICAgIGlmIChhW2ldICE9IGJbaV0pCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYSArICIgdmVy
c3VzICIgKyBiOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIHZhciBl
eHBlY3RlZCA9IGFycmF5OworICAgIHZhciBhY3R1YWwgPSBiYXIoYXJyYXkpLmY7CisgICAgY2hl
Y2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBp
ICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNoKGopOworICAgIHRlc3QoYXJyYXkpOworfQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJh
cmdzLWlubGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLWlubGluZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY29uc3RydWN0LXZhcmFyZ3MtaW5saW5lLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKK2Z1bmN0aW9uIEZvbyhhLCBiKSB7Cisg
ICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVu
Z3RoOyArK2kpCisgICAgICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICB0aGlzLmYg
PSB7YTphLCBiOmIsIGM6YXJyYXl9OworfQorCitmdW5jdGlvbiBiYXIoYXJyYXkpIHsKKyAgICBy
ZXR1cm4gbmV3IEZvbyguLi5hcnJheSk7Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9u
IGNoZWNrRXF1YWwoYSwgYikgeworICAgIGlmIChhLmEgIT0gYi5hKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKKyAgICBp
ZiAoYS5iICE9IGIuYikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiAr
IGEuYiArICIgdmVyc3VzICIgKyBiLmI7CisgICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0
aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNo
OiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICBmb3IgKHZhciBpID0gYS5jLmxlbmd0
aDsgaS0tOykgeworICAgICAgICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKKyAgICAgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIg
KyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChhcnJh
eSkgeworICAgIHZhciBleHBlY3RlZCA9IHthOmFycmF5WzBdLCBiOmFycmF5WzFdLCBjOmFycmF5
fTsKKyAgICB2YXIgYWN0dWFsID0gYmFyKGFycmF5KS5mOworICAgIGNoZWNrRXF1YWwoYWN0dWFs
LCBleHBlY3RlZCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAg
IHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAlIDY7ICsraikKKyAg
ICAgICAgYXJyYXkucHVzaChqKTsKKyAgICB0ZXN0KGFycmF5KTsKK30KKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1uby1pbmxpbmUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25z
dHJ1Y3QtdmFyYXJncy1uby1pbmxpbmUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLW5vLWlubGluZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACitmdW5jdGlvbiBGb28oYSwgYikgeworICAgIHZh
ciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsg
KytpKQorICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgdGhpcy5mID0ge2E6
YSwgYjpiLCBjOmFycmF5fTsKK30KKworbm9JbmxpbmUoRm9vKTsKKworZnVuY3Rpb24gYmFyKGFy
cmF5KSB7CisgICAgcmV0dXJuIG5ldyBGb28oLi4uYXJyYXkpOworfQorCitub0lubGluZShiYXIp
OworCitmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAgICBpZiAoYS5hICE9IGIuYSkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTogIiArIGEuYSArICIgdmVyc3VzICIg
KyBiLmE7CisgICAgaWYgKGEuYiAhPSBiLmIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZh
bHVlIG9mIGI6ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5iOworICAgIGlmIChhLmMubGVuZ3Ro
ICE9IGIuYy5sZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxl
bmd0aCBtaXNtYXRjaDogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgZm9yICh2YXIg
aSA9IGEuYy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0pCisg
ICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0g
IiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICB9Cit9CisKK2Z1bmN0
aW9uIHRlc3QoYXJyYXkpIHsKKyAgICB2YXIgZXhwZWN0ZWQgPSB7YTphcnJheVswXSwgYjphcnJh
eVsxXSwgYzphcnJheX07CisgICAgdmFyIGFjdHVhbCA9IGJhcihhcnJheSkuZjsKKyAgICBjaGVj
a0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAw
OyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IGkg
JSA2OyArK2opCisgICAgICAgIGFycmF5LnB1c2goaik7CisgICAgdGVzdChhcnJheSk7Cit9CisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LWFyZ3VtZW50LWJ5
LXZhbC1pbi1pbmxpbmVkLXZhcmFyZ3MtY2FsbC1vdXQtb2YtYm91bmRzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LWFyZ3VtZW50LWJ5LXZh
bC1pbi1pbmxpbmVkLXZhcmFyZ3MtY2FsbC1vdXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtYXJndW1lbnQtYnktdmFs
LWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91dC1vZi1ib3VuZHMuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMSBAQAordmFyIGdpOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgcmV0dXJu
IGFyZ3VtZW50c1tnaV07Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSwgaSkgeworICAgIGdpID0g
aTsKKyAgICByZXR1cm4gZm9vLmFwcGx5KHRoaXMsIGFycmF5KTsKK30KKworbm9JbmxpbmUoYmFy
KTsKKwordmFyIGJpZ0FycmF5ID0gW107Citmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpCisg
ICAgYmlnQXJyYXkucHVzaCg0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgIHZhciBtaSA9IGkgJSA1MDsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKGJpZ0FycmF5LCBt
aSk7CisgICAgaWYgKHJlc3VsdCAhPT0gNDIpCisgICAgICAgIHRocm93ICJCYWQgcmVzdWx0IGlu
IGZpcnN0IGxvb3A6ICIgKyByZXN1bHQgKyAiOyBleHBlY3RlZDogIiArIDQyOworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgbWkgPSBpICUgMTAwOworICAg
IHZhciByZXN1bHQgPSBiYXIoWzQyXSwgbWkpOworICAgIHZhciBleHBlY3RlZCA9IG1pID8gdm9p
ZCAwIDogNDI7CisgICAgaWYgKHJlc3VsdCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93ICJC
YWQgcmVzdWx0IGluIHNlY29uZCBsb29wOiAiICsgcmVzdWx0ICsgIjsgZXhwZWN0ZWQ6ICIgKyBl
eHBlY3RlZDsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0
LWFyZ3VtZW50LWJ5LXZhbC1zYWZlLWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91dC1vZi1ib3Vu
ZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9n
ZXQtYXJndW1lbnQtYnktdmFsLXNhZmUtaW4taW5saW5lZC12YXJhcmdzLWNhbGwtb3V0LW9mLWJv
dW5kcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvZ2V0LWFyZ3VtZW50LWJ5LXZhbC1zYWZlLWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91dC1v
Zi1ib3VuZHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAordmFyIGdpOworCitm
dW5jdGlvbiBmb28oKSB7CisgICAgaWYgKCFlZmZlY3RmdWw0MigpKQorICAgICAgICBhcmd1bWVu
dHMgPSAiaGVsbG8iOworICAgIHJldHVybiBhcmd1bWVudHNbZ2ldOworfQorCitmdW5jdGlvbiBi
YXIoYXJyYXksIGkpIHsKKyAgICBnaSA9IGk7CisgICAgcmV0dXJuIGZvby5hcHBseSh0aGlzLCBh
cnJheSk7Cit9CisKK25vSW5saW5lKGJhcik7CisKK3ZhciBiaWdBcnJheSA9IFtdOworZm9yICh2
YXIgaSA9IDA7IGkgPCA1MDsgKytpKQorICAgIGJpZ0FycmF5LnB1c2goNDIpOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgbWkgPSBpICUgNTA7CisgICAgdmFy
IHJlc3VsdCA9IGJhcihiaWdBcnJheSwgbWkpOworICAgIGlmIChyZXN1bHQgIT09IDQyKQorICAg
ICAgICB0aHJvdyAiQmFkIHJlc3VsdCBpbiBmaXJzdCBsb29wOiAiICsgcmVzdWx0ICsgIjsgZXhw
ZWN0ZWQ6ICIgKyA0MjsKK30KKworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICB2YXIgbWkgPSBpICUgMTAwOworICAgIHZhciByZXN1bHQgPSBiYXIoWzQyXSwgbWkpOwor
ICAgIHZhciBleHBlY3RlZCA9IG1pID8gdm9pZCAwIDogNDI7CisgICAgaWYgKHJlc3VsdCAhPT0g
ZXhwZWN0ZWQpCisgICAgICAgIHRocm93ICJCYWQgcmVzdWx0IGluIHNlY29uZCBsb29wOiAiICsg
cmVzdWx0ICsgIjsgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZDsKK30KKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtbXktYXJndW1lbnQtYnktdmFsLWNyZWF0ZXMt
YXJndW1lbnRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvZ2V0LW15LWFyZ3VtZW50LWJ5LXZhbC1jcmVhdGVzLWFyZ3VtZW50cy5qcwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LW15LWFyZ3Vt
ZW50LWJ5LXZhbC1jcmVhdGVzLWFyZ3VtZW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQyIEBACitmdW5jdGlvbiBibGFoKGFyZ3MpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpCisgICAgICAgIGFycmF5LnB1c2go
YXJnc1tpXSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCitmdW5jdGlvbiBmb28oKSB7CisgICAg
Ly8gRm9yY2UgY3JlYXRpb24gb2YgYXJndW1lbnRzIGJ5IGRvaW5nIG91dC1vZi1ib3VuZHMgYWNj
ZXNzLgorICAgIHZhciB0bXAgPSBhcmd1bWVudHNbNDJdOworICAgIAorICAgIC8vIFVzZSB0aGUg
Y3JlYXRlZCBhcmd1bWVudHMgb2JqZWN0LgorICAgIHJldHVybiBibGFoKGFyZ3VtZW50cyk7Cit9
CisKK2Z1bmN0aW9uIGJhcihhcnJheSkgeworICAgIHJldHVybiBmb28uYXBwbHkodGhpcywgYXJy
YXkpOworfQorCitub0lubGluZShibGFoKTsKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGNo
ZWNrRXF1YWwoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhICsgIiB2ZXJzdXMgIiArIGI7Cisg
ICAgZm9yICh2YXIgaSA9IGEubGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChhW2ldICE9IGJb
aV0pCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6
ICIgKyBhICsgIiB2ZXJzdXMgIiArIGI7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5
KSB7CisgICAgdmFyIGFjdHVhbCA9IGJhcihhcnJheSk7CisgICAgY2hlY2tFcXVhbChhY3R1YWws
IGFycmF5KTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFy
IGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICUgNjsgKytqKQorICAgICAg
ICBhcnJheS5wdXNoKGopOworICAgIHRlc3QoYXJyYXkpOworfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtZXhp
dC1pbi1mb28uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtZXhpdC1pbi1mb28uanMJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJn
cy10aGVuLWlubGluZWQtY2FsbC1leGl0LWluLWZvby5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ2IEBACitmdW5jdGlvbiBmb28oYSwgYikgeworICAgIHZhciBhcnJheSA9IFtdOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBhcnJh
eS5wdXNoKGFyZ3VtZW50c1tpXSArIDEpOworICAgIHJldHVybiB7YTphLCBiOmIsIGM6YXJyYXl9
OworfQorCitmdW5jdGlvbiBiYXIoYXJyYXkpIHsKKyAgICByZXR1cm4gZm9vLmFwcGx5KHRoaXMs
IGFycmF5KTsKK30KKworbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBi
KSB7CisgICAgaWYgKGEuYSAhPSBiLmEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVl
IG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAiICsgYi5hOworICAgIGlmIChhLmIgIT0gYi5iKQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMg
IiArIGIuYjsKKyAgICBpZiAoYS5jLmxlbmd0aCAhPSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZl
cnN1cyAiICsgYi5jOworICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CisgICAg
ICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3Vz
ICIgKyBiLmM7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgdmFyIGV4
cGVjdGVkID0ge2E6YXJyYXlbMF0sIGI6YXJyYXlbMV0sIGM6YXJyYXkubWFwKGZ1bmN0aW9uKHZh
bHVlKSB7IHJldHVybiB2YWx1ZSArIDEgfSl9OworICAgIHZhciBhY3R1YWwgPSBiYXIoYXJyYXkp
OworICAgIGNoZWNrRXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9CisKKy8vIFRoaXMgaXMgcHJl
dHR5IGR1bWIuIFdlIG5lZWQgdG8gZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIFZNIGlzIHByZXBh
cmVkIGZvciBkb3VibGUgYXJyYXlzIGJlaW5nCisvLyBjcmVhdGVkLgordmFyIGFycmF5ID0gW107
CithcnJheS5wdXNoKDQyKTsKK2FycmF5LnB1c2goNDIuNSk7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGogPSAw
OyBqIDwgaSAlIDY7ICsraikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAgICB0ZXN0KGFycmF5
KTsKK30KKwordGVzdChbMS41LCAyLjUsIDMuNV0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtaW5saW5lZC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQt
dmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1pbmxpbmVkLmpzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVk
LWNhbGwtaW5saW5lZC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACitmdW5jdGlv
biBmb28oYSwgYikgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tp
XSk7CisgICAgcmV0dXJuIHthOmEsIGI6YiwgYzphcnJheX07Cit9CisKK2Z1bmN0aW9uIGJhcihh
cnJheSkgeworICAgIHJldHVybiBmb28uYXBwbHkodGhpcywgYXJyYXkpOworfQorCitmdW5jdGlv
biBiYXooYXJyYXkpIHsKKyAgICByZXR1cm4gYmFyKGFycmF5KTsKK30KKworbm9JbmxpbmUoYmF6
KTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAgaWYgKGEuYSAhPSBiLmEpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAi
ICsgYi5hOworICAgIGlmIChhLmIgIT0gYi5iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKKyAgICBpZiAoYS5jLmxlbmd0
aCAhPSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBs
ZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGZvciAodmFy
IGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQor
ICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9
ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0KGFycmF5KSB7CisgICAgdmFyIGV4cGVjdGVkID0ge2E6YXJyYXlbMF0sIGI6YXJy
YXlbMV0sIGM6YXJyYXl9OworICAgIHZhciBhY3R1YWwgPSBiYXooYXJyYXkpOworICAgIGNoZWNr
RXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7
ICsraSkgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAl
IDY7ICsraikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAgICB0ZXN0KGFycmF5KTsKK30KKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhl
bi1pbmxpbmVkLWNhbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVu
LWlubGluZWQtY2FsbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACitmdW5jdGlv
biBmb28oYSwgYikgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tp
XSk7CisgICAgcmV0dXJuIHthOmEsIGI6YiwgYzphcnJheX07Cit9CisKK2Z1bmN0aW9uIGJhcihh
cnJheSkgeworICAgIHJldHVybiBmb28uYXBwbHkodGhpcywgYXJyYXkpOworfQorCitub0lubGlu
ZShiYXIpOworCitmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIpIHsKKyAgICBpZiAoYS5hICE9IGIu
YSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTogIiArIGEuYSArICIgdmVy
c3VzICIgKyBiLmE7CisgICAgaWYgKGEuYiAhPSBiLmIpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5iOworICAgIGlmIChhLmMu
bGVuZ3RoICE9IGIuYy5sZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9m
IGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgZm9y
ICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGEuY1tpXSAhPSBiLmNb
aV0pCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBh
dCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIuYzsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICB2YXIgZXhwZWN0ZWQgPSB7YTphcnJheVswXSwg
YjphcnJheVsxXSwgYzphcnJheX07CisgICAgdmFyIGFjdHVhbCA9IGJhcihhcnJheSk7CisgICAg
Y2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNoKGopOworICAgIHRlc3QoYXJyYXkpOwor
fQorCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODAyMjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5MSBAQAorMjAxNS0wMi0xNiAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBzaG91bGQgcmVhbGx5IHN1cHBvcnQg
dmFyYXJncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxMzMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAorICAg
ICAgICBBZGRzIGEgdmVyc2lvbiBvZiBkZWx0YWJsdWUgdGhhdCB1c2VzIHJlc3QgYXJndW1lbnRz
IHByb2Z1c2VseS4gVGhpcyBzcGVlZHMgdXAgYnkgMjAlIHdpdGggdGhpcworICAgICAgICBwYXRj
aC4gSSBiZWxpZXZlIHRoYXQgdGhlIG1hY2hpbmVyeSB0aGF0IHRoaXMgcGF0Y2ggcHV0cyBpbiBw
bGFjZSB3aWxsIGFsbG93IHVzIHRvIHVsdGltYXRlbHkKKyAgICAgICAgcnVuIGRlbHRhYmx1ZS12
YXJhcmdzIGF0IHRoZSBzYW1lIHN0ZWFkeS1zdGF0ZSBwZXJmb3JtYW5jZSBhcyBub3JtYWwgZGVs
dGFibHVlLgorCisgICAgICAgICoganMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZGVsdGFibHVlLXZhcmFyZ3MuaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZGVsdGFibHVlLXZh
cmFyZ3MuanM6IEFkZGVkLgorICAgICAgICAoYXJncyk6CisgICAgICAgIChPYmplY3QucHJvdG90
eXBlLmluaGVyaXRzRnJvbSk6CisgICAgICAgIChPcmRlcmVkQ29sbGVjdGlvbik6CisgICAgICAg
IChPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5cGUuYWRkKToKKyAgICAgICAgKE9yZGVyZWRDb2xs
ZWN0aW9uLnByb3RvdHlwZS5hdCk6CisgICAgICAgIChPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5
cGUuc2l6ZSk6CisgICAgICAgIChPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5cGUucmVtb3ZlRmly
c3QpOgorICAgICAgICAoT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLnJlbW92ZSk6CisgICAg
ICAgIChTdHJlbmd0aCk6CisgICAgICAgIChTdHJlbmd0aC5zdHJvbmdlcik6CisgICAgICAgIChT
dHJlbmd0aC53ZWFrZXIpOgorICAgICAgICAoU3RyZW5ndGgud2Vha2VzdE9mKToKKyAgICAgICAg
KFN0cmVuZ3RoLnN0cm9uZ2VzdCk6CisgICAgICAgIChTdHJlbmd0aC5wcm90b3R5cGUubmV4dFdl
YWtlcik6CisgICAgICAgIChDb25zdHJhaW50KToKKyAgICAgICAgKENvbnN0cmFpbnQucHJvdG90
eXBlLmFkZENvbnN0cmFpbnQpOgorICAgICAgICAoQ29uc3RyYWludC5wcm90b3R5cGUuc2F0aXNm
eSk6CisgICAgICAgIChDb25zdHJhaW50LnByb3RvdHlwZS5kZXN0cm95Q29uc3RyYWludCk6Cisg
ICAgICAgIChDb25zdHJhaW50LnByb3RvdHlwZS5pc0lucHV0KToKKyAgICAgICAgKFVuYXJ5Q29u
c3RyYWludCk6CisgICAgICAgIChVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmFkZFRvR3JhcGgp
OgorICAgICAgICAoVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5jaG9vc2VNZXRob2QpOgorICAg
ICAgICAoVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pc1NhdGlzZmllZCk6CisgICAgICAgIChV
bmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtJbnB1dHMpOgorICAgICAgICAoVW5hcnlDb25z
dHJhaW50LnByb3RvdHlwZS5vdXRwdXQpOgorICAgICAgICAoVW5hcnlDb25zdHJhaW50LnByb3Rv
dHlwZS5yZWNhbGN1bGF0ZSk6CisgICAgICAgIChVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm1h
cmtVbnNhdGlzZmllZCk6CisgICAgICAgIChVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlucHV0
c0tub3duKToKKyAgICAgICAgKFVuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUucmVtb3ZlRnJvbUdy
YXBoKToKKyAgICAgICAgKFN0YXlDb25zdHJhaW50KToKKyAgICAgICAgKFN0YXlDb25zdHJhaW50
LnByb3RvdHlwZS5leGVjdXRlKToKKyAgICAgICAgKEVkaXRDb25zdHJhaW50LnByb3RvdHlwZS5p
c0lucHV0KToKKyAgICAgICAgKEVkaXRDb25zdHJhaW50LnByb3RvdHlwZS5leGVjdXRlKToKKyAg
ICAgICAgKEJpbmFyeUNvbnN0cmFpbnQpOgorICAgICAgICAoQmluYXJ5Q29uc3RyYWludC5wcm90
b3R5cGUuY2hvb3NlTWV0aG9kKToKKyAgICAgICAgKEJpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBl
LmFkZFRvR3JhcGgpOgorICAgICAgICAoQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuaXNTYXRp
c2ZpZWQpOgorICAgICAgICAoQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFya0lucHV0cyk6
CisgICAgICAgIChCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pbnB1dCk6CisgICAgICAgIChC
aW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5vdXRwdXQpOgorICAgICAgICAoQmluYXJ5Q29uc3Ry
YWludC5wcm90b3R5cGUucmVjYWxjdWxhdGUpOgorICAgICAgICAoQmluYXJ5Q29uc3RyYWludC5w
cm90b3R5cGUubWFya1Vuc2F0aXNmaWVkKToKKyAgICAgICAgKEJpbmFyeUNvbnN0cmFpbnQucHJv
dG90eXBlLmlucHV0c0tub3duKToKKyAgICAgICAgKEJpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBl
LnJlbW92ZUZyb21HcmFwaCk6CisgICAgICAgIChTY2FsZUNvbnN0cmFpbnQpOgorICAgICAgICAo
U2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5hZGRUb0dyYXBoKToKKyAgICAgICAgKFNjYWxlQ29u
c3RyYWludC5wcm90b3R5cGUucmVtb3ZlRnJvbUdyYXBoKToKKyAgICAgICAgKFNjYWxlQ29uc3Ry
YWludC5wcm90b3R5cGUubWFya0lucHV0cyk6CisgICAgICAgIChTY2FsZUNvbnN0cmFpbnQucHJv
dG90eXBlLmV4ZWN1dGUpOgorICAgICAgICAoU2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5yZWNh
bGN1bGF0ZSk6CisgICAgICAgIChFcXVhbGl0eUNvbnN0cmFpbnQpOgorICAgICAgICAoRXF1YWxp
dHlDb25zdHJhaW50LnByb3RvdHlwZS5leGVjdXRlKToKKyAgICAgICAgKFZhcmlhYmxlKToKKyAg
ICAgICAgKFZhcmlhYmxlLnByb3RvdHlwZS5hZGRDb25zdHJhaW50KToKKyAgICAgICAgKFZhcmlh
YmxlLnByb3RvdHlwZS5yZW1vdmVDb25zdHJhaW50KToKKyAgICAgICAgKFBsYW5uZXIpOgorICAg
ICAgICAoUGxhbm5lci5wcm90b3R5cGUuaW5jcmVtZW50YWxBZGQpOgorICAgICAgICAoUGxhbm5l
ci5wcm90b3R5cGUuaW5jcmVtZW50YWxSZW1vdmUpOgorICAgICAgICAoUGxhbm5lci5wcm90b3R5
cGUubmV3TWFyayk6CisgICAgICAgIChQbGFubmVyLnByb3RvdHlwZS5tYWtlUGxhbik6CisgICAg
ICAgIChQbGFubmVyLnByb3RvdHlwZS5leHRyYWN0UGxhbkZyb21Db25zdHJhaW50cyk6CisgICAg
ICAgIChQbGFubmVyLnByb3RvdHlwZS5hZGRQcm9wYWdhdGUpOgorICAgICAgICAoUGxhbm5lci5w
cm90b3R5cGUucmVtb3ZlUHJvcGFnYXRlRnJvbSk6CisgICAgICAgIChQbGFubmVyLnByb3RvdHlw
ZS5hZGRDb25zdHJhaW50c0NvbnN1bWluZ1RvKToKKyAgICAgICAgKFBsYW4pOgorICAgICAgICAo
UGxhbi5wcm90b3R5cGUuYWRkQ29uc3RyYWludCk6CisgICAgICAgIChQbGFuLnByb3RvdHlwZS5z
aXplKToKKyAgICAgICAgKFBsYW4ucHJvdG90eXBlLmNvbnN0cmFpbnRBdCk6CisgICAgICAgIChQ
bGFuLnByb3RvdHlwZS5leGVjdXRlKToKKyAgICAgICAgKGNoYWluVGVzdCk6CisgICAgICAgIChw
cm9qZWN0aW9uVGVzdCk6CisgICAgICAgIChjaGFuZ2UpOgorICAgICAgICAoZGVsdGFCbHVlKToK
KwogMjAxNS0wMi0xNyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBEb2N1bWVudCBzb21lIGRlYnVnIGFzc2VydGlvbnMgaW4gQWNjZXNzaWJpbGl0eSB0ZXN0
cyAoVW5yZXZpZXdlZCkKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZGVsdGFibHVlLXZh
cmFyZ3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
ZGVsdGFibHVlLXZhcmFyZ3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2RlbHRhYmx1ZS12YXJhcmdzCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2RlbHRhYmx1ZS12YXJhcmdzLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFyYXJncy5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2RlbHRhYmx1ZS12YXJhcmdzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Rl
bHRhYmx1ZS12YXJhcmdzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2RlbHRhYmx1ZS12YXJhcmdzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZGVsdGFibHVlLXZhcmFyZ3MuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4ODkgQEAKKy8vQCBza2lwIGlmICRhcmNoaXRlY3R1cmUgPT0g
ImFybSIgYW5kICRob3N0T1MgPT0gImRhcndpbiIKKy8vIENvcHlyaWdodCAyMDA4IHRoZSBWOCBw
cm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMTk5NiBK
b2huIE1hbG9uZXkgYW5kIE1hcmlvIFdvbGN6a28uCisKKy8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IKKy8vIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisvLworLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy8v
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1B
ICAwMjExMS0xMzA3ICBVU0EKKworCisvLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEZWx0
YUJsdWUgYmVuY2htYXJrIGlzIGRlcml2ZWQKKy8vIGZyb20gdGhlIFNtYWxsdGFsayBpbXBsZW1l
bnRhdGlvbiBieSBKb2huIE1hbG9uZXkgYW5kIE1hcmlvCisvLyBXb2xjemtvLiBTb21lIHBhcnRz
IGhhdmUgYmVlbiB0cmFuc2xhdGVkIGRpcmVjdGx5LCB3aGVyZWFzCisvLyBvdGhlcnMgaGF2ZSBi
ZWVuIG1vZGlmaWVkIG1vcmUgYWdncmVzaXZlbHkgdG8gbWFrZSBpdCBmZWVsCisvLyBtb3JlIGxp
a2UgYSBKYXZhU2NyaXB0IHByb2dyYW0uCisKKy8qKgorICogQSBKYXZhU2NyaXB0IGltcGxlbWVu
dGF0aW9uIG9mIHRoZSBEZWx0YUJsdWUgY29uc3RyYWludC1zb2x2aW5nCisgKiBhbGdvcml0aG0s
IGFzIGRlc2NyaWJlZCBpbjoKKyAqCisgKiAiVGhlIERlbHRhQmx1ZSBBbGdvcml0aG06IEFuIElu
Y3JlbWVudGFsIENvbnN0cmFpbnQgSGllcmFyY2h5IFNvbHZlciIKKyAqICAgQmpvcm4gTi4gRnJl
ZW1hbi1CZW5zb24gYW5kIEpvaG4gTWFsb25leQorICogICBKYW51YXJ5IDE5OTAgQ29tbXVuaWNh
dGlvbnMgb2YgdGhlIEFDTSwKKyAqICAgYWxzbyBhdmFpbGFibGUgYXMgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uIFRSIDg5LTA4LTA2LgorICoKKyAqIEJld2FyZTogdGhpcyBiZW5jaG1hcmsgaXMg
d3JpdHRlbiBpbiBhIGdyb3Rlc3F1ZSBzdHlsZSB3aGVyZQorICogdGhlIGNvbnN0cmFpbnQgbW9k
ZWwgaXMgYnVpbHQgYnkgc2lkZS1lZmZlY3RzIGZyb20gY29uc3RydWN0b3JzLgorICogSSd2ZSBr
ZXB0IGl0IHRoaXMgd2F5IHRvIGF2b2lkIGRldmlhdGluZyB0b28gbXVjaCBmcm9tIHRoZSBvcmln
aW5hbAorICogaW1wbGVtZW50YXRpb24uCisgKi8KKworLy8gVGhpcyB0aGluZyBpcyBhbiBldmls
IGhhY2sgdGhhdCB3ZSB1c2UgdGhyb3VnaG91dCB0aGlzIGJlbmNobWFyayBzbyB0aGF0IHdlIGNh
biB1c2UgdGhpcyBiZW5jaG1hcmsgdG8KKy8vIHN0cmVzcyBvdXIgdmFyYXJncyBpbXBsZW1lbnRh
dGlvbi4gV2UgYWxzbyBoYXZlIHRlc3RzIGZvciBzcGVjaWZpYyBmZWF0dXJlcyBvZiB0aGUgdmFy
YXJncyBjb2RlLCBidXQKKy8vIGhhdmluZyBhIHNvbWV3aGF0IGxhcmdlLWlzaCBiZW5jaG1hcmsg
dGhhdCB1c2VzIHZhcmFyZ3MgYSBsb3QgKGV2ZW4gaWYgaXQncyBpbiBhIHNpbGx5IHdheSkgaXMg
Z3JlYXQKKy8vIGZvciBzaGFraW5nIG91dCBidWdzLgorZnVuY3Rpb24gYXJncygpIHsKKyAgICB2
YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7
ICsraSkKKyAgICAgICAgYXJyYXkucHVzaChhcmd1bWVudHNbaV0pOworICAgIHJldHVybiBhcnJh
eTsKK30KKworCisvKiAtLS0gTyBiIGogZSBjIHQgICBNIG8gZCBlIGwgLS0tICovCisKK09iamVj
dC5wcm90b3R5cGUuaW5oZXJpdHNGcm9tID0gZnVuY3Rpb24gKHNodXBlcikgeworICBmdW5jdGlv
biBJbmhlcml0ZXIoKSB7IH0KKyAgSW5oZXJpdGVyLnByb3RvdHlwZSA9IHNodXBlci5wcm90b3R5
cGU7CisgIHRoaXMucHJvdG90eXBlID0gbmV3IEluaGVyaXRlciguLi5hcmdzKCkpOworICB0aGlz
LnN1cGVyQ29uc3RydWN0b3IgPSBzaHVwZXI7Cit9CisKK2Z1bmN0aW9uIE9yZGVyZWRDb2xsZWN0
aW9uKCkgeworICB0aGlzLmVsbXMgPSBuZXcgQXJyYXkoLi4uYXJncygpKTsKK30KKworT3JkZXJl
ZENvbGxlY3Rpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChlbG0pIHsKKyAgdGhpcy5lbG1z
LnB1c2goLi4uYXJncyhlbG0pKTsKK30KKworT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLmF0
ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgIHJldHVybiB0aGlzLmVsbXNbaW5kZXhdOworfQorCitP
cmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJu
IHRoaXMuZWxtcy5sZW5ndGg7Cit9CisKK09yZGVyZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5yZW1v
dmVGaXJzdCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMuZWxtcy5wb3AoLi4uYXJncygp
KTsKK30KKworT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChl
bG0pIHsKKyAgdmFyIGluZGV4ID0gMCwgc2tpcHBlZCA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5lbG1zLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIHZhbHVlID0gdGhpcy5lbG1zW2ld
OworICAgIGlmICh2YWx1ZSAhPSBlbG0pIHsKKyAgICAgIHRoaXMuZWxtc1tpbmRleF0gPSB2YWx1
ZTsKKyAgICAgIGluZGV4Kys7CisgICAgfSBlbHNlIHsKKyAgICAgIHNraXBwZWQrKzsKKyAgICB9
CisgIH0KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBza2lwcGVkOyBpKyspCisgICAgdGhpcy5lbG1z
LnBvcCguLi5hcmdzKCkpOworfQorCisvKiAtLS0gKgorICogUyB0IHIgZSBuIGcgdCBoCisgKiAt
LS0gKi8KKworLyoqCisgKiBTdHJlbmd0aHMgYXJlIHVzZWQgdG8gbWVhc3VyZSB0aGUgcmVsYXRp
dmUgaW1wb3J0YW5jZSBvZiBjb25zdHJhaW50cy4KKyAqIE5ldyBzdHJlbmd0aHMgbWF5IGJlIGlu
c2VydGVkIGluIHRoZSBzdHJlbmd0aCBoaWVyYXJjaHkgd2l0aG91dAorICogZGlzcnVwdGluZyBj
dXJyZW50IGNvbnN0cmFpbnRzLiAgU3RyZW5ndGhzIGNhbm5vdCBiZSBjcmVhdGVkIG91dHNpZGUK
KyAqIHRoaXMgY2xhc3MsIHNvIHBvaW50ZXIgY29tcGFyaXNvbiBjYW4gYmUgdXNlZCBmb3IgdmFs
dWUgY29tcGFyaXNvbi4KKyAqLworZnVuY3Rpb24gU3RyZW5ndGgoc3RyZW5ndGhWYWx1ZSwgbmFt
ZSkgeworICB0aGlzLnN0cmVuZ3RoVmFsdWUgPSBzdHJlbmd0aFZhbHVlOworICB0aGlzLm5hbWUg
PSBuYW1lOworfQorCitTdHJlbmd0aC5zdHJvbmdlciA9IGZ1bmN0aW9uIChzMSwgczIpIHsKKyAg
cmV0dXJuIHMxLnN0cmVuZ3RoVmFsdWUgPCBzMi5zdHJlbmd0aFZhbHVlOworfQorCitTdHJlbmd0
aC53ZWFrZXIgPSBmdW5jdGlvbiAoczEsIHMyKSB7CisgIHJldHVybiBzMS5zdHJlbmd0aFZhbHVl
ID4gczIuc3RyZW5ndGhWYWx1ZTsKK30KKworU3RyZW5ndGgud2Vha2VzdE9mID0gZnVuY3Rpb24g
KHMxLCBzMikgeworICByZXR1cm4gdGhpcy53ZWFrZXIoLi4uYXJncyhzMSwgczIpKSA/IHMxIDog
czI7Cit9CisKK1N0cmVuZ3RoLnN0cm9uZ2VzdCA9IGZ1bmN0aW9uIChzMSwgczIpIHsKKyAgcmV0
dXJuIHRoaXMuc3Ryb25nZXIoLi4uYXJncyhzMSwgczIpKSA/IHMxIDogczI7Cit9CisKK1N0cmVu
Z3RoLnByb3RvdHlwZS5uZXh0V2Vha2VyID0gZnVuY3Rpb24gKCkgeworICBzd2l0Y2ggKHRoaXMu
c3RyZW5ndGhWYWx1ZSkgeworICAgIGNhc2UgMDogcmV0dXJuIFN0cmVuZ3RoLldFQUtFU1Q7Cisg
ICAgY2FzZSAxOiByZXR1cm4gU3RyZW5ndGguV0VBS19ERUZBVUxUOworICAgIGNhc2UgMjogcmV0
dXJuIFN0cmVuZ3RoLk5PUk1BTDsKKyAgICBjYXNlIDM6IHJldHVybiBTdHJlbmd0aC5TVFJPTkdf
REVGQVVMVDsKKyAgICBjYXNlIDQ6IHJldHVybiBTdHJlbmd0aC5QUkVGRVJSRUQ7CisgICAgY2Fz
ZSA1OiByZXR1cm4gU3RyZW5ndGguUkVRVUlSRUQ7CisgIH0KK30KKworLy8gU3RyZW5ndGggY29u
c3RhbnRzLgorU3RyZW5ndGguUkVRVUlSRUQgICAgICAgID0gbmV3IFN0cmVuZ3RoKC4uLmFyZ3Mo
MCwgInJlcXVpcmVkIikpOworU3RyZW5ndGguU1RPTkdfUFJFRkVSUkVEID0gbmV3IFN0cmVuZ3Ro
KC4uLmFyZ3MoMSwgInN0cm9uZ1ByZWZlcnJlZCIpKTsKK1N0cmVuZ3RoLlBSRUZFUlJFRCAgICAg
ICA9IG5ldyBTdHJlbmd0aCguLi5hcmdzKDIsICJwcmVmZXJyZWQiKSk7CitTdHJlbmd0aC5TVFJP
TkdfREVGQVVMVCAgPSBuZXcgU3RyZW5ndGgoLi4uYXJncygzLCAic3Ryb25nRGVmYXVsdCIpKTsK
K1N0cmVuZ3RoLk5PUk1BTCAgICAgICAgICA9IG5ldyBTdHJlbmd0aCguLi5hcmdzKDQsICJub3Jt
YWwiKSk7CitTdHJlbmd0aC5XRUFLX0RFRkFVTFQgICAgPSBuZXcgU3RyZW5ndGgoLi4uYXJncyg1
LCAid2Vha0RlZmF1bHQiKSk7CitTdHJlbmd0aC5XRUFLRVNUICAgICAgICAgPSBuZXcgU3RyZW5n
dGgoLi4uYXJncyg2LCAid2Vha2VzdCIpKTsKKworLyogLS0tICoKKyAqIEMgbyBuIHMgdCByIGEg
aSBuIHQKKyAqIC0tLSAqLworCisvKioKKyAqIEFuIGFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGlu
ZyBhIHN5c3RlbS1tYWludGFpbmFibGUgcmVsYXRpb25zaGlwCisgKiAob3IgImNvbnN0cmFpbnQi
KSBiZXR3ZWVuIGEgc2V0IG9mIHZhcmlhYmxlcy4gQSBjb25zdHJhaW50IHN1cHBsaWVzCisgKiBh
IHN0cmVuZ3RoIGluc3RhbmNlIHZhcmlhYmxlOyBjb25jcmV0ZSBzdWJjbGFzc2VzIHByb3ZpZGUg
YSBtZWFucworICogb2Ygc3RvcmluZyB0aGUgY29uc3RyYWluZWQgdmFyaWFibGVzIGFuZCBvdGhl
ciBpbmZvcm1hdGlvbiByZXF1aXJlZAorICogdG8gcmVwcmVzZW50IGEgY29uc3RyYWludC4KKyAq
LworZnVuY3Rpb24gQ29uc3RyYWludChzdHJlbmd0aCkgeworICB0aGlzLnN0cmVuZ3RoID0gc3Ry
ZW5ndGg7Cit9CisKKy8qKgorICogQWN0aXZhdGUgdGhpcyBjb25zdHJhaW50IGFuZCBhdHRlbXB0
IHRvIHNhdGlzZnkgaXQuCisgKi8KK0NvbnN0cmFpbnQucHJvdG90eXBlLmFkZENvbnN0cmFpbnQg
PSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuYWRkVG9HcmFwaCguLi5hcmdzKCkpOworICBwbGFubmVy
LmluY3JlbWVudGFsQWRkKC4uLmFyZ3ModGhpcykpOworfQorCisvKioKKyAqIEF0dGVtcHQgdG8g
ZmluZCBhIHdheSB0byBlbmZvcmNlIHRoaXMgY29uc3RyYWludC4gSWYgc3VjY2Vzc2Z1bCwKKyAq
IHJlY29yZCB0aGUgc29sdXRpb24sIHBlcmhhcHMgbW9kaWZ5aW5nIHRoZSBjdXJyZW50IGRhdGFm
bG93CisgKiBncmFwaC4gQW5zd2VyIHRoZSBjb25zdHJhaW50IHRoYXQgdGhpcyBjb25zdHJhaW50
IG92ZXJyaWRlcywgaWYKKyAqIHRoZXJlIGlzIG9uZSwgb3IgbmlsLCBpZiB0aGVyZSBpc24ndC4K
KyAqIEFzc3VtZTogSSBhbSBub3QgYWxyZWFkeSBzYXRpc2ZpZWQuCisgKi8KK0NvbnN0cmFpbnQu
cHJvdG90eXBlLnNhdGlzZnkgPSBmdW5jdGlvbiAobWFyaykgeworICB0aGlzLmNob29zZU1ldGhv
ZCguLi5hcmdzKG1hcmspKTsKKyAgaWYgKCF0aGlzLmlzU2F0aXNmaWVkKC4uLmFyZ3MoKSkpIHsK
KyAgICBpZiAodGhpcy5zdHJlbmd0aCA9PSBTdHJlbmd0aC5SRVFVSVJFRCkKKyAgICAgIGFsZXJ0
KC4uLmFyZ3MoIkNvdWxkIG5vdCBzYXRpc2Z5IGEgcmVxdWlyZWQgY29uc3RyYWludCEiKSk7Cisg
ICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhpcy5tYXJrSW5wdXRzKC4uLmFyZ3MobWFyaykpOwor
ICB2YXIgb3V0ID0gdGhpcy5vdXRwdXQoLi4uYXJncygpKTsKKyAgdmFyIG92ZXJyaWRkZW4gPSBv
dXQuZGV0ZXJtaW5lZEJ5OworICBpZiAob3ZlcnJpZGRlbiAhPSBudWxsKSBvdmVycmlkZGVuLm1h
cmtVbnNhdGlzZmllZCguLi5hcmdzKCkpOworICBvdXQuZGV0ZXJtaW5lZEJ5ID0gdGhpczsKKyAg
aWYgKCFwbGFubmVyLmFkZFByb3BhZ2F0ZSguLi5hcmdzKHRoaXMsIG1hcmspKSkKKyAgICBhbGVy
dCguLi5hcmdzKCJDeWNsZSBlbmNvdW50ZXJlZCIpKTsKKyAgb3V0Lm1hcmsgPSBtYXJrOworICBy
ZXR1cm4gb3ZlcnJpZGRlbjsKK30KKworQ29uc3RyYWludC5wcm90b3R5cGUuZGVzdHJveUNvbnN0
cmFpbnQgPSBmdW5jdGlvbiAoKSB7CisgIGlmICh0aGlzLmlzU2F0aXNmaWVkKC4uLmFyZ3MoKSkp
IHBsYW5uZXIuaW5jcmVtZW50YWxSZW1vdmUoLi4uYXJncyh0aGlzKSk7CisgIGVsc2UgdGhpcy5y
ZW1vdmVGcm9tR3JhcGgoLi4uYXJncygpKTsKK30KKworLyoqCisgKiBOb3JtYWwgY29uc3RyYWlu
dHMgYXJlIG5vdCBpbnB1dCBjb25zdHJhaW50cy4gIEFuIGlucHV0IGNvbnN0cmFpbnQKKyAqIGlz
IG9uZSB0aGF0IGRlcGVuZHMgb24gZXh0ZXJuYWwgc3RhdGUsIHN1Y2ggYXMgdGhlIG1vdXNlLCB0
aGUKKyAqIGtleWJvcmQsIGEgY2xvY2ssIG9yIHNvbWUgYXJiaXRyYXR5IHBpZWNlIG9mIGltcGVy
YXRpdmUgY29kZS4KKyAqLworQ29uc3RyYWludC5wcm90b3R5cGUuaXNJbnB1dCA9IGZ1bmN0aW9u
ICgpIHsKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiAtLS0gKgorICogVSBuIGEgciB5ICAgQyBv
IG4gcyB0IHIgYSBpIG4gdAorICogLS0tICovCisKKy8qKgorICogQWJzdHJhY3Qgc3VwZXJjbGFz
cyBmb3IgY29uc3RyYWludHMgaGF2aW5nIGEgc2luZ2xlIHBvc3NpYmxlIG91dHB1dAorICogdmFy
aWFibGUuCisgKi8KK2Z1bmN0aW9uIFVuYXJ5Q29uc3RyYWludCh2LCBzdHJlbmd0aCkgeworICBV
bmFyeUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHN0cmVuZ3RoKTsKKyAg
dGhpcy5teU91dHB1dCA9IHY7CisgIHRoaXMuc2F0aXNmaWVkID0gZmFsc2U7CisgIHRoaXMuYWRk
Q29uc3RyYWludCguLi5hcmdzKCkpOworfQorCitVbmFyeUNvbnN0cmFpbnQuaW5oZXJpdHNGcm9t
KC4uLmFyZ3MoQ29uc3RyYWludCkpOworCisvKioKKyAqIEFkZHMgdGhpcyBjb25zdHJhaW50IHRv
IHRoZSBjb25zdHJhaW50IGdyYXBoCisgKi8KK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuYWRk
VG9HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5teU91dHB1dC5hZGRDb25zdHJhaW50KC4u
LmFyZ3ModGhpcykpOworICB0aGlzLnNhdGlzZmllZCA9IGZhbHNlOworfQorCisvKioKKyAqIERl
Y2lkZXMgaWYgdGhpcyBjb25zdHJhaW50IGNhbiBiZSBzYXRpc2ZpZWQgYW5kIHJlY29yZHMgdGhh
dAorICogZGVjaXNpb24uCisgKi8KK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuY2hvb3NlTWV0
aG9kID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgdGhpcy5zYXRpc2ZpZWQgPSAodGhpcy5teU91dHB1
dC5tYXJrICE9IG1hcmspCisgICAgJiYgU3RyZW5ndGguc3Ryb25nZXIoLi4uYXJncyh0aGlzLnN0
cmVuZ3RoLCB0aGlzLm15T3V0cHV0LndhbGtTdHJlbmd0aCkpOworfQorCisvKioKKyAqIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkIGluIHRoZSBjdXJyZW50IHNv
bHV0aW9uLgorICovCitVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlzU2F0aXNmaWVkID0gZnVu
Y3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5zYXRpc2ZpZWQ7Cit9CisKK1VuYXJ5Q29uc3RyYWlu
dC5wcm90b3R5cGUubWFya0lucHV0cyA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIC8vIGhhcyBubyBp
bnB1dHMKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG91dHB1dCB2YXJpYWJsZS4K
KyAqLworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5vdXRwdXQgPSBmdW5jdGlvbiAoKSB7Cisg
IHJldHVybiB0aGlzLm15T3V0cHV0OworfQorCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgd2Fsa2Fi
b3V0IHN0cmVuZ3RoLCB0aGUgc3RheSBmbGFnLCBhbmQsIGlmIGl0IGlzCisgKiAnc3RheScsIHRo
ZSB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IG9mIHRoaXMgY29uc3RyYWludC4gQXNzdW1l
CisgKiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkLgorICovCitVbmFyeUNvbnN0cmFpbnQu
cHJvdG90eXBlLnJlY2FsY3VsYXRlID0gZnVuY3Rpb24gKCkgeworICB0aGlzLm15T3V0cHV0Lndh
bGtTdHJlbmd0aCA9IHRoaXMuc3RyZW5ndGg7CisgIHRoaXMubXlPdXRwdXQuc3RheSA9ICF0aGlz
LmlzSW5wdXQoLi4uYXJncygpKTsKKyAgaWYgKHRoaXMubXlPdXRwdXQuc3RheSkgdGhpcy5leGVj
dXRlKC4uLmFyZ3MoKSk7IC8vIFN0YXkgb3B0aW1pemF0aW9uCit9CisKKy8qKgorICogUmVjb3Jk
cyB0aGF0IHRoaXMgY29uc3RyYWludCBpcyB1bnNhdGlzZmllZAorICovCitVbmFyeUNvbnN0cmFp
bnQucHJvdG90eXBlLm1hcmtVbnNhdGlzZmllZCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5zYXRp
c2ZpZWQgPSBmYWxzZTsKK30KKworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pbnB1dHNLbm93
biA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRydWU7Cit9CisKK1VuYXJ5Q29uc3RyYWludC5w
cm90b3R5cGUucmVtb3ZlRnJvbUdyYXBoID0gZnVuY3Rpb24gKCkgeworICBpZiAodGhpcy5teU91
dHB1dCAhPSBudWxsKSB0aGlzLm15T3V0cHV0LnJlbW92ZUNvbnN0cmFpbnQoLi4uYXJncyh0aGlz
KSk7CisgIHRoaXMuc2F0aXNmaWVkID0gZmFsc2U7Cit9CisKKy8qIC0tLSAqCisgKiBTIHQgYSB5
ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAorICogLS0tICovCisKKy8qKgorICogVmFyaWFibGVzIHRo
YXQgc2hvdWxkLCB3aXRoIHNvbWUgbGV2ZWwgb2YgcHJlZmVyZW5jZSwgc3RheSB0aGUgc2FtZS4K
KyAqIFBsYW5uZXJzIG1heSBleHBsb2l0IHRoZSBmYWN0IHRoYXQgaW5zdGFuY2VzLCBpZiBzYXRp
c2ZpZWQsIHdpbGwgbm90CisgKiBjaGFuZ2UgdGhlaXIgb3V0cHV0IGR1cmluZyBwbGFuIGV4ZWN1
dGlvbi4gIFRoaXMgaXMgY2FsbGVkICJzdGF5CisgKiBvcHRpbWl6YXRpb24iLgorICovCitmdW5j
dGlvbiBTdGF5Q29uc3RyYWludCh2LCBzdHIpIHsKKyAgU3RheUNvbnN0cmFpbnQuc3VwZXJDb25z
dHJ1Y3Rvci5jYWxsKHRoaXMsIHYsIHN0cik7Cit9CisKK1N0YXlDb25zdHJhaW50LmluaGVyaXRz
RnJvbSguLi5hcmdzKFVuYXJ5Q29uc3RyYWludCkpOworCitTdGF5Q29uc3RyYWludC5wcm90b3R5
cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgLy8gU3RheSBjb25zdHJhaW50cyBkbyBub3Ro
aW5nCit9CisKKy8qIC0tLSAqCisgKiBFIGQgaSB0ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAorICog
LS0tICovCisKKy8qKgorICogQSB1bmFyeSBpbnB1dCBjb25zdHJhaW50IHVzZWQgdG8gbWFyayBh
IHZhcmlhYmxlIHRoYXQgdGhlIGNsaWVudAorICogd2lzaGVzIHRvIGNoYW5nZS4KKyAqLworZnVu
Y3Rpb24gRWRpdENvbnN0cmFpbnQodiwgc3RyKSB7CisgIEVkaXRDb25zdHJhaW50LnN1cGVyQ29u
c3RydWN0b3IuY2FsbCh0aGlzLCB2LCBzdHIpOworfQorCitFZGl0Q29uc3RyYWludC5pbmhlcml0
c0Zyb20oLi4uYXJncyhVbmFyeUNvbnN0cmFpbnQpKTsKKworLyoqCisgKiBFZGl0cyBpbmRpY2F0
ZSB0aGF0IGEgdmFyaWFibGUgaXMgdG8gYmUgY2hhbmdlZCBieSBpbXBlcmF0aXZlIGNvZGUuCisg
Ki8KK0VkaXRDb25zdHJhaW50LnByb3RvdHlwZS5pc0lucHV0ID0gZnVuY3Rpb24gKCkgeworICBy
ZXR1cm4gdHJ1ZTsKK30KKworRWRpdENvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5j
dGlvbiAoKSB7CisgIC8vIEVkaXQgY29uc3RyYWludHMgZG8gbm90aGluZworfQorCisvKiAtLS0g
KgorICogQiBpIG4gYSByIHkgICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKwordmFy
IERpcmVjdGlvbiA9IG5ldyBPYmplY3QoLi4uYXJncygpKTsKK0RpcmVjdGlvbi5OT05FICAgICA9
IDA7CitEaXJlY3Rpb24uRk9SV0FSRCAgPSAxOworRGlyZWN0aW9uLkJBQ0tXQVJEID0gLTE7CisK
Ky8qKgorICogQWJzdHJhY3Qgc3VwZXJjbGFzcyBmb3IgY29uc3RyYWludHMgaGF2aW5nIHR3byBw
b3NzaWJsZSBvdXRwdXQKKyAqIHZhcmlhYmxlcy4KKyAqLworZnVuY3Rpb24gQmluYXJ5Q29uc3Ry
YWludCh2YXIxLCB2YXIyLCBzdHJlbmd0aCkgeworICBCaW5hcnlDb25zdHJhaW50LnN1cGVyQ29u
c3RydWN0b3IuY2FsbCh0aGlzLCBzdHJlbmd0aCk7CisgIHRoaXMudjEgPSB2YXIxOworICB0aGlz
LnYyID0gdmFyMjsKKyAgdGhpcy5kaXJlY3Rpb24gPSBEaXJlY3Rpb24uTk9ORTsKKyAgdGhpcy5h
ZGRDb25zdHJhaW50KC4uLmFyZ3MoKSk7Cit9CisKK0JpbmFyeUNvbnN0cmFpbnQuaW5oZXJpdHNG
cm9tKC4uLmFyZ3MoQ29uc3RyYWludCkpOworCisvKioKKyAqIERlY2lkZXMgaWYgdGhpcyBjb25z
dHJhaW50IGNhbiBiZSBzYXRpc2ZpZWQgYW5kIHdoaWNoIHdheSBpdAorICogc2hvdWxkIGZsb3cg
YmFzZWQgb24gdGhlIHJlbGF0aXZlIHN0cmVuZ3RoIG9mIHRoZSB2YXJpYWJsZXMgcmVsYXRlZCwK
KyAqIGFuZCByZWNvcmQgdGhhdCBkZWNpc2lvbi4KKyAqLworQmluYXJ5Q29uc3RyYWludC5wcm90
b3R5cGUuY2hvb3NlTWV0aG9kID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgaWYgKHRoaXMudjEubWFy
ayA9PSBtYXJrKSB7CisgICAgdGhpcy5kaXJlY3Rpb24gPSAodGhpcy52Mi5tYXJrICE9IG1hcmsg
JiYgU3RyZW5ndGguc3Ryb25nZXIoLi4uYXJncyh0aGlzLnN0cmVuZ3RoLCB0aGlzLnYyLndhbGtT
dHJlbmd0aCkpKQorICAgICAgPyBEaXJlY3Rpb24uRk9SV0FSRAorICAgICAgOiBEaXJlY3Rpb24u
Tk9ORTsKKyAgfQorICBpZiAodGhpcy52Mi5tYXJrID09IG1hcmspIHsKKyAgICB0aGlzLmRpcmVj
dGlvbiA9ICh0aGlzLnYxLm1hcmsgIT0gbWFyayAmJiBTdHJlbmd0aC5zdHJvbmdlciguLi5hcmdz
KHRoaXMuc3RyZW5ndGgsIHRoaXMudjEud2Fsa1N0cmVuZ3RoKSkpCisgICAgICA/IERpcmVjdGlv
bi5CQUNLV0FSRAorICAgICAgOiBEaXJlY3Rpb24uTk9ORTsKKyAgfQorICBpZiAoU3RyZW5ndGgu
d2Vha2VyKC4uLmFyZ3ModGhpcy52MS53YWxrU3RyZW5ndGgsIHRoaXMudjIud2Fsa1N0cmVuZ3Ro
KSkpIHsKKyAgICB0aGlzLmRpcmVjdGlvbiA9IFN0cmVuZ3RoLnN0cm9uZ2VyKC4uLmFyZ3ModGhp
cy5zdHJlbmd0aCwgdGhpcy52MS53YWxrU3RyZW5ndGgpKQorICAgICAgPyBEaXJlY3Rpb24uQkFD
S1dBUkQKKyAgICAgIDogRGlyZWN0aW9uLk5PTkU7CisgIH0gZWxzZSB7CisgICAgdGhpcy5kaXJl
Y3Rpb24gPSBTdHJlbmd0aC5zdHJvbmdlciguLi5hcmdzKHRoaXMuc3RyZW5ndGgsIHRoaXMudjIu
d2Fsa1N0cmVuZ3RoKSkKKyAgICAgID8gRGlyZWN0aW9uLkZPUldBUkQKKyAgICAgIDogRGlyZWN0
aW9uLkJBQ0tXQVJECisgIH0KK30KKworLyoqCisgKiBBZGQgdGhpcyBjb25zdHJhaW50IHRvIHRo
ZSBjb25zdHJhaW50IGdyYXBoCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmFkZFRv
R3JhcGggPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMudjEuYWRkQ29uc3RyYWludCguLi5hcmdzKHRo
aXMpKTsKKyAgdGhpcy52Mi5hZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworICB0aGlzLmRp
cmVjdGlvbiA9IERpcmVjdGlvbi5OT05FOworfQorCisvKioKKyAqIEFuc3dlciB0cnVlIGlmIHRo
aXMgY29uc3RyYWludCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGN1cnJlbnQgc29sdXRpb24uCisgKi8K
K0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlzU2F0aXNmaWVkID0gZnVuY3Rpb24gKCkgewor
ICByZXR1cm4gdGhpcy5kaXJlY3Rpb24gIT0gRGlyZWN0aW9uLk5PTkU7Cit9CisKKy8qKgorICog
TWFyayB0aGUgaW5wdXQgdmFyaWFibGUgd2l0aCB0aGUgZ2l2ZW4gbWFyay4KKyAqLworQmluYXJ5
Q29uc3RyYWludC5wcm90b3R5cGUubWFya0lucHV0cyA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIHRo
aXMuaW5wdXQoLi4uYXJncygpKS5tYXJrID0gbWFyazsKK30KKworLyoqCisgKiBSZXR1cm5zIHRo
ZSBjdXJyZW50IGlucHV0IHZhcmlhYmxlCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBl
LmlucHV0ID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gKHRoaXMuZGlyZWN0aW9uID09IERpcmVj
dGlvbi5GT1JXQVJEKSA/IHRoaXMudjEgOiB0aGlzLnYyOworfQorCisvKioKKyAqIFJldHVybnMg
dGhlIGN1cnJlbnQgb3V0cHV0IHZhcmlhYmxlCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90
eXBlLm91dHB1dCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuICh0aGlzLmRpcmVjdGlvbiA9PSBE
aXJlY3Rpb24uRk9SV0FSRCkgPyB0aGlzLnYyIDogdGhpcy52MTsKK30KKworLyoqCisgKiBDYWxj
dWxhdGUgdGhlIHdhbGthYm91dCBzdHJlbmd0aCwgdGhlIHN0YXkgZmxhZywgYW5kLCBpZiBpdCBp
cworICogJ3N0YXknLCB0aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBvZiB0aGlzCisg
KiBjb25zdHJhaW50LiBBc3N1bWUgdGhpcyBjb25zdHJhaW50IGlzIHNhdGlzZmllZC4KKyAqLwor
QmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUucmVjYWxjdWxhdGUgPSBmdW5jdGlvbiAoKSB7Cisg
IHZhciBpaG4gPSB0aGlzLmlucHV0KC4uLmFyZ3MoKSksIG91dCA9IHRoaXMub3V0cHV0KC4uLmFy
Z3MoKSk7CisgIG91dC53YWxrU3RyZW5ndGggPSBTdHJlbmd0aC53ZWFrZXN0T2YoLi4uYXJncyh0
aGlzLnN0cmVuZ3RoLCBpaG4ud2Fsa1N0cmVuZ3RoKSk7CisgIG91dC5zdGF5ID0gaWhuLnN0YXk7
CisgIGlmIChvdXQuc3RheSkgdGhpcy5leGVjdXRlKC4uLmFyZ3MoKSk7Cit9CisKKy8qKgorICog
UmVjb3JkIHRoZSBmYWN0IHRoYXQgdGhpcyBjb25zdHJhaW50IGlzIHVuc2F0aXNmaWVkLgorICov
CitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5tYXJrVW5zYXRpc2ZpZWQgPSBmdW5jdGlvbiAo
KSB7CisgIHRoaXMuZGlyZWN0aW9uID0gRGlyZWN0aW9uLk5PTkU7Cit9CisKK0JpbmFyeUNvbnN0
cmFpbnQucHJvdG90eXBlLmlucHV0c0tub3duID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgdmFyIGkg
PSB0aGlzLmlucHV0KC4uLmFyZ3MoKSk7CisgIHJldHVybiBpLm1hcmsgPT0gbWFyayB8fCBpLnN0
YXkgfHwgaS5kZXRlcm1pbmVkQnkgPT0gbnVsbDsKK30KKworQmluYXJ5Q29uc3RyYWludC5wcm90
b3R5cGUucmVtb3ZlRnJvbUdyYXBoID0gZnVuY3Rpb24gKCkgeworICBpZiAodGhpcy52MSAhPSBu
dWxsKSB0aGlzLnYxLnJlbW92ZUNvbnN0cmFpbnQoLi4uYXJncyh0aGlzKSk7CisgIGlmICh0aGlz
LnYyICE9IG51bGwpIHRoaXMudjIucmVtb3ZlQ29uc3RyYWludCguLi5hcmdzKHRoaXMpKTsKKyAg
dGhpcy5kaXJlY3Rpb24gPSBEaXJlY3Rpb24uTk9ORTsKK30KKworLyogLS0tICoKKyAqIFMgYyBh
IGwgZSAgIEMgbyBuIHMgdCByIGEgaSBuIHQKKyAqIC0tLSAqLworCisvKioKKyAqIFJlbGF0ZXMg
dHdvIHZhcmlhYmxlcyBieSB0aGUgbGluZWFyIHNjYWxpbmcgcmVsYXRpb25zaGlwOiAidjIgPQor
ICogKHYxICogc2NhbGUpICsgb2Zmc2V0Ii4gRWl0aGVyIHYxIG9yIHYyIG1heSBiZSBjaGFuZ2Vk
IHRvIG1haW50YWluCisgKiB0aGlzIHJlbGF0aW9uc2hpcCBidXQgdGhlIHNjYWxlIGZhY3RvciBh
bmQgb2Zmc2V0IGFyZSBjb25zaWRlcmVkCisgKiByZWFkLW9ubHkuCisgKi8KK2Z1bmN0aW9uIFNj
YWxlQ29uc3RyYWludChzcmMsIHNjYWxlLCBvZmZzZXQsIGRlc3QsIHN0cmVuZ3RoKSB7CisgIHRo
aXMuZGlyZWN0aW9uID0gRGlyZWN0aW9uLk5PTkU7CisgIHRoaXMuc2NhbGUgPSBzY2FsZTsKKyAg
dGhpcy5vZmZzZXQgPSBvZmZzZXQ7CisgIFNjYWxlQ29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9y
LmNhbGwodGhpcywgc3JjLCBkZXN0LCBzdHJlbmd0aCk7Cit9CisKK1NjYWxlQ29uc3RyYWludC5p
bmhlcml0c0Zyb20oLi4uYXJncyhCaW5hcnlDb25zdHJhaW50KSk7CisKKy8qKgorICogQWRkcyB0
aGlzIGNvbnN0cmFpbnQgdG8gdGhlIGNvbnN0cmFpbnQgZ3JhcGguCisgKi8KK1NjYWxlQ29uc3Ry
YWludC5wcm90b3R5cGUuYWRkVG9HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgU2NhbGVDb25zdHJh
aW50LnN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLmFkZFRvR3JhcGguY2FsbCh0aGlzKTsKKyAg
dGhpcy5zY2FsZS5hZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworICB0aGlzLm9mZnNldC5h
ZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworfQorCitTY2FsZUNvbnN0cmFpbnQucHJvdG90
eXBlLnJlbW92ZUZyb21HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgU2NhbGVDb25zdHJhaW50LnN1
cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaC5jYWxsKHRoaXMpOworICBp
ZiAodGhpcy5zY2FsZSAhPSBudWxsKSB0aGlzLnNjYWxlLnJlbW92ZUNvbnN0cmFpbnQoLi4uYXJn
cyh0aGlzKSk7CisgIGlmICh0aGlzLm9mZnNldCAhPSBudWxsKSB0aGlzLm9mZnNldC5yZW1vdmVD
b25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworfQorCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBl
Lm1hcmtJbnB1dHMgPSBmdW5jdGlvbiAobWFyaykgeworICBTY2FsZUNvbnN0cmFpbnQuc3VwZXJD
b25zdHJ1Y3Rvci5wcm90b3R5cGUubWFya0lucHV0cy5jYWxsKHRoaXMsIG1hcmspOworICB0aGlz
LnNjYWxlLm1hcmsgPSB0aGlzLm9mZnNldC5tYXJrID0gbWFyazsKK30KKworLyoqCisgKiBFbmZv
cmNlIHRoaXMgY29uc3RyYWludC4gQXNzdW1lIHRoYXQgaXQgaXMgc2F0aXNmaWVkLgorICovCitT
Y2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgIGlmICh0
aGlzLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb24uRk9SV0FSRCkgeworICAgIHRoaXMudjIudmFsdWUg
PSB0aGlzLnYxLnZhbHVlICogdGhpcy5zY2FsZS52YWx1ZSArIHRoaXMub2Zmc2V0LnZhbHVlOwor
ICB9IGVsc2UgeworICAgIHRoaXMudjEudmFsdWUgPSAodGhpcy52Mi52YWx1ZSAtIHRoaXMub2Zm
c2V0LnZhbHVlKSAvIHRoaXMuc2NhbGUudmFsdWU7CisgIH0KK30KKworLyoqCisgKiBDYWxjdWxh
dGUgdGhlIHdhbGthYm91dCBzdHJlbmd0aCwgdGhlIHN0YXkgZmxhZywgYW5kLCBpZiBpdCBpcwor
ICogJ3N0YXknLCB0aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBvZiB0aGlzIGNvbnN0
cmFpbnQuIEFzc3VtZQorICogdGhpcyBjb25zdHJhaW50IGlzIHNhdGlzZmllZC4KKyAqLworU2Nh
bGVDb25zdHJhaW50LnByb3RvdHlwZS5yZWNhbGN1bGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgdmFy
IGlobiA9IHRoaXMuaW5wdXQoLi4uYXJncygpKSwgb3V0ID0gdGhpcy5vdXRwdXQoLi4uYXJncygp
KTsKKyAgb3V0LndhbGtTdHJlbmd0aCA9IFN0cmVuZ3RoLndlYWtlc3RPZiguLi5hcmdzKHRoaXMu
c3RyZW5ndGgsIGlobi53YWxrU3RyZW5ndGgpKTsKKyAgb3V0LnN0YXkgPSBpaG4uc3RheSAmJiB0
aGlzLnNjYWxlLnN0YXkgJiYgdGhpcy5vZmZzZXQuc3RheTsKKyAgaWYgKG91dC5zdGF5KSB0aGlz
LmV4ZWN1dGUoLi4uYXJncygpKTsKK30KKworLyogLS0tICoKKyAqIEUgcSB1IGEgbCBpIHQgIHkg
ICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKworLyoqCisgKiBDb25zdHJhaW5zIHR3
byB2YXJpYWJsZXMgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZS4KKyAqLworZnVuY3Rpb24gRXF1YWxp
dHlDb25zdHJhaW50KHZhcjEsIHZhcjIsIHN0cmVuZ3RoKSB7CisgIEVxdWFsaXR5Q29uc3RyYWlu
dC5zdXBlckNvbnN0cnVjdG9yLmNhbGwodGhpcywgdmFyMSwgdmFyMiwgc3RyZW5ndGgpOworfQor
CitFcXVhbGl0eUNvbnN0cmFpbnQuaW5oZXJpdHNGcm9tKC4uLmFyZ3MoQmluYXJ5Q29uc3RyYWlu
dCkpOworCisvKioKKyAqIEVuZm9yY2UgdGhpcyBjb25zdHJhaW50LiBBc3N1bWUgdGhhdCBpdCBp
cyBzYXRpc2ZpZWQuCisgKi8KK0VxdWFsaXR5Q29uc3RyYWludC5wcm90b3R5cGUuZXhlY3V0ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5vdXRwdXQoLi4uYXJncygpKS52YWx1ZSA9IHRoaXMuaW5w
dXQoLi4uYXJncygpKS52YWx1ZTsKK30KKworLyogLS0tICoKKyAqIFYgYSByIGkgYSBiIGwgZQor
ICogLS0tICovCisKKy8qKgorICogQSBjb25zdHJhaW5lZCB2YXJpYWJsZS4gSW4gYWRkaXRpb24g
dG8gaXRzIHZhbHVlLCBpdCBtYWludGFpbiB0aGUKKyAqIHN0cnVjdHVyZSBvZiB0aGUgY29uc3Ry
YWludCBncmFwaCwgdGhlIGN1cnJlbnQgZGF0YWZsb3cgZ3JhcGgsIGFuZAorICogdmFyaW91cyBw
YXJhbWV0ZXJzIG9mIGludGVyZXN0IHRvIHRoZSBEZWx0YUJsdWUgaW5jcmVtZW50YWwKKyAqIGNv
bnN0cmFpbnQgc29sdmVyLgorICoqLworZnVuY3Rpb24gVmFyaWFibGUobmFtZSwgaW5pdGlhbFZh
bHVlKSB7CisgIHRoaXMudmFsdWUgPSBpbml0aWFsVmFsdWUgfHwgMDsKKyAgdGhpcy5jb25zdHJh
aW50cyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOworICB0aGlzLmRldGVybWlu
ZWRCeSA9IG51bGw7CisgIHRoaXMubWFyayA9IDA7CisgIHRoaXMud2Fsa1N0cmVuZ3RoID0gU3Ry
ZW5ndGguV0VBS0VTVDsKKyAgdGhpcy5zdGF5ID0gdHJ1ZTsKKyAgdGhpcy5uYW1lID0gbmFtZTsK
K30KKworLyoqCisgKiBBZGQgdGhlIGdpdmVuIGNvbnN0cmFpbnQgdG8gdGhlIHNldCBvZiBhbGwg
Y29uc3RyYWludHMgdGhhdCByZWZlcgorICogdGhpcyB2YXJpYWJsZS4KKyAqLworVmFyaWFibGUu
cHJvdG90eXBlLmFkZENvbnN0cmFpbnQgPSBmdW5jdGlvbiAoYykgeworICB0aGlzLmNvbnN0cmFp
bnRzLmFkZCguLi5hcmdzKGMpKTsKK30KKworLyoqCisgKiBSZW1vdmVzIGFsbCB0cmFjZXMgb2Yg
YyBmcm9tIHRoaXMgdmFyaWFibGUuCisgKi8KK1ZhcmlhYmxlLnByb3RvdHlwZS5yZW1vdmVDb25z
dHJhaW50ID0gZnVuY3Rpb24gKGMpIHsKKyAgdGhpcy5jb25zdHJhaW50cy5yZW1vdmUoLi4uYXJn
cyhjKSk7CisgIGlmICh0aGlzLmRldGVybWluZWRCeSA9PSBjKSB0aGlzLmRldGVybWluZWRCeSA9
IG51bGw7Cit9CisKKy8qIC0tLSAqCisgKiBQIGwgYSBuIG4gZSByCisgKiAtLS0gKi8KKworLyoq
CisgKiBUaGUgRGVsdGFCbHVlIHBsYW5uZXIKKyAqLworZnVuY3Rpb24gUGxhbm5lcigpIHsKKyAg
dGhpcy5jdXJyZW50TWFyayA9IDA7Cit9CisKKy8qKgorICogQXR0ZW1wdCB0byBzYXRpc2Z5IHRo
ZSBnaXZlbiBjb25zdHJhaW50IGFuZCwgaWYgc3VjY2Vzc2Z1bCwKKyAqIGluY3JlbWVudGFsbHkg
dXBkYXRlIHRoZSBkYXRhZmxvdyBncmFwaC4gIERldGFpbHM6IElmIHNhdGlmeWluZworICogdGhl
IGNvbnN0cmFpbnQgaXMgc3VjY2Vzc2Z1bCwgaXQgbWF5IG92ZXJyaWRlIGEgd2Vha2VyIGNvbnN0
cmFpbnQKKyAqIG9uIGl0cyBvdXRwdXQuIFRoZSBhbGdvcml0aG0gYXR0ZW1wdHMgdG8gcmVzYXRp
c2Z5IHRoYXQKKyAqIGNvbnN0cmFpbnQgdXNpbmcgc29tZSBvdGhlciBtZXRob2QuIFRoaXMgcHJv
Y2VzcyBpcyByZXBlYXRlZAorICogdW50aWwgZWl0aGVyIGEpIGl0IHJlYWNoZXMgYSB2YXJpYWJs
ZSB0aGF0IHdhcyBub3QgcHJldmlvdXNseQorICogZGV0ZXJtaW5lZCBieSBhbnkgY29uc3RyYWlu
dCBvciBiKSBpdCByZWFjaGVzIGEgY29uc3RyYWludCB0aGF0CisgKiBpcyB0b28gd2VhayB0byBi
ZSBzYXRpc2ZpZWQgdXNpbmcgYW55IG9mIGl0cyBtZXRob2RzLiBUaGUKKyAqIHZhcmlhYmxlcyBv
ZiBjb25zdHJhaW50cyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQgYXJlIG1hcmtlZCB3aXRoCisg
KiBhIHVuaXF1ZSBtYXJrIHZhbHVlIHNvIHRoYXQgd2Uga25vdyB3aGVyZSB3ZSd2ZSBiZWVuLiBU
aGlzIGFsbG93cworICogdGhlIGFsZ29yaXRobSB0byBhdm9pZCBnZXR0aW5nIGludG8gYW4gaW5m
aW5pdGUgbG9vcCBldmVuIGlmIHRoZQorICogY29uc3RyYWludCBncmFwaCBoYXMgYW4gaW5hZHZl
cnRlbnQgY3ljbGUuCisgKi8KK1BsYW5uZXIucHJvdG90eXBlLmluY3JlbWVudGFsQWRkID0gZnVu
Y3Rpb24gKGMpIHsKKyAgdmFyIG1hcmsgPSB0aGlzLm5ld01hcmsoLi4uYXJncygpKTsKKyAgdmFy
IG92ZXJyaWRkZW4gPSBjLnNhdGlzZnkoLi4uYXJncyhtYXJrKSk7CisgIHdoaWxlIChvdmVycmlk
ZGVuICE9IG51bGwpCisgICAgb3ZlcnJpZGRlbiA9IG92ZXJyaWRkZW4uc2F0aXNmeSguLi5hcmdz
KG1hcmspKTsKK30KKworLyoqCisgKiBFbnRyeSBwb2ludCBmb3IgcmV0cmFjdGluZyBhIGNvbnN0
cmFpbnQuIFJlbW92ZSB0aGUgZ2l2ZW4KKyAqIGNvbnN0cmFpbnQgYW5kIGluY3JlbWVudGFsbHkg
dXBkYXRlIHRoZSBkYXRhZmxvdyBncmFwaC4KKyAqIERldGFpbHM6IFJldHJhY3RpbmcgdGhlIGdp
dmVuIGNvbnN0cmFpbnQgbWF5IGFsbG93IHNvbWUgY3VycmVudGx5CisgKiB1bnNhdGlzZmlhYmxl
IGRvd25zdHJlYW0gY29uc3RyYWludCB0byBiZSBzYXRpc2ZpZWQuIFdlIHRoZXJlZm9yZSBjb2xs
ZWN0CisgKiBhIGxpc3Qgb2YgdW5zYXRpc2ZpZWQgZG93bnN0cmVhbSBjb25zdHJhaW50cyBhbmQg
YXR0ZW1wdCB0bworICogc2F0aXNmeSBlYWNoIG9uZSBpbiB0dXJuLiBUaGlzIGxpc3QgaXMgdHJh
dmVyc2VkIGJ5IGNvbnN0cmFpbnQKKyAqIHN0cmVuZ3RoLCBzdHJvbmdlc3QgZmlyc3QsIGFzIGEg
aGV1cmlzdGljIGZvciBhdm9pZGluZworICogdW5uZWNlc3NhcmlseSBhZGRpbmcgYW5kIHRoZW4g
b3ZlcnJpZGluZyB3ZWFrIGNvbnN0cmFpbnRzLgorICogQXNzdW1lOiBjIGlzIHNhdGlzZmllZC4K
KyAqLworUGxhbm5lci5wcm90b3R5cGUuaW5jcmVtZW50YWxSZW1vdmUgPSBmdW5jdGlvbiAoYykg
eworICB2YXIgb3V0ID0gYy5vdXRwdXQoLi4uYXJncygpKTsKKyAgYy5tYXJrVW5zYXRpc2ZpZWQo
Li4uYXJncygpKTsKKyAgYy5yZW1vdmVGcm9tR3JhcGgoLi4uYXJncygpKTsKKyAgdmFyIHVuc2F0
aXNmaWVkID0gdGhpcy5yZW1vdmVQcm9wYWdhdGVGcm9tKC4uLmFyZ3Mob3V0KSk7CisgIHZhciBz
dHJlbmd0aCA9IFN0cmVuZ3RoLlJFUVVJUkVEOworICBkbyB7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB1bnNhdGlzZmllZC5zaXplKC4uLmFyZ3MoKSk7IGkrKykgeworICAgICAgdmFyIHUgPSB1
bnNhdGlzZmllZC5hdCguLi5hcmdzKGkpKTsKKyAgICAgIGlmICh1LnN0cmVuZ3RoID09IHN0cmVu
Z3RoKQorICAgICAgICB0aGlzLmluY3JlbWVudGFsQWRkKC4uLmFyZ3ModSkpOworICAgIH0KKyAg
ICBzdHJlbmd0aCA9IHN0cmVuZ3RoLm5leHRXZWFrZXIoLi4uYXJncygpKTsKKyAgfSB3aGlsZSAo
c3RyZW5ndGggIT0gU3RyZW5ndGguV0VBS0VTVCk7Cit9CisKKy8qKgorICogU2VsZWN0IGEgcHJl
dmlvdXNseSB1bnVzZWQgbWFyayB2YWx1ZS4KKyAqLworUGxhbm5lci5wcm90b3R5cGUubmV3TWFy
ayA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuICsrdGhpcy5jdXJyZW50TWFyazsKK30KKworLyoq
CisgKiBFeHRyYWN0IGEgcGxhbiBmb3IgcmVzYXRpc2ZhY3Rpb24gc3RhcnRpbmcgZnJvbSB0aGUg
Z2l2ZW4gc291cmNlCisgKiBjb25zdHJhaW50cywgdXN1YWxseSBhIHNldCBvZiBpbnB1dCBjb25z
dHJhaW50cy4gVGhpcyBtZXRob2QKKyAqIGFzc3VtZXMgdGhhdCBzdGF5IG9wdGltaXphdGlvbiBp
cyBkZXNpcmVkOyB0aGUgcGxhbiB3aWxsIGNvbnRhaW4KKyAqIG9ubHkgY29uc3RyYWludHMgd2hv
c2Ugb3V0cHV0IHZhcmlhYmxlcyBhcmUgbm90IHN0YXkuIENvbnN0cmFpbnRzCisgKiB0aGF0IGRv
IG5vIGNvbXB1dGF0aW9uLCBzdWNoIGFzIHN0YXkgYW5kIGVkaXQgY29uc3RyYWludHMsIGFyZQor
ICogbm90IGluY2x1ZGVkIGluIHRoZSBwbGFuLgorICogRGV0YWlsczogVGhlIG91dHB1dHMgb2Yg
YSBjb25zdHJhaW50IGFyZSBtYXJrZWQgd2hlbiBpdCBpcyBhZGRlZAorICogdG8gdGhlIHBsYW4g
dW5kZXIgY29uc3RydWN0aW9uLiBBIGNvbnN0cmFpbnQgbWF5IGJlIGFwcGVuZGVkIHRvCisgKiB0
aGUgcGxhbiB3aGVuIGFsbCBpdHMgaW5wdXQgdmFyaWFibGVzIGFyZSBrbm93bi4gQSB2YXJpYWJs
ZSBpcworICoga25vd24gaWYgZWl0aGVyIGEpIHRoZSB2YXJpYWJsZSBpcyBtYXJrZWQgKGluZGlj
YXRpbmcgdGhhdCBoYXMKKyAqIGJlZW4gY29tcHV0ZWQgYnkgYSBjb25zdHJhaW50IGFwcGVhcmlu
ZyBlYXJsaWVyIGluIHRoZSBwbGFuKSwgYikKKyAqIHRoZSB2YXJpYWJsZSBpcyAnc3RheScgKGku
ZS4gaXQgaXMgYSBjb25zdGFudCBhdCBwbGFuIGV4ZWN1dGlvbgorICogdGltZSksIG9yIGMpIHRo
ZSB2YXJpYWJsZSBpcyBub3QgZGV0ZXJtaW5lZCBieSBhbnkKKyAqIGNvbnN0cmFpbnQuIFRoZSBs
YXN0IHByb3Zpc2lvbiBpcyBmb3IgcGFzdCBzdGF0ZXMgb2YgaGlzdG9yeQorICogdmFyaWFibGVz
LCB3aGljaCBhcmUgbm90IHN0YXkgYnV0IHdoaWNoIGFyZSBhbHNvIG5vdCBjb21wdXRlZCBieQor
ICogYW55IGNvbnN0cmFpbnQuCisgKiBBc3N1bWU6IHNvdXJjZXMgYXJlIGFsbCBzYXRpc2ZpZWQu
CisgKi8KK1BsYW5uZXIucHJvdG90eXBlLm1ha2VQbGFuID0gZnVuY3Rpb24gKHNvdXJjZXMpIHsK
KyAgdmFyIG1hcmsgPSB0aGlzLm5ld01hcmsoLi4uYXJncygpKTsKKyAgdmFyIHBsYW4gPSBuZXcg
UGxhbiguLi5hcmdzKCkpOworICB2YXIgdG9kbyA9IHNvdXJjZXM7CisgIHdoaWxlICh0b2RvLnNp
emUoLi4uYXJncygpKSA+IDApIHsKKyAgICB2YXIgYyA9IHRvZG8ucmVtb3ZlRmlyc3QoLi4uYXJn
cygpKTsKKyAgICBpZiAoYy5vdXRwdXQoLi4uYXJncygpKS5tYXJrICE9IG1hcmsgJiYgYy5pbnB1
dHNLbm93biguLi5hcmdzKG1hcmspKSkgeworICAgICAgcGxhbi5hZGRDb25zdHJhaW50KC4uLmFy
Z3MoYykpOworICAgICAgYy5vdXRwdXQoLi4uYXJncygpKS5tYXJrID0gbWFyazsKKyAgICAgIHRo
aXMuYWRkQ29uc3RyYWludHNDb25zdW1pbmdUbyguLi5hcmdzKGMub3V0cHV0KC4uLmFyZ3MoKSks
IHRvZG8pKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHBsYW47Cit9CisKKy8qKgorICogRXh0cmFj
dCBhIHBsYW4gZm9yIHJlc2F0aXNmeWluZyBzdGFydGluZyBmcm9tIHRoZSBvdXRwdXQgb2YgdGhl
CisgKiBnaXZlbiBjb25zdHJhaW50cywgdXN1YWxseSBhIHNldCBvZiBpbnB1dCBjb25zdHJhaW50
cy4KKyAqLworUGxhbm5lci5wcm90b3R5cGUuZXh0cmFjdFBsYW5Gcm9tQ29uc3RyYWludHMgPSBm
dW5jdGlvbiAoY29uc3RyYWludHMpIHsKKyAgdmFyIHNvdXJjZXMgPSBuZXcgT3JkZXJlZENvbGxl
Y3Rpb24oLi4uYXJncygpKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25zdHJhaW50cy5zaXpl
KC4uLmFyZ3MoKSk7IGkrKykgeworICAgIHZhciBjID0gY29uc3RyYWludHMuYXQoLi4uYXJncyhp
KSk7CisgICAgaWYgKGMuaXNJbnB1dCguLi5hcmdzKCkpICYmIGMuaXNTYXRpc2ZpZWQoLi4uYXJn
cygpKSkKKyAgICAgIC8vIG5vdCBpbiBwbGFuIGFscmVhZHkgYW5kIGVsaWdpYmxlIGZvciBpbmNs
dXNpb24KKyAgICAgIHNvdXJjZXMuYWRkKC4uLmFyZ3MoYykpOworICB9CisgIHJldHVybiB0aGlz
Lm1ha2VQbGFuKC4uLmFyZ3Moc291cmNlcykpOworfQorCisvKioKKyAqIFJlY29tcHV0ZSB0aGUg
d2Fsa2Fib3V0IHN0cmVuZ3RocyBhbmQgc3RheSBmbGFncyBvZiBhbGwgdmFyaWFibGVzCisgKiBk
b3duc3RyZWFtIG9mIHRoZSBnaXZlbiBjb25zdHJhaW50IGFuZCByZWNvbXB1dGUgdGhlIGFjdHVh
bAorICogdmFsdWVzIG9mIGFsbCB2YXJpYWJsZXMgd2hvc2Ugc3RheSBmbGFnIGlzIHRydWUuIElm
IGEgY3ljbGUgaXMKKyAqIGRldGVjdGVkLCByZW1vdmUgdGhlIGdpdmVuIGNvbnN0cmFpbnQgYW5k
IGFuc3dlcgorICogZmFsc2UuIE90aGVyd2lzZSwgYW5zd2VyIHRydWUuCisgKiBEZXRhaWxzOiBD
eWNsZXMgYXJlIGRldGVjdGVkIHdoZW4gYSBtYXJrZWQgdmFyaWFibGUgaXMKKyAqIGVuY291bnRl
cmVkIGRvd25zdHJlYW0gb2YgdGhlIGdpdmVuIGNvbnN0cmFpbnQuIFRoZSBzZW5kZXIgaXMKKyAq
IGFzc3VtZWQgdG8gaGF2ZSBtYXJrZWQgdGhlIGlucHV0cyBvZiB0aGUgZ2l2ZW4gY29uc3RyYWlu
dCB3aXRoCisgKiB0aGUgZ2l2ZW4gbWFyay4gVGh1cywgZW5jb3VudGVyaW5nIGEgbWFya2VkIG5v
ZGUgZG93bnN0cmVhbSBvZgorICogdGhlIG91dHB1dCBjb25zdHJhaW50IG1lYW5zIHRoYXQgdGhl
cmUgaXMgYSBwYXRoIGZyb20gdGhlCisgKiBjb25zdHJhaW50J3Mgb3V0cHV0IHRvIG9uZSBvZiBp
dHMgaW5wdXRzLgorICovCitQbGFubmVyLnByb3RvdHlwZS5hZGRQcm9wYWdhdGUgPSBmdW5jdGlv
biAoYywgbWFyaykgeworICB2YXIgdG9kbyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdz
KCkpOworICB0b2RvLmFkZCguLi5hcmdzKGMpKTsKKyAgd2hpbGUgKHRvZG8uc2l6ZSguLi5hcmdz
KCkpID4gMCkgeworICAgIHZhciBkID0gdG9kby5yZW1vdmVGaXJzdCguLi5hcmdzKCkpOworICAg
IGlmIChkLm91dHB1dCguLi5hcmdzKCkpLm1hcmsgPT0gbWFyaykgeworICAgICAgdGhpcy5pbmNy
ZW1lbnRhbFJlbW92ZSguLi5hcmdzKGMpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgZC5yZWNhbGN1bGF0ZSguLi5hcmdzKCkpOworICAgIHRoaXMuYWRkQ29uc3RyYWludHNDb25z
dW1pbmdUbyguLi5hcmdzKGQub3V0cHV0KC4uLmFyZ3MoKSksIHRvZG8pKTsKKyAgfQorICByZXR1
cm4gdHJ1ZTsKK30KKworCisvKioKKyAqIFVwZGF0ZSB0aGUgd2Fsa2Fib3V0IHN0cmVuZ3RocyBh
bmQgc3RheSBmbGFncyBvZiBhbGwgdmFyaWFibGVzCisgKiBkb3duc3RyZWFtIG9mIHRoZSBnaXZl
biBjb25zdHJhaW50LiBBbnN3ZXIgYSBjb2xsZWN0aW9uIG9mCisgKiB1bnNhdGlzZmllZCBjb25z
dHJhaW50cyBzb3J0ZWQgaW4gb3JkZXIgb2YgZGVjcmVhc2luZyBzdHJlbmd0aC4KKyAqLworUGxh
bm5lci5wcm90b3R5cGUucmVtb3ZlUHJvcGFnYXRlRnJvbSA9IGZ1bmN0aW9uIChvdXQpIHsKKyAg
b3V0LmRldGVybWluZWRCeSA9IG51bGw7CisgIG91dC53YWxrU3RyZW5ndGggPSBTdHJlbmd0aC5X
RUFLRVNUOworICBvdXQuc3RheSA9IHRydWU7CisgIHZhciB1bnNhdGlzZmllZCA9IG5ldyBPcmRl
cmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOworICB2YXIgdG9kbyA9IG5ldyBPcmRlcmVkQ29sbGVj
dGlvbiguLi5hcmdzKCkpOworICB0b2RvLmFkZCguLi5hcmdzKG91dCkpOworICB3aGlsZSAodG9k
by5zaXplKC4uLmFyZ3MoKSkgPiAwKSB7CisgICAgdmFyIHYgPSB0b2RvLnJlbW92ZUZpcnN0KC4u
LmFyZ3MoKSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2LmNvbnN0cmFpbnRzLnNpemUoLi4u
YXJncygpKTsgaSsrKSB7CisgICAgICB2YXIgYyA9IHYuY29uc3RyYWludHMuYXQoLi4uYXJncyhp
KSk7CisgICAgICBpZiAoIWMuaXNTYXRpc2ZpZWQoLi4uYXJncygpKSkKKyAgICAgICAgdW5zYXRp
c2ZpZWQuYWRkKC4uLmFyZ3MoYykpOworICAgIH0KKyAgICB2YXIgZGV0ZXJtaW5pbmcgPSB2LmRl
dGVybWluZWRCeTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHYuY29uc3RyYWludHMuc2l6ZSgu
Li5hcmdzKCkpOyBpKyspIHsKKyAgICAgIHZhciBuZXh0ID0gdi5jb25zdHJhaW50cy5hdCguLi5h
cmdzKGkpKTsKKyAgICAgIGlmIChuZXh0ICE9IGRldGVybWluaW5nICYmIG5leHQuaXNTYXRpc2Zp
ZWQoLi4uYXJncygpKSkgeworICAgICAgICBuZXh0LnJlY2FsY3VsYXRlKC4uLmFyZ3MoKSk7Cisg
ICAgICAgIHRvZG8uYWRkKC4uLmFyZ3MobmV4dC5vdXRwdXQoLi4uYXJncygpKSkpOworICAgICAg
fQorICAgIH0KKyAgfQorICByZXR1cm4gdW5zYXRpc2ZpZWQ7Cit9CisKK1BsYW5uZXIucHJvdG90
eXBlLmFkZENvbnN0cmFpbnRzQ29uc3VtaW5nVG8gPSBmdW5jdGlvbiAodiwgY29sbCkgeworICB2
YXIgZGV0ZXJtaW5pbmcgPSB2LmRldGVybWluZWRCeTsKKyAgdmFyIGNjID0gdi5jb25zdHJhaW50
czsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYy5zaXplKC4uLmFyZ3MoKSk7IGkrKykgeworICAg
IHZhciBjID0gY2MuYXQoLi4uYXJncyhpKSk7CisgICAgaWYgKGMgIT0gZGV0ZXJtaW5pbmcgJiYg
Yy5pc1NhdGlzZmllZCguLi5hcmdzKCkpKQorICAgICAgY29sbC5hZGQoLi4uYXJncyhjKSk7Cisg
IH0KK30KKworLyogLS0tICoKKyAqIFAgbCBhIG4KKyAqIC0tLSAqLworCisvKioKKyAqIEEgUGxh
biBpcyBhbiBvcmRlcmVkIGxpc3Qgb2YgY29uc3RyYWludHMgdG8gYmUgZXhlY3V0ZWQgaW4gc2Vx
dWVuY2UKKyAqIHRvIHJlc2F0aXNmeSBhbGwgY3VycmVudGx5IHNhdGlzZmlhYmxlIGNvbnN0cmFp
bnRzIGluIHRoZSBmYWNlIG9mCisgKiBvbmUgb3IgbW9yZSBjaGFuZ2luZyBpbnB1dHMuCisgKi8K
K2Z1bmN0aW9uIFBsYW4oKSB7CisgIHRoaXMudiA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5h
cmdzKCkpOworfQorCitQbGFuLnByb3RvdHlwZS5hZGRDb25zdHJhaW50ID0gZnVuY3Rpb24gKGMp
IHsKKyAgdGhpcy52LmFkZCguLi5hcmdzKGMpKTsKK30KKworUGxhbi5wcm90b3R5cGUuc2l6ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMudi5zaXplKC4uLmFyZ3MoKSk7Cit9CisKK1Bs
YW4ucHJvdG90eXBlLmNvbnN0cmFpbnRBdCA9IGZ1bmN0aW9uIChpbmRleCkgeworICByZXR1cm4g
dGhpcy52LmF0KC4uLmFyZ3MoaW5kZXgpKTsKK30KKworUGxhbi5wcm90b3R5cGUuZXhlY3V0ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNpemUoLi4uYXJncygp
KTsgaSsrKSB7CisgICAgdmFyIGMgPSB0aGlzLmNvbnN0cmFpbnRBdCguLi5hcmdzKGkpKTsKKyAg
ICBjLmV4ZWN1dGUoLi4uYXJncygpKTsKKyAgfQorfQorCisvKiAtLS0gKgorICogTSBhIGkgbgor
ICogLS0tICovCisKKy8qKgorICogVGhpcyBpcyB0aGUgc3RhbmRhcmQgRGVsdGFCbHVlIGJlbmNo
bWFyay4gQSBsb25nIGNoYWluIG9mIGVxdWFsaXR5CisgKiBjb25zdHJhaW50cyBpcyBjb25zdHJ1
Y3RlZCB3aXRoIGEgc3RheSBjb25zdHJhaW50IG9uIG9uZSBlbmQuIEFuCisgKiBlZGl0IGNvbnN0
cmFpbnQgaXMgdGhlbiBhZGRlZCB0byB0aGUgb3Bwb3NpdGUgZW5kIGFuZCB0aGUgdGltZSBpcwor
ICogbWVhc3VyZWQgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgdGhpcyBjb25zdHJhaW50LCBhbmQg
ZXh0cmFjdGluZworICogYW5kIGV4ZWN1dGluZyBhIGNvbnN0cmFpbnQgc2F0aXNmYWN0aW9uIHBs
YW4uIFRoZXJlIGFyZSB0d28gY2FzZXMuCisgKiBJbiBjYXNlIDEsIHRoZSBhZGRlZCBjb25zdHJh
aW50IGlzIHN0cm9uZ2VyIHRoYW4gdGhlIHN0YXkKKyAqIGNvbnN0cmFpbnQgYW5kIHZhbHVlcyBt
dXN0IHByb3BhZ2F0ZSBkb3duIHRoZSBlbnRpcmUgbGVuZ3RoIG9mIHRoZQorICogY2hhaW4uIElu
IGNhc2UgMiwgdGhlIGFkZGVkIGNvbnN0cmFpbnQgaXMgd2Vha2VyIHRoYW4gdGhlIHN0YXkKKyAq
IGNvbnN0cmFpbnQgc28gaXQgY2Fubm90IGJlIGFjY29tb2RhdGVkLiBUaGUgY29zdCBpbiB0aGlz
IGNhc2UgaXMsCisgKiBvZiBjb3Vyc2UsIHZlcnkgbG93LiBUeXBpY2FsIHNpdHVhdGlvbnMgbGll
IHNvbWV3aGVyZSBiZXR3ZWVuIHRoZXNlCisgKiB0d28gZXh0cmVtZXMuCisgKi8KK2Z1bmN0aW9u
IGNoYWluVGVzdChuKSB7CisgIHBsYW5uZXIgPSBuZXcgUGxhbm5lciguLi5hcmdzKCkpOworICB2
YXIgcHJldiA9IG51bGwsIGZpcnN0ID0gbnVsbCwgbGFzdCA9IG51bGw7CisKKyAgLy8gQnVpbGQg
Y2hhaW4gb2YgbiBlcXVhbGl0eSBjb25zdHJhaW50cworICBmb3IgKHZhciBpID0gMDsgaSA8PSBu
OyBpKyspIHsKKyAgICB2YXIgbmFtZSA9ICJ2IiArIGk7CisgICAgdmFyIHYgPSBuZXcgVmFyaWFi
bGUoLi4uYXJncyhuYW1lKSk7CisgICAgaWYgKHByZXYgIT0gbnVsbCkKKyAgICAgIG5ldyBFcXVh
bGl0eUNvbnN0cmFpbnQoLi4uYXJncyhwcmV2LCB2LCBTdHJlbmd0aC5SRVFVSVJFRCkpOworICAg
IGlmIChpID09IDApIGZpcnN0ID0gdjsKKyAgICBpZiAoaSA9PSBuKSBsYXN0ID0gdjsKKyAgICBw
cmV2ID0gdjsKKyAgfQorCisgIG5ldyBTdGF5Q29uc3RyYWludCguLi5hcmdzKGxhc3QsIFN0cmVu
Z3RoLlNUUk9OR19ERUZBVUxUKSk7CisgIHZhciBlZGl0ID0gbmV3IEVkaXRDb25zdHJhaW50KC4u
LmFyZ3MoZmlyc3QsIFN0cmVuZ3RoLlBSRUZFUlJFRCkpOworICB2YXIgZWRpdHMgPSBuZXcgT3Jk
ZXJlZENvbGxlY3Rpb24oLi4uYXJncygpKTsKKyAgZWRpdHMuYWRkKC4uLmFyZ3MoZWRpdCkpOwor
ICB2YXIgcGxhbiA9IHBsYW5uZXIuZXh0cmFjdFBsYW5Gcm9tQ29uc3RyYWludHMoLi4uYXJncyhl
ZGl0cykpOworICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgZmlyc3QudmFs
dWUgPSBpOworICAgIHBsYW4uZXhlY3V0ZSguLi5hcmdzKCkpOworICAgIGlmIChsYXN0LnZhbHVl
ICE9IGkpCisgICAgICBhbGVydCguLi5hcmdzKCJDaGFpbiB0ZXN0IGZhaWxlZC4iKSk7CisgIH0K
K30KKworLyoqCisgKiBUaGlzIHRlc3QgY29uc3RydWN0cyBhIHR3byBzZXRzIG9mIHZhcmlhYmxl
cyByZWxhdGVkIHRvIGVhY2gKKyAqIG90aGVyIGJ5IGEgc2ltcGxlIGxpbmVhciB0cmFuc2Zvcm1h
dGlvbiAoc2NhbGUgYW5kIG9mZnNldCkuIFRoZQorICogdGltZSBpcyBtZWFzdXJlZCB0byBjaGFu
Z2UgYSB2YXJpYWJsZSBvbiBlaXRoZXIgc2lkZSBvZiB0aGUKKyAqIG1hcHBpbmcgYW5kIHRvIGNo
YW5nZSB0aGUgc2NhbGUgYW5kIG9mZnNldCBmYWN0b3JzLgorICovCitmdW5jdGlvbiBwcm9qZWN0
aW9uVGVzdChuKSB7CisgIHBsYW5uZXIgPSBuZXcgUGxhbm5lciguLi5hcmdzKCkpOworICB2YXIg
c2NhbGUgPSBuZXcgVmFyaWFibGUoLi4uYXJncygic2NhbGUiLCAxMCkpOworICB2YXIgb2Zmc2V0
ID0gbmV3IFZhcmlhYmxlKC4uLmFyZ3MoIm9mZnNldCIsIDEwMDApKTsKKyAgdmFyIHNyYyA9IG51
bGwsIGRzdCA9IG51bGw7CisKKyAgdmFyIGRlc3RzID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKC4u
LmFyZ3MoKSk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgc3JjID0gbmV3
IFZhcmlhYmxlKC4uLmFyZ3MoInNyYyIgKyBpLCBpKSk7CisgICAgZHN0ID0gbmV3IFZhcmlhYmxl
KC4uLmFyZ3MoImRzdCIgKyBpLCBpKSk7CisgICAgZGVzdHMuYWRkKC4uLmFyZ3MoZHN0KSk7Cisg
ICAgbmV3IFN0YXlDb25zdHJhaW50KC4uLmFyZ3Moc3JjLCBTdHJlbmd0aC5OT1JNQUwpKTsKKyAg
ICBuZXcgU2NhbGVDb25zdHJhaW50KC4uLmFyZ3Moc3JjLCBzY2FsZSwgb2Zmc2V0LCBkc3QsIFN0
cmVuZ3RoLlJFUVVJUkVEKSk7CisgIH0KKworICBjaGFuZ2UoLi4uYXJncyhzcmMsIDE3KSk7Cisg
IGlmIChkc3QudmFsdWUgIT0gMTE3MCkgYWxlcnQoLi4uYXJncygiUHJvamVjdGlvbiAxIGZhaWxl
ZCIpKTsKKyAgY2hhbmdlKC4uLmFyZ3MoZHN0LCAxMDUwKSk7CisgIGlmIChzcmMudmFsdWUgIT0g
NSkgYWxlcnQoLi4uYXJncygiUHJvamVjdGlvbiAyIGZhaWxlZCIpKTsKKyAgY2hhbmdlKC4uLmFy
Z3Moc2NhbGUsIDUpKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CisgICAg
aWYgKGRlc3RzLmF0KC4uLmFyZ3MoaSkpLnZhbHVlICE9IGkgKiA1ICsgMTAwMCkKKyAgICAgIGFs
ZXJ0KC4uLmFyZ3MoIlByb2plY3Rpb24gMyBmYWlsZWQiKSk7CisgIH0KKyAgY2hhbmdlKC4uLmFy
Z3Mob2Zmc2V0LCAyMDAwKSk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgewor
ICAgIGlmIChkZXN0cy5hdCguLi5hcmdzKGkpKS52YWx1ZSAhPSBpICogNSArIDIwMDApCisgICAg
ICBhbGVydCguLi5hcmdzKCJQcm9qZWN0aW9uIDQgZmFpbGVkIikpOworICB9Cit9CisKK2Z1bmN0
aW9uIGNoYW5nZSh2LCBuZXdWYWx1ZSkgeworICB2YXIgZWRpdCA9IG5ldyBFZGl0Q29uc3RyYWlu
dCguLi5hcmdzKHYsIFN0cmVuZ3RoLlBSRUZFUlJFRCkpOworICB2YXIgZWRpdHMgPSBuZXcgT3Jk
ZXJlZENvbGxlY3Rpb24oLi4uYXJncygpKTsKKyAgZWRpdHMuYWRkKC4uLmFyZ3MoZWRpdCkpOwor
ICB2YXIgcGxhbiA9IHBsYW5uZXIuZXh0cmFjdFBsYW5Gcm9tQ29uc3RyYWludHMoLi4uYXJncyhl
ZGl0cykpOworICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICB2LnZhbHVlID0g
bmV3VmFsdWU7CisgICAgcGxhbi5leGVjdXRlKC4uLmFyZ3MoKSk7CisgIH0KKyAgZWRpdC5kZXN0
cm95Q29uc3RyYWludCguLi5hcmdzKCkpOworfQorCisvLyBHbG9iYWwgdmFyaWFibGUgaG9sZGlu
ZyB0aGUgY3VycmVudCBwbGFubmVyLgordmFyIHBsYW5uZXIgPSBudWxsOworCitmdW5jdGlvbiBk
ZWx0YUJsdWUoKSB7CisgIGNoYWluVGVzdCguLi5hcmdzKDEwMCkpOworICBwcm9qZWN0aW9uVGVz
dCguLi5hcmdzKDEwMCkpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDMwOyArK2kpCisgICAg
ZGVsdGFCbHVlKC4uLmFyZ3MoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246819</attachid>
            <date>2015-02-18 09:06:36 -0800</date>
            <delta_ts>2015-02-18 09:06:36 -0800</delta_ts>
            <desc>ARM64 works</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>299872</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxOCBA
QAorMjAxNS0wMi0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgcmVhbGx5IHN1cHBvcnQgdmFyYXJncworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
T2xpdmVyIEh1bnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgY29tcHJlaGVuc2l2ZSB2
YXJhcmcgY2FsbCBzdXBwb3J0IHRvIHRoZSBERkcgYW5kIEZUTCBjb21waWxlcnMuIFByZXZpb3Vz
bHksIGlmIGEKKyAgICAgICAgZnVuY3Rpb24gaGFkIGEgdmFyYXJncyBjYWxsLCB0aGVuIGl0IGNv
dWxkIG9ubHkgYmUgY29tcGlsZWQgaWYgdGhhdCB2YXJhcmdzIGNhbGwgd2FzIGp1c3QKKyAgICAg
ICAgZm9yd2FyZGluZyBhcmd1bWVudHMgYW5kIHdlIHdlcmUgaW5saW5pbmcgdGhlIGZ1bmN0aW9u
IHJhdGhlciB0aGFuIGNvbXBpbGluZyBpdCBkaXJlY3RseS4gQWxzbywKKyAgICAgICAgb25seSB2
YXJhcmdzIGNhbGxzIHdlcmUgZGVhbHQgd2l0aDsgdmFyYXJncyBjb25zdHJ1Y3RzIHdlcmUgbm90
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBsaWZ0cyBhbGwgb2YgdGhvc2UgcmVzdHJpY3Rpb25z
LiBFdmVyeSB2YXJhcmdzIGNhbGwgb3IgY29uc3RydWN0IGNhbiBub3cgYmUgY29tcGlsZWQgYnkg
Ym90aAorICAgICAgICB0aGUgREZHIGFuZCB0aGUgRlRMLiBUaG9zZSBjYWxscyBjYW4gYWxzbyBi
ZSBpbmxpbmVkLCB0b28gLSBwcm92aWRlZCB0aGF0IHByb2ZpbGluZyBnaXZlcyB1cyBhCisgICAg
ICAgIHNlbnNpYmxlIGJvdW5kIG9uIGFyZ3VtZW50cyBsaXN0IGxlbmd0aC4gV2hlbiB3ZSBpbmxp
bmUgYSB2YXJhcmdzIGNhbGwsIHRoZSBhY3Qgb2YgbG9hZGluZyB0aGUKKyAgICAgICAgdmFyYXJn
cyBpcyBub3cgbWFkZSBleHBsaWNpdCBpbiBJUi4gSSBiZWxpZXZlIHRoYXQgd2UgaGF2ZSBlbm91
Z2ggSVIgbWFjaGluZXJ5IGluIHBsYWNlIHRoYXQgd2UKKyAgICAgICAgd291bGQgYmUgYWJsZSB0
byBkbyB0aGUgYXJndW1lbnRzIGZvcndhcmRpbmcgb3B0aW1pemF0aW9uIGFzIGFuIElSIHRyYW5z
Zm9ybWF0aW9uLiBUaGlzIHBhdGNoCisgICAgICAgIGRvZXNuJ3QgaW1wbGVtZW50IHRoYXQgeWV0
LCBhbmQga2VlcHMgdGhlIG9sZCBieXRlY29kZS1iYXNlZCB2YXJhcmdzIGFyZ3VtZW50IGZvcndh
cmRpbmcKKyAgICAgICAgb3B0aW1pemF0aW9uIGZvciBub3cuCisgICAgICAgIAorICAgICAgICBU
aGVyZSBhcmUgdGhyZWUgbWFqb3IgSVIgZmVhdHVyZXMgaW50cm9kdWNlZCBpbiB0aGlzIHBhdGNo
OgorICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmFyZ3MvQ29uc3RydWN0VmFyYXJnczogdGhlc2Ug
YXJlIGxpa2UgQ2FsbC9Db25zdHJ1Y3QgZXhjZXB0IHRoYXQgdGhleSB0YWtlIGFuIGFyZ3VtZW50
cworICAgICAgICBhcnJheSByYXRoZXIgdGhhbiBhIGxpc3Qgb2YgYXJndW1lbnRzLiBDdXJyZW50
bHksIHRoZXkgc3BsYXQgdGhpcyBhcmd1bWVudHMgYXJyYXkgb250byB0aGUgc3RhY2sKKyAgICAg
ICAgdXNpbmcgdGhlIHNhbWUgYmFzaWMgdGVjaG5pcXVlIGFzIHRoZSBiYXNlbGluZSBKSVQgaGFz
IGFsd2F5cyBkb25lLiBFeGNlcHQsIHRoZXNlIG5vZGVzIGluZGljYXRlCisgICAgICAgIHRoYXQg
d2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIGRvaW5nIHRoZSBub24tZXNjYXBpbmcgImFyZ3VtZW50
cyIgb3B0aW1pemF0aW9uLgorICAgICAgICAKKyAgICAgICAgQ2FsbEZvcndhcmRWYXJhcmdzOiB0
aGlzIGlzIGEgZm9ybSBvZiBDYWxsVmFyYXJncyB0aGF0IGp1c3QgZG9lcyB0aGUgbm9uLWVzY2Fw
aW5nICJhcmd1bWVudHMiCisgICAgICAgIG9wdGltaXphdGlvbiwgYWthIGZvcndhcmRpbmcgYXJn
dW1lbnRzLiBJdCdzIHNvbWV3aGF0IGxhenkgdGhhdCB0aGlzIGRvZXNuJ3QgaW5jbHVkZQorICAg
ICAgICBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncywgYnV0IHRoZSByZWFzb24gaXMgdGhhdCBvbmNl
IHdlIGVsaW1pbmF0ZSB0aGUgbGF6eSB0ZWFyLW9mZiBmb3IKKyAgICAgICAgYXJndW1lbnRzLCB0
aGlzIHdob2xlIHRoaW5nIHdpbGwgaGF2ZSB0byBiZSB0d2Vha2VkIC0gYW5kIGZvciBub3cgZm9y
d2FyZGluZyBvbiBjb25zdHJ1Y3QgaXMganVzdAorICAgICAgICBub3QgaW1wb3J0YW50IGluIGJl
bmNobWFya3MuIENvbnN0cnVjdFZhcmFyZ3Mgd2lsbCBzdGlsbCBkbyBmb3J3YXJkaW5nLCBqdXN0
IG5vdCBpbmxpbmVkLgorICAgICAgICAKKyAgICAgICAgTG9hZFZhcmFyZ3M6IGxvYWRzIGFsbCBl
bGVtZW50cyBvdXQgb2YgYW4gYXJyYXkgb250byB0aGUgc3RhY2sgaW4gYSBtYW5uZXIgc3VpdGFi
bGUgZm9yIGEgdmFyYXJncworICAgICAgICBjYWxsLiBUaGlzIGlzIHVzZWQgb25seSB3aGVuIGEg
dmFyYXJncyBjYWxsIChvciBjb25zdHJ1Y3QpIHdhcyBpbmxpbmVkLiBUaGUgYnl0ZWNvZGUgcGFy
c2VyIHdpbGwKKyAgICAgICAgbWFrZSByb29tIG9uIHRoZSBzdGFjayBmb3IgdGhlIGFyZ3VtZW50
cywgYW5kIHdpbGwgdXNlIExvYWRWYXJhcnMgdG8gcHV0IHRob3NlIGFyZ3VtZW50cyBpbnRvCisg
ICAgICAgIHBsYWNlLgorICAgICAgICAKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIGNv
bnNpZGVyIGFkZGluZyBzdHJlbmd0aCByZWR1Y3Rpb25zIGxpa2U6CisgICAgICAgIAorICAgICAg
ICAtIElmIENhbGxWYXJhcmdzL0NvbnN0cnVjdFZhcmFyZ3Mgc2VlIGFuIGFycmF5IG9mIGtub3du
IHNpemUgd2l0aCBrbm93biBlbGVtZW50cywgdHVybiB0aGVtIGludG8KKyAgICAgICAgICBDYWxs
L0NvbnN0cnVjdC4KKyAgICAgICAgCisgICAgICAgIC0gSWYgQ2FsbFZhcmFyZ3MvQ29uc3RydWN0
VmFyYXJncyBhcmUgcGFzc2VkIGFuIHVubW9kaWZpZWQsIHVuZXNjYXBlZCBBcmd1bWVudHMgb2Jq
ZWN0LCB0aGVuCisgICAgICAgICAgdHVybiB0aGVtIGludG8gQ2FsbEZvcndhcmRWYXJhcmdzL0Nv
bnN0cnVjdEZvcndhcmRWYXJhcmdzLgorICAgICAgICAKKyAgICAgICAgLSBJZiBMb2FkVmFyYXJn
cyBzZWVzIGFuIGFycmF5IG9mIGtub3duIHNpemUsIHRoZW4gdHVybiBpdCBpbnRvIGEgc2VxdWVu
Y2Ugb2YgR2V0QnlWYWxzIGFuZAorICAgICAgICAgIFB1dExvY2Fscy4KKyAgICAgICAgCisgICAg
ICAgIC0gSWYgTG9hZFZhcmFyZ3Mgc2VlcyBhbiB1bm1vZGlmaWVkLCB1bmVzY2FwZWQgQXJndW1l
bnRzIG9iamVjdCwgdGhlbiB0dXJuIGl0IGludG8gc29tZXRoaW5nIGxpa2UKKyAgICAgICAgICBM
b2FkRm9yd2FyZFZhcmFyZ3MuCisgICAgICAgIAorICAgICAgICAtIElmIENhbGxWYXJhcmdzL0Nv
bnN0cnVjdFZhcmFyZ3MvTG9hZFZhcmFyZ3Mgc2VlIHRoZSByZXN1bHQgb2YgYSBzcGxpY2UgKG9y
IG90aGVyIEFycmF5CisgICAgICAgICAgcHJvdG90eXBlIGZ1bmN0aW9uKSwgdGhlbiBkbyB0aGUg
c3BsaWNlIGFuZCB2YXJhcmdzIGxvYWRpbmcgaW4gb25lIGdvIChtYXliZSB2aWEgYSBuZXcgbm9k
ZQorICAgICAgICAgIHR5cGUpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
Ojpyc2hpZnRQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6dXJzaGlmdFB0cik6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6dXJzaGlmdDY0KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OnVyc2hpZnQ2NCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAg
ICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnNocnFfaThyKToKKyAgICAgICAgKiBieXRlY29kZS9D
YWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpDYWxsTGlua0luZm8p
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1
czo6c2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1
czo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaDoKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtTdGF0dXM6Om1heE51bUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rU3RhdHVzOjpzZXRJc1Byb3ZlZCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZU9yaWdpbi5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjp2
YXJhcmdzS2luZEZvcik6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6
YXRpb25LaW5kRm9yKToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Mp
OgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmlzTm9ybWFsQ2FsbCk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvRXhpdEtpbmQuY3BwOgorICAgICAgICAoSlNDOjpleGl0S2lu
ZFRvU3RyaW5nKToKKyAgICAgICAgKiBieXRlY29kZS9FeGl0S2luZC5oOgorICAgICAgICAqIGJ5
dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5Ojpk
dW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVWYXJhcmdzQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmlubGluaW5nQ29zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omlu
bGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9J
bmxpbmVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVUeXBlZEFycmF5Q29uc3Ry
dWN0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFu
dEludGVybmFsRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cmVtb3ZlTGFz
dE5vZGVGcm9tR3JhcGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjp1bmRvRnVuY3Rpb25DaGVja3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAg
ICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgorICAgICAgICAoSlNDOjpERkc6OmZ1bmN0aW9u
Q2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlv
bkZvcik6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmNwcDoKKyAgICAgICAgKFdU
Rjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAo
SlNDOjpERkc6OmNhbklubGluZSk6CisgICAgICAgIChKU0M6OkRGRzo6bGVhc3RVcHBlckJvdW5k
KToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2Vz
R0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wQmxvY2tIZWFkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVQcm9maWxlRm9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcik6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZh
bHVlUHJvZmlsZUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVF
eGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjptYXlF
eGl0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc0NhbGxWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2FsbFZhcmFy
Z3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMb2FkVmFyYXJnc0RhdGEpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmxvYWRWYXJhcmdzRGF0YSk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlw
ZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1
dGVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBkZmcv
REZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZHVtcEFuZFZlcmlmeUdy
YXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpyZWFkVG9wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6d3JpdGVUb3ApOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICog
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6aXNGbHVzaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9w
ZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Rh
Y2tMYXlvdXRQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNl
Ojphc3NpZ24pOgorICAgICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
VmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZUNQUyk6
CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpm
dW5jdGlvblR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ2FsbCk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om1tQWxs
b2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6c2l6
ZU9mQ2FsbFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVPZkNhbGxGb3J3YXJkVmFy
YXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ29uc3RydWN0VmFyYXJncyk6CisgICAg
ICAgIChKU0M6OkZUTDo6c2l6ZU9mSW4pOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVPZklDRm9y
KToKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZDaGVja0luKTogRGVsZXRlZC4KKyAgICAgICAg
KiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmg6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1Jl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOgor
ICAgICAgICAqIGZ0bC9GVExKU0NhbGxCYXNlLmg6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbFZh
cmFyZ3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpKU0Nh
bGxWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpudW1TcGlsbFNs
b3RzTmVlZGVkKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjplbWl0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRM
SlNDYWxsVmFyYXJncy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdz
Ojpub2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpzdGFja21hcElEKToK
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxWYXJhcmdzOjpvcGVyYXRvcjwpOgorICAgICAgICAq
IGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TXlB
cmd1bWVudHNMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlR2V0TXlBcmd1bWVudEJ5VmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlSW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjplbWl0U3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6dm1DYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6dm1DYWxsTm9F
eGNlcHRpb25zKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y2FsbENoZWNr
KToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjpjYWxsKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpzaXplT2ZWYXJhcmdzKToK
KyAgICAgICAgKEpTQzo6c2l6ZUZyYW1lRm9yVmFyYXJncyk6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUpOgorICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXRFeGNlcHRpb25DaGVjayk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdCk6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpjYWxsZWVGcmFtZVRhZ1Nsb3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmNhbGxlZUFyZ3VtZW50VGFnU2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6Y2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6Y2FsbGVlRnJhbWVDYWxsZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUik6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5o
OgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZSk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0
dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAg
ICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVT
ZXR1cFZhcmFyZ3NGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Y2F0Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6ZW1pdFNldHVwVmFyYXJnc0ZyYW1l
RmFzdENhc2UpOgorICAgICAgICAqIGppdC9TZXR1cFZhcmFyZ3NGcmFtZS5oOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAg
ICAgKEpTQzo6QXJndW1lbnRzOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnJl
Z2lzdGVyQXJyYXlTaXplSW5CeXRlcyk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1pbmxpbmUtc21hbGxlci1Gb28uanM6IEFkZGVkLgor
ICAgICAgICAoRm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAg
ICAgICAgKHRlc3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1p
bmxpbmUuanM6IEFkZGVkLgorICAgICAgICAoRm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAg
IChjaGVja0VxdWFsKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9j
b25zdHJ1Y3QtdmFyYXJncy1uby1pbmxpbmUuanM6IEFkZGVkLgorICAgICAgICAoRm9vKToKKyAg
ICAgICAgKGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAgICAgICAgKHRlc3QpOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLWluLWlubGluZWQtdmFyYXJn
cy1jYWxsLW91dC1vZi1ib3VuZHMuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAg
KGJhcik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2dldC1hcmd1bWVudC1ieS12YWwtc2FmZS1p
bi1pbmxpbmVkLXZhcmFyZ3MtY2FsbC1vdXQtb2YtYm91bmRzLmpzOiBBZGRlZC4KKyAgICAgICAg
KGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9nZXQtbXktYXJn
dW1lbnQtYnktdmFsLWNyZWF0ZXMtYXJndW1lbnRzLmpzOiBBZGRlZC4KKyAgICAgICAgKGJsYWgp
OgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToK
KyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhl
bi1pbmxpbmVkLWNhbGwtZXhpdC1pbi1mb28uanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAg
ICAgICAgKGJhcik6CisgICAgICAgIChjaGVja0VxdWFsKToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWlubGluZWQuanM6IEFkZGVkLgorICAg
ICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChiYXopOgorICAgICAgICAoY2hl
Y2tFcXVhbCk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbG9hZC12
YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAg
ICAgIChiYXIpOgorICAgICAgICAoY2hlY2tFcXVhbCk6CisgICAgICAgICh0ZXN0KToKKwogMjAx
NS0wMi0xNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBleHBl
cmltZW50YWwgPGF0dGFjaG1lbnQ+IGVsZW1lbnQgc3VwcG9ydApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NDQsNiArODQ0LDcgQEAg
aWYgKEVOQUJMRV9GVExfSklUKQogICAgICAgICBmdGwvRlRMSklURmluYWxpemVyLmNwcAogICAg
ICAgICBmdGwvRlRMSlNDYWxsLmNwcAogICAgICAgICBmdGwvRlRMSlNDYWxsQmFzZS5jcHAKKyAg
ICAgICAgZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCiAgICAgICAgIGZ0bC9GVExMaW5rLmNwcAog
ICAgICAgICBmdGwvRlRMTG9jYXRpb24uY3BwCiAgICAgICAgIGZ0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNp
b24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTExLDYgKzUxMSw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSklURmluYWxpemVyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGwuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbEJhc2UuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbFZhcmFyZ3MuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTExpbmsuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZnRsXEZUTExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExMb3dlckRGR1RvTExWTS5jcHAiIC8+CkBAIC0xMTk0LDYgKzExOTUsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpJVEZpbmFsaXplci5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbEJhc2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGxWYXJhcmdzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMTGluay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
TG93ZXJERkdUb0xMVk0uaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw4
IEBACiAJCTBGQ0VGQUUwMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAw
NDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEMTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
MTIwMkQxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovOyB9OwogCQkwRkQx
MjAzMDFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8q
IEZUTEpTQ2FsbEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkQxMjAzMzFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAz
MTFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi87IH07CisJCTBGRDEy
MDM0MUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQy
QzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZE
ODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87
IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZE
ODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKQEAgLTIyNDcsNiArMjI0OSw4IEBACiAJCTBGQ0VG
QURFMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExMb2NhdGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBG
VExKU0NhbGxCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZU
TEpTQ2FsbEJhc2UuY3BwOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxs
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7
IHBhdGggPSBmdGwvRlRMSlNDYWxsQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0
aCA9IGZ0bC9GVExKU0NhbGxWYXJhcmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZEMTIwMzIxQThDODVCRDAwMEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRs
L0ZUTEpTQ2FsbFZhcmFyZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5
MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBk
ZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIx
NDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MDYsNiArMzYxMCw4IEBACiAJCQkJMEY2QjFDQjQxODVGQzlF
OTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovLAogCQkJCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4
MCAvKiBGVExKU0NhbGxCYXNlLmNwcCAqLywKIAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5oICovLAorCQkJCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBG
VExKU0NhbGxWYXJhcmdzLmNwcCAqLywKKwkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyog
RlRMSlNDYWxsVmFyYXJncy5oICovLAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBG
VExMaW5rLmNwcCAqLywKIAkJCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5o
ICovLAogCQkJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8s
CkBAIC01NDQ5LDYgKzU0NTUsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBC
eXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAv
KiBBUk12N0RPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQx
MjAzNDFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdBOEFGMzUxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZDOTlENTE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJp
bmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzNzE3QURCNUYzMDA1QUIx
NzQgLyogQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjUsNiArNjg3Miw3
IEBACiAJCQkJQTc4QTk3NzQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmlu
YWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAv
KiBERkdGaXh1cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDEyMDMzMUE4Qzg1QkQw
MDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQz
Mzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NzEsNiArNDcxLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxz
aGlmdDMyKHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KKyAgICAK
KyAgICB2b2lkIHJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7
CisgICAgICAgIHJzaGlmdDMyKHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgdXJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVz
dCkKKyAgICB7CisgICAgICAgIHVyc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBz
cmNEZXN0KTsKKyAgICB9CiAKICAgICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewpAQCAtNzUwLDYgKzc2MCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxzaGlmdDY0KHRydXN0ZWRJ
bW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0UHRy
KEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgcnNoaWZ0NjQo
dHJ1c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCB1
cnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAg
dXJzaGlmdDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOworICAgIH0KKwog
ICAgIHZvaWQgbmVnUHRyKFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG5lZzY0KGRl
c3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02ODksNiArNjg5LDI2IEBAIHB1YmxpYzoKICAgICAgICAgdXJzaGlmdDMyKGRlc3QsIGltbSwg
ZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB1cnNoaWZ0NjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxzcjw2ND4oZGVzdCwgc3JjLCBzaGlmdEFtb3VudCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgdXJzaGlmdDY0KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sc3I8NjQ+KGRlc3QsIHNyYywg
aW1tLm1fdmFsdWUgJiAweDFmKTsKKyAgICB9CisKKyAgICB2b2lkIHVyc2hpZnQ2NChSZWdpc3Rl
cklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB1cnNoaWZ0
NjQoZGVzdCwgc2hpZnRBbW91bnQsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHVyc2hp
ZnQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB1
cnNoaWZ0NjQoZGVzdCwgaW1tLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHhvcjMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICB4b3IzMihkZXN0LCBz
cmMsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMzQsNiArMzM0LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2FycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0K
ICAgICAKKyAgICB2b2lkIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVz
dCk7CisgICAgfQorICAgIAogICAgIHZvaWQgbXVsNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmltdWxxX3JyKHNyYywgZGVzdCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgx
LDYgKzg4MSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNocnFf
aThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKGltbSA9PSAx
KQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JPVVAyX0V2MSwgR1JP
VVAyX09QX1NIUiwgZHN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3A2NChPUF9HUk9VUDJfRXZJYiwgR1JPVVAyX09QX1NIUiwgZHN0KTsKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1tKTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIHZvaWQgc2hscV9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAg
ICBpZiAoaW1tID09IDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcg
QEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAsIGhh
c1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQogICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNl
KQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUpCisgICAgICAgICwgbWF4TnVtQXJndW1lbnRzKDAp
CiAgICAgICAgICwgc2xvd1BhdGhDb3VudCgwKQogICAgIHsKICAgICB9CkBAIC05MSw2ICs5Miw3
IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICBib29sIGhh
c1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBl
CiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDogODsKKyAgICB1aW50OF90IG1heE51bUFyZ3VtZW50
czsgLy8gT25seSB1c2VkIGZvciB2YXJhcmdzIGNhbGxzLgogICAgIHVpbnQzMl90IHNsb3dQYXRo
Q291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE4
MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAgLy8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywg
YnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNw
ZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgcmV0
dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBD
YWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbyhsb2NrZXIsIGNh
bGxMaW5rSW5mbyk7CisgICAgcmVzdWx0Lm1fbWF4TnVtQXJndW1lbnRzID0gY2FsbExpbmtJbmZv
Lm1heE51bUFyZ3VtZW50czsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDYWxsTGlua1N0YXR1
cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21DYWxsTGlua0luZm8oCkBAIC0yOTEsNiArMjkz
LDEzIEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KICAgICByZXR1
cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGJh
c2VsaW5lTWFwKTsKIH0KIAordm9pZCBDYWxsTGlua1N0YXR1czo6c2V0UHJvdmVuQ29uc3RhbnRD
YWxsZWUoQ2FsbFZhcmlhbnQgdmFyaWFudCkKK3sKKyAgICBtX3ZhcmlhbnRzID0gQ2FsbFZhcmlh
bnRMaXN0eyB2YXJpYW50IH07CisgICAgbV9jb3VsZFRha2VTbG93UGF0aCA9IGZhbHNlOworICAg
IG1faXNQcm92ZWQgPSB0cnVlOworfQorCiBib29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVD
YWxsKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhcmlhbnRzLnNpemUoKTsg
aS0tOykgewpAQCAtMzIyLDYgKzMzMSw5IEBAIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJp
bnRTdHJlYW0mIG8KICAgICAKICAgICBpZiAoIW1fdmFyaWFudHMuaXNFbXB0eSgpKQogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1wKG1fdmFyaWFudHMpKTsKKyAgICAKKyAgICBpZiAo
bV9tYXhOdW1Bcmd1bWVudHMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIm1heE51bUFyZ3Vt
ZW50cyA9ICIsIG1fbWF4TnVtQXJndW1lbnRzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMu
aAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCw2IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogICAgIAotICAgIENhbGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29s
IGlzUHJvdmVkKQotICAgIHsKLSAgICAgICAgbV9pc1Byb3ZlZCA9IGlzUHJvdmVkOwotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBj
b21wdXRlRm9yKAogICAgICAgICBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBj
b25zdCBDYWxsTGlua0luZm9NYXAmKTsKIApAQCAtMTA4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwg
Q29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwog
ICAgIAorICAgIHZvaWQgc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZhcmlhbnQpOworICAg
IAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkg
fHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAgLTEyMyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkg
Y2FsbGVlIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIAorICAgIHVuc2lnbmVkIG1heE51bUFyZ3Vt
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TnVtQXJndW1lbnRzOyB9CisgICAgCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgpAQCAtMTM3LDYgKzEz
NSw3IEBAIHByaXZhdGU6CiAgICAgQ2FsbFZhcmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9v
bCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAgIGJvb2wgbV9pc1Byb3ZlZDsKKyAgICB1bnNpZ25l
ZCBtX21heE51bUFyZ3VtZW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24g
MTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgorICAg
ICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBvdXQucHJp
bnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJ
bmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2Fs
bCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTIxLDYgKzEyMSw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2lu
ZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAgIENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFy
Z3MsCisgICAgICAgIENvbnN0cnVjdFZhcmFyZ3MsCiAgICAgICAgIAogICAgICAgICAvLyBGb3Ig
dGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBs
dXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAgICAgIC8vIHNsb3QuCkBAIC0xNDAsMzAgKzE0Miw0
OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAgICAgcmV0dXJuIENhbGw7CiAgICAg
fQogICAgIAorICAgIHN0YXRpYyBLaW5kIHZhcmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNl
IENvZGVGb3JDYWxsOgorICAgICAgICAgICAgcmV0dXJuIENhbGxWYXJhcmdzOworICAgICAgICBj
YXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJn
czsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gQ2FsbDsKKyAgICB9CisgICAgCiAgICAgc3RhdGljIENvZGVTcGVjaWFsaXph
dGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kRm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAg
IHN3aXRjaCAoa2luZCkgewogICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVyQ2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJDYWxs
OgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDYWxsOwogICAgICAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIENv
ZGVGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENvZGVGb3JDYWxsOwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgYm9vbCBpc05vcm1hbENhbGwoS2luZCBraW5kKQorICAgIHN0YXRpYyBib29sIGlzVmFy
YXJncyhLaW5kIGtpbmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAg
Y2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFy
YXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CisgICAgYm9vbCBpc1ZhcmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7CisgICAgfQogICAgIAog
ICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4K
ICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsKQEAgLTE3MSwx
MCArMTkxLDExIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIENvZGVPcmlnaW4gY2Fs
bGVyOwogICAgIEJpdFZlY3RvciBjYXB0dXJlZFZhcnM7IC8vIEluZGV4ZWQgYnkgdGhlIG1hY2hp
bmUgY2FsbCBmcmFtZSdzIHZhcmlhYmxlIG51bWJlcmluZy4KIAotICAgIHNpZ25lZCBzdGFja09m
ZnNldCA6IDI5OwotICAgIHVuc2lnbmVkIGtpbmQgOiAyOyAvLyByZWFsIHR5cGUgaXMgS2luZAor
ICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDI4OworICAgIHVuc2lnbmVkIGtpbmQgOiAzOyAvLyBy
ZWFsIHR5cGUgaXMgS2luZAogICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCA6IDE7IC8vIElmIGZhbHNl
IHRoZW4gd2Uga25vdyB0aGF0IGNhbGxlZS9zY29wZSBhcmUgY29uc3RhbnRzIGFuZCB0aGUgREZH
IHdvbid0IHRyZWF0IHRoZW0gYXMgdmFyaWFibGVzLCBpLmUuIHRoZXkgaGF2ZSB0byBiZSByZWNv
dmVyZWQgbWFudWFsbHkuCiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c1JlZ2lzdGVyOyAv
LyBUaGlzIGlzIG9ubHkgc2V0IGlmIHRoZSBjb2RlIHVzZXMgYXJndW1lbnRzLiBUaGUgdW5tb2Rp
ZmllZCBhcmd1bWVudHMgcmVnaXN0ZXIgZm9sbG93cyB0aGUgdW5tb2RpZmllZEFyZ3VtZW50c1Jl
Z2lzdGVyKCkgY29udmVudGlvbiAoc2VlIENvZGVCbG9jay5oKS4KKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAvLyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZh
cmFyZ3MgY2FsbC4KICAgICAKICAgICAvLyBUaGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24g
b2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVlcyBmb3IKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUn
cyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNp
b24gaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNw
cAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw2ICs2Niw4IEBAIGNvbnN0
IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQga2kKICAgICAgICAgcmV0dXJuICJBcmd1
bWVudHNFc2NhcGVkIjsKICAgICBjYXNlIE5vdFN0cmluZ09iamVjdDoKICAgICAgICAgcmV0dXJu
ICJOb3RTdHJpbmdPYmplY3QiOworICAgIGNhc2UgVmFyYXJnc092ZXJmbG93OgorICAgICAgICBy
ZXR1cm4gIlZhcmFyZ3NPdmVyZmxvdyI7CiAgICAgY2FzZSBVbmNvdW50YWJsZToKICAgICAgICAg
cmV0dXJuICJVbmNvdW50YWJsZSI7CiAgICAgY2FzZSBVbmNvdW50YWJsZUludmFsaWRhdGlvbjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCShyZXZpc2lv
biAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw2ICs0NSw3IEBAIGVudW0gRXhpdEtpbmQgOiB1
aW50OF90IHsKICAgICBJbmFkZXF1YXRlQ292ZXJhZ2UsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdl
IGVuZGVkIHVwIGluIGNvZGUgdGhhdCBkaWRuJ3QgaGF2ZSBwcm9maWxpbmcgY292ZXJhZ2UuCiAg
ICAgQXJndW1lbnRzRXNjYXBlZCwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYXJndW1lbnRzIGVzY2Fw
ZWQgYnV0IHdlIGRpZG4ndCBleHBlY3QgdGhlbSB0by4KICAgICBOb3RTdHJpbmdPYmplY3QsIC8v
IFdlIGV4aXRlZCBiZWNhdXNlIHdlIHNob3VsZG4ndCBoYXZlIGF0dGVtcHRlZCB0byBvcHRpbWl6
ZSBzdHJpbmcgb2JqZWN0IGFjY2Vzcy4KKyAgICBWYXJhcmdzT3ZlcmZsb3csIC8vIFdlIGV4aXRl
ZCBiZWNhdXNlIGEgdmFyYXJncyBjYWxsIHBhc3NlZCBtb3JlIGFyZ3VtZW50cyB0aGFuIHdlIGV4
cGVjdGVkLgogICAgIFVuY291bnRhYmxlLCAvLyBXZSBleGl0ZWQgZm9yIG5vbmUgb2YgdGhlIGFi
b3ZlIHJlYXNvbnMsIGFuZCB3ZSBzaG91bGQgbm90IGNvdW50IGl0LiBNb3N0IHVzZXMgb2YgdGhp
cyBzaG91bGQgYmUgdmlld2VkIGFzIGEgRklYTUUuCiAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRp
b24sIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlkYXRlZDsg
dGhpcyBtZWFucyB0aGF0IHdlJ3ZlIGFscmVhZHkgY291bnRlZCB0aGUgcmVhc29ucyB3aHkgdGhl
IGNvZGUgYmxvY2sgd2FzIGludmFsaWRhdGVkLgogICAgIFdhdGNoZG9nVGltZXJGaXJlZCwgLy8g
V2UgZXhpdGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBzZXJ2aWNlIHRoZSB3YXRjaGRvZyB0aW1lci4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVy
eS5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsMjUgKzky
LDI1IEBAIHZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcEluQ29udGV4dChQcmludFMKICAgICAgICAg
cmV0dXJuOwogI2VuZGlmCiAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91
dC5wcmludGYoIiolZCIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKKyAgICAgICAgb3V0
LnByaW50KCIqIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgb3V0LnByaW50ZigiKmludDMyKCVk
KSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIqaW50
MzIoIiwgdmlydHVhbFJlZ2lzdGVyKCksICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBvdXQucHJpbnRmKCIqaW50NTIoJWQp
IiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIippbnQ1
MigiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
U3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5wcmludGYoIipzdHJp
Y3RJbnQ1MiglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSk7CisgICAgICAgIG91dC5w
cmludCgiKnN0cmljdEludDUyKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5w
cmludGYoIipkb3VibGUoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAg
ICBvdXQucHJpbnQoIipkb3VibGUoIiwgdmlydHVhbFJlZ2lzdGVyKCksICIpIik7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIG91dC5w
cmludGYoIipjZWxsKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKTsKKyAgICAgICAg
b3V0LnByaW50KCIqY2VsbCgiLCB2aXJ0dWFsUmVnaXN0ZXIoKSwgIikiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgb3V0LnBy
aW50ZigiKmJvb2woJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgICAgICBv
dXQucHJpbnQoIipib29sKCIsIHZpcnR1YWxSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CiAgICAgICAgIG91dC5w
cmludGYoImFyZ3VtZW50cyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTgw
MjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5NCw5ICsxOTQsMjAgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKLSAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3Vt
ZW50cyBoYXMgYmVlbiBzZXQuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS5ibG9jaygpLT52YWx1
ZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICAvLyBB
c3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4gU2V0QXJndW1l
bnQgbWVhbnMgdGhhdCBzb21lb25lIHNldAorICAgICAgICAvLyB0aGUgYXJndW1lbnQgdmFsdWVz
IG91dC1vZi1iYW5kLCBhbmQgY3VycmVudGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8g
YQorICAgICAgICAvLyBub24tY2xlYXIgdmFsdWUuCisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS52
YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIExvYWRW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBtX3N0
YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldFR5cGUoU3BlY0ludDMyKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQgLSAxOyBpLS07KQorICAgICAg
ICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsg
aSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKQEAgLTEzMjQsNyArMTMzNSw4IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhlIGFy
Z3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2Ug
Y29uc3RhbnQgZm9sZGluZwogICAgICAgICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVj
YXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgogICAg
ICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9u
LgotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkgewor
ICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZQorICAgICAg
ICAgICAgJiYgIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJn
cygpKSB7CiAgICAgICAgICAgICBzZXRDb25zdGFudCgKICAgICAgICAgICAgICAgICBub2RlLCBq
c051bWJlcihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMu
c2l6ZSgpIC0gMSkpOwogICAgICAgICAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOyAv
LyBQcmV0ZW5kIHRoYXQgd2UgY2xvYmJlcmVkIHRvIHByZXZlbnQgY29uc3RhbnQgZm9sZGluZy4K
QEAgLTE5NzMsNiArMTk4NSw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2Fz
ZSBOYXRpdmVDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENhbGxG
b3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUwMyw2ICs1MDMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIW9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBXZSBrbm93
IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwgcmV0dXJuLiBCdXQgb25seSBhZnRlciB3ZSBoYXZlIGNo
ZWNrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBub2JvZHkgaGFzIGVzY2FwZWQgb3Vy
IGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3
MCw4IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4K
LSAgICBib29sIGhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIGJvb2wgaGFuZGxlTWluTWF4KGlu
dCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNr
cyk7CiAgICAgCiAgICAgLy8gSGFuZGxlIGNhbGxzLiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJy
b3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmluc2ljcy4KICAgICB2b2lkIGhhbmRsZUNhbGwoCkBA
IC0xODIsMjAgKzE4MywyNSBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBp
bnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtTdGF0dXMpOwogICAgIHZv
aWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQs
IGludCByZWdpc3Rlck9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBw
YywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAgIHZvaWQgZW1pdEZ1
bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAgIHZvaWQgdW5kb0Z1bmN0aW9uQ2hl
Y2tzKENhbGxWYXJpYW50KTsKKyAgICB2b2lkIGhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9u
KiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgZW1p
dEZ1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc0FyZ3VtbnQpOwogICAgIHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOwogICAgIHVuc2lnbmVkIGlubGluaW5nQ29zdChDYWxsVmFyaWFudCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsgLy8g
UmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFuIGlubGluaW5nIGNhbmRpZGF0ZS4gQnkgY29u
dmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29zdCBvZiAxLgogICAgIC8vIEhhbmRsZSBpbmxp
bmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBs
YW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNl
dCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24pOworICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rl
ck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJ
bmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIGVu
dW0gQ2FsbGVyTGlua2FiaWxpdHkgeyBDYWxsZXJEb2VzTm9ybWFsTGlua2luZywgQ2FsbGVyTGlu
a3NNYW51YWxseSB9OwotICAgIGJvb2wgYXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwg
SW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSk7Ci0gICAgdm9pZCBpbmxpbmVD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQs
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNp
Z25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIENhbGxlckxpbmthYmlsaXR5
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIGJvb2wgYXR0ZW1w
dFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENh
bGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJM
aW5rYWJpbGl0eSwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5n
QmFsYW5jZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgorICAgIHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNl
dCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBDYWxsZXJMaW5rYWJpbGl0eSwgY29uc3QgQ2hlY2tz
RnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB2b2lkIGNhbmNlbExpbmtpbmdGb3JCbG9jayhJ
bmxpbmVTdGFja0VudHJ5KiwgQmFzaWNCbG9jayopOyAvLyBPbmx5IHdvcmtzIHdoZW4gdGhlIGdp
dmVuIGJsb2NrIGlzIHRoZSBsYXN0IG9uZSB0byBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoYXQgaW5s
aW5lIHN0YWNrIGVudHJ5LgogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1
cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxs
LgotICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMs
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKLSAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1
Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSk7Ci0g
ICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQs
IEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KKyAgICBib29sIGhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0
T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgY29uc3QgQ2hlY2tzRnVu
Y3RvciYgaW5zZXJ0Q2hlY2tzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9y
PgorICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGludCByZXN1bHRPcGVyYW5k
LCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNl
cnRDaGVja3MpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CisgICAgYm9v
bCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVy
bmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5z
ZXJ0Q2hlY2tzKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUpOwogICAgIE5vZGUq
IGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9k
ZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlkKApAQCAtNTI4
LDYgKzUzNCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KGlubGluZVN0
YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkp
OworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAg
ICAgICAgICAgZmx1c2hEaXJlY3QoaW5saW5lU3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIG51bUFyZ3VtZW50cyA9IGlubGluZVN0YWNrRW50cnktPm1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBudW1Bcmd1
bWVudHM7IGFyZ3VtZW50LS0gPiAxOykKQEAgLTY1NCwxMyArNjYyLDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZW1vdmVMYXN0Tm9k
ZUZyb21HcmFwaChOb2RlVHlwZSBleHBlY3RlZE5vZGVUeXBlKQotICAgIHsKLSAgICAgICAgTm9k
ZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT50YWtlTGFzdCgpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVChub2RlLT5vcCgpID09IGV4cGVjdGVkTm9kZVR5cGUpOwotICAgICAgICBtX2dyYXBoLm1f
YWxsb2NhdG9yLmZyZWUobm9kZSk7Ci0gICAgfQotCiAgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChO
b2RlKiBjaGlsZCkKICAgICB7CiAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBl
bmQoRWRnZShjaGlsZCkpOwpAQCAtNjkxLDcgKzY5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBvcCwgb3BJbmZvLCBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlv
bik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKICAgICAgICAg
aWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCksIGNhbGwpOworICAgICAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CiAgICAg
ICAgIHJldHVybiBjYWxsOwogICAgIH0KICAgICAKQEAgLTEwNDIsOCArMTA0Myw4IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiB7CiAgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0
IDw9IDApOwogICAgIAotICAgIGlmIChjYWxsVGFyZ2V0LT5oYXNDb25zdGFudCgpKQotICAgICAg
ICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgp
KS5zZXRJc1Byb3ZlZCh0cnVlKTsKKyAgICBpZiAoY2FsbFRhcmdldC0+aXNDZWxsQ29uc3RhbnQo
KSkKKyAgICAgICAgY2FsbExpbmtTdGF0dXMuc2V0UHJvdmVuQ29uc3RhbnRDYWxsZWUoQ2FsbFZh
cmlhbnQoY2FsbFRhcmdldC0+YXNDZWxsKCkpKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxpbmcg
Y2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxu
Iik7CkBAIC0xMDYwLDcgKzEwNjEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxs
KAogICAgIAogICAgIE9wSW5mbyBjYWxsT3BJbmZvOwogICAgIAotICAgIGlmIChoYW5kbGVJbmxp
bmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0
aW9uKSkgeworICAgIGlmIChoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxM
aW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwg
cmVnaXN0ZXJPZmZzZXQpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgMCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIG5leHRPZmZzZXQsIG9wLCBraW5kLCBwcmVkaWN0aW9uKSkgewogICAgICAgICBp
ZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOwogICAgICAgICByZXR1cm47CkBAIC0xMDcyLDcgKzEw
NzMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5mdW5jdGlvbigpOwogICAgICAgICBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6
YXRpb25LaW5kRm9yKGtpbmQpOwogICAgICAgICBpZiAoZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlz
SG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUs
IGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxlZSwgY2FsbFRhcmdldCwgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgIGNhbGxPcElu
Zm8gPSBPcEluZm8obV9ncmFwaC5mcmVlemUoZnVuY3Rpb24pKTsKIAogICAgICAgICAgICAgaWYg
KG9wID09IENhbGwpCkBAIC0xMDg4LDExICsxMDg5LDU0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsT3BJbmZvLCBjYWxsVGFy
Z2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rp
b24pOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZh
cmlhbnQgY2FsbGVlLCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFy
Z3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKLSAgICBOb2RlKiB0aGlzQXJndW1lbnQ7CisgICAgQVNTRVJUKE9QQ09ERV9M
RU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJh
cmdzKSk7CisgICAgCisgICAgaW50IHJlc3VsdCA9IHBjWzFdLnUub3BlcmFuZDsKKyAgICBpbnQg
Y2FsbGVlID0gcGNbMl0udS5vcGVyYW5kOworICAgIGludCB0aGlzUmVnID0gcGNbM10udS5vcGVy
YW5kOworICAgIGludCBhcmd1bWVudHMgPSBwY1s0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0
RnJlZVJlZyA9IHBjWzVdLnUub3BlcmFuZDsKKyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBw
Y1s2XS51Lm9wZXJhbmQ7CisgICAgCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdl
dFByZWRpY3Rpb24oKTsKKyAgICAKKyAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjYWxsZWUpKTsKKyAgICAKKyAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1
cyA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksCisgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1hcCk7CisgICAgaWYgKGNh
bGxUYXJnZXQtPmlzQ2VsbENvbnN0YW50KCkpCisgICAgICAgIGNhbGxMaW5rU3RhdHVzLnNldFBy
b3ZlbkNvbnN0YW50Q2FsbGVlKENhbGxWYXJpYW50KGNhbGxUYXJnZXQtPmFzQ2VsbCgpKSk7Cisg
ICAgCisgICAgaWYgKGNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkKKyAgICAgICAgJiYgaGFu
ZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVl
UmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMp
LCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVDYWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGtpbmQp
LCBwcmVkaWN0aW9uKSkgeworICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAg
ICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkQ2FsbCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1f
Z3JhcGgubV9jYWxsVmFyYXJnc0RhdGEuYWRkKCk7CisgICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZz
ZXQgPSBmaXJzdFZhckFyZ09mZnNldDsKKyAgICAKKyAgICBOb2RlKiB0aGlzQ2hpbGQ7CiAgICAg
aWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHRoaXNBcmd1bWVudCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICB0aGlz
Q2hpbGQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKTsKKyAgICBlbHNlCisgICAgICAg
IHRoaXNDaGlsZCA9IG51bGxwdHI7CisgICAgCisgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgo
b3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBjYWxsVGFyZ2V0LCBnZXQoVmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLCB0aGlzQ2hpbGQpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRSZWcocmVzdWx0KTsKKyAgICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKKyAgICAg
ICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7Cit9CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRG
dW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCBjYWxsZWUsIE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1
YWxSZWdpc3RlciB0aGlzQXJndW1lbnRSZWcpCit7CisgICAgTm9kZSogdGhpc0FyZ3VtZW50Owor
ICAgIGlmICh0aGlzQXJndW1lbnRSZWcuaXNWYWxpZCgpKQorICAgICAgICB0aGlzQXJndW1lbnQg
PSBnZXQodGhpc0FyZ3VtZW50UmVnKTsKICAgICBlbHNlCiAgICAgICAgIHRoaXNBcmd1bWVudCA9
IDA7CiAKQEAgLTExMTAsMTMgKzExNTQsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVu
Y3Rpb25DaGVja3MoCiAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhtX2dyYXBoLmZy
ZWV6ZShjYWxsZWVDZWxsKSksIGNhbGxUYXJnZXRGb3JDaGVjaywgdGhpc0FyZ3VtZW50KTsKIH0K
IAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6dW5kb0Z1bmN0aW9uQ2hlY2tzKENhbGxWYXJpYW50IGNh
bGxlZSkKLXsKLSAgICByZW1vdmVMYXN0Tm9kZUZyb21HcmFwaChDaGVja0NlbGwpOwotICAgIGlm
IChjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpKQotICAgICAgICByZW1vdmVMYXN0Tm9kZUZyb21HcmFw
aChHZXRFeGVjdXRhYmxlKTsKLX0KLQogdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50
UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBmb3IgKGludCBpID0ga2lu
ZCA9PSBDb2RlRm9yQ2FsbCA/IDAgOiAxOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
ICsraSkKQEAgLTExMzEsNyArMTE2OCw3IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjppbmxp
bmluZ0Nvc3QoQ2EKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsZWUu
ZnVuY3Rpb25FeGVjdXRhYmxlKCk7CiAgICAgaWYgKCFleGVjdXRhYmxlKSB7CiAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGVy
ZSBpcyBubyBmdW5jdGlvbiBleGVjdXRhYmxlLiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAg
IEZhaWxpbmcgYmVjYXVzZSB0aGVyZSBpcyBubyBmdW5jdGlvbiBleGVjdXRhYmxlLlxuIik7CiAg
ICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICB9CiAgICAgCkBAIC0xMTU4LDYgKzExOTUsMTYg
QEAgdW5zaWduZWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29zdChDYQogICAgIH0KICAgICBD
YXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsID0gaW5saW5lRnVuY3Rpb25Gb3JDYXBhYmls
aXR5TGV2ZWwoCiAgICAgICAgIGNvZGVCbG9jaywga2luZCwgY2FsbGVlLmlzQ2xvc3VyZUNhbGwo
KSk7CisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygiICAgIEtpbmQ6ICIsIGtp
bmQsICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgSXMgY2xvc3VyZSBjYWxsOiAiLCBjYWxs
ZWUuaXNDbG9zdXJlQ2FsbCgpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiICAgIENhcGFiaWxp
dHkgbGV2ZWw6ICIsIGNhcGFiaWxpdHlMZXZlbCwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAg
ICBNaWdodCBpbmxpbmUgZnVuY3Rpb246ICIsIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3IoY29kZUJs
b2NrLCBraW5kKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICBNaWdodCBjb21waWxlIGZ1
bmN0aW9uOiAiLCBtaWdodENvbXBpbGVGdW5jdGlvbkZvcihjb2RlQmxvY2ssIGtpbmQpLCAiXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiICAgIElzIHN1cHBvcnRlZCBmb3IgaW5saW5pbmc6ICIsIGlz
U3VwcG9ydGVkRm9ySW5saW5pbmcoY29kZUJsb2NrKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2co
IiAgICBOZWVkcyBhY3RpdmF0aW9uOiAiLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5u
ZWVkc0FjdGl2YXRpb24oKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICBJcyBpbmxpbmlu
ZyBjYW5kaWRhdGU6ICIsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlzSW5saW5pbmdD
YW5kaWRhdGUoKSwgIlxuIik7CisgICAgfQogICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlM
ZXZlbCkpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
RmFpbGluZyBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgaW5saW5lYWJsZS5cbiIpOwpAQCAt
MTIxMCwxMyArMTI1NywxNSBAQCB1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0
KENhCiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpOwogfQogCi12b2lk
IEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVz
dWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2Fs
bEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxpbmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5KQor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6Omlu
bGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFy
aWFudCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwg
Q2FsbGVyTGlua2FiaWxpdHkgY2FsbGVyTGlua2FiaWxpdHksIGNvbnN0IENoZWNrc0Z1bmN0b3Im
IGluc2VydENoZWNrcykKIHsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0
aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwog
ICAgIAogICAgIEFTU0VSVChpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKSAhPSBVSU5UX01BWCk7CiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCktPmJhc2VsaW5l
Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgaW5zZXJ0Q2hlY2tzKGNvZGVC
bG9jayk7CiAKICAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2ggY29uc3RhbnRzIQogICAgIApAQCAt
MTM1Niw0NCArMTQwNSw2MiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpjYW5jZWxMaW5raW5nRm9y
QmxvCiAgICAgfQogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxs
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgQ2FsbFZhcmlhbnQgY2Fs
bGVlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
dW5zaWduZWQgbmV4dE9mZnNldCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIENhbGxlckxp
bmthYmlsaXR5IGNhbGxlckxpbmthYmlsaXR5LCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1
bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rv
cj4KK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQ2FsbGVyTGlua2FiaWxpdHkgY2Fs
bGVyTGlua2FiaWxpdHksIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxp
bmluZ0JhbGFuY2UsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKICAgICBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFt
ZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIAogICAgIGlmICghaW5saW5pbmdC
YWxhbmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgYm9vbCBkaWRJbnNlcnRD
aGVja3MgPSBmYWxzZTsKKyAgICBhdXRvIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nID0gWyZd
ICgpIHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKG51bGxwdHIpOworICAgICAgICBkaWRJbnNlcnRD
aGVja3MgPSB0cnVlOworICAgIH07CisgICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRh
dGFMb2coIiAgICBDb25zaWRlcmluZyBjYWxsZWUgIiwgY2FsbGVlLCAiXG4iKTsKKyAgICAKICAg
ICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUuaW50ZXJuYWxGdW5jdGlv
bigpKSB7Ci0gICAgICAgIGlmIChoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24ocmVzdWx0
T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKSkgeworICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJ
bnRlcm5hbEZ1bmN0aW9uKHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCwgaW5zZXJ0Q2hl
Y2tzV2l0aEFjY291bnRpbmcpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRJbnNl
cnRDaGVja3MpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0Tm9k
ZSk7CiAgICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAg
ICBpbmxpbmluZ0JhbGFuY2UtLTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkaWRJbnNlcnRDaGVja3MpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIEludHJpbnNpYyBpbnRyaW5zaWMgPSBjYWxsZWUu
aW50cmluc2ljRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaWYgKGludHJpbnNpYyAhPSBO
b0ludHJpbnNpYykgewotICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3VsdE9wZXJhbmQs
IGludHJpbnNpYywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBw
cmVkaWN0aW9uKSkgeworICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3VsdE9wZXJhbmQs
IGludHJpbnNpYywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBw
cmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGRpZEluc2VydENoZWNrcyk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20sIGNhbGxUYXJnZXROb2RlKTsKICAgICAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21z
KHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRpZEluc2VydENo
ZWNrcyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQg
bXlJbmxpbmluZ0Nvc3QgPSBpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpZiAobXlJbmxpbmluZ0Nvc3QgPiBp
bmxpbmluZ0JhbGFuY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpbmxpbmVD
YWxsKGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsZWUsIHJlZ2lzdGVyT2Zmc2V0
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgY2FsbGVyTGlu
a2FiaWxpdHkpOworCisgICAgaW5saW5lQ2FsbChjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFu
ZCwgY2FsbGVlLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIGNhbGxlckxpbmthYmlsaXR5LCBpbnNlcnRDaGVja3MpOwogICAgIGlu
bGluaW5nQmFsYW5jZSAtPSBteUlubGluaW5nQ29zdDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUs
IGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMs
IGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNp
Z25lZCBuZXh0T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBr
aW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoCisgICAgTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5k
LCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsCisgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0T3JGaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCisgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFM
b2coIkhhbmRsaW5nIGlubGluaW5nLi4uXG4iKTsKQEAgLTE0MDcsNiArMTQ3NCwxMyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCisgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQp
CisgICAgICAgICYmIGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpID4gT3B0aW9uczo6
bWF4aW11bVZhcmFyZ3NGb3JJbmxpbmluZygpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBpbmxpbmluZyBiZWNhdXNlIG9mIHZhcmFyZ3MuXG4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCiAgICAgdW5zaWduZWQg
aW5saW5pbmdCYWxhbmNlID0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKICAgICBpZiAoc3BlY2lhbGl6YXRpb25LaW5kID09
IENvZGVGb3JDb25zdHJ1Y3QpCiAgICAgICAgIGlubGluaW5nQmFsYW5jZSA9IHN0ZDo6bWluKGlu
bGluaW5nQmFsYW5jZSwgT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5l
Q2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpKTsKQEAgLTE0MTcsMTcgKzE0OTEsMTA1IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBzaW1wbGlmaWNh
dGlvbiBvbiB0aGUgZmx5IGFuZCB0aGlzIGhlbHBzIHJlZHVjZSBjb21waWxlIHRpbWVzLCBidXQg
d2UgY2FuIG9ubHkgbGV2ZXJhZ2UKICAgICAvLyB0aGlzIGluIGNhc2VzIHdoZXJlIHdlIGRvbid0
IG5lZWQgY29udHJvbCBmbG93IGRpYW1vbmRzIHRvIGNoZWNrIHRoZSBjYWxsZWUuCiAgICAgaWYg
KCFjYWxsTGlua1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVzLnNp
emUoKSA9PSAxKSB7Ci0gICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcygKLSAgICAgICAgICAgIGNh
bGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxp
emF0aW9uS2luZCk7CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldDsKKyAgICAgICAgCisgICAg
ICAgIC8vIE9ubHkgdXNlZCBmb3IgdmFyYXJncyBjYWxscy4KKyAgICAgICAgdW5zaWduZWQgbWFu
ZGF0b3J5TWluaW11bSA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IDA7
CisKKyAgICAgICAgaWYgKElubGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKGtpbmQpKSB7CisgICAg
ICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBjYWxs
TGlua1N0YXR1c1swXS5mdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgICAgICBtYW5k
YXRvcnlNaW5pbXVtID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gPSAwOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBpbmNsdWRlcyAidGhpcyIKKyAgICAgICAgICAgIG1h
eE51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVz
Lm1heE51bUFyZ3VtZW50cygpLAorICAgICAgICAgICAgICAgIG1hbmRhdG9yeU1pbmltdW0gKyAx
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugc29ydCBvZiBwcmV0ZW5kIHRoYXQg
dGhpcyAqaXMqIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgd2VyZSBwYXNzZWQuCisgICAg
ICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IG1heE51bUFyZ3VtZW50czsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSByZWdpc3Rlck9mZnNldE9y
Rmlyc3RGcmVlUmVnICsgMTsKKyAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IG1heE51bUFy
Z3VtZW50czsgLy8gaW5jbHVkZXMgInRoaXMiCisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCAt
PSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKAorICAgICAgICAgICAgICAgIHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCksCisgICAgICAgICAgICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0
T3JGaXJzdEZyZWVSZWc7CisgICAgICAgIAogICAgICAgICBib29sIHJlc3VsdCA9IGF0dGVtcHRU
b0lubGluZUNhbGwoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwg
Y2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0LAogICAgICAgICAgICAgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENhbGxlckRvZXNOb3JtYWxMaW5r
aW5nLCBwcmVkaWN0aW9uLAotICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlKTsKLSAgICAgICAg
aWYgKCFyZXN1bHQgJiYgIWNhbGxMaW5rU3RhdHVzLmlzUHJvdmVkKCkpCi0gICAgICAgICAgICB1
bmRvRnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXNbMF0pOworICAgICAgICAgICAgaW5saW5p
bmdCYWxhbmNlLCBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgc3Bl
Y2lhbGl6YXRpb25LaW5kID09IENvZGVGb3JDYWxsID8gdGhpc0FyZ3VtZW50IDogVmlydHVhbFJl
Z2lzdGVyKCkpOworCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHZhcmFyZ3MgY2Fs
bCwgd2Ugd2FudCB0byBleHRyYWN0IHRoZSBhcmd1bWVudHMgcmlnaHQgbm93LgorICAgICAgICAg
ICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWU6OmlzVmFyYXJncyhraW5kKSkgeworICAgICAgICAg
ICAgICAgICAgICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0KSkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpbnQgYXJndW1lbnRTdGFydCA9IHJlZ2lzdGVyT2Zmc2V0ICsgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlbWFwcGVkQXJn
dW1lbnRTdGFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpKS5vZmZzZXQoKTsKKwor
ICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbG9h
ZFZhcmFyZ3NEYXRhLmFkZCgpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGFydCA9IFZp
cnR1YWxSZWdpc3RlcihyZW1hcHBlZEFyZ3VtZW50U3RhcnQgKyAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YS0+Y291bnQgPSBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNl
dCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5v
ZmZzZXQgPSBhcmd1bWVudHNPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmxpbWl0
ID0gbWF4TnVtQXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYW5kYXRvcnlN
aW5pbXVtID0gbWFuZGF0b3J5TWluaW11bTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1bWVudHNB
cmd1bWVudCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIEluIERGRyBJ
UiBiZWZvcmUgU1NBLCB3ZSBjYW5ub3QgaW5zZXJ0IGNvbnRyb2wgZmxvdyBiZXR3ZWVuIGFmdGVy
IHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBhbmQgdGhlIGxhc3QgU2V0
QXJndW1lbnQuIFRoaXMgaXNuJ3QgYSBwcm9ibGVtIG9uY2Ugd2UgZ2V0IHRvIERGRworICAgICAg
ICAgICAgICAgICAgICAvLyBTU0EuIEZvcnR1bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVh
c29ucyBmb3Igbm90IGluc2VydGluZyBjb250cm9sIGZsb3cKKyAgICAgICAgICAgICAgICAgICAg
Ly8gYmVmb3JlIFNTQS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCisgICAg
ICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNl
dCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgcHJldHR5IGxhbWUsIGJ1dCBpdCB3aWxsIGZvcmNlIHRoZSBjb3VudCB0byBi
ZSBmbHVzaGVkIGFzIGFuIGludC4gVGhpcyBkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgIC8v
IG1hdHRlciB2ZXJ5IG11Y2gsIHNpbmNlIG91ciB1c2Ugb2YgYSBTZXRBcmd1bWVudCBhbmQgRmx1
c2hlcyBmb3IgdGhpcyBsb2NhbCBzbG90IGlzCisgICAgICAgICAgICAgICAgICAgIC8vIG1vc3Rs
eSBqdXN0IGEgZm9ybWFsaXR5LgorICAgICAgICAgICAgICAgICAgICBjb3VudFZhcmlhYmxlLT5w
cmVkaWN0KFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgICAgIGNvdW50VmFyaWFibGUtPm1l
cmdlSXNQcm9maXRhYmxlVG9VbmJveCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
c2V0QXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhjb3VudFZh
cmlhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5sb2NhbCgpLCBzZXRBcmd1bWVudENvdW50
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbGl6YXRpb25L
aW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2Vk
U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFy
Z3VtZW50IDwgbWF4TnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZW1hcHBl
ZEFyZ3VtZW50U3RhcnQgKyBhcmd1bWVudCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1ZSk7IC8vIFdlIGN1cnJlbnRs
eSBoYXZlIG5vd2hlcmUgdG8gcHV0IHRoZSB0eXBlIGNoZWNrIG9uIHRoZSBMb2FkVmFyYXJncy4g
TG9hZFZhcmFyZ3MgaXMgZWZmZWN0ZnVsLCBzbyBhZnRlciBpdCBmaW5pc2hlcywgd2UgY2Fubm90
IGV4aXQuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZvciBhIHdoaWxlIGl0IGhhZCBiZWVuIG15IGludGVudGlvbiB0byBkbyB0aGluZ3MgbGlr
ZSB0aGlzIGluc2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZWRpY3Rpb24g
aW5qZWN0aW9uIHBoYXNlLiBCdXQgaW4gdGhpcyBjYXNlIGl0J3MgcmVhbGx5IGJlc3QgdG8gZG8g
aXQgaGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQncyBoZXJlIHRo
YXQgd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHZhcmlhYmxlIGFjY2VzcyBkYXRhcyBmb3IgdGhlCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmxpbmluZyB3ZSdyZSBhYm91dCB0byBkby4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb21l
dGhpbmcgZWxzZSB0aGF0J3MgaW50ZXJlc3RpbmcgaGVyZSBpcyB0aGF0IHdlJ2QgcmVhbGx5IGxv
dmUgdG8gZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmVkaWN0aW9ucyBmcm9tIHRo
ZSBhcmd1bWVudHMgbG9hZGVkIGF0IHRoZSBjYWxsc2l0ZSwgcmF0aGVyIHRoYW4gdGhlCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgcmVjZWl2ZWQgaW5zaWRlIHRoZSBjYWxs
ZWUuIEJ1dCB0aGF0IHByb2JhYmx5IHdvbid0IG1hdHRlciBmb3IgbW9zdAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2FsbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZUJs
b2NrICYmIGFyZ3VtZW50IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoVmFsdWVQcm9maWxlKiBwcm9maWxlID0gY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVG
b3JBcmd1bWVudChhcmd1bWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBk
YXRhTG9nKCJEb25lIGlubGluaW5nIChzaW1wbGUpLlxuIik7CiAgICAgICAgICAgICBkYXRhTG9n
KCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CisgICAgICAgICAgICBkYXRh
TG9nKCJSZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CkBAIC0xNDM3LDExICsxNTk5LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIGRvIG1vcmUgZGV0YWlsZWQgcG9seXZhcmlh
bnQvcG9seW1vcnBoaWMgcHJvZmlsaW5nOyBhbmQgc2Vjb25kLCBpdCByZWR1Y2VzIGNvbXBpbGUg
dGltZXMgaW4KICAgICAvLyB0aGUgREZHLiBBbmQgYnkgcG9seXZhcmlhbnQgcHJvZmlsaW5nIHdl
IG1lYW4gcG9seXZhcmlhbnQgcHJvZmlsaW5nIG9mICp0aGlzKiBjYWxsLiBOb3RlIHRoYXQKICAg
ICAvLyB3ZSBjb3VsZCBpbXByb3ZlIHRoYXQgYXNwZWN0IG9mIHRoaXMgYnkgZG9pbmcgcG9seW1v
cnBoaWMgaW5saW5pbmcgYnV0IGhhdmluZyB0aGUgcHJvZmlsaW5nCi0gICAgLy8gYWxzby4gQ3Vy
cmVudGx5IHdlIG9wdCBhZ2FpbnN0IHRoaXMsIGJ1dCBpdCBjb3VsZCBiZSBpbnRlcmVzdGluZy4g
VGhhdCB3b3VsZCByZXF1aXJlIGhhdmluZyBhCi0gICAgLy8gc2VwYXJhdGUgbm9kZSBmb3IgY2Fs
bCBlZGdlIHByb2ZpbGluZy4KLSAgICAvLyBGSVhNRTogSW50cm9kdWNlIHRoZSBub3Rpb24gb2Yg
YSBzZXBhcmF0ZSBjYWxsIGVkZ2UgcHJvZmlsaW5nIG5vZGUuCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjAzMwotICAgIGlmICghaXNGVEwobV9ncmFw
aC5tX3BsYW4ubW9kZSkgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5n
KCkpIHsKKyAgICAvLyBhbHNvLgorICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkg
fHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nKCkKKyAgICAgICAgfHwg
SW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Moa2luZCkpIHsKICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKICAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgKGhhcmQpLlxuIik7CiAg
ICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7
CkBAIC0xNDgyLDYgKzE2NDIsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmlu
ZyhOb2RlCiAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAi
XG4iKTsKICAgICB9CiAgICAgCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gcmVnaXN0ZXJPZmZz
ZXRPckZpcnN0RnJlZVJlZzsKKyAgICAKICAgICAvLyBUaGlzIG1ha2VzIG1lIHdpc2ggdGhhdCB3
ZSB3ZXJlIGluIFNTQSBhbGwgdGhlIHRpbWUuIFdlIG5lZWQgdG8gcGljayBhIHZhcmlhYmxlIGlu
dG8gd2hpY2ggdG8KICAgICAvLyBzdG9yZSB0aGUgY2FsbGVlIHNvIHRoYXQgaXQgd2lsbCBiZSBh
Y2Nlc3NpYmxlIHRvIGFsbCBvZiB0aGUgYmxvY2tzIHdlJ3JlIGFib3V0IHRvIGNyZWF0ZS4gV2UK
ICAgICAvLyBnZXQgYXdheSB3aXRoIGRvaW5nIGFuIGltbWVkaWF0ZS1zZXQgaGVyZSBiZWNhdXNl
IHdlIHdvdWxkbid0IGhhdmUgcGVyZm9ybWVkIGFueSBzaWRlIGVmZmVjdHMKQEAgLTE1MjYsNyAr
MTY4OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAg
ICAgYm9vbCBpbmxpbmluZ1Jlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCiAgICAgICAgICAg
ICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1tpXSwgcmVn
aXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4
dE9mZnNldCwga2luZCwgQ2FsbGVyTGlua3NNYW51YWxseSwgcHJlZGljdGlvbiwKLSAgICAgICAg
ICAgIGlubGluaW5nQmFsYW5jZSk7CisgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UsIFsmXSAo
Q29kZUJsb2NrKikgeyB9KTsKICAgICAgICAgCiAgICAgICAgIGlmICghaW5saW5pbmdSZXN1bHQp
IHsKICAgICAgICAgICAgIC8vIFRoYXQgZmFpbGVkIHNvIHdlIGxldCB0aGUgYmxvY2sgZGllLiBO
b3RoaW5nIGludGVyZXN0aW5nIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgdG8KQEAgLTE2MTAsMTQg
KzE3NzIsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50
IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+
Citib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJhbmQsIE5v
ZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKQogewogICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGgubWluKCkKKyAgICAgICAgaW5z
ZXJ0Q2hlY2tzKCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCks
IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID09IDIpIHsgLy8gTWF0aC5taW4oeCkKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAg
ICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSwgRWRnZShyZXN1bHQsIE51bWJlclVzZSkpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOwpAQCAtMTYyNSw2ICsxNzkwLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZQogICAgIH0KICAgICAKICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMykgeyAvLyBNYXRoLm1pbih4LCB5KQorICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRP
cGVyYW5kKSwgYWRkVG9HcmFwaChvcCwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdp
c3Rlck9mZnNldCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE2MzMsMTEg
KzE3OTksMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+Citib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5z
aWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVj
a3MpCiB7CiAgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKICAgICBjYXNlIEFic0ludHJpbnNpYzog
ewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRo
LmFicygpCisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZv
KG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpA
QCAtMTY0NSw2ICsxODEzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGludAogICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRB
YnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBpbnNlcnRDaGVja3Mo
KTsKICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoQXJpdGhBYnMsIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgaWYgKG1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IE92ZXJmbG93KSkKICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJmbG93
SW5ERkcpOwpAQCAtMTY1MywyOSArMTgyMiwzMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbnRyaW5zaWMoaW50CiAgICAgfQogCiAgICAgY2FzZSBNaW5JbnRyaW5zaWM6Ci0gICAgICAg
IHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4sIHJlZ2lzdGVyT2Zm
c2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIHJldHVybiBoYW5kbGVN
aW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgaW5zZXJ0Q2hlY2tzKTsKICAgICAgICAgCiAgICAgY2FzZSBNYXhJ
bnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJp
dGhNYXgsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAg
ICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNYXgsIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW5zZXJ0Q2hlY2tzKTsKICAgICAg
ICAgCiAgICAgY2FzZSBTcXJ0SW50cmluc2ljOgogICAgIGNhc2UgQ29zSW50cmluc2ljOgogICAg
IGNhc2UgU2luSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9PSAxKSB7CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwg
T3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKICAgICAgICAgY2Fz
ZSBTcXJ0SW50cmluc2ljOgorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRoU3Fy
dCwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ29z
SW50cmluc2ljOgorICAgICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRoQ29zLCBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTaW5JbnRyaW5z
aWM6CisgICAgICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhTaW4sIGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIApAQCAtMTY4OCw5ICsxODYxLDExIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICBjYXNlIFBvd0ludHJpbnNpYzog
ewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCAzKSB7CiAgICAgICAg
ICAgICAvLyBNYXRoLnBvdygpIGFuZCBNYXRoLnBvdyh4KSByZXR1cm4gTmFOLgorICAgICAgICAg
ICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0Q2hl
Y2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHlPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQp
OwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBo
KEFyaXRoUG93LCBnZXQoeE9wZXJhbmQpLCBnZXQoeU9wZXJhbmQpKSk7CkBAIC0xNzEwLDYgKzE4
ODUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKICAgICAgICAgICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNo
LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKSwgZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYXJyYXlQdXNoKTsKICAgICAgICAgICAg
IApAQCAtMTczMyw2ICsxOTA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKGludAogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgICAgICBOb2RlKiBhcnJheVBvcCA9IGFkZFRv
R3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkp
KTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFycmF5
UG9wKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc0Nyw2ICsxOTI0LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNPcGVy
YW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRv
R3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5h
c1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldChpbmRleE9wZXJhbmQpKTsKQEAgLTE3NTks
NiArMTkzNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzT3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lz
dGVyT2Zmc2V0KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4T3BlcmFuZCA9IHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgTm9kZSog
Y2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5TW9kZShBcnJh
eTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldChpbmRleE9wZXJhbmQp
KTsKQEAgLTE3NzAsNiArMTk0OSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyhpbnQKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleE9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudCgxLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9H
cmFwaChTdHJpbmdGcm9tQ2hhckNvZGUsIGdldChpbmRleE9wZXJhbmQpKTsKIApAQCAtMTc4Miw2
ICsxOTYyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBO
b2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8oMCksIE9wSW5m
byhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVy
T2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNl
dCkpKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVnRXhw
RXhlYyk7CiAgICAgICAgIApAQCAtMTc5Miw2ICsxOTczLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljKGludAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgICAg
IGluc2VydENoZWNrcygpOwogICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChS
ZWdFeHBUZXN0LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRPcGVyYW5kKSwgcmVnRXhwRXhlYyk7CiAgICAgICAgIApAQCAtMTgwMSw2ICsx
OTgzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIGNh
c2UgSU11bEludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgIT0gMykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tz
KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsZWZ0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJpZ2h0T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIsIHJlZ2lzdGVyT2Zm
c2V0KTsKICAgICAgICAgTm9kZSogbGVmdCA9IGdldChsZWZ0T3BlcmFuZCk7CkBAIC0xODEyLDI5
ICsxOTk1LDM0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAg
ICBjYXNlIEZSb3VuZEludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0
Q2hlY2tzKCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFyaXRoRlJvdW5kLCBnZXQob3BlcmFu
ZCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIERG
R1RydWVJbnRyaW5zaWM6IHsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGpzQ29uc3RhbnQoanNCb29sZWFuKHRydWUp
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBPU1JF
eGl0SW50cmluc2ljOiB7CisgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3Bl
cmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnRVbmRlZmluZWQp
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJc0Zp
bmFsVGllckludHJpbnNpYzogeworICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgICAgIGpzQ29uc3RhbnQo
anNCb29sZWFuKE9wdGlvbnM6OnVzZUZUTEpJVCgpID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9k
ZSkgOiB0cnVlKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgU2V0SW50MzJIZWFwUHJlZGljdGlvbkludHJpbnNpYzogeworICAgICAgICBpbnNlcnRD
aGVja3MoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpczsgKytpKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gZ2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAobm9k
ZS0+aGFzSGVhcFByZWRpY3Rpb24oKSkKQEAgLTE4NDcsNiArMjAzNSw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICBjYXNlIEZpYXRJbnQ1MkludHJpbnNp
YzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVn
aXN0ZXJPZmZzZXQpOwogICAgICAgICBpZiAoZW5hYmxlSW50NTIoKSkKICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoRmlhdEludDUyLCBn
ZXQob3BlcmFuZCkpKTsKQEAgLTE4NjAsOSArMjA0OSwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgfQogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVj
a3NGdW5jdG9yPgogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbnN0cnVj
dG9yKAogICAgIGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwg
aW50IHJlZ2lzdGVyT2Zmc2V0LAotICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
VHlwZWRBcnJheVR5cGUgdHlwZSkKKyAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IFR5cGVkQXJyYXlUeXBlIHR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykK
IHsKICAgICBpZiAoIWlzVHlwZWRWaWV3KHR5cGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xOTA2LDE2ICsyMDk2LDIxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVR5cGVkQXJy
YXlDb24KICAgICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgaW5zZXJ0Q2hlY2tzKCk7CiAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgYWRkVG9HcmFwaChOZXdU
eXBlZEFycmF5LCBPcEluZm8odHlwZSksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgx
LCByZWdpc3Rlck9mZnNldCkpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFu
dEludGVybmFsRnVuY3Rpb24oCiAgICAgaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rp
b24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCi0gICAgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIGNvbnN0
IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcykKIHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiICAgIEhhbmRsaW5nIGNvbnN0YW50IGludGVybmFsIGZ1bmN0aW9uICIsIEpT
VmFsdWUoZnVuY3Rpb24pLCAiXG4iKTsKKyAgICAKICAgICAvLyBJZiB3ZSBldmVyIGZpbmQgdGhh
dCB3ZSBoYXZlIGEgbG90IG9mIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IHdlIHNwZWNpYWxpemUg
Zm9yLAogICAgIC8vIHRoZW4gd2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgc29tZSBzb3J0IG9mIGhh
c2h0YWJsZSBkaXNwYXRjaCwgb3IgbWF5YmUgZXZlbgogICAgIC8vIGRpc3BhdGNoIHN0cmFpZ2h0
IHRocm91Z2ggdGhlIE1ldGhvZFRhYmxlIG9mIHRoZSBJbnRlcm5hbEZ1bmN0aW9uLiBCdXQgZm9y
IG5vdywKQEAgLTE5MjcsNiArMjEyMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNv
bnN0YW50SW50ZXIKICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nbG9iYWxPYmplY3QoKSAhPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsKICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChOZXdBcnJheVdpdGhTaXplLCBPcEluZm8oQXJyYXlXaXRoVW5kZWNpZGVkKSwgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpKTsKQEAgLTE5NDEsNiAr
MjEzNyw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICB9
CiAgICAgCiAgICAgaWYgKGZ1bmN0aW9uLT5jbGFzc0luZm8oKSA9PSBTdHJpbmdDb25zdHJ1Y3Rv
cjo6aW5mbygpKSB7CisgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAKICAgICAgICAg
Tm9kZSogcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIDw9IDEpCkBAIC0xOTU4LDcgKzIxNTYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVDb25zdGFudEludGVyCiAgICAgZm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0eXBl
SW5kZXggPCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7ICsrdHlwZUluZGV4KSB7CiAgICAg
ICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKAogICAgICAgICAg
ICAgcmVzdWx0T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywKLSAgICAgICAgICAgIGluZGV4VG9UeXBlZEFycmF5VHlwZSh0eXBlSW5k
ZXgpKTsKKyAgICAgICAgICAgIGluZGV4VG9UeXBlZEFycmF5VHlwZSh0eXBlSW5kZXgpLCBpbnNl
cnRDaGVja3MpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtMzEyMiw0MyArMzMyMCw3MCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpbnQgdGhpc1JlZyA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgYXJndW1lbnRzID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBmaXJzdEZyZWVSZWcgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGZpcnN0VmFy
QXJnT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZSgpKTsKLSAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoYXJndW1lbnRzLCBhcmd1bWVudHMgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOwotICAgICAgICAgICAgQVNT
RVJUKCFtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xvd0Fy
Z3VtZW50cygpKTsKLQotICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0FyZ3VtZW50c05vdENy
ZWF0ZWQpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGlubGluZUNhbGxGcmFt
ZSgpLT5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBMZXQn
cyBjb21wdXRlIHRoZSByZWdpc3RlciBvZmZzZXQuIFdlIHN0YXJ0IHdpdGggdGhlIGxhc3QgdXNl
ZCByZWdpc3RlciwgYW5kCi0gICAgICAgICAgICAvLyB0aGVuIGFkanVzdCBmb3IgdGhlIHRoaW5n
cyB3ZSB3YW50IGluIHRoZSBjYWxsIGZyYW1lLgotICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gZmlyc3RGcmVlUmVnICsgMTsKLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0IC09IGFy
Z0NvdW50OyAvLyBXZSB3aWxsIGJlIHBhc3Npbmcgc29tZSBhcmd1bWVudHMuCi0gICAgICAgICAg
ICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyAvLyBXZSB3
aWxsIHByZXRlbmQgdG8gaGF2ZSBhIGNhbGwgZnJhbWUgaGVhZGVyLgorICAgICAgICAgICAgaWYg
KGFyZ3VtZW50cyA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dW5jaGVja2VkQXJn
dW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xvd0FyZ3VtZW50cygpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpCisgICAgICAgICAgICAgICAgICAg
ICYmICFpbmxpbmVDYWxsRnJhbWUoKS0+aXNWYXJhcmdzKCkKKyAgICAgICAgICAgICAgICAgICAg
JiYgIWZpcnN0VmFyQXJnT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKKworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhcmdDb3VudCA9IGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIExldCdzIGNvbXB1dGUgdGhlIHJlZ2lzdGVy
IG9mZnNldC4gV2Ugc3RhcnQgd2l0aCB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyLCBhbmQKKyAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlbiBhZGp1c3QgZm9yIHRoZSB0aGluZ3Mgd2Ugd2FudCBpbiB0
aGUgY2FsbCBmcmFtZS4KKyAgICAgICAgICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
Zmlyc3RGcmVlUmVnICsgMTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0g
YXJnQ291bnQ7IC8vIFdlIHdpbGwgYmUgcGFzc2luZyBzb21lIGFyZ3VtZW50cy4KKyAgICAgICAg
ICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgLT0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZTsgLy8gV2Ugd2lsbCBwcmV0ZW5kIHRvIGhhdmUgYSBjYWxsIGZyYW1lIGhlYWRlci4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFsaWdubWVudCByaWdodC4K
KyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgZW5zdXJlTG9jYWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJ5dGVjb2RlIHdvdWxkbid0IGhhdmUgc2V0IHVw
IHRoZSBhcmd1bWVudHMuIEJ1dCB3ZSdsbCBkbyBpdCBhbmQgbWFrZSBpdAorICAgICAgICAgICAg
ICAgICAgICAvLyBsb29rIGxpa2UgdGhlIGJ5dGVjb2RlIGhhZCBkb25lIGl0LgorICAgICAgICAg
ICAgICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSksIEltbWVk
aWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBoYW5kbGVDYWxsKAorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LCBDYWxsLCBDb2RlRm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxs
X3ZhcmFyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVlLCBhcmdDb3VudCwgcmVn
aXN0ZXJPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3Zh
cmFyZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBFbWl0IENhbGxGb3J3YXJkVmFyYXJncworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG1lYW5zIHdlIGNhbm5vdCBpbmxpbmUgZm9yd2FyZGVkIHZhcmFyZ3MgY2FsbHMgaW5z
aWRlIGEgdmFyYXJncworICAgICAgICAgICAgICAgIC8vIGNhbGwgZnJhbWUuIFdlIHdpbGwgcHJv
YmFibHkgZml4IHRoYXQgb25jZSB3ZSBmaW5hbGx5IGdldCByaWQgb2YgdGhlCisgICAgICAgICAg
ICAgICAgLy8gYXJndW1lbnRzIG9iamVjdCBzcGVjaWFsLWNhc2luZy4KKyAgICAgICAgICAgICAg
ICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgp
OworICAgICAgICAgICAgICAgIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJBcmdP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogY2FsbCA9IGFk
ZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgICAgIENhbGxGb3J3YXJkVmFyYXJncywgT3BJbmZv
KGRhdGEpLCBPcEluZm8oZ2V0UHJlZGljdGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0
KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSkp
OworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Y2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gR2V0IHRoZSBhbGlnbm1lbnQgcmlnaHQuCi0gICAgICAgICAgICByZWdpc3Rlck9mZnNldCA9
IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoCi0gICAgICAgICAgICAgICAgc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwotCi0gICAg
ICAgICAgICBlbnN1cmVMb2NhbHMoCi0gICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXQpKS50b0xvY2FsKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUaGUg
Ynl0ZWNvZGUgd291bGRuJ3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3VtZW50cy4gQnV0IHdlJ2xsIGRv
IGl0IGFuZCBtYWtlIGl0Ci0gICAgICAgICAgICAvLyBsb29rIGxpa2UgdGhlIGJ5dGVjb2RlIGhh
ZCBkb25lIGl0LgotICAgICAgICAgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0
ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpKSwg
SW1tZWRpYXRlTmFrZWRTZXQpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9
IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChhcmd1bWVudCkpLCBJbW1lZGlhdGVOYWtlZFNldCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGhhbmRsZUNhbGwoCi0gICAgICAgICAgICAgICAgcmVzdWx0LCBDYWxsLCBDb2Rl
Rm9yQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLAotICAgICAgICAgICAgICAg
IGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgIGhhbmRsZVZh
cmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbFZhcmFyZ3MsIENvZGVGb3JDYWxsKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAg
ICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdFZhcmFy
Z3MsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY29uc3Ry
dWN0X3ZhcmFyZ3MpOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9q
bmVxX3B0cjoKICAgICAgICAgICAgIC8vIFN0YXRpY2FsbHkgc3BlY3VsYXRlIGZvciBub3cuIEl0
IG1ha2VzIHNlbnNlIHRvIGxldCBzcGVjdWxhdGUtb25seSBqbmVxX3B0cgogICAgICAgICAgICAg
Ly8gc3VwcG9ydCBzaW1tZXIgZm9yIGEgd2hpbGUgYmVmb3JlIG1ha2luZyBpdCBtb3JlIGdlbmVy
YWwsIHNpbmNlIGl0J3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC05Niw2ICs5Niw4IEBAIGlubGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxvY2sqIGNvZGVCbG8K
IAogQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiBwYykKIHsKKyAgICBVTlVTRURfUEFSQU0o
Y29kZUJsb2NrKTsgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIHNvbWUgYnl0ZWNvZGUgcGFyc2luZy4g
T3JkaW5hcmlseSBieXRlY29kZSBwYXJzaW5nIHJlcXVpcmVzIHRoZSBvd25pbmcgQ29kZUJsb2Nr
LiBJdCdzIHNvcnQgb2Ygc3RyYW5nZSB0aGF0IHdlIGRvbid0IHVzZSBpdCBoZXJlIHJpZ2h0IG5v
dy4KKyAgICAKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgY2FzZSBvcF9lbnRlcjoKICAg
ICBjYXNlIG9wX3RvdWNoX2VudHJ5OgpAQCAtMTgyLDYgKzE4NCw4IEBAIENhcGFiaWxpdHlMZXZl
bCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJv
cjoKICAgICBjYXNlIG9wX2NhbGw6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBv
cF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNl
IG9wX2luaXRfbGF6eV9yZWc6CiAgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOgogICAgIGNh
c2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOgpAQCAtMjIzLDE0ICsyMjcsNiBAQCBDYXBhYmlsaXR5
TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgICAgIHJldHVybiBDYW5Db21waWxl
QW5kSW5saW5lOwogICAgIH0KIAotICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgotICAgICAgICBp
ZiAoY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgcGNbNF0udS5vcGVyYW5kID09IGNvZGVC
bG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKQotICAgICAgICAgICAgJiYgIXBjWzZd
LnUub3BlcmFuZCkKLSAgICAgICAgICAgIHJldHVybiBDYW5JbmxpbmU7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgaGFuZGxlIHRoaXMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjYKLSAgICAgICAgcmV0dXJuIENhbm5vdENvbXBp
bGU7Ci0KICAgICBjYXNlIG9wX25ld19yZWdleHA6IAogICAgIGNhc2Ugb3BfY3JlYXRlX2xleGlj
YWxfZW52aXJvbm1lbnQ6CiAgICAgY2FzZSBvcF9uZXdfZnVuYzoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMTgwMjI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC04Niw5ICs4Niw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwg
ZnVuY3Rpb25DYXBhYmlsaXQKICAgICAgICAgcmV0dXJuIGxlYXN0VXBwZXJCb3VuZChDYW5Db21w
aWxlQW5kSW5saW5lLCBjb21wdXRlZENhcGFiaWxpdHlMZXZlbCk7CiAgICAgaWYgKG1pZ2h0Q29t
cGlsZSAmJiAhbWlnaHRJbmxpbmUpCiAgICAgICAgIHJldHVybiBsZWFzdFVwcGVyQm91bmQoQ2Fu
Q29tcGlsZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwotICAgIGlmICghbWlnaHRDb21waWxl
ICYmIG1pZ2h0SW5saW5lKQotICAgICAgICByZXR1cm4gbGVhc3RVcHBlckJvdW5kKENhbklubGlu
ZSwgY29tcHV0ZWRDYXBhYmlsaXR5TGV2ZWwpOwotICAgIGlmICghbWlnaHRDb21waWxlICYmICFt
aWdodElubGluZSkKKyAgICBpZiAoIW1pZ2h0Q29tcGlsZSkKICAgICAgICAgcmV0dXJuIENhbm5v
dENvbXBpbGU7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4g
Q2Fubm90Q29tcGlsZTsKQEAgLTE0Miw2ICsxNDAsMTQgQEAgaW5saW5lIGJvb2wgbWlnaHRJbmxp
bmVGdW5jdGlvbkZvcihDb2RlQgogICAgIHJldHVybiBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29u
c3RydWN0KGNvZGVCbG9jayk7CiB9CiAKK2lubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7
CisgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgIHJldHVybiBtaWdodENvbXBp
bGVGdW5jdGlvbkZvckNhbGwoY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0KTsKKyAgICByZXR1cm4gbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3Qo
Y29kZUJsb2NrKTsKK30KKwogaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbihDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZvcihjb2Rl
QmxvY2ssIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjYsNiArMzY2LDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5h
dGl2ZUNvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndh
cmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIFRvUHJpbWl0
aXZlOgogICAgIGNhc2UgSW46CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CkBA
IC00MDEsNiArNDA0LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgIC8vIFRo
aXMgYWN0dWFsbHkgd3JpdGVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsLiBCdXQgd2hlbiBp
dCByZWFkcyB0aGUgYXJyYXksIGl0IGRvZXMKKyAgICAgICAgLy8gc28gaW4gYSB3YXkgdGhhdCBt
YXkgdHJpZ2dlciBnZXR0ZXJzIG9yIHZhcmlvdXMgdHJhcHMuCisgICAgICAgIHJlYWQoV29ybGQp
OworICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAg
Y2FzZSBHZXRMb2NhbFVubGlua2VkOgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFZh
cmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkp
KSwgbm9kZSk7CkBAIC04ODEsNyArODkxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgREZHX0NSQVNIKGdyYXBoLCBub2RlLCB0b0NTdHJp
bmcoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3AoKSkp
LmRhdGEoKSk7CiB9CiAKIGNsYXNzIE5vT3BDbG9iYmVyaXplIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwx
MCArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIK
IAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTEzMSwz
ICsxMzIsMjggQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFBybwogCiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBD
YXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKQoreworICAgIHN3aXRjaCAoY2FwYWJpbGl0
eUxldmVsKSB7CisgICAgY2FzZSBDYW5ub3RDb21waWxlOgorICAgICAgICBvdXQucHJpbnQoIkNh
bm5vdENvbXBpbGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FuQ29tcGlsZToKKyAg
ICAgICAgb3V0LnByaW50KCJDYW5Db21waWxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENhbkNvbXBpbGVBbmRJbmxpbmU6CisgICAgICAgIG91dC5wcmludCgiQ2FuQ29tcGlsZUFuZElu
bGluZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYXBhYmlsaXR5TGV2ZWxOb3RTZXQ6
CisgICAgICAgIG91dC5wcmludCgiQ2FwYWJpbGl0eUxldmVsTm90U2V0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Miw3ICsyOTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKIGVudW0gQ2FwYWJpbGl0eUxldmVsIHsKICAgICBDYW5ub3RDb21w
aWxlLAotICAgIENhbklubGluZSwKICAgICBDYW5Db21waWxlLAogICAgIENhbkNvbXBpbGVBbmRJ
bmxpbmUsCiAgICAgQ2FwYWJpbGl0eUxldmVsTm90U2V0CkBAIC0zMTIsNyArMzExLDYgQEAgaW5s
aW5lIGJvb2wgY2FuQ29tcGlsZShDYXBhYmlsaXR5TGV2ZWwgbAogaW5saW5lIGJvb2wgY2FuSW5s
aW5lKENhcGFiaWxpdHlMZXZlbCBsZXZlbCkKIHsKICAgICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAg
Y2FzZSBDYW5JbmxpbmU6CiAgICAgY2FzZSBDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMzI1LDE0ICszMjMsNiBAQCBpbmxpbmUgQ2Fw
YWJpbGl0eUxldmVsIGxlYXN0VXBwZXJCb3VuZChDCiAgICAgc3dpdGNoIChhKSB7CiAgICAgY2Fz
ZSBDYW5ub3RDb21waWxlOgogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKLSAgICBjYXNl
IENhbklubGluZToKLSAgICAgICAgc3dpdGNoIChiKSB7Ci0gICAgICAgIGNhc2UgQ2FuSW5saW5l
OgotICAgICAgICBjYXNlIENhbkNvbXBpbGVBbmRJbmxpbmU6Ci0gICAgICAgICAgICByZXR1cm4g
Q2FuSW5saW5lOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIENhbm5vdENv
bXBpbGU7Ci0gICAgICAgIH0KICAgICBjYXNlIENhbkNvbXBpbGU6CiAgICAgICAgIHN3aXRjaCAo
YikgewogICAgICAgICBjYXNlIENhbkNvbXBpbGU6CkBAIC0zNjQsNSArMzU0LDExIEBAIGlubGlu
ZSBib29sIHNob3VsZFNob3dEaXNhc3NlbWJseShDb21waWwKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpERkc6OkNhcGFiaWxpdHlMZXZlbCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CiAjZW5kaWYgLy8gREZHQ29tbW9uX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDEwIEBAIGJv
b2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENvbXBhcmVTdHJp
Y3RFcToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxs
VmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBMb2FkVmFyYXJn
czoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAg
ICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBCcmVha3BvaW50OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODAy
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjE0LDYgKzEyMTQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBB
bGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAg
Y2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAg
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93Ogog
ICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4MDIy
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTMsNiArMzEzLDE4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnN0b3Jh
Z2VQb2ludGVyKCkpKTsKICAgICBpZiAobm9kZS0+aGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlv
bkRhdGEoKSk7CisgICAgaWYgKG5vZGUtPmhhc0NhbGxWYXJhcmdzRGF0YSgpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJmaXJzdFZhckFyZ09mZnNldCA9ICIsIG5vZGUtPmNhbGxWYXJhcmdz
RGF0YSgpLT5maXJzdFZhckFyZ09mZnNldCk7CisgICAgaWYgKG5vZGUtPmhhc0xvYWRWYXJhcmdz
RGF0YSgpKSB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJh
cmdzRGF0YSgpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdGFydCA9ICIsIGRhdGEtPnN0
YXJ0LCAiLCBjb3VudCA9ICIsIGRhdGEtPmNvdW50KTsKKyAgICAgICAgaWYgKGRhdGEtPm1hY2hp
bmVTdGFydC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgbWFjaGluZVN0YXJ0
ID0gIiwgZGF0YS0+bWFjaGluZVN0YXJ0KTsKKyAgICAgICAgaWYgKGRhdGEtPm1hY2hpbmVDb3Vu
dC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgbWFjaGluZUNvdW50ID0gIiwg
ZGF0YS0+bWFjaGluZUNvdW50KTsKKyAgICAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIGRh
dGEtPm9mZnNldCwgIiwgbWFuZGF0b3J5TWluaW11bSA9ICIsIGRhdGEtPm1hbmRhdG9yeU1pbmlt
dW0pOworICAgICAgICBvdXQucHJpbnQoIiwgbGltaXQgPSAiLCBkYXRhLT5saW1pdCk7CisgICAg
fQogICAgIGlmIChub2RlLT5pc0NvbnN0YW50KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
cG9pbnRlckR1bXBJbkNvbnRleHQobm9kZS0+Y29uc3RhbnQoKSwgY29udGV4dCkpOwogICAgIGlm
IChub2RlLT5pc0p1bXAoKSkKQEAgLTQwMCw3ICs0MTIsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxv
Y2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2st
PnBoaXNbaV07CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYg
cGhpTm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwi
LCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAgICAgICAgb3V0LnByaW50KCIg
QCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+bG9jYWwoKSwgIiwiLCBwaGlOb2Rl
LT5yZWZDb3VudCgpLCAiPi0+KCIpOwogICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgp
KSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmlu
ZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewpAQCAtODY5
LDEwICs4ODEsMTIgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaQog
ICAgICAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZWcub2Zmc2V0KCkgPCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsCisgICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNr
OjpDYWxsZWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChyZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVl
KQorICAgICAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNWYXJh
cmdzKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVnLm9mZnNldCgpID09IEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMzUsNiArMTI0OSw1
MSBAQCB2b2lkIEdyYXBoOjpoYW5kbGVBc3NlcnRpb25GYWlsdXJlKAogICAgIGNyYXNoKCp0aGlz
LCB0b0NTdHJpbmcoIldoaWxlIGhhbmRsaW5nIGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwg
IlxuXG4iKSwgZmlsZSwgbGluZSwgZnVuY3Rpb24sIGFzc2VydGlvbik7CiB9CiAKK1ZhbHVlUHJv
ZmlsZSogR3JhcGg6OnZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQoreworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CisgICAgICAgIAorICAgIGlmIChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKKyAgICAgICAgaWYg
KCFub2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQoKTsKKyAg
ICAgICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9hcmd1bWVudHNbYXJndW1lbnRdOworICAgICAg
ICBpZiAoIWFyZ3VtZW50Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gYXJndW1lbnROb2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOworICAg
IH0KKyAgICAgICAgCisgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9uKCkpCisgICAgICAg
IHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2Rl
LT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgIHJldHVybiBu
dWxscHRyOworfQorCitNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOworICAgIAorICAg
IGlmIChWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSA9IHZhbHVlUHJvZmlsZUZvcihub2RlKSkK
KyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUodmFsdWVQcm9maWxl
KTsKKyAgICAKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICBDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKKyAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCisg
ICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKKyAgICAgICAgICAgICAgICBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCwgbm9kZS0+bG9jYWwoKSkpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpOworfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4MDIyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00NzIsNTAgKzQ3Miw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fcHJvZmlsZWRCbG9jay0+dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyKCk7CiAgICAgfQog
ICAgIAotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgCi0gICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+
aGFzTG9jYWwoKnRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmxvY2FsKCkuaXNBcmd1
bWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50ID0gbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7Ci0gICAgICAgICAgICBOb2RlKiBhcmd1
bWVudE5vZGUgPSBtX2FyZ3VtZW50c1thcmd1bWVudF07Ci0gICAgICAgICAgICBpZiAoIWFyZ3Vt
ZW50Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSBhcmd1bWVudE5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAg
cmV0dXJuIHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0hlYXBQcmVkaWN0aW9u
KCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOwotICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgbWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQot
ICAgIHsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0dXJuIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChWYWx1ZVByb2ZpbGUq
IHZhbHVlUHJvZmlsZSA9IHZhbHVlUHJvZmlsZUZvcihub2RlKSkKLSAgICAgICAgICAgIHJldHVy
biBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKLSAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAotICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxv
Y2ssCi0gICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4LCBub2RlLT5s
b2NhbCgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlKCk7Ci0gICAgfQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9m
aWxlRm9yKE5vZGUqKTsKKyAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIG1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSopOwogICAgIAogICAgIGJvb2wgdXNlc0FyZ3Vt
ZW50cygpIGNvbnN0CiAgICAgewpAQCAtODUzLDYgKzgxMSw4IEBAIHB1YmxpYzoKICAgICBCYWc8
TXVsdGlHZXRCeU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgQmFnPE11
bHRpUHV0QnlPZmZzZXREYXRhPiBtX211bHRpUHV0QnlPZmZzZXREYXRhOwogICAgIEJhZzxPYmpl
Y3RNYXRlcmlhbGl6YXRpb25EYXRhPiBtX29iamVjdE1hdGVyaWFsaXphdGlvbkRhdGE7CisgICAg
QmFnPENhbGxWYXJhcmdzRGF0YT4gbV9jYWxsVmFyYXJnc0RhdGE7CisgICAgQmFnPExvYWRWYXJh
cmdzRGF0YT4gbV9sb2FkVmFyYXJnc0RhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0
YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6
OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAg
ICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMjIsNiArMTIyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlv
bkhhbmRsZQogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1l
IGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZy
YW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX2dyYXBoLnN0
YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2KQogICAgICAg
ICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGUgY2FsbCBhYnN0cmFjdGlvbiwgYnV0IHRoaXMgaXMg
Y3VycmVudGx5IGluIHRoZSBTcGVjdWxhdGl2ZUpJVCBsYXllciEKQEAgLTI0Nyw3ICsyNDgsNyBA
QCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIEpTQ2Fs
bFJlY29yZCYgcmVjb3JkID0gbV9qc0NhbGxzW2ldOwogICAgICAgICBDYWxsTGlua0luZm8mIGlu
Zm8gPSAqcmVjb3JkLm1faW5mbzsKICAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0g
bGlua1RodW5rR2VuZXJhdG9yRm9yKAotICAgICAgICAgICAgaW5mby5jYWxsVHlwZSA9PSBDYWxs
TGlua0luZm86OkNvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAg
ICAgICAgICAgIGluZm8uc3BlY2lhbGl6YXRpb25LaW5kKCksCiAgICAgICAgICAgICBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29y
ZC5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cihtX3ZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQubV9zbG93Q2FsbCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE4
MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTg0LDYgKzg0LDcgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2Ug
UGhhbnRvbUxvY2FsOgorICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDIwIEBAIHN0cnVjdCBTd2l0Y2hEYXRh
IHsKICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKIH07CiAKK3N0cnVjdCBDYWxsVmFyYXJnc0Rh
dGEgeworICAgIGludCBmaXJzdFZhckFyZ09mZnNldDsKK307CisKK3N0cnVjdCBMb2FkVmFyYXJn
c0RhdGEgeworICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydDsgLy8gTG9jYWwgZm9yIHRoZSBmaXJz
dCBlbGVtZW50LgorICAgIFZpcnR1YWxSZWdpc3RlciBjb3VudDsgLy8gTG9jYWwgZm9yIHRoZSBj
b3VudC4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVN0YXJ0OworICAgIFZpcnR1YWxSZWdp
c3RlciBtYWNoaW5lQ291bnQ7CisgICAgdW5zaWduZWQgb2Zmc2V0OyAvLyBXaGljaCBhcnJheSBl
bGVtZW50IHRvIHN0YXJ0IHdpdGguIFVzdWFsbHkgdGhpcyBpcyAwLgorICAgIHVuc2lnbmVkIG1h
bmRhdG9yeU1pbmltdW07IC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb24gdGhlIHN0YWNrIHRo
YXQgbXVzdCBiZSBpbml0aWFsaXplZDsgaWYgdGhlIGFycmF5IGlzIHRvbyBzaG9ydCB0aGVuIHRo
ZSBtaXNzaW5nIGVsZW1lbnRzIG11c3QgZ2V0IHVuZGVmaW5lZC4gRG9lcyBub3QgaW5jbHVkZSAi
dGhpcyIuCisgICAgdW5zaWduZWQgbGltaXQ7IC8vIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRz
IHRvIGxvYWQuIEluY2x1ZGVzICJ0aGlzIi4KK307CisKIC8vIFRoaXMgdHlwZSB1c2VkIGluIHBh
c3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0
aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBD
b2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50
LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCkBAIC04OTUsNiArOTA5LDM1IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93
bj4qPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzQ2FsbFZhcmFyZ3NEYXRh
KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIENhbGxWYXJh
cmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Q2FsbFZhcmFyZ3NEYXRhKiBjYWxsVmFyYXJnc0RhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGhhc0NhbGxWYXJhcmdzRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxDYWxs
VmFyYXJnc0RhdGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzTG9hZFZh
cmFyZ3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IExvYWRWYXJhcmdzOwor
ICAgIH0KKyAgICAKKyAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJhcmdzRGF0YSgpCisgICAg
eworICAgICAgICBBU1NFUlQoaGFzTG9hZFZhcmFyZ3NEYXRhKCkpOworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PExvYWRWYXJhcmdzRGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAg
ICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKICAgICAgICAgcmV0dXJuICEhcmVzdWx0KCk7CkBA
IC0xMDQ5LDYgKzEwOTIsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsU2FmZToKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBOYXRp
dmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICAvKiB0aGlzIG11c3QgYmUgdGhlIGRpcmVjdGx5IHN1YnNlcXVlbnQg
cHJvcGVydHkgcHV0LiBOb3RlIHRoYXQgUHV0QnlWYWwgKi9cCiAgICAgLyogb3Bjb2RlcyB1c2Ug
VmFyQXJncyBiZWF1c2UgdGhleSBtYXkgaGF2ZSB1cCB0byA0IGNoaWxkcmVuLiAqL1wKICAgICBt
YWNybyhHZXRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1h
Y3JvKExvYWRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxE
aXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKFB1
dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhQ
dXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKQEAgLTIx
Nyw2ICsyMTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogQ2Fs
bHMuICovXAogICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlSGFzVmFyQXJncykgXAogICAgIG1hY3JvKENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oQ2FsbFZhcmFy
Z3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDYWxsRm9y
d2FyZFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhDb25zdHJ1Y3RWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oTmF0aXZlQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFjcm8oTmF0aXZlQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTU2LDYgKzE1NiwxNyBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjo6ZXhlCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBM
b2FkVmFyYXJnczogeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2Fk
VmFyYXJnc0RhdGEoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChk
YXRhLT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVk
SW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBk
YXRhLT5saW1pdDsgaS0tOykgeworICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMu
b3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSkgPQorICAg
ICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIFZpcnR1
YWxSZWdpc3RlcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkgKyBpKSkpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE1Miw3ICsxNTIsOSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKGlubGluZUNhbGxGcmFt
ZS0+a2luZCkgewogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKLSAgICAgICAg
Y2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDogeworICAgICAgICBjYXNlIElubGluZUNh
bGxGcmFtZTo6Q29uc3RydWN0OgorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZh
cmFyZ3M6CisgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOiB7
CiAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9CiAgICAgICAgICAgICAg
ICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2Rl
SW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2Fs
bExpbmtJbmZvKTsKQEAgLTE5NSwxMiArMTk3LDEzIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgaWYgKHRydWVSZXR1cm5QQykKICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodHJ1ZVJldHVyblBD
KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0jaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6
Q29kZUJsb2NrKSkpOworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
CisgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxv
YWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0
LnN0b3JlNjQoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVP
ZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNv
ZGVPZmZzZXQoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQu
c3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICAKQEAgLTIwOCwxMiArMjExLDEwIEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgaWYgKGJh
c2VsaW5lQ29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpCiAgICAgICAgICAgICBqaXQubG9hZFB0
cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYmFzZWxpbmVD
b2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgpKSksIEdQUkluZm86OnJlZ1Qz
KTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0
Ci0gICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFz
ZWxpbmVDb2RlQmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNvZGVCbG9jaykp
KTsKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQo
KSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKICAg
ICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2Rl
QXNCeXRlY29kZUluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKICAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgaml0LnN0b3JlUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNv
bnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rlciko
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDE4LDYgKzEwMTgsMjcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKAogICAgIHNldC0+bm90aWZ5V3JpdGUo
dm0sIHZhbHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3JpdGUiKTsKIH0KIAoraW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRBcmd1bWVudHMpOworICAgIAorICAgIHJldHVybiBzaXplT2ZWYXJhcmdzKGV4ZWMsIGFyZ3Vt
ZW50cywgZmlyc3RWYXJBcmdPZmZzZXQpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90
IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwor
ICAgIAorICAgIGxvYWRWYXJhcmdzKGV4ZWMsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnRE
ZXN0KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgCisgICAgZm9yIChpbnQzMl90
IGkgPSBsZW5ndGg7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kpCisgICAgICAgIGV4ZWMtPnIo
Zmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKK30KKwogZG91YmxlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAg
ICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjUs
NiArMTI1LDggQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMwogY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJ
bmRleCwgSlNTdHJpbmcqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0
ZShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7Citp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSosIGludDMyX3Qg
Zmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IG9mZnNl
dCwgaW50MzJfdCBsZW5ndGgsIGludDMyX3QgbWFuZGF0b3J5TWluaW11bSk7CiAKIGludDY0X3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0ludDUyKEVuY29kZWRK
U1ZhbHVlKTsKIGludDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG91YmxlVG9J
bnQ1Mihkb3VibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShy
ZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NywxMCArODcsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCi1zdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdy
YXBoLCBjb25zdCBjaGFyKiB0ZXh0KQorc3RhdGljIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdy
YXBoJiBncmFwaCwgY29uc3QgY2hhciogdGV4dCwgYm9vbCBmb3JjZUR1bXAgPSBmYWxzZSkKIHsK
ICAgICBHcmFwaER1bXBNb2RlIG1vZGVGb3JGaW5hbFZhbGlkYXRlID0gRHVtcEdyYXBoOwotICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKGdyYXBoLm1fcGxhbi5tb2RlKSkgeworICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKGdyYXBoLm1fcGxhbi5tb2RlKSB8fCBmb3Jj
ZUR1bXApIHsKICAgICAgICAgZGF0YUxvZyh0ZXh0LCAiXG4iKTsKICAgICAgICAgZ3JhcGguZHVt
cCgpOwogICAgICAgICBtb2RlRm9yRmluYWxWYWxpZGF0ZSA9IERvbnREdW1wR3JhcGg7CkBAIC0z
NjksNyArMzY5LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgog
ICAgICAgICAgICAgcmV0dXJuIEZhaWxQYXRoOwogICAgICAgICB9CiAKLSAgICAgICAgZHVtcEFu
ZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiKTsKKyAg
ICAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dl
cmluZzoiLCBzaG91bGRTaG93RGlzYXNzZW1ibHkobW9kZSkpOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBoYXZlTExWTTsKICAgICAgICAgU2FmZXBvaW50OjpSZXN1bHQgc2FmZXBvaW50UmVzdWx0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNl
TG9jYWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzMs
MTEgKzEzMywyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVn
aXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICAgICAgbV9y
ZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgd3Jp
dGVUb3AoKQogICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncykg
eworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIG5vdGUgdGhlIHdyaXRlcyB0byB0aGUgbG9j
YWxzIHRoYXQgd2lsbCBzdG9yZSB0aGUgYXJyYXkgZWxlbWVudHMgYW5kCisgICAgICAgICAgICAv
LyBjb3VudC4KKyAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgICAgICBtX3dyaXRlKGRhdGEtPmNvdW50KTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQorICAgICAgICAgICAg
ICAgIG1fd3JpdGUoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0
byBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBDYWxsRm9yd2FyZFZhcmFyZ3MsIHNpbmNlIGl0IHJl
YWRzCisgICAgICAgIC8vIG91ciBhcmd1bWVudHMgdGhlIHNhbWUgd2F5IHRoYXQgYW55IGVmZmVj
dGZ1bCB0aGluZyBtaWdodC4KKyAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLm1fY29kZUJs
b2NrLT51c2VzQXJndW1lbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
Z3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCiAgICAgICAgICAg
ICAgICAgbV93cml0ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTg4LDYgKzE4OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
R2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKKyAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgTmF0
aXZlQ2FsbDoKICAgICAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgR2V0
R2xvYmFsVmFyOgpAQCAtNjM1LDYgKzYzOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29u
c3RhbnRTdG9yYWdlUG9pbnRlcjoKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0
IG9ubHkgcHJldGVuZHMgdG8gcHJvZHVjZSBhIHZhbHVlLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24g
MTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODks
NiArMTg5LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAg
ICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1
Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Cisg
ICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBj
YXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRo
U2l6ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEx
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
IgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxv
Zy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC02MzgsMzUgKzYzOSwx
NzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1pc2NTdHJpY3RFcQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogewotICAgIGJvb2wgaXNDYWxsID0g
bm9kZS0+b3AoKSA9PSBDYWxsOwotICAgIGlmICghaXNDYWxsKQotICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBDb25zdHJ1Y3QpOwotCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRo
aXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAg
Ly8gZm9yIGl0LgotICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOwot
Ci0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGlzQ2FsbCA/IENhbGxMaW5r
SW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OwotCi0gICAgRWRnZSBjYWxsZWVF
ZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKV07
CisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBib29sIGlzQ2FsbDsK
KyAgICBib29sIGlzVmFyYXJnczsKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNl
IENhbGw6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOworICAgICAgICBp
c0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpD
b25zdHJ1Y3Q7CisgICAgICAgIGlzQ2FsbCA9IGZhbHNlOworICAgICAgICBpc1ZhcmFyZ3MgPSBm
YWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENh
bGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxW
YXJhcmdzOworICAgICAgICBpc0NhbGwgPSB0cnVlOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIGNh
bGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICBpc0NhbGwg
PSBmYWxzZTsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJiYWQgbm9k
ZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KIAotICAgIC8vIFRoZSBjYWxsIGluc3Ry
dWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBmdW5jdGlvbiAobm9ybWFsIGNhbGwp
IG9yIHRoZQotICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1YnNlcXVlbnQgY2hpbGRy
ZW4gYXJlIHRoZSBhcmd1bWVudHMuCi0gICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1D
aGlsZHJlbigpIC0gMTsKKyAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxk
KG5vZGUsIDApOwogICAgIAotICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15
VGhpc0FyZ3VtZW50OwotCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG51bUFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKTsKKyAgICAvLyBHb3R0YSBsb2FkIHRoZSBhcmd1bWVudHMgc29tZWhvdy4g
VmFyYXJncyBpcyB0cmlja2llci4KKyAgICBpZiAoaXNWYXJhcmdzKSB7CisgICAgICAgIENhbGxW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOwogCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgRWRnZSBhcmdFZGdl
ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEg
KyBpXTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwotICAgICAg
ICBHUFJSZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgYXJnUGF5
bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAg
ICAgR1BSUmVnIGFyZ3VtZW50c1BheWxvYWRHUFI7CisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNU
YWdHUFI7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIyOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIAorICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIFdl
IGF2b2lkIGNhbGxpbmcgZmx1c2hSZWdpc3RlcnMoKSBpbnNpZGUgdGhlIGNvbnRyb2wgZmxvdyBv
ZiBDYWxsRm9yd2FyZFZhcmFyZ3MuCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBhdXRvIGxvYWRBcmd1bWVudHNHUFIgPSBbJl0gKEdQ
UlJlZyByZXNlcnZlZEdQUikgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZv
cndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICAgICAgYXJndW1lbnRzVGFnR1BSID0gSklUQ29t
cGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIocmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIGFy
Z3VtZW50c1BheWxvYWRHUFIgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihyZXNlcnZl
ZEdQUiwgYXJndW1lbnRzVGFnR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisg
ICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IoCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzVGFnR1BSKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgo
KS5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksCisg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1BheWxvYWRHUFIpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRHUFIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgICAgICAgICAgICAgbG9jayhyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudHNUYWdHUFIgPSBhcmd1bWVudHMudGFnR1BSKCk7CisgICAgICAgICAg
ICAgICAgYXJndW1lbnRzUGF5bG9hZEdQUiA9IGFyZ3VtZW50cy5wYXlsb2FkR1BSKCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICAgICAgICAgIHVubG9jayhyZXNlcnZlZEdQUik7CisgICAgICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2NyYXRj
aEdQUjEgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNQYXlsb2FkR1BS
LCBhcmd1bWVudHNUYWdHUFIsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIy
ID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzUGF5bG9hZEdQUiwgYXJn
dW1lbnRzVGFnR1BSLCBzY3JhdGNoR1BSMSwgcmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgc2Ny
YXRjaEdQUjMgPSBKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihhcmd1bWVudHNQYXlsb2Fk
R1BSLCBhcmd1bWVudHNUYWdHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgcmVzZXJ2ZWRH
UFIpOworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0
aGUgd2hvbGUgcmVnaXN0ZXIgZmlsZSB0byBvdXJzZWx2ZXMsIGFuZCBhcmd1bWVudHNHUFIgaGFz
IHRoZQorICAgICAgICAvLyBhcmd1bWVudHMgcmVnaXN0ZXIuIFNlbGVjdCBzb21lIHNjcmF0Y2gg
cmVnaXN0ZXJzLgorICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lsbCB1c2Ugc2NyYXRjaEdQUjIg
dG8gcG9pbnQgdG8gb3VyIHN0YWNrIGZyYW1lLgorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
bnVtVXNlZFN0YWNrU2xvdHMgPSBtX2ppdC5ncmFwaCgpLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAg
ICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVBcmd1bWVudHM7CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7CisgICAgICAgICAgICAvLyBEbyB0aGUgaG9ycmlm
aWMgZm9vLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgb3B0aW1pemF0aW9uLgorICAgICAgICAgICAg
Ly8gRklYTUU6IGRvIHRoaXMgb3B0aW1pemF0aW9uIGF0IHRoZSBJUiBsZXZlbCBpbnN0ZWFkIG9m
IGR5bmFtaWNhbGx5IGJ5IHRlc3RpbmcgdGhlCisgICAgICAgICAgICAvLyBhcmd1bWVudHMgcmVn
aXN0ZXIuIFRoaXMgd2lsbCBoYXBwZW4gb25jZSB3ZSBnZXQgcmlkIG9mIHRoZSBhcmd1bWVudHMg
bGF6eSBjcmVhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGxhenkgdGVhci1vZmYuCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigK
KyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHNUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihudW1Vc2VkU3RhY2tTbG90cyksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGVtaXRTZXR1
cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNj
cmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIHJl
c3VsdEdQUiA9IHNjcmF0Y2hHUFIyOworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXZlQXJn
dW1lbnRzID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQp
OworICAgICAgICB9CiAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdUYWdHUFIsIG1faml0LmNh
bGxlZUFyZ3VtZW50VGFnU2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKLSAgICAgICAgbV9q
aXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFBheWxvYWRTbG90
KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBo
KCksIG5vZGUsIGlzRmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJpZ2h0IG5vdywg
YXJndW1lbnRzIGlzIGluIGFyZ3VtZW50c1RhZ0dQUi9hcmd1bWVudHNQYXlsb2FkR1BSIGFuZCB0
aGUgcmVnaXN0ZXIgZmlsZSBpcworICAgICAgICAvLyBmbHVzaGVkLgorICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBhcmd1bWVudHNUYWdHUFIsIGFyZ3VtZW50c1BheWxvYWRHUFIsIG51bVVzZWRTdGFja1Ns
b3RzLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cg
d2UgaGF2ZSB0aGUgYXJndW1lbnQgY291bnQgb2YgdGhlIGNhbGxlZSBmcmFtZSwgYnV0IHdlJ3Zl
IGxvc3QgdGhlIGFyZ3VtZW50cyBvcGVyYW5kLgorICAgICAgICAvLyBSZWNvbnN0cnVjdCB0aGUg
YXJndW1lbnRzIG9wZXJhbmQgd2hpbGUgcHJlc2VydmluZyB0aGUgY2FsbGVlIGZyYW1lLgorICAg
ICAgICBsb2FkQXJndW1lbnRzR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tMzIobnVtVXNlZFN0YWNrU2xvdHMpLCBzY3JhdGNoR1BSMSk7
CisgICAgICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUobV9qaXQsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBmYWxzZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDYgKiBzaXplb2Yodm9pZCopKSkp
LCBzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAg
ICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSwgYXJndW1lbnRzVGFnR1BSLCBhcmd1
bWVudHNQYXlsb2FkR1BSLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndh
cmRWYXJhcmdzKQorICAgICAgICAgICAgaGF2ZUFyZ3VtZW50cy5saW5rKCZtX2ppdCk7CisgICAg
ICAgIAorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSksIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICAgICAgCisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVz
aGVkKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ2FsbEZvcndhcmRW
YXJhcmdzKQorICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChpc0NhbGwpIHsKKyAgICAgICAgICAgIC8vIE5vdyBzZXQgdXAgdGhlICJ0aGlzIiBh
cmd1bWVudC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNBcmd1bWVudCh0aGlzLCBu
b2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncyA/IG5vZGUtPmNoaWxkMigpIDogbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNBcmd1bWVudFRhZ0dQUiA9IHRoaXNB
cmd1bWVudC50YWdHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzQXJndW1lbnRQYXlsb2Fk
R1BSID0gdGhpc0FyZ3VtZW50LnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIHRoaXNBcmd1bWVu
dC51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih0aGlzQXJn
dW1lbnRUYWdHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFRhZ1Nsb3QoMCkpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMih0aGlzQXJndW1lbnRQYXlsb2FkR1BSLCBKSVRDb21waWxl
cjo6Y2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdCgwKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3Qg
cGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKKyAgICAgICAgLy8gZm9yIGl0LgorICAg
ICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBpc0NhbGwgPyAwIDogMTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRo
ZSBmdW5jdGlvbiAobm9ybWFsIGNhbGwpIG9yIHRoZQorICAgICAgICAvLyByZWNlaXZlciAobWV0
aG9kIGNhbGwpLiBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1lbnRzLgorICAgICAg
ICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICAK
KyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7
CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIobnVtQXJncyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Q
YXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7CisgICAgICAgICAgICBHUFJS
ZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIGFyZ1BheWxv
YWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOworICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgbV9qaXQuY2Fs
bGVlQXJndW1lbnRUYWdTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFBheWxvYWRT
bG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgSlNW
YWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwpAQCAtNzI0LDYgKzg2MSwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgaW5mby0+Y29k
ZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKICAgICBpbmZvLT5jYWxsZWVHUFIgPSBj
YWxsZWVQYXlsb2FkR1BSOwogICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGws
IHRhcmdldFRvQ2hlY2ssIGluZm8pOworICAgIAorICAgIC8vIElmIHdlIHdlcmUgdmFyYXJncywg
dGhlbiBhZnRlciB0aGUgY2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3Vy
IHN0YWNrIHBvaW50ZXIuCisgICAgaWYgKGlzVmFyYXJncykKKyAgICAgICAgbV9qaXQuYWRkUHRy
KFRydXN0ZWRJbW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KQEAgLTQxNTYs
OSArNDI5Nyw1OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAK
ICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJn
czoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFy
Z3M6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6IHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYXJndW1lbnRzVGFnR1BS
OworICAgICAgICBHUFJSZWcgYXJndW1lbnRzUGF5bG9hZEdQUjsKKyAgICAgICAgeworICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGFyZ3VtZW50c1RhZ0dQUiA9IGFyZ3VtZW50cy50YWdHUFIoKTsKKyAgICAgICAg
ICAgIGFyZ3VtZW50c1BheWxvYWRHUFIgPSBhcmd1bWVudHMucGF5bG9hZEdQUigpOworICAgICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgYXJndW1lbnRzVGFnR1BSLCBhcmd1bWVudHNQYXlsb2FkR1BSLCBkYXRhLT5vZmZzZXQpOwor
ICAgICAgICAKKyAgICAgICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBhcmd1bWVudHNUYWdHUFIgPSBhcmd1bWVudHMudGFnR1BSKCk7
CisgICAgICAgICAgICBhcmd1bWVudHNQYXlsb2FkR1BSID0gYXJndW1lbnRzLnBheWxvYWRHUFIo
KTsKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgdW5s
b2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3Ro
IHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRw
b2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEg
c3BlYyBjb21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9u
IHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJn
cyByaWdodAorICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKworICAgICAgICBHUFJSZWcg
YXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSID0KKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpzZWxl
Y3RTY3JhdGNoR1BSKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNUYWdHUFIsIGFy
Z3VtZW50c1BheWxvYWRHUFIpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRpbmdUaGlz
R1BSKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFZhcmFyZ3NPdmVy
ZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaDMyKAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKKyAgICAgICAgICAgICAgICBhcmdDb3VudElu
Y2x1ZGluZ1RoaXNHUFIsCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0
KSkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdDb3VudEluY2x1ZGluZ1Ro
aXNHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAg
ICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgZGF0YS0+
bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNUYWdHUFIsIGFyZ3VtZW50c1BheWxvYWRH
UFIsIGRhdGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9y
eU1pbmltdW0pOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOiB7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CkBAIC00Mjc4LDkgKzQ0NjksMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
QVNTRVJUKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
c3VsdEdQUik7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoCisgICAgICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkgLSAxKSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdp
c3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVn
aXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dEdQUik7CisgICAgICAgIH0KICAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDI5NiwxNCArNDQ5OCwyMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
dGFnRm9yKG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCi0gICAg
ICAgICAgICAgICAgSW1tMzIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpLAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSks
CiAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6
QXJndW1lbnRDb3VudCksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlmICghbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENv
dW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lz
dGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFy
Z3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICAgICAgbV9q
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpLCByZXN1bHRUYWdHUFIpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHRoZSBzbG93
IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2FyZCBzcGVjdWxhdGlvbiB0aGF0
IHRoZQpAQCAtNDMzOSw3ICs0NTQ4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpKTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIDAsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCkBAIC00MzQ3LDcgKzQ1
NTcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgICAgICAgICBpbmRleEdQUiwKICAgICAgICAgICAgICAgICAgICAgSW1tMzIobm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdFBheWxvYWRHUFIpOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFj
azo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJn
dW1lbnRDb3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdFBheWxvYWRH
UFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXls
b2FkR1BSKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCkBAIC00NDE2LDE0ICs0NjMxLDIwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6dGFnRm9yKG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAogICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLAogICAgICAgICAgICAgICAg
ICAgICBpbmRleEdQUiwKICAgICAgICAgICAgICAgICAgICAgSW1tMzIobm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIGlm
ICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1l
bnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3Vu
dFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdFBheWxvYWRHUFIpOwogICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsK
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgcmVzdWx0UGF5bG9hZEdQ
UikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCisj
aW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01v
ZGUuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKIApAQCAtNjI0LDM4ICs2MjUsMTYz
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEKIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBib29sIGlzQ2FsbCA9IG5v
ZGUtPm9wKCkgPT0gQ2FsbDsKLSAgICBpZiAoIWlzQ2FsbCkKLSAgICAgICAgREZHX0FTU0VSVCht
X2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7Ci0gICAgCi0gICAg
Ly8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQg
d2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0LgotICAgIGludCBkdW1teVRoaXNB
cmd1bWVudCA9IGlzQ2FsbCA/IDAgOiAxOworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2Fs
bFR5cGU7CisgICAgYm9vbCBpc0NhbGw7CisgICAgYm9vbCBpc1ZhcmFyZ3M7CisgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBDYWxsOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxM
aW5rSW5mbzo6Q2FsbDsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsKKyAgICAgICAgaXNWYXJhcmdz
ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBj
YWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OworICAgICAgICBpc0NhbGwgPSBmYWxz
ZTsKKyAgICAgICAgaXNWYXJhcmdzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhbGxU
eXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gdHJ1ZTsK
KyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25z
dHJ1Y3RWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0
VmFyYXJnczsKKyAgICAgICAgaXNDYWxsID0gZmFsc2U7CisgICAgICAgIGlzVmFyYXJncyA9IHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIERGR19DUkFTSChtX2pp
dC5ncmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOwog
ICAgIAotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBpc0NhbGwgPyBDYWxs
TGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKKyAgICAvLyBHb3R0YSBs
b2FkIHRoZSBhcmd1bWVudHMgc29tZWhvdy4gVmFyYXJncyBpcyB0cmlja2llci4KKyAgICBpZiAo
aXNWYXJhcmdzKSB7CisgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxW
YXJhcmdzRGF0YSgpOworCisgICAgICAgIEdQUlJlZyBhcmd1bWVudHNHUFI7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSMTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUjM7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBD
YWxsRm9yd2FyZFZhcmFyZ3MpIHsKKyAgICAgICAgICAgIC8vIFdlIGF2b2lkIGNhbGxpbmcgZmx1
c2hSZWdpc3RlcnMoKSBpbnNpZGUgdGhlIGNvbnRyb2wgZmxvdyBvZiBDYWxsRm9yd2FyZFZhcmFy
Z3MuCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBhdXRvIGxvYWRBcmd1bWVudHNHUFIgPSBbJl0gKEdQUlJlZyByZXNlcnZlZEdQUikg
eworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzKSB7Cisg
ICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hH
UFIocmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NCgKKyAgICAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc2VydmVkR1BSICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIGxvY2socmVzZXJ2ZWRHUFIpOworICAgICAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRzLmdwcigpOworICAgICAg
ICAgICAgICAgIGlmIChyZXNlcnZlZEdQUiAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAg
ICAgICAgICB1bmxvY2socmVzZXJ2ZWRHUFIpOworICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIxID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRzR1BSLCByZXNlcnZl
ZEdQUik7CisgICAgICAgICAgICBzY3JhdGNoR1BSMiA9IEpJVENvbXBpbGVyOjpzZWxlY3RTY3Jh
dGNoR1BSKGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIHJlc2VydmVkR1BSKTsKKyAgICAgICAg
ICAgIHNjcmF0Y2hHUFIzID0gSklUQ29tcGlsZXI6OnNlbGVjdFNjcmF0Y2hHUFIoYXJndW1lbnRz
R1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHJlc2VydmVkR1BSKTsKKyAgICAgICAgfTsK
KyAgICAgICAgCisgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgdGhlIHdob2xlIHJlZ2lzdGVy
IGZpbGUgdG8gb3Vyc2VsdmVzLCBhbmQgYXJndW1lbnRzR1BSIGhhcyB0aGUKKyAgICAgICAgLy8g
YXJndW1lbnRzIHJlZ2lzdGVyLiBTZWxlY3Qgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICAg
ICAgCisgICAgICAgIC8vIFdlIHdpbGwgdXNlIHNjcmF0Y2hHUFIyIHRvIHBvaW50IHRvIG91ciBz
dGFjayBmcmFtZS4KKworICAgICAgICB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cyA9IG1faml0
LmdyYXBoKCkubV9uZXh0TWFjaGluZUxvY2FsOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaGF2ZUFyZ3VtZW50czsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEdQUklu
Zm86OnJlZ1QwOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFyZ3Mp
IHsKKyAgICAgICAgICAgIC8vIERvIHRoZSBob3JyaWZpYyBmb28uYXBwbHkodGhpcywgYXJndW1l
bnRzKSBvcHRpbWl6YXRpb24uCisgICAgICAgICAgICAvLyBGSVhNRTogZG8gdGhpcyBvcHRpbWl6
YXRpb24gYXQgdGhlIElSIGxldmVsIGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYnkgdGVzdGluZyB0
aGUKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyByZWdpc3Rlci4gVGhpcyB3aWxsIGhhcHBlbiBv
bmNlIHdlIGdldCByaWQgb2YgdGhlIGFyZ3VtZW50cyBsYXp5IGNyZWF0aW9uIGFuZAorICAgICAg
ICAgICAgLy8gbGF6eSB0ZWFyLW9mZi4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJndW1lbnRzR1BSKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKG51bVVzZWRT
dGFja1Nsb3RzKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgZW1pdFNldHVwVmFyYXJnc0Zy
YW1lRmFzdENhc2UobV9qaXQsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIzLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRh
LT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgICAgICAgICAgcmVzdWx0R1BSID0g
c2NyYXRjaEdQUjI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhdmVBcmd1bWVudHMgPSBt
X2ppdC5qdW1wKCk7CisgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IH0KKworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlzRmx1c2hlZCgp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFJpZ2h0IG5vdywgYXJndW1lbnRzIGlzIGluIGFyZ3Vt
ZW50c0dQUiBhbmQgdGhlIHJlZ2lzdGVyIGZpbGUgaXMgZmx1c2hlZC4KKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgYXJndW1lbnRzR1BSLCBudW1Vc2VkU3RhY2tTbG90cywgZGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGhhdmUgdGhlIGFyZ3VtZW50IGNv
dW50IG9mIHRoZSBjYWxsZWUgZnJhbWUsIGJ1dCB3ZSd2ZSBsb3N0IHRoZSBhcmd1bWVudHMgb3Bl
cmFuZC4KKyAgICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBvcGVyYW5kIHdoaWxl
IHByZXNlcnZpbmcgdGhlIGNhbGxlZSBmcmFtZS4KKyAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMy
KG51bVVzZWRTdGFja1Nsb3RzKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBlbWl0U2V0VmFyYXJn
c0ZyYW1lKG1faml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHNjcmF0Y2hHUFIx
LCBzY3JhdGNoR1BSMSk7CisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgc2NyYXRjaEdQUjEsIEpJVENvbXBp
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
c2NyYXRjaEdQUjEsIGFyZ3VtZW50c0dQUiwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5vcCgpID09
IENhbGxGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgIGhhdmVBcmd1bWVudHMubGluaygmbV9q
aXQpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsIGlzRmx1c2hlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdGhl
IGFyZ3VtZW50cyBhcnJheSBhbnltb3JlLgorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDYWxs
Rm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGlzQ2FsbCkgeworICAgICAgICAgICAgLy8gTm93IHNldCB1cCB0aGUg
InRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc0FyZ3VtZW50
KHRoaXMsIG5vZGUtPm9wKCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzID8gbm9kZS0+Y2hpbGQyKCkg
OiBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc0FyZ3VtZW50R1BSID0g
dGhpc0FyZ3VtZW50LmdwcigpOworICAgICAgICAgICAgdGhpc0FyZ3VtZW50LnVzZSgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHRoaXNBcmd1bWVudEdQUiwgSklU
Q29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3Qg
cGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKKyAgICAgICAgLy8gZm9yIGl0LgorICAg
ICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBpc0NhbGwgPyAwIDogMTsKICAgICAKLSAgICBF
ZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmly
c3RDaGlsZCgpXTsKLSAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlz
IHRoZSBmdW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQotICAgIC8vIGFy
Z3VtZW50cy4KLSAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAx
OworICAgICAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIHRoZSBm
dW5jdGlvbjsgdGhlIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZQorICAgICAgICAvLyBhcmd1
bWVudHMuCisgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAt
IDE7CiAgICAgCi0gICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJn
dW1lbnQ7CisgICAgICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0Fy
Z3VtZW50OwogICAgIAotICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihudW1BcmdzKSwgbV9qaXQuY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1
bWVudENvdW50KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihudW1BcmdzKSwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNT
dGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
UGFzc2VkQXJnczsgaSsrKSB7Ci0gICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKLSAgICAgICAgR1BSUmVnIGFyZ0dQUiA9
IGFyZy5ncHIoKTsKLSAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgeworICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0g
bV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBp
XTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgICAgICAgICB1c2UoYXJnRWRn
ZSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgbV9qaXQuY2FsbGVl
QXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChhcmdHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFNsb3QoaSArIGR1bW15
VGhpc0FyZ3VtZW50KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBKU1ZhbHVlT3BlcmFuZCBj
YWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5n
cHIoKTsKLSAgICB1c2UoY2FsbGVlRWRnZSk7Ci0gICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIs
IG1faml0LmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICBjYWxsZWUudXNl
KCk7CisgICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFt
ZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIApA
QCAtNjkyLDYgKzgxOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlCiAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgCiAgICAg
bV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbExp
bmtJbmZvKTsKKyAgICAKKyAgICAvLyBJZiB3ZSB3ZXJlIHZhcmFyZ3MsIHRoZW4gYWZ0ZXIgdGhl
IGNhbGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0YWJsaXNoIG91ciBzdGFjayBwb2ludGVy
LgorICAgIGlmIChpc1ZhcmFyZ3MpCisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIo
bV9qaXQuZ3JhcGgoKS5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKIH0KIAogLy8gQ2xhbmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtbY2xhbmc6OmZh
bGx0aHJvdWdoXV0gaW4gdGVtcGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0ZSBleHBhbnNp
b24gdXNlcyBpdApAQCAtNDIyMSw5ICs0MzUxLDU2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoK
KyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAg
IGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgIExvYWRW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAKKyAg
ICAgICAgR1BSUmVnIGFyZ3VtZW50c0dQUjsKKyAgICAgICAgeworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGFy
Z3VtZW50c0dQUiA9IGFyZ3VtZW50cy5ncHIoKTsKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2l6ZU9mVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c0dQUiwgZGF0
YS0+b2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYXJndW1lbnRzR1BSID0gYXJndW1lbnRz
LmdwcigpOworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgfQorICAgICAg
ICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBs
ZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAvLyBmcm9tIHRoZSBz
dGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZy
b20gYSBzcGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29s
dXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92
YXJhcmdzIHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorCisgICAgICAgIEdQ
UlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQorICAgICAgICAgICAgSklUQ29tcGlsZXI6
OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGFyZ3VtZW50c0dQUik7
CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOworICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNl
KCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlLAorICAgICAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwKKyAg
ICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAg
ICAgICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6
OnBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0
KCksIGFyZ3VtZW50c0dQUiwgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
ZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2
YXRpb246IHsKICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIApAQCAtNDMyOCw5ICs0
NTA1LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1f
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAg
ICAgbV9qaXQubW92ZSgKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpLAorICAgICAg
ICAgICAgICAgIHJlc3VsdEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgaWYgKCFub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0
ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfQogICAgICAgICBp
bnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00
MzQ0LDIwICs0NTMyLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAg
IG1faml0LmdyYXBoKCkubWFjaGluZUFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAmJiAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCiAgICAg
ICAgICAgICAgICAgSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSkpLAogICAgICAg
ICAgICAgICAgIHJlc3VsdEdQUik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJl
Z2lzdGVyOworICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxS
ZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZXN1bHRHUFIpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhN
RTogdGhlIHNsb3cgcGF0aCBnZW5lcmF0b3Igc2hvdWxkIHBlcmZvcm0gYSBmb3J3YXJkIHNwZWN1
bGF0aW9uIHRoYXQgdGhlCi0gICAgICAgIC8vIHJlc3VsdCBpcyBhbiBpbnRlZ2VyLiBGb3Igbm93
IHdlIHBvc3Rwb25lIHRoZSBzcGVjdWxhdGlvbiBieSBoYXZpbmcgdGhpcyByZXR1cm4KLSAgICAg
ICAgLy8gYSBKU1ZhbHVlLgotICAgICAgICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgY3JlYXRlZCwgdGhp
cywgb3BlcmF0aW9uR2V0QXJndW1lbnRzTGVuZ3RoLCByZXN1bHRHUFIsCkBAIC00Mzg0LDcgKzQ1
NzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYgKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKQEAgLTQzOTIsNyAr
NDU4MywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIGluZGV4R1BSLAogICAgICAgICAgICAgICAgICAgICBJbW0zMihub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkp
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAg
ICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50
Q291bnRSZWdpc3RlciA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHRHUFIpOwogICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgMCwKQEAgLTQ0NDksMTQgKzQ2NDUsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICAKLSAgICAgICAg
aWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaWYg
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMy
KAogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLAogICAgICAg
ICAgICAgICAgICAgICByZXN1bHRHUFIsCiAgICAgICAgICAgICAgICAgICAgIEltbTMyKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSkp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAg
IGlmICghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJn
dW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRD
b3VudFJlZ2lzdGVyID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlciksIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29t
cGlsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIHJlc3VsdEdQUikpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTgw
MjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3OCw3ICs1NzgsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgLy8gVXNlZCB0byBBU1NFUlQg
Zmx1c2hSZWdpc3RlcnMoKSBoYXMgYmVlbiBjYWxsZWQgcHJpb3IgdG8KICAgICAvLyBjYWxsaW5n
IG91dCBmcm9tIEpJVCBjb2RlIHRvIGEgQyBoZWxwZXIgZnVuY3Rpb24uCiAgICAgYm9vbCBpc0Zs
dXNoZWQoKQpAQCAtNTkzLDcgKzU5Miw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQoTm9kZSog
bm9kZSkKQEAgLTE0NTQsNiArMTQ1MiwyNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9u
X0VKWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQgYXJn
MiwgdW5zaWduZWQgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihGX0pJVE9wZXJhdGlvbl9FRkpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgewor
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1
c3RlZEltbTMyKGFyZzMpLCBhcmc0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcyKQorICAgIHsKKyAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihh
cmcyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FWkpaWlogb3BlcmF0aW9uLCB1bnNpZ25lZCBhcmcx
LCBHUFJSZWcgYXJnMiwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQsIHVuc2lnbmVkIGFyZzUp
CisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbTMyKGFyZzEpLCBhcmcyLCBUcnVzdGVkSW1tMzIoYXJnMyksIGFyZzQsIFRydXN0ZWRJbW0z
Mihhcmc1KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CisgICAgfQogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAogLy8gRW5jb2Rl
ZEpTVmFsdWUgaW4gSlNWQUxVRTMyXzY0IGlzIGEgNjQtYml0IGludGVnZXIuIFdoZW4gYmVpbmcg
Y29tcGlsZWQgaW4gQVJNIEVBQkksIGl0IG11c3QgYmUgYWxpZ25lZCBldmVuLW51bWJlcmVkIHJl
Z2lzdGVyIChyMCwgcjIgb3IgW3NwXSkuCkBAIC0xNzUwLDYgKzE3NjgsMjYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihaX0pJVE9wZXJhdGlvbl9FSlpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgdW5zaWduZWQgYXJnMiwgdW5zaWduZWQgYXJn
MykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
UGF5bG9hZCwgYXJnMVRhZywgVHJ1c3RlZEltbTMyKGFyZzIpLCBUcnVzdGVkSW1tMzIoYXJnMykp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oRl9KSVRPcGVyYXRpb25fRUZKWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCwgdW5zaWduZWQgYXJn
MywgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMlBheWxvYWQsIGFyZzJUYWcsIFRydXN0ZWRJbW0zMihhcmczKSwg
YXJnNCk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCB1bnNpZ25lZCBhcmcyKQorICAgIHsK
KyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBh
cmcxVGFnLCBUcnVzdGVkSW1tMzIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVpKWlpaIG9w
ZXJhdGlvbiwgdW5zaWduZWQgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9h
ZCwgdW5zaWduZWQgYXJnMywgR1BSUmVnIGFyZzQsIHVuc2lnbmVkIGFyZzUpCisgICAgeworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKGFyZzEp
LCBhcmcyUGF5bG9hZCwgYXJnMlRhZywgVHJ1c3RlZEltbTMyKGFyZzMpLCBhcmc0LCBUcnVzdGVk
SW1tMzIoYXJnNSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOworICAgIH0KICN1bmRlZiBFQUJJXzMyQklUX0RVTU1ZX0FSRwogI3VuZGVm
IFNINF8zMkJJVF9EVU1NWV9BUkcKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIEJpdFZlY3RvciB1c2VkTG9j
YWxzOwogICAgICAgICAKICAgICAgICAgLy8gQ29sbGVjdCB0aG9zZSB2YXJpYWJsZXMgdGhhdCBh
cmUgdXNlZCBmcm9tIElSLgotICAgICAgICBib29sIGhhc0dldExvY2FsVW5saW5rZWQgPSBmYWxz
ZTsKKyAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVkRml4dXAgPSBmYWxzZTsKICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQpAQCAtODEsNyArODEsMjIgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgdXNlZExv
Y2Fscy5zZXQob3BlcmFuZC50b0xvY2FsKCkpOwotICAgICAgICAgICAgICAgICAgICBoYXNHZXRM
b2NhbFVubGlua2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaGFzTm9kZXNUaGF0TmVl
ZEZpeHVwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJh
cmdzOiB7CisgICAgICAgICAgICAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y291bnQu
aXNMb2NhbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoZGF0YS0+
Y291bnQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPnN0YXJ0Lmlz
TG9jYWwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwYXJ0IHJlYWxseSBy
ZWxpZXMgb24gdGhlIGNvbnRpZ3VpdHkgb2Ygc3RhY2sgbGF5b3V0CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhc3NpZ25tZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChW
aXJ0dWFsUmVnaXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBkYXRhLT5saW1pdCAtIDEpLmlz
TG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRh
LT5saW1pdDsgaS0tOykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5z
ZXQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkudG9Mb2NhbCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgfSAvLyB0aGUgZWxzZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4u
CisgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhhdE5lZWRGaXh1cCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCkBAIC0xMTMsNiArMTI4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHVzZWRMb2Nh
bHMuc2V0KGFyZ3VtZW50c1JlZ2lzdGVyLnRvTG9jYWwoKSk7CiAgICAgICAgICAgICB1c2VkTG9j
YWxzLnNldCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpLnRv
TG9jYWwoKSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJl
Z2lzdGVyKAorICAgICAgICAgICAgICAgICAgICBKU1N0YWNrOjpBcmd1bWVudENvdW50ICsgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgYXJndW1lbnQtLSA+IDE7KSB7CiAgICAgICAgICAg
ICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkgKwpAQCAtMTQ4
LDI0ICsxNjgsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxd
ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbCgKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uW3ZhcmlhYmxlLT5sb2NhbCgpLnRvTG9j
YWwoKV0pOworICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFs
bG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKGNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlciA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKAot
ICAgICAgICAgICAgICAgIGFsbG9jYXRpb25bY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVy
KCkudG9Mb2NhbCgpXSk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVn
aXN0ZXIgPQorICAgICAgICAgICAgICAgIGFzc2lnbihhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+
YXJndW1lbnRzUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKLSAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChhbGxvY2F0aW9uWwotICAgICAgICAg
ICAgICAgICAgICB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSkudG9Mb2NhbCgpXSkKKyAg
ICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lz
dGVyKGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKSkKICAgICAgICAgICAgICAgICA9
PSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKTsKICAgICAg
ICAgICAgIGNvZGVCbG9jaygpLT5zZXRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rl
cik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+dW5jaGVj
a2VkQWN0aXZhdGlvblJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBjb2RlQmxv
Y2soKS0+c2V0QWN0aXZhdGlvblJlZ2lzdGVyKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGFsbG9jYXRpb25bY29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3Rlcigp
LnRvTG9jYWwoKV0pKTsKKyAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJs
b2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIC8vIFRoaXMgcmVnaXN0ZXIgaXMgbmV2ZXIgdmFsaWQgZm9yIERGRyBjb2RlIGJsb2Nrcy4K
QEAgLTE3NiwxNSArMTkzLDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gZGF0YS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUtPnVzZXNBcmd1bWVu
dHMoKSkgewotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzUmVnaXN0
ZXIgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgKLSAgICAgICAgICAgICAgICAgICAgYWxsb2Nh
dGlvblttX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkudG9Mb2Nh
bCgpXSk7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3Rl
ciA9IGFzc2lnbigKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiwgbV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpKTsKIAogICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChhbGxvY2F0aW9uW3VubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKSku
dG9Mb2NhbCgpXSkKKyAgICAgICAgICAgICAgICAgICAgYXNzaWduKGFsbG9jYXRpb24sIHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3RlcihtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGlu
ZUNhbGxGcmFtZSkpKQogICAgICAgICAgICAgICAgICAgICA9PSB1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNSZWdpc3RlcikpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkgeworICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dFJlZ2lzdGVyID0gYXNzaWduKAorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsg
YXJndW1lbnQtLSA+IDE7KSB7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgcG9z
aXRpb24gPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbCiAgICAgICAgICAgICAgICAgICAg
IGRhdGEuYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgYXJndW1lbnRdOwpAQCAtMjI3LDkgKzI0OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnBhcmFtZXRlckNv
dW50KCkpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzeW1ib2xUYWJsZS0+cGFy
YW1ldGVyQ291bnQoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICBuZXdTbG93QXJndW1l
bnRzW2ldID0gc2xvd0FyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyA9IFZpcnR1YWxSZWdpc3RlcihzbG93QXJndW1lbnRzW2ldLmluZGV4KTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBuZXdTbG93QXJndW1lbnRzW2ldLmluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
YWxsb2NhdGlvbltyZWcudG9Mb2NhbCgpXSkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IG5ld1Nsb3dBcmd1bWVudHNbaV0uaW5kZXggPSBhc3NpZ24oYWxsb2NhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyKHNsb3dBcmd1bWVudHNbaV0uaW5kZXgpKS5vZmZzZXQoKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc2xvd0FyZ3VtZW50
cyA9IFdURjo6bW92ZShuZXdTbG93QXJndW1lbnRzKTsKQEAgLTIzNyw3ICsyNTYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZpeCBHZXRMb2NhbFVubGlua2Vk
J3MgdmFyaWFibGUgcmVmZXJlbmNlcy4KLSAgICAgICAgaWYgKGhhc0dldExvY2FsVW5saW5rZWQp
IHsKKyAgICAgICAgaWYgKGhhc05vZGVzVGhhdE5lZWRGaXh1cCkgewogICAgICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CiAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC0yNDYsMTAgKzI2
NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogewotICAgICAgICAg
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT51bmxpbmtlZExv
Y2FsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGFsbG9jYXRpb25bb3BlcmFuZC50b0xvY2FsKCldKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldFVubGlua2VkTWFjaGluZUxvY2FsKG9wZXJhbmQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0VW5saW5rZWRNYWNoaW5lTG9jYWwoYXNzaWduKGFsbG9jYXRp
b24sIG5vZGUtPnVubGlua2VkTG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0
aW9uLCBkYXRhLT5jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5l
U3RhcnQgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMjYyLDYgKzI4NSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgVmlydHVhbFJlZ2lzdGVyIGFzc2ln
bihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
KQorICAgIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IHNyYzsKKyAgICAgICAg
aWYgKHJlc3VsdC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG15QWxsb2NhdGlv
biA9IGFsbG9jYXRpb25bcmVzdWx0LnRvTG9jYWwoKV07CisgICAgICAgICAgICBpZiAobXlBbGxv
Y2F0aW9uID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZpcnR1YWxSZWdp
c3RlcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CiB9OwogCiBib29sIHBlcmZvcm1TdGFja0xheW91dChHcmFwaCYg
Z3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3MSw2ICsyNzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBj
YXNlIEdldFNjb3BlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgQ291bnRFeGVjdXRpb246CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
eXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1
LDcgKzExNSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBub2RlLCBi
ZWZvcmUgZG9pbmcgYW55IGFwcGVuZGluZy4KICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghYmxvY2tJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIElu
c2VydCBhIEdldExvY2FsIGFuZCBhIENoZWNrU3RydWN0dXJlIGltbWVkaWF0ZWx5IGZvbGxvd2lu
ZyB0aGlzCiAgICAgICAgICAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50LCBpZiB0aGUgdmFyaWFi
bGUgd2FzIGEgY2FuZGlkYXRlIGZvciBzdHJ1Y3R1cmUgaG9pc3RpbmcuCiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBiYXNpYyBibG9jayBwcmV2aW91c2x5IG9ubHkgaGFkIHRoZSBTZXRB
cmd1bWVudCBhcyBpdHMKQEAgLTEyNyw2ICsxMjYsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUgJiYgIWl0ZXItPnZhbHVlLm1fYXJy
YXlNb2RlSXNWYWxpZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAg
ICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBzaG91bGQgb25seSBiZSBkb2luZyB0aGlzIGhv
aXN0aW5nIGZvciBTZXRBcmd1bWVudHMgYXQgdGhlIHByb2xvZ3VlLgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIWJsb2NrSW5kZXgpOworCiAgICAgICAgICAgICAgICAgICAgIE5vZGVPcmln
aW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogZ2V0TG9jYWwgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAx
ODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgc3RhcnRD
cmFzaGluZygpOyBcCiAgICAgICAgICAgICBkYXRhTG9nRigiXG5cblxuQXQgIik7IFwKICAgICAg
ICAgICAgIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQ7IFwKLSAgICAgICAgICAgIGRh
dGFMb2dGKCI6IHZhbGlkYXRpb24gJXMgKCVzOiVkKSBmYWlsZWQuXG4iLCAjYXNzZXJ0aW9uLCBf
X0ZJTEVfXywgX19MSU5FX18pOyBcCisgICAgICAgICAgICBkYXRhTG9nRigiOiB2YWxpZGF0aW9u
IGZhaWxlZDogJXMgKCVzOiVkKS5cbiIsICNhc3NlcnRpb24sIF9fRklMRV9fLCBfX0xJTkVfXyk7
IFwKICAgICAgICAgICAgIGR1bXBHcmFwaElmQXBwcm9wcmlhdGUoKTsgXAogICAgICAgICAgICAg
V1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlf
RlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCiAgICAgICAgICAgICBDUkFTSCgpOyBcCkBAIC02Miwx
MSArNjIsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgc3RhcnRDcmFzaGluZygpOyBcCiAgICAg
ICAgICAgICBkYXRhTG9nRigiXG5cblxuQXQgIik7IFwKICAgICAgICAgICAgIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0IGNvbnRleHQ7IFwKLSAgICAgICAgICAgIGRhdGFMb2dGKCI6IHZhbGlkYXRp
b24gKCVzID0gIiwgI2xlZnQpOyBcCisgICAgICAgICAgICBkYXRhTG9nRigiOiB2YWxpZGF0aW9u
IGZhaWxlZDogKCVzID0gIiwgI2xlZnQpOyBcCiAgICAgICAgICAgICBkYXRhTG9nKGxlZnQpOyBc
CiAgICAgICAgICAgICBkYXRhTG9nRigiKSA9PSAoJXMgPSAiLCAjcmlnaHQpOyBcCiAgICAgICAg
ICAgICBkYXRhTG9nKHJpZ2h0KTsgXAotICAgICAgICAgICAgZGF0YUxvZ0YoIikgKCVzOiVkKSBm
YWlsZWQuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisgICAgICAgICAgICBkYXRhTG9nRigi
KSAoJXM6JWQpLlxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAogICAgICAgICAgICAgZHVtcEdy
YXBoSWZBcHByb3ByaWF0ZSgpOyBcCiAgICAgICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWls
dXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2xlZnQgIiA9PSAi
ICNyaWdodCk7IFwKICAgICAgICAgICAgIENSQVNIKCk7IFwKQEAgLTQ1Niw2ICs0NTYsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZlIGEgc2Vjb25k
IEdldExvY2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIC8v
IGJsb2NrIGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50IGZvciB0aGF0IGxvY2FsLgorICAgICAgICAg
ICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm90
U2V0OworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID0gbm90U2V0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlv
bnMuaAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDYgKzc3LDkgQEAgc3RhdGljIGlubGlu
ZSBMVHlwZSBzdHJ1Y3RUeXBlKExDb250ZXh0IAogICAgIHJldHVybiBzdHJ1Y3RUeXBlKGNvbnRl
eHQsIGVsZW1lbnRzLCAyLCBwYWNraW5nKTsKIH0KIAorLy8gRklYTUU6IE1ha2UgdGhlIFZhcmlh
ZGljaXR5IGFyZ3VtZW50IG5vdCBiZSB0aGUgbGFzdCBhcmd1bWVudCB0byBmdW5jdGlvblR5cGUo
KSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24KKy8vIGNhbiB1c2UgQysrMTEgdmFyaWFkaWMgdGVtcGxh
dGVzCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTc1CiBl
bnVtIFZhcmlhZGljaXR5IHsgTm90VmFyaWFkaWMsIFZhcmlhZGljIH07CiBzdGF0aWMgaW5saW5l
IExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBjb25zdCBMVHlwZSogcGFyYW1U
eXBlcywgdW5zaWduZWQgcGFyYW1Db3VudCwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkpCiB7CkBA
IC0xMTAsNiArMTEzLDE2IEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBl
IHIKICAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBh
cmFtNCB9OwogICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywg
NCwgdmFyaWFkaWNpdHkpOwogfQorc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5
cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFtMywg
TFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90
VmFyaWFkaWMpCit7CisgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFtMiwg
cGFyYW0zLCBwYXJhbTQsIHBhcmFtNSB9OworICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJu
VHlwZSwgcGFyYW1UeXBlcywgNSwgdmFyaWFkaWNpdHkpOworfQorc3RhdGljIGlubGluZSBMVHlw
ZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJh
bTIsIExUeXBlIHBhcmFtMywgTFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIExUeXBlIHBhcmFt
NiwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKK3sKKyAgICBMVHlwZSBw
YXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01LCBw
YXJhbTYgfTsKKyAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMs
IDYsIHZhcmlhZGljaXR5KTsKK30KIAogc3RhdGljIGlubGluZSBMVHlwZSB0eXBlT2YoTFZhbHVl
IHZhbHVlKSB7IHJldHVybiBsbHZtLT5UeXBlT2YodmFsdWUpOyB9CiAKQEAgLTI5OCw0MSArMzEx
LDEzIEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIHsKICAgICBy
ZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCAmYXJnMSwgMSk7CiB9Ci1zdGF0aWMg
aW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9u
LCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJn
MSwgYXJnMiB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3Ms
IDIpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMykK
LXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczIH07Ci0gICAgcmV0dXJu
IGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgMyk7Ci19Ci1zdGF0aWMgaW5saW5l
IExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFs
dWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCkKK3RlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+CitMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExW
YWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykKIHsKLSAgICBMVmFsdWUg
YXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2Fs
bChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgNCk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBi
dWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwg
TFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUpCi17Ci0g
ICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSB9OwotICAg
IHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDUpOwotfQotc3RhdGlj
IGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlv
biwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUgYXJnMywgTFZhbHVlIGFyZzQsIExW
YWx1ZSBhcmc1LCBMVmFsdWUgYXJnNikKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBh
cmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWls
ZGVyLCBmdW5jdGlvbiwgYXJncywgNik7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENh
bGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVl
IGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2
LCBMVmFsdWUgYXJnNykKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyLCBhcmcz
LCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3IH07Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVy
LCBmdW5jdGlvbiwgYXJncywgNyk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFy
ZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFyZzUsIExWYWx1ZSBhcmc2LCBM
VmFsdWUgYXJnNywgTFZhbHVlIGFyZzgpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwg
YXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCB9OwotICAgIHJldHVybiBi
dWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDgpOworICAgIExWYWx1ZSBhcmdzQXJy
YXlbXSA9IHsgYXJnMSwgYXJncy4uLiB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwg
ZnVuY3Rpb24sIGFyZ3NBcnJheSwgc2l6ZW9mKGFyZ3NBcnJheSkgLyBzaXplb2YoTFZhbHVlKSk7
CiB9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9u
KExWYWx1ZSBpbnN0cnVjdGlvbiwgTENhbGxDb252IGNhbGxpbmdDb252ZW50aW9uKSB7IGxsdm0t
PlNldEluc3RydWN0aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxpbmdDb252ZW50aW9uKTsg
fQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRXh0
cmFjdFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQogc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZh
bHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2VsZWN0KGJ1
aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4MDIy
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMjAsNiArMTIwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAg
ICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6
CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgorICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2Ug
TmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgVmFsdWVUb0ludDMyOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVj
dHJvbmljcwogICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgpA
QCAtMTI4LDYgKzEyOCwyMCBAQCBzdGF0aWMgdm9pZCBkdW1wRGF0YVNlY3Rpb24oRGF0YVNlY3Rp
b24qCiAgICAgfQogfQogCitzdGF0aWMgaW50IG9mZnNldE9mU3RhY2tSZWdpb24oU3RhY2tNYXBz
OjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgdWludDMyX3Qgc3RhY2ttYXBJRCkKK3sKKyAgICBTdGFj
a01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YWNrbWFw
SUQpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5zaXplKCkgPT0gMSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoaXRlci0+dmFsdWVbMF0ubG9jYXRpb25zLnNpemUoKSA9PSAxKTsKKyAgICBMb2NhdGlvbiBj
YXB0dXJlZExvY2F0aW9uID0KKyAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFwcyhudWxscHRy
LCBpdGVyLT52YWx1ZVswXS5sb2NhdGlvbnNbMF0pOworICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1
cmVkTG9jYXRpb24ua2luZCgpID09IExvY2F0aW9uOjpSZWdpc3Rlcik7CisgICAgUkVMRUFTRV9B
U1NFUlQoY2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUgc2l6
ZW9mKFJlZ2lzdGVyKSkpOworICAgIHJldHVybiBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpIC8g
c2l6ZW9mKFJlZ2lzdGVyKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRGVzY3JpcHRvclR5cGU+
CiB2b2lkIGdlbmVyYXRlSUNGYXN0UGF0aCgKICAgICBTdGF0ZSYgc3RhdGUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKQEAgLTI0Myw2
ICsyNTcsMzIgQEAgc3RhdGljIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnNGb3IoY29ucwogICAg
IHJldHVybiBSZWdpc3RlclNldChyZWNvcmQudXNlZFJlZ2lzdGVyU2V0KCksIFJlZ2lzdGVyU2V0
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsVHlw
ZT4KK3ZvaWQgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhWZWN0b3I8Q2FsbFR5cGU+JiBjYWxs
cywgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCkKK3sKKyAgICAvLyBIYW5kbGluZyBK
UyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkg
dGhlIFBDIGluIExMVk0KKyAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0
IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KKworICAgIFZlY3Rv
cjxDYWxsVHlwZT4gb2xkQ2FsbHM7CisgICAgb2xkQ2FsbHMuc3dhcChjYWxscyk7CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhbGxzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIENhbGxUeXBlJiBjYWxsID0gb2xkQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBTdGFj
a01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3Rh
Y2ttYXBJRCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIENhbGxUeXBlIGNvcHkg
PSBjYWxsOworICAgICAgICAgICAgY29weS5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFs
dWVbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoY29weSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnNvcnQoY2FsbHMuYmVnaW4oKSwgY2FsbHMu
ZW5kKCkpOworfQorCiBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgU3RhdGUmIHN0YXRlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29kZSwg
R2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb24sCiAgICAgU3RhY2tNYXBzOjpSZWNv
cmRNYXAmIHJlY29yZE1hcCwgYm9vbCBkaWRTZWVVbndpbmRJbmZvKQpAQCAtMjUxLDE2ICsyOTEs
MTQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFZNJiB2
bSA9IGdyYXBoLm1fdm07CiAgICAgU3RhY2tNYXBzIHN0YWNrbWFwcyA9IGppdENvZGUtPnN0YWNr
bWFwczsKICAgICAKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJl
Y29yZE1hcC5maW5kKHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoaXRlciAhPSByZWNvcmRNYXAuZW5kKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZh
bHVlLnNpemUoKSA9PSAxKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZVswXS5sb2Nh
dGlvbnMuc2l6ZSgpID09IDEpOwotICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24gPQotICAg
ICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZqaXRDb2RlLT5zdGFja21hcHMsIGl0ZXItPnZh
bHVlWzBdLmxvY2F0aW9uc1swXSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRMb2NhdGlv
bi5raW5kKCkgPT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjYXB0
dXJlZExvY2F0aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBS
RUxFQVNFX0FTU0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkgJSBzaXplb2YoUmVnaXN0
ZXIpKSk7Ci0gICAgaW50MzJfdCBsb2NhbHNPZmZzZXQgPSBjYXB0dXJlZExvY2F0aW9uLmFkZGVu
ZCgpIC8gc2l6ZW9mKFJlZ2lzdGVyKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKKyAgICBp
bnQgbG9jYWxzT2Zmc2V0ID0KKyAgICAgICAgb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAs
IHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCkgKyBncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7Cisg
ICAgCisgICAgaW50IHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0OworICAgIGlmIChzdGF0ZS52YXJh
cmdzU3BpbGxTbG90c1N0YWNrbWFwSUQgIT0gVUlOVF9NQVgpCisgICAgICAgIHZhcmFyZ3NTcGls
bFNsb3RzT2Zmc2V0ID0gb2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLnZhcmFy
Z3NTcGlsbFNsb3RzU3RhY2ttYXBJRCk7CisgICAgZWxzZQorICAgICAgICB2YXJhcmdzU3BpbGxT
bG90c09mZnNldCA9IDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubV9pbmxp
bmVWYXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lID0gZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGFbaV0uaW5saW5lQ2Fs
bEZyYW1lOwpAQCAtMjkzLDE4ICszMzEsMTIgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNl
ZE9uU3RhY2tNYXBzKAogICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCdzIHBl
cmZlY3RseSBmYWlyIHRvIGp1c3QgYmxvdyBhd2F5IGFsbCBzdGF0ZSBhbmQgcmVzdG9yZSB0aGUK
ICAgICAgICAgLy8gSlMgSklUIHZpZXcgb2YgdGhlIHVuaXZlcnNlLgotICAgICAgICBjaGVja0pJ
VC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIGNoZWNrSklULm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KTsKLQogICAgICAgICBjaGVja0pJVC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGNoZWNrSklULm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVyID0gY2hlY2tK
SVQuY2FsbCgpOwogICAgICAgICBjaGVja0pJVC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CiAK
ICAgICAgICAgc3RhY2tPdmVyZmxvd0V4Y2VwdGlvbiA9IGNoZWNrSklULmxhYmVsKCk7Ci0gICAg
ICAgIGNoZWNrSklULm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVt
YmVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgY2hlY2tKSVQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOwotCiAgICAgICAgIGNoZWNrSklULm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgY2hlY2tK
SVQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXJGcm9tQ2FsbGVyRnJhbWUgPSBjaGVja0pJVC5jYWxsKCk7CkBAIC0zMzYsNyArMzY4LDcgQEAg
c3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgaWYg
KHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJI
YW5kbGluZyBPU1Igc3RhY2ttYXAgIyIsIGV4aXQubV9zdGFja21hcElELCAiIGZvciAiLCBleGl0
Lm1fY29kZU9yaWdpbiwgIlxuIik7CiAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmlu
ZChleGl0Lm1fc3RhY2ttYXBJRCk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChleGl0Lm1fc3RhY2ttYXBJRCk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRN
YXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM3NSw3ICs0MDcsNyBAQCBzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBp
bGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIEdldEJ5
SWQgc3RhY2ttYXAgIyIsIGdldEJ5SWQuc3RhY2ttYXBJRCgpLCAiXG4iKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaXRlciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2ttYXBJRCgp
KTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKGdldEJ5SWQuc3RhY2tt
YXBJRCgpKTsKICAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgewogICAg
ICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtNDEyLDcgKzQ0NCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRP
blN0YWNrTWFwcygKICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkp
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgUHV0QnlJZCBzdGFja21hcCAjIiwg
cHV0QnlJZC5zdGFja21hcElEKCksICJcbiIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
dGVyID0gcmVjb3JkTWFwLmZpbmQocHV0QnlJZC5zdGFja21hcElEKCkpOworICAgICAgICAgICAg
YXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQocHV0QnlJZC5zdGFja21hcElEKCkpOwogICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
SXQgd2FzIG9wdGltaXplZCBvdXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NDQs
MTQgKzQ3NiwxMyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0
YXRlLmNoZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgQ2hlY2tJbkRlc2NyaXB0
b3ImIGNoZWNrSW4gPSBzdGF0ZS5jaGVja0luc1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJIYW5kbGluZyBjaGVja0luIHN0YWNrbWFwICMiLCBjaGVja0luLnN0YWNrbWFwSUQoKSwg
IlxuIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChj
aGVja0luLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChjaGVja0luLnN0YWNrbWFwSUQoKSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNv
cmRNYXAuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4K
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ4MCw3ICs1MTEsNiBAQCBzdGF0aWMgdm9p
ZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5t
X2dlbmVyYXRvcnMuYXBwZW5kKENoZWNrSW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNsb3dDYWxsLCBi
ZWdpbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgCiAgICAgICAgIGV4
Y2VwdGlvblRhcmdldC5saW5rKCZzbG93UGF0aEpJVCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGV4Y2VwdGlvbkp1bXAgPSBzbG93UGF0aEpJVC5qdW1wKCk7CkBAIC01MDMsMjkgKzUz
MywxMSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmNoZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAgICAg
ICAgICAgZ2VuZXJhdGVDaGVja0luSUNGYXN0UGF0aCgKICAgICAgICAgICAgICAgICBzdGF0ZSwg
Y29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBzdGF0ZS5jaGVja0luc1tp
XSwKLSAgICAgICAgICAgICAgICBzaXplT2ZDaGVja0luKCkpOyAKKyAgICAgICAgICAgICAgICBz
aXplT2ZJbigpKTsgCiAgICAgICAgIH0gCiAgICAgfQogICAgIAotICAgIC8vIEhhbmRsaW5nIEpT
IGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0
aGUgUEMgaW4gTExWTQotICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3Qg
cHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgotICAgIFZlY3RvcjxK
U0NhbGw+IG9sZENhbGxzID0gc3RhdGUuanNDYWxsczsKLSAgICBzdGF0ZS5qc0NhbGxzLnJlc2l6
ZSgwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgSlNDYWxsJiBjYWxsID0gb2xkQ2FsbHNbaV07Ci0gICAgICAgIAotICAgICAg
ICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNh
bGwuc3RhY2ttYXBJRCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IGl0ZXItPnZhbHVlLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBKU0NhbGwgY29weSA9IGNh
bGw7Ci0gICAgICAgICAgICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZVtq
XS5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgICAgIHN0YXRlLmpzQ2FsbHMuYXBwZW5kKGNv
cHkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxz
LmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5kKCkpOworICAgIGFkanVzdENhbGxJQ3NGb3JTdGFj
a21hcHMoc3RhdGUuanNDYWxscywgcmVjb3JkTWFwKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykgewogICAgICAgICBKU0NhbGwmIGNhbGwg
PSBzdGF0ZS5qc0NhbGxzW2ldOwpAQCAtNTQ3LDkgKzU1OSwzMiBAQCBzdGF0aWMgdm9pZCBmaXhG
dW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZl
cik7CiAgICAgfQogICAgIAorICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUuanND
YWxsVmFyYXJnc2VzLCByZWNvcmRNYXApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHN0
YXRlLmpzQ2FsbFZhcmFyZ3Nlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgSlNDYWxsVmFyYXJn
cyYgY2FsbCA9IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nlc1tpXTsKKyAgICAgICAgCisgICAgICAgIEND
YWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7CisgICAgICAgIGNhbGwuZW1p
dChmYXN0UGF0aEpJVCwgZ3JhcGgsIHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0KTsKKyAgICAgICAg
CisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVk
RnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OworICAgICAgICBzaXplX3Qgc2l6
ZU9mSUMgPSBzaXplT2ZJQ0ZvcihjYWxsLm5vZGUoKSk7CisKKyAgICAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKHZtLCBmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZJQyk7CisgICAgICAg
IGlmICghbGlua0J1ZmZlci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkZhaWxl
ZCB0byBpbnNlcnQgaW5saW5lIGNhY2hlIGZvciB2YXJhcmdzIGNhbGwgKHNwZWNpZmljYWxseSwg
IiwgR3JhcGg6Om9wTmFtZShjYWxsLm5vZGUoKS0+b3AoKSksICIpIGJlY2F1c2Ugd2UgdGhvdWdo
dCB0aGUgc2l6ZSB3b3VsZCBiZSAiLCBzaXplT2ZJQywgIiBidXQgaXQgZW5kZWQgdXAgYmVpbmcg
IiwgZmFzdFBhdGhKSVQubV9hc3NlbWJsZXIuY29kZVNpemUoKSwgIiBwcmlvciB0byBjb21wYWN0
aW9uLlxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9U
OjpmaWxsTm9wcygKKyAgICAgICAgICAgIHN0YXJ0T2ZJQyArIGxpbmtCdWZmZXIuc2l6ZSgpLCBz
aXplT2ZJQyAtIGxpbmtCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGNhbGwubGlu
ayh2bSwgbGlua0J1ZmZlciwgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1
ZmZlci0+ZW50cnlwb2ludCgpKTsKKyAgICB9CisgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CiAKLSAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUu
aGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQpOworICAgIGF1dG8gaXRlciA9
IHJlY29yZE1hcC5maW5kKHN0YXRlLmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21h
cElEKTsKICAgICAvLyBJdCdzIHNvcnQgb2YgcmVtb3RlbHkgcG9zc2libGUgdGhhdCB3ZSB3b24n
dCBoYXZlIGFuIGluLWJhbmQgZXhjZXB0aW9uIGhhbmRsaW5nCiAgICAgLy8gcGF0aCwgZm9yIHNv
bWUga2luZHMgb2YgZnVuY3Rpb25zLgogICAgIGlmIChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExICsyOCwxNCBA
QAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVk
ZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBE
Rkc7CisKIC8vIFRoZSBkZWZhdWx0IHNpemVzIGFyZSB4ODYtNjQtc3BlY2lmaWMsIGFuZCB3ZXJl
IGZvdW5kIGVtcGlyaWNhbGx5LiBUaGV5IGhhdmUgdG8gY292ZXIgdGhlIHdvcnN0CiAvLyBwb3Nz
aWJsZSBjb21iaW5hdGlvbiBvZiByZWdpc3RlcnMgbGVhZGluZyB0byB0aGUgbGFyZ2VzdCBwb3Nz
aWJsZSBlbmNvZGluZyBvZiBlYWNoIGluc3RydWN0aW9uIGluCiAvLyB0aGUgSUMuCkBAIC02MSwy
NSArNjQsNzQgQEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQogI2VuZGlmCiB9CiAKLXNpemVfdCBz
aXplT2ZDaGVja0luKCkKK3NpemVfdCBzaXplT2ZDYWxsKCkKIHsKICNpZiBDUFUoQVJNNjQpCi0g
ICAgcmV0dXJuIDQ7CisgICAgcmV0dXJuIDU2OwogI2Vsc2UKLSAgICByZXR1cm4gNTsgCisgICAg
cmV0dXJuIDUzOwogI2VuZGlmCiB9CiAKK3NpemVfdCBzaXplT2ZDYWxsVmFyYXJncygpCit7Cisj
aWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiAzMDA7CisjZWxzZQorICAgIHJldHVybiAyNzU7Cisj
ZW5kaWYKK30KIAotc2l6ZV90IHNpemVPZkNhbGwoKQorc2l6ZV90IHNpemVPZkNhbGxGb3J3YXJk
VmFyYXJncygpCiB7CiAjaWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiA1NjsKKyAgICByZXR1cm4g
NDYwOwogI2Vsc2UKLSAgICByZXR1cm4gNTM7CisgICAgcmV0dXJuIDM3MjsKICNlbmRpZgogfQog
CitzaXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0KQorICAg
IHJldHVybiAyODQ7CisjZWxzZQorICAgIHJldHVybiAyNTM7CisjZW5kaWYKK30KKworc2l6ZV90
IHNpemVPZkluKCkKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDQ7CisjZWxzZQorICAg
IHJldHVybiA1OyAKKyNlbmRpZgorfQorCitzaXplX3Qgc2l6ZU9mSUNGb3IoTm9kZSogbm9kZSkK
K3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAg
IHJldHVybiBzaXplT2ZHZXRCeUlkKCk7CisgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICByZXR1
cm4gc2l6ZU9mUHV0QnlJZCgpOworICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoK
KyAgICAgICAgcmV0dXJuIHNpemVPZkNhbGwoKTsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAg
ICAgICByZXR1cm4gc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOworICAgIGNh
c2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZkNvbnN0cnVjdFZhcmFy
Z3MoKTsKKyAgICBjYXNlIEluOgorICAgICAgICByZXR1cm4gc2l6ZU9mSW4oKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lvbiAxODAyMjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOCwxMiArMjgsMjMgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCi1uYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIERG
RyB7CitzdHJ1Y3QgTm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CiAKIHNpemVfdCBzaXplT2ZH
ZXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOwogc2l6ZV90IHNpemVPZkNhbGwoKTsK
LXNpemVfdCBzaXplT2ZDaGVja0luKCk7CitzaXplX3Qgc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKK3Np
emVfdCBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsKK3NpemVfdCBzaXplT2ZDb25zdHJ1Y3RW
YXJhcmdzKCk7CitzaXplX3Qgc2l6ZU9mSW4oKTsKKworc2l6ZV90IHNpemVPZklDRm9yKERGRzo6
Tm9kZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lv
biAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9z
aXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSwxMCArOTksMTIgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlv
blR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0
aW9uX0VDYiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBt
YWNybyhWX0pJVE9wZXJhdGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIs
IGludFB0ciwgaW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVpKWlpaLCBmdW5j
dGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50MzIsIGludDY0LCBpbnQzMiwgaW50MzIsIGlu
dDMyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlw
ZSwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVuY3Rpb25UeXBlKHZv
aWRUeXBlLCBpbnQzMikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5
cGUoaW50MzIsIGRvdWJsZVR5cGUpKSBcCi0gICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUMsIGZ1
bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKQorICAgIG1hY3JvKFpfSklUT3BlcmF0
aW9uX0VDLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyKSkgXAorICAgIG1hY3Jv
KFpfSklUT3BlcmF0aW9uX0VKWiwgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGludDY0LCBp
bnQzMikpCiAgICAgCiBjbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5IDogcHVibGljIENvbW1vblZh
bHVlcyB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2Fs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwu
Y3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgSlNDYWxsOjpKU0NhbGwo
dW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZQogICAgICwgbV9zdGFja21hcElEKHN0YWNrbWFwSUQp
CiAgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCiB7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkg
PT0gQ2FsbCB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxC
YXNlLmNwcAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKU0NhbGxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKIEpT
Q2FsbEJhc2U6OkpTQ2FsbEJhc2UoKQogICAgIDogbV90eXBlKENhbGxMaW5rSW5mbzo6Tm9uZSkK
ICAgICAsIG1fY2FsbExpbmtJbmZvKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBMaW5rQnVmZmVyOwogCituYW1lc3BhY2Ug
REZHIHsKK3N0cnVjdCBOb2RlOworfQorCiBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgSlNDYWxs
QmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFy
YXJncy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUg
IkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1
ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKKwordXNpbmcgbmFtZXNwYWNlIERGRzsKKworSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJn
cygpCisgICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAgLCBtX25vZGUobnVsbHB0cikK
KyAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoVUlOVF9NQVgpCit7Cit9CisKK0pTQ2FsbFZhcmFy
Z3M6OkpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZSogbm9kZSkKKyAgICA6
IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9ub2RlKG5vZGUpCisgICAgLCBtX2Nh
bGxCYXNlKAorICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgPyBDYWxsTGlu
a0luZm86OkNvbnN0cnVjdFZhcmFyZ3MgOiBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzLAorICAg
ICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpCisgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDAp
Cit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBDYWxsRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzKTsK
K30KKwordW5zaWduZWQgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpCit7Cisg
ICAgcmV0dXJuIDQ7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBlcnMm
IGppdCwgR3JhcGgmIGdyYXBoLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpCit7CisgICAgLy8g
V2UgYXJlIHBhc3NlZCB0aHJlZSBwaWVjZXMgb2YgaW5mb3JtYXRpb246CisgICAgLy8gLSBUaGUg
Y2FsbGVlLgorICAgIC8vIC0gVGhlIGFyZ3VtZW50cyBvYmplY3QuCisgICAgLy8gLSBUaGUgInRo
aXMiIHZhbHVlLCBpZiBpdCdzIGEgY29uc3RydWN0b3IgY2FsbC4KKyAgICAKKyAgICBib29sIGlz
Q2FsbCA9IG1fbm9kZS0+b3AoKSAhPSBDb25zdHJ1Y3RWYXJhcmdzOworICAgIAorICAgIENhbGxW
YXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CisgICAgCisgICAg
R1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKKyAgICAKKyAgICBHUFJS
ZWcgYXJndW1lbnRzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgdGhpc0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgYm9vbCBhcmd1bWVudHNPblN0YWNrID0gZmFsc2U7CisgICAgCisg
ICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAg
ICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgICAgIHRoaXNHUFIg
PSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgorICAgICAgICB0aGlzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwor
ICAgICAgICBhcmd1bWVudHNPblN0YWNrID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1
bWVudEdQUjE7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBj
b25zdCB1bnNpZ25lZCBjYWxsZWVTcGlsbFNsb3QgPSAwOworICAgIGNvbnN0IHVuc2lnbmVkIGFy
Z3VtZW50c1NwaWxsU2xvdCA9IDE7CisgICAgY29uc3QgdW5zaWduZWQgdGhpc1NwaWxsU2xvdCA9
IDI7CisgICAgY29uc3QgdW5zaWduZWQgc3RhY2tQb2ludGVyU3BpbGxTbG90ID0gMzsKKyAgICAK
KyAgICAvLyBHZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICBSZWdpc3RlclNldCB1c2Vk
UmVnaXN0ZXJzOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVn
aXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnJlc2VydmVk
SGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNl
dDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVH
UFIpOworICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgdXNl
ZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsKKyAgICBpZiAodGhpc0dQUiAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKKyAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgR1BSUmVn
IHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgIGlmIChh
cmd1bWVudHNPblN0YWNrKQorICAgICAgICBhcmd1bWVudHNHUFIgPSBhbGxvY2F0b3IuYWxsb2Nh
dGVTY3JhdGNoR1BSKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJl
dXNlZFJlZ2lzdGVycygpKTsKKyAgICAKKyAgICBhdXRvIGxvYWRBcmd1bWVudHMgPSBbJl0gKGJv
b2wgY2xvYmJlcmVkKSB7CisgICAgICAgIGlmIChhcmd1bWVudHNPblN0YWNrKSB7CisgICAgICAg
ICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6YWRkcmVzc0Zv
cihncmFwaC5tYWNoaW5lQXJndW1lbnRzUmVnaXN0ZXJGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNHUFIpOworICAgICAgICB9IGVsc2UgaWYg
KGNsb2JiZXJlZCkgeworICAgICAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50c1NwaWxs
U2xvdCksIGFyZ3VtZW50c0dQUik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIGF1dG8g
Y29tcHV0ZVVzZWRTdGFjayA9IFsmXSAoR1BSUmVnIHRhcmdldEdQUiwgdW5zaWduZWQgZXh0cmEp
IHsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgLy8gSGF2ZSB0byBkbyB0
aGlzIHRoZSB3ZWlyZCB3YXkgYmVjYXVzZSAkc3Agb24gQVJNNjQgbWVhbnMgemVybyB3aGVuIHVz
ZWQgaW4gYSBzdWJ0cmFjdGlvbi4KKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRhcmdldEdQUik7CisgICAgICAgICAgICBqaXQubmVnUHRy
KHRhcmdldEdQUik7CisgICAgICAgICAgICBqaXQuYWRkUHRyKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCB0YXJnZXRHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHRhcmdldEdQUik7CisgICAgICAgICAgICBq
aXQuc3ViUHRyKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRhcmdldEdQUik7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4dHJhKQorICAgICAgICAgICAgaml0LnN1YlB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYSksIHRhcmdldEdQUik7CisgICAgICAgIGpp
dC51cnNoaWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyksIHRhcmdldEdQUik7CisgICAgfTsK
KyAgICAKKyAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxl
ZSkgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVl
KSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAgICBqaXQuY2Fs
bChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgIG1fZXhjZXB0
aW9ucy5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1h
bEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAgIH07
CisgICAgCisgICAgbG9hZEFyZ3VtZW50cyhmYWxzZSk7CisKKyAgICBpZiAoaXNBUk02NCgpKSB7
CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNj
cmF0Y2hHUFIxKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBl
cnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHN0YWNrUG9pbnRlclNwaWxsU2xvdCkp
OworICAgIH0gZWxzZQorICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQg
KyBzdGFja1BvaW50ZXJTcGlsbFNsb3QpKTsKKyAgICAKKyAgICAvLyBBdHRlbXB0IHRoZSBmb3J3
YXJkaW5nIGZhc3QgcGF0aCwgaWYgaXQncyBiZWVuIHJlcXVlc3RlZC4KKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgaGF2ZUFyZ3VtZW50czsKKyAgICBpZiAobV9ub2RlLT5vcCgpID09IENhbGxGb3J3
YXJkVmFyYXJncykgeworICAgICAgICAvLyBEbyB0aGUgaG9ycmlmaWMgZm9vLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cykgb3B0aW1pemF0aW9uLgorICAgICAgICAvLyBGSVhNRTogZG8gdGhpcyBvcHRp
bWl6YXRpb24gYXQgdGhlIElSIGxldmVsLgorICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hU
ZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBhcmd1bWVudHNHUFIpKTsKKyAgICAgICAgCisg
ICAgICAgIGNvbXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQUjIsIDApOworICAgICAgICBlbWl0U2V0
dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShqaXQsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgc2Ny
YXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgICAgIAorICAg
ICAgICBqaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgaGF2ZUFy
Z3VtZW50cyA9IGppdC5qdW1wKCk7CisgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAg
fQorICAgIAorICAgIC8vIEdvdHRhIHNwaWxsIHRoZSBjYWxsZWUsIGFyZ3VtZW50cywgYW5kIHRo
aXMgYmVjYXVzZSB3ZSB3aWxsIG5lZWQgdGhlbSBsYXRlciBhbmQgd2Ugd2lsbCBoYXZlIHNvbWUK
KyAgICAvLyBjYWxscyB0aGF0IGNsb2JiZXIgdGhlbS4KKyAgICBqaXQuc3RvcmU2NChjYWxsZWVH
UFIsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgY2FsbGVlU3Bp
bGxTbG90KSk7CisgICAgaWYgKCFhcmd1bWVudHNPblN0YWNrKQorICAgICAgICBqaXQuc3RvcmU2
NChhcmd1bWVudHNHUFIsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0
ICsgYXJndW1lbnRzU3BpbGxTbG90KSk7CisgICAgaWYgKGlzQ2FsbCkKKyAgICAgICAgaml0LnN0
b3JlNjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQg
KyB0aGlzU3BpbGxTbG90KSk7CisgICAgCisgICAgdW5zaWduZWQgZXh0cmFTdGFjayA9IHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSArCisgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKTsKKyAgICBjb21wdXRlVXNl
ZFN0YWNrKHNjcmF0Y2hHUFIxLCAwKTsKKyAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGV4dHJhU3RhY2spLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZ3VtZW50c0dQUiwgc2Ny
YXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zm
c2V0KSk7CisgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9w
ZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MpKTsKKyAgICAKKyAgICBqaXQubW92ZShHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjEpOworICAgIGNvbXB1dGVVc2VkU3RhY2soc2Ny
YXRjaEdQUjIsIGV4dHJhU3RhY2spOworICAgIGxvYWRBcmd1bWVudHModHJ1ZSk7CisgICAgZW1p
dFNldFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hHUFIxLCBmYWxzZSwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIyKTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1l
eHRyYVN0YWNrKSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoc2NyYXRjaEdQUjIsIGFy
Z3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQpLCBzY3JhdGNoR1BSMSk7CisgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNl
X2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lKSk7CisgICAgCisgICAgaml0
Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIyKTsKKyAgICAKKyAgICBp
ZiAoaXNDYWxsKQorICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6YWRkcmVzc0Zvcihz
cGlsbFNsb3RzT2Zmc2V0ICsgdGhpc1NwaWxsU2xvdCksIHRoaXNHUFIpOworICAgIGppdC5sb2Fk
NjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGls
bFNsb3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBD
YWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgIGhhdmVBcmd1bWVudHMubGluaygmaml0KTsKKyAg
ICAKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSksIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAKKyAgICBpZiAoaXNDYWxsKQorICAgICAgICBqaXQuc3RvcmU2NCh0aGlz
R1BSLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7CisgICAgCisgICAgLy8g
SGVuY2Vmb3J0aCB3ZSBtYWtlIHRoZSBjYWxsLiBUaGUgYmFzZSBGVEwgY2FsbCBtYWNoaW5lcnkg
ZXhwZWN0cyB0aGUgY2FsbGVlIGluIHJlZ1QwIGFuZCBmb3IgdGhlCisgICAgLy8gc3RhY2sgZnJh
bWUgdG8gYWxyZWFkeSBiZSBzZXQgdXAsIHdoaWNoIGl0IGlzLgorICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxs
ZWUpKTsKKyAgICAKKyAgICBtX2NhbGxCYXNlLmVtaXQoaml0KTsKKyAgICAKKyAgICAvLyBVbmRv
IHRoZSBkYW1hZ2Ugd2UndmUgZG9uZS4KKyAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSQXRSZXR1cm4gPSBDQ2FsbEhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHN0YWNrUG9pbnRlclNwaWxsU2xvdCks
IHNjcmF0Y2hHUFJBdFJldHVybik7CisgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFJBdFJldHVy
biwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgfSBlbHNlCisgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0
ICsgc3RhY2tQb2ludGVyU3BpbGxTbG90KSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7Cit9CisKK3ZvaWQgSlNDYWxsVmFyYXJnczo6bGluayhWTSYgdm0sIExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIpCit7CisgICAg
bV9jYWxsQmFzZS5saW5rKHZtLCBsaW5rQnVmZmVyKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsobV9l
eGNlcHRpb25zLCBleGNlcHRpb25IYW5kbGVyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEZUTEpTQ2FsbFZhcmFyZ3NfaAorI2RlZmluZSBGVExKU0NhbGxWYXJhcmdz
X2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTGlua0J1ZmZlcjsKKworbmFtZXNwYWNlIERGRyB7
CitjbGFzcyBHcmFwaDsKK3N0cnVjdCBOb2RlOworfQorCituYW1lc3BhY2UgRlRMIHsKKworY2xh
c3MgSlNDYWxsVmFyYXJncyB7CitwdWJsaWM6CisgICAgSlNDYWxsVmFyYXJncygpOworICAgIEpT
Q2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgREZHOjpOb2RlKik7CisgICAgCisgICAg
REZHOjpOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgCisgICAgc3Rh
dGljIHVuc2lnbmVkIG51bVNwaWxsU2xvdHNOZWVkZWQoKTsKKyAgICAKKyAgICB2b2lkIGVtaXQo
Q0NhbGxIZWxwZXJzJiwgREZHOjpHcmFwaCYsIGludDMyX3Qgc3BpbGxTbG90c09mZnNldCk7Cisg
ICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlv
bkhhbmRsZXIpOworICAgIAorICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVy
biBtX3N0YWNrbWFwSUQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU0NhbGxW
YXJhcmdzJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luc3RydWN0aW9u
T2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKKyAgICBERkc6Ok5vZGUqIG1fbm9kZTsKKyAg
ICBKU0NhbGxCYXNlIG1fY2FsbEJhc2U7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBtX2V4
Y2VwdGlvbnM7CisKK3B1YmxpYzoKKyAgICB1aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0Owor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKKyNlbmRpZiAvLyBGVExKU0NhbGxWYXJhcmdzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4MDIy
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDMwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1f
b3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxTdGF0ZS5jYXB0
dXJlZFN0YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9vdXQuaW50MzJaZXJvLCBjYXB0dXJlZEFs
bG9jYSk7CiAgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSBoYXZlIGFueSBDYWxsVmFyYXJncyB0
aGVuIHdlIG5lZSB0byBoYXZlIGEgc3BpbGwgc2xvdCBmb3IgaXQuCisgICAgICAgIGJvb2wgaGFz
VmFyYXJncyA9IGZhbHNlOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJlT3Jk
ZXIpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAg
ICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICBoYXNW
YXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChoYXNWYXJhcmdzKSB7Cisg
ICAgICAgICAgICBMVmFsdWUgdmFyYXJnc1NwaWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCisgICAg
ICAgICAgICAgICAgYXJyYXlUeXBlKG1fb3V0LmludDY0LCBKU0NhbGxWYXJhcmdzOjpudW1TcGls
bFNsb3RzTmVlZGVkKCkpKTsKKyAgICAgICAgICAgIG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xv
dHNTdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAgICAgbV9vdXQuY2FsbCgK
KyAgICAgICAgICAgICAgICBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdElu
dDY0KG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEKSwKKyAgICAgICAgICAg
ICAgICBtX291dC5pbnQzMlplcm8sIHZhcmFyZ3NTcGlsbFNsb3RzKTsKKyAgICAgICAgfQorICAg
ICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wdHJUb0ludCgKICAgICAgICAgICAg
IG1fb3V0LmNhbGwobV9vdXQuZnJhbWVBZGRyZXNzSW50cmluc2ljKCksIG1fb3V0LmludDMyWmVy
byksIG1fb3V0LmludFB0cik7CiAgICAgICAgIG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0
SW50NjQoVGFnVHlwZU51bWJlcik7CkBAIC02ODMsNiArNzA3LDE0IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAg
IGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6
CisgICAgICAgICAgICBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxl
TG9hZFZhcmFyZ3MoKTsKKyAgICAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShGVExfTkFUSVZF
X0NBTExfSU5MSU5JTkcpCiAgICAgICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICAgICAgY2FzZSBO
YXRpdmVDb25zdHJ1Y3Q6CkBAIC0yMDY0LDggKzIwOTYsMjIgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIGNoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCgpOwogCi0gICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbV9ub2RlLCAhbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQuYWRkKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHBh
eWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLCBtX291dC5jb25zdEludDMyKC0xKSkp
OworICAgICAgICBpZiAobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lCisg
ICAgICAgICAgICAmJiAhbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMigKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsK
KyAgICAgICAgICAgIGlmICghbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
KQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rl
cihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAgIHNldEludDMy
KAorICAgICAgICAgICAgICAgIG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
bG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsKKyAgICAgICAgfQogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAtMjA3Nywx
MCArMjEyMywxNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBsaW1pdDsKLSAgICAg
ICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBpZiAoY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICYmICFjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LmNvbnN0SW50MzIo
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbGltaXQgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKHBheWxv
YWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3Rl
cjsKKyAgICAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAg
ICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50UmVnaXN0ZXI7CisgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LnN1YihtX291dC5sb2FkMzIo
cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwgbV9vdXQuaW50MzJPbmUpOworICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoVW5jb3VudGFibGUsIG5vVmFsdWUo
KSwgMCwgbV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBsaW1pdCkpOwogICAgICAgICAKQEAgLTM3
ODYsNiArMzgzOSw4NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc2V0SlNWYWx1ZShj
YWxsKTsKICAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJn
cygpCisgICAgeworICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbnVsbHB0
cjsKKyAgICAgICAgTFZhbHVlIHRoaXNBcmcgPSBudWxscHRyOworICAgICAgICAKKyAgICAgICAg
c3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAg
ICAgICAgIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIHRoaXNBcmcgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAg
dGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAganNBcmd1bWVu
dHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
YmFkIG5vZGUgdHlwZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAgICAg
IAorICAgICAgICBWZWN0b3I8TFZhbHVlPiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQobV9vdXQuY29uc3RJbnQzMihzaXplT2ZJQ0ZvcihtX25vZGUpKSk7CisgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAgICAgICAgYXJndW1lbnRz
LmFwcGVuZChtX291dC5jb25zdEludDMyKDEgKyAhIWpzQXJndW1lbnRzICsgISF0aGlzQXJnKSk7
CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNDYWxsZWUpOworICAgICAgICBpZiAoanNBcmd1
bWVudHMpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQXJndW1lbnRzKTsKKyAgICAg
ICAgaWYgKHRoaXNBcmcpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNBcmcpOwor
ICAgICAgICAKKyAgICAgICAgY2FsbFByZWZsaWdodCgpOworICAgICAgICAKKyAgICAgICAgTFZh
bHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLCBh
cmd1bWVudHMpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGws
IExMVk1DQ2FsbENvbnYpOworICAgICAgICAKKyAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxWYXJh
cmdzZXMuYXBwZW5kKEpTQ2FsbFZhcmFyZ3Moc3RhY2ttYXBJRCwgbV9ub2RlKSk7CisgICAgICAg
IAorICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVMb2FkVmFyYXJncygpCisgICAgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBt
X25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOworICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxl
bmd0aCA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TaXpl
T2ZWYXJhcmdzKSwgbV9jYWxsRnJhbWUsIGpzQXJndW1lbnRzLAorICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBU
aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHBy
b3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRwb2lu
dCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEgc3Bl
YyBjb21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdv
dWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyBy
aWdodAorICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAgIExW
YWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuaW50MzJP
bmUpOworICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5v
VmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFj
aGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlv
biBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9vayBhIHBv
aW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291bGRu
J3QgaGF2ZSB0byBkbyB0aGlzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCisgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBtX291
dC5sU2hyKAorICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0
YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBtX291dC5j
b25zdEludFB0cigzKSk7CisgICAgICAgIAorICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwKKyAgICAg
ICAgICAgIG1fb3V0LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291
dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCisgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNv
bnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgIH0KIAogICAgIHZvaWQgY29t
cGlsZUp1bXAoKQogICAgIHsKQEAgLTQwOTAsNyArNDIyNCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAotICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMy
KHNpemVPZkNoZWNrSW4oKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQo
c3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mSW4oKSksCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgY2VsbCk7
CiAKICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGws
IExMVk1BbnlSZWdDYWxsQ29udik7CkBAIC02NDgzLDcgKzY2MTcsNyBAQCBwcml2YXRlOgogCiAg
ICAgICAgIC8vIEJ1ZmZlciBpcyBvdXQgb2Ygc3BhY2UsIGZsdXNoIGl0LgogICAgICAgICBtX291
dC5hcHBlbmRUbyhidWZmZXJJc0Z1bGwsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIHZtQ2FsbCht
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpLCBtX2NhbGxG
cmFtZSwgYmFzZSwgTm9FeGNlcHRpb25zKTsKKyAgICAgICAgdm1DYWxsTm9FeGNlcHRpb25zKG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlciksIG1fY2FsbEZy
YW1lLCBiYXNlKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNjQ5Miw0NCArNjYy
NiwyMyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogCi0gICAgZW51bSBFeGNlcHRpb25DaGVj
a01vZGUgeyBOb0V4Y2VwdGlvbnMsIENoZWNrRXhjZXB0aW9ucyB9OwotICAgIAotICAgIExWYWx1
ZSB2bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBFeGNlcHRpb25DaGVja01vZGUgbW9kZSA9IENoZWNr
RXhjZXB0aW9ucykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSB2
bUNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCiAgICAgewogICAgICAgICBjYWxs
UHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9u
KTsKLSAgICAgICAgY2FsbENoZWNrKG1vZGUpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9v
dXQuY2FsbChmdW5jdGlvbiwgYXJncy4uLik7CisgICAgICAgIGNhbGxDaGVjaygpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlv
biwgTFZhbHVlIGFyZzEsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRpb25z
KQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gbV9vdXQuY2FsbChmdW5jdGlvbiwgYXJnMSk7Ci0gICAgICAgIGNhbGxDaGVjayhtb2RlKTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgTFZhbHVlIHZtQ2FsbChMVmFsdWUg
ZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgRXhjZXB0aW9uQ2hlY2tNb2RlIG1v
ZGUgPSBDaGVja0V4Y2VwdGlvbnMpCi0gICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0g
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxLCBhcmcyKTsK
LSAgICAgICAgY2FsbENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICBMVmFsdWUgdm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBh
cmcyLCBMVmFsdWUgYXJnMywgRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlv
bnMpCi0gICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Ci0gICAgICAgIExWYWx1ZSByZXN1
bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmcxLCBhcmcyLCBhcmczKTsKLSAgICAgICAgY2Fs
bENoZWNrKG1vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBMVmFsdWUg
dm1DYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyLCBMVmFsdWUg
YXJnMywgTFZhbHVlIGFyZzQsIEV4Y2VwdGlvbkNoZWNrTW9kZSBtb2RlID0gQ2hlY2tFeGNlcHRp
b25zKQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIHZt
Q2FsbE5vRXhjZXB0aW9ucyhMVmFsdWUgZnVuY3Rpb24sIEFyZ3MuLi4gYXJncykKICAgICB7CiAg
ICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNh
bGwoZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwotICAgICAgICBjYWxsQ2hlY2so
bW9kZSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKGZ1bmN0aW9uLCBhcmdz
Li4uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIGNh
bGxQcmVmbGlnaHQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgbV9vdXQu
c3RvcmUzMigKQEAgLTY1NDMsMTEgKzY2NTYsOCBAQCBwcml2YXRlOgogICAgICAgICBjYWxsUHJl
ZmxpZ2h0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBj
YWxsQ2hlY2soRXhjZXB0aW9uQ2hlY2tNb2RlIG1vZGUgPSBDaGVja0V4Y2VwdGlvbnMpCisgICAg
dm9pZCBjYWxsQ2hlY2soKQogICAgIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gTm9FeGNlcHRpb25z
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6OmVu
YWJsZUV4Y2VwdGlvbkZ1enooKSkKICAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enopKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzU3LDEzICsz
NTcsOCBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBW
ZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9u
LCB2ZWN0b3IpOyB9CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVybiBi
dWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUg
ZnVuY3Rpb24sIExWYWx1ZSBhcmcxKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5j
dGlvbiwgYXJnMSk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBh
cmcxLCBMVmFsdWUgYXJnMikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24s
IGFyZzEsIGFyZzIpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUg
YXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczKSB7IHJldHVybiBidWlsZENhbGwobV9idWls
ZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMyk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFs
dWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1
ZSBhcmc0KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJn
MiwgYXJnMywgYXJnNCk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1
ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUgYXJn
NSkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFy
ZzMsIGFyZzQsIGFyZzUpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFs
dWUgYXJnMSwgTFZhbHVlIGFyZzIsIExWYWx1ZSBhcmczLCBMVmFsdWUgYXJnNCwgTFZhbHVlIGFy
ZzUsIExWYWx1ZSBhcmc2KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwg
YXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNik7IH0KLSAgICBMVmFsdWUgY2FsbChM
VmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExW
YWx1ZSBhcmc0LCBMVmFsdWUgYXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1ZSBhcmc3KSB7IHJldHVy
biBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwg
YXJnNSwgYXJnNiwgYXJnNyk7IH0KLSAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExW
YWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVlIGFyZzMsIExWYWx1ZSBhcmc0LCBMVmFsdWUg
YXJnNSwgTFZhbHVlIGFyZzYsIExWYWx1ZSBhcmc3LCBMVmFsdWUgYXJnOCkgeyByZXR1cm4gYnVp
bGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUs
IGFyZzYsIGFyZzcsIGFyZzgpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAg
ICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBBcmdzLi4uIGFyZ3Mp
IHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxLCBhcmdzLi4uKTsg
fQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KICAgICBMVmFsdWUg
b3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5jdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNiArNDksMTAgQEAgU3Rh
dGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICAsIG1vZHVsZSgwKQogICAgICwgZnVuY3Rpb24o
MCkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDApCisgICAgLCBoYW5kbGVTdGFja092ZXJmbG93
RXhjZXB0aW9uU3RhY2ttYXBJRChVSU5UX01BWCkKKyAgICAsIGhhbmRsZUV4Y2VwdGlvblN0YWNr
bWFwSUQoVUlOVF9NQVgpCisgICAgLCBjYXB0dXJlZFN0YWNrbWFwSUQoVUlOVF9NQVgpCisgICAg
LCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQoVUlOVF9NQVgpCiAgICAgLCB1bndpbmREYXRh
U2VjdGlvbigwKQogICAgICwgdW53aW5kRGF0YVNlY3Rpb25TaXplKDApCiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6
ZXIuaCIKICNpbmNsdWRlICJGVExKU0NhbGwuaCIKKyNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdz
LmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTcxLDEwICs3MiwxMiBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQ7CiAgICAg
dW5zaWduZWQgaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRDsKICAgICB1bnNpZ25lZCBjYXB0dXJl
ZFN0YWNrbWFwSUQ7CisgICAgdW5zaWduZWQgdmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEOwog
ICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3JpcHRvcj4gZ2V0QnlJZHM7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9yPiBwdXRCeUlkczsKICAgICBTZWdtZW50ZWRW
ZWN0b3I8Q2hlY2tJbkRlc2NyaXB0b3I+IGNoZWNrSW5zOwogICAgIFZlY3RvcjxKU0NhbGw+IGpz
Q2FsbHM7CisgICAgVmVjdG9yPEpTQ2FsbFZhcmFyZ3M+IGpzQ2FsbFZhcmFyZ3NlczsKICAgICBW
ZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsKICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0
YVNlY3Rpb25OYW1lczsKICAgICB2b2lkKiB1bndpbmREYXRhU2VjdGlvbjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIEpTVmFsdWUgZXZh
bChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICByZXR1cm4gaW50ZXJwcmV0ZXItPmV4ZWN1dGUo
ZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4pOwogfQogCi11bnNp
Z25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1N0YWNrKiBz
dGFjaywgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50
MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3Vuc2lnbmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNl
dCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgaWYgKCFhcmd1bWVudHMpCkBAIC0xNTYs
NiArMTU2LDEzIEBAIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiAKICAg
ICBlbHNlCiAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAgCisgICAgcmV0dXJuIGxlbmd0aDsKK30K
KwordW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNT
dGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90
cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0g
c2l6ZU9mVmFyYXJncyhjYWxsRnJhbWUsIGFyZ3VtZW50cywgZmlyc3RWYXJBcmdPZmZzZXQpOwor
ICAgIAogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBjYWxsZWVGcmFtZUZvclZhcmFyZ3Mo
Y2FsbEZyYW1lLCBudW1Vc2VkU3RhY2tTbG90cywgbGVuZ3RoICsgMSk7CiAgICAgaWYgKGxlbmd0
aCA+IEFyZ3VtZW50czo6TWF4QXJndW1lbnRzIHx8ICFzdGFjay0+ZW5zdXJlQ2FwYWNpdHlGb3Io
Y2FsbGVlRnJhbWUtPnJlZ2lzdGVycygpKSkgewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dF
cnJvcihjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgs
NiArMzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWU6OmNy
ZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gcGFkZGVkQ2FsbGVlRnJhbWVPZmZzZXQpOwog
ICAgIH0KIAorICAgIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBleGVjLCBKU1Zh
bHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIHVuc2lnbmVk
IHNpemVGcmFtZUZvclZhcmFyZ3MoQ2FsbEZyYW1lKiBleGVjLCBKU1N0YWNrKiwgSlNWYWx1ZSBh
cmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJzdFZhckFy
Z09mZnNldCk7CiAgICAgdm9pZCBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qg
b2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoQ2Fs
bEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgYXJndW1l
bnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDcgKzE0OSwxMCBAQCB2b2lk
IFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZShDYWxsCiAKICAgICAgICAgbV9mcmFtZS5t
X2NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgbV9mcmFtZS5tX2lubGluZUNhbGxGcmFt
ZSA9IGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1l
LT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJv
eGVkSW50MzIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwog
ICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0gaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jaygpOwogICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQgPSBjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjEyLDE1ICsyMTIsMjcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhbGxFeGNlcHRp
b25GdXp6KAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCi1Bc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1i
bHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQpCitB
c3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2so
RXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQsIEV4Y2VwdGlvbkp1bXBXaWR0aCB3aWR0aCkKIHsKICAg
ICBjYWxsRXhjZXB0aW9uRnV6eigpOworCisgICAgaWYgKHdpZHRoID09IEZhckp1bXBXaWR0aCkK
KyAgICAgICAga2luZCA9IChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gSW52ZXJ0ZWRF
eGNlcHRpb25DaGVjayA6IE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKICAgICAKKyAgICBKdW1wIHJl
c3VsdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9
PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Mo
dm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKKyAgICByZXN1bHQgPSBicmFuY2hUZXN0NjQo
a2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFk
ZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgcmV0dXJuIGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBO
b3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAg
IHJlc3VsdCA9IGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVh
bCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0oKS0+
YWRkcmVzc09mRXhjZXB0aW9uKCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCisg
ICAgCisgICAgaWYgKHdpZHRoID09IE5vcm1hbEp1bXBXaWR0aCkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIHJlYWxKdW1wID0gcGF0Y2hhYmxlSnVtcCgp
OworICAgIHJlc3VsdC5saW5rKHRoaXMpOworICAgIAorICAgIHJldHVybiByZWFsSnVtcC5tX2p1
bXA7CiB9CiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlw
ZUluZm8oQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFRydXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBSZWdp
c3RlcklEIGRlc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzM4LDYg
KzMzOCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3Io
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7CisgICAgICAgIC8vIE5CLiBJ
dCdzIHRlbXB0aW5nIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBzb21ldGltZXMgdXNlIGFuIG9m
ZnNldCBmcm9tIHRoZSBzdGFjaworICAgICAgICAvLyByZWdpc3RlciBiZWNhdXNlIGZvciBzb21l
IG9mZnNldHMgdGhhdCB3aWxsIGVuY29kZSB0byBhIHNtYWxsZXIgaW5zdHJ1Y3Rpb24uIEJ1dCB3
ZQorICAgICAgICAvLyBjYW5ub3QgZG8gdGhpcy4gV2UgdXNlIHRoaXMgaW4gcGxhY2VzIHdoZXJl
IHRoZSBzdGFjayBwb2ludGVyIGhhcyBiZWVuIG1vdmVkIHRvIHNvbWUKKyAgICAgICAgLy8gdW5w
cmVkaWN0YWJsZSBsb2NhdGlvbi4KICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1Zh
bGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQpA
QCAtMzY3LDM5ICszNzEsMzkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBv
dXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChp
bnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IHNsb3QpCiAg
ICAgewogICAgICAgICBBU1NFUlQoc2xvdCA+PSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6
ZSk7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIEpTU3Rh
Y2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSk7CisgICAgICAgIHJldHVybiBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBKU1N0YWNrOjpDYWxs
ZXJGcmFtZUFuZFBDU2l6ZSkpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQg
Y2FsbGVlIENhbGxGcmFtZS4KLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50U2xvdChpbnQgYXJn
dW1lbnQpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlQXJndW1lbnRTbG90KGludCBhcmd1bWVu
dCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNh
bGxlZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkKKyAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFt
ZVRhZ1Nsb3QoaW50IHNsb3QpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90
KHNsb3QpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxl
ZUZyYW1lUGF5bG9hZFNsb3QoaW50IHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJh
bWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFt
ZVNsb3Qoc2xvdCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRy
ZXNzIGNhbGxlZUFyZ3VtZW50VGFnU2xvdChpbnQgYXJndW1lbnQpCisgICAgc3RhdGljIEFkZHJl
c3MgY2FsbGVlQXJndW1lbnRUYWdTbG90KGludCBhcmd1bWVudCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBjYWxsZWVBcmd1bWVudFNsb3QoYXJndW1lbnQpLndpdGhPZmZzZXQoVGFnT2Zmc2V0KTsK
ICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50UGF5bG9hZFNsb3QoaW50IGFyZ3Vt
ZW50KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUFyZ3VtZW50UGF5bG9hZFNsb3QoaW50IGFy
Z3VtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUFyZ3VtZW50U2xvdChhcmd1bWVu
dCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CiAKLSAgICBBZGRyZXNzIGNhbGxl
ZUZyYW1lQ2FsbGVyRnJhbWUoKQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lQ2FsbGVy
RnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCgwKS53aXRoT2Zm
c2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CiAgICAgfQpAQCAtNDA5LDIxICs0
MTMsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoOChCZWxvdywgQWRkcmVzcyhj
ZWxsUmVnLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVj
dFR5cGUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BS
UmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlk
R1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZl
NCA9IEludmFsaWRHUFJSZWcpCisgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQ
UlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxp
ZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2
ZTQgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU1ID0gSW52YWxpZEdQUlJlZykKICAg
ICB7Ci0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUy
ICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVz
ZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDApCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5m
bzo6cmVnVDAgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBH
UFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmU1
ICE9IEdQUkluZm86OnJlZ1QwKQogICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QwOwog
Ci0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmUyICE9
IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2
ZTQgIT0gR1BSSW5mbzo6cmVnVDEpCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6
cmVnVDEgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMyAhPSBHUFJJ
bmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmU1ICE9
IEdQUkluZm86OnJlZ1QxKQogICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QxOwogCi0g
ICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQ
UkluZm86OnJlZ1QyICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTQg
IT0gR1BSSW5mbzo6cmVnVDIpCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVn
VDIgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZlMyAhPSBHUFJJbmZv
OjpyZWdUMiAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmU1ICE9IEdQ
UkluZm86OnJlZ1QyKQogICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QyOwogCi0gICAg
ICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDMgJiYgcHJlc2VydmUyICE9IEdQUklu
Zm86OnJlZ1QzICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMyAmJiBwcmVzZXJ2ZTQgIT0g
R1BSSW5mbzo6cmVnVDMpCisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDMg
JiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QzICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpy
ZWdUMyAmJiBwcmVzZXJ2ZTQgIT0gR1BSSW5mbzo6cmVnVDMgJiYgcHJlc2VydmU1ICE9IEdQUklu
Zm86OnJlZ1QzKQogICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QzOwogCi0gICAgICAg
IHJldHVybiBHUFJJbmZvOjpyZWdUNDsKKyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZv
OjpyZWdUNCAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDQgJiYgcHJlc2VydmUzICE9IEdQ
UkluZm86OnJlZ1Q0ICYmIHByZXNlcnZlNCAhPSBHUFJJbmZvOjpyZWdUNCAmJiBwcmVzZXJ2ZTUg
IT0gR1BSSW5mbzo6cmVnVDQpCisgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDQ7CisK
KyAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1Q1OwogICAgIH0KIAogICAgIC8vIEFkZCBhIGRl
YnVnIGNhbGwuIFRoaXMgY2FsbCBoYXMgbm8gZWZmZWN0IG9uIEpJVCBjb2RlIGV4ZWN1dGlvbiBz
dGF0ZS4KQEAgLTU3MSw3ICs1NzgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsRXhjZXB0aW9u
RnV6eigpOwogICAgIAogICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsgTm9ybWFsRXhjZXB0
aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKLSAgICBKdW1wIGVtaXRFeGNlcHRp
b25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsK
KyAgICBlbnVtIEV4Y2VwdGlvbkp1bXBXaWR0aCB7IE5vcm1hbEp1bXBXaWR0aCwgRmFySnVtcFdp
ZHRoIH07CisgICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soCisgICAgICAgIEV4Y2VwdGlvbkNo
ZWNrS2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25KdW1wV2lkdGggPSBOb3Jt
YWxKdW1wV2lkdGgpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIHN0YXRp
YyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBsaW5nQ291
bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yODksNiAr
Mjg5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwogICAgIH0K
IAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
UmVnIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMykKKyAgICB7Cisg
ICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7
CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KGFyZzMpOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykK
ICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwpAQCAtMjk4LDYgKzMwNywyOSBA
QCBwdWJsaWM6CiAgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKICAgICB9CiAKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0z
MiBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0LCBUcnVz
dGVkSW1tMzIgYXJnNSkKKyAgICB7CisgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsK
KyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQo
YXJnNCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc1KTsKKyAgICB9CisKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBh
cmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0LCBHUFJSZWcg
YXJnNSwgVHJ1c3RlZEltbTMyIGFyZzYpCisgICAgeworICAgICAgICByZXNldENhbGxBcmd1bWVu
dHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAgICBhZGRDYWxsQXJndW1l
bnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKKyAgICAgICAgYWRkQ2Fs
bEFyZ3VtZW50KGFyZzQpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNSk7CisgICAgICAg
IGFkZENhbGxBcmd1bWVudChhcmc2KTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJnMSwgR1BSUmVnIGFy
ZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CkBA
IC0xNzc3LDYgKzE4MDksMTUgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0KIAorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFy
ZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tMzIgYXJnMywgR1BSUmVnIGFyZzQsIFRydXN0ZWRJ
bW0zMiBhcmc1KQorICAgIHsKKyAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjph
cmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSND4oYXJnMiwgYXJnNCk7CisgICAgICAg
IG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShhcmczLCBH
UFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgICAgICBtb3ZlKGFyZzUsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSNSk7CisgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcyLCBH
UFJSZWcgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQsIFRydXN0ZWRJbW0zMiBhcmc1KQogICAgIHsK
ICAgICAgICAgc2V0dXBUd29TdHViQXJnc0dQUjxHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMz4oYXJnMiwgYXJnMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0dQUkluZm8uaAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6ZWF4
OyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gWDg2
UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVz
ZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OmVzaTsKKyAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gWDg2UmVnaXN0ZXJzOjpyMTA7CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRjaFJlZ2lzdGVyID0gTWFjcm9B
c3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3RlcjsKIAogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdpc3Rl
cih1bnNpZ25lZCBpbmRleCkKQEAgLTU3Nyw2ICs1NzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MDsgLy8gcmVn
VDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IEFSTTY0UmVnaXN0
ZXJzOjp4MTsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5v
blJldHVybkdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4MjsKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gQVJNNjRSZWdpc3RlcnM6Ong4OwogICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgcGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciA9IEFSTTY0UmVnaXN0
ZXJzOjppcDA7CiAKICAgICAvLyBHUFJSZWcgbWFwcGluZyBpcyBkaXJlY3QsIHRoZSBtYWNoaW5l
IHJlZ3NpdGVyIG51bWJlcnMgY2FuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2NCwxMSArNDY0LDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpw
cml2YXRlQ29tcGlsZShKSQogICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFs
c2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIERGRzo6Q2FuSW5saW5lOgotICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0g
ZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwotICAgICAg
ICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKICAgICBjYXNl
IERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAg
ICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIGNvbXBpbGVPcENhbGwoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShP
cGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwotICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZh
cmFyZ3NGcmFtZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGNvbXBpbGVTZXR1cFZhcmFy
Z3NGcmFtZShJbnN0cnVjdGlvbiosIENhbGxMaW5rSW5mbyopOwogICAgICAgICB2b2lkIGNvbXBp
bGVDYWxsRXZhbChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxODAyMjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoSW5z
dHJ1Y3Rpb24qCiAgICAgY29tcGlsZU9wQ2FsbChvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVTZXR1
cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29tcGls
ZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZv
KiBpbmZvKQogewogICAgIGludCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CiAgICAgaW50IGFyZ3VtZW50cyA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE1MCw2
ICsxNTAsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cgogICAg
IGlmIChjYW5PcHRpbWl6ZSkKICAgICAgICAgZW5kLmxpbmsodGhpcyk7CiAKKyAgICAvLyBQcm9m
aWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNTdGFj
azo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQ
YXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAgIGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVudHMs
IHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJl
Z1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRlZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgcmVn
VDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCByZWdU
Mik7CisgICAgbm90U2F0dXJhdGVkLmxpbmsodGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAmaW5m
by0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAgCiAg
ICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAgICAgZW1pdExvYWQodGhpc1ZhbHVlLCByZWdUMiwg
cmVnVDApOwogICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFBheWxvYWRPZmZzZXQg
KyAoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKSk7CkBAIC0xOTgsNiArMjA4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKEluc3RydQogCiB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJ
RCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCkKIHsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2Fs
bExpbmtJbmZvKCk7CiAgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
IAogICAgIC8qIENhbGxlciBhbHdheXM6CkBAIC0yMTQsNyArMjI1LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgICovCiAgICAgCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJn
cykKLSAgICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKGluc3RydWN0aW9uKTsKKyAgICAg
ICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKGluc3RydWN0aW9uLCBpbmZvKTsKICAgICBlbHNl
IHsKICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAg
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwpAQCAt
MjM5LDggKzI1MCw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkK
ICAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNr
OjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgIHN0b3JlMzIocmVnVDEsIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKTsKIAotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxs
TGlua0luZm8oKTsKLQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAg
ICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0aW9uKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxODAyMjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw3ICs1NSw3IEBAIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChJbnN0cnVjdGlvbioKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlU2V0
dXBWYXJhcmdzRnJhbWUoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQordm9pZCBKSVQ6OmNvbXBp
bGVTZXR1cFZhcmFyZ3NGcmFtZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5m
byogaW5mbykKIHsKICAgICBpbnQgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwogICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CkBAIC05MCw2
ICs5MCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKEluc3RyCiAgICAg
aWYgKGNhbk9wdGltaXplKQogICAgICAgICBlbmQubGluayh0aGlzKTsKICAgICAKKyAgICAvLyBQ
cm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNT
dGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOworICAgIGxvYWQ4KCZpbmZvLT5tYXhOdW1Bcmd1bWVu
dHMsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAs
IHJlZ1QyKTsKKyAgICBKdW1wIG5vdFNhdHVyYXRlZCA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMigyNTUpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigyNTUpLCBy
ZWdUMik7CisgICAgbm90U2F0dXJhdGVkLmxpbmsodGhpcyk7CisgICAgc3RvcmU4KHJlZ1QyLCAm
aW5mby0+bWF4TnVtQXJndW1lbnRzKTsKKyAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CisgICAg
CiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0
aGlzVmFsdWUsIHJlZ1QwKTsKICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSkpOwpAQCAtMTM0LDYgKzE0NCw4IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShJbnN0cnUKIAogdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2Rl
SUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
CiB7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5m
bygpOworCiAgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIAogICAg
IC8qIENhbGxlciBhbHdheXM6CkBAIC0xNTIsNyArMTY0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgo
b3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsX2FuZF9jYWxs
X3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKICAgICBDT01QSUxFX0FTU0VS
VChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3Zh
cmFyZ3MpLCBjYWxsX2FuZF9jb25zdHJ1Y3RfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9s
ZW5ndGgpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQg
PT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCi0gICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFt
ZShpbnN0cnVjdGlvbik7CisgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShpbnN0cnVj
dGlvbiwgaW5mbyk7CiAgICAgZWxzZSB7CiAgICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0
aW9uWzRdLnUub3BlcmFuZDsKQEAgLTE3Niw4ICsxODgsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgCi0gICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2YWwo
aW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE4MDIyNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Miw2ICs0OTIs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHVzaF9uYW1lX3Njb3BlKEluc3RydQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAg
IC8vIFJlZXN0YWJsaXNoIHRhZ3MKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVy
KSwgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChUYWdNYXNr
KSwgdGFnTWFza1JlZ2lzdGVyKTsKKyAgICAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSks
IHJlZ1QzKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvclRocm93
T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMs
IFZNOjp2bUVudHJ5RnJhbWVGb3JUaHJvd09mZnNldCgpKSwgcmVnVDApOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4MDIyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTAsNiArMTUwLDcgQEAgdHlwZWRlZiBpbnQ2NF90IEpJVF9PUEVSQVRJT04oKlFfSklU
T3BlcgogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9EKShk
b3VibGUpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9F
KShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVy
YXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlwZWRlZiBpbnQzMl90IEpJVF9PUEVS
QVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FSlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBp
bnQzMl90KTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25f
RUpaWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QpOwogdHlw
ZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19K
SVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTE4OSw2ICsx
OTAsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWd3NKKShFeGVjU3RhdGUqLCBW
YXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpKKShFeGVjU3RhdGUq
LCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAo
KlZfSklUT3BlcmF0aW9uX0VaSlpaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFs
dWUsIGludDMyX3QsIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNTdGF0ZSosIFZNKik7CiB0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fWikoaW50MzJfdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAko
cmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFy
Z3NGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMSArMTAxLDMxIEBAIHZvaWQgZW1p
dFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGwKIAogdm9pZCBlbWl0U2V0dXBWYXJhcmdz
RnJhbWVGYXN0Q2FzZShDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51bVVzZWRTbG90c0dQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3JhdGNoR1BS
MywgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNs
b3dDYXNlKQogewotICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKAotICAgICAgICBq
aXQsIG51bVVzZWRTbG90c0dQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
MywKLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKFZpcnR1YWxSZWdp
c3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgRGF0YUZvcm1hdEludDMyKSwKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpLAotICAgICAgICBm
aXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZh
c3RDYXNlKGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBudWxscHRyLCBmaXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOworfQorCit2
b2lkIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BS
MiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwg
dW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dD
YXNlKQoreworICAgIFZhbHVlUmVjb3ZlcnkgYXJndW1lbnRDb3VudFJlY292ZXJ5OworICAgIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEFyZ3VtZW50UmVnOworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUp
IHsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAg
ICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNT
dGFjaygKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdp
c3RlciwgRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFy
Z3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KAorICAgICAgICAg
ICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpOworICAg
ICAgICB9CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgPiAx
KQorICAgICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmaXJz
dEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVyKDApOworICAgIH0gZWxzZSB7CisgICAgICAg
IGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFj
aygKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwg
RGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1YWxSZWdp
c3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKKyAgICB9CisgICAgZW1pdFNldHVw
VmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBudW1Vc2VkU2xvdHNHUFIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGFyZ3VtZW50Q291bnRSZWNvdmVyeSwgZmlyc3RBcmd1
bWVudFJlZywgZmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NG
cmFtZS5oCShyZXZpc2lvbiAxODAyMjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nl
dHVwVmFyYXJnc0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgdm9pZCBl
bWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZShDQ2FsbAogLy8gVmFyaWFudCB0aGF0IGFzc3Vt
ZXMgbm9ybWFsIHN0YWNrIGZyYW1lLgogdm9pZCBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2Fz
ZShDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgbnVtVXNlZFNsb3RzR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgR1BSUmVnIHNjcmF0Y2hHUFIzLCB1bnNpZ25lZCBmaXJz
dFZhckFyZ09mZnNldCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd0Nhc2UpOwogCisvLyBW
YXJpYW50IGZvciBwb3RlbnRpYWxseSBpbmxpbmVkIHN0YWNrIGZyYW1lcy4KK3ZvaWQgZW1pdFNl
dHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIG51bVVzZWRTbG90
c0dQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEdQUlJlZyBzY3Jh
dGNoR1BSMywgSW5saW5lQ2FsbEZyYW1lKiwgdW5zaWduZWQgZmlyc3RWYXJBcmdPZmZzZXQsIEND
YWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dDYXNlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE4MDIyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0xODQ1LDYgKzE4NDUsMTAgQEAgX2xsaW50X29wX3RvX3ByaW1p
dGl2ZToKIAogCiBfbGxpbnRfb3BfY2F0Y2g6CisgICAgIyBSZWVzdGFibGlzaCB0YWdzCisgICAg
bW92ZSB0YWdUeXBlTnVtYmVyVmFsdWUsIHRhZ1R5cGVOdW1iZXIKKyAgICBtb3ZlIHRhZ01hc2tW
YWx1ZSwgdGFnTWFzaworCiAgICAgIyBUaGlzIGlzIHdoZXJlIHdlIGVuZCB1cCBmcm9tIHRoZSBK
SVQncyB0aHJvdyB0cmFtcG9saW5lIChiZWNhdXNlIHRoZQogICAgICMgbWFjaGluZSBjb2RlIHJl
dHVybiBhZGRyZXNzIHdpbGwgYmUgc2V0IHRvIF9sbGludF9vcF9jYXRjaCksIGFuZCBmcm9tCiAg
ICAgIyB0aGUgaW50ZXJwcmV0ZXIncyB0aHJvdyB0cmFtcG9saW5lIChzZWUgX2xsaW50X3Rocm93
X3RyYW1wb2xpbmUpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksNiArMTA5LDggQEAgaWYgSlNWQUxVRTY0CiAgICAgY29uc3QgUEIgPSB0NgogICAg
IGNvbnN0IHRhZ1R5cGVOdW1iZXIgPSBjc3IxCiAgICAgY29uc3QgdGFnTWFzayA9IGNzcjIKKyAg
ICBjb25zdCB0YWdUeXBlTnVtYmVyVmFsdWUgPSAweGZmZmYwMDAwMDAwMDAwMDAKKyAgICBjb25z
dCB0YWdNYXNrVmFsdWUgPSAweGZmZmYwMDAwMDAwMDAwMDIKICAgICAKICAgICBtYWNybyBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24ob2Zmc2V0LCBkZXN0KQogICAgICAgICBsb2FkaXMgb2Zmc2V0ICog
OFtQQiwgUEMsIDhdLCBkZXN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHMuaAkocmV2aXNpb24gMTgwMjI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGlj
OgogICAgICAgICAKICAgICBzdGF0aWMgQXJndW1lbnRzKiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEFyZ3VtZW50
c01vZGUgbW9kZSA9IE5vcm1hbEFyZ3VtZW50c0NyZWF0aW9uTW9kZSkKICAgICB7Ci0gICAgICAg
IEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJndW1l
bnRzPih2bS5oZWFwLCBvZmZzZXRPZklubGluZVJlZ2lzdGVyQXJyYXkoKSArIHJlZ2lzdGVyQXJy
YXlTaXplSW5CeXRlcyhpbmxpbmVDYWxsRnJhbWUpKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7Cisg
ICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
QXJndW1lbnRzPih2bS5oZWFwLCBvZmZzZXRPZklubGluZVJlZ2lzdGVyQXJyYXkoKSArIHJlZ2lz
dGVyQXJyYXlTaXplSW5CeXRlcyhjYWxsRnJhbWUsIGlubGluZUNhbGxGcmFtZSkpKSBBcmd1bWVu
dHMoY2FsbEZyYW1lKTsKICAgICAgICAgYXJndW1lbnRzLT5maW5pc2hDcmVhdGlvbihjYWxsRnJh
bWUsIGlubGluZUNhbGxGcmFtZSwgbW9kZSk7CiAgICAgICAgIHJldHVybiBhcmd1bWVudHM7CiAg
ICAgfQpAQCAtMTI0LDcgKzEyNCwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlU3RyaWN0
TW9kZUNhbGxlZUlmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSopOwogCiAgICAgc3RhdGljIHNpemVfdCBy
ZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7
IH0KLSAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSkgeyByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikgKiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSk7IH0KKyAgICBz
dGF0aWMgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcyhDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSAqIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOworICAgIH0KICAg
ICBib29sIGlzQXJndW1lbnQoc2l6ZV90KTsKICAgICBib29sIHRyeVNldEFyZ3VtZW50KFZNJiwg
c2l6ZV90IGFyZ3VtZW50LCBKU1ZhbHVlKTsKICAgICBKU1ZhbHVlIHRyeUdldEFyZ3VtZW50KHNp
emVfdCBhcmd1bWVudCk7CkBAIC0zNDAsMTEgKzM0OCwxNSBAQCBpbmxpbmUgdm9pZCBBcmd1bWVu
dHM6OmZpbmlzaENyZWF0aW9uKENhCiAgICAgbV9vdmVycm9kZUNhbGxlZSA9IGZhbHNlOwogICAg
IG1fb3ZlcnJvZGVDYWxsZXIgPSBmYWxzZTsKICAgICBtX2lzU3RyaWN0TW9kZSA9IGpzQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpLT5p
c1N0cmljdE1vZGUoKTsKLQorICAgIAorICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgIG1fbnVtQXJndW1lbnRzID0gY2FsbEZy
YW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLm9mZnNldCgpKS51
bmJveGVkSW50MzIoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbnVtQXJndW1lbnRzID0gaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOworICAgIG1fbnVtQXJndW1lbnRzLS07CisgICAg
CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBOb3JtYWxBcmd1bWVudHNDcmVhdGlvbk1v
ZGU6IHsKLSAgICAgICAgbV9udW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkgLSAxOwotICAgICAgICAKICAgICAgICAgaWYgKG1fbnVtQXJndW1lbnRzKSB7CiAg
ICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgICAgIG1fcmVn
aXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4oY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVudE9uZSAtIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpAQCAtMzYxLDcgKzM3Myw2IEBAIGlubGluZSB2
b2lkIEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oQ2EKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgQ2xvbmVkQXJndW1lbnRzQ3JlYXRpb25Nb2RlOiB7Ci0gICAgICAgIG1fbnVtQXJndW1lbnRz
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKICAgICAgICAgaWYgKG1f
bnVtQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0Rm9yQXJndW1lbnRPbmUgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsK
ICAgICAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkgKyBvZmZzZXRGb3JBcmd1bWVu
dE9uZSAtIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTgwMjI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIxMSw2ICsyMTEsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlv
blN0cmluZzsKICAgICAvKiBmcm9tIHN1cGVyIGxvbmcgY29tcGlsZXMgdGhhdCB0YWtlIGEgbG90
IG9mIG1lbW9yeS4gKi9cCiAgICAgdih1bnNpZ25lZCwgbWF4aW11bUlubGluaW5nQ2FsbGVyU2l6
ZSwgMTAwMDApIFwKICAgICBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11bVZhcmFyZ3NGb3JJbmxp
bmluZywgMTAwKSBcCisgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5s
aW5pbmcsIHRydWUpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHl2YXJpYW50QnlJZElubGluaW5n
LCB0cnVlKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9jb25zdHJ1Y3QtdmFyYXJncy1pbmxpbmUtc21hbGxlci1Gb28uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1pbmxp
bmUtc21hbGxlci1Gb28uanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLWlubGluZS1zbWFsbGVyLUZvby5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACitmdW5jdGlvbiBGb28oYSwgYikgeworICAgIHZh
ciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsg
KytpKQorICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgdGhpcy5mID0gYXJy
YXk7Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSkgeworICAgIHJldHVybiBuZXcgRm9vKC4uLmFy
cmF5KTsKK30KKworbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7
CisgICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhICsgIiB2ZXJzdXMgIiArIGI7Cisg
ICAgZm9yICh2YXIgaSA9IGEubGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChhW2ldICE9IGJb
aV0pCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBh
dCBpID0gIiArIGkgKyAiOiAiICsgYSArICIgdmVyc3VzICIgKyBiOworICAgIH0KK30KKworZnVu
Y3Rpb24gdGVzdChhcnJheSkgeworICAgIHZhciBleHBlY3RlZCA9IGFycmF5OworICAgIHZhciBh
Y3R1YWwgPSBiYXIoYXJyYXkpLmY7CisgICAgY2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVkKTsK
K30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0g
W107CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5w
dXNoKGopOworICAgIHRlc3QoYXJyYXkpOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLWlubGluZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0cnVjdC12YXJhcmdzLWlu
bGluZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvY29uc3RydWN0LXZhcmFyZ3MtaW5saW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzkgQEAKK2Z1bmN0aW9uIEZvbyhhLCBiKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGFycmF5LnB1
c2goYXJndW1lbnRzW2ldKTsKKyAgICB0aGlzLmYgPSB7YTphLCBiOmIsIGM6YXJyYXl9OworfQor
CitmdW5jdGlvbiBiYXIoYXJyYXkpIHsKKyAgICByZXR1cm4gbmV3IEZvbyguLi5hcnJheSk7Cit9
CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgeworICAgIGlm
IChhLmEgIT0gYi5hKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBhOiAiICsg
YS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKKyAgICBpZiAoYS5iICE9IGIuYikKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVyc3VzICIgKyBiLmI7Cisg
ICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJzdXMgIiArIGIu
YzsKKyAgICBmb3IgKHZhciBpID0gYS5jLmxlbmd0aDsgaS0tOykgeworICAgICAgICBpZiAoYS5j
W2ldICE9IGIuY1tpXSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMs
IG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOwor
ICAgIH0KK30KKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIHZhciBleHBlY3RlZCA9IHth
OmFycmF5WzBdLCBiOmFycmF5WzFdLCBjOmFycmF5fTsKKyAgICB2YXIgYWN0dWFsID0gYmFyKGFy
cmF5KS5mOworICAgIGNoZWNrRXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgaSAlIDY7ICsraikKKyAgICAgICAgYXJyYXkucHVzaChqKTsKKyAgICB0
ZXN0KGFycmF5KTsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9jb25zdHJ1Y3QtdmFyYXJncy1uby1pbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdHJ1Y3QtdmFyYXJncy1uby1pbmxpbmUuanMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0
cnVjdC12YXJhcmdzLW5vLWlubGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBA
CitmdW5jdGlvbiBGb28oYSwgYikgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5wdXNoKGFy
Z3VtZW50c1tpXSk7CisgICAgdGhpcy5mID0ge2E6YSwgYjpiLCBjOmFycmF5fTsKK30KKworbm9J
bmxpbmUoRm9vKTsKKworZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgcmV0dXJuIG5ldyBGb28o
Li4uYXJyYXkpOworfQorCitub0lubGluZShiYXIpOworCitmdW5jdGlvbiBjaGVja0VxdWFsKGEs
IGIpIHsKKyAgICBpZiAoYS5hICE9IGIuYSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWUgb2YgYTogIiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7CisgICAgaWYgKGEuYiAhPSBiLmIp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAiIHZlcnN1
cyAiICsgYi5iOworICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5sZW5ndGgpCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEuYyArICIg
dmVyc3VzICIgKyBiLmM7CisgICAgZm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTspIHsKKyAg
ICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0pCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsgIiB2ZXJz
dXMgIiArIGIuYzsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAgICB2YXIg
ZXhwZWN0ZWQgPSB7YTphcnJheVswXSwgYjphcnJheVsxXSwgYzphcnJheX07CisgICAgdmFyIGFj
dHVhbCA9IGJhcihhcnJheSkuZjsKKyAgICBjaGVja0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOwor
fQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBb
XTsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IGkgJSA2OyArK2opCisgICAgICAgIGFycmF5LnB1
c2goaik7CisgICAgdGVzdChhcnJheSk7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvZ2V0LWFyZ3VtZW50LWJ5LXZhbC1pbi1pbmxpbmVkLXZhcmFyZ3MtY2Fs
bC1vdXQtb2YtYm91bmRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvZ2V0LWFyZ3VtZW50LWJ5LXZhbC1pbi1pbmxpbmVkLXZhcmFyZ3MtY2FsbC1v
dXQtb2YtYm91bmRzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91
dC1vZi1ib3VuZHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAordmFyIGdpOwor
CitmdW5jdGlvbiBmb28oKSB7CisgICAgcmV0dXJuIGFyZ3VtZW50c1tnaV07Cit9CisKK2Z1bmN0
aW9uIGJhcihhcnJheSwgaSkgeworICAgIGdpID0gaTsKKyAgICByZXR1cm4gZm9vLmFwcGx5KHRo
aXMsIGFycmF5KTsKK30KKworbm9JbmxpbmUoYmFyKTsKKwordmFyIGJpZ0FycmF5ID0gW107Citm
b3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpCisgICAgYmlnQXJyYXkucHVzaCg0Mik7CisKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBtaSA9IGkgJSA1MDsKKyAg
ICB2YXIgcmVzdWx0ID0gYmFyKGJpZ0FycmF5LCBtaSk7CisgICAgaWYgKHJlc3VsdCAhPT0gNDIp
CisgICAgICAgIHRocm93ICJCYWQgcmVzdWx0IGluIGZpcnN0IGxvb3A6ICIgKyByZXN1bHQgKyAi
OyBleHBlY3RlZDogIiArIDQyOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKKyAgICB2YXIgbWkgPSBpICUgMTAwOworICAgIHZhciByZXN1bHQgPSBiYXIoWzQyXSwgbWkp
OworICAgIHZhciBleHBlY3RlZCA9IG1pID8gdm9pZCAwIDogNDI7CisgICAgaWYgKHJlc3VsdCAh
PT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93ICJCYWQgcmVzdWx0IGluIHNlY29uZCBsb29wOiAi
ICsgcmVzdWx0ICsgIjsgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZDsKK30KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LWFyZ3VtZW50LWJ5LXZhbC1zYWZlLWluLWlu
bGluZWQtdmFyYXJncy1jYWxsLW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9nZXQtYXJndW1lbnQtYnktdmFsLXNhZmUtaW4t
aW5saW5lZC12YXJhcmdzLWNhbGwtb3V0LW9mLWJvdW5kcy5qcwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LWFyZ3VtZW50LWJ5LXZhbC1zYWZl
LWluLWlubGluZWQtdmFyYXJncy1jYWxsLW91dC1vZi1ib3VuZHMuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNSBAQAordmFyIGdpOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgaWYgKCFl
ZmZlY3RmdWw0MigpKQorICAgICAgICBhcmd1bWVudHMgPSAiaGVsbG8iOworICAgIHJldHVybiBh
cmd1bWVudHNbZ2ldOworfQorCitmdW5jdGlvbiBiYXIoYXJyYXksIGkpIHsKKyAgICBnaSA9IGk7
CisgICAgcmV0dXJuIGZvby5hcHBseSh0aGlzLCBhcnJheSk7Cit9CisKK25vSW5saW5lKGJhcik7
CisKK3ZhciBiaWdBcnJheSA9IFtdOworZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKQorICAg
IGJpZ0FycmF5LnB1c2goNDIpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICB2YXIgbWkgPSBpICUgNTA7CisgICAgdmFyIHJlc3VsdCA9IGJhcihiaWdBcnJheSwgbWkp
OworICAgIGlmIChyZXN1bHQgIT09IDQyKQorICAgICAgICB0aHJvdyAiQmFkIHJlc3VsdCBpbiBm
aXJzdCBsb29wOiAiICsgcmVzdWx0ICsgIjsgZXhwZWN0ZWQ6ICIgKyA0MjsKK30KKworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgbWkgPSBpICUgMTAwOworICAg
IHZhciByZXN1bHQgPSBiYXIoWzQyXSwgbWkpOworICAgIHZhciBleHBlY3RlZCA9IG1pID8gdm9p
ZCAwIDogNDI7CisgICAgaWYgKHJlc3VsdCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93ICJC
YWQgcmVzdWx0IGluIHNlY29uZCBsb29wOiAiICsgcmVzdWx0ICsgIjsgZXhwZWN0ZWQ6ICIgKyBl
eHBlY3RlZDsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9n
ZXQtbXktYXJndW1lbnQtYnktdmFsLWNyZWF0ZXMtYXJndW1lbnRzLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LW15LWFyZ3VtZW50LWJ5LXZh
bC1jcmVhdGVzLWFyZ3VtZW50cy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvZ2V0LW15LWFyZ3VtZW50LWJ5LXZhbC1jcmVhdGVzLWFyZ3VtZW50
cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACitmdW5jdGlvbiBibGFoKGFyZ3Mp
IHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVu
Z3RoOyArK2kpCisgICAgICAgIGFycmF5LnB1c2goYXJnc1tpXSk7CisgICAgcmV0dXJuIGFycmF5
OworfQorCitmdW5jdGlvbiBmb28oKSB7CisgICAgLy8gRm9yY2UgY3JlYXRpb24gb2YgYXJndW1l
bnRzIGJ5IGRvaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzLgorICAgIHZhciB0bXAgPSBhcmd1bWVu
dHNbNDJdOworICAgIAorICAgIC8vIFVzZSB0aGUgY3JlYXRlZCBhcmd1bWVudHMgb2JqZWN0Lgor
ICAgIHJldHVybiBibGFoKGFyZ3VtZW50cyk7Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSkgewor
ICAgIHJldHVybiBmb28uYXBwbHkodGhpcywgYXJyYXkpOworfQorCitub0lubGluZShibGFoKTsK
K25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgeworICAgIGlmIChh
Lmxlbmd0aCAhPSBiLmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBsZW5ndGggbWlzbWF0
Y2g6ICIgKyBhICsgIiB2ZXJzdXMgIiArIGI7CisgICAgZm9yICh2YXIgaSA9IGEubGVuZ3RoOyBp
LS07KSB7CisgICAgICAgIGlmIChhW2ldICE9IGJbaV0pCisgICAgICAgICAgICB0aHJvdyAiRXJy
b3I6IG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBhICsgIiB2ZXJzdXMgIiArIGI7Cisg
ICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgdmFyIGFjdHVhbCA9IGJhcihh
cnJheSk7CisgICAgY2hlY2tFcXVhbChhY3R1YWwsIGFycmF5KTsKK30KKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIg
aiA9IDA7IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJheS5wdXNoKGopOworICAgIHRlc3Qo
YXJyYXkpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2Fk
LXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtZXhpdC1pbi1mb28uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxp
bmVkLWNhbGwtZXhpdC1pbi1mb28uanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1leGl0LWlu
LWZvby5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACitmdW5jdGlvbiBmb28oYSwg
YikgeworICAgIHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1l
bnRzLmxlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSArIDEpOwor
ICAgIHJldHVybiB7YTphLCBiOmIsIGM6YXJyYXl9OworfQorCitmdW5jdGlvbiBiYXIoYXJyYXkp
IHsKKyAgICByZXR1cm4gZm9vLmFwcGx5KHRoaXMsIGFycmF5KTsKK30KKworbm9JbmxpbmUoYmFy
KTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChhLCBiKSB7CisgICAgaWYgKGEuYSAhPSBiLmEpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAi
ICsgYi5hOworICAgIGlmIChhLmIgIT0gYi5iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJzdXMgIiArIGIuYjsKKyAgICBpZiAoYS5jLmxlbmd0
aCAhPSBiLmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBs
ZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOworICAgIGZvciAodmFy
IGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQor
ICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9
ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0KGFycmF5KSB7CisgICAgdmFyIGV4cGVjdGVkID0ge2E6YXJyYXlbMF0sIGI6YXJy
YXlbMV0sIGM6YXJyYXkubWFwKGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZSArIDEgfSl9
OworICAgIHZhciBhY3R1YWwgPSBiYXIoYXJyYXkpOworICAgIGNoZWNrRXF1YWwoYWN0dWFsLCBl
eHBlY3RlZCk7Cit9CisKKy8vIFRoaXMgaXMgcHJldHR5IGR1bWIuIFdlIG5lZWQgdG8gZmlyc3Qg
bWFrZSBzdXJlIHRoYXQgdGhlIFZNIGlzIHByZXBhcmVkIGZvciBkb3VibGUgYXJyYXlzIGJlaW5n
CisvLyBjcmVhdGVkLgordmFyIGFycmF5ID0gW107CithcnJheS5wdXNoKDQyKTsKK2FycmF5LnB1
c2goNDIuNSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBh
cnJheSA9IFtdOworICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAlIDY7ICsraikKKyAgICAgICAg
YXJyYXkucHVzaChqKTsKKyAgICB0ZXN0KGFycmF5KTsKK30KKwordGVzdChbMS41LCAyLjUsIDMu
NV0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFy
Z3MtdGhlbi1pbmxpbmVkLWNhbGwtaW5saW5lZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1p
bmxpbmVkLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtaW5saW5lZC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQzIEBACitmdW5jdGlvbiBmb28oYSwgYikgeworICAgIHZhciBhcnJh
eSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQor
ICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgcmV0dXJuIHthOmEsIGI6Yiwg
YzphcnJheX07Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSkgeworICAgIHJldHVybiBmb28uYXBw
bHkodGhpcywgYXJyYXkpOworfQorCitmdW5jdGlvbiBiYXooYXJyYXkpIHsKKyAgICByZXR1cm4g
YmFyKGFycmF5KTsKK30KKworbm9JbmxpbmUoYmF6KTsKKworZnVuY3Rpb24gY2hlY2tFcXVhbChh
LCBiKSB7CisgICAgaWYgKGEuYSAhPSBiLmEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZh
bHVlIG9mIGE6ICIgKyBhLmEgKyAiIHZlcnN1cyAiICsgYi5hOworICAgIGlmIChhLmIgIT0gYi5i
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBiOiAiICsgYS5iICsgIiB2ZXJz
dXMgIiArIGIuYjsKKyAgICBpZiAoYS5jLmxlbmd0aCAhPSBiLmMubGVuZ3RoKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMgKyAi
IHZlcnN1cyAiICsgYi5jOworICAgIGZvciAodmFyIGkgPSBhLmMubGVuZ3RoOyBpLS07KSB7Cisg
ICAgICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBpICsgIjogIiArIGEuYyArICIgdmVy
c3VzICIgKyBiLmM7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KGFycmF5KSB7CisgICAgdmFy
IGV4cGVjdGVkID0ge2E6YXJyYXlbMF0sIGI6YXJyYXlbMV0sIGM6YXJyYXl9OworICAgIHZhciBh
Y3R1YWwgPSBiYXooYXJyYXkpOworICAgIGNoZWNrRXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cit9
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBhcnJheSA9IFtd
OworICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAlIDY7ICsraikKKyAgICAgICAgYXJyYXkucHVz
aChqKTsKKyAgICB0ZXN0KGFycmF5KTsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhl
bi1pbmxpbmVkLWNhbGwuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM5IEBACitmdW5jdGlvbiBmb28oYSwgYikgeworICAgIHZhciBhcnJh
eSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQor
ICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgcmV0dXJuIHthOmEsIGI6Yiwg
YzphcnJheX07Cit9CisKK2Z1bmN0aW9uIGJhcihhcnJheSkgeworICAgIHJldHVybiBmb28uYXBw
bHkodGhpcywgYXJyYXkpOworfQorCitub0lubGluZShiYXIpOworCitmdW5jdGlvbiBjaGVja0Vx
dWFsKGEsIGIpIHsKKyAgICBpZiAoYS5hICE9IGIuYSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWUgb2YgYTogIiArIGEuYSArICIgdmVyc3VzICIgKyBiLmE7CisgICAgaWYgKGEuYiAh
PSBiLmIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAi
IHZlcnN1cyAiICsgYi5iOworICAgIGlmIChhLmMubGVuZ3RoICE9IGIuYy5sZW5ndGgpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEu
YyArICIgdmVyc3VzICIgKyBiLmM7CisgICAgZm9yICh2YXIgaSA9IGEuYy5sZW5ndGg7IGktLTsp
IHsKKyAgICAgICAgaWYgKGEuY1tpXSAhPSBiLmNbaV0pCisgICAgICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCB2YWx1ZSBvZiBjLCBtaXNtYXRjaCBhdCBpID0gIiArIGkgKyAiOiAiICsgYS5jICsg
IiB2ZXJzdXMgIiArIGIuYzsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXkpIHsKKyAg
ICB2YXIgZXhwZWN0ZWQgPSB7YTphcnJheVswXSwgYjphcnJheVsxXSwgYzphcnJheX07CisgICAg
dmFyIGFjdHVhbCA9IGJhcihhcnJheSk7CisgICAgY2hlY2tFcXVhbChhY3R1YWwsIGV4cGVjdGVk
KTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5
ID0gW107CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICUgNjsgKytqKQorICAgICAgICBhcnJh
eS5wdXNoKGopOworICAgIHRlc3QoYXJyYXkpOworfQorCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODAy
MjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5
MSBAQAorMjAxNS0wMi0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyBzaG91bGQgcmVhbGx5IHN1cHBvcnQgdmFyYXJncworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzMyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAorICAgICAgICBBZGRzIGEgdmVyc2lvbiBvZiBkZWx0
YWJsdWUgdGhhdCB1c2VzIHJlc3QgYXJndW1lbnRzIHByb2Z1c2VseS4gVGhpcyBzcGVlZHMgdXAg
YnkgMjAlIHdpdGggdGhpcworICAgICAgICBwYXRjaC4gSSBiZWxpZXZlIHRoYXQgdGhlIG1hY2hp
bmVyeSB0aGF0IHRoaXMgcGF0Y2ggcHV0cyBpbiBwbGFjZSB3aWxsIGFsbG93IHVzIHRvIHVsdGlt
YXRlbHkKKyAgICAgICAgcnVuIGRlbHRhYmx1ZS12YXJhcmdzIGF0IHRoZSBzYW1lIHN0ZWFkeS1z
dGF0ZSBwZXJmb3JtYW5jZSBhcyBub3JtYWwgZGVsdGFibHVlLgorCisgICAgICAgICoganMvcmVn
cmVzcy9kZWx0YWJsdWUtdmFyYXJncy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvZGVsdGFibHVlLXZhcmFyZ3MuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvZGVsdGFibHVlLXZhcmFyZ3MuanM6IEFkZGVkLgorICAgICAgICAo
YXJncyk6CisgICAgICAgIChPYmplY3QucHJvdG90eXBlLmluaGVyaXRzRnJvbSk6CisgICAgICAg
IChPcmRlcmVkQ29sbGVjdGlvbik6CisgICAgICAgIChPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5
cGUuYWRkKToKKyAgICAgICAgKE9yZGVyZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5hdCk6CisgICAg
ICAgIChPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5cGUuc2l6ZSk6CisgICAgICAgIChPcmRlcmVk
Q29sbGVjdGlvbi5wcm90b3R5cGUucmVtb3ZlRmlyc3QpOgorICAgICAgICAoT3JkZXJlZENvbGxl
Y3Rpb24ucHJvdG90eXBlLnJlbW92ZSk6CisgICAgICAgIChTdHJlbmd0aCk6CisgICAgICAgIChT
dHJlbmd0aC5zdHJvbmdlcik6CisgICAgICAgIChTdHJlbmd0aC53ZWFrZXIpOgorICAgICAgICAo
U3RyZW5ndGgud2Vha2VzdE9mKToKKyAgICAgICAgKFN0cmVuZ3RoLnN0cm9uZ2VzdCk6CisgICAg
ICAgIChTdHJlbmd0aC5wcm90b3R5cGUubmV4dFdlYWtlcik6CisgICAgICAgIChDb25zdHJhaW50
KToKKyAgICAgICAgKENvbnN0cmFpbnQucHJvdG90eXBlLmFkZENvbnN0cmFpbnQpOgorICAgICAg
ICAoQ29uc3RyYWludC5wcm90b3R5cGUuc2F0aXNmeSk6CisgICAgICAgIChDb25zdHJhaW50LnBy
b3RvdHlwZS5kZXN0cm95Q29uc3RyYWludCk6CisgICAgICAgIChDb25zdHJhaW50LnByb3RvdHlw
ZS5pc0lucHV0KToKKyAgICAgICAgKFVuYXJ5Q29uc3RyYWludCk6CisgICAgICAgIChVbmFyeUNv
bnN0cmFpbnQucHJvdG90eXBlLmFkZFRvR3JhcGgpOgorICAgICAgICAoVW5hcnlDb25zdHJhaW50
LnByb3RvdHlwZS5jaG9vc2VNZXRob2QpOgorICAgICAgICAoVW5hcnlDb25zdHJhaW50LnByb3Rv
dHlwZS5pc1NhdGlzZmllZCk6CisgICAgICAgIChVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm1h
cmtJbnB1dHMpOgorICAgICAgICAoVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5vdXRwdXQpOgor
ICAgICAgICAoVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5yZWNhbGN1bGF0ZSk6CisgICAgICAg
IChVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtVbnNhdGlzZmllZCk6CisgICAgICAgIChV
bmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlucHV0c0tub3duKToKKyAgICAgICAgKFVuYXJ5Q29u
c3RyYWludC5wcm90b3R5cGUucmVtb3ZlRnJvbUdyYXBoKToKKyAgICAgICAgKFN0YXlDb25zdHJh
aW50KToKKyAgICAgICAgKFN0YXlDb25zdHJhaW50LnByb3RvdHlwZS5leGVjdXRlKToKKyAgICAg
ICAgKEVkaXRDb25zdHJhaW50LnByb3RvdHlwZS5pc0lucHV0KToKKyAgICAgICAgKEVkaXRDb25z
dHJhaW50LnByb3RvdHlwZS5leGVjdXRlKToKKyAgICAgICAgKEJpbmFyeUNvbnN0cmFpbnQpOgor
ICAgICAgICAoQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuY2hvb3NlTWV0aG9kKToKKyAgICAg
ICAgKEJpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmFkZFRvR3JhcGgpOgorICAgICAgICAoQmlu
YXJ5Q29uc3RyYWludC5wcm90b3R5cGUuaXNTYXRpc2ZpZWQpOgorICAgICAgICAoQmluYXJ5Q29u
c3RyYWludC5wcm90b3R5cGUubWFya0lucHV0cyk6CisgICAgICAgIChCaW5hcnlDb25zdHJhaW50
LnByb3RvdHlwZS5pbnB1dCk6CisgICAgICAgIChCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5v
dXRwdXQpOgorICAgICAgICAoQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUucmVjYWxjdWxhdGUp
OgorICAgICAgICAoQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFya1Vuc2F0aXNmaWVkKToK
KyAgICAgICAgKEJpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlucHV0c0tub3duKToKKyAgICAg
ICAgKEJpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaCk6CisgICAgICAg
IChTY2FsZUNvbnN0cmFpbnQpOgorICAgICAgICAoU2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5h
ZGRUb0dyYXBoKToKKyAgICAgICAgKFNjYWxlQ29uc3RyYWludC5wcm90b3R5cGUucmVtb3ZlRnJv
bUdyYXBoKToKKyAgICAgICAgKFNjYWxlQ29uc3RyYWludC5wcm90b3R5cGUubWFya0lucHV0cyk6
CisgICAgICAgIChTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUpOgorICAgICAgICAo
U2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5yZWNhbGN1bGF0ZSk6CisgICAgICAgIChFcXVhbGl0
eUNvbnN0cmFpbnQpOgorICAgICAgICAoRXF1YWxpdHlDb25zdHJhaW50LnByb3RvdHlwZS5leGVj
dXRlKToKKyAgICAgICAgKFZhcmlhYmxlKToKKyAgICAgICAgKFZhcmlhYmxlLnByb3RvdHlwZS5h
ZGRDb25zdHJhaW50KToKKyAgICAgICAgKFZhcmlhYmxlLnByb3RvdHlwZS5yZW1vdmVDb25zdHJh
aW50KToKKyAgICAgICAgKFBsYW5uZXIpOgorICAgICAgICAoUGxhbm5lci5wcm90b3R5cGUuaW5j
cmVtZW50YWxBZGQpOgorICAgICAgICAoUGxhbm5lci5wcm90b3R5cGUuaW5jcmVtZW50YWxSZW1v
dmUpOgorICAgICAgICAoUGxhbm5lci5wcm90b3R5cGUubmV3TWFyayk6CisgICAgICAgIChQbGFu
bmVyLnByb3RvdHlwZS5tYWtlUGxhbik6CisgICAgICAgIChQbGFubmVyLnByb3RvdHlwZS5leHRy
YWN0UGxhbkZyb21Db25zdHJhaW50cyk6CisgICAgICAgIChQbGFubmVyLnByb3RvdHlwZS5hZGRQ
cm9wYWdhdGUpOgorICAgICAgICAoUGxhbm5lci5wcm90b3R5cGUucmVtb3ZlUHJvcGFnYXRlRnJv
bSk6CisgICAgICAgIChQbGFubmVyLnByb3RvdHlwZS5hZGRDb25zdHJhaW50c0NvbnN1bWluZ1Rv
KToKKyAgICAgICAgKFBsYW4pOgorICAgICAgICAoUGxhbi5wcm90b3R5cGUuYWRkQ29uc3RyYWlu
dCk6CisgICAgICAgIChQbGFuLnByb3RvdHlwZS5zaXplKToKKyAgICAgICAgKFBsYW4ucHJvdG90
eXBlLmNvbnN0cmFpbnRBdCk6CisgICAgICAgIChQbGFuLnByb3RvdHlwZS5leGVjdXRlKToKKyAg
ICAgICAgKGNoYWluVGVzdCk6CisgICAgICAgIChwcm9qZWN0aW9uVGVzdCk6CisgICAgICAgIChj
aGFuZ2UpOgorICAgICAgICAoZGVsdGFCbHVlKToKKwogMjAxNS0wMi0xNyAgQnJlbnQgRnVsZ2hh
bSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBEb2N1bWVudCBzb21lIGRlYnVnIGFz
c2VydGlvbnMgaW4gQWNjZXNzaWJpbGl0eSB0ZXN0cyAoVW5yZXZpZXdlZCkKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZGVsdGFibHVlLXZhcmFyZ3MtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZGVsdGFibHVlLXZhcmFyZ3MtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZWx0YWJsdWUtdmFy
YXJncy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdy
ZXNzL2RlbHRhYmx1ZS12YXJhcmdzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2RlbHRhYmx1
ZS12YXJhcmdzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kZWx0
YWJsdWUtdmFyYXJncy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9kZWx0YWJsdWUtdmFyYXJncy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2RlbHRhYmx1
ZS12YXJhcmdzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2RlbHRhYmx1ZS12YXJhcmdzLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2RlbHRhYmx1ZS12YXJh
cmdzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZGVsdGFibHVlLXZhcmFyZ3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4ODkgQEAK
Ky8vQCBza2lwIGlmICRhcmNoaXRlY3R1cmUgPT0gImFybSIgYW5kICRob3N0T1MgPT0gImRhcndp
biIKKy8vIENvcHlyaWdodCAyMDA4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgMTk5NiBKb2huIE1hbG9uZXkgYW5kIE1hcmlvIFdvbGN6
a28uCisKKy8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKy8vIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCisvLyBU
aGlzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEZWx0YUJsdWUgYmVuY2htYXJrIGlzIGRlcml2ZWQK
Ky8vIGZyb20gdGhlIFNtYWxsdGFsayBpbXBsZW1lbnRhdGlvbiBieSBKb2huIE1hbG9uZXkgYW5k
IE1hcmlvCisvLyBXb2xjemtvLiBTb21lIHBhcnRzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGRpcmVj
dGx5LCB3aGVyZWFzCisvLyBvdGhlcnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG1vcmUgYWdncmVzaXZl
bHkgdG8gbWFrZSBpdCBmZWVsCisvLyBtb3JlIGxpa2UgYSBKYXZhU2NyaXB0IHByb2dyYW0uCisK
Ky8qKgorICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBEZWx0YUJsdWUgY29u
c3RyYWludC1zb2x2aW5nCisgKiBhbGdvcml0aG0sIGFzIGRlc2NyaWJlZCBpbjoKKyAqCisgKiAi
VGhlIERlbHRhQmx1ZSBBbGdvcml0aG06IEFuIEluY3JlbWVudGFsIENvbnN0cmFpbnQgSGllcmFy
Y2h5IFNvbHZlciIKKyAqICAgQmpvcm4gTi4gRnJlZW1hbi1CZW5zb24gYW5kIEpvaG4gTWFsb25l
eQorICogICBKYW51YXJ5IDE5OTAgQ29tbXVuaWNhdGlvbnMgb2YgdGhlIEFDTSwKKyAqICAgYWxz
byBhdmFpbGFibGUgYXMgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uIFRSIDg5LTA4LTA2LgorICoK
KyAqIEJld2FyZTogdGhpcyBiZW5jaG1hcmsgaXMgd3JpdHRlbiBpbiBhIGdyb3Rlc3F1ZSBzdHls
ZSB3aGVyZQorICogdGhlIGNvbnN0cmFpbnQgbW9kZWwgaXMgYnVpbHQgYnkgc2lkZS1lZmZlY3Rz
IGZyb20gY29uc3RydWN0b3JzLgorICogSSd2ZSBrZXB0IGl0IHRoaXMgd2F5IHRvIGF2b2lkIGRl
dmlhdGluZyB0b28gbXVjaCBmcm9tIHRoZSBvcmlnaW5hbAorICogaW1wbGVtZW50YXRpb24uCisg
Ki8KKworLy8gVGhpcyB0aGluZyBpcyBhbiBldmlsIGhhY2sgdGhhdCB3ZSB1c2UgdGhyb3VnaG91
dCB0aGlzIGJlbmNobWFyayBzbyB0aGF0IHdlIGNhbiB1c2UgdGhpcyBiZW5jaG1hcmsgdG8KKy8v
IHN0cmVzcyBvdXIgdmFyYXJncyBpbXBsZW1lbnRhdGlvbi4gV2UgYWxzbyBoYXZlIHRlc3RzIGZv
ciBzcGVjaWZpYyBmZWF0dXJlcyBvZiB0aGUgdmFyYXJncyBjb2RlLCBidXQKKy8vIGhhdmluZyBh
IHNvbWV3aGF0IGxhcmdlLWlzaCBiZW5jaG1hcmsgdGhhdCB1c2VzIHZhcmFyZ3MgYSBsb3QgKGV2
ZW4gaWYgaXQncyBpbiBhIHNpbGx5IHdheSkgaXMgZ3JlYXQKKy8vIGZvciBzaGFraW5nIG91dCBi
dWdzLgorZnVuY3Rpb24gYXJncygpIHsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkucHVzaChh
cmd1bWVudHNbaV0pOworICAgIHJldHVybiBhcnJheTsKK30KKworCisvKiAtLS0gTyBiIGogZSBj
IHQgICBNIG8gZCBlIGwgLS0tICovCisKK09iamVjdC5wcm90b3R5cGUuaW5oZXJpdHNGcm9tID0g
ZnVuY3Rpb24gKHNodXBlcikgeworICBmdW5jdGlvbiBJbmhlcml0ZXIoKSB7IH0KKyAgSW5oZXJp
dGVyLnByb3RvdHlwZSA9IHNodXBlci5wcm90b3R5cGU7CisgIHRoaXMucHJvdG90eXBlID0gbmV3
IEluaGVyaXRlciguLi5hcmdzKCkpOworICB0aGlzLnN1cGVyQ29uc3RydWN0b3IgPSBzaHVwZXI7
Cit9CisKK2Z1bmN0aW9uIE9yZGVyZWRDb2xsZWN0aW9uKCkgeworICB0aGlzLmVsbXMgPSBuZXcg
QXJyYXkoLi4uYXJncygpKTsKK30KKworT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLmFkZCA9
IGZ1bmN0aW9uIChlbG0pIHsKKyAgdGhpcy5lbG1zLnB1c2goLi4uYXJncyhlbG0pKTsKK30KKwor
T3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgIHJl
dHVybiB0aGlzLmVsbXNbaW5kZXhdOworfQorCitPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5cGUu
c2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMuZWxtcy5sZW5ndGg7Cit9CisKK09y
ZGVyZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5yZW1vdmVGaXJzdCA9IGZ1bmN0aW9uICgpIHsKKyAg
cmV0dXJuIHRoaXMuZWxtcy5wb3AoLi4uYXJncygpKTsKK30KKworT3JkZXJlZENvbGxlY3Rpb24u
cHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChlbG0pIHsKKyAgdmFyIGluZGV4ID0gMCwgc2tp
cHBlZCA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbG1zLmxlbmd0aDsgaSsrKSB7
CisgICAgdmFyIHZhbHVlID0gdGhpcy5lbG1zW2ldOworICAgIGlmICh2YWx1ZSAhPSBlbG0pIHsK
KyAgICAgIHRoaXMuZWxtc1tpbmRleF0gPSB2YWx1ZTsKKyAgICAgIGluZGV4Kys7CisgICAgfSBl
bHNlIHsKKyAgICAgIHNraXBwZWQrKzsKKyAgICB9CisgIH0KKyAgZm9yICh2YXIgaSA9IDA7IGkg
PCBza2lwcGVkOyBpKyspCisgICAgdGhpcy5lbG1zLnBvcCguLi5hcmdzKCkpOworfQorCisvKiAt
LS0gKgorICogUyB0IHIgZSBuIGcgdCBoCisgKiAtLS0gKi8KKworLyoqCisgKiBTdHJlbmd0aHMg
YXJlIHVzZWQgdG8gbWVhc3VyZSB0aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiBjb25zdHJhaW50
cy4KKyAqIE5ldyBzdHJlbmd0aHMgbWF5IGJlIGluc2VydGVkIGluIHRoZSBzdHJlbmd0aCBoaWVy
YXJjaHkgd2l0aG91dAorICogZGlzcnVwdGluZyBjdXJyZW50IGNvbnN0cmFpbnRzLiAgU3RyZW5n
dGhzIGNhbm5vdCBiZSBjcmVhdGVkIG91dHNpZGUKKyAqIHRoaXMgY2xhc3MsIHNvIHBvaW50ZXIg
Y29tcGFyaXNvbiBjYW4gYmUgdXNlZCBmb3IgdmFsdWUgY29tcGFyaXNvbi4KKyAqLworZnVuY3Rp
b24gU3RyZW5ndGgoc3RyZW5ndGhWYWx1ZSwgbmFtZSkgeworICB0aGlzLnN0cmVuZ3RoVmFsdWUg
PSBzdHJlbmd0aFZhbHVlOworICB0aGlzLm5hbWUgPSBuYW1lOworfQorCitTdHJlbmd0aC5zdHJv
bmdlciA9IGZ1bmN0aW9uIChzMSwgczIpIHsKKyAgcmV0dXJuIHMxLnN0cmVuZ3RoVmFsdWUgPCBz
Mi5zdHJlbmd0aFZhbHVlOworfQorCitTdHJlbmd0aC53ZWFrZXIgPSBmdW5jdGlvbiAoczEsIHMy
KSB7CisgIHJldHVybiBzMS5zdHJlbmd0aFZhbHVlID4gczIuc3RyZW5ndGhWYWx1ZTsKK30KKwor
U3RyZW5ndGgud2Vha2VzdE9mID0gZnVuY3Rpb24gKHMxLCBzMikgeworICByZXR1cm4gdGhpcy53
ZWFrZXIoLi4uYXJncyhzMSwgczIpKSA/IHMxIDogczI7Cit9CisKK1N0cmVuZ3RoLnN0cm9uZ2Vz
dCA9IGZ1bmN0aW9uIChzMSwgczIpIHsKKyAgcmV0dXJuIHRoaXMuc3Ryb25nZXIoLi4uYXJncyhz
MSwgczIpKSA/IHMxIDogczI7Cit9CisKK1N0cmVuZ3RoLnByb3RvdHlwZS5uZXh0V2Vha2VyID0g
ZnVuY3Rpb24gKCkgeworICBzd2l0Y2ggKHRoaXMuc3RyZW5ndGhWYWx1ZSkgeworICAgIGNhc2Ug
MDogcmV0dXJuIFN0cmVuZ3RoLldFQUtFU1Q7CisgICAgY2FzZSAxOiByZXR1cm4gU3RyZW5ndGgu
V0VBS19ERUZBVUxUOworICAgIGNhc2UgMjogcmV0dXJuIFN0cmVuZ3RoLk5PUk1BTDsKKyAgICBj
YXNlIDM6IHJldHVybiBTdHJlbmd0aC5TVFJPTkdfREVGQVVMVDsKKyAgICBjYXNlIDQ6IHJldHVy
biBTdHJlbmd0aC5QUkVGRVJSRUQ7CisgICAgY2FzZSA1OiByZXR1cm4gU3RyZW5ndGguUkVRVUlS
RUQ7CisgIH0KK30KKworLy8gU3RyZW5ndGggY29uc3RhbnRzLgorU3RyZW5ndGguUkVRVUlSRUQg
ICAgICAgID0gbmV3IFN0cmVuZ3RoKC4uLmFyZ3MoMCwgInJlcXVpcmVkIikpOworU3RyZW5ndGgu
U1RPTkdfUFJFRkVSUkVEID0gbmV3IFN0cmVuZ3RoKC4uLmFyZ3MoMSwgInN0cm9uZ1ByZWZlcnJl
ZCIpKTsKK1N0cmVuZ3RoLlBSRUZFUlJFRCAgICAgICA9IG5ldyBTdHJlbmd0aCguLi5hcmdzKDIs
ICJwcmVmZXJyZWQiKSk7CitTdHJlbmd0aC5TVFJPTkdfREVGQVVMVCAgPSBuZXcgU3RyZW5ndGgo
Li4uYXJncygzLCAic3Ryb25nRGVmYXVsdCIpKTsKK1N0cmVuZ3RoLk5PUk1BTCAgICAgICAgICA9
IG5ldyBTdHJlbmd0aCguLi5hcmdzKDQsICJub3JtYWwiKSk7CitTdHJlbmd0aC5XRUFLX0RFRkFV
TFQgICAgPSBuZXcgU3RyZW5ndGgoLi4uYXJncyg1LCAid2Vha0RlZmF1bHQiKSk7CitTdHJlbmd0
aC5XRUFLRVNUICAgICAgICAgPSBuZXcgU3RyZW5ndGgoLi4uYXJncyg2LCAid2Vha2VzdCIpKTsK
KworLyogLS0tICoKKyAqIEMgbyBuIHMgdCByIGEgaSBuIHQKKyAqIC0tLSAqLworCisvKioKKyAq
IEFuIGFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyBhIHN5c3RlbS1tYWludGFpbmFibGUgcmVs
YXRpb25zaGlwCisgKiAob3IgImNvbnN0cmFpbnQiKSBiZXR3ZWVuIGEgc2V0IG9mIHZhcmlhYmxl
cy4gQSBjb25zdHJhaW50IHN1cHBsaWVzCisgKiBhIHN0cmVuZ3RoIGluc3RhbmNlIHZhcmlhYmxl
OyBjb25jcmV0ZSBzdWJjbGFzc2VzIHByb3ZpZGUgYSBtZWFucworICogb2Ygc3RvcmluZyB0aGUg
Y29uc3RyYWluZWQgdmFyaWFibGVzIGFuZCBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZAorICog
dG8gcmVwcmVzZW50IGEgY29uc3RyYWludC4KKyAqLworZnVuY3Rpb24gQ29uc3RyYWludChzdHJl
bmd0aCkgeworICB0aGlzLnN0cmVuZ3RoID0gc3RyZW5ndGg7Cit9CisKKy8qKgorICogQWN0aXZh
dGUgdGhpcyBjb25zdHJhaW50IGFuZCBhdHRlbXB0IHRvIHNhdGlzZnkgaXQuCisgKi8KK0NvbnN0
cmFpbnQucHJvdG90eXBlLmFkZENvbnN0cmFpbnQgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuYWRk
VG9HcmFwaCguLi5hcmdzKCkpOworICBwbGFubmVyLmluY3JlbWVudGFsQWRkKC4uLmFyZ3ModGhp
cykpOworfQorCisvKioKKyAqIEF0dGVtcHQgdG8gZmluZCBhIHdheSB0byBlbmZvcmNlIHRoaXMg
Y29uc3RyYWludC4gSWYgc3VjY2Vzc2Z1bCwKKyAqIHJlY29yZCB0aGUgc29sdXRpb24sIHBlcmhh
cHMgbW9kaWZ5aW5nIHRoZSBjdXJyZW50IGRhdGFmbG93CisgKiBncmFwaC4gQW5zd2VyIHRoZSBj
b25zdHJhaW50IHRoYXQgdGhpcyBjb25zdHJhaW50IG92ZXJyaWRlcywgaWYKKyAqIHRoZXJlIGlz
IG9uZSwgb3IgbmlsLCBpZiB0aGVyZSBpc24ndC4KKyAqIEFzc3VtZTogSSBhbSBub3QgYWxyZWFk
eSBzYXRpc2ZpZWQuCisgKi8KK0NvbnN0cmFpbnQucHJvdG90eXBlLnNhdGlzZnkgPSBmdW5jdGlv
biAobWFyaykgeworICB0aGlzLmNob29zZU1ldGhvZCguLi5hcmdzKG1hcmspKTsKKyAgaWYgKCF0
aGlzLmlzU2F0aXNmaWVkKC4uLmFyZ3MoKSkpIHsKKyAgICBpZiAodGhpcy5zdHJlbmd0aCA9PSBT
dHJlbmd0aC5SRVFVSVJFRCkKKyAgICAgIGFsZXJ0KC4uLmFyZ3MoIkNvdWxkIG5vdCBzYXRpc2Z5
IGEgcmVxdWlyZWQgY29uc3RyYWludCEiKSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdGhp
cy5tYXJrSW5wdXRzKC4uLmFyZ3MobWFyaykpOworICB2YXIgb3V0ID0gdGhpcy5vdXRwdXQoLi4u
YXJncygpKTsKKyAgdmFyIG92ZXJyaWRkZW4gPSBvdXQuZGV0ZXJtaW5lZEJ5OworICBpZiAob3Zl
cnJpZGRlbiAhPSBudWxsKSBvdmVycmlkZGVuLm1hcmtVbnNhdGlzZmllZCguLi5hcmdzKCkpOwor
ICBvdXQuZGV0ZXJtaW5lZEJ5ID0gdGhpczsKKyAgaWYgKCFwbGFubmVyLmFkZFByb3BhZ2F0ZSgu
Li5hcmdzKHRoaXMsIG1hcmspKSkKKyAgICBhbGVydCguLi5hcmdzKCJDeWNsZSBlbmNvdW50ZXJl
ZCIpKTsKKyAgb3V0Lm1hcmsgPSBtYXJrOworICByZXR1cm4gb3ZlcnJpZGRlbjsKK30KKworQ29u
c3RyYWludC5wcm90b3R5cGUuZGVzdHJveUNvbnN0cmFpbnQgPSBmdW5jdGlvbiAoKSB7CisgIGlm
ICh0aGlzLmlzU2F0aXNmaWVkKC4uLmFyZ3MoKSkpIHBsYW5uZXIuaW5jcmVtZW50YWxSZW1vdmUo
Li4uYXJncyh0aGlzKSk7CisgIGVsc2UgdGhpcy5yZW1vdmVGcm9tR3JhcGgoLi4uYXJncygpKTsK
K30KKworLyoqCisgKiBOb3JtYWwgY29uc3RyYWludHMgYXJlIG5vdCBpbnB1dCBjb25zdHJhaW50
cy4gIEFuIGlucHV0IGNvbnN0cmFpbnQKKyAqIGlzIG9uZSB0aGF0IGRlcGVuZHMgb24gZXh0ZXJu
YWwgc3RhdGUsIHN1Y2ggYXMgdGhlIG1vdXNlLCB0aGUKKyAqIGtleWJvcmQsIGEgY2xvY2ssIG9y
IHNvbWUgYXJiaXRyYXR5IHBpZWNlIG9mIGltcGVyYXRpdmUgY29kZS4KKyAqLworQ29uc3RyYWlu
dC5wcm90b3R5cGUuaXNJbnB1dCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIGZhbHNlOworfQor
CisvKiAtLS0gKgorICogVSBuIGEgciB5ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAorICogLS0tICov
CisKKy8qKgorICogQWJzdHJhY3Qgc3VwZXJjbGFzcyBmb3IgY29uc3RyYWludHMgaGF2aW5nIGEg
c2luZ2xlIHBvc3NpYmxlIG91dHB1dAorICogdmFyaWFibGUuCisgKi8KK2Z1bmN0aW9uIFVuYXJ5
Q29uc3RyYWludCh2LCBzdHJlbmd0aCkgeworICBVbmFyeUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1
Y3Rvci5jYWxsKHRoaXMsIHN0cmVuZ3RoKTsKKyAgdGhpcy5teU91dHB1dCA9IHY7CisgIHRoaXMu
c2F0aXNmaWVkID0gZmFsc2U7CisgIHRoaXMuYWRkQ29uc3RyYWludCguLi5hcmdzKCkpOworfQor
CitVbmFyeUNvbnN0cmFpbnQuaW5oZXJpdHNGcm9tKC4uLmFyZ3MoQ29uc3RyYWludCkpOworCisv
KioKKyAqIEFkZHMgdGhpcyBjb25zdHJhaW50IHRvIHRoZSBjb25zdHJhaW50IGdyYXBoCisgKi8K
K1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAg
dGhpcy5teU91dHB1dC5hZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOworICB0aGlzLnNhdGlz
ZmllZCA9IGZhbHNlOworfQorCisvKioKKyAqIERlY2lkZXMgaWYgdGhpcyBjb25zdHJhaW50IGNh
biBiZSBzYXRpc2ZpZWQgYW5kIHJlY29yZHMgdGhhdAorICogZGVjaXNpb24uCisgKi8KK1VuYXJ5
Q29uc3RyYWludC5wcm90b3R5cGUuY2hvb3NlTWV0aG9kID0gZnVuY3Rpb24gKG1hcmspIHsKKyAg
dGhpcy5zYXRpc2ZpZWQgPSAodGhpcy5teU91dHB1dC5tYXJrICE9IG1hcmspCisgICAgJiYgU3Ry
ZW5ndGguc3Ryb25nZXIoLi4uYXJncyh0aGlzLnN0cmVuZ3RoLCB0aGlzLm15T3V0cHV0LndhbGtT
dHJlbmd0aCkpOworfQorCisvKioKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNvbnN0cmFpbnQg
aXMgc2F0aXNmaWVkIGluIHRoZSBjdXJyZW50IHNvbHV0aW9uLgorICovCitVbmFyeUNvbnN0cmFp
bnQucHJvdG90eXBlLmlzU2F0aXNmaWVkID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5z
YXRpc2ZpZWQ7Cit9CisKK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFya0lucHV0cyA9IGZ1
bmN0aW9uIChtYXJrKSB7CisgIC8vIGhhcyBubyBpbnB1dHMKK30KKworLyoqCisgKiBSZXR1cm5z
IHRoZSBjdXJyZW50IG91dHB1dCB2YXJpYWJsZS4KKyAqLworVW5hcnlDb25zdHJhaW50LnByb3Rv
dHlwZS5vdXRwdXQgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzLm15T3V0cHV0OworfQor
CisvKioKKyAqIENhbGN1bGF0ZSB0aGUgd2Fsa2Fib3V0IHN0cmVuZ3RoLCB0aGUgc3RheSBmbGFn
LCBhbmQsIGlmIGl0IGlzCisgKiAnc3RheScsIHRoZSB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgb3V0
cHV0IG9mIHRoaXMgY29uc3RyYWludC4gQXNzdW1lCisgKiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0
aXNmaWVkLgorICovCitVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLnJlY2FsY3VsYXRlID0gZnVu
Y3Rpb24gKCkgeworICB0aGlzLm15T3V0cHV0LndhbGtTdHJlbmd0aCA9IHRoaXMuc3RyZW5ndGg7
CisgIHRoaXMubXlPdXRwdXQuc3RheSA9ICF0aGlzLmlzSW5wdXQoLi4uYXJncygpKTsKKyAgaWYg
KHRoaXMubXlPdXRwdXQuc3RheSkgdGhpcy5leGVjdXRlKC4uLmFyZ3MoKSk7IC8vIFN0YXkgb3B0
aW1pemF0aW9uCit9CisKKy8qKgorICogUmVjb3JkcyB0aGF0IHRoaXMgY29uc3RyYWludCBpcyB1
bnNhdGlzZmllZAorICovCitVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtVbnNhdGlzZmll
ZCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5zYXRpc2ZpZWQgPSBmYWxzZTsKK30KKworVW5hcnlD
b25zdHJhaW50LnByb3RvdHlwZS5pbnB1dHNLbm93biA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJu
IHRydWU7Cit9CisKK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUucmVtb3ZlRnJvbUdyYXBoID0g
ZnVuY3Rpb24gKCkgeworICBpZiAodGhpcy5teU91dHB1dCAhPSBudWxsKSB0aGlzLm15T3V0cHV0
LnJlbW92ZUNvbnN0cmFpbnQoLi4uYXJncyh0aGlzKSk7CisgIHRoaXMuc2F0aXNmaWVkID0gZmFs
c2U7Cit9CisKKy8qIC0tLSAqCisgKiBTIHQgYSB5ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAorICog
LS0tICovCisKKy8qKgorICogVmFyaWFibGVzIHRoYXQgc2hvdWxkLCB3aXRoIHNvbWUgbGV2ZWwg
b2YgcHJlZmVyZW5jZSwgc3RheSB0aGUgc2FtZS4KKyAqIFBsYW5uZXJzIG1heSBleHBsb2l0IHRo
ZSBmYWN0IHRoYXQgaW5zdGFuY2VzLCBpZiBzYXRpc2ZpZWQsIHdpbGwgbm90CisgKiBjaGFuZ2Ug
dGhlaXIgb3V0cHV0IGR1cmluZyBwbGFuIGV4ZWN1dGlvbi4gIFRoaXMgaXMgY2FsbGVkICJzdGF5
CisgKiBvcHRpbWl6YXRpb24iLgorICovCitmdW5jdGlvbiBTdGF5Q29uc3RyYWludCh2LCBzdHIp
IHsKKyAgU3RheUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHYsIHN0cik7
Cit9CisKK1N0YXlDb25zdHJhaW50LmluaGVyaXRzRnJvbSguLi5hcmdzKFVuYXJ5Q29uc3RyYWlu
dCkpOworCitTdGF5Q29uc3RyYWludC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsK
KyAgLy8gU3RheSBjb25zdHJhaW50cyBkbyBub3RoaW5nCit9CisKKy8qIC0tLSAqCisgKiBFIGQg
aSB0ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAorICogLS0tICovCisKKy8qKgorICogQSB1bmFyeSBp
bnB1dCBjb25zdHJhaW50IHVzZWQgdG8gbWFyayBhIHZhcmlhYmxlIHRoYXQgdGhlIGNsaWVudAor
ICogd2lzaGVzIHRvIGNoYW5nZS4KKyAqLworZnVuY3Rpb24gRWRpdENvbnN0cmFpbnQodiwgc3Ry
KSB7CisgIEVkaXRDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzLCB2LCBzdHIp
OworfQorCitFZGl0Q29uc3RyYWludC5pbmhlcml0c0Zyb20oLi4uYXJncyhVbmFyeUNvbnN0cmFp
bnQpKTsKKworLyoqCisgKiBFZGl0cyBpbmRpY2F0ZSB0aGF0IGEgdmFyaWFibGUgaXMgdG8gYmUg
Y2hhbmdlZCBieSBpbXBlcmF0aXZlIGNvZGUuCisgKi8KK0VkaXRDb25zdHJhaW50LnByb3RvdHlw
ZS5pc0lucHV0ID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdHJ1ZTsKK30KKworRWRpdENvbnN0
cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgIC8vIEVkaXQgY29uc3Ry
YWludHMgZG8gbm90aGluZworfQorCisvKiAtLS0gKgorICogQiBpIG4gYSByIHkgICBDIG8gbiBz
IHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKwordmFyIERpcmVjdGlvbiA9IG5ldyBPYmplY3QoLi4u
YXJncygpKTsKK0RpcmVjdGlvbi5OT05FICAgICA9IDA7CitEaXJlY3Rpb24uRk9SV0FSRCAgPSAx
OworRGlyZWN0aW9uLkJBQ0tXQVJEID0gLTE7CisKKy8qKgorICogQWJzdHJhY3Qgc3VwZXJjbGFz
cyBmb3IgY29uc3RyYWludHMgaGF2aW5nIHR3byBwb3NzaWJsZSBvdXRwdXQKKyAqIHZhcmlhYmxl
cy4KKyAqLworZnVuY3Rpb24gQmluYXJ5Q29uc3RyYWludCh2YXIxLCB2YXIyLCBzdHJlbmd0aCkg
eworICBCaW5hcnlDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzLCBzdHJlbmd0
aCk7CisgIHRoaXMudjEgPSB2YXIxOworICB0aGlzLnYyID0gdmFyMjsKKyAgdGhpcy5kaXJlY3Rp
b24gPSBEaXJlY3Rpb24uTk9ORTsKKyAgdGhpcy5hZGRDb25zdHJhaW50KC4uLmFyZ3MoKSk7Cit9
CisKK0JpbmFyeUNvbnN0cmFpbnQuaW5oZXJpdHNGcm9tKC4uLmFyZ3MoQ29uc3RyYWludCkpOwor
CisvKioKKyAqIERlY2lkZXMgaWYgdGhpcyBjb25zdHJhaW50IGNhbiBiZSBzYXRpc2ZpZWQgYW5k
IHdoaWNoIHdheSBpdAorICogc2hvdWxkIGZsb3cgYmFzZWQgb24gdGhlIHJlbGF0aXZlIHN0cmVu
Z3RoIG9mIHRoZSB2YXJpYWJsZXMgcmVsYXRlZCwKKyAqIGFuZCByZWNvcmQgdGhhdCBkZWNpc2lv
bi4KKyAqLworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuY2hvb3NlTWV0aG9kID0gZnVuY3Rp
b24gKG1hcmspIHsKKyAgaWYgKHRoaXMudjEubWFyayA9PSBtYXJrKSB7CisgICAgdGhpcy5kaXJl
Y3Rpb24gPSAodGhpcy52Mi5tYXJrICE9IG1hcmsgJiYgU3RyZW5ndGguc3Ryb25nZXIoLi4uYXJn
cyh0aGlzLnN0cmVuZ3RoLCB0aGlzLnYyLndhbGtTdHJlbmd0aCkpKQorICAgICAgPyBEaXJlY3Rp
b24uRk9SV0FSRAorICAgICAgOiBEaXJlY3Rpb24uTk9ORTsKKyAgfQorICBpZiAodGhpcy52Mi5t
YXJrID09IG1hcmspIHsKKyAgICB0aGlzLmRpcmVjdGlvbiA9ICh0aGlzLnYxLm1hcmsgIT0gbWFy
ayAmJiBTdHJlbmd0aC5zdHJvbmdlciguLi5hcmdzKHRoaXMuc3RyZW5ndGgsIHRoaXMudjEud2Fs
a1N0cmVuZ3RoKSkpCisgICAgICA/IERpcmVjdGlvbi5CQUNLV0FSRAorICAgICAgOiBEaXJlY3Rp
b24uTk9ORTsKKyAgfQorICBpZiAoU3RyZW5ndGgud2Vha2VyKC4uLmFyZ3ModGhpcy52MS53YWxr
U3RyZW5ndGgsIHRoaXMudjIud2Fsa1N0cmVuZ3RoKSkpIHsKKyAgICB0aGlzLmRpcmVjdGlvbiA9
IFN0cmVuZ3RoLnN0cm9uZ2VyKC4uLmFyZ3ModGhpcy5zdHJlbmd0aCwgdGhpcy52MS53YWxrU3Ry
ZW5ndGgpKQorICAgICAgPyBEaXJlY3Rpb24uQkFDS1dBUkQKKyAgICAgIDogRGlyZWN0aW9uLk5P
TkU7CisgIH0gZWxzZSB7CisgICAgdGhpcy5kaXJlY3Rpb24gPSBTdHJlbmd0aC5zdHJvbmdlcigu
Li5hcmdzKHRoaXMuc3RyZW5ndGgsIHRoaXMudjIud2Fsa1N0cmVuZ3RoKSkKKyAgICAgID8gRGly
ZWN0aW9uLkZPUldBUkQKKyAgICAgIDogRGlyZWN0aW9uLkJBQ0tXQVJECisgIH0KK30KKworLyoq
CisgKiBBZGQgdGhpcyBjb25zdHJhaW50IHRvIHRoZSBjb25zdHJhaW50IGdyYXBoCisgKi8KK0Jp
bmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmFkZFRvR3JhcGggPSBmdW5jdGlvbiAoKSB7CisgIHRo
aXMudjEuYWRkQ29uc3RyYWludCguLi5hcmdzKHRoaXMpKTsKKyAgdGhpcy52Mi5hZGRDb25zdHJh
aW50KC4uLmFyZ3ModGhpcykpOworICB0aGlzLmRpcmVjdGlvbiA9IERpcmVjdGlvbi5OT05FOwor
fQorCisvKioKKyAqIEFuc3dlciB0cnVlIGlmIHRoaXMgY29uc3RyYWludCBpcyBzYXRpc2ZpZWQg
aW4gdGhlIGN1cnJlbnQgc29sdXRpb24uCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBl
LmlzU2F0aXNmaWVkID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5kaXJlY3Rpb24gIT0g
RGlyZWN0aW9uLk5PTkU7Cit9CisKKy8qKgorICogTWFyayB0aGUgaW5wdXQgdmFyaWFibGUgd2l0
aCB0aGUgZ2l2ZW4gbWFyay4KKyAqLworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFya0lu
cHV0cyA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIHRoaXMuaW5wdXQoLi4uYXJncygpKS5tYXJrID0g
bWFyazsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGlucHV0IHZhcmlhYmxlCisg
Ki8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlucHV0ID0gZnVuY3Rpb24gKCkgeworICBy
ZXR1cm4gKHRoaXMuZGlyZWN0aW9uID09IERpcmVjdGlvbi5GT1JXQVJEKSA/IHRoaXMudjEgOiB0
aGlzLnYyOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgb3V0cHV0IHZhcmlhYmxl
CisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm91dHB1dCA9IGZ1bmN0aW9uICgpIHsK
KyAgcmV0dXJuICh0aGlzLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb24uRk9SV0FSRCkgPyB0aGlzLnYy
IDogdGhpcy52MTsKK30KKworLyoqCisgKiBDYWxjdWxhdGUgdGhlIHdhbGthYm91dCBzdHJlbmd0
aCwgdGhlIHN0YXkgZmxhZywgYW5kLCBpZiBpdCBpcworICogJ3N0YXknLCB0aGUgdmFsdWUgZm9y
IHRoZSBjdXJyZW50IG91dHB1dCBvZiB0aGlzCisgKiBjb25zdHJhaW50LiBBc3N1bWUgdGhpcyBj
b25zdHJhaW50IGlzIHNhdGlzZmllZC4KKyAqLworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUu
cmVjYWxjdWxhdGUgPSBmdW5jdGlvbiAoKSB7CisgIHZhciBpaG4gPSB0aGlzLmlucHV0KC4uLmFy
Z3MoKSksIG91dCA9IHRoaXMub3V0cHV0KC4uLmFyZ3MoKSk7CisgIG91dC53YWxrU3RyZW5ndGgg
PSBTdHJlbmd0aC53ZWFrZXN0T2YoLi4uYXJncyh0aGlzLnN0cmVuZ3RoLCBpaG4ud2Fsa1N0cmVu
Z3RoKSk7CisgIG91dC5zdGF5ID0gaWhuLnN0YXk7CisgIGlmIChvdXQuc3RheSkgdGhpcy5leGVj
dXRlKC4uLmFyZ3MoKSk7Cit9CisKKy8qKgorICogUmVjb3JkIHRoZSBmYWN0IHRoYXQgdGhpcyBj
b25zdHJhaW50IGlzIHVuc2F0aXNmaWVkLgorICovCitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlw
ZS5tYXJrVW5zYXRpc2ZpZWQgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuZGlyZWN0aW9uID0gRGly
ZWN0aW9uLk5PTkU7Cit9CisKK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlucHV0c0tub3du
ID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgdmFyIGkgPSB0aGlzLmlucHV0KC4uLmFyZ3MoKSk7Cisg
IHJldHVybiBpLm1hcmsgPT0gbWFyayB8fCBpLnN0YXkgfHwgaS5kZXRlcm1pbmVkQnkgPT0gbnVs
bDsKK30KKworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUucmVtb3ZlRnJvbUdyYXBoID0gZnVu
Y3Rpb24gKCkgeworICBpZiAodGhpcy52MSAhPSBudWxsKSB0aGlzLnYxLnJlbW92ZUNvbnN0cmFp
bnQoLi4uYXJncyh0aGlzKSk7CisgIGlmICh0aGlzLnYyICE9IG51bGwpIHRoaXMudjIucmVtb3Zl
Q29uc3RyYWludCguLi5hcmdzKHRoaXMpKTsKKyAgdGhpcy5kaXJlY3Rpb24gPSBEaXJlY3Rpb24u
Tk9ORTsKK30KKworLyogLS0tICoKKyAqIFMgYyBhIGwgZSAgIEMgbyBuIHMgdCByIGEgaSBuIHQK
KyAqIC0tLSAqLworCisvKioKKyAqIFJlbGF0ZXMgdHdvIHZhcmlhYmxlcyBieSB0aGUgbGluZWFy
IHNjYWxpbmcgcmVsYXRpb25zaGlwOiAidjIgPQorICogKHYxICogc2NhbGUpICsgb2Zmc2V0Ii4g
RWl0aGVyIHYxIG9yIHYyIG1heSBiZSBjaGFuZ2VkIHRvIG1haW50YWluCisgKiB0aGlzIHJlbGF0
aW9uc2hpcCBidXQgdGhlIHNjYWxlIGZhY3RvciBhbmQgb2Zmc2V0IGFyZSBjb25zaWRlcmVkCisg
KiByZWFkLW9ubHkuCisgKi8KK2Z1bmN0aW9uIFNjYWxlQ29uc3RyYWludChzcmMsIHNjYWxlLCBv
ZmZzZXQsIGRlc3QsIHN0cmVuZ3RoKSB7CisgIHRoaXMuZGlyZWN0aW9uID0gRGlyZWN0aW9uLk5P
TkU7CisgIHRoaXMuc2NhbGUgPSBzY2FsZTsKKyAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7CisgIFNj
YWxlQ29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3JjLCBkZXN0LCBzdHJl
bmd0aCk7Cit9CisKK1NjYWxlQ29uc3RyYWludC5pbmhlcml0c0Zyb20oLi4uYXJncyhCaW5hcnlD
b25zdHJhaW50KSk7CisKKy8qKgorICogQWRkcyB0aGlzIGNvbnN0cmFpbnQgdG8gdGhlIGNvbnN0
cmFpbnQgZ3JhcGguCisgKi8KK1NjYWxlQ29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9HcmFwaCA9
IGZ1bmN0aW9uICgpIHsKKyAgU2NhbGVDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IucHJvdG90
eXBlLmFkZFRvR3JhcGguY2FsbCh0aGlzKTsKKyAgdGhpcy5zY2FsZS5hZGRDb25zdHJhaW50KC4u
LmFyZ3ModGhpcykpOworICB0aGlzLm9mZnNldC5hZGRDb25zdHJhaW50KC4uLmFyZ3ModGhpcykp
OworfQorCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaCA9IGZ1bmN0
aW9uICgpIHsKKyAgU2NhbGVDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLnJl
bW92ZUZyb21HcmFwaC5jYWxsKHRoaXMpOworICBpZiAodGhpcy5zY2FsZSAhPSBudWxsKSB0aGlz
LnNjYWxlLnJlbW92ZUNvbnN0cmFpbnQoLi4uYXJncyh0aGlzKSk7CisgIGlmICh0aGlzLm9mZnNl
dCAhPSBudWxsKSB0aGlzLm9mZnNldC5yZW1vdmVDb25zdHJhaW50KC4uLmFyZ3ModGhpcykpOwor
fQorCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtJbnB1dHMgPSBmdW5jdGlvbiAobWFy
aykgeworICBTY2FsZUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUubWFya0lu
cHV0cy5jYWxsKHRoaXMsIG1hcmspOworICB0aGlzLnNjYWxlLm1hcmsgPSB0aGlzLm9mZnNldC5t
YXJrID0gbWFyazsKK30KKworLyoqCisgKiBFbmZvcmNlIHRoaXMgY29uc3RyYWludC4gQXNzdW1l
IHRoYXQgaXQgaXMgc2F0aXNmaWVkLgorICovCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLmV4
ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgIGlmICh0aGlzLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb24u
Rk9SV0FSRCkgeworICAgIHRoaXMudjIudmFsdWUgPSB0aGlzLnYxLnZhbHVlICogdGhpcy5zY2Fs
ZS52YWx1ZSArIHRoaXMub2Zmc2V0LnZhbHVlOworICB9IGVsc2UgeworICAgIHRoaXMudjEudmFs
dWUgPSAodGhpcy52Mi52YWx1ZSAtIHRoaXMub2Zmc2V0LnZhbHVlKSAvIHRoaXMuc2NhbGUudmFs
dWU7CisgIH0KK30KKworLyoqCisgKiBDYWxjdWxhdGUgdGhlIHdhbGthYm91dCBzdHJlbmd0aCwg
dGhlIHN0YXkgZmxhZywgYW5kLCBpZiBpdCBpcworICogJ3N0YXknLCB0aGUgdmFsdWUgZm9yIHRo
ZSBjdXJyZW50IG91dHB1dCBvZiB0aGlzIGNvbnN0cmFpbnQuIEFzc3VtZQorICogdGhpcyBjb25z
dHJhaW50IGlzIHNhdGlzZmllZC4KKyAqLworU2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5yZWNh
bGN1bGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgdmFyIGlobiA9IHRoaXMuaW5wdXQoLi4uYXJncygp
KSwgb3V0ID0gdGhpcy5vdXRwdXQoLi4uYXJncygpKTsKKyAgb3V0LndhbGtTdHJlbmd0aCA9IFN0
cmVuZ3RoLndlYWtlc3RPZiguLi5hcmdzKHRoaXMuc3RyZW5ndGgsIGlobi53YWxrU3RyZW5ndGgp
KTsKKyAgb3V0LnN0YXkgPSBpaG4uc3RheSAmJiB0aGlzLnNjYWxlLnN0YXkgJiYgdGhpcy5vZmZz
ZXQuc3RheTsKKyAgaWYgKG91dC5zdGF5KSB0aGlzLmV4ZWN1dGUoLi4uYXJncygpKTsKK30KKwor
LyogLS0tICoKKyAqIEUgcSB1IGEgbCBpIHQgIHkgICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAt
LS0gKi8KKworLyoqCisgKiBDb25zdHJhaW5zIHR3byB2YXJpYWJsZXMgdG8gaGF2ZSB0aGUgc2Ft
ZSB2YWx1ZS4KKyAqLworZnVuY3Rpb24gRXF1YWxpdHlDb25zdHJhaW50KHZhcjEsIHZhcjIsIHN0
cmVuZ3RoKSB7CisgIEVxdWFsaXR5Q29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9yLmNhbGwodGhp
cywgdmFyMSwgdmFyMiwgc3RyZW5ndGgpOworfQorCitFcXVhbGl0eUNvbnN0cmFpbnQuaW5oZXJp
dHNGcm9tKC4uLmFyZ3MoQmluYXJ5Q29uc3RyYWludCkpOworCisvKioKKyAqIEVuZm9yY2UgdGhp
cyBjb25zdHJhaW50LiBBc3N1bWUgdGhhdCBpdCBpcyBzYXRpc2ZpZWQuCisgKi8KK0VxdWFsaXR5
Q29uc3RyYWludC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5vdXRw
dXQoLi4uYXJncygpKS52YWx1ZSA9IHRoaXMuaW5wdXQoLi4uYXJncygpKS52YWx1ZTsKK30KKwor
LyogLS0tICoKKyAqIFYgYSByIGkgYSBiIGwgZQorICogLS0tICovCisKKy8qKgorICogQSBjb25z
dHJhaW5lZCB2YXJpYWJsZS4gSW4gYWRkaXRpb24gdG8gaXRzIHZhbHVlLCBpdCBtYWludGFpbiB0
aGUKKyAqIHN0cnVjdHVyZSBvZiB0aGUgY29uc3RyYWludCBncmFwaCwgdGhlIGN1cnJlbnQgZGF0
YWZsb3cgZ3JhcGgsIGFuZAorICogdmFyaW91cyBwYXJhbWV0ZXJzIG9mIGludGVyZXN0IHRvIHRo
ZSBEZWx0YUJsdWUgaW5jcmVtZW50YWwKKyAqIGNvbnN0cmFpbnQgc29sdmVyLgorICoqLworZnVu
Y3Rpb24gVmFyaWFibGUobmFtZSwgaW5pdGlhbFZhbHVlKSB7CisgIHRoaXMudmFsdWUgPSBpbml0
aWFsVmFsdWUgfHwgMDsKKyAgdGhpcy5jb25zdHJhaW50cyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlv
biguLi5hcmdzKCkpOworICB0aGlzLmRldGVybWluZWRCeSA9IG51bGw7CisgIHRoaXMubWFyayA9
IDA7CisgIHRoaXMud2Fsa1N0cmVuZ3RoID0gU3RyZW5ndGguV0VBS0VTVDsKKyAgdGhpcy5zdGF5
ID0gdHJ1ZTsKKyAgdGhpcy5uYW1lID0gbmFtZTsKK30KKworLyoqCisgKiBBZGQgdGhlIGdpdmVu
IGNvbnN0cmFpbnQgdG8gdGhlIHNldCBvZiBhbGwgY29uc3RyYWludHMgdGhhdCByZWZlcgorICog
dGhpcyB2YXJpYWJsZS4KKyAqLworVmFyaWFibGUucHJvdG90eXBlLmFkZENvbnN0cmFpbnQgPSBm
dW5jdGlvbiAoYykgeworICB0aGlzLmNvbnN0cmFpbnRzLmFkZCguLi5hcmdzKGMpKTsKK30KKwor
LyoqCisgKiBSZW1vdmVzIGFsbCB0cmFjZXMgb2YgYyBmcm9tIHRoaXMgdmFyaWFibGUuCisgKi8K
K1ZhcmlhYmxlLnByb3RvdHlwZS5yZW1vdmVDb25zdHJhaW50ID0gZnVuY3Rpb24gKGMpIHsKKyAg
dGhpcy5jb25zdHJhaW50cy5yZW1vdmUoLi4uYXJncyhjKSk7CisgIGlmICh0aGlzLmRldGVybWlu
ZWRCeSA9PSBjKSB0aGlzLmRldGVybWluZWRCeSA9IG51bGw7Cit9CisKKy8qIC0tLSAqCisgKiBQ
IGwgYSBuIG4gZSByCisgKiAtLS0gKi8KKworLyoqCisgKiBUaGUgRGVsdGFCbHVlIHBsYW5uZXIK
KyAqLworZnVuY3Rpb24gUGxhbm5lcigpIHsKKyAgdGhpcy5jdXJyZW50TWFyayA9IDA7Cit9CisK
Ky8qKgorICogQXR0ZW1wdCB0byBzYXRpc2Z5IHRoZSBnaXZlbiBjb25zdHJhaW50IGFuZCwgaWYg
c3VjY2Vzc2Z1bCwKKyAqIGluY3JlbWVudGFsbHkgdXBkYXRlIHRoZSBkYXRhZmxvdyBncmFwaC4g
IERldGFpbHM6IElmIHNhdGlmeWluZworICogdGhlIGNvbnN0cmFpbnQgaXMgc3VjY2Vzc2Z1bCwg
aXQgbWF5IG92ZXJyaWRlIGEgd2Vha2VyIGNvbnN0cmFpbnQKKyAqIG9uIGl0cyBvdXRwdXQuIFRo
ZSBhbGdvcml0aG0gYXR0ZW1wdHMgdG8gcmVzYXRpc2Z5IHRoYXQKKyAqIGNvbnN0cmFpbnQgdXNp
bmcgc29tZSBvdGhlciBtZXRob2QuIFRoaXMgcHJvY2VzcyBpcyByZXBlYXRlZAorICogdW50aWwg
ZWl0aGVyIGEpIGl0IHJlYWNoZXMgYSB2YXJpYWJsZSB0aGF0IHdhcyBub3QgcHJldmlvdXNseQor
ICogZGV0ZXJtaW5lZCBieSBhbnkgY29uc3RyYWludCBvciBiKSBpdCByZWFjaGVzIGEgY29uc3Ry
YWludCB0aGF0CisgKiBpcyB0b28gd2VhayB0byBiZSBzYXRpc2ZpZWQgdXNpbmcgYW55IG9mIGl0
cyBtZXRob2RzLiBUaGUKKyAqIHZhcmlhYmxlcyBvZiBjb25zdHJhaW50cyB0aGF0IGhhdmUgYmVl
biBwcm9jZXNzZWQgYXJlIG1hcmtlZCB3aXRoCisgKiBhIHVuaXF1ZSBtYXJrIHZhbHVlIHNvIHRo
YXQgd2Uga25vdyB3aGVyZSB3ZSd2ZSBiZWVuLiBUaGlzIGFsbG93cworICogdGhlIGFsZ29yaXRo
bSB0byBhdm9pZCBnZXR0aW5nIGludG8gYW4gaW5maW5pdGUgbG9vcCBldmVuIGlmIHRoZQorICog
Y29uc3RyYWludCBncmFwaCBoYXMgYW4gaW5hZHZlcnRlbnQgY3ljbGUuCisgKi8KK1BsYW5uZXIu
cHJvdG90eXBlLmluY3JlbWVudGFsQWRkID0gZnVuY3Rpb24gKGMpIHsKKyAgdmFyIG1hcmsgPSB0
aGlzLm5ld01hcmsoLi4uYXJncygpKTsKKyAgdmFyIG92ZXJyaWRkZW4gPSBjLnNhdGlzZnkoLi4u
YXJncyhtYXJrKSk7CisgIHdoaWxlIChvdmVycmlkZGVuICE9IG51bGwpCisgICAgb3ZlcnJpZGRl
biA9IG92ZXJyaWRkZW4uc2F0aXNmeSguLi5hcmdzKG1hcmspKTsKK30KKworLyoqCisgKiBFbnRy
eSBwb2ludCBmb3IgcmV0cmFjdGluZyBhIGNvbnN0cmFpbnQuIFJlbW92ZSB0aGUgZ2l2ZW4KKyAq
IGNvbnN0cmFpbnQgYW5kIGluY3JlbWVudGFsbHkgdXBkYXRlIHRoZSBkYXRhZmxvdyBncmFwaC4K
KyAqIERldGFpbHM6IFJldHJhY3RpbmcgdGhlIGdpdmVuIGNvbnN0cmFpbnQgbWF5IGFsbG93IHNv
bWUgY3VycmVudGx5CisgKiB1bnNhdGlzZmlhYmxlIGRvd25zdHJlYW0gY29uc3RyYWludCB0byBi
ZSBzYXRpc2ZpZWQuIFdlIHRoZXJlZm9yZSBjb2xsZWN0CisgKiBhIGxpc3Qgb2YgdW5zYXRpc2Zp
ZWQgZG93bnN0cmVhbSBjb25zdHJhaW50cyBhbmQgYXR0ZW1wdCB0bworICogc2F0aXNmeSBlYWNo
IG9uZSBpbiB0dXJuLiBUaGlzIGxpc3QgaXMgdHJhdmVyc2VkIGJ5IGNvbnN0cmFpbnQKKyAqIHN0
cmVuZ3RoLCBzdHJvbmdlc3QgZmlyc3QsIGFzIGEgaGV1cmlzdGljIGZvciBhdm9pZGluZworICog
dW5uZWNlc3NhcmlseSBhZGRpbmcgYW5kIHRoZW4gb3ZlcnJpZGluZyB3ZWFrIGNvbnN0cmFpbnRz
LgorICogQXNzdW1lOiBjIGlzIHNhdGlzZmllZC4KKyAqLworUGxhbm5lci5wcm90b3R5cGUuaW5j
cmVtZW50YWxSZW1vdmUgPSBmdW5jdGlvbiAoYykgeworICB2YXIgb3V0ID0gYy5vdXRwdXQoLi4u
YXJncygpKTsKKyAgYy5tYXJrVW5zYXRpc2ZpZWQoLi4uYXJncygpKTsKKyAgYy5yZW1vdmVGcm9t
R3JhcGgoLi4uYXJncygpKTsKKyAgdmFyIHVuc2F0aXNmaWVkID0gdGhpcy5yZW1vdmVQcm9wYWdh
dGVGcm9tKC4uLmFyZ3Mob3V0KSk7CisgIHZhciBzdHJlbmd0aCA9IFN0cmVuZ3RoLlJFUVVJUkVE
OworICBkbyB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bnNhdGlzZmllZC5zaXplKC4uLmFy
Z3MoKSk7IGkrKykgeworICAgICAgdmFyIHUgPSB1bnNhdGlzZmllZC5hdCguLi5hcmdzKGkpKTsK
KyAgICAgIGlmICh1LnN0cmVuZ3RoID09IHN0cmVuZ3RoKQorICAgICAgICB0aGlzLmluY3JlbWVu
dGFsQWRkKC4uLmFyZ3ModSkpOworICAgIH0KKyAgICBzdHJlbmd0aCA9IHN0cmVuZ3RoLm5leHRX
ZWFrZXIoLi4uYXJncygpKTsKKyAgfSB3aGlsZSAoc3RyZW5ndGggIT0gU3RyZW5ndGguV0VBS0VT
VCk7Cit9CisKKy8qKgorICogU2VsZWN0IGEgcHJldmlvdXNseSB1bnVzZWQgbWFyayB2YWx1ZS4K
KyAqLworUGxhbm5lci5wcm90b3R5cGUubmV3TWFyayA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJu
ICsrdGhpcy5jdXJyZW50TWFyazsKK30KKworLyoqCisgKiBFeHRyYWN0IGEgcGxhbiBmb3IgcmVz
YXRpc2ZhY3Rpb24gc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gc291cmNlCisgKiBjb25zdHJhaW50
cywgdXN1YWxseSBhIHNldCBvZiBpbnB1dCBjb25zdHJhaW50cy4gVGhpcyBtZXRob2QKKyAqIGFz
c3VtZXMgdGhhdCBzdGF5IG9wdGltaXphdGlvbiBpcyBkZXNpcmVkOyB0aGUgcGxhbiB3aWxsIGNv
bnRhaW4KKyAqIG9ubHkgY29uc3RyYWludHMgd2hvc2Ugb3V0cHV0IHZhcmlhYmxlcyBhcmUgbm90
IHN0YXkuIENvbnN0cmFpbnRzCisgKiB0aGF0IGRvIG5vIGNvbXB1dGF0aW9uLCBzdWNoIGFzIHN0
YXkgYW5kIGVkaXQgY29uc3RyYWludHMsIGFyZQorICogbm90IGluY2x1ZGVkIGluIHRoZSBwbGFu
LgorICogRGV0YWlsczogVGhlIG91dHB1dHMgb2YgYSBjb25zdHJhaW50IGFyZSBtYXJrZWQgd2hl
biBpdCBpcyBhZGRlZAorICogdG8gdGhlIHBsYW4gdW5kZXIgY29uc3RydWN0aW9uLiBBIGNvbnN0
cmFpbnQgbWF5IGJlIGFwcGVuZGVkIHRvCisgKiB0aGUgcGxhbiB3aGVuIGFsbCBpdHMgaW5wdXQg
dmFyaWFibGVzIGFyZSBrbm93bi4gQSB2YXJpYWJsZSBpcworICoga25vd24gaWYgZWl0aGVyIGEp
IHRoZSB2YXJpYWJsZSBpcyBtYXJrZWQgKGluZGljYXRpbmcgdGhhdCBoYXMKKyAqIGJlZW4gY29t
cHV0ZWQgYnkgYSBjb25zdHJhaW50IGFwcGVhcmluZyBlYXJsaWVyIGluIHRoZSBwbGFuKSwgYikK
KyAqIHRoZSB2YXJpYWJsZSBpcyAnc3RheScgKGkuZS4gaXQgaXMgYSBjb25zdGFudCBhdCBwbGFu
IGV4ZWN1dGlvbgorICogdGltZSksIG9yIGMpIHRoZSB2YXJpYWJsZSBpcyBub3QgZGV0ZXJtaW5l
ZCBieSBhbnkKKyAqIGNvbnN0cmFpbnQuIFRoZSBsYXN0IHByb3Zpc2lvbiBpcyBmb3IgcGFzdCBz
dGF0ZXMgb2YgaGlzdG9yeQorICogdmFyaWFibGVzLCB3aGljaCBhcmUgbm90IHN0YXkgYnV0IHdo
aWNoIGFyZSBhbHNvIG5vdCBjb21wdXRlZCBieQorICogYW55IGNvbnN0cmFpbnQuCisgKiBBc3N1
bWU6IHNvdXJjZXMgYXJlIGFsbCBzYXRpc2ZpZWQuCisgKi8KK1BsYW5uZXIucHJvdG90eXBlLm1h
a2VQbGFuID0gZnVuY3Rpb24gKHNvdXJjZXMpIHsKKyAgdmFyIG1hcmsgPSB0aGlzLm5ld01hcmso
Li4uYXJncygpKTsKKyAgdmFyIHBsYW4gPSBuZXcgUGxhbiguLi5hcmdzKCkpOworICB2YXIgdG9k
byA9IHNvdXJjZXM7CisgIHdoaWxlICh0b2RvLnNpemUoLi4uYXJncygpKSA+IDApIHsKKyAgICB2
YXIgYyA9IHRvZG8ucmVtb3ZlRmlyc3QoLi4uYXJncygpKTsKKyAgICBpZiAoYy5vdXRwdXQoLi4u
YXJncygpKS5tYXJrICE9IG1hcmsgJiYgYy5pbnB1dHNLbm93biguLi5hcmdzKG1hcmspKSkgewor
ICAgICAgcGxhbi5hZGRDb25zdHJhaW50KC4uLmFyZ3MoYykpOworICAgICAgYy5vdXRwdXQoLi4u
YXJncygpKS5tYXJrID0gbWFyazsKKyAgICAgIHRoaXMuYWRkQ29uc3RyYWludHNDb25zdW1pbmdU
byguLi5hcmdzKGMub3V0cHV0KC4uLmFyZ3MoKSksIHRvZG8pKTsKKyAgICB9CisgIH0KKyAgcmV0
dXJuIHBsYW47Cit9CisKKy8qKgorICogRXh0cmFjdCBhIHBsYW4gZm9yIHJlc2F0aXNmeWluZyBz
dGFydGluZyBmcm9tIHRoZSBvdXRwdXQgb2YgdGhlCisgKiBnaXZlbiBjb25zdHJhaW50cywgdXN1
YWxseSBhIHNldCBvZiBpbnB1dCBjb25zdHJhaW50cy4KKyAqLworUGxhbm5lci5wcm90b3R5cGUu
ZXh0cmFjdFBsYW5Gcm9tQ29uc3RyYWludHMgPSBmdW5jdGlvbiAoY29uc3RyYWludHMpIHsKKyAg
dmFyIHNvdXJjZXMgPSBuZXcgT3JkZXJlZENvbGxlY3Rpb24oLi4uYXJncygpKTsKKyAgZm9yICh2
YXIgaSA9IDA7IGkgPCBjb25zdHJhaW50cy5zaXplKC4uLmFyZ3MoKSk7IGkrKykgeworICAgIHZh
ciBjID0gY29uc3RyYWludHMuYXQoLi4uYXJncyhpKSk7CisgICAgaWYgKGMuaXNJbnB1dCguLi5h
cmdzKCkpICYmIGMuaXNTYXRpc2ZpZWQoLi4uYXJncygpKSkKKyAgICAgIC8vIG5vdCBpbiBwbGFu
IGFscmVhZHkgYW5kIGVsaWdpYmxlIGZvciBpbmNsdXNpb24KKyAgICAgIHNvdXJjZXMuYWRkKC4u
LmFyZ3MoYykpOworICB9CisgIHJldHVybiB0aGlzLm1ha2VQbGFuKC4uLmFyZ3Moc291cmNlcykp
OworfQorCisvKioKKyAqIFJlY29tcHV0ZSB0aGUgd2Fsa2Fib3V0IHN0cmVuZ3RocyBhbmQgc3Rh
eSBmbGFncyBvZiBhbGwgdmFyaWFibGVzCisgKiBkb3duc3RyZWFtIG9mIHRoZSBnaXZlbiBjb25z
dHJhaW50IGFuZCByZWNvbXB1dGUgdGhlIGFjdHVhbAorICogdmFsdWVzIG9mIGFsbCB2YXJpYWJs
ZXMgd2hvc2Ugc3RheSBmbGFnIGlzIHRydWUuIElmIGEgY3ljbGUgaXMKKyAqIGRldGVjdGVkLCBy
ZW1vdmUgdGhlIGdpdmVuIGNvbnN0cmFpbnQgYW5kIGFuc3dlcgorICogZmFsc2UuIE90aGVyd2lz
ZSwgYW5zd2VyIHRydWUuCisgKiBEZXRhaWxzOiBDeWNsZXMgYXJlIGRldGVjdGVkIHdoZW4gYSBt
YXJrZWQgdmFyaWFibGUgaXMKKyAqIGVuY291bnRlcmVkIGRvd25zdHJlYW0gb2YgdGhlIGdpdmVu
IGNvbnN0cmFpbnQuIFRoZSBzZW5kZXIgaXMKKyAqIGFzc3VtZWQgdG8gaGF2ZSBtYXJrZWQgdGhl
IGlucHV0cyBvZiB0aGUgZ2l2ZW4gY29uc3RyYWludCB3aXRoCisgKiB0aGUgZ2l2ZW4gbWFyay4g
VGh1cywgZW5jb3VudGVyaW5nIGEgbWFya2VkIG5vZGUgZG93bnN0cmVhbSBvZgorICogdGhlIG91
dHB1dCBjb25zdHJhaW50IG1lYW5zIHRoYXQgdGhlcmUgaXMgYSBwYXRoIGZyb20gdGhlCisgKiBj
b25zdHJhaW50J3Mgb3V0cHV0IHRvIG9uZSBvZiBpdHMgaW5wdXRzLgorICovCitQbGFubmVyLnBy
b3RvdHlwZS5hZGRQcm9wYWdhdGUgPSBmdW5jdGlvbiAoYywgbWFyaykgeworICB2YXIgdG9kbyA9
IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOworICB0b2RvLmFkZCguLi5hcmdzKGMp
KTsKKyAgd2hpbGUgKHRvZG8uc2l6ZSguLi5hcmdzKCkpID4gMCkgeworICAgIHZhciBkID0gdG9k
by5yZW1vdmVGaXJzdCguLi5hcmdzKCkpOworICAgIGlmIChkLm91dHB1dCguLi5hcmdzKCkpLm1h
cmsgPT0gbWFyaykgeworICAgICAgdGhpcy5pbmNyZW1lbnRhbFJlbW92ZSguLi5hcmdzKGMpKTsK
KyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZC5yZWNhbGN1bGF0ZSguLi5hcmdzKCkp
OworICAgIHRoaXMuYWRkQ29uc3RyYWludHNDb25zdW1pbmdUbyguLi5hcmdzKGQub3V0cHV0KC4u
LmFyZ3MoKSksIHRvZG8pKTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworCisvKioKKyAqIFVw
ZGF0ZSB0aGUgd2Fsa2Fib3V0IHN0cmVuZ3RocyBhbmQgc3RheSBmbGFncyBvZiBhbGwgdmFyaWFi
bGVzCisgKiBkb3duc3RyZWFtIG9mIHRoZSBnaXZlbiBjb25zdHJhaW50LiBBbnN3ZXIgYSBjb2xs
ZWN0aW9uIG9mCisgKiB1bnNhdGlzZmllZCBjb25zdHJhaW50cyBzb3J0ZWQgaW4gb3JkZXIgb2Yg
ZGVjcmVhc2luZyBzdHJlbmd0aC4KKyAqLworUGxhbm5lci5wcm90b3R5cGUucmVtb3ZlUHJvcGFn
YXRlRnJvbSA9IGZ1bmN0aW9uIChvdXQpIHsKKyAgb3V0LmRldGVybWluZWRCeSA9IG51bGw7Cisg
IG91dC53YWxrU3RyZW5ndGggPSBTdHJlbmd0aC5XRUFLRVNUOworICBvdXQuc3RheSA9IHRydWU7
CisgIHZhciB1bnNhdGlzZmllZCA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOwor
ICB2YXIgdG9kbyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOworICB0b2RvLmFk
ZCguLi5hcmdzKG91dCkpOworICB3aGlsZSAodG9kby5zaXplKC4uLmFyZ3MoKSkgPiAwKSB7Cisg
ICAgdmFyIHYgPSB0b2RvLnJlbW92ZUZpcnN0KC4uLmFyZ3MoKSk7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB2LmNvbnN0cmFpbnRzLnNpemUoLi4uYXJncygpKTsgaSsrKSB7CisgICAgICB2YXIg
YyA9IHYuY29uc3RyYWludHMuYXQoLi4uYXJncyhpKSk7CisgICAgICBpZiAoIWMuaXNTYXRpc2Zp
ZWQoLi4uYXJncygpKSkKKyAgICAgICAgdW5zYXRpc2ZpZWQuYWRkKC4uLmFyZ3MoYykpOworICAg
IH0KKyAgICB2YXIgZGV0ZXJtaW5pbmcgPSB2LmRldGVybWluZWRCeTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHYuY29uc3RyYWludHMuc2l6ZSguLi5hcmdzKCkpOyBpKyspIHsKKyAgICAgIHZh
ciBuZXh0ID0gdi5jb25zdHJhaW50cy5hdCguLi5hcmdzKGkpKTsKKyAgICAgIGlmIChuZXh0ICE9
IGRldGVybWluaW5nICYmIG5leHQuaXNTYXRpc2ZpZWQoLi4uYXJncygpKSkgeworICAgICAgICBu
ZXh0LnJlY2FsY3VsYXRlKC4uLmFyZ3MoKSk7CisgICAgICAgIHRvZG8uYWRkKC4uLmFyZ3MobmV4
dC5vdXRwdXQoLi4uYXJncygpKSkpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gdW5z
YXRpc2ZpZWQ7Cit9CisKK1BsYW5uZXIucHJvdG90eXBlLmFkZENvbnN0cmFpbnRzQ29uc3VtaW5n
VG8gPSBmdW5jdGlvbiAodiwgY29sbCkgeworICB2YXIgZGV0ZXJtaW5pbmcgPSB2LmRldGVybWlu
ZWRCeTsKKyAgdmFyIGNjID0gdi5jb25zdHJhaW50czsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBj
Yy5zaXplKC4uLmFyZ3MoKSk7IGkrKykgeworICAgIHZhciBjID0gY2MuYXQoLi4uYXJncyhpKSk7
CisgICAgaWYgKGMgIT0gZGV0ZXJtaW5pbmcgJiYgYy5pc1NhdGlzZmllZCguLi5hcmdzKCkpKQor
ICAgICAgY29sbC5hZGQoLi4uYXJncyhjKSk7CisgIH0KK30KKworLyogLS0tICoKKyAqIFAgbCBh
IG4KKyAqIC0tLSAqLworCisvKioKKyAqIEEgUGxhbiBpcyBhbiBvcmRlcmVkIGxpc3Qgb2YgY29u
c3RyYWludHMgdG8gYmUgZXhlY3V0ZWQgaW4gc2VxdWVuY2UKKyAqIHRvIHJlc2F0aXNmeSBhbGwg
Y3VycmVudGx5IHNhdGlzZmlhYmxlIGNvbnN0cmFpbnRzIGluIHRoZSBmYWNlIG9mCisgKiBvbmUg
b3IgbW9yZSBjaGFuZ2luZyBpbnB1dHMuCisgKi8KK2Z1bmN0aW9uIFBsYW4oKSB7CisgIHRoaXMu
diA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbiguLi5hcmdzKCkpOworfQorCitQbGFuLnByb3RvdHlw
ZS5hZGRDb25zdHJhaW50ID0gZnVuY3Rpb24gKGMpIHsKKyAgdGhpcy52LmFkZCguLi5hcmdzKGMp
KTsKK30KKworUGxhbi5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRo
aXMudi5zaXplKC4uLmFyZ3MoKSk7Cit9CisKK1BsYW4ucHJvdG90eXBlLmNvbnN0cmFpbnRBdCA9
IGZ1bmN0aW9uIChpbmRleCkgeworICByZXR1cm4gdGhpcy52LmF0KC4uLmFyZ3MoaW5kZXgpKTsK
K30KKworUGxhbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLnNpemUoLi4uYXJncygpKTsgaSsrKSB7CisgICAgdmFyIGMgPSB0aGlz
LmNvbnN0cmFpbnRBdCguLi5hcmdzKGkpKTsKKyAgICBjLmV4ZWN1dGUoLi4uYXJncygpKTsKKyAg
fQorfQorCisvKiAtLS0gKgorICogTSBhIGkgbgorICogLS0tICovCisKKy8qKgorICogVGhpcyBp
cyB0aGUgc3RhbmRhcmQgRGVsdGFCbHVlIGJlbmNobWFyay4gQSBsb25nIGNoYWluIG9mIGVxdWFs
aXR5CisgKiBjb25zdHJhaW50cyBpcyBjb25zdHJ1Y3RlZCB3aXRoIGEgc3RheSBjb25zdHJhaW50
IG9uIG9uZSBlbmQuIEFuCisgKiBlZGl0IGNvbnN0cmFpbnQgaXMgdGhlbiBhZGRlZCB0byB0aGUg
b3Bwb3NpdGUgZW5kIGFuZCB0aGUgdGltZSBpcworICogbWVhc3VyZWQgZm9yIGFkZGluZyBhbmQg
cmVtb3ZpbmcgdGhpcyBjb25zdHJhaW50LCBhbmQgZXh0cmFjdGluZworICogYW5kIGV4ZWN1dGlu
ZyBhIGNvbnN0cmFpbnQgc2F0aXNmYWN0aW9uIHBsYW4uIFRoZXJlIGFyZSB0d28gY2FzZXMuCisg
KiBJbiBjYXNlIDEsIHRoZSBhZGRlZCBjb25zdHJhaW50IGlzIHN0cm9uZ2VyIHRoYW4gdGhlIHN0
YXkKKyAqIGNvbnN0cmFpbnQgYW5kIHZhbHVlcyBtdXN0IHByb3BhZ2F0ZSBkb3duIHRoZSBlbnRp
cmUgbGVuZ3RoIG9mIHRoZQorICogY2hhaW4uIEluIGNhc2UgMiwgdGhlIGFkZGVkIGNvbnN0cmFp
bnQgaXMgd2Vha2VyIHRoYW4gdGhlIHN0YXkKKyAqIGNvbnN0cmFpbnQgc28gaXQgY2Fubm90IGJl
IGFjY29tb2RhdGVkLiBUaGUgY29zdCBpbiB0aGlzIGNhc2UgaXMsCisgKiBvZiBjb3Vyc2UsIHZl
cnkgbG93LiBUeXBpY2FsIHNpdHVhdGlvbnMgbGllIHNvbWV3aGVyZSBiZXR3ZWVuIHRoZXNlCisg
KiB0d28gZXh0cmVtZXMuCisgKi8KK2Z1bmN0aW9uIGNoYWluVGVzdChuKSB7CisgIHBsYW5uZXIg
PSBuZXcgUGxhbm5lciguLi5hcmdzKCkpOworICB2YXIgcHJldiA9IG51bGwsIGZpcnN0ID0gbnVs
bCwgbGFzdCA9IG51bGw7CisKKyAgLy8gQnVpbGQgY2hhaW4gb2YgbiBlcXVhbGl0eSBjb25zdHJh
aW50cworICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKyspIHsKKyAgICB2YXIgbmFtZSA9ICJ2
IiArIGk7CisgICAgdmFyIHYgPSBuZXcgVmFyaWFibGUoLi4uYXJncyhuYW1lKSk7CisgICAgaWYg
KHByZXYgIT0gbnVsbCkKKyAgICAgIG5ldyBFcXVhbGl0eUNvbnN0cmFpbnQoLi4uYXJncyhwcmV2
LCB2LCBTdHJlbmd0aC5SRVFVSVJFRCkpOworICAgIGlmIChpID09IDApIGZpcnN0ID0gdjsKKyAg
ICBpZiAoaSA9PSBuKSBsYXN0ID0gdjsKKyAgICBwcmV2ID0gdjsKKyAgfQorCisgIG5ldyBTdGF5
Q29uc3RyYWludCguLi5hcmdzKGxhc3QsIFN0cmVuZ3RoLlNUUk9OR19ERUZBVUxUKSk7CisgIHZh
ciBlZGl0ID0gbmV3IEVkaXRDb25zdHJhaW50KC4uLmFyZ3MoZmlyc3QsIFN0cmVuZ3RoLlBSRUZF
UlJFRCkpOworICB2YXIgZWRpdHMgPSBuZXcgT3JkZXJlZENvbGxlY3Rpb24oLi4uYXJncygpKTsK
KyAgZWRpdHMuYWRkKC4uLmFyZ3MoZWRpdCkpOworICB2YXIgcGxhbiA9IHBsYW5uZXIuZXh0cmFj
dFBsYW5Gcm9tQ29uc3RyYWludHMoLi4uYXJncyhlZGl0cykpOworICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgaSsrKSB7CisgICAgZmlyc3QudmFsdWUgPSBpOworICAgIHBsYW4uZXhlY3V0ZSgu
Li5hcmdzKCkpOworICAgIGlmIChsYXN0LnZhbHVlICE9IGkpCisgICAgICBhbGVydCguLi5hcmdz
KCJDaGFpbiB0ZXN0IGZhaWxlZC4iKSk7CisgIH0KK30KKworLyoqCisgKiBUaGlzIHRlc3QgY29u
c3RydWN0cyBhIHR3byBzZXRzIG9mIHZhcmlhYmxlcyByZWxhdGVkIHRvIGVhY2gKKyAqIG90aGVy
IGJ5IGEgc2ltcGxlIGxpbmVhciB0cmFuc2Zvcm1hdGlvbiAoc2NhbGUgYW5kIG9mZnNldCkuIFRo
ZQorICogdGltZSBpcyBtZWFzdXJlZCB0byBjaGFuZ2UgYSB2YXJpYWJsZSBvbiBlaXRoZXIgc2lk
ZSBvZiB0aGUKKyAqIG1hcHBpbmcgYW5kIHRvIGNoYW5nZSB0aGUgc2NhbGUgYW5kIG9mZnNldCBm
YWN0b3JzLgorICovCitmdW5jdGlvbiBwcm9qZWN0aW9uVGVzdChuKSB7CisgIHBsYW5uZXIgPSBu
ZXcgUGxhbm5lciguLi5hcmdzKCkpOworICB2YXIgc2NhbGUgPSBuZXcgVmFyaWFibGUoLi4uYXJn
cygic2NhbGUiLCAxMCkpOworICB2YXIgb2Zmc2V0ID0gbmV3IFZhcmlhYmxlKC4uLmFyZ3MoIm9m
ZnNldCIsIDEwMDApKTsKKyAgdmFyIHNyYyA9IG51bGwsIGRzdCA9IG51bGw7CisKKyAgdmFyIGRl
c3RzID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKC4uLmFyZ3MoKSk7CisgIGZvciAodmFyIGkgPSAw
OyBpIDwgbjsgaSsrKSB7CisgICAgc3JjID0gbmV3IFZhcmlhYmxlKC4uLmFyZ3MoInNyYyIgKyBp
LCBpKSk7CisgICAgZHN0ID0gbmV3IFZhcmlhYmxlKC4uLmFyZ3MoImRzdCIgKyBpLCBpKSk7Cisg
ICAgZGVzdHMuYWRkKC4uLmFyZ3MoZHN0KSk7CisgICAgbmV3IFN0YXlDb25zdHJhaW50KC4uLmFy
Z3Moc3JjLCBTdHJlbmd0aC5OT1JNQUwpKTsKKyAgICBuZXcgU2NhbGVDb25zdHJhaW50KC4uLmFy
Z3Moc3JjLCBzY2FsZSwgb2Zmc2V0LCBkc3QsIFN0cmVuZ3RoLlJFUVVJUkVEKSk7CisgIH0KKwor
ICBjaGFuZ2UoLi4uYXJncyhzcmMsIDE3KSk7CisgIGlmIChkc3QudmFsdWUgIT0gMTE3MCkgYWxl
cnQoLi4uYXJncygiUHJvamVjdGlvbiAxIGZhaWxlZCIpKTsKKyAgY2hhbmdlKC4uLmFyZ3MoZHN0
LCAxMDUwKSk7CisgIGlmIChzcmMudmFsdWUgIT0gNSkgYWxlcnQoLi4uYXJncygiUHJvamVjdGlv
biAyIGZhaWxlZCIpKTsKKyAgY2hhbmdlKC4uLmFyZ3Moc2NhbGUsIDUpKTsKKyAgZm9yICh2YXIg
aSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CisgICAgaWYgKGRlc3RzLmF0KC4uLmFyZ3MoaSkpLnZh
bHVlICE9IGkgKiA1ICsgMTAwMCkKKyAgICAgIGFsZXJ0KC4uLmFyZ3MoIlByb2plY3Rpb24gMyBm
YWlsZWQiKSk7CisgIH0KKyAgY2hhbmdlKC4uLmFyZ3Mob2Zmc2V0LCAyMDAwKSk7CisgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgeworICAgIGlmIChkZXN0cy5hdCguLi5hcmdzKGkp
KS52YWx1ZSAhPSBpICogNSArIDIwMDApCisgICAgICBhbGVydCguLi5hcmdzKCJQcm9qZWN0aW9u
IDQgZmFpbGVkIikpOworICB9Cit9CisKK2Z1bmN0aW9uIGNoYW5nZSh2LCBuZXdWYWx1ZSkgewor
ICB2YXIgZWRpdCA9IG5ldyBFZGl0Q29uc3RyYWludCguLi5hcmdzKHYsIFN0cmVuZ3RoLlBSRUZF
UlJFRCkpOworICB2YXIgZWRpdHMgPSBuZXcgT3JkZXJlZENvbGxlY3Rpb24oLi4uYXJncygpKTsK
KyAgZWRpdHMuYWRkKC4uLmFyZ3MoZWRpdCkpOworICB2YXIgcGxhbiA9IHBsYW5uZXIuZXh0cmFj
dFBsYW5Gcm9tQ29uc3RyYWludHMoLi4uYXJncyhlZGl0cykpOworICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwOyBpKyspIHsKKyAgICB2LnZhbHVlID0gbmV3VmFsdWU7CisgICAgcGxhbi5leGVjdXRl
KC4uLmFyZ3MoKSk7CisgIH0KKyAgZWRpdC5kZXN0cm95Q29uc3RyYWludCguLi5hcmdzKCkpOwor
fQorCisvLyBHbG9iYWwgdmFyaWFibGUgaG9sZGluZyB0aGUgY3VycmVudCBwbGFubmVyLgordmFy
IHBsYW5uZXIgPSBudWxsOworCitmdW5jdGlvbiBkZWx0YUJsdWUoKSB7CisgIGNoYWluVGVzdCgu
Li5hcmdzKDEwMCkpOworICBwcm9qZWN0aW9uVGVzdCguLi5hcmdzKDEwMCkpOworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDMwOyArK2kpCisgICAgZGVsdGFCbHVlKC4uLmFyZ3MoKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>