<?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>149654</bug_id>
          
          <creation_ts>2015-09-29 20:43:27 -0700</creation_ts>
          <short_desc>Allow an object&apos;s marking state to track The Three Colors</short_desc>
          <delta_ts>2015-10-06 17:28:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Other</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>
          
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1129489</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-29 20:43:27 -0700</bug_when>
    <thetext>Currently, each object not only knows if it&apos;s marked in this GC, but also whether it&apos;s a survivor of a prior GC and whether it&apos;s in a remembered set.  When we add concurrent GC, we&apos;ll also want to differentiate between being on the GC worklist (i.e. &quot;grey&quot;) and having already been marked (i.e. &quot;black&quot;).  But we also want to know if an object is grey the first time (and so should be allowed to trigger copying) or a subsequent time (and so should not trigger copying).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129490</commentid>
    <comment_count>1</comment_count>
      <attachid>262137</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-29 20:44:03 -0700</bug_when>
    <thetext>Created attachment 262137
a very rough start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129634</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-30 10:47:17 -0700</bug_when>
    <thetext>Some more thoughts:

We &quot;report live bytes&quot;, which implies copying if the block doesn&apos;t get pinned, if the owning object is not
remembered or if the block is new.

old object, not remembered, old storage:  copy
old object, not remembered, new storage:  copy
old object, remembered, old storage:      don&apos;t copy
old object, remembered, new storage:      copy
new object, not remembered, old storage:  copy
new object, not remembered, new storage:  copy
new object, remembered, old storage:      don&apos;t copy
new object, remembered, new storage:      copy

During full collections, we always report live bytes.  This means that we only avoid copying during an eden
collection, when we have a remembered object with old storage.

We also want to avoid copying if we already added the object to the copying worklist. So, we want bits to
track if an object is being re-greyed by the barrier.  Essentially, we want to track whether the object is
&quot;OldGrey&quot;.  If it&apos;s OldGrey, then we don&apos;t want to copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129807</commentid>
    <comment_count>3</comment_count>
      <attachid>262227</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-30 20:52:44 -0700</bug_when>
    <thetext>Created attachment 262227
what I&apos;m thinking so far</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130449</commentid>
    <comment_count>4</comment_count>
      <attachid>262381</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-03 15:30:14 -0700</bug_when>
    <thetext>Created attachment 262381
it passes so many tests

I&apos;m almost done with a debug test run. No failures!

Still need to measure performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130451</commentid>
    <comment_count>5</comment_count>
      <attachid>262382</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-03 15:54:35 -0700</bug_when>
    <thetext>Created attachment 262382
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130471</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-03 19:12:50 -0700</bug_when>
    <thetext>Looks like perf is good.  Note that the SunSpider &quot;speed-up&quot; appears to be entirely due to some noise event for the TipOfTree configuration.

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190544)
&quot;TriColor&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190544)

Collected 7 samples per benchmark/VM, with 7 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                  TriColor                                     
SunSpider:
   3d-cube                                            4.8942+-0.8680            4.5401+-0.2348          might be 1.0780x faster
   3d-morph                                           5.3798+-0.1090            5.2842+-0.1022          might be 1.0181x faster
   3d-raytrace                                        5.7031+-0.5679            5.4353+-0.2631          might be 1.0493x faster
   access-binary-trees                                2.1525+-0.0719            2.1428+-0.0651        
   access-fannkuch                                    5.4097+-0.2176     ?      5.5495+-0.1577        ? might be 1.0258x slower
   access-nbody                                       2.5750+-0.0851     ?      2.6479+-0.2499        ? might be 1.0283x slower
   access-nsieve                                      3.0663+-0.0655     ?      3.1291+-0.1915        ? might be 1.0205x slower
   bitops-3bit-bits-in-byte                           1.1953+-0.0958            1.1542+-0.0256          might be 1.0356x faster
   bitops-bits-in-byte                                3.3465+-0.2861            3.2334+-0.1225          might be 1.0350x faster
   bitops-bitwise-and                                 2.0528+-0.0685            2.0223+-0.0456          might be 1.0151x faster
   bitops-nsieve-bits                                 2.9045+-0.0474     ?      2.9145+-0.0285        ?
   controlflow-recursive                              2.3759+-0.0694            2.3526+-0.0391        
   crypto-aes                                         4.1060+-0.3217            3.9004+-0.0913          might be 1.0527x faster
   crypto-md5                                         2.4576+-0.0251     ?      2.4779+-0.0341        ?
   crypto-sha1                                        2.5524+-0.2189            2.4765+-0.1709          might be 1.0306x faster
   date-format-tofte                                  6.5630+-0.3119     ?      6.6170+-0.1596        ?
   date-format-xparb                                  4.6331+-0.1446     ?      4.8522+-0.4146        ? might be 1.0473x slower
   math-cordic                                        2.7943+-0.0271     ?      2.8057+-0.0866        ?
   math-partial-sums                                  4.8951+-0.2986            4.7157+-0.0643          might be 1.0381x faster
   math-spectral-norm                                 1.9477+-0.0605     ?      1.9977+-0.1437        ? might be 1.0256x slower
   regexp-dna                                         6.3568+-0.3379     ?      6.4190+-0.3968        ?
   string-base64                                      4.6866+-0.3873            4.3914+-0.2708          might be 1.0672x faster
   string-fasta                                       5.8948+-0.4035            5.7889+-0.1521          might be 1.0183x faster
   string-tagcloud                                    7.8223+-0.1580     ?      7.8801+-0.3712        ?
   string-unpack-code                                19.2254+-0.9741           18.2718+-0.9257          might be 1.0522x faster
   string-validate-input                              5.6605+-1.3120            4.5556+-0.2255          might be 1.2425x faster

   &lt;arithmetic&gt;                                       4.6404+-0.0360     ^      4.5214+-0.0721        ^ definitely 1.0263x faster

                                                        TipOfTree                  TriColor                                     
LongSpider:
   3d-cube                                          815.2919+-9.3045     ?    815.9959+-52.9691       ?
   3d-morph                                        1503.0599+-9.6573         1493.7435+-7.9463        
   3d-raytrace                                      595.7643+-5.7696     ?    600.4731+-5.1082        ?
   access-binary-trees                              790.2127+-5.4656     ?    794.7686+-9.1339        ?
   access-fannkuch                                  274.7091+-2.7868          273.5999+-3.1028        
   access-nbody                                     517.1867+-6.6780          515.3608+-3.6633        
   access-nsieve                                    372.2510+-12.2428         361.2472+-3.2305          might be 1.0305x faster
   bitops-3bit-bits-in-byte                          34.7643+-1.1709           34.0362+-0.7289          might be 1.0214x faster
   bitops-bits-in-byte                               78.2077+-6.4030           75.4515+-3.1635          might be 1.0365x faster
   bitops-nsieve-bits                               403.6257+-4.9867          402.0826+-5.5880        
   controlflow-recursive                            430.4269+-9.3857          426.9403+-1.9272        
   crypto-aes                                       551.3410+-5.8244          546.3305+-11.8432       
   crypto-md5                                       458.7595+-31.2575    ?    473.6056+-36.2021       ? might be 1.0324x slower
   crypto-sha1                                      629.1768+-11.6877    ?    632.0646+-12.2779       ?
   date-format-tofte                                492.8834+-8.5670     ?    495.4270+-5.3454        ?
   date-format-xparb                                651.7153+-4.9089     ?    677.6053+-55.2984       ? might be 1.0397x slower
   hash-map                                         148.6988+-0.9737     ?    149.1577+-2.8005        ?
   math-cordic                                      478.2797+-3.0974          476.9175+-3.1830        
   math-partial-sums                                459.6997+-4.9964          459.5579+-8.0692        
   math-spectral-norm                               548.8529+-2.7937          548.6461+-3.9632        
   string-base64                                    394.1195+-80.0408         366.4071+-3.1020          might be 1.0756x faster
   string-fasta                                     363.1753+-2.5852          362.6674+-2.7559        
   string-tagcloud                                  174.2933+-1.2901          173.6708+-1.5963        

   &lt;geometric&gt;                                      386.6421+-3.4464          385.1042+-2.8105          might be 1.0040x faster

                                                        TipOfTree                  TriColor                                     
V8Spider:
   crypto                                            48.6228+-2.3362           48.3634+-1.2113        
   deltablue                                         78.9518+-5.2530           77.7599+-2.6298          might be 1.0153x faster
   earley-boyer                                      42.0158+-1.8928     ?     45.0093+-3.2828        ? might be 1.0712x slower
   raytrace                                          30.6861+-0.7461     ?     31.0470+-1.8243        ? might be 1.0118x slower
   regexp                                            62.8760+-1.8904     ?     63.2641+-2.2155        ?
   richards                                          56.9429+-1.7550           53.9923+-1.7713          might be 1.0546x faster
   splay                                             35.0469+-0.8419     ?     35.9960+-1.0206        ? might be 1.0271x slower

   &lt;geometric&gt;                                       48.3555+-0.8908     ?     48.6235+-0.9082        ? might be 1.0055x slower

                                                        TipOfTree                  TriColor                                     
Octane:
   encrypt                                           0.16556+-0.00193          0.16534+-0.00121       
   decrypt                                           2.90833+-0.02034    ^     2.86301+-0.02383       ^ definitely 1.0158x faster
   deltablue                                x2       0.13779+-0.00113          0.13658+-0.00136       
   earley                                            0.28773+-0.00320          0.28577+-0.00221       
   boyer                                             4.29975+-0.03471    ?     4.30101+-0.03846       ?
   navier-stokes                            x2       4.82677+-0.02527          4.82564+-0.03002       
   raytrace                                 x2       0.86023+-0.00756    ?     0.86234+-0.00662       ?
   richards                                 x2       0.08860+-0.00060    ?     0.08867+-0.00086       ?
   splay                                    x2       0.33395+-0.00430    ?     0.33607+-0.00439       ?
   regexp                                   x2      24.42412+-0.29283    ^    23.77515+-0.30541       ^ definitely 1.0273x faster
   pdfjs                                    x2      37.15178+-0.19656         36.60700+-0.39992         might be 1.0149x faster
   mandreel                                 x2      42.45502+-0.44227    ?    42.54543+-0.39828       ?
   gbemu                                    x2      30.91807+-0.50155    ?    30.94074+-0.40894       ?
   closure                                           0.57578+-0.00194    ?     0.57769+-0.00213       ?
   jquery                                            7.30238+-0.06489    ?     7.31099+-0.10964       ?
   box2d                                    x2       9.13219+-0.11711    ?     9.15342+-0.05365       ?
   zlib                                     x2     389.36630+-6.21572        382.42989+-13.71285        might be 1.0181x faster
   typescript                               x2     667.85931+-24.65706       653.63215+-9.26372         might be 1.0218x faster

   &lt;geometric&gt;                                       5.31209+-0.01713          5.28209+-0.02514         might be 1.0057x faster

                                                        TipOfTree                  TriColor                                     
Kraken:
   ai-astar                                          127.400+-1.659            126.226+-0.669         
   audio-beat-detection                               49.937+-0.378      ?      50.479+-0.286         ? might be 1.0109x slower
   audio-dft                                          99.336+-3.600             98.439+-2.505         
   audio-fft                                          35.043+-0.203      ?      35.578+-0.896         ? might be 1.0153x slower
   audio-oscillator                                   56.449+-1.448      ?      57.266+-3.024         ? might be 1.0145x slower
   imaging-darkroom                                   60.154+-0.418      ?      63.404+-8.705         ? might be 1.0540x slower
   imaging-desaturate                                 47.876+-0.406      ?      49.125+-3.526         ? might be 1.0261x slower
   imaging-gaussian-blur                              85.870+-1.648      ?      86.896+-4.797         ? might be 1.0120x slower
   json-parse-financial                               38.812+-2.331             37.409+-1.632           might be 1.0375x faster
   json-stringify-tinderbox                           23.724+-2.029             22.822+-1.148           might be 1.0395x faster
   stanford-crypto-aes                                40.584+-1.039      ?      41.389+-2.474         ? might be 1.0198x slower
   stanford-crypto-ccm                                36.226+-1.558             36.092+-1.917         
   stanford-crypto-pbkdf2                             96.825+-1.759             94.697+-2.060           might be 1.0225x faster
   stanford-crypto-sha256-iterative                   37.196+-1.252             36.261+-0.878           might be 1.0258x faster

   &lt;arithmetic&gt;                                       59.674+-0.552      ?      59.720+-0.738         ? might be 1.0008x slower

                                                        TipOfTree                  TriColor                                     
JSRegress:
   abc-forward-loop-equal                            29.8604+-0.8932           29.5509+-0.6493          might be 1.0105x faster
   abc-postfix-backward-loop                         29.5456+-0.4361     ?     29.7479+-1.0278        ?
   abc-simple-backward-loop                          29.4576+-0.9735     ?     29.6466+-0.8826        ?
   abc-simple-forward-loop                           29.2153+-0.5784     ?     29.8827+-1.1487        ? might be 1.0228x slower
   abc-skippy-loop                                   21.9528+-1.1554     ?     23.2286+-4.6186        ? might be 1.0581x slower
   abs-boolean                                        2.4563+-0.0496     ?      2.5190+-0.1355        ? might be 1.0255x slower
   adapt-to-double-divide                            16.3520+-0.3908     ?     16.3936+-0.4171        ?
   aliased-arguments-getbyval                         1.3366+-0.2667            1.3220+-0.1683          might be 1.0110x faster
   allocate-big-object                                2.4484+-0.1503     ?      2.5066+-0.0737        ? might be 1.0237x slower
   arguments-named-and-reflective                    10.6619+-0.4048           10.6430+-0.1549        
   arguments-out-of-bounds                            9.5033+-0.4298     ?      9.9131+-0.5240        ? might be 1.0431x slower
   arguments-strict-mode                              9.6001+-0.3527            9.3237+-0.3411          might be 1.0296x faster
   arguments                                          8.4427+-0.1317     ?      8.4436+-0.3929        ?
   arity-mismatch-inlining                            0.8509+-0.0385            0.8470+-0.0218        
   array-access-polymorphic-structure                 7.2171+-0.3719     ?      7.4311+-0.6366        ? might be 1.0296x slower
   array-nonarray-polymorhpic-access                 23.6221+-0.8118     ?     23.7943+-0.6558        ?
   array-prototype-every                             77.1762+-1.4685           75.9879+-1.3387          might be 1.0156x faster
   array-prototype-forEach                           77.6548+-3.0987           75.2474+-1.2735          might be 1.0320x faster
   array-prototype-map                               80.6556+-1.2045     ?     83.9839+-5.5240        ? might be 1.0413x slower
   array-prototype-reduce                            71.8042+-1.5729     ?     80.8209+-21.5066       ? might be 1.1256x slower
   array-prototype-reduceRight                       71.8120+-1.2348     ?     72.7222+-4.1618        ? might be 1.0127x slower
   array-prototype-some                              76.8742+-1.2654     ?     77.0297+-1.8669        ?
   array-splice-contiguous                           20.7685+-1.4430     ?     21.1198+-0.4557        ? might be 1.0169x slower
   array-with-double-add                              3.4856+-0.1308     ?      3.6100+-0.3251        ? might be 1.0357x slower
   array-with-double-increment                        3.2094+-0.2877            3.1312+-0.1126          might be 1.0250x faster
   array-with-double-mul-add                          4.3049+-0.1606     ?      4.3397+-0.2221        ?
   array-with-double-sum                              3.2357+-0.1477            3.2076+-0.0954        
   array-with-int32-add-sub                           5.7660+-0.1969            5.6714+-0.1097          might be 1.0167x faster
   array-with-int32-or-double-sum                     3.2461+-0.0444            3.2459+-0.0550        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     26.3876+-1.3118           26.0060+-1.4172          might be 1.0147x faster
   ArrayBuffer-DataView-alloc-long-lived             12.0470+-0.3651           11.9440+-0.6154        
   ArrayBuffer-Int32Array-byteOffset                  3.5981+-0.1099            3.5774+-0.0680        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     25.9883+-0.5425     ?     26.4385+-1.1072        ? might be 1.0173x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.8219+-1.1173           19.3825+-0.5879          might be 1.0227x faster
   ArrayBuffer-Int8Array-alloc-long-lived            11.7468+-0.5441           11.3335+-0.4956          might be 1.0365x faster
   ArrayBuffer-Int8Array-alloc                        9.4727+-0.2870     ?      9.6138+-0.2816        ? might be 1.0149x slower
   arrowfunction-call                                11.0840+-0.1864           10.8568+-0.1180          might be 1.0209x faster
   asmjs_bool_bug                                     7.5423+-0.2286            7.4151+-0.0406          might be 1.0172x faster
   assign-custom-setter-polymorphic                   2.5365+-0.1816            2.4864+-0.1423          might be 1.0201x faster
   assign-custom-setter                               3.4803+-0.1075     ^      3.1513+-0.0870        ^ definitely 1.1044x faster
   basic-set                                          7.7303+-0.6668            7.5377+-0.8323          might be 1.0256x faster
   big-int-mul                                        3.4893+-0.0752            3.4414+-0.0209          might be 1.0139x faster
   boolean-test                                       3.0597+-0.1591            2.9770+-0.0469          might be 1.0278x faster
   branch-fold                                        3.5897+-0.0467     ?      3.6464+-0.1510        ? might be 1.0158x slower
   branch-on-string-as-boolean                       16.9237+-0.4945     ?     16.9442+-0.4075        ?
   by-val-generic                                     2.4772+-0.0642     ?      2.6077+-0.3014        ? might be 1.0527x slower
   call-spread-apply                                 26.9070+-0.6680           26.5156+-0.6111          might be 1.0148x faster
   call-spread-call                                  21.9233+-0.9412           21.1344+-1.1774          might be 1.0373x faster
   captured-assignments                               0.4208+-0.0170            0.4165+-0.0256          might be 1.0104x faster
   cast-int-to-double                                 5.1544+-0.1941     ?      5.7005+-1.1439        ? might be 1.1060x slower
   cell-argument                                      5.8415+-0.2774     ?      6.2428+-0.3664        ? might be 1.0687x slower
   cfg-simplify                                       2.8870+-0.0603     ?      2.9742+-0.2824        ? might be 1.0302x slower
   chain-getter-access                                8.3485+-0.1764     ?      8.4874+-0.3066        ? might be 1.0166x slower
   cmpeq-obj-to-obj-other                            12.2154+-0.6733           12.0693+-1.2915          might be 1.0121x faster
   constant-test                                      4.8306+-0.0742     ?      5.2579+-1.0840        ? might be 1.0885x slower
   create-lots-of-functions                           9.5940+-0.2667     ?      9.7212+-0.4672        ? might be 1.0133x slower
   cse-new-array-buffer                               2.3131+-0.0796     ?      2.7242+-0.6629        ? might be 1.1777x slower
   cse-new-array                                      2.5508+-0.2720            2.4696+-0.1048          might be 1.0329x faster
   DataView-custom-properties                        31.6155+-1.5833     ?     32.1172+-1.0325        ? might be 1.0159x slower
   delay-tear-off-arguments-strictmode               12.9268+-0.8701           12.0821+-0.5183          might be 1.0699x faster
   deltablue-varargs                                161.8598+-5.1251          159.6751+-1.6263          might be 1.0137x faster
   destructuring-arguments                          162.1272+-0.7185     ?    163.1163+-8.0636        ?
   destructuring-parameters-overridden-by-function   
                                                      0.4809+-0.0329     ?      0.5118+-0.0522        ? might be 1.0643x slower
   destructuring-swap                                 4.8747+-0.1432            4.8445+-0.1073        
   direct-arguments-getbyval                          1.2898+-0.0858            1.2192+-0.0350          might be 1.0579x faster
   div-boolean-double                                 5.4718+-0.3943            5.2807+-0.0823          might be 1.0362x faster
   div-boolean                                        8.1047+-0.0325     ?      8.1889+-0.1637        ? might be 1.0104x slower
   double-get-by-val-out-of-bounds                    4.3201+-0.1123     ?      4.6375+-0.6176        ? might be 1.0734x slower
   double-pollution-getbyval                          8.6370+-0.1025     ?      8.6940+-0.1339        ?
   double-pollution-putbyoffset                       3.6749+-0.1694            3.5893+-0.0926          might be 1.0239x faster
   double-real-use                                   25.9275+-1.8790           24.6513+-1.5030          might be 1.0518x faster
   double-to-int32-typed-array-no-inline              2.1531+-0.0858     ?      2.1862+-0.0962        ? might be 1.0154x slower
   double-to-int32-typed-array                        2.0510+-0.0760            2.0412+-0.0738        
   double-to-uint32-typed-array-no-inline             2.3178+-0.0747     ?      2.4614+-0.3905        ? might be 1.0619x slower
   double-to-uint32-typed-array                       2.1373+-0.0886     ?      2.1846+-0.2265        ? might be 1.0221x slower
   elidable-new-object-dag                           35.4351+-1.8478           34.5306+-1.2323          might be 1.0262x faster
   elidable-new-object-roflcopter                    33.1086+-0.6170     ?     33.5243+-0.9180        ? might be 1.0126x slower
   elidable-new-object-then-call                     31.7167+-0.6562     ?     32.5537+-1.4468        ? might be 1.0264x slower
   elidable-new-object-tree                          39.8021+-4.3768           38.2417+-1.2919          might be 1.0408x faster
   empty-string-plus-int                              4.7414+-0.0831            4.6897+-0.1168          might be 1.0110x faster
   emscripten-cube2hash                              27.8465+-1.3258           27.8421+-0.9109        
   exit-length-on-plain-object                       14.8647+-0.5528     ?     15.8764+-0.7758        ? might be 1.0681x slower
   external-arguments-getbyval                        1.3449+-0.1392            1.3258+-0.1103          might be 1.0144x faster
   external-arguments-putbyval                        2.1875+-0.0738     ?      2.2011+-0.1212        ?
   fixed-typed-array-storage-var-index                1.2725+-0.0799            1.2534+-0.0335          might be 1.0152x faster
   fixed-typed-array-storage                          0.9408+-0.0416            0.9339+-0.0481        
   Float32Array-matrix-mult                           4.0740+-0.0891     ?      4.1270+-0.1796        ? might be 1.0130x slower
   Float32Array-to-Float64Array-set                  50.7722+-1.8040           49.8124+-2.0733          might be 1.0193x faster
   Float64Array-alloc-long-lived                     61.0103+-2.5058           59.0589+-1.4669          might be 1.0330x faster
   Float64Array-to-Int16Array-set                    58.9603+-1.9072     ?     60.2840+-3.1939        ? might be 1.0225x slower
   fold-double-to-int                                12.9586+-0.8524           12.2900+-0.2823          might be 1.0544x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.7502+-1.2177           11.3914+-1.2082          might be 1.0315x faster
   fold-get-by-id-to-multi-get-by-offset             10.3464+-1.3780            9.7940+-1.5439          might be 1.0564x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.1852+-1.7526            8.0548+-1.6877          might be 1.0162x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.5214+-1.0702            9.3168+-0.9154          might be 1.0220x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.9720+-1.2613            8.8527+-1.1206          might be 1.2394x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      9.7834+-1.4449            9.7667+-0.3423        
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.8681+-4.2727            9.2601+-0.3309          might be 1.1736x faster
   fold-put-by-id-to-multi-put-by-offset             12.1773+-0.7670           10.6980+-0.9477          might be 1.1383x faster
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     11.2772+-1.1503           10.3707+-0.8580          might be 1.0874x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     11.8895+-0.9266           10.9859+-1.4797          might be 1.0823x faster
   fold-put-structure                                 7.5034+-0.9883     ?      7.8790+-1.3462        ? might be 1.0501x slower
   for-of-iterate-array-entries                      10.9003+-0.1974           10.8628+-0.6155        
   for-of-iterate-array-keys                          3.4938+-0.0880     ?      3.5558+-0.1554        ? might be 1.0177x slower
   for-of-iterate-array-values                        3.3479+-0.1575     ?      3.3842+-0.1282        ? might be 1.0108x slower
   fround                                            17.6675+-1.0882     ?     18.2785+-1.0904        ? might be 1.0346x slower
   ftl-library-inlining-dataview                     59.9424+-1.1529           59.0250+-1.0794          might be 1.0155x faster
   ftl-library-inlining                             101.4734+-0.6844     ?    103.3922+-2.2351        ? might be 1.0189x slower
   function-call                                     10.7479+-0.0879     ?     10.8763+-0.3537        ? might be 1.0119x slower
   function-dot-apply                                 2.1340+-0.1292     ?      2.2495+-0.3523        ? might be 1.0541x slower
   function-test                                      2.8320+-0.2647            2.7589+-0.1398          might be 1.0265x faster
   function-with-eval                                95.2854+-2.3455     ^     83.4934+-1.6153        ^ definitely 1.1412x faster
   gcse-poly-get-less-obvious                        20.7365+-0.7138           20.6234+-0.3183        
   gcse-poly-get                                     22.2646+-0.5036     ?     22.7057+-1.1492        ? might be 1.0198x slower
   gcse                                               3.4383+-0.1240            3.3546+-0.0373          might be 1.0250x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7058+-0.0933            2.6401+-0.0398          might be 1.0249x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      4.8911+-0.3541            4.7615+-0.1255          might be 1.0272x faster
   get-by-id-chain-from-try-block                     2.4581+-0.0840     ?      2.5987+-0.3851        ? might be 1.0572x slower
   get-by-id-check-structure-elimination              4.0662+-0.2111            3.9091+-0.0939          might be 1.0402x faster
   get-by-id-proto-or-self                           15.3906+-0.6825     ?     15.8744+-0.8729        ? might be 1.0314x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8869+-0.0393     ?      3.2780+-0.4917        ? might be 1.1355x slower
   get-by-id-self-or-proto                           15.7968+-0.7547           15.4367+-0.4835          might be 1.0233x faster
   get-by-val-out-of-bounds                           4.2074+-0.1114            4.1843+-0.1513        
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7998+-0.2260            2.7994+-0.1503        
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      5.9138+-0.0579     ?      6.0530+-0.1868        ? might be 1.0235x slower
   get-by-val-with-string-chain-from-try-block   
                                                      2.4467+-0.0752     ?      2.4668+-0.0939        ?
   get-by-val-with-string-check-structure-elimination   
                                                      5.1927+-0.0808            5.1561+-0.1663        
   get-by-val-with-string-proto-or-self              16.4015+-0.7263           16.3944+-0.6455        
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.0853+-0.0514     ?      3.4967+-0.8040        ? might be 1.1333x slower
   get-by-val-with-string-self-or-proto              15.3924+-0.2895     ?     16.1903+-1.3606        ? might be 1.0518x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      2.9495+-0.0591            2.9401+-0.0968        
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.5374+-0.2382     ?     12.6322+-0.6558        ?
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.6110+-0.3928            2.4204+-0.0433          might be 1.0787x faster
   get-by-val-with-symbol-check-structure-elimination   
                                                     10.9792+-0.0481     ?     10.9988+-0.0904        ?
   get-by-val-with-symbol-proto-or-self              15.6590+-0.6086     ?     16.1619+-0.6310        ? might be 1.0321x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.0616+-0.2637            3.9284+-0.0577          might be 1.0339x faster
   get-by-val-with-symbol-self-or-proto              15.5201+-0.7176     ?     16.1532+-0.7296        ? might be 1.0408x slower
   get_callee_monomorphic                             2.3642+-0.1225     ?      2.5184+-0.2949        ? might be 1.0652x slower
   get_callee_polymorphic                             3.4304+-0.3032            3.2915+-0.0848          might be 1.0422x faster
   getter-no-activation                               5.0333+-0.2452            4.8443+-0.1784          might be 1.0390x faster
   getter-prototype                                   7.9674+-0.2436            7.9610+-0.1316        
   getter-richards-try-catch                        986.6903+-25.1849         976.8158+-21.7448         might be 1.0101x faster
   getter-richards                                  115.0038+-5.2570          110.0005+-4.4292          might be 1.0455x faster
   getter                                             5.3342+-0.3926     ?      5.4182+-0.4548        ? might be 1.0158x slower
   global-object-access-with-mutating-structure   
                                                      5.5527+-0.1032     ?      5.6581+-0.0658        ? might be 1.0190x slower
   global-var-const-infer-fire-from-opt               0.8949+-0.0348     ?      0.9013+-0.1524        ?
   global-var-const-infer                             0.6302+-0.0056     ?      0.6466+-0.0302        ? might be 1.0260x slower
   hard-overflow-check-equal                         27.6628+-0.5292     ?     27.6711+-0.5394        ?
   hard-overflow-check                               27.2836+-0.4527           26.8251+-0.8826          might be 1.0171x faster
   HashMap-put-get-iterate-keys                      25.4255+-1.8298     ?     26.0733+-1.4107        ? might be 1.0255x slower
   HashMap-put-get-iterate                           27.2658+-0.9503     ?     27.6633+-0.8032        ? might be 1.0146x slower
   HashMap-string-put-get-iterate                    24.2382+-0.6140     ?     24.7919+-2.0316        ? might be 1.0228x slower
   hoist-make-rope                                    8.6097+-0.8354            8.3465+-0.6094          might be 1.0315x faster
   hoist-poly-check-structure-effectful-loop   
                                                      3.6840+-0.1342            3.6210+-0.0671          might be 1.0174x faster
   hoist-poly-check-structure                         3.1080+-0.0223            3.0711+-0.0491          might be 1.0120x faster
   imul-double-only                                   7.7306+-0.6756            7.4379+-0.1513          might be 1.0394x faster
   imul-int-only                                      9.1222+-0.8443            8.9121+-0.6796          might be 1.0236x faster
   imul-mixed                                         7.2267+-0.7087            7.0379+-0.4132          might be 1.0268x faster
   in-four-cases                                     17.3806+-0.7970           16.9168+-0.4221          might be 1.0274x faster
   in-one-case-false                                  9.7366+-0.6123            9.3545+-0.2329          might be 1.0408x faster
   in-one-case-true                                   9.5807+-0.4584     ?      9.6435+-0.6356        ?
   in-two-cases                                       9.9320+-0.4957            9.7624+-0.3382          might be 1.0174x faster
   indexed-properties-in-objects                      2.8370+-0.0751            2.7942+-0.0602          might be 1.0153x faster
   infer-closure-const-then-mov-no-inline             3.6345+-0.0646            3.6015+-0.0406        
   infer-closure-const-then-mov                      18.7488+-0.6257           18.2820+-0.4476          might be 1.0255x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.4179+-0.5961           10.9450+-0.1250          might be 1.0432x faster
   infer-closure-const-then-put-to-scope             23.1553+-0.5535     ?     23.5320+-0.7935        ? might be 1.0163x slower
   infer-closure-const-then-reenter-no-inline   
                                                     47.6905+-0.6491           47.5194+-0.9637        
   infer-closure-const-then-reenter                  23.2382+-0.5063     ?     23.3466+-1.3912        ?
   infer-constant-global-property                     3.4747+-0.0871            3.4287+-0.1372          might be 1.0134x faster
   infer-constant-property                            2.6730+-0.1197     ?      2.8456+-0.4754        ? might be 1.0646x slower
   infer-one-time-closure-ten-vars                    7.7468+-0.1949     ?      8.0047+-0.6323        ? might be 1.0333x slower
   infer-one-time-closure-two-vars                    7.5266+-0.1340     ?      7.5822+-0.3822        ?
   infer-one-time-closure                             7.2813+-0.4982     ?      7.3916+-0.3358        ? might be 1.0151x slower
   infer-one-time-deep-closure                       11.1985+-0.5760           10.9207+-0.3747          might be 1.0254x faster
   inline-arguments-access                            3.6482+-0.1573            3.5714+-0.1493          might be 1.0215x faster
   inline-arguments-aliased-access                    3.7059+-0.2571            3.6825+-0.1974        
   inline-arguments-local-escape                      3.6478+-0.1483            3.6443+-0.0590        
   inline-get-scoped-var                              4.5707+-0.1237            4.5571+-0.2443        
   inlined-put-by-id-transition                       9.2163+-0.2580     ?      9.2972+-0.3778        ?
   inlined-put-by-val-with-string-transition   
                                                     41.1194+-1.2519     ?     41.7098+-1.6916        ? might be 1.0144x slower
   inlined-put-by-val-with-symbol-transition   
                                                     41.2162+-2.3843           40.5600+-0.8995          might be 1.0162x faster
   int-or-other-abs-then-get-by-val                   4.5682+-0.0409            4.5279+-0.0478        
   int-or-other-abs-zero-then-get-by-val             15.5612+-0.3856           15.3261+-0.4340          might be 1.0153x faster
   int-or-other-add-then-get-by-val                   4.4245+-0.0542     ?      4.4295+-0.0844        ?
   int-or-other-add                                   4.9393+-0.0620     ?      4.9864+-0.1370        ?
   int-or-other-div-then-get-by-val                   3.7097+-0.0310     ?      4.0186+-0.6220        ? might be 1.0833x slower
   int-or-other-max-then-get-by-val                   3.8949+-0.0827     ?      3.9364+-0.1132        ? might be 1.0106x slower
   int-or-other-min-then-get-by-val                   3.9040+-0.2435     ?      3.9622+-0.3562        ? might be 1.0149x slower
   int-or-other-mod-then-get-by-val                   3.4771+-0.0294            3.4630+-0.0097        
   int-or-other-mul-then-get-by-val                   3.7667+-0.3743            3.5906+-0.0210          might be 1.0491x faster
   int-or-other-neg-then-get-by-val                   4.0292+-0.0946            4.0232+-0.0481        
   int-or-other-neg-zero-then-get-by-val             15.4873+-0.2871           15.3941+-0.3634        
   int-or-other-sub-then-get-by-val                   4.4399+-0.0638     ?      4.9272+-1.3356        ? might be 1.1098x slower
   int-or-other-sub                                   3.5676+-0.3613            3.5228+-0.2065          might be 1.0127x faster
   int-overflow-local                                 4.1893+-0.0644            4.1551+-0.2189        
   Int16Array-alloc-long-lived                       44.2084+-2.2414           43.8012+-1.7323        
   Int16Array-bubble-sort-with-byteLength            17.0721+-0.3860     ?     17.7695+-1.0668        ? might be 1.0409x slower
   Int16Array-bubble-sort                            17.2626+-0.5675           17.0603+-0.6985          might be 1.0119x faster
   Int16Array-load-int-mul                            1.4516+-0.0427            1.4165+-0.0257          might be 1.0247x faster
   Int16Array-to-Int32Array-set                      46.5985+-0.8995     ?     46.7547+-1.3430        ?
   Int32Array-alloc-large                            12.7055+-0.5091           11.8613+-0.6303          might be 1.0712x faster
   Int32Array-alloc-long-lived                       49.6554+-1.5494     ?     50.8830+-1.8546        ? might be 1.0247x slower
   Int32Array-alloc                                   2.7910+-0.1046     ?      2.8538+-0.1940        ? might be 1.0225x slower
   Int32Array-Int8Array-view-alloc                    5.9813+-0.2810            5.9479+-0.2033        
   int52-spill                                        5.0186+-0.4853     ?      5.0725+-0.4319        ? might be 1.0108x slower
   Int8Array-alloc-long-lived                        38.9891+-1.0691           38.9712+-2.1454        
   Int8Array-load-with-byteLength                     3.3771+-0.0405     ?      3.3974+-0.1036        ?
   Int8Array-load                                     3.4644+-0.1823            3.3455+-0.0414          might be 1.0355x faster
   integer-divide                                    10.5848+-0.2645           10.5504+-0.1567        
   integer-modulo                                     1.5983+-0.0338     ?      1.6536+-0.0727        ? might be 1.0346x slower
   is-boolean-fold-tricky                             4.0402+-0.4465     ?      4.4872+-0.9485        ? might be 1.1106x slower
   is-boolean-fold                                    2.6333+-0.0388     ?      2.6595+-0.1004        ?
   is-function-fold-tricky-internal-function   
                                                      9.6568+-0.3282            9.5403+-0.0897          might be 1.0122x faster
   is-function-fold-tricky                            4.0558+-0.0731     ?      4.1082+-0.1640        ? might be 1.0129x slower
   is-function-fold                                   2.7643+-0.0873            2.7070+-0.0595          might be 1.0212x faster
   is-number-fold-tricky                              3.9536+-0.0660     ?      4.1056+-0.2635        ? might be 1.0385x slower
   is-number-fold                                     2.7815+-0.2939            2.7009+-0.1872          might be 1.0298x faster
   is-object-or-null-fold-functions                   2.7959+-0.2466            2.7924+-0.1465        
   is-object-or-null-fold-less-tricky                 4.3097+-0.4410            4.1196+-0.1681          might be 1.0462x faster
   is-object-or-null-fold-tricky                      4.8532+-0.1343            4.7555+-0.0943          might be 1.0205x faster
   is-object-or-null-fold                             2.7116+-0.0738            2.6685+-0.0786          might be 1.0162x faster
   is-object-or-null-trickier-function                4.1107+-0.1492     ?      4.2516+-0.4581        ? might be 1.0343x slower
   is-object-or-null-trickier-internal-function   
                                                     10.0491+-0.5861            9.9183+-0.1272          might be 1.0132x faster
   is-object-or-null-tricky-function                  4.0696+-0.0884            4.0573+-0.1700        
   is-object-or-null-tricky-internal-function   
                                                      7.4354+-0.1419            7.3461+-0.1194          might be 1.0122x faster
   is-string-fold-tricky                              4.0400+-0.1378     ?      4.0738+-0.2662        ?
   is-string-fold                                     2.6884+-0.0687     ?      2.7592+-0.3716        ? might be 1.0263x slower
   is-undefined-fold-tricky                           3.3643+-0.0594            3.3560+-0.0872        
   is-undefined-fold                                  2.6586+-0.0524            2.6198+-0.0445          might be 1.0148x faster
   JSONP-negative-0                                   0.2688+-0.0079            0.2627+-0.0041          might be 1.0231x faster
   large-int-captured                                 4.1377+-0.2017     ?      4.1429+-0.2099        ?
   large-int-neg                                     13.8068+-0.1200     ?     14.3209+-0.7079        ? might be 1.0372x slower
   large-int                                         13.9402+-1.7282           12.9689+-0.3042          might be 1.0749x faster
   load-varargs-elimination                          21.2208+-0.5804     ?     21.6619+-1.2784        ? might be 1.0208x slower
   logical-not-weird-types                            3.2771+-0.3790            3.0846+-0.0641          might be 1.0624x faster
   logical-not                                        4.4227+-0.2487     ?      4.4514+-0.1428        ?
   lots-of-fields                                     9.4247+-0.1255     ?      9.6725+-0.4586        ? might be 1.0263x slower
   make-indexed-storage                               2.8269+-0.2628     ?      2.8608+-0.1166        ? might be 1.0120x slower
   make-rope-cse                                      3.7188+-0.2033            3.6674+-0.1780          might be 1.0140x faster
   marsaglia-larger-ints                             31.6071+-0.9254     ?     32.5273+-0.6382        ? might be 1.0291x slower
   marsaglia-osr-entry                               21.3696+-0.4741           21.2575+-0.5215        
   math-with-out-of-bounds-array-values              23.0017+-2.3480           22.0313+-0.6312          might be 1.0440x faster
   max-boolean                                        2.6856+-0.1890     ?      2.7325+-0.2211        ? might be 1.0175x slower
   method-on-number                                  15.8340+-0.7280     ?     16.3352+-1.0623        ? might be 1.0317x slower
   min-boolean                                        2.6321+-0.1033     ?      2.6671+-0.0446        ? might be 1.0133x slower
   minus-boolean-double                               3.1414+-0.1139            3.0815+-0.0705          might be 1.0194x faster
   minus-boolean                                      2.2920+-0.0310     ?      2.3361+-0.0461        ? might be 1.0192x slower
   misc-strict-eq                                    29.8756+-1.8244           28.9079+-1.1970          might be 1.0335x faster
   mod-boolean-double                                11.1180+-0.3029     ?     11.1245+-0.2319        ?
   mod-boolean                                        8.2754+-0.0701     ?      8.3216+-0.1387        ?
   mul-boolean-double                                 3.5654+-0.0380     ?      3.6327+-0.1091        ? might be 1.0189x slower
   mul-boolean                                        2.8574+-0.1342            2.8425+-0.1102        
   neg-boolean                                        3.1075+-0.0506     ?      3.1133+-0.0671        ?
   negative-zero-divide                               0.3614+-0.0186     ?      0.3620+-0.0291        ?
   negative-zero-modulo                               0.3614+-0.0235            0.3545+-0.0224          might be 1.0197x faster
   negative-zero-negate                               0.3610+-0.0508     ?      0.3924+-0.0994        ? might be 1.0869x slower
   nested-function-parsing                           46.0582+-1.7525           44.8082+-0.7812          might be 1.0279x faster
   new-array-buffer-dead                             87.1425+-1.1341     ?     87.3285+-1.0857        ?
   new-array-buffer-push                              6.2414+-0.1277     ^      5.9586+-0.1353        ^ definitely 1.0475x faster
   new-array-dead                                    15.0419+-1.2656     ?     15.3648+-0.9850        ? might be 1.0215x slower
   new-array-push                                     3.5266+-0.1785     ?      3.5428+-0.1759        ?
   no-inline-constructor                             32.2248+-2.1379           31.8924+-0.6323          might be 1.0104x faster
   number-test                                        3.0379+-0.1151            2.9426+-0.0454          might be 1.0324x faster
   object-closure-call                                4.8942+-0.1425            4.8926+-0.1294        
   object-get-own-property-symbols-on-large-array   
                                                      4.2146+-0.2680     ?      4.4674+-0.3774        ? might be 1.0600x slower
   object-test                                        2.8049+-0.1842            2.6994+-0.0494          might be 1.0391x faster
   obvious-sink-pathology-taken                      97.6006+-0.8770           97.1767+-0.5023        
   obvious-sink-pathology                            94.2789+-1.9898           93.1511+-0.8862          might be 1.0121x faster
   obviously-elidable-new-object                     28.2867+-0.1326     ?     29.1574+-1.0571        ? might be 1.0308x slower
   plus-boolean-arith                                 2.4623+-0.2054            2.4366+-0.0787          might be 1.0105x faster
   plus-boolean-double                                3.1322+-0.1065     ?      3.3038+-0.4414        ? might be 1.0548x slower
   plus-boolean                                       2.5090+-0.0250     ?      2.5255+-0.0870        ?
   poly-chain-access-different-prototypes-simple   
                                                      2.5910+-0.0549            2.5745+-0.0301        
   poly-chain-access-different-prototypes             2.5792+-0.1002            2.5695+-0.0598        
   poly-chain-access-simpler                          2.6056+-0.0629     ?      2.6136+-0.0819        ?
   poly-chain-access                                  2.7990+-0.6401            2.5105+-0.0221          might be 1.1149x faster
   poly-stricteq                                     49.6692+-0.4842     ?     55.6442+-13.8948       ? might be 1.1203x slower
   polymorphic-array-call                             1.4929+-0.4210            1.2919+-0.0591          might be 1.1556x faster
   polymorphic-get-by-id                              2.9199+-0.0530     ^      2.8218+-0.0448        ^ definitely 1.0348x faster
   polymorphic-put-by-id                             28.7738+-1.7848           28.6796+-0.6784        
   polymorphic-put-by-val-with-string                28.6008+-0.5340     ?     28.9431+-1.1197        ? might be 1.0120x slower
   polymorphic-put-by-val-with-symbol                29.0771+-0.9018           28.9566+-0.8700        
   polymorphic-structure                             12.6724+-0.3233     ?     12.9382+-0.7359        ? might be 1.0210x slower
   polyvariant-monomorphic-get-by-id                  6.6721+-0.8679            6.5370+-0.7611          might be 1.0207x faster
   proto-getter-access                                8.5610+-0.3118            8.2610+-0.1093          might be 1.0363x faster
   prototype-access-with-mutating-prototype           5.6252+-0.3409            5.4015+-0.2085          might be 1.0414x faster
   put-by-id-replace-and-transition                   8.3721+-0.9416            7.8046+-0.6490          might be 1.0727x faster
   put-by-id-slightly-polymorphic                     2.6907+-0.0318     ?      2.7278+-0.0755        ? might be 1.0138x slower
   put-by-id                                          9.8219+-0.3858     ?      9.9038+-0.6997        ?
   put-by-val-direct                                  0.3461+-0.0074     ?      0.3505+-0.0323        ? might be 1.0126x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.7254+-1.0220            5.2243+-0.1981          might be 1.0959x faster
   put-by-val-machine-int                             2.6129+-0.3076            2.5913+-0.2597        
   put-by-val-with-string-replace-and-transition   
                                                     10.1685+-0.3246     ?     10.3546+-0.6364        ? might be 1.0183x slower
   put-by-val-with-string-slightly-polymorphic   
                                                      2.9602+-0.0887            2.9180+-0.0523          might be 1.0144x faster
   put-by-val-with-string                            11.0256+-0.9660           10.6586+-0.5903          might be 1.0344x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     12.4900+-0.6244           11.8240+-0.4416          might be 1.0563x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.2466+-0.1047            3.1809+-0.2097          might be 1.0206x faster
   put-by-val-with-symbol                            10.7421+-0.6236           10.6057+-0.4282          might be 1.0129x faster
   rare-osr-exit-on-local                            13.8312+-0.6586           13.6232+-0.2965          might be 1.0153x faster
   raytrace-with-empty-try-catch                      5.1590+-0.0643            5.1391+-0.0858        
   raytrace-with-try-catch                            9.7299+-0.3897            9.6760+-0.2434        
   register-pressure-from-osr                        16.5949+-0.3654     ?     16.7685+-0.5873        ? might be 1.0105x slower
   repeat-multi-get-by-offset                        22.5227+-0.8433           22.3675+-0.7096        
   richards-empty-try-catch                          71.4288+-1.2260     ?     71.6728+-1.0041        ?
   richards-try-catch                               240.0627+-2.6876     ?    240.5556+-2.6201        ?
   setter-prototype                                   7.9257+-0.4645            7.7866+-0.1681          might be 1.0179x faster
   setter                                             5.4897+-0.5757            5.3991+-0.3440          might be 1.0168x faster
   simple-activation-demo                            24.2365+-0.4555     ?     24.3664+-0.4252        ?
   simple-getter-access                              10.8269+-0.4423           10.5677+-0.1460          might be 1.0245x faster
   simple-poly-call-nested                            8.6704+-0.5589            8.4938+-0.4793          might be 1.0208x faster
   simple-poly-call                                   1.3341+-0.1199            1.3026+-0.0630          might be 1.0242x faster
   sin-boolean                                       20.6515+-2.2220     ?     22.0121+-1.0249        ? might be 1.0659x slower
   singleton-scope                                   64.7460+-1.5284           64.4886+-2.1514        
   sink-function                                     10.8657+-1.1257            9.8303+-0.5982          might be 1.1053x faster
   sink-huge-activation                              16.5463+-1.0321     ?     16.7145+-0.5121        ? might be 1.0102x slower
   sinkable-new-object-dag                           54.0730+-1.6744     ?     54.9810+-2.4462        ? might be 1.0168x slower
   sinkable-new-object-taken                         43.2450+-1.3448     ?     44.3234+-0.8218        ? might be 1.0249x slower
   sinkable-new-object                               31.1006+-1.1597           29.9820+-0.8261          might be 1.0373x faster
   slow-array-profile-convergence                     2.4516+-0.0745     ?      2.5560+-0.2229        ? might be 1.0426x slower
   slow-convergence                                   2.4669+-0.0899            2.3860+-0.0652          might be 1.0339x faster
   slow-ternaries                                    17.1816+-1.6717           17.1423+-0.9354        
   sorting-benchmark                                 17.2404+-0.8120           17.1263+-0.6911        
   sparse-conditional                                 1.1912+-0.0304     ?      1.2350+-0.1090        ? might be 1.0368x slower
   splice-to-remove                                  13.7700+-2.6283           12.6535+-1.1839          might be 1.0882x faster
   string-char-code-at                               13.5191+-0.5265           13.3484+-0.1732          might be 1.0128x faster
   string-concat-object                               2.1649+-0.1478            2.1474+-0.1463        
   string-concat-pair-object                          2.3177+-0.3155            2.2336+-0.4062          might be 1.0377x faster
   string-concat-pair-simple                          9.5923+-0.6330            9.3040+-0.5367          might be 1.0310x faster
   string-concat-simple                               9.4160+-0.4654     ?      9.7839+-0.4784        ? might be 1.0391x slower
   string-cons-repeat                                 6.5054+-0.1950     ?      6.6885+-0.7409        ? might be 1.0281x slower
   string-cons-tower                                  6.8825+-0.3827            6.7255+-0.2373          might be 1.0234x faster
   string-equality                                   16.0033+-0.5527           15.9103+-0.4774        
   string-get-by-val-big-char                         6.4983+-0.0347     ?      6.5711+-0.2415        ? might be 1.0112x slower
   string-get-by-val-out-of-bounds-insane             3.2128+-0.2055     ?      3.3199+-0.2487        ? might be 1.0333x slower
   string-get-by-val-out-of-bounds                    3.9150+-0.0430            3.9109+-0.0850        
   string-get-by-val                                  2.8292+-0.0477     ?      2.8833+-0.1644        ? might be 1.0191x slower
   string-hash                                        1.8820+-0.0602     ?      1.9810+-0.2069        ? might be 1.0526x slower
   string-long-ident-equality                        13.8180+-0.7171           13.3218+-0.0842          might be 1.0372x faster
   string-out-of-bounds                              10.0782+-0.3687     ?     10.1044+-0.2383        ?
   string-repeat-arith                               27.1922+-0.8296     ?     27.3212+-0.6057        ?
   string-sub                                        57.6866+-0.9155           56.0896+-1.4230          might be 1.0285x faster
   string-test                                        2.9153+-0.0992            2.8909+-0.1227        
   string-var-equality                               25.2272+-0.6088     ?     25.5974+-0.9382        ? might be 1.0147x slower
   structure-hoist-over-transitions                   2.4672+-0.1388     ?      2.4710+-0.2664        ?
   substring-concat-weird                            37.1443+-1.3278           35.3100+-1.0507          might be 1.0519x faster
   substring-concat                                  40.7573+-1.3957           39.4852+-0.6337          might be 1.0322x faster
   substring                                         47.0482+-3.1126           44.3248+-1.0851          might be 1.0614x faster
   switch-char-constant                               2.6973+-0.0613            2.6801+-0.0489        
   switch-char                                        6.2025+-1.1381            5.9524+-0.8789          might be 1.0420x faster
   switch-constant                                    8.0628+-0.7123     ?      9.1995+-0.7118        ? might be 1.1410x slower
   switch-string-basic-big-var                       14.5237+-0.3834     ?     15.0274+-0.5842        ? might be 1.0347x slower
   switch-string-basic-big                           14.8190+-0.4240           14.7414+-0.2969        
   switch-string-basic-var                           13.4558+-0.1768           13.4253+-0.3476        
   switch-string-basic                               12.6992+-0.3720     ?     12.7307+-0.1929        ?
   switch-string-big-length-tower-var                17.7322+-0.2089     ?     17.9560+-0.4572        ? might be 1.0126x slower
   switch-string-length-tower-var                    13.2358+-0.3962           13.0722+-0.1990          might be 1.0125x faster
   switch-string-length-tower                        11.9363+-0.8678           11.6822+-0.3919          might be 1.0218x faster
   switch-string-short                               11.5517+-0.2554     ?     11.5911+-0.5493        ?
   switch                                            10.9414+-0.8863     ?     11.0668+-0.5149        ? might be 1.0115x slower
   tear-off-arguments-simple                          3.2044+-0.1472     ?      3.3293+-0.4550        ? might be 1.0390x slower
   tear-off-arguments                                 4.0836+-0.1468     ?      4.0863+-0.1065        ?
   temporal-structure                                12.0022+-0.3724           11.8212+-0.2178          might be 1.0153x faster
   to-int32-boolean                                  12.5948+-0.2769     ?     12.6905+-0.3593        ?
   try-catch-get-by-val-cloned-arguments              9.8086+-0.7155     ^      8.6825+-0.1514        ^ definitely 1.1297x faster
   try-catch-get-by-val-direct-arguments              2.1390+-0.0464            2.1098+-0.0765          might be 1.0138x faster
   try-catch-get-by-val-scoped-arguments              5.2287+-0.6336            4.4707+-0.1637          might be 1.1695x faster
   typed-array-get-set-by-val-profiling              27.9480+-1.1315           27.6592+-1.8256          might be 1.0104x faster
   undefined-property-access                        218.2427+-2.5404     ?    220.4834+-6.3676        ? might be 1.0103x slower
   undefined-test                                     2.9820+-0.0675     ?      3.0326+-0.0826        ? might be 1.0170x slower
   unprofiled-licm                                    9.4400+-0.3615     ?      9.6808+-0.1971        ? might be 1.0255x slower
   v8-raytrace-with-empty-try-catch                  23.8667+-0.4489     ?     23.8987+-0.6537        ?
   v8-raytrace-with-try-catch                        61.7437+-1.5290           61.5888+-1.3124        
   varargs-call                                      12.9170+-0.1239     ?     13.3928+-0.6767        ? might be 1.0368x slower
   varargs-construct-inline                          21.9964+-0.5430           21.6513+-0.1792          might be 1.0159x faster
   varargs-construct                                 21.1176+-1.3044           20.5968+-0.6737          might be 1.0253x faster
   varargs-inline                                     8.9554+-0.2950            8.8878+-0.3057        
   varargs-strict-mode                               10.3496+-0.3477           10.0535+-0.3420          might be 1.0294x faster
   varargs                                            9.9292+-0.4225     ?     10.1880+-0.6549        ? might be 1.0261x slower
   weird-inlining-const-prop                          2.2309+-0.1719            2.1445+-0.1309          might be 1.0403x faster

   &lt;geometric&gt;                                        8.1312+-0.0275            8.1041+-0.0278          might be 1.0033x faster

                                                        TipOfTree                  TriColor                                     
AsmBench:
   bigfib.cpp                                       449.5492+-7.8754     ?    456.4398+-10.8070       ? might be 1.0153x slower
   cray.c                                           402.1510+-18.9684         394.0226+-2.5497          might be 1.0206x faster
   dry.c                                            426.5391+-9.2430     ?    428.8692+-5.9365        ?
   FloatMM.c                                        687.0702+-4.0184     ?    687.6744+-6.0178        ?
   gcc-loops.cpp                                   3429.0258+-16.9937    ?   3464.4847+-55.7043       ? might be 1.0103x slower
   n-body.c                                         826.8549+-5.2508     ?    831.4011+-12.1747       ?
   Quicksort.c                                      411.9503+-7.5021          410.5385+-6.0766        
   stepanov_container.cpp                          3494.4157+-14.5683    ?   3506.8671+-27.2035       ?
   Towers.c                                         233.6331+-2.1049     ?    234.5983+-1.6373        ?

   &lt;geometric&gt;                                      717.5854+-5.6822     ?    719.3264+-2.9876        ? might be 1.0024x slower

                                                        TipOfTree                  TriColor                                     
CompressionBench:
   huffman                                           60.0215+-0.9570     ?     60.8060+-1.5299        ? might be 1.0131x slower
   arithmetic-simple                                275.0800+-5.5952          273.7597+-1.9602        
   arithmetic-precise                               244.3621+-1.8822          243.2103+-2.2156        
   arithmetic-complex-precise                       246.4117+-3.3482          245.0443+-1.6238        
   arithmetic-precise-order-0                       283.7094+-6.2338     ?    284.0113+-4.5331        ?
   arithmetic-precise-order-1                       299.0874+-1.2183     ?    300.1118+-2.5525        ?
   arithmetic-precise-order-2                       349.4418+-6.8891          346.4324+-4.5304        
   arithmetic-simple-order-1                        322.9844+-3.3686     ?    323.0703+-5.9924        ?
   arithmetic-simple-order-2                        371.5699+-5.0421     ?    375.3353+-7.0821        ? might be 1.0101x slower
   lz-string                                        312.1509+-7.1869          307.5258+-7.3850          might be 1.0150x faster

   &lt;geometric&gt;                                      253.6698+-2.1817          253.3874+-0.9171          might be 1.0011x faster

                                                        TipOfTree                  TriColor                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   50.2563+-0.1850           50.0593+-0.2064          might be 1.0039x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130481</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-03 20:52:16 -0700</bug_when>
    <thetext>Debug layout tests pass.

I&apos;m pretty sure this change is sound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130645</commentid>
    <comment_count>8</comment_count>
      <attachid>262382</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-05 10:15:29 -0700</bug_when>
    <thetext>Comment on attachment 262382
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:31
&gt; +        v is while, turn o grey again. This is like remembering an object, in the sense that our gen GC

v is white

&gt; Source/JavaScriptCore/ChangeLog:36
&gt; +        generational, and we want to basically keep our current barriers unchanged. The only thing missing

things missing

&gt; Source/JavaScriptCore/ChangeLog:68
&gt; +              we transitioned from MarkedAndRemembered to Marked at the bittern end of GC.

bitter end

&gt; Source/JavaScriptCore/ChangeLog:84
&gt; +          no longer as the cell for its state - instead they use the saved pre-visiting state.

ask the cell

&gt; Source/JavaScriptCore/ChangeLog:112
&gt; +        this kind of collector is that collector termination will rescan the stack. Termination is reached
&gt; +        only if the at-termination re-scan greys no objects. This means that the collector is a fixpoint.
&gt; +        Luckily, our collector is already a fixpoint because of opaque roots and structure transitions.

I would argue that we should consider these fixpoints to be separate, with the stack fixpoint running first. It should be impossible for the opaque root scan or the weak pointer scan to add roots to the stack.

&gt; Source/JavaScriptCore/heap/CellState.h:54
&gt; +    // The object is grey - i.e. it will be scanned - but it either belongs to old gen (if this is eden
&gt; +    // GC) or it is grey a second time in this current GC (because a concurrent store barrier requested
&gt; +    // re-greying).
&gt; +    OldGrey = 2,
&gt; +
&gt; +    // The object is grey - i.e. it will be scanned - and this is the first time in this GC that we are
&gt; +    // going to scan it. If this is an eden GC, this also means that the object is in eden.
&gt; +    NewGrey = 3

The US English spelling is &quot;Gray&quot;. So, you have to ask yourself: Am I writing an American GC or a European GC?

&gt; Source/JavaScriptCore/heap/Heap.h:168
&gt; +    void reportExtraMemoryVisited(CellState dataBeforeVisiting, size_t);

cellStateBeforeVisiting

&gt; Source/JavaScriptCore/heap/HeapInlines.h:129
&gt; +inline void Heap::reportExtraMemoryVisited(CellState dataBeforeVisiting, size_t size)

cellStateBeforeVisiting

&gt; Source/JavaScriptCore/heap/SlotVisitor.h:117
&gt; +    CellState dataBeforeVisitingCurrentObject() const { return m_dataBeforeVisiting; }

currentObjectCellStateBeforeVisiting

&gt; Source/JavaScriptCore/heap/SlotVisitor.h:158
&gt; +    CellState m_dataBeforeVisiting { CellState::NewWhite };

m_currentObjectCellStateBeforeVisiting

&gt; Source/JavaScriptCore/runtime/JSCell.h:159
&gt; +    // directly. We deliberately avoid helpers for this, because we don&apos;t want transparency about how the

I think you mean that we do want transparency and we don&apos;t want abstraction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130653</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-05 10:25:13 -0700</bug_when>
    <thetext>BTW, I think I just merge conflicted with the SlotVisitor part of this patch. But the delta should be trivial, with no change in behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130658</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-05 10:34:51 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 262382 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=262382&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:31
&gt; &gt; +        v is while, turn o grey again. This is like remembering an object, in the sense that our gen GC
&gt; 
&gt; v is white

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:36
&gt; &gt; +        generational, and we want to basically keep our current barriers unchanged. The only thing missing
&gt; 
&gt; things missing

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:68
&gt; &gt; +              we transitioned from MarkedAndRemembered to Marked at the bittern end of GC.
&gt; 
&gt; bitter end

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:84
&gt; &gt; +          no longer as the cell for its state - instead they use the saved pre-visiting state.
&gt; 
&gt; ask the cell

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:112
&gt; &gt; +        this kind of collector is that collector termination will rescan the stack. Termination is reached
&gt; &gt; +        only if the at-termination re-scan greys no objects. This means that the collector is a fixpoint.
&gt; &gt; +        Luckily, our collector is already a fixpoint because of opaque roots and structure transitions.
&gt; 
&gt; I would argue that we should consider these fixpoints to be separate, with
&gt; the stack fixpoint running first. It should be impossible for the opaque
&gt; root scan or the weak pointer scan to add roots to the stack.

I don&apos;t see how that would work.  Here&apos;s the combined fixpoint:

for (;;) {
    resume mutator;
    do some concurrent marking;
    suspend mutator;
    mark stacks;
    visit weak references; // this may mark things we previously thought were white
    if (no new things marked)
        break;
}

There is no way to make this two fixpoints.  Let&apos;s consider your proposal, where the stack fixpoint converges first:

for (;;) {
    resume mutator;
    do some concurrent marking;
    suspend mutator;
    mark stacks;
    if (no new things marked)
        break;
}
for (;;) {
    resume mutator;
    do some concurrent marking;
    suspend mutator;
    visit weak references;
    if (no new things marked)
        break;
}

This will fail to mark things because during concurrent mutator execution in the second fixpoint, the mutator may load white things onto the stack.

If the write barrier requires a grey stack, then you *must* rescan the stack after any concurrent execution that occurred before the collector reached termination.

Also, the other ordering of the fixpoints (converge weak first, then stack) would be wrong, because concurrent execution may cause weak references to have different opinions about liveness.  So, after any mutator execution that occurs before collector terminatin, you have to re-ask all of the weak references what they think about the world.

So, this fixpoint has to be unified.  And that&apos;s as it should be - it&apos;s super rare that it&apos;s correct to take a fixpoint and split it into two fixpoints that execute in sequence.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CellState.h:54
&gt; &gt; +    // The object is grey - i.e. it will be scanned - but it either belongs to old gen (if this is eden
&gt; &gt; +    // GC) or it is grey a second time in this current GC (because a concurrent store barrier requested
&gt; &gt; +    // re-greying).
&gt; &gt; +    OldGrey = 2,
&gt; &gt; +
&gt; &gt; +    // The object is grey - i.e. it will be scanned - and this is the first time in this GC that we are
&gt; &gt; +    // going to scan it. If this is an eden GC, this also means that the object is in eden.
&gt; &gt; +    NewGrey = 3
&gt; 
&gt; The US English spelling is &quot;Gray&quot;. So, you have to ask yourself: Am I
&gt; writing an American GC or a European GC?

I guess I chose European?

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.h:168
&gt; &gt; +    void reportExtraMemoryVisited(CellState dataBeforeVisiting, size_t);
&gt; 
&gt; cellStateBeforeVisiting

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/HeapInlines.h:129
&gt; &gt; +inline void Heap::reportExtraMemoryVisited(CellState dataBeforeVisiting, size_t size)
&gt; 
&gt; cellStateBeforeVisiting

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SlotVisitor.h:117
&gt; &gt; +    CellState dataBeforeVisitingCurrentObject() const { return m_dataBeforeVisiting; }
&gt; 
&gt; currentObjectCellStateBeforeVisiting

Removed this method.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SlotVisitor.h:158
&gt; &gt; +    CellState m_dataBeforeVisiting { CellState::NewWhite };
&gt; 
&gt; m_currentObjectCellStateBeforeVisiting

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSCell.h:159
&gt; &gt; +    // directly. We deliberately avoid helpers for this, because we don&apos;t want transparency about how the
&gt; 
&gt; I think you mean that we do want transparency and we don&apos;t want abstraction.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130671</commentid>
    <comment_count>11</comment_count>
      <attachid>262448</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-05 11:18:27 -0700</bug_when>
    <thetext>Created attachment 262448
patch for landing

Rebased against Geoff&apos;s SlotVisitor rewrite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130676</commentid>
    <comment_count>12</comment_count>
      <attachid>262451</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-05 11:29:09 -0700</bug_when>
    <thetext>Created attachment 262451
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130707</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-05 12:36:27 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/190569</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131169</commentid>
    <comment_count>14</comment_count>
      <attachid>262451</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-10-06 17:27:45 -0700</bug_when>
    <thetext>Comment on attachment 262451
patch for landing

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

&gt; Source/JavaScriptCore/heap/SlotVisitor.cpp:381
&gt;      LockHolder locker(&amp;block-&gt;workListLock());
&gt; -    if (heap()-&gt;operationInProgress() == FullCollection || block-&gt;shouldReportLiveBytes(locker, owner)) {
&gt; +    // We always report live bytes, except if during an eden collection we see an old object pointing to an
&gt; +    // old backing store and the old object is being marked because of the remembered set. Note that if we
&gt; +    // ask the object itself, it will always tell us that it&apos;s an old black object - because even during an
&gt; +    // eden collection we have already indicated that the object is old. That&apos;s why we use the
&gt; +    // SlotVisitor&apos;s cache of the object&apos;s old state.
&gt; +    if (heap()-&gt;operationInProgress() == FullCollection
&gt; +        || !block-&gt;isOld()
&gt; +        || m_currentObjectCellStateBeforeVisiting != CellState::OldGrey) {

Can we only take the workListLock inside the if block? The conditions don&apos;t seem to depend on it (like they did before the changes), only CopiedBlock::reportLiveBytes ends up modifying the worklist.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262137</attachid>
            <date>2015-09-29 20:44:03 -0700</date>
            <delta_ts>2015-09-30 20:52:44 -0700</delta_ts>
            <desc>a very rough start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>9015</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDTG9nZ2luZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NMb2dnaW5nLmNwcAkocmV2aXNpb24g
MTkwMzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NMb2dnaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgZm9yIChjb25z
dCBKU0NlbGwqIGNlbGwgOiBtX3NhdmVkTWFya1N0YWNrKSB7CiAgICAgICAgICAgICBtX3Nsb3RW
aXNpdG9yLm1hcmtTdGFjaygpLmFwcGVuZChjZWxsKTsKLSAgICAgICAgICAgIGNvbnN0X2Nhc3Q8
SlNDZWxsKj4oY2VsbCktPnNldFJlbWVtYmVyZWQodHJ1ZSk7CisgICAgICAgICAgICBjZWxsLT5z
ZXRHQ0RhdGEoSlNDZWxsOjpNYXJrZWRBbmRSZW1lbWJlcmVkKTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE5MDMzNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OTksNyArNTk5LDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1l
LAogICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgog
ICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKIAotICAgIGNsZWFyUmVtZW1i
ZXJlZFNldChyZW1lbWJlcmVkU2V0KTsKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsKICAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0ID0gdHJ1ZTsKQEAgLTg1NSwxMyArODU0LDYgQEAgdm9pZCBIZWFwOjp2aXNpdFdlYWtI
YW5kbGVzKEhlYXBSb290VmlzaQogICAgIH0KIH0KIAotdm9pZCBIZWFwOjpjbGVhclJlbWVtYmVy
ZWRTZXQoVmVjdG9yPGNvbnN0IEpTQ2VsbCo+JiByZW1lbWJlcmVkU2V0KQotewotICAgIEdDUEhB
U0UoQ2xlYXJSZW1lbWJlcmVkU2V0KTsKLSAgICBmb3IgKGF1dG8qIGNlbGwgOiByZW1lbWJlcmVk
U2V0KQotICAgICAgICBjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLT5zZXRSZW1lbWJlcmVkKGZh
bHNlKTsKLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRU
aW1lKQogewogICAgIEdDQ09VTlRFUihWaXNpdGVkVmFsdWVDb3VudCwgbV9zbG90VmlzaXRvci52
aXNpdENvdW50KCkpOwpAQCAtMTAxNyw3ICsxMDA5LDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVt
YmVyZWRTZXQoY29uc3QgSlNDZQogICAgIEFTU0VSVCghT3B0aW9uczo6ZW5hYmxlQ29uY3VycmVu
dEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIGlmIChpc1JlbWVtYmVyZWQo
Y2VsbCkpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLT5z
ZXRSZW1lbWJlcmVkKHRydWUpOworICAgIGNlbGwtPnNldEdDRGF0YShKU0NlbGw6Ok1hcmtlZEFu
ZFJlbWVtYmVyZWQpOwogICAgIG1fc2xvdFZpc2l0b3IudW5jb25kaXRpb25hbGx5QXBwZW5kKGNv
bnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCShyZXZpc2lvbiAxOTAzMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw3ICszMTAsNiBAQCBwcml2YXRlOgogICAgIHZv
aWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7CiAgICAgdm9pZCBjb252ZXJn
ZSgpOwogICAgIHZvaWQgdmlzaXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2
b2lkIGNsZWFyUmVtZW1iZXJlZFNldChWZWN0b3I8Y29uc3QgSlNDZWxsKj4mKTsKICAgICB2b2lk
IHVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgcmVzZXRW
aXNpdG9ycygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgJKHJldmlzaW9uIDE5MDMzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMywxMCArMTEzLDggQEAgaW5saW5lIHZvaWQg
SGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQwogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BS
T0ZJTElORykKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJhcnJpZXIoKTsK
ICNlbmRpZgotICAgIGlmICghZnJvbSB8fCAhZnJvbS0+aXNNYXJrZWQoKSkgewotICAgICAgICBB
U1NFUlQoIWZyb20gfHwgIWlzTWFya2VkKGZyb20pKTsKKyAgICBpZiAoIWZyb20gfHwgZnJvbS0+
aXNVbm1hcmtlZE9yUmVtZW1iZXJlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIGlm
ICghdG8gfHwgdG8tPmlzTWFya2VkKCkpIHsKICAgICAgICAgQVNTRVJUKCF0byB8fCBpc01hcmtl
ZCh0bykpOwogICAgICAgICByZXR1cm47CkBAIC0xMjcsMTEgKzEyNSw4IEBAIGlubGluZSB2b2lk
IEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0MKIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFy
cmllcihjb25zdCBKU0NlbGwqIGZyb20pCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19W
QUxJRChjb25zdF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKLSAgICBpZiAoIWZyb20gfHwgIWZyb20t
PmlzTWFya2VkKCkpIHsKLSAgICAgICAgQVNTRVJUKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSk7
CisgICAgaWYgKCFmcm9tIHx8IGZyb20tPmlzVW5tYXJrZWRPclJlbWVtYmVyZWQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQoaXNNYXJrZWQoZnJvbSkpOwogICAgIGFkZFRv
UmVtZW1iZXJlZFNldChmcm9tKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMTkwMzM0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAw
LDkgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKAogICAgIFN0YWNr
U3RhdHM6OnByb2JlKCk7CiAKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOworICAg
IEFTU0VSVChjZWxsLT5nY0RhdGEoKSA9PSBKU0NlbGw6Ok1hcmtlZEFuZFJlbWVtYmVyZWQpOwor
ICAgIAorICAgIGNlbGwtPnNldEdDRGF0YShKU0NlbGw6Ok1hcmtlZCk7CiAgICAgCiAgICAgaWYg
KGlzSlNTdHJpbmcoY2VsbCkpIHsKICAgICAgICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oY29u
c3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTkwMzM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OmludGVybmFsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjZWxsLT5zZXRNYXJr
ZWQoKTsKKyAgICBjZWxsLT5zZXRHQ0RhdGEoSlNDZWxsOjpNYXJrZWRBbmRSZW1lbWJlcmVkKTsK
ICAgICBtX2J5dGVzVmlzaXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNlbGxT
aXplKCk7CiAgICAgICAgIAogICAgIHVuY29uZGl0aW9uYWxseUFwcGVuZChjZWxsKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxOTAzMzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMTU1LDIyICsxNTUsMjYgQEAgcHVibGljOgogICAgIEpTVmFsdWUgZmFzdEdldE93blByb3Bl
cnR5KFZNJiwgU3RydWN0dXJlJiwgUHJvcGVydHlOYW1lKTsKIAogICAgIGVudW0gR0NEYXRhIDog
dWludDhfdCB7Ci0gICAgICAgIE1hcmtlZCA9IDAsIC8vIFRoZSBvYmplY3QgaGFzIHN1cnZpdmVk
IGEgR0MgYW5kIGlzIGluIHRoZSBvbGQgZ2VuLgotICAgICAgICBOb3RNYXJrZWQgPSAxLCAvLyBU
aGUgb2JqZWN0IGlzIG5ldyBhbmQgaW4gdGhlIGVkZW4gZ2VuLgotICAgICAgICBNYXJrZWRBbmRS
ZW1lbWJlcmVkID0gMiwgLy8gVGhlIG9iamVjdCBpcyBpbiB0aGUgR0MncyByZW1lbWJlcmVkIHNl
dC4KLQotICAgICAgICAvLyBUaGUgb2JqZWN0IGJlaW5nIGluIHRoZSBHQydzIHJlbWVtYmVyZWQg
c2V0IGltcGxpZXMgdGhhdCBpdCBpcyBhbHNvCi0gICAgICAgIC8vIE1hcmtlZC4gVGhpcyBpcyBi
ZWNhdXNlIG9iamVjdHMgYXJlIG9ubHkgYWRkZWQgdG8gdGhlIHJlbWVtYmVyZWQgc2V0cwotICAg
ICAgICAvLyBieSB3cml0ZSBiYXJyaWVycywgYW5kIHdyaXRlIGJhcnJpZXJzIGFyZSBvbmx5IGlu
dGVyZXN0ZWQgaW4gb2xkIGdlbgotICAgICAgICAvLyBvYmplY3RzIHRoYXQgcG9pbnQgdG8gcG90
ZW50aWFsIGVkZW4gZ2VuIG9iamVjdHMuCisgICAgICAgIC8vIFRoZSBvYmplY3QgaXMgYmxhY2sg
YXMgZmFyIGFzIHRoaXMgR0MgaXMgY29uY2VybmVkLiBXaGVuIG5vdCBpbiBHQywgdGhpcyBqdXN0
IG1lYW5zIHRoYXQgaXQncyBhbgorICAgICAgICAvLyBvbGQgZ2VuIG9iamVjdC4KKyAgICAgICAg
T2xkQmxhY2sgPSAwLAorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVu
LiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJr
ZWQgeWV0LgorICAgICAgICBOZXdXaGl0ZSA9IDEsCisKKyAgICAgICAgLy8gVGhlIG9iamVjdCBp
cyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0aGVyIGJlbG9uZ3Mg
dG8gb2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCisgICAgICAgIC8vIEdDKSBvciBpdCBpcyBncmV5
IGEgc2Vjb25kIHRpbWUgaW4gdGhpcyBjdXJyZW50IEdDIChiZWNhdXNlIGEgY29uY3VycmVudCBz
dG9yZSBiYXJyaWVyIHJlcXVlc3RlZAorICAgICAgICAvLyByZS1ncmV5aW5nKS4KKyAgICAgICAg
T2xkR3JleSA9IDIsCisKKyAgICAgICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3
aWxsIGJlIHNjYW5uZWQgLSBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBpbiB0aGlzIEdDIHRo
YXQgd2UgYXJlCisgICAgICAgIC8vIGdvaW5nIHRvIHNjYW4gaXQuIElmIHRoaXMgaXMgYW4gZWRl
biBHQywgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBlZGVuLgorICAgICAg
ICBOZXdHcmV5ID0gMwogICAgIH07CiAKLSAgICB2b2lkIHNldE1hcmtlZCgpIHsgbV9nY0RhdGEg
PSBNYXJrZWQ7IH0KLSAgICB2b2lkIHNldFJlbWVtYmVyZWQoYm9vbCByZW1lbWJlcmVkKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fZ2NEYXRhID09IChyZW1lbWJlcmVkID8gTWFya2VkIDogTWFy
a2VkQW5kUmVtZW1iZXJlZCkpOwotICAgICAgICBtX2djRGF0YSA9IHJlbWVtYmVyZWQgPyBNYXJr
ZWRBbmRSZW1lbWJlcmVkIDogTWFya2VkOyAKLSAgICB9CisgICAgR0NEYXRhIGdjRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEdDRGF0YT4obV9nY0RhdGEpOyB9CisgICAgdm9pZCBz
ZXRHQ0RhdGEoR0NEYXRhIGRhdGEpIGNvbnN0IHsgY29uc3RfY2FzdDxKU0NlbGwqPih0aGlzKS0+
bV9nY0RhdGEgPSBkYXRhOyB9CisKICAgICBib29sIGlzTWFya2VkKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAobV9nY0RhdGEpIHsKQEAgLTE4NCw2ICsxODgsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgYm9vbCBpc1JlbWVtYmVyZWQoKSBjb25z
dCB7IHJldHVybiBtX2djRGF0YSA9PSBNYXJrZWRBbmRSZW1lbWJlcmVkOyB9CisgICAgYm9vbCBp
c01hcmtlZEFuZE5vdFJlbWVtYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2djRGF0YSA9PSBNYXJr
ZWQ7IH0KKyAgICBib29sIGlzVW5tYXJrZWRPclJlbWVtYmVyZWQoKSBjb25zdCB7IHJldHVybiAh
aXNNYXJrZWRBbmROb3RSZW1lbWJlcmVkKCk7IH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3Ry
dWN0dXJlSURPZmZzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE5MDMzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw4
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6Y29weUJ1dHRlcmYKIAogQUxXQVlTX0lO
TElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwg
QnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKKyAgICBkYXRhTG9n
KCJWaXNpdGluZyBidXR0ZXJmbHkgaW4gIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIik7CisgICAg
CiAgICAgQVNTRVJUKGJ1dHRlcmZseSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB0aGlzLT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKTsKQEAgLTE2NSw2ICsxNjcsNyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzOwogICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSB0aGlzLT5o
YXNJbmRleGluZ0hlYWRlcigpOwogICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikp
IHsKKyAgICAgICAgZGF0YUxvZygiICAgIEhhcyBpbmRleGluZyBoZWFkZXIuXG4iKTsKICAgICAg
ICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5
KHN0cnVjdHVyZSk7CiAgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gYnV0dGVy
Zmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1
cmUpOwogICAgIH0gZWxzZSB7CkBAIC0xNzIsNiArMTc1LDcgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyA9IDA7CiAgICAgfQogICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIs
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBkYXRhTG9nKCJDYXBhY2l0eSBpbiBi
eXRlczogIiwgY2FwYWNpdHlJbkJ5dGVzLCAiXG4iKTsKIAogICAgIC8vIE1hcmsgdGhlIHByb3Bl
cnRpZXMuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7CkBAIC0yMTgsNiArMjIyLDggQEAgdm9p
ZCBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIAogewogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgZGF0YUxvZygiQ29weWluZyBi
YWNraW5nIHN0b3JlIGluICIsIFJhd1BvaW50ZXIodGhpc09iamVjdCksICJcbiIpOwogICAgIAog
ICAgIGlmICh0b2tlbiAhPSBCdXR0ZXJmbHlDb3B5VG9rZW4pCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYmFzaWMtZWRlbi1nYy10ZXN0
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYmFz
aWMtZWRlbi1nYy10ZXN0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9iYXNpYy1lZGVuLWdjLXRlc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0IEBACit2YXIgbyA9IHtmOjQyfTsKK2VkZW5HQygpOwordmFyIHAgPSB7Zjo0Mn07Citl
ZGVuR0MoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262227</attachid>
            <date>2015-09-30 20:52:44 -0700</date>
            <delta_ts>2015-10-03 15:30:14 -0700</delta_ts>
            <desc>what I&apos;m thinking so far</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37489</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTAzMzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw3IEBACiAJCTBGMThEM0QwMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMThEM0NFMUI1NUE2RTAwMDJD
NUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgfTsKIAkJMEYxOTBD
QUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUExODlEODJGNjAw
MEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovOyB9OwogCQkwRjE5MENBRDE4
OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUIxODlEODJGNjAwMEFFNUYw
IC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFD
M0REOTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxREQ4NEExOEE5NDVCRTAwMjZGM0ZBIC8q
IEpTQ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMUREODQ5MThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxRTNBNDYxNTM0Q0JBRjAw
MEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1
bWVudFBvc2l0aW9uLmggKi87IH07CiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdE
b3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRl
LmggKi87IH07CkBAIC0xOTYwLDYgKzE5NjEsNyBAQAogCQkwRjE4RDNDRTFCNTVBNkUwMDAyQzVD
OUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBwYXRoID0g
ZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJl
YXNvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVySmV0dGlzb25SZWFzb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE5MENBQjE4OUQ4MkY2MDAwQUU1
RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBQcm9maWxlckpldHRpc29uUmVhc29uLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxl
ckpldHRpc29uUmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMUMzREQ5
MUJCQ0UwOUUwMEU1MjNFNCAvKiBDZWxsU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2VsbFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMURE
ODQ5MThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYxRTNBNDMxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQXJndW1lbnRQb3NpdGlvbi5oOyBwYXRoID0g
ZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RvdWJsZUZvcm1hdFN0YXRlLmg7IHBhdGgg
PSBkZmcvREZHRG91YmxlRm9ybWF0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQyMTYsNiArNDIxOCw3IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFw
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjFDM0RE
OTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRlLmggKi8sCiAJCQkJMEZEOEEzMTExN0Q0MzI2
QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8sCiAJCQkJMEZEOEEzMTIxN0Q0MzI2QzAw
Q0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMx
QiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCkBAIC02MzYwLDcgKzYzNjMsNiBAQAogCQkJ
CTJBQUJDREU3MThFRjI5NDIwMDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1NEU4RUIwMThCRkZCQkIwMDU1NkQyOCAvKiBHQ1NlZ21lbnRlZEFycmF5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNTRFOEVCMTE4QkZGQkJFMDA1NTZEMjggLyogR0NTZWdtZW50ZWRBcnJh
eUlubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAv
KiBHQ1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjky
IC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzQ3MDNDQzAxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weSBpbiBIZWFkZXJzICovLAogCQkJCTJERkI4QUZFMUJCMzIzQkQwMDkzRDIz
NyAvKiBnZW5lcmF0ZS1qcy1idWlsdGlucyBpbiBIZWFkZXJzICovLApAQCAtNjkwMiw2ICs2OTA0
LDcgQEAKIAkJCQkxNDE0MkU1MTFCNzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAv
KiBVbnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAw
MkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFDM0REQTFCQkNF
MDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0
NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlF
RTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbC5oIGluIEhlYWRlcnMgKi8sCkBAIC03NzE3LDcgKzc3MjAsNiBAQAogCQkJCTJBQUNFNjND
MThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY3NjZEMkYxNUE4RENFMDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyQURGQTI2MzE4RUYzNTQwMDA0RjlGQ0MgLyogR0NMb2dn
aW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUMyMjM5RDFBMTYyNjJCREQwMDVBQzVGRCAvKiBH
Q1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYzQzYg
LyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjAzMzJDMzE4QjAxNzYz
MDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4
NTUxMDdFQzBFNzAwMTNFN0IyIC8qIEdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAxOTAzMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0OSwxNSArMjI0OSwxNSBAQCB2b2lkIENvZGVCbG9j
azo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiAgICAgaWYgKENvZGVCbG9jayogb3RoZXJCbG9j
ayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCiAgICAgICAgIG90aGVyQmxvY2stPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogCi0gICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQob3duZXJFeGVjdXRhYmxlKCksIHNpemVvZihDb2RlQmxvY2spKTsKKyAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplb2YoQ29kZUJsb2NrKSk7CiAgICAgaWYgKG1f
aml0Q29kZSkKLSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQob3duZXJF
eGVjdXRhYmxlKCksIG1faml0Q29kZS0+c2l6ZSgpKTsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQobV9qaXRDb2RlLT5zaXplKCkpOwogICAgIGlmIChtX2luc3RydWN0
aW9ucy5zaXplKCkpIHsKICAgICAgICAgLy8gRGl2aWRlIGJ5IHJlZkNvdW50KCkgYmVjYXVzZSBt
X2luc3RydWN0aW9ucyBwb2ludHMgdG8gc29tZXRoaW5nIHRoYXQgaXMgc2hhcmVkCiAgICAgICAg
IC8vIGJ5IG11bHRpcGxlIENvZGVCbG9ja3MsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gY291bnQgaXQg
dG93YXJkcyB0aGUgaGVhcCBzaXplIG9uY2UuCiAgICAgICAgIC8vIEhhdmluZyBlYWNoIENvZGVC
bG9jayByZXBvcnQgb25seSBpdHMgcHJvcG9ydGlvbmFsIHNoYXJlIG9mIHRoZSBzaXplIGlzIG9u
ZSB3YXkKICAgICAgICAgLy8gb2YgYWNjb21wbGlzaGluZyB0aGlzLgotICAgICAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChvd25lckV4ZWN1dGFibGUoKSwgbV9pbnN0cnVjdGlv
bnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1faW5zdHJ1Y3Rpb25zLnJlZkNvdW50
KCkpOworICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX2luc3RydWN0
aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pIC8gbV9pbnN0cnVjdGlvbnMucmVmQ291
bnQoKSk7CiAgICAgfQogCiAgICAgdmlzaXRvci5hcHBlbmQoJm1fdW5saW5rZWRDb2RlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMTkwMzM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjksMTIgKzY5LDEyIEBAIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVhcFJlcG8K
ICAgICBSRUxFQVNFX0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgJiAoc2l6
ZW9mKGludDMyX3QpIC0gMSkpKTsKICAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdU
eXBlLm9mZnNldCgpICsgMSA9PSBKU0NlbGxfdHlwZUluZm9UeXBlLm9mZnNldCgpKTsKICAgICBS
RUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlLm9mZnNldCgpICsgMiA9PSBKU0NlbGxf
dHlwZUluZm9GbGFncy5vZmZzZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4
aW5nVHlwZS5vZmZzZXQoKSArIDMgPT0gSlNDZWxsX2djRGF0YS5vZmZzZXQoKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSArIDMgPT0gSlNDZWxsX2Nl
bGxTdGF0ZS5vZmZzZXQoKSk7CiAKICAgICBKU0NlbGxfaW5kZXhpbmdUeXBlLmNoYW5nZVBhcmVu
dCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfdHlwZUluZm9UeXBlLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfdHlwZUluZm9GbGFncy5jaGFu
Z2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7Ci0gICAgSlNDZWxsX2djRGF0YS5jaGFuZ2VQ
YXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CisgICAgSlNDZWxsX2NlbGxTdGF0ZS5jaGFuZ2VQ
YXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgCiAgICAgcm9vdC5tX3RiYWFNZXRhZGF0
YSA9IG1kTm9kZShtX2NvbnRleHQsIG1kU3RyaW5nKG1fY29udGV4dCwgcm9vdC5tX2hlYXBOYW1l
KSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMTkwMzM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDEyICs1MiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAg
ICAgbWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X21vZGUsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUoKSkgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJW
aWV3X3ZlY3RvciwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpIFwKKyAgICBt
YWNybyhKU0NlbGxfY2VsbFN0YXRlLCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSBcCisgICAg
bWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSkg
XAogICAgIG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1cmVJRCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSBcCi0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSkgXAotICAgIG1hY3JvKEpTQ2VsbF9pbmRleGluZ1R5
cGUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpIFwKLSAgICBtYWNybyhKU0NlbGxfZ2NE
YXRhLCBKU0NlbGw6OmdjRGF0YU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5
dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNGdW5jdGlv
bl9leGVjdXRhYmxlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSkgXAogICAgIG1h
Y3JvKEpTRnVuY3Rpb25fc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSBc
CiAgICAgbWFjcm8oSlNGdW5jdGlvbl9yYXJlRGF0YSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJl
RGF0YSgpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkwMzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxOTEsOSArODE5
MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX2dyYXBoLm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICB9CiAgICAgCi0gICAgTFZhbHVlIGxvYWRNYXJrQnl0ZShMVmFsdWUgYmFzZSkKKyAgICBMVmFs
dWUgbG9hZENlbGxTdGF0ZShMVmFsdWUgYmFzZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX291
dC5sb2FkOChiYXNlLCBtX2hlYXBzLkpTQ2VsbF9nY0RhdGEpOworICAgICAgICByZXR1cm4gbV9v
dXQubG9hZDgoYmFzZSwgbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlKTsKICAgICB9CiAKICAgICB2
b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVlIGJhc2UpCkBAIC04MjA1LDcgKzgyMDUsNyBAQCBw
cml2YXRlOgogCiAgICAgICAgIC8vIENoZWNrIHRoZSBtYXJrIGJ5dGUuIAogICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RaZXJvOChsb2FkTWFya0J5dGUoYmFzZSkp
LCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpc01hcmtlZEFuZE5vdFJlbWVtYmVyZWQp
KTsKKyAgICAgICAgICAgIG1fb3V0Lm5vdFplcm84KGxvYWRDZWxsU3RhdGUoYmFzZSkpLCB1c3Vh
bGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpc01hcmtlZEFuZE5vdFJlbWVtYmVyZWQpKTsKIAog
ICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIHdyaXRlIGJhcnJpZXIgYnVmZmVyLgogICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTWFya2VkQW5kTm90UmVtZW1i
ZXJlZCwgYnVmZmVySGFzU3BhY2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q2VsbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2Vs
bFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxs
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDZWxsU3RhdGVfaAorI2RlZmluZSBDZWxsU3RhdGVfaAorCituYW1lc3BhY2UgSlNDIHsK
KworZW51bSBjbGFzcyBDZWxsU3RhdGUgOiB1aW50OF90IHsKKyAgICAvLyBUaGUgb2JqZWN0IGlz
IGJsYWNrIGFzIGZhciBhcyB0aGlzIEdDIGlzIGNvbmNlcm5lZC4gV2hlbiBub3QgaW4gR0MsIHRo
aXMganVzdCBtZWFucyB0aGF0IGl0J3MgYW4KKyAgICAvLyBvbGQgZ2VuIG9iamVjdC4gTm90ZSB0
aGF0IHdlIGRlbGliZXJhdGVseSBhcnJhbmdlIE9sZEJsYWNrIHRvIGJlIHplcm8sIHNvIHRoYXQg
dGhlIHN0b3JlIGJhcnJpZXIgb24KKyAgICAvLyBhIHRhcmdldCBvYmplY3QgImZyb20iIGlzIGp1
c3Q6CisgICAgLy8KKyAgICAvLyBpZiAoIWZyb20tPmNlbGxTdGF0ZSgpKQorICAgIC8vICAgICBz
bG93UGF0aChmcm9tKTsKKyAgICAvLworICAgIC8vIFRoZXJlIGlzIGEgYnVuY2ggb2YgY29kZSBp
biB0aGUgTExJbnQgYW5kIEpJVHMgdGhhdCByZWx5IG9uIHRoaXMgYmVpbmcgdGhlIGNhc2UuIFlv
dSdkIGhhdmUgdG8KKyAgICAvLyBjaGFuZ2UgYSBsb3Qgb2YgY29kZSBpZiB5b3UgZXZlciB3YW50
ZWQgdGhlIHN0b3JlIGJhcnJpZXIgdG8gYmUgYW55dGhpbmcgYnV0IGEgbm9uLXplcm8gY2hlY2sg
b24KKyAgICAvLyBjZWxsU3RhdGUuCisgICAgT2xkQmxhY2sgPSAwLAorICAgIAorICAgIC8vIFRo
ZSBvYmplY3QgaXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVj
dCBoYXMgbm90IGJlZW4gbWFya2VkIHlldC4KKyAgICBOZXdXaGl0ZSA9IDEsCisKKyAgICAvLyBU
aGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGJ1dCBpdCBlaXRo
ZXIgYmVsb25ncyB0byBvbGQgZ2VuIChpZiB0aGlzIGlzIGVkZW4KKyAgICAvLyBHQykgb3IgaXQg
aXMgZ3JleSBhIHNlY29uZCB0aW1lIGluIHRoaXMgY3VycmVudCBHQyAoYmVjYXVzZSBhIGNvbmN1
cnJlbnQgc3RvcmUgYmFycmllciByZXF1ZXN0ZWQKKyAgICAvLyByZS1ncmV5aW5nKS4KKyAgICBP
bGRHcmV5ID0gMiwKKworICAgIC8vIFRoZSBvYmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBi
ZSBzY2FubmVkIC0gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgaW4gdGhpcyBHQyB0aGF0IHdl
IGFyZQorICAgIC8vIGdvaW5nIHRvIHNjYW4gaXQuIElmIHRoaXMgaXMgYW4gZWRlbiBHQywgdGhp
cyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBlZGVuLgorICAgIE5ld0dyZXkgPSAz
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENlbGxTdGF0ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNp
b24gMTkwMzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBDb2RlQmxvY2tTZXQ6
OnJlbWVtYmVyQ3VycmVudGx5RXhlYwogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9n
KCJSZW1lbWJlcmluZyAiLCBtX2N1cnJlbnRseUV4ZWN1dGluZy5zaXplKCksICIgY29kZSBibG9j
a3MuXG4iKTsKICAgICBmb3IgKGNvbnN0IFJlZlB0cjxDb2RlQmxvY2s+JiBjb2RlQmxvY2sgOiBt
X2N1cnJlbnRseUV4ZWN1dGluZykKLSAgICAgICAgaGVhcC0+YWRkVG9SZW1lbWJlcmVkU2V0KGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOworICAgICAgICBoZWFwLT53cml0ZUJhcnJpZXIo
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CiAKICAgICAvLyBJdCdzIHNhZmUgdG8gY2xl
YXIgdGhlc2UgUmVmUHRyIHNldHMgYmVjYXVzZSB3ZSB3b24ndCBkZWxldGUgdGhlIENvZGVCbG9j
a3MKICAgICAvLyBpbiB0aGVtIHVudGlsIHRoZSBuZXh0IEdDLCBhbmQgd2UnbGwgcmVjb21wdXRl
IHRoZW0gYXQgdGhhdCB0aW1lLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRCbG9jay5oCShyZXZpc2lvbiAxOTAzMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpZFByb21vdGUoKTsKIAogICAgIHVuc2lnbmVkIGxpdmVCeXRlcygpOwotICAgIGJv
b2wgc2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKTsKICAg
ICB2b2lkIHJlcG9ydExpdmVCeXRlcyhMb2NrSG9sZGVyJiwgSlNDZWxsKiwgQ29weVRva2VuLCB1
bnNpZ25lZCk7CiAgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVk
KTsKICAgICB2b2lkIGRpZFN1cnZpdmVHQygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDMzNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMywxNiArMzMsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAK
LWlubGluZSBib29sIENvcGllZEJsb2NrOjpzaG91bGRSZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRl
ciYsIEpTQ2VsbCogb3duZXIpCi17Ci0gICAgLy8gV2Ugd2FudCB0byBhZGQgdG8gbGl2ZSBieXRl
cyBpZiB0aGUgb3duZXIgaXNuJ3QgcGFydCBvZiB0aGUgcmVtZW1iZXJlZCBzZXQgb3IKLSAgICAv
LyBpZiB0aGlzIGJsb2NrIHdhcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBsYXN0IGN5Y2xlLiAKLSAg
ICAvLyBJZiB3ZSBhbHdheXMgYWRkZWQgbGl2ZSBieXRlcyB3ZSB3b3VsZCBkb3VibGUgY291bnQg
Zm9yIGVsZW1lbnRzIGluIHRoZSByZW1lbWJlcmVkCi0gICAgLy8gc2V0IGFjcm9zcyBjb2xsZWN0
aW9ucy4gCi0gICAgLy8gSWYgd2UgZGlkbid0IGFsd2F5cyBhZGQgbGl2ZSBieXRlcyB0byBuZXcg
YmxvY2tzLCB3ZSdkIGdldCB0b28gZmV3LgotICAgIHJldHVybiAhSGVhcDo6aXNSZW1lbWJlcmVk
KG93bmVyKSB8fCAhbV9pc09sZDsKLX0KLQogaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9y
dExpdmVCeXRlcyhMb2NrSG9sZGVyJiwgSlNDZWxsKiBvd25lciwgQ29weVRva2VuIHRva2VuLCB1
bnNpZ25lZCBieXRlcykKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0xvZ2dpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDTG9nZ2luZy5jcHAJKHJldmlzaW9uIDE5MDMzNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDTG9nZ2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDcgKzkxLDcgQEAgcHVibGljOgogCiAgICAgICAgIGZvciAoY29uc3QgSlNDZWxsKiBjZWxs
IDogbV9zYXZlZE1hcmtTdGFjaykgewogICAgICAgICAgICAgbV9zbG90VmlzaXRvci5tYXJrU3Rh
Y2soKS5hcHBlbmQoY2VsbCk7Ci0gICAgICAgICAgICBjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwp
LT5zZXRSZW1lbWJlcmVkKHRydWUpOworICAgICAgICAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENl
bGxTdGF0ZTo6T2xkR3JleSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxOTAzMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk5LDcgKzU5OSw2IEBAIHZv
aWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSwKICAgICAvLyB0aGUgbGl2ZW5l
c3Mgb2YgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCBncmFwaC4KICAgICB2aXNpdFdlYWtIYW5kbGVz
KGhlYXBSb290VmlzaXRvcik7CiAKLSAgICBjbGVhclJlbWVtYmVyZWRTZXQocmVtZW1iZXJlZFNl
dCk7CiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdN
dXRleCk7CiAgICAgICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9IHRydWU7CkBAIC04
NTUsMTMgKzg1NCw2IEBAIHZvaWQgSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2kK
ICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6Y2xlYXJSZW1lbWJlcmVkU2V0KFZlY3Rvcjxjb25zdCBK
U0NlbGwqPiYgcmVtZW1iZXJlZFNldCkKLXsKLSAgICBHQ1BIQVNFKENsZWFyUmVtZW1iZXJlZFNl
dCk7Ci0gICAgZm9yIChhdXRvKiBjZWxsIDogcmVtZW1iZXJlZFNldCkKLSAgICAgICAgY29uc3Rf
Y2FzdDxKU0NlbGwqPihjZWxsKS0+c2V0UmVtZW1iZXJlZChmYWxzZSk7Ci19Ci0KIHZvaWQgSGVh
cDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsKICAgICBHQ0NPVU5U
RVIoVmlzaXRlZFZhbHVlQ291bnQsIG1fc2xvdFZpc2l0b3IudmlzaXRDb3VudCgpKTsKQEAgLTEw
MTUsOSArMTAwNywxMyBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0Nl
CiB7CiAgICAgQVNTRVJUKGNlbGwpOwogICAgIEFTU0VSVCghT3B0aW9uczo6ZW5hYmxlQ29uY3Vy
cmVudEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIGlmIChpc1JlbWVtYmVy
ZWQoY2VsbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwp
LT5zZXRSZW1lbWJlcmVkKHRydWUpOworICAgIEFTU0VSVChjZWxsLT5nY0RhdGEoKSA9PSBKU0Nl
bGw6Ok9sZEJsYWNrKTsKKyAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoaXMgb2JqZWN0IGlzIGdyZXkg
YW5kIHRoYXQgaXQncyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAvLyAtIEEgcmUtZ3JleWVk
IG9iamVjdCBkdXJpbmcgYSBjb25jdXJyZW50IGNvbGxlY3Rpb24uCisgICAgLy8gLSBBbiBvbGQg
cmVtZW1iZXJlZCBvYmplY3QuCisgICAgLy8gIk9sZEdyZXkiIGRvZXNuJ3QgdGVsbCB1cyB3aGlj
aCBvZiB0aGVzZSB0aGluZ3MgaXMgdHJ1ZSwgYnV0IHdlIHVzdWFsbHkgdHJlYXQgdGhlIHR3byBj
YXNlcyB0aGUKKyAgICAvLyBzYW1lLgorICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6
Ok9sZEdyZXkpOwogICAgIG1fc2xvdFZpc2l0b3IudW5jb25kaXRpb25hbGx5QXBwZW5kKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCShyZXZpc2lvbiAxOTAzMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw5ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBib29sIHRlc3RBbmRTZXRN
YXJrZWQoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lk
Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNSZW1lbWJlcmVkKGNvbnN0IHZvaWQqKTsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCopOwog
ICAgIHN0YXRpYyBib29sIGlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpOwogICAgIHZvaWQgd3JpdGVC
YXJyaWVyKGNvbnN0IEpTQ2VsbCopOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2Vs
bCosIEpTVmFsdWUpOwpAQCAtMTcxLDcgKzE2OSw3IEBAIHB1YmxpYzoKICAgICAvLyBjYWxsIGJv
dGggb2YgdGhlc2UgZnVuY3Rpb25zOiBDYWxsaW5nIG9ubHkgb25lIG1heSB0cmlnZ2VyIGNhdGFz
dHJvcGljCiAgICAgLy8gbWVtb3J5IGdyb3d0aC4KICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKHNpemVfdCk7Ci0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoSlND
ZWxsKiwgc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsU3Rh
dGUgZGF0YUJlZm9yZVZpc2l0aW5nLCBzaXplX3QpOwogCiAgICAgLy8gVXNlIHRoaXMgQVBJIHRv
IHJlcG9ydCBub24tR0MgbWVtb3J5IGlmIHlvdSBjYW4ndCB1c2UgdGhlIGJldHRlciBBUEkgYWJv
dmUuCiAgICAgdm9pZCBkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnkoc2l6ZV90KTsKQEAgLTMx
MCw3ICszMDgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1
YlJvdXRpbmVzKCk7CiAgICAgdm9pZCBjb252ZXJnZSgpOwogICAgIHZvaWQgdmlzaXRXZWFrSGFu
ZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIGNsZWFyUmVtZW1iZXJlZFNldChWZWN0
b3I8Y29uc3QgSlNDZWxsKj4mKTsKICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUg
Z2NTdGFydFRpbWUpOwogICAgIHZvaWQgcmVzZXRWaXNpdG9ycygpOwogCkBAIC0zMjcsNiArMzI0
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMo
KTsKICAgICB2b2lkIGNsZWFyVW5tYXJrZWRFeGVjdXRhYmxlcygpOwogICAgIHZvaWQgZGVsZXRl
VW5tYXJrZWRDb21waWxlZENvZGUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFRv
UmVtZW1iZXJlZFNldChjb25zdCBKU0NlbGwqKTsKICAgICB2b2lkIHVwZGF0ZUFsbG9jYXRpb25M
aW1pdHMoKTsKICAgICB2b2lkIGRpZEZpbmlzaENvbGxlY3Rpb24oZG91YmxlIGdjU3RhcnRUaW1l
KTsKICAgICB2b2lkIHJlc3VtZUNvbXBpbGVyVGhyZWFkcygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAxOTAzMzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCwxNCAr
NzAsNiBAQCBpbmxpbmUgYm9vbCBIZWFwOjppc0xpdmUoY29uc3Qgdm9pZCogY2VsCiAgICAgcmV0
dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+aXNMaXZlQ2VsbChjZWxsKTsKIH0KIAot
aW5saW5lIGJvb2wgSGVhcDo6aXNSZW1lbWJlcmVkKGNvbnN0IHZvaWQqIHB0cikKLXsKLSAgICBj
b25zdCBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxjb25zdCBKU0NlbGwqPihwdHIpOwotICAg
IEFTU0VSVChjZWxsKTsKLSAgICBBU1NFUlQoIU9wdGlvbnM6OmVuYWJsZUNvbmN1cnJlbnRKSVQo
KSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICByZXR1cm4gY2VsbC0+aXNSZW1lbWJl
cmVkKCk7Ci19Ci0KIGlubGluZSBib29sIEhlYXA6OmlzTWFya2VkKGNvbnN0IHZvaWQqIGNlbGwp
CiB7CiAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+aXNNYXJrZWQoY2Vs
bCk7CkBAIC0xMTMsMjUgKzEwNSwxOCBAQCBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIFdyaXRl
QmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRlQmFycmllcigpOwogI2VuZGlmCi0gICAgaWYgKCFm
cm9tIHx8ICFmcm9tLT5pc01hcmtlZCgpKSB7Ci0gICAgICAgIEFTU0VSVCghZnJvbSB8fCAhaXNN
YXJrZWQoZnJvbSkpOworICAgIGlmICghZnJvbSB8fCBmcm9tLT5jZWxsU3RhdGUoKSAhPSBDZWxs
U3RhdGU6Ok9sZEJsYWNrKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdG8gfHwg
dG8tPmlzTWFya2VkKCkpIHsKLSAgICAgICAgQVNTRVJUKCF0byB8fCBpc01hcmtlZCh0bykpOwor
ICAgIGlmICghdG8gfHwgdG8tPmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6TmV3V2hpdGUpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20pOwogfQog
CiBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBmcm9tKQogewog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0NlbGwqPihmcm9t
KSk7Ci0gICAgaWYgKCFmcm9tIHx8ICFmcm9tLT5pc01hcmtlZCgpKSB7Ci0gICAgICAgIEFTU0VS
VCghZnJvbSB8fCAhaXNNYXJrZWQoZnJvbSkpOworICAgIGlmICghZnJvbSB8fCBmcm9tLT5jZWxs
U3RhdGUoKSAhPSBDZWxsU3RhdGU6Ok9sZEJsYWNrKQogICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIEFTU0VSVChpc01hcmtlZChmcm9tKSk7CiAgICAgYWRkVG9SZW1lbWJlcmVkU2V0KGZyb20p
OwogfQogCkBAIC0xNDEsMTAgKzEyNiwxMCBAQCBpbmxpbmUgdm9pZCBIZWFwOjpyZXBvcnRFeHRy
YU1lbW9yeUFsbG9jCiAgICAgICAgIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkU2xvd0Nhc2Uo
c2l6ZSk7CiB9CiAKLWlubGluZSB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChK
U0NlbGwqIG93bmVyLCBzaXplX3Qgc2l6ZSkKK2lubGluZSB2b2lkIEhlYXA6OnJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgZGF0YUJlZm9yZVZpc2l0aW5nLCBzaXplX3Qgc2l6ZSkK
IHsKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0cmEgbWVtb3J5
IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmIChvcGVy
YXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24gJiYgSGVhcDo6aXNSZW1lbWJlcmVk
KG93bmVyKSkKKyAgICBpZiAob3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9u
ICYmIGRhdGFCZWZvcmVWaXNpdGluZyA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4dHJhTWVtb3J5U2l6ZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDE5
MDMzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oCiAgICAgU3RhY2tTdGF0czo6cHJvYmUoKTsKIAogICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZChjZWxsKSk7CisgICAgQVNTRVJUKGNlbGwtPmdjRGF0YSgpID09IEpTQ2Vs
bDo6T2xkR3JleSB8fCBjZWxsLT5nY0RhdGEoKSA9PSBKU0NlbGw6Ok5ld0dyZXkpOworCisgICAg
bV9kYXRhQmVmb3JlVmlzaXRpbmcgPSBjZWxsLT5nY0RhdGEoKTsKKyAgICBjZWxsLT5zZXRHQ0Rh
dGEoSlNDZWxsOjpPbGRCbGFjayk7CiAgICAgCiAgICAgaWYgKGlzSlNTdHJpbmcoY2VsbCkpIHsK
ICAgICAgICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxs
KSwgdmlzaXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgJKHJldmlzaW9uIDE5MDMzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAog
I2lmbmRlZiBTbG90VmlzaXRvcl9oCiAjZGVmaW5lIFNsb3RWaXNpdG9yX2gKIAorI2luY2x1ZGUg
IkNlbGxTdGF0ZS5oIgogI2luY2x1ZGUgIkNvcHlUb2tlbi5oIgogI2luY2x1ZGUgIkhhbmRsZVR5
cGVzLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCkBAIC0xMDQsNyArMTA1LDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBjb3B5TGF0ZXIoSlNDZWxsKiwgQ29weVRva2VuLCB2b2lkKiwgc2l6ZV90
KTsKICAgICAKLSAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChKU0NlbGwqIG93bmVy
LCBzaXplX3QpOworICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAg
ICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIqKTsKICAgICB2b2lkIGFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoVW5jb25kaXRpb25h
bEZpbmFsaXplciopOwpAQCAtMTEzLDYgKzExNCw4IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdW5z
aWduZWQgY2hpbGRDb3VudCgpIHsgcmV0dXJuIG1fbG9nQ2hpbGRDb3VudDsgfQogICAgIGlubGlu
ZSB2b2lkIGluY3JlbWVudENoaWxkQ291bnQoKSB7IG1fbG9nQ2hpbGRDb3VudCsrOyB9CiAKKyAg
ICBDZWxsU3RhdGUgZGF0YUJlZm9yZVZpc2l0aW5nQ3VycmVudE9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YUJlZm9yZVZpc2l0aW5nOyB9CisKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKIAogcHJpdmF0ZToKQEAgLTE1MCw2ICsxNTMsOCBAQCBwcml2YXRlOgogCiAgICAg
dW5zaWduZWQgbV9sb2dDaGlsZENvdW50OwogCisgICAgQ2VsbFN0YXRlIG1fZGF0YUJlZm9yZVZp
c2l0aW5nIHsgQ2VsbFN0YXRlOjpOZXdXaGl0ZSB9OworCiBwdWJsaWM6CiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aAkocmV2aXNpb24gMTkwMzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMyw3ICsxMTMsMTEg
QEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgY2VsbC0+c2V0TWFya2VkKCk7CisgICAgLy8gSW5kaWNhdGUgdGhh
dCB0aGUgb2JqZWN0IGlzIGdyZXkgYW5kIHRoYXQ6CisgICAgLy8gSW4gY2FzZSBvZiBjb25jdXJy
ZW50IEdDOiBpdCdzIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGdyZXkgaW4gdGhpcyBHQyBjeWNsZS4K
KyAgICAvLyBJbiBjYXNlIG9mIGVkZW4gY29sbGVjdGlvbjogaXQncyBhIG5ldyBvYmplY3QgdGhh
dCBiZWNhbWUgZ3JleSByYXRoZXIgdGhhbiBhbiBvbGQgcmVtZW1iZXJlZCBvYmplY3QuCisgICAg
Y2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgCiAgICAgbV9ieXRl
c1Zpc2l0ZWQgKz0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5jZWxsU2l6ZSgpOwogICAg
ICAgICAKICAgICB1bmNvbmRpdGlvbmFsbHlBcHBlbmQoY2VsbCk7CkBAIC0yMzksMTUgKzI0Mywy
MiBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKEpTQ2VsCiAgICAgQVNTRVJU
KGhlYXAoKS0+bV9zdG9yYWdlU3BhY2UuY29udGFpbnMoYmxvY2spKTsKIAogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKCZibG9jay0+d29ya0xpc3RMb2NrKCkpOwotICAgIGlmIChoZWFwKCktPm9wZXJh
dGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbiB8fCBibG9jay0+c2hvdWxkUmVwb3J0
TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIpKSB7CisgICAgLy8gV2UgYWx3YXlzIHJlcG9ydCBsaXZl
IGJ5dGVzLCBleGNlcHQgaWYgZHVyaW5nIGFuIGVkZW4gY29sbGVjdGlvbiB3ZSBzZWUgYW4gb2xk
IG9iamVjdCBwb2ludGluZyB0byBhbgorICAgIC8vIG9sZCBiYWNraW5nIHN0b3JlIGFuZCB0aGUg
b2xkIG9iamVjdCBpcyBiZWluZyBtYXJrZWQgYmVjYXVzZSBvZiB0aGUgcmVtZW1iZXJlZCBzZXQu
IE5vdGUgdGhhdCBpZiB3ZQorICAgIC8vIGFzayB0aGUgb2JqZWN0IGl0c2VsZiwgaXQgd2lsbCBh
bHdheXMgdGVsbCB1cyB0aGF0IGl0J3MgYW4gb2xkIGJsYWNrIG9iamVjdCAtIGJlY2F1c2UgZXZl
biBkdXJpbmcgYW4KKyAgICAvLyBlZGVuIGNvbGxlY3Rpb24gd2UgaGF2ZSBhbHJlYWR5IGluZGlj
YXRlZCB0aGF0IHRoZSBvYmplY3QgaXMgb2xkLiBUaGF0J3Mgd2h5IHdlIHVzZSB0aGUKKyAgICAv
LyBTbG90VmlzaXRvcidzIGNhY2hlIG9mIHRoZSBvYmplY3QncyBvbGQgc3RhdGUuCisgICAgaWYg
KGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uCisgICAgICAg
IHx8ICFibG9jay0+aXNPbGQoKQorICAgICAgICB8fCBtX2RhdGFCZWZvcmVWaXNpdGluZyAhPSBD
ZWxsU3RhdGU6Ok9sZEdyZXkpIHsKICAgICAgICAgbV9ieXRlc0NvcGllZCArPSBieXRlczsKICAg
ICAgICAgYmxvY2stPnJlcG9ydExpdmVCeXRlcyhsb2NrZXIsIG93bmVyLCB0b2tlbiwgYnl0ZXMp
OwogICAgIH0KIH0KICAgICAKLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQoSlNDZWxsKiBvd25lciwgc2l6ZV90IHNpemUpCitpbmxpbmUgdm9pZCBTbG90
VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIGhl
YXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG93bmVyLCBzaXplKTsKKyAgICBoZWFwKCkt
PnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX2RhdGFCZWZvcmVWaXNpdGluZywgc2l6ZSk7CiB9
CiAKIGlubGluZSBIZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE5MDMzNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNjUsMTIgKzExNjUsMTIgQEAgcHVibGljOgogCiAgICAgSnVtcCBqdW1wSWZJ
c1JlbWVtYmVyZWRPckluRWRlbihHUFJSZWcgY2VsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBi
cmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoY2VsbCwgSlNDZWxsOjpnY0RhdGFPZmZzZXQoKSkpOworICAgICAgICByZXR1cm4gYnJhbmNo
VGVzdDgoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNl
bGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpKTsKICAgICB9CiAKICAgICBKdW1wIGp1bXBJ
ZklzUmVtZW1iZXJlZE9ySW5FZGVuKEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIHVpbnQ4
X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6
Z2NEYXRhT2Zmc2V0KCk7CisgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CiAgICAgICAg
IHJldHVybiBicmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJs
ZXI6OkFic29sdXRlQWRkcmVzcyhhZGRyZXNzKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20JKHJldmlzaW9uIDE5MDMzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsOCAr
NDk3LDggQEAgbWFjcm8gd3JpdGVCYXJyaWVyT25PcGVyYW5kKGNlbGxPcGVyYW5kKQogICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbihjZWxsT3BlcmFuZCwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZVBheWxvYWQodDEsIENlbGxUYWcsIHQyLCAud3JpdGVCYXJyaWVyRG9uZSkKICAgICBz
a2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbih0MiwgdDEsIHQzLCAKLSAgICAgICAgbWFjcm8oZ2NE
YXRhKQotICAgICAgICAgICAgYnRibnogZ2NEYXRhLCAud3JpdGVCYXJyaWVyRG9uZQorICAgICAg
ICBtYWNybyhjZWxsU3RhdGUpCisgICAgICAgICAgICBidGJueiBjZWxsU3RhdGUsIC53cml0ZUJh
cnJpZXJEb25lCiAgICAgICAgICAgICBwdXNoIGNmciwgUEMKICAgICAgICAgICAgICMgV2UgbWFr
ZSB0d28gZXh0cmEgc2xvdHMgYmVjYXVzZSBjQ2FsbDIgd2lsbCBwb2tlLgogICAgICAgICAgICAg
c3VicCA4LCBzcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE5MDMzNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC00MDEsOCArNDAxLDggQEAgbWFjcm8gd3JpdGVCYXJyaWVyT25PcGVyYW5kKGNlbGxP
cGVyYW5kKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbihjZWxsT3BlcmFuZCwgdDEpCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwodDEsIHQyLCAud3JpdGVCYXJyaWVyRG9uZSkKICAg
ICBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbih0MiwgdDEsIHQzLCAKLSAgICAgICAgbWFjcm8o
Z2NEYXRhKQotICAgICAgICAgICAgYnRibnogZ2NEYXRhLCAud3JpdGVCYXJyaWVyRG9uZQorICAg
ICAgICBtYWNybyhjZWxsU3RhdGUpCisgICAgICAgICAgICBidGJueiBjZWxsU3RhdGUsIC53cml0
ZUJhcnJpZXJEb25lCiAgICAgICAgICAgICBwdXNoIFBCLCBQQwogICAgICAgICAgICAgbW92ZSB0
MiwgYTEgIyB0MiBjYW4gYmUgYTAgKG5vdCBvbiA2NCBiaXRzLCBidXQgYmV0dGVyIHNhZmUgdGhh
biBzb3JyeSkKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24g
MTkwMzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC03OTksNyArNzk5LDcgQEAgbWFjcm8gYXJyYXlQcm9m
aWxlKGNlbGxBbmRJbmRleGluZ1R5cGUsIAogZW5kCiAKIG1hY3JvIHNraXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuKGNlbGwsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgY29udGludWF0aW9uKQotICAgIGxv
YWRiIEpTQ2VsbDo6bV9nY0RhdGFbY2VsbF0sIHNjcmF0Y2gxCisgICAgbG9hZGIgSlNDZWxsOjpt
X2NlbGxTdGF0ZVtjZWxsXSwgc2NyYXRjaDEKICAgICBjb250aW51YXRpb24oc2NyYXRjaDEpCiBl
bmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9u
IDE5MDMzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIEpTQ2VsbF9oCiAKICNpbmNsdWRlICJDYWxsRGF0YS5o
IgorI2luY2x1ZGUgIkNlbGxTdGF0ZS5oIgogI2luY2x1ZGUgIkNvbnN0cnVjdERhdGEuaCIKICNp
bmNsdWRlICJFbnVtZXJhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0xNTQsMzYg
KzE1NSwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2FuVXNlRmFzdEdldE93blByb3Bl
cnR5KGNvbnN0IFN0cnVjdHVyZSYpOwogICAgIEpTVmFsdWUgZmFzdEdldE93blByb3BlcnR5KFZN
JiwgU3RydWN0dXJlJiwgUHJvcGVydHlOYW1lKTsKIAotICAgIGVudW0gR0NEYXRhIDogdWludDhf
dCB7Ci0gICAgICAgIE1hcmtlZCA9IDAsIC8vIFRoZSBvYmplY3QgaGFzIHN1cnZpdmVkIGEgR0Mg
YW5kIGlzIGluIHRoZSBvbGQgZ2VuLgotICAgICAgICBOb3RNYXJrZWQgPSAxLCAvLyBUaGUgb2Jq
ZWN0IGlzIG5ldyBhbmQgaW4gdGhlIGVkZW4gZ2VuLgotICAgICAgICBNYXJrZWRBbmRSZW1lbWJl
cmVkID0gMiwgLy8gVGhlIG9iamVjdCBpcyBpbiB0aGUgR0MncyByZW1lbWJlcmVkIHNldC4KLQot
ICAgICAgICAvLyBUaGUgb2JqZWN0IGJlaW5nIGluIHRoZSBHQydzIHJlbWVtYmVyZWQgc2V0IGlt
cGxpZXMgdGhhdCBpdCBpcyBhbHNvCi0gICAgICAgIC8vIE1hcmtlZC4gVGhpcyBpcyBiZWNhdXNl
IG9iamVjdHMgYXJlIG9ubHkgYWRkZWQgdG8gdGhlIHJlbWVtYmVyZWQgc2V0cwotICAgICAgICAv
LyBieSB3cml0ZSBiYXJyaWVycywgYW5kIHdyaXRlIGJhcnJpZXJzIGFyZSBvbmx5IGludGVyZXN0
ZWQgaW4gb2xkIGdlbgotICAgICAgICAvLyBvYmplY3RzIHRoYXQgcG9pbnQgdG8gcG90ZW50aWFs
IGVkZW4gZ2VuIG9iamVjdHMuCi0gICAgfTsKLQotICAgIHZvaWQgc2V0TWFya2VkKCkgeyBtX2dj
RGF0YSA9IE1hcmtlZDsgfQotICAgIHZvaWQgc2V0UmVtZW1iZXJlZChib29sIHJlbWVtYmVyZWQp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9nY0RhdGEgPT0gKHJlbWVtYmVyZWQgPyBNYXJrZWQg
OiBNYXJrZWRBbmRSZW1lbWJlcmVkKSk7Ci0gICAgICAgIG1fZ2NEYXRhID0gcmVtZW1iZXJlZCA/
IE1hcmtlZEFuZFJlbWVtYmVyZWQgOiBNYXJrZWQ7IAotICAgIH0KLSAgICBib29sIGlzTWFya2Vk
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9nY0RhdGEpIHsKLSAgICAgICAgY2Fz
ZSBNYXJrZWQ6Ci0gICAgICAgIGNhc2UgTWFya2VkQW5kUmVtZW1iZXJlZDoKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIE5vdE1hcmtlZDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGJvb2wgaXNSZW1lbWJlcmVkKCkg
Y29uc3QgeyByZXR1cm4gbV9nY0RhdGEgPT0gTWFya2VkQW5kUmVtZW1iZXJlZDsgfQorICAgIC8v
IFRoZSByZWNvbW1lbmRlZCBpZGlvbSBmb3IgdXNpbmcgY2VsbFN0YXRlKCkgaXMgdG8gc3dpdGNo
IG9uIGl0IG9yIHBlcmZvcm0gYW4gPT0gY29tcGFyaXNvbiBvbiBpdAorICAgIC8vIGRpcmVjdGx5
LiBXZSBkZWxpYmVyYXRlbHkgYXZvaWQgaGVscGVycyBmb3IgdGhpcywgYmVjYXVzZSB3ZSBkb24n
dCB3YW50IHRyYW5zcGFyZW5jeSBhYm91dCBob3cgdGhlCisgICAgLy8gdmFyaW91cyBDZWxsU3Rh
dGUgdmFsdWVzIGluZmx1ZW5jZXMgb3VyIHZhcmlvdXMgYWxnb3JpdGhtcy4KKyAgICBDZWxsU3Rh
dGUgY2VsbFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsU3RhdGU7IH0KKyAgICAKKyAgICB2
b2lkIHNldENlbGxTdGF0ZShDZWxsU3RhdGUgZGF0YSkgY29uc3QgeyBjb25zdF9jYXN0PEpTQ2Vs
bCo+KHRoaXMpLT5tX2NlbGxTdGF0ZSA9IGRhdGE7IH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
c3RydWN0dXJlSURPZmZzZXQoKQogICAgIHsKQEAgLTIwNSw5ICsxODIsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX2luZGV4aW5nVHlwZSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBnY0RhdGFPZmZzZXQoKQorICAgIHN0YXRpYyBw
dHJkaWZmX3QgY2VsbFN0YXRlT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNDZWxsLCBtX2djRGF0YSk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNDZWxsLCBtX2NlbGxTdGF0ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IFR5cGVk
QXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IE5vdFR5cGVkQXJyYXk7CkBAIC0yNDEs
NyArMjE4LDcgQEAgcHJpdmF0ZToKICAgICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5cGU7CiAg
ICAgSlNUeXBlIG1fdHlwZTsKICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIG1fZmxhZ3M7
Ci0gICAgdWludDhfdCBtX2djRGF0YTsKKyAgICBDZWxsU3RhdGUgbV9jZWxsU3RhdGU7CiB9Owog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbT4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDMzNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGlu
bGluZSBKU0NlbGw6OkpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFRhZykKLSAgICA6IG1fZ2NEYXRh
KE5vdE1hcmtlZCkKKyAgICA6IG1fY2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3V2hpdGUpCiB7CiAg
ICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogfQpAQCAtNTEsNyArNTEsNyBAQCBp
bmxpbmUgSlNDZWxsOjpKU0NlbGwoVk0mLCBTdHJ1Y3R1cmUqIHN0CiAgICAgLCBtX2luZGV4aW5n
VHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQogICAgICwgbV90eXBlKHN0cnVjdHVyZS0+
dHlwZUluZm8oKS50eXBlKCkpCiAgICAgLCBtX2ZsYWdzKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5p
bmxpbmVUeXBlRmxhZ3MoKSkKLSAgICAsIG1fZ2NEYXRhKE5vdE1hcmtlZCkKKyAgICAsIG1fY2Vs
bFN0YXRlKENlbGxTdGF0ZTo6TmV3V2hpdGUpCiB7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9u
VGhyZWFkKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTkwMzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDggQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZgogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQogeworICAgIGRhdGFMb2coIlZpc2l0aW5n
IGJ1dHRlcmZseSBpbiAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKTsKKyAgICAKICAgICBBU1NF
UlQoYnV0dGVyZmx5KTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0
cnVjdHVyZSh2aXNpdG9yLnZtKCkpOwpAQCAtMTY1LDYgKzE2Nyw3IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXM7CiAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IHRoaXMtPmhhc0luZGV4aW5n
SGVhZGVyKCk7CiAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAg
ICBkYXRhTG9nKCIgICAgSGFzIGluZGV4aW5nIGhlYWRlci5cbiIpOwogICAgICAgICBwcmVDYXBh
Y2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJl
KTsKICAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CiAgICAg
fSBlbHNlIHsKQEAgLTE3Miw2ICsxNzUsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6
OnZpc2l0QnV0dGVyCiAgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKICAg
ICB9CiAgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGRhdGFMb2coIkNhcGFjaXR5IGluIGJ5dGVzOiAiLCBj
YXBhY2l0eUluQnl0ZXMsICJcbiIpOwogCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3Rv
cmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKQEAgLTIxOCw2ICsyMjIsOCBAQCB2b2lkIEpTT2JqZWN0
Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBkYXRhTG9nKCJDb3B5aW5nIGJhY2tpbmcgc3Rv
cmUgaW4gIiwgUmF3UG9pbnRlcih0aGlzT2JqZWN0KSwgIlxuIik7CiAgICAgCiAgICAgaWYgKHRv
a2VuICE9IEJ1dHRlcmZseUNvcHlUb2tlbikKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHJldmlzaW9u
IDE5MDMzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxv
Yi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZUlEQmxv
Yl9oCiAjZGVmaW5lIFN0cnVjdHVyZUlEQmxvYl9oCiAKKyNpbmNsdWRlICJDZWxsU3RhdGUuaCIK
ICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgpAQCAtNDYsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHUuZmllbGRzLmluZGV4aW5nVHlwZSA9IGluZGV4aW5nVHlwZTsKICAgICAgICAgdS5maWVs
ZHMudHlwZSA9IHR5cGVJbmZvLnR5cGUoKTsKICAgICAgICAgdS5maWVsZHMuaW5saW5lVHlwZUZs
YWdzID0gdHlwZUluZm8uaW5saW5lVHlwZUZsYWdzKCk7Ci0gICAgICAgIHUuZmllbGRzLmRlZmF1
bHRHQ0RhdGEgPSBKU0NlbGw6Ok5vdE1hcmtlZDsKKyAgICAgICAgdS5maWVsZHMuZGVmYXVsdENl
bGxTdGF0ZSA9IENlbGxTdGF0ZTo6TmV3V2hpdGU7CiAgICAgfQogCiAgICAgdm9pZCBvcGVyYXRv
cj0oY29uc3QgU3RydWN0dXJlSURCbG9iJiBvdGhlcikgeyB1LmRvdWJsZVdvcmQgPSBvdGhlci51
LmRvdWJsZVdvcmQ7IH0KQEAgLTc5LDcgKzgwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU7CiAgICAgICAgICAgICBKU1R5cGUgdHlwZTsKICAgICAg
ICAgICAgIFR5cGVJbmZvOjpJbmxpbmVUeXBlRmxhZ3MgaW5saW5lVHlwZUZsYWdzOwotICAgICAg
ICAgICAgSlNDZWxsOjpHQ0RhdGEgZGVmYXVsdEdDRGF0YTsKKyAgICAgICAgICAgIENlbGxTdGF0
ZSBkZWZhdWx0Q2VsbFN0YXRlOwogICAgICAgICB9IGZpZWxkczsKICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgIGludDMyX3Qgd29yZDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2Jhc2ljLWVkZW4tZ2MtdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Jhc2ljLWVkZW4tZ2MtdGVzdC5qcwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYmFzaWMtZWRlbi1n
Yy10ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAordmFyIG8gPSB7Zjo0Mn07
CitlZGVuR0MoKTsKK3ZhciBwID0ge2Y6NDJ9OworZWRlbkdDKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262381</attachid>
            <date>2015-10-03 15:30:14 -0700</date>
            <delta_ts>2015-10-03 15:54:35 -0700</delta_ts>
            <desc>it passes so many tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53382</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNiBA
QAorMjAxNS0xMC0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFsbG93IGFuIG9iamVjdCdzIG1hcmtpbmcgc3RhdGUgdG8gdHJhY2sgVGhlIFRocmVlIENvbG9y
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NjU0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSB3YW50
IHRvIG1ha2UgR0MgbWFya2luZyBjb25jdXJyZW50IChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0OTQzMikuCisgICAgICAgIENvbmN1cnJlbnQgR0MgcmVxdWly
ZSBiYXJyaWVycyB0byBiZSBleGVjdXRlZCBkdXJpbmcgY2VydGFpbiBoZWFwIG9wZXJhdGlvbnMu
IFdlIGFscmVhZHkgaGF2ZSBhCisgICAgICAgIGdlbmVyYXRpb25hbCBHQy4gR2VuZXJhdGlvbmFs
IEdDcyBhbHNvIG5lZWQgYmFycmllcnMsIGFuZCB3ZSBhbHJlYWR5IGhhdmUgdGhvc2UuIFRoZSBn
ZW5lcmF0aW9uYWwKKyAgICAgICAgR0MgYmFycmllciB0aGF0IHdlIHVzZSBpcyB0aGUgInN0aWNr
eSBtYXJrIGJpdCIgYmFycmllci4gT3JkaW5hcmlseSwgbWFyayBiaXRzIGdldCByZXNldCBhZnRl
ciBhCisgICAgICAgIGNvbGxlY3Rpb24uIEluIG91ciBjb2xsZWN0b3IsIHRoZXJlIGlzIGEgc2Vj
b25kYXJ5IG1hcmsgYml0IHRoYXQgInN0aWNrcyIgLSBpLmUuIGl0IGRvZXMgbm90IGdldAorICAg
ICAgICByZXNldC4gSWYgdGhlIHN0aWNreSBtYXJrIGJpdCBpcyBzZXQgaW4gYmV0d2VlbiB0d28g
Y29sbGVjdGlvbnMsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4KKyAgICAgICAg
b2xkIHNwYWNlLiBUaGlzIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gcHV0IHRo
aW5ncyBpbnRvIHJlbWVtYmVyZWQgc2V0cy4gQWRkaXRpb25hbGx5LAorICAgICAgICB0aGUgc3Rp
Y2t5IG1hcmsgYml0IGlzIGFjdHVhbGx5IGEgdHJpLXN0YXRlIHRoYXQgY2FuIGFsc28gdGVsbCB1
cyBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIHBsYWNlZCBvbgorICAgICAgICBhIHJlbWVtYmVyZWQg
c2V0LgorCisgICAgICAgIFRoaXMgaXMgYXdmdWxseSBzaW1pbGFyIHRvIHdoYXQgeW91IHdhbnQg
aW4gYSBjb25jdXJyZW50IEdDLiBDb25jdXJyZW50IEdDcyB0eXBpY2FsbHkgd2FudCB3cml0ZXMK
KyAgICAgICAgdG8gdGhlIGhlYXAgdGhhdCBjaGFuZ2UgdGhlIG9iamVjdCBncmFwaCB0byBkbyBk
aWZmZXJlbnQgdGhpbmdzIGRlcGVuZGluZyBvbiBhbiBvYmplY3QncyBtYXJraW5nCisgICAgICAg
IHN0YXRlLCB3aGljaCBpcyB1c3VhbGx5IHJlZmVycmVkIHRvIGFzIGl0cyBjb2xvci4gV2hpdGUg
bWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBuZXZlciBiZWVuIHNlZW4KKyAgICAgICAgYnkgdGhl
IGNvbGxlY3Rvci4gQWxsIHdoaXRlIG9iamVjdHMgYXJlIHByZXN1bWVkIGRlYWQgYXQgdGhlIGZs
aXAuIEdyZXkgb2JqZWN0cyBhcmUgdGhvc2UgdGhhdCBhcmUKKyAgICAgICAga25vd24gdG8gdGhl
IGNvbGxlY3RvciBidXQgaGF2ZSBub3QgYmVlbiBzY2FubmVkLiBCbGFjayBvYmplY3RzIGFyZSB0
aG9zZSB0aGF0IGhhdmUgYmVlbiBzY2FubmVkLAorICAgICAgICBhbmQgd2lsbCBub3QgYmUgc2Nh
bm5lZCBhZ2Fpbi4gV2hpdGUgaXMgZXhhY3RseSBqdXN0ICJub3QgYmVpbmcgbWFya2VkIiwgYW5k
IGJvdGggZ3JleSBhbmQgYmxhY2sKKyAgICAgICAgbWVhbiAibWFya2VkIiAtIHdpdGggImJsYWNr
IiBtZWFuaW5nICJtYXJrZWQgYnV0IG5vdCBvbiBhbnkgd29ya2xpc3QiLiBUaGF0J3MgcXVpdGUg
YSBiaXQgbGlrZSB0aGUKKyAgICAgICAgY3VycmVudCAiTWFya2VkIiBhbmQgIk1hcmtlZEFuZFJl
bWVtYmVyZWQiIHN0YXRlcyB0aGF0IHdlIGhhdmUgZm9yIGdlbmVyYXRpb25hbCBHQy4KKyAgICAg
ICAgIk1hcmtlZEFuZFJlbWVtYmVyZWQiIGlzIGEgbG90IGxpa2UgImdyZXkiLCBhbmQgIk1hcmtl
ZCIgaXMgYSBsb3QgbGlrZSAiYmxhY2siLgorCisgICAgICAgIEkgd2FudCB0byBtYWtlIGEgY29u
Y3VycmVudCBHQyB0aGF0IHVuaWZpZXMgdGhlIGdlbmVyYXRpb25hbCBhbmQgY29uY3VycmVudCBi
YXJyaWVycyBpbnRvIGEgc2luZ2xlCisgICAgICAgIGZhc3QgcGF0aCBjaGVjay4gRXZlbiBiZXR0
ZXIgaWYgdGhlIHR3byBiYXJyaWVycyBhcmUgZW50aXJlbHkgaWRlbnRpY2FsLiBZb3UgY2FuIGRv
IHRoaXMgdXNpbmcKKyAgICAgICAgUGlyaW5lbidzIHRlY2huaXF1ZSAjMiBbMV0sIG9yaWdpbmFs
bHkgZHVlIHRvIEd1eSBTdGVlbGUgWzJdOiB3aGVuIGRvaW5nIG8uZj12IHdoZXJlIG8gaXMgYmxh
Y2sgYW5kCisgICAgICAgIHYgaXMgd2hpbGUsIHR1cm4gbyBncmV5IGFnYWluLiBUaGlzIGlzIGxp
a2UgcmVtZW1iZXJpbmcgYW4gb2JqZWN0LCBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgZ2VuIEdDCisg
ICAgICAgICJyZW1lbWJlcmVzIiBvIHdoZW4gbyBpcyBvbGQgYW5kIHYgaXMgbmV3LiBJdCByZW1l
bWJlcnMgb2JqZWN0cyBieSBwdXR0aW5nIHRoZW0gb24gdGhlIG1hcmsgc3RhY2ssCisgICAgICAg
IHNldHRpbmcgdGhlIGdlbmVyYXRpb25hbCBzdGF0ZSB0byBNYXJrZWRBbmRSZW1lbWJlcmVkLCBh
bmQgZG9pbmcgbm90aGluZyB0byB0aGUgcHJpbWFyeSBtYXJrIGJpdC4KKworICAgICAgICBUaGlz
IG1ha2VzIG91ciBjb25jdXJyZW50IEdDIGFwcHJvYWNoIHByZXR0eSBvYnZpb3VzLiBXZSB3YW50
IHRvIHVzZSBvbmUgYmFycmllciBmb3IgY29uY3VycmVudCBhbmQKKyAgICAgICAgZ2VuZXJhdGlv
bmFsLCBhbmQgd2Ugd2FudCB0byBiYXNpY2FsbHkga2VlcCBvdXIgY3VycmVudCBiYXJyaWVycyB1
bmNoYW5nZWQuIFRoZSBvbmx5IHRoaW5nIG1pc3NpbmcKKyAgICAgICAgYXJlIGp1c3Qgc29tZSBz
bWFsbCBjaGFuZ2VzIHRvIGFsbG93IHRoZSBjb25jdXJyZW50IEdDIHRvIGtub3cgcHJlY2lzZWx5
IHdoZW4gYW4gb2JqZWN0IGlzIGJsYWNrLAorICAgICAgICBhbmQgdG8ga25vdyBkdXJpbmcgb2Jq
ZWN0IHZpc2l0aW5nIGlmIHdlIGFyZSB2aXNpdGluZyB0aGUgb2JqZWN0IGZvciB0aGUgZmlyc3Qg
dGltZSBkdXJpbmcgYQorICAgICAgICBjb2xsZWN0aW9uIG9yIGEgc3Vic2VxdWVudCB0aW1lIGR1
ZSB0byBiYXJyaWVyIHJlLWdyZXlpbmcgKGNvbmN1cnJlbnQgR0MpIG9yIGJhcnJpZXIgcmVtZW1i
ZXJpbmcKKyAgICAgICAgKGdlbmVyYXRpb25hbCBHQykuIFNvLCB0aGlzIHBhdGNoIGRvZXMgdGhl
IGZvbGxvd2luZzoKKworICAgICAgICAtIENoYW5nZXMgdGhlIHRlcm1pbm9sb2d5IHVzZWQgZm9y
IHRoZSBnY0RhdGEgaGVhZGVyIGJ5dGUgaW4gSlNDZWxsLiBUaGlzIGNoYW5nZXMgdGhlIG5hbWUg
b2YgdGhpcworICAgICAgICAgIHRvIGNlbGxTdGF0ZSwgYW5kIGludHJvZHVjZXMgYSBuZXcgZW51
bWVyYXRpb24gY2FsbGVkIENlbGxTdGF0ZS4gVGhpcyBuZXcgZW51bWVyYXRpb24gYmVoYXZlcyBh
CisgICAgICAgICAgbG90IGxpa2UgdGhlIG9sZCBHQ0RhdGEgZGlkLiBJdCBoYXMgdGhlIGZvbGxv
d2luZyBtZW1iZXJzLCB3aXRoIHRoZSBmb2xsb3dpbmcgY29ycmVzcG9uZGVuY2UgdG8KKyAgICAg
ICAgICB0aGUgb2xkIEdDRGF0YToKKworICAgICAgICAgIE9sZEJsYWNrOiB0aGlzIGlzIGxpa2Ug
TWFya2VkLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB3ZSBlbnN1cmUgdGhhdCBhbiBvYmplY3Qg
YmVjb21lcyBPbGRCbGFjaworICAgICAgICAgICAgICBhcyBzb29uIGFzIHRoZSBvYmplY3Qgc3Rh
cnRzIHRvIGJlIHNjYW5uZWQuIFByZXZpb3VzbHksIGFuIG9iamVjdCBtaWdodCBiZQorICAgICAg
ICAgICAgICBNYXJrZWRBbmRSZW1lbWJlcmVkIGR1cmluZyBzY2FubmluZyBhbmQgd2UnZCB0dXJu
IGFsbCBNYXJrZWRBbmRSZW1lbWJlcmVkIG9iamVjdHMgaW50byBNYXJrZWQKKyAgICAgICAgICAg
ICAgb2JqZWN0cyBkdXJpbmcgYSBwb3N0LXByb2Nlc3Npbmcgc3RlcCBhdCB0aGUgZW5kIG9mIEdD
LiBUaGlzIHBhdGNoIGdldHMgcmlkIG9mIHRoYXQKKyAgICAgICAgICAgICAgcG9zdC1wcm9jZXNz
aW5nLiBUaGUgYWN0IG9mIHZpc2l0aW5nIGFuIG9iamVjdCB1bmNvbmRpdGlvbmFsbHkgbWFrZXMg
aXQgT2xkQmxhY2suIE5vdGUgdGhhdAorICAgICAgICAgICAgICBvdXIgZGVmaW5pdGlvbiBvZiAi
YmxhY2siIGlzIG5vdCB0aGF0IHRoZSBvYmplY3QgaXMgZG9uZSBiZWluZyBzY2FubmVkLCBidXQg
dGhhdCBpdCBpcyBlaXRoZXIKKyAgICAgICAgICAgICAgYmVpbmcgc2Nhbm5lZCByaWdodCBub3cg
b3IgaXQgaGFzIGFscmVhZHkgYmVlbiBzY2FubmVkLiBUaGlzIGlzIGxpa2UgYSBjb21iaW5hdGlv
biBvZgorICAgICAgICAgICAgICBTaWViZXJ0J3MgYW50aHJhY2l0ZSBhbmQgYmxhY2sgc3RhdGVz
IFszXS4KKworICAgICAgICAgIE5ld1doaXRlOiB0aGlzIGlzIGV4YWN0bHkgTm90TWFya2VkLiBJ
dCdzIHRoZSBzdGF0ZSB0aGF0IG9iamVjdHMgZ2V0IHdoZW4gdGhleSBhcmUgYWxsb2NhdGVkLgor
ICAgICAgICAgICAgICBJdCdzIGltcG9zc2libGUgZm9yIGFuIG9iamVjdCB0byByZXR1cm4gdG8g
dGhpcyBzdGF0ZS4KKworICAgICAgICAgIE9sZEdyZXk6IHRoZSBvYmplY3QgaXMgb24gdGhlIG1h
cmsgc3RhY2sgYW5kIHdpbGwgYmUgc2Nhbm5lZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUu
IFRoaXMKKyAgICAgICAgICAgICAgYWxzbyBtZWFucyB0aGF0IHRoaXMgaXNuJ3QgdGhlIGZpcnN0
IHRpbWUgaW4gdGhpcyBjeWNsZSB0aGF0IHRoZSBvYmplY3QgaGFzIGJlZW4gZ3JleS4gSW4gYW4K
KyAgICAgICAgICAgICAgZWRlbiBjb2xsZWN0aW9uLCBhbiBvbGQgb2JqZWN0IHRoYXQgaGFzIGJl
ZW4gcmVtZW1iZXJlZCBpcyB0aG91Z2h0IG9mIGFzIGJlaW5nIE9sZEdyZXksIGV2ZW4KKyAgICAg
ICAgICAgICAgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBkdXJpbmcgdGhpcyBlZGVuIGNvbGxl
Y3Rpb24gdGhhdCBpdCBpcyBncmV5LiBUaGF0J3MgYmVjYXVzZSBhbiBlZGVuCisgICAgICAgICAg
ICAgIGNvbGxlY3Rpb24gbXVzdCBiZWhhdmUgImFzIGlmIiB0aGUgZ3JleS0+YmxhY2sgdHJhbnNp
dGlvbiBmb3Igb2xkIG9iamVjdHMgbWFnaWNhbGx5IGhhcHBlbmVkCisgICAgICAgICAgICAgIGF0
IHRoZSBzdGFydCBvZiBHQy4gUmVtZW1iZXJlZCBvYmplY3RzIGFyZSBsaWtlIG9sZCBvYmplY3Rz
IHRoYXQgdW5kZXJ3ZW50IGEgY29uY3VycmVudAorICAgICAgICAgICAgICBiYXJyaWVyIHJlLWdy
ZXlpbmcganVzdCBhZnRlciB0aGUgbWFnaWNhbCBvbGQgb2JqZWN0IGdyZXktPmJsYWNrIHRyYW5z
aXRpb24gYXQgdGhlIHN0YXJ0IG9mCisgICAgICAgICAgICAgIEdDLiBUaGlzIHN0YXRlIGlzIGFs
bW9zdCBleGFjdGx5IGxpa2UgTWFya2VkQW5kUmVtZW1iZXJlZCwgZXhjZXB0IHRoYXQgYW4gb2Jq
ZWN0IG5vdworICAgICAgICAgICAgICB0cmFuc2l0aW9ucyBmcm9tIE9sZEdyZXkgdG8gT2xkQmxh
Y2sgYXQgdGhlIGJlZ2lubmluZyBvZiB2aXNpdGluZywgcmF0aGVyIHRoYW4gaG93IHByZXZpb3Vz
bHkKKyAgICAgICAgICAgICAgd2UgdHJhbnNpdGlvbmVkIGZyb20gTWFya2VkQW5kUmVtZW1iZXJl
ZCB0byBNYXJrZWQgYXQgdGhlIGJpdHRlcm4gZW5kIG9mIEdDLgorCisgICAgICAgICAgTmV3R3Jh
eTogdGhlIG9iamVjdCBpcyBvbiB0aGUgbWFyayBzdGFjayBhbmQgd2lsbCBiZSBzY2FubmVkIGF0
IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4gVGhpcworICAgICAgICAgICAgICBzdGF0ZSBoYXMg
bm8gY2xlYXIgcmVsYXRpdmUgaW4gdGhlIG9sZCBzdGF0ZSBzeXN0ZW0uIEl0IG1lYW5zIHRoYXQg
dGhlIG9iamVjdCBiZWNhbWUgZ3JleSBkdWUKKyAgICAgICAgICAgICAgdG8gb3JkaW5hcnkgbWFy
a2luZy4gUHJldmlvdXNseSwgb3JkaW5hcnkgbWFya2luZyB3b3VsZCBtYWtlIHRoZSBvYmplY3Qg
TWFya2VkLgorCisgICAgICAgIC0gUmVtb3ZhbCBvZiB0aGUgcG9zdC1wcm9jZXNzaW5nIHBoYXNl
IHRoYXQgImNsZWFycyIgdGhlIHJlbWVtYmVyZWQgc2V0IGJ5IG1vdmluZyBhbGwgcmVtZW1iZXJl
ZAorICAgICAgICAgIG9iamVjdHMgdG8gdGhlIE1hcmtlZCBzdGF0ZS4gVGhpcyBub3cgaGFwcGVu
cyBtYWdpY2FsbHkgZHVyaW5nIHZpc2l0aW5nLCBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgICAg
ICAgLSBTbG90VmlzaXRvciBub3cgcmVtZW1iZXJzIHRoZSBzdGF0ZSB0aGF0IHRoZSBvYmplY3Qg
ZGlkIGhhdmUganVzdCBiZWZvcmUgdmlzaXRpbmcuIFdoaWxlIHZpc2l0aW5nCisgICAgICAgICAg
dGhhdCBvYmplY3QsIGl0J3MgcG9zc2libGUgdG8gcXVlcnkgd2hhdCB0aGUgc3RhdGUgd2FzLiBU
aGlzIGlzIHVzZWQgZm9yIGNvcHkgc3BhY2UgZGVjaXNpb25zIGFuZAorICAgICAgICAgIGZvciBl
eHRyYSBtZW1vcnkgdXNhZ2UgYWNjb3VudGluZy4gV2UgZG9uJ3Qgd2FudCB0byBwdXQgdGhlIGJh
Y2tpbmcgc3RvcmUgb24gdGhlIGNvcHkgd29ya2xpc3QsCisgICAgICAgICAgYW5kIHdlIGRvbid0
IHdhbnQgdG8gY291bnQgZXh0cmEgbWVtb3J5IHVzYWdlLCBpZiB0aGUgb2JqZWN0IHdhcyBPbGRH
cmV5IGF0IHRoZSBzdGFydCBvZgorICAgICAgICAgIHZpc2l0aW5nLiBQcmV2aW91c2x5LCB3ZSB3
b3VsZCBiZSBhYmxlIHRvIGp1c3QgYXNrIGlmIHRoZSBvYmplY3Qgd2FzIE1hcmtlZEFuZFJlbWVt
YmVyZWQgc2luY2UKKyAgICAgICAgICB0aGF0IHN0YXRlIHdvdWxkbid0IGdldCBjbGVhcmVkIHVu
dGlsIGFmdGVyIGFsbCBtYXJraW5nIGZpbmlzaGVkLiBUaGlzIGNoYW5nZSBhbHNvIHNpbXBsaWZp
ZXMKKyAgICAgICAgICBzb21lIEFQSXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0byBwYXNz
IHRoZSBKU0NlbGwqIHBvaW50ZXIsIHNpbmNlIHRoZXNlIFNsb3RWaXNpdG9yIG1ldGhvZHMKKyAg
ICAgICAgICBubyBsb25nZXIgYXMgdGhlIGNlbGwgZm9yIGl0cyBzdGF0ZSAtIGluc3RlYWQgdGhl
eSB1c2UgdGhlIHNhdmVkIHByZS12aXNpdGluZyBzdGF0ZS4KKworICAgICAgICAtIFJlbW92YWwg
b2YgYSBidW5jaCBvZiBoZWxwZXJzIGFuZCBhYnN0cmFjdGlvbnMuIFByZXZpb3VzbHkgd2UgaGFk
IHZhcmlvdXMgbWV0aG9kcyBmb3IgYXNraW5nIGlmCisgICAgICAgICAgYW4gb2JqZWN0IHdhcyAi
bWFya2VkIiBhbmQgaWYgYW4gb2JqZWN0IHdhcyAicmVtZW1iZXJlZCIuIFdlIGhhZCBoZWxwZXJz
IGZvciBhZGp1c3RpbmcgdGhlc2UKKyAgICAgICAgICBzdGF0ZXMsIGFuZCB0aG9zZSBoZWxwZXJz
IHdvdWxkIGFzc2VydCB0aGF0IHRoZXkgd2VyZSBiZWluZyB1c2VkIHRoZSByaWdodCB3YXkuIFRo
aXMgaXMgbm90IHZlcnkKKyAgICAgICAgICB1c2VmdWwgZm9yIGNvbmN1cnJlbnQgR0MsIHNpbmNl
IG5vdyB0aGUgc2V0IG9mIHBvc3NpYmxlIHN0YXRlIHRyYW5zaXRpb25zIGlzIG11Y2ggbGFyZ2Vy
LiBBbHNvLAorICAgICAgICAgIHRoZSBwcmV2aW91cyB1c2Ugb2YgdGhlIHdvcmQgIm1hcmtlZCIg
d2FzIHByZXR0eSBiYWQgLSBmb3IgZXhhbXBsZSBpbiBIZWFwLCAibWFya2VkIiByZWZlcnMgdG8K
KyAgICAgICAgICB0aGUgcHJpbWFyeSBtYXJrIGJpdCAodGhhdCBnZXRzIGNsZWFyZWQgYXQgdGhl
IGZsaXApLCB3aGlsZSBpbiBKU0NlbGwsICJtYXJrZWQiIHJlZmVycyB0byB0aGUKKyAgICAgICAg
ICBzdGlja3kgbWFyayBiaXQgKHRoYXQgZG9lcyBub3QgZ2V0IGNsZWFyZWQsIGV2ZXIpLiBUaGlz
IGNoYW5nZSBnZXRzIHJpZCBvZiBhIGxvdCBvZiB0aG9zZSBoZWxwZXJzCisgICAgICAgICAgYW5k
IGlubGluZXMgdGhlaXIgbG9naWMuIFRoaXMgYWN0dWFsbHkgbWFrZXMgdGhlIGNvZGUgZWFzaWVy
IGFuZCBtb3JlIGZ1biB0byByZWFkLCBzaW5jZSB5b3UgY2FuCisgICAgICAgICAgbm93IGxvb2sg
YXQgdGhlIG1hcmtpbmcgYW5kIGJhcnJpZXIgY29kZSBhbmQgc2VlIGhvdyB0aGF0IGNvZGUgdXNl
cyB0aGUgZm91ciBDZWxsU3RhdGVzLiBGb3IKKyAgICAgICAgICBleGFtcGxlLCBpdCdzIGZ1biB0
byBzZWUgdGhhdCB0aGUgYmFycmllciBnZXRzIGZpcmVkIGZvciBvLmY9diBleGFjdGx5IHdoZW4g
byBpcyBPbGRCbGFjayBhbmQgdgorICAgICAgICAgIGlzIE5ld1doaXRlLgorCisgICAgICAgIFRo
aXMgY2hhbmdlIHNob3VsZG4ndCBoYXZlIGFueSBlZmZlY3Qgb24gcGVyZm9ybWFuY2Ugb3IgR0Mg
YmVoYXZpb3IuIEl0IGRvZXMgcHV0IG91ciBjb2RlIGluIGEKKyAgICAgICAgd2VpcmQgc3RhdGUg
d2hlcmUgd2Ugbm93IGhhdmUgc3RhdGVzIGFuZCBjb21tZW50cyByZWZlcmVuY2luZyBhIGNvbmN1
cnJlbnQgR0MgdGhhdCBkb2Vzbid0IGV4aXN0CisgICAgICAgIHlldC4KKworICAgICAgICBGaW5h
bGx5LCBzb21lIHRob3VnaHRzIGFib3V0IHRoZSBjb25jdXJyZW50IEdDIGJhcnJpZXIgYW5kIGl0
cyBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLiBUaGlzCisgICAgICAgIGJhcnJpZXIgZXho
aWJpdHMgdmVyeSBwb29yIGd1YXJhbnRlZXMgYWJvdXQgY29sbGVjdG9yIHByb2dyZXNzLCBidXQg
bWF4aW1pemVzIHRocm91Z2hwdXQgYnkganVzdAorICAgICAgICByZXVzaW5nIHRoZSBleGlzdGlu
ZyBiYXJyaWVyIGNvZGUgd2UgYWxyZWFkeSBlbWl0IGFuZCBvcHRpbWl6ZS4gSSBiZWxpZXZlIHRo
YXQgZXZlbiBvdXIgZXBvY2gtYmFzZWQKKyAgICAgICAgYmFycmllciBpbnNlcnRpb24gREZHIHBo
YXNlIGlzIGNvcnJlY3QgZm9yIHRoZSBjb25jdXJyZW50IGludGVycHJldGF0aW9uIG9mIG91ciBl
eGlzdGluZyBiYXJyaWVyLgorICAgICAgICBCdXQsIHRoZSBiYXJyaWVyIGNhbiByZWdyZXNzIHRo
ZSBwcm9ncmVzcyB0aGF0IHRoZSBjb2xsZWN0b3IgaGFzIG1hZGUgZm9yIHR3byByZWFzb25zOgor
CisgICAgICAgIEluY3JlbWVudGFsIHVwZGF0ZTogeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoaXMg
YmFycmllciB3aXRoIGEgYmxhY2sgc3RhY2ssIHNpbmNlIHRoYXQgd291bGQgbWVhbgorICAgICAg
ICB0aGF0IGhlYXAgbG9hZHMgb2Ygd2hpdGUgb2JqZWN0cyB3aWxsIGhhdmUgdG8gZXhwbGljaXRs
eSByZS1ncmV5IHRoZSBzdGFjay4gVGhlIHdheSB5b3UgaW1wbGVtZW50CisgICAgICAgIHRoaXMg
a2luZCBvZiBjb2xsZWN0b3IgaXMgdGhhdCBjb2xsZWN0b3IgdGVybWluYXRpb24gd2lsbCByZXNj
YW4gdGhlIHN0YWNrLiBUZXJtaW5hdGlvbiBpcyByZWFjaGVkCisgICAgICAgIG9ubHkgaWYgdGhl
IGF0LXRlcm1pbmF0aW9uIHJlLXNjYW4gZ3JleXMgbm8gb2JqZWN0cy4gVGhpcyBtZWFucyB0aGF0
IHRoZSBjb2xsZWN0b3IgaXMgYSBmaXhwb2ludC4KKyAgICAgICAgTHVja2lseSwgb3VyIGNvbGxl
Y3RvciBpcyBhbHJlYWR5IGEgZml4cG9pbnQgYmVjYXVzZSBvZiBvcGFxdWUgcm9vdHMgYW5kIHN0
cnVjdHVyZSB0cmFuc2l0aW9ucy4KKworICAgICAgICBNYXJraW5nIGFpbid0IG1vbm90b25pYzog
bm9ybWFsbHksIG9uY2UgYW4gb2JqZWN0IGlzIGJsYWNrLCBpdCBzdGF5cyB0aGF0IHdheS4gSW4g
dGhpcyBjb2xsZWN0b3IsCisgICAgICAgIGJsYWNrIG9iamVjdHMgbWF5IGJlY29tZSBncmV5IGFn
YWluLiBJIGRvbid0IGhhdmUgcGVyc29uYWwgZXhwZXJpZW5jZSB3aXRoIHN1Y2ggY29uY3VycmVu
dCBHQ3MsIGJ1dAorICAgICAgICBJIHN1c3BlY3QgdGhhdCB0aGlzIHdpbGwgYmFzaWNhbGx5IGJl
IGZpbmUuIENvbmN1cnJlbnQgY29sbGVjdGlvbnMgZmluaXNoIHByZXR0eSBxdWlja2x5LCBhbmQg
dGhlCisgICAgICAgIG11dGF0b3IgdXN1YWxseSB0b3VjaGVzIG9ubHkgYSBzdWJzZXQgb2YgdGhl
IGhlYXAuIE9ubHkgdGhhdCBzdWJzZXQgb2YgdGhlIGhlYXAgdGhhdCB0aGUgbXV0YXRvciBpcwor
ICAgICAgICB0b3VjaGluZyBjb3VsZCBiZSByZS1ncmV5ZWQuIFByb2JhYmx5LCB0aGUgR0Mgd2ls
bCBoYXZlIHRvIGJlIGh5YnJpZCBpbmNyZW1lbnRhbCBhbmQgY29uY3VycmVudCwKKyAgICAgICAg
YW5kIHRvd2FyZHMgdGhlIGVuZCBvZiBHQyB3aGVuIHdlIGRvIHRoZSB0ZXJtaW5hdGlvbiBzdGFj
ayByZS1zY2FuLCB3ZSBjYW4gZW5zdXJlIHRoYXQgdGhlCisgICAgICAgIGNvbGxlY3RvciBkb2Vz
IHNvbWUgbWluaW1hbCBhbW91bnQgb2YgbWFya2luZy4gSWYgdGhlIG1pbmltYWwgYW1vdW50IG9m
IG1hcmtpbmcgZG9uZSBieSB0aGUKKyAgICAgICAgY29sbGVjdG9yIGlzIGxhcmdlIGVub3VnaCwg
d2UgY2FuIGVuc3VyZSB0aGF0IHdlIHJlYWNoIHRlcm1pbmF0aW9uIGJlZm9yZSB0aGUgbXV0YXRv
ciBjYW4gcmVncmVzcworICAgICAgICBwcm9ncmVzcy4gVGhlIGJhcnJpZXIgY2Fubm90IHVuLXRl
cm1pbmF0ZSB0aGUgY29sbGVjdG9yOyBpZiB0aGUgY29sbGVjdG9yIHJlYWNoZXMgdGVybWluYXRp
b24gYW5kCisgICAgICAgIHRoZSBiYXJyaWVyIHJlLWdyZXlzIGFuIG9iamVjdCB0aGVuIGl0J3Mg
YWN0dWFsbHkgZG9pbmcgYSBnZW5lcmF0aW9uYWwgcmVtZW1iZXJpbmcgcmF0aGVyIHRoYW4gYQor
ICAgICAgICBjb25jdXJyZW50IHJlLWdyZXlpbmcuCisKKyAgICAgICAgVGhhdCdzIHNvcnQgb2Yg
dGhlIGN1dGUgdGhpbmcgYWJvdXQgdGhlIGJhcnJpZXIgLSBpdCBpcyBleGFjdGx5IGEgcmUtZ3Jl
eWluZyBiYXJyaWVyIGR1cmluZyBHQyBhbmQKKyAgICAgICAgaXQgaXMgZXhhY3RseSBhIHJlbWVt
YmVyaW5nIGJhcnJpZXIgaW4gYmV0d2VlbiBHQ3MuCisKKyAgICAgICAgWzFdIGh0dHA6Ly93d3cu
Y3MudXRleGFzLmVkdS9mdHAvZ2FyYmFnZS9zdWJtaXQvcmVhZGFibGUvcHBpcmluZW4xMS5wcwor
ICAgICAgICBbMl0gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTM2MTAwNQorICAg
ICAgICBbM10gaHR0cDovL3d3dy5haWNhcy5jb20vcGFwZXJzL0lTTU0xMzItc2llYmVydC5wZGYK
KworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpsb2FkQ2VsbFN0YXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
OjplbWl0U3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpsb2FkTWFya0J5dGUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6
IEFkZGVkLgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrU2V0OjpyZW1lbWJlckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3MpOgorICAg
ICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAgICAgKiBoZWFwL0NvcGllZEJsb2NrSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKToKKyAg
ICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExpdmVCeXRlcyk6IERlbGV0ZWQu
CisgICAgICAgICogaGVhcC9HQ0xvZ2dpbmcuY3BwOgorICAgICAgICAoSlNDOjpMb2dnaW5nRnVu
Y3Rvcjo6cmV2aXZlQ2VsbHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0V2Vha0hhbmRs
ZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMpOgorICAgICAgICAo
SlNDOjpIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFwOjpjbGVh
clJlbWVtYmVyZWRTZXQpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAqIGhlYXAvSGVhcElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNMaXZlKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6aXNNYXJrZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJh
cnJpZXIpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZCk6
CisgICAgICAgIChKU0M6OkhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmlzUmVtZW1iZXJlZCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90
VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmQpOgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmRyYWluKToKKyAgICAgICAgKEpTQzo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAg
ICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2hpbGRD
b3VudCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppbmNyZW1lbnRDaGlsZENvdW50KToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRhdGFCZWZvcmVWaXNpdGluZ0N1cnJlbnRPYmpl
Y3QpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
Ojpjb3B5TGF0ZXIpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmhlYXApOgorICAgICAgICAq
IGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpq
dW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbik6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Y2VsbFN0YXRlKToKKyAg
ICAgICAgKEpTQzo6SlNDZWxsOjpzZXRDZWxsU3RhdGUpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5cGVP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCk6CisgICAgICAg
IChKU0M6OkpTQ2VsbDo6c2V0TWFya2VkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDZWxs
OjpzZXRSZW1lbWJlcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDZWxsOjppc01hcmtl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQ2VsbDo6aXNSZW1lbWJlcmVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnY0RhdGFPZmZzZXQpOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2Vs
bCk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5j
cHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6
OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxvYjo6b3BlcmF0
b3I9KToKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6
V2Vha01hcERhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpXZWFrTWFwRGF0YTo6
c2V0KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvYmFzaWMtZWRlbi1nYy10ZXN0LmpzOiBBZGRl
ZC4KKwogMjAxNS0xMC0wMiAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGJyZWFrcG9pbnQgb3B0aW9uIHRvIGlnbm9yZSBuIHRp
bWVzIGJlZm9yZSBzdG9wcGluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE5MDU0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDcg
QEAKIAkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5oICovOyB9OwogCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAg
Ki87IH07CiAJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE5
MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMUMzRERBMUJCQ0Uw
OUUwMEU1MjNFNCAvKiBDZWxsU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMUMzREQ5MUJCQ0UwOUUwMEU1MjNFNCAvKiBDZWxsU3RhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFERDg0
QTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxREQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDMxNTM0Q0JB
RDAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCAqLzsgfTsKIAkJMEYxRTNBNDcxNTM0
Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyog
REZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKQEAgLTE5NjUsNiArMTk2Niw3IEBACiAJCTBG
MThEM0NFMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50Lmg7IHBhdGggPSBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAv
KiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgcGF0
aCA9IHByb2ZpbGVyL1Byb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYxQzNERDkxQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDZWxsU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1l
bnRQb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcmd1bWVu
dFBvc2l0aW9uLmg7IHBhdGggPSBkZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91Ymxl
Rm9ybWF0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRG91Ymxl
Rm9ybWF0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDIyOSw2ICs0MjMxLDcgQEAKIAkJMTQyRTMxMkExMzRG
RjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTBGMUMzREQ5MUJCQ0UwOUUwMEU1MjNFNCAvKiBDZWxsU3RhdGUuaCAqLywK
IAkJCQkwRkQ4QTMxMTE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmNwcCAqLywKIAkJ
CQkwRkQ4QTMxMjE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggKi8sCiAJCQkJMTQ2
QjE0REIxMkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKQEAgLTY5
MjEsNiArNjkyNCw3IEBACiAJCQkJMTQxNDJFNTExQjc5NkVDRTAwRjRCRjRCIC8qIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyQzE2RDAyOEFE
MDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NjNCMzgx
M0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYx
QzNEREExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE5MDU0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzczLDkgKzIzNzMsOSBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIob3Ro
ZXJCbG9jayk7CiAKICAgICBpZiAobV9qaXRDb2RlKQotICAgICAgICB2aXNpdG9yLnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZCh0aGlzLCBtX2ppdENvZGUtPnNpemUoKSk7CisgICAgICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1faml0Q29kZS0+c2l6ZSgpKTsKICAgICBpZiAo
bV9pbnN0cnVjdGlvbnMuc2l6ZSgpKQotICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZCh0aGlzLCBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24p
IC8gbV9pbnN0cnVjdGlvbnMucmVmQ291bnQoKSk7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlv
bikgLyBtX2luc3RydWN0aW9ucy5yZWZDb3VudCgpKTsKIAogICAgIHZpc2l0b3IuYXBwZW5kKCZt
X3VubGlua2VkQ29kZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMTkwNTQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIEFic3RyYWN0SGVhcFJlcG9zaXRv
cnk6OkFic3RyYWN0SGVhcFJlcG8KICAgICBSRUxFQVNFX0FTU0VSVCghKEpTQ2VsbF9pbmRleGlu
Z1R5cGUub2Zmc2V0KCkgJiAoc2l6ZW9mKGludDMyX3QpIC0gMSkpKTsKICAgICBSRUxFQVNFX0FT
U0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlLm9mZnNldCgpICsgMSA9PSBKU0NlbGxfdHlwZUluZm9U
eXBlLm9mZnNldCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlLm9m
ZnNldCgpICsgMiA9PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSArIDMgPT0gSlNDZWxsX2djRGF0
YS5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZz
ZXQoKSArIDMgPT0gSlNDZWxsX2NlbGxTdGF0ZS5vZmZzZXQoKSk7CiAKICAgICBKU0NlbGxfaW5k
ZXhpbmdUeXBlLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxf
dHlwZUluZm9UeXBlLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0Nl
bGxfdHlwZUluZm9GbGFncy5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7Ci0gICAg
SlNDZWxsX2djRGF0YS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CisgICAgSlND
ZWxsX2NlbGxTdGF0ZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgCiAg
ICAgcm9vdC5tX3RiYWFNZXRhZGF0YSA9IG1kTm9kZShtX2NvbnRleHQsIG1kU3RyaW5nKG1fY29u
dGV4dCwgcm9vdC5tX2hlYXBOYW1lKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24g
MTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEyICs1MiwxMiBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKEpTQXJyYXlC
dWZmZXJWaWV3X21vZGUsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUoKSkgXAogICAg
IG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvciwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mVmVjdG9yKCkpIFwKKyAgICBtYWNybyhKU0NlbGxfY2VsbFN0YXRlLCBKU0NlbGw6OmNlbGxT
dGF0ZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSwgSlNDZWxsOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1cmVJRCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSBcCi0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVz
LCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJ
bmZvRmxhZ3MsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlND
ZWxsX3R5cGVJbmZvVHlwZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSkgXAotICAgIG1h
Y3JvKEpTQ2VsbF9pbmRleGluZ1R5cGUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpIFwK
LSAgICBtYWNybyhKU0NlbGxfZ2NEYXRhLCBKU0NlbGw6OmdjRGF0YU9mZnNldCgpKSBcCisgICAg
bWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSBc
CiAgICAgbWFjcm8oSlNGdW5jdGlvbl9leGVjdXRhYmxlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fc2NvcGUsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSBcCiAgICAgbWFjcm8oSlNGdW5jdGlvbl9yYXJlRGF0YSwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkwNTQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgyNjAsOSArODI2MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX2dy
YXBoLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fbm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKICAgICB9CiAgICAgCi0gICAgTFZhbHVlIGxvYWRNYXJrQnl0ZShM
VmFsdWUgYmFzZSkKKyAgICBMVmFsdWUgbG9hZENlbGxTdGF0ZShMVmFsdWUgYmFzZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkOChiYXNlLCBtX2hlYXBzLkpTQ2VsbF9nY0RhdGEp
OworICAgICAgICByZXR1cm4gbV9vdXQubG9hZDgoYmFzZSwgbV9oZWFwcy5KU0NlbGxfY2VsbFN0
YXRlKTsKICAgICB9CiAKICAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVlIGJhc2UpCkBA
IC04Mjc0LDcgKzgyNzQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIENoZWNrIHRoZSBtYXJr
IGJ5dGUuIAogICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RaZXJv
OChsb2FkTWFya0J5dGUoYmFzZSkpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpc01h
cmtlZEFuZE5vdFJlbWVtYmVyZWQpKTsKKyAgICAgICAgICAgIG1fb3V0Lm5vdFplcm84KGxvYWRD
ZWxsU3RhdGUoYmFzZSkpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpc01hcmtlZEFu
ZE5vdFJlbWVtYmVyZWQpKTsKIAogICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIHdyaXRlIGJhcnJp
ZXIgYnVmZmVyLgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGlzTWFya2VkQW5kTm90UmVtZW1iZXJlZCwgYnVmZmVySGFzU3BhY2UpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDZWxsU3RhdGVfaAorI2RlZmluZSBDZWxsU3RhdGVf
aAorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBDZWxsU3RhdGUgOiB1aW50OF90IHsK
KyAgICAvLyBUaGUgb2JqZWN0IGlzIGJsYWNrIGFzIGZhciBhcyB0aGlzIEdDIGlzIGNvbmNlcm5l
ZC4gV2hlbiBub3QgaW4gR0MsIHRoaXMganVzdCBtZWFucyB0aGF0IGl0J3MgYW4KKyAgICAvLyBv
bGQgZ2VuIG9iamVjdC4gTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSBhcnJhbmdlIE9sZEJsYWNr
IHRvIGJlIHplcm8sIHNvIHRoYXQgdGhlIHN0b3JlIGJhcnJpZXIgb24KKyAgICAvLyBhIHRhcmdl
dCBvYmplY3QgImZyb20iIGlzIGp1c3Q6CisgICAgLy8KKyAgICAvLyBpZiAoIWZyb20tPmNlbGxT
dGF0ZSgpKQorICAgIC8vICAgICBzbG93UGF0aChmcm9tKTsKKyAgICAvLworICAgIC8vIFRoZXJl
IGlzIGEgYnVuY2ggb2YgY29kZSBpbiB0aGUgTExJbnQgYW5kIEpJVHMgdGhhdCByZWx5IG9uIHRo
aXMgYmVpbmcgdGhlIGNhc2UuIFlvdSdkIGhhdmUgdG8KKyAgICAvLyBjaGFuZ2UgYSBsb3Qgb2Yg
Y29kZSBpZiB5b3UgZXZlciB3YW50ZWQgdGhlIHN0b3JlIGJhcnJpZXIgdG8gYmUgYW55dGhpbmcg
YnV0IGEgbm9uLXplcm8gY2hlY2sgb24KKyAgICAvLyBjZWxsU3RhdGUuCisgICAgT2xkQmxhY2sg
PSAwLAorICAgIAorICAgIC8vIFRoZSBvYmplY3QgaXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlz
IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoYXMgbm90IGJlZW4gbWFya2VkIHlldC4KKyAgICBOZXdX
aGl0ZSA9IDEsCisKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUg
c2Nhbm5lZCAtIGJ1dCBpdCBlaXRoZXIgYmVsb25ncyB0byBvbGQgZ2VuIChpZiB0aGlzIGlzIGVk
ZW4KKyAgICAvLyBHQykgb3IgaXQgaXMgZ3JleSBhIHNlY29uZCB0aW1lIGluIHRoaXMgY3VycmVu
dCBHQyAoYmVjYXVzZSBhIGNvbmN1cnJlbnQgc3RvcmUgYmFycmllciByZXF1ZXN0ZWQKKyAgICAv
LyByZS1ncmV5aW5nKS4KKyAgICBPbGRHcmV5ID0gMiwKKworICAgIC8vIFRoZSBvYmplY3QgaXMg
Z3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRp
bWUgaW4gdGhpcyBHQyB0aGF0IHdlIGFyZQorICAgIC8vIGdvaW5nIHRvIHNjYW4gaXQuIElmIHRo
aXMgaXMgYW4gZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBl
ZGVuLgorICAgIE5ld0dyZXkgPSAzCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIENlbGxTdGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29k
ZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDAsNyArMTAwLDcg
QEAgdm9pZCBDb2RlQmxvY2tTZXQ6OnJlbWVtYmVyQ3VycmVudGx5RXhlYwogICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nKCJSZW1lbWJlcmluZyAiLCBtX2N1cnJlbnRseUV4ZWN1dGlu
Zy5zaXplKCksICIgY29kZSBibG9ja3MuXG4iKTsKICAgICBmb3IgKENvZGVCbG9jayogY29kZUJs
b2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcpCi0gICAgICAgIGhlYXAtPmFkZFRvUmVtZW1iZXJl
ZFNldChjb2RlQmxvY2spOworICAgICAgICBoZWFwLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsK
ICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5jbGVhcigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlzaW9uIDE5MDU0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDcg
KzU0LDYgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUHJvbW90ZSgpOwogCiAgICAgdW5zaWduZWQg
bGl2ZUJ5dGVzKCk7Ci0gICAgYm9vbCBzaG91bGRSZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYs
IEpTQ2VsbCogb3duZXIpOwogICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBK
U0NlbGwqLCBDb3B5VG9rZW4sIHVuc2lnbmVkKTsKICAgICB2b2lkIHJlcG9ydExpdmVCeXRlc0R1
cmluZ0NvcHlpbmcodW5zaWduZWQpOwogICAgIHZvaWQgZGlkU3Vydml2ZUdDKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAkocmV2
aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDE2ICszMyw2IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogICAgIAotaW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9y
dExpdmVCeXRlcyhMb2NrSG9sZGVyJiwgSlNDZWxsKiBvd25lcikKLXsKLSAgICAvLyBXZSB3YW50
IHRvIGFkZCB0byBsaXZlIGJ5dGVzIGlmIHRoZSBvd25lciBpc24ndCBwYXJ0IG9mIHRoZSByZW1l
bWJlcmVkIHNldCBvcgotICAgIC8vIGlmIHRoaXMgYmxvY2sgd2FzIGFsbG9jYXRlZCBkdXJpbmcg
dGhlIGxhc3QgY3ljbGUuIAotICAgIC8vIElmIHdlIGFsd2F5cyBhZGRlZCBsaXZlIGJ5dGVzIHdl
IHdvdWxkIGRvdWJsZSBjb3VudCBmb3IgZWxlbWVudHMgaW4gdGhlIHJlbWVtYmVyZWQKLSAgICAv
LyBzZXQgYWNyb3NzIGNvbGxlY3Rpb25zLiAKLSAgICAvLyBJZiB3ZSBkaWRuJ3QgYWx3YXlzIGFk
ZCBsaXZlIGJ5dGVzIHRvIG5ldyBibG9ja3MsIHdlJ2QgZ2V0IHRvbyBmZXcuCi0gICAgcmV0dXJu
ICFIZWFwOjppc1JlbWVtYmVyZWQob3duZXIpIHx8ICFtX2lzT2xkOwotfQotCiBpbmxpbmUgdm9p
ZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVy
LCBDb3B5VG9rZW4gdG9rZW4sIHVuc2lnbmVkIGJ5dGVzKQogewogICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDTG9nZ2luZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NMb2dnaW5nLmNwcAkocmV2
aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NMb2dnaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgZm9y
IChjb25zdCBKU0NlbGwqIGNlbGwgOiBtX3NhdmVkTWFya1N0YWNrKSB7CiAgICAgICAgICAgICBt
X3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygpLmFwcGVuZChjZWxsKTsKLSAgICAgICAgICAgIGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCktPnNldFJlbWVtYmVyZWQodHJ1ZSk7CisgICAgICAgICAgICBj
ZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE5MDU0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OTgsNyArNTk4LDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1l
LAogICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgog
ICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKIAotICAgIGNsZWFyUmVtZW1i
ZXJlZFNldChyZW1lbWJlcmVkU2V0KTsKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsKICAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0ID0gdHJ1ZTsKQEAgLTg1NiwxMyArODU1LDYgQEAgdm9pZCBIZWFwOjp2aXNpdFdlYWtI
YW5kbGVzKEhlYXBSb290VmlzaQogICAgIH0KIH0KIAotdm9pZCBIZWFwOjpjbGVhclJlbWVtYmVy
ZWRTZXQoVmVjdG9yPGNvbnN0IEpTQ2VsbCo+JiByZW1lbWJlcmVkU2V0KQotewotICAgIEdDUEhB
U0UoQ2xlYXJSZW1lbWJlcmVkU2V0KTsKLSAgICBmb3IgKGF1dG8qIGNlbGwgOiByZW1lbWJlcmVk
U2V0KQotICAgICAgICBjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLT5zZXRSZW1lbWJlcmVkKGZh
bHNlKTsKLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRU
aW1lKQogewogICAgIEdDQ09VTlRFUihWaXNpdGVkVmFsdWVDb3VudCwgbV9zbG90VmlzaXRvci52
aXNpdENvdW50KCkpOwpAQCAtMTAxMCw5ICsxMDAyLDEzIEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1l
bWJlcmVkU2V0KGNvbnN0IEpTQ2UKIHsKICAgICBBU1NFUlQoY2VsbCk7CiAgICAgQVNTRVJUKCFP
cHRpb25zOjplbmFibGVDb25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7
Ci0gICAgaWYgKGlzUmVtZW1iZXJlZChjZWxsKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCktPnNldFJlbWVtYmVyZWQodHJ1ZSk7CisgICAgQVNTRVJUKGNl
bGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6T2xkQmxhY2spOworICAgIC8vIEluZGljYXRl
IHRoYXQgdGhpcyBvYmplY3QgaXMgZ3JleSBhbmQgdGhhdCBpdCdzIG9uZSBvZiB0aGUgZm9sbG93
aW5nOgorICAgIC8vIC0gQSByZS1ncmV5ZWQgb2JqZWN0IGR1cmluZyBhIGNvbmN1cnJlbnQgY29s
bGVjdGlvbi4KKyAgICAvLyAtIEFuIG9sZCByZW1lbWJlcmVkIG9iamVjdC4KKyAgICAvLyAiT2xk
R3JleSIgZG9lc24ndCB0ZWxsIHVzIHdoaWNoIG9mIHRoZXNlIHRoaW5ncyBpcyB0cnVlLCBidXQg
d2UgdXN1YWxseSB0cmVhdCB0aGUgdHdvIGNhc2VzIHRoZQorICAgIC8vIHNhbWUuCisgICAgY2Vs
bC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkR3JleSk7CiAgICAgbV9zbG90VmlzaXRvci51
bmNvbmRpdGlvbmFsbHlBcHBlbmQoY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE5MDU0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDkgKzEw
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc01hcmtlZChjb25zdCB2b2lkKik7CiAg
ICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAgc3RhdGlj
IHZvaWQgc2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKLSAgICBzdGF0aWMgYm9vbCBpc1JlbWVtYmVy
ZWQoY29uc3Qgdm9pZCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRUb1JlbWVt
YmVyZWRTZXQoY29uc3QgSlNDZWxsKik7CiAgICAgc3RhdGljIGJvb2wgaXNXcml0ZUJhcnJpZXJF
bmFibGVkKCk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKik7CiAgICAgdm9p
ZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7CkBAIC0xNjcsNyArMTY1LDcg
QEAgcHVibGljOgogICAgIC8vIGNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnM6IENhbGxpbmcg
b25seSBvbmUgbWF5IHRyaWdnZXIgY2F0YXN0cm9waWMKICAgICAvLyBtZW1vcnkgZ3Jvd3RoLgog
ICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKLSAgICB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChKU0NlbGwqLCBzaXplX3QpOworICAgIHZvaWQgcmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBkYXRhQmVmb3JlVmlzaXRpbmcsIHNpemVfdCk7
CiAKICAgICAvLyBVc2UgdGhpcyBBUEkgdG8gcmVwb3J0IG5vbi1HQyBtZW1vcnkgaWYgeW91IGNh
bid0IHVzZSB0aGUgYmV0dGVyIEFQSSBhYm92ZS4KICAgICB2b2lkIGRlcHJlY2F0ZWRSZXBvcnRF
eHRyYU1lbW9yeShzaXplX3QpOwpAQCAtMzA2LDcgKzMwNCw2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKICAgICB2b2lkIGNvbnZlcmdl
KCk7CiAgICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZv
aWQgY2xlYXJSZW1lbWJlcmVkU2V0KFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYpOwogICAgIHZvaWQg
dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCByZXNldFZp
c2l0b3JzKCk7CiAKQEAgLTMyMyw2ICszMjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogICAgIHZvaWQgY2xlYXJVbm1hcmtlZEV4ZWN1
dGFibGVzKCk7CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCopOwog
ICAgIHZvaWQgdXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpOwogICAgIHZvaWQgZGlkRmluaXNoQ29s
bGVjdGlvbihkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgcmVzdW1lQ29tcGlsZXJUaHJl
YWRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJl
dmlzaW9uIDE5MDU0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDE0ICs3MCw2IEBAIGlubGluZSBib29sIEhlYXA6OmlzTGl2
ZShjb25zdCB2b2lkKiBjZWwKICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwp
LT5pc0xpdmVDZWxsKGNlbGwpOwogfQogCi1pbmxpbmUgYm9vbCBIZWFwOjppc1JlbWVtYmVyZWQo
Y29uc3Qgdm9pZCogcHRyKQotewotICAgIGNvbnN0IEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0
PGNvbnN0IEpTQ2VsbCo+KHB0cik7Ci0gICAgQVNTRVJUKGNlbGwpOwotICAgIEFTU0VSVCghT3B0
aW9uczo6ZW5hYmxlQ29uY3VycmVudEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwot
ICAgIHJldHVybiBjZWxsLT5pc1JlbWVtYmVyZWQoKTsKLX0KLQogaW5saW5lIGJvb2wgSGVhcDo6
aXNNYXJrZWQoY29uc3Qgdm9pZCogY2VsbCkKIHsKICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJs
b2NrRm9yKGNlbGwpLT5pc01hcmtlZChjZWxsKTsKQEAgLTExMywyNSArMTA1LDE4IEBAIGlubGlu
ZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0MKICNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJy
aWVyKCk7CiAjZW5kaWYKLSAgICBpZiAoIWZyb20gfHwgIWZyb20tPmlzTWFya2VkKCkpIHsKLSAg
ICAgICAgQVNTRVJUKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSk7CisgICAgaWYgKCFmcm9tIHx8
IGZyb20tPmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6T2xkQmxhY2spCiAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCF0byB8fCB0by0+aXNNYXJrZWQoKSkgewotICAgICAgICBBU1NF
UlQoIXRvIHx8IGlzTWFya2VkKHRvKSk7CisgICAgaWYgKCF0byB8fCB0by0+Y2VsbFN0YXRlKCkg
IT0gQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBhZGRU
b1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmll
cihjb25zdCBKU0NlbGwqIGZyb20pCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJ
RChjb25zdF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKLSAgICBpZiAoIWZyb20gfHwgIWZyb20tPmlz
TWFya2VkKCkpIHsKLSAgICAgICAgQVNTRVJUKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSk7Cisg
ICAgaWYgKCFmcm9tIHx8IGZyb20tPmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6T2xkQmxhY2sp
CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKGlzTWFya2VkKGZyb20pKTsKICAg
ICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKQEAgLTE0MSwxMCArMTI2LDEwIEBAIGlu
bGluZSB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2MKICAgICAgICAgcmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWRTbG93Q2FzZShzaXplKTsKIH0KIAotaW5saW5lIHZvaWQgSGVhcDo6
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKEpTQ2VsbCogb3duZXIsIHNpemVfdCBzaXplKQoraW5s
aW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBkYXRhQmVm
b3JlVmlzaXRpbmcsIHNpemVfdCBzaXplKQogewogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91
YmxlLWNvdW50IHRoZSBleHRyYSBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMg
Y29sbGVjdGlvbnMuCi0gICAgaWYgKG9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVj
dGlvbiAmJiBIZWFwOjppc1JlbWVtYmVyZWQob3duZXIpKQorICAgIGlmIChvcGVyYXRpb25JblBy
b2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24gJiYgZGF0YUJlZm9yZVZpc2l0aW5nID09IENlbGxT
dGF0ZTo6T2xkR3JleSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90KiBjb3VudGVyID0g
Jm1fZXh0cmFNZW1vcnlTaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwyOCArOTUsMzIgQEAg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvbwogICAgICAgICBpbnRlcm5h
bEFwcGVuZCgwLCByb290c1tpXSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlNDZWxsKiBjZWxsKQorQUxX
QVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCog
Y2VsbCkKIHsKICAgICBTdGFja1N0YXRzOjpwcm9iZSgpOwogCiAgICAgQVNTRVJUKEhlYXA6Omlz
TWFya2VkKGNlbGwpKTsKKyAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRl
OjpPbGRHcmV5IHx8IGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6TmV3R3JleSk7CisK
KyAgICBtX2RhdGFCZWZvcmVWaXNpdGluZyA9IGNlbGwtPmNlbGxTdGF0ZSgpOworICAgIGNlbGwt
PnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok9sZEJsYWNrKTsKICAgICAKICAgICBpZiAoaXNKU1N0
cmluZyhjZWxsKSkgewotICAgICAgICBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0
PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKKyAgICAgICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRy
ZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChjZWxsKSkgewotICAgICAgICBKU0ZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksIHZpc2l0b3Ip
OworICAgICAgICBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxs
Kj4oY2VsbCksICp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChpc0pT
QXJyYXkoY2VsbCkpIHsKLSAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0
PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKKyAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJl
bihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBjZWxsLT5tZXRob2RUYWJsZSgpLT52aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8
SlNDZWxsKj4oY2VsbCksIHZpc2l0b3IpOworICAgIGNlbGwtPm1ldGhvZFRhYmxlKCktPnZpc2l0
Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgKnRoaXMpOwogfQogCiB2b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKQEAgLTE1NCw3ICsxNTgsNyBAQCB2b2lk
IFNsb3RWaXNpdG9yOjpkcmFpbigpCiAgICAgd2hpbGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgewog
ICAgICAgICBtX3N0YWNrLnJlZmlsbCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93
biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX3N0
YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCi0gICAgICAgICAgICB2aXNpdENo
aWxkcmVuKCp0aGlzLCBtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgICAgICB2aXNpdENo
aWxkcmVuKG1fc3RhY2sucmVtb3ZlTGFzdCgpKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxl
bCgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuaAkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3
IEBACiAjaWZuZGVmIFNsb3RWaXNpdG9yX2gKICNkZWZpbmUgU2xvdFZpc2l0b3JfaAogCisjaW5j
bHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVkZSAiQ29weVRva2VuLmgiCiAjaW5jbHVkZSAiSGFu
ZGxlVHlwZXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKQEAgLTEwNCw3ICsxMDUsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGNvcHlMYXRlcihKU0NlbGwqLCBDb3B5VG9rZW4sIHZvaWQqLCBz
aXplX3QpOwogICAgIAotICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKEpTQ2VsbCog
b3duZXIsIHNpemVfdCk7CisgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90
KTsKICAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoV2Vha1JlZmVyZW5j
ZUhhcnZlc3RlciopOwogICAgIHZvaWQgYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihVbmNvbmRp
dGlvbmFsRmluYWxpemVyKik7CkBAIC0xMTMsNiArMTE0LDggQEAgcHVibGljOgogICAgIGlubGlu
ZSB1bnNpZ25lZCBjaGlsZENvdW50KCkgeyByZXR1cm4gbV9sb2dDaGlsZENvdW50OyB9CiAgICAg
aW5saW5lIHZvaWQgaW5jcmVtZW50Q2hpbGRDb3VudCgpIHsgbV9sb2dDaGlsZENvdW50Kys7IH0K
IAorICAgIENlbGxTdGF0ZSBkYXRhQmVmb3JlVmlzaXRpbmdDdXJyZW50T2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhQmVmb3JlVmlzaXRpbmc7IH0KKwogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtMTMxLDYgKzEzNCw4IEBAIHByaXZhdGU6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgdm9pZCBt
ZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJ
ZlByb2ZpdGFibGUoKTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsK
ICAgICAKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKIApAQCAtMTUwLDYgKzE1NSw4
IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX2xvZ0NoaWxkQ291bnQ7CiAKKyAgICBDZWxs
U3RhdGUgbV9kYXRhQmVmb3JlVmlzaXRpbmcgeyBDZWxsU3RhdGU6Ok5ld1doaXRlIH07CisKIHB1
YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTEzLDcgKzExMywxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6Omlu
dGVybmFsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjZWxsLT5zZXRNYXJrZWQoKTsK
KyAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBvYmplY3QgaXMgZ3JleSBhbmQgdGhhdDoKKyAgICAv
LyBJbiBjYXNlIG9mIGNvbmN1cnJlbnQgR0M6IGl0J3MgdGhlIGZpcnN0IHRpbWUgaXQgaXMgZ3Jl
eSBpbiB0aGlzIEdDIGN5Y2xlLgorICAgIC8vIEluIGNhc2Ugb2YgZWRlbiBjb2xsZWN0aW9uOiBp
dCdzIGEgbmV3IG9iamVjdCB0aGF0IGJlY2FtZSBncmV5IHJhdGhlciB0aGFuIGFuIG9sZCByZW1l
bWJlcmVkIG9iamVjdC4KKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5
KTsKKyAgICAKICAgICBtX2J5dGVzVmlzaXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2Vs
bCktPmNlbGxTaXplKCk7CiAgICAgICAgIAogICAgIHVuY29uZGl0aW9uYWxseUFwcGVuZChjZWxs
KTsKQEAgLTIzOSwxNSArMjQzLDIyIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0
ZXIoSlNDZWwKICAgICBBU1NFUlQoaGVhcCgpLT5tX3N0b3JhZ2VTcGFjZS5jb250YWlucyhibG9j
aykpOwogCiAgICAgTG9ja0hvbGRlciBsb2NrZXIoJmJsb2NrLT53b3JrTGlzdExvY2soKSk7Ci0g
ICAgaWYgKGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uIHx8
IGJsb2NrLT5zaG91bGRSZXBvcnRMaXZlQnl0ZXMobG9ja2VyLCBvd25lcikpIHsKKyAgICAvLyBX
ZSBhbHdheXMgcmVwb3J0IGxpdmUgYnl0ZXMsIGV4Y2VwdCBpZiBkdXJpbmcgYW4gZWRlbiBjb2xs
ZWN0aW9uIHdlIHNlZSBhbiBvbGQgb2JqZWN0IHBvaW50aW5nIHRvIGFuCisgICAgLy8gb2xkIGJh
Y2tpbmcgc3RvcmUgYW5kIHRoZSBvbGQgb2JqZWN0IGlzIGJlaW5nIG1hcmtlZCBiZWNhdXNlIG9m
IHRoZSByZW1lbWJlcmVkIHNldC4gTm90ZSB0aGF0IGlmIHdlCisgICAgLy8gYXNrIHRoZSBvYmpl
Y3QgaXRzZWxmLCBpdCB3aWxsIGFsd2F5cyB0ZWxsIHVzIHRoYXQgaXQncyBhbiBvbGQgYmxhY2sg
b2JqZWN0IC0gYmVjYXVzZSBldmVuIGR1cmluZyBhbgorICAgIC8vIGVkZW4gY29sbGVjdGlvbiB3
ZSBoYXZlIGFscmVhZHkgaW5kaWNhdGVkIHRoYXQgdGhlIG9iamVjdCBpcyBvbGQuIFRoYXQncyB3
aHkgd2UgdXNlIHRoZQorICAgIC8vIFNsb3RWaXNpdG9yJ3MgY2FjaGUgb2YgdGhlIG9iamVjdCdz
IG9sZCBzdGF0ZS4KKyAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVs
bENvbGxlY3Rpb24KKyAgICAgICAgfHwgIWJsb2NrLT5pc09sZCgpCisgICAgICAgIHx8IG1fZGF0
YUJlZm9yZVZpc2l0aW5nICE9IENlbGxTdGF0ZTo6T2xkR3JleSkgewogICAgICAgICBtX2J5dGVz
Q29waWVkICs9IGJ5dGVzOwogICAgICAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKGxvY2tlciwg
b3duZXIsIHRva2VuLCBieXRlcyk7CiAgICAgfQogfQogICAgIAotaW5saW5lIHZvaWQgU2xvdFZp
c2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChKU0NlbGwqIG93bmVyLCBzaXplX3Qgc2l6
ZSkKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6
ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQob3duZXIs
IHNpemUpOworICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1fZGF0YUJlZm9y
ZVZpc2l0aW5nLCBzaXplKTsKIH0KIAogaW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2NSwxMiArMTE2NSwxMiBAQCBwdWJsaWM6
CiAKICAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKEdQUlJlZyBjZWxsKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsLCBKU0NlbGw6OmdjRGF0YU9mZnNldCgpKSk7Cisg
ICAgICAgIHJldHVybiBicmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbCwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkpOwogICAg
IH0KIAogICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oSlNDZWxsKiBjZWxsKQog
ICAgIHsKLSAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGNlbGwpICsgSlNDZWxsOjpnY0RhdGFPZmZzZXQoKTsKKyAgICAgICAgdWludDhfdCogYWRk
cmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3Rh
dGVPZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKGFkZHJlc3MpKTsKICAgICB9
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTQ5Nyw4ICs0OTcsOCBAQCBtYWNybyB3cml0ZUJhcnJpZXJPbk9wZXJhbmQo
Y2VsbE9wZXJhbmQpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKGNlbGxPcGVyYW5kLCB0MSkK
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZCh0MSwgQ2VsbFRhZywgdDIsIC53cml0
ZUJhcnJpZXJEb25lKQogICAgIHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHQyLCB0MSwgdDMs
IAotICAgICAgICBtYWNybyhnY0RhdGEpCi0gICAgICAgICAgICBidGJueiBnY0RhdGEsIC53cml0
ZUJhcnJpZXJEb25lCisgICAgICAgIG1hY3JvKGNlbGxTdGF0ZSkKKyAgICAgICAgICAgIGJ0Ym56
IGNlbGxTdGF0ZSwgLndyaXRlQmFycmllckRvbmUKICAgICAgICAgICAgIHB1c2ggY2ZyLCBQQwog
ICAgICAgICAgICAgIyBXZSBtYWtlIHR3byBleHRyYSBzbG90cyBiZWNhdXNlIGNDYWxsMiB3aWxs
IHBva2UuCiAgICAgICAgICAgICBzdWJwIDgsIHNwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24g
MTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQwMSw4ICs0MDEsOCBAQCBtYWNybyB3cml0ZUJh
cnJpZXJPbk9wZXJhbmQoY2VsbE9wZXJhbmQpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKGNl
bGxPcGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlQ2VsbCh0MSwgdDIsIC53
cml0ZUJhcnJpZXJEb25lKQogICAgIHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKHQyLCB0MSwg
dDMsIAotICAgICAgICBtYWNybyhnY0RhdGEpCi0gICAgICAgICAgICBidGJueiBnY0RhdGEsIC53
cml0ZUJhcnJpZXJEb25lCisgICAgICAgIG1hY3JvKGNlbGxTdGF0ZSkKKyAgICAgICAgICAgIGJ0
Ym56IGNlbGxTdGF0ZSwgLndyaXRlQmFycmllckRvbmUKICAgICAgICAgICAgIHB1c2ggUEIsIFBD
CiAgICAgICAgICAgICBtb3ZlIHQyLCBhMSAjIHQyIGNhbiBiZSBhMCAobm90IG9uIDY0IGJpdHMs
IGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5KQogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTc5OSw3ICs3OTks
NyBAQCBtYWNybyBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiBlbmQKIAogbWFj
cm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBj
b250aW51YXRpb24pCi0gICAgbG9hZGIgSlNDZWxsOjptX2djRGF0YVtjZWxsXSwgc2NyYXRjaDEK
KyAgICBsb2FkYiBKU0NlbGw6Om1fY2VsbFN0YXRlW2NlbGxdLCBzY3JhdGNoMQogICAgIGNvbnRp
bnVhdGlvbihzY3JhdGNoMSkKIGVuZAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgSlNDZWxsX2gKIAog
I2luY2x1ZGUgIkNhbGxEYXRhLmgiCisjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVkZSAi
Q29uc3RydWN0RGF0YS5oIgogI2luY2x1ZGUgIkVudW1lcmF0aW9uTW9kZS5oIgogI2luY2x1ZGUg
IkhlYXAuaCIKQEAgLTE1NCwzNiArMTU1LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBj
YW5Vc2VGYXN0R2V0T3duUHJvcGVydHkoY29uc3QgU3RydWN0dXJlJik7CiAgICAgSlNWYWx1ZSBm
YXN0R2V0T3duUHJvcGVydHkoVk0mLCBTdHJ1Y3R1cmUmLCBQcm9wZXJ0eU5hbWUpOwogCi0gICAg
ZW51bSBHQ0RhdGEgOiB1aW50OF90IHsKLSAgICAgICAgTWFya2VkID0gMCwgLy8gVGhlIG9iamVj
dCBoYXMgc3Vydml2ZWQgYSBHQyBhbmQgaXMgaW4gdGhlIG9sZCBnZW4uCi0gICAgICAgIE5vdE1h
cmtlZCA9IDEsIC8vIFRoZSBvYmplY3QgaXMgbmV3IGFuZCBpbiB0aGUgZWRlbiBnZW4uCi0gICAg
ICAgIE1hcmtlZEFuZFJlbWVtYmVyZWQgPSAyLCAvLyBUaGUgb2JqZWN0IGlzIGluIHRoZSBHQydz
IHJlbWVtYmVyZWQgc2V0LgotCi0gICAgICAgIC8vIFRoZSBvYmplY3QgYmVpbmcgaW4gdGhlIEdD
J3MgcmVtZW1iZXJlZCBzZXQgaW1wbGllcyB0aGF0IGl0IGlzIGFsc28KLSAgICAgICAgLy8gTWFy
a2VkLiBUaGlzIGlzIGJlY2F1c2Ugb2JqZWN0cyBhcmUgb25seSBhZGRlZCB0byB0aGUgcmVtZW1i
ZXJlZCBzZXRzCi0gICAgICAgIC8vIGJ5IHdyaXRlIGJhcnJpZXJzLCBhbmQgd3JpdGUgYmFycmll
cnMgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBvbGQgZ2VuCi0gICAgICAgIC8vIG9iamVjdHMgdGhh
dCBwb2ludCB0byBwb3RlbnRpYWwgZWRlbiBnZW4gb2JqZWN0cy4KLSAgICB9OwotCi0gICAgdm9p
ZCBzZXRNYXJrZWQoKSB7IG1fZ2NEYXRhID0gTWFya2VkOyB9Ci0gICAgdm9pZCBzZXRSZW1lbWJl
cmVkKGJvb2wgcmVtZW1iZXJlZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2djRGF0YSA9PSAo
cmVtZW1iZXJlZCA/IE1hcmtlZCA6IE1hcmtlZEFuZFJlbWVtYmVyZWQpKTsKLSAgICAgICAgbV9n
Y0RhdGEgPSByZW1lbWJlcmVkID8gTWFya2VkQW5kUmVtZW1iZXJlZCA6IE1hcmtlZDsgCi0gICAg
fQotICAgIGJvb2wgaXNNYXJrZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX2dj
RGF0YSkgewotICAgICAgICBjYXNlIE1hcmtlZDoKLSAgICAgICAgY2FzZSBNYXJrZWRBbmRSZW1l
bWJlcmVkOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgTm90TWFya2Vk
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ym9vbCBpc1JlbWVtYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2djRGF0YSA9PSBNYXJrZWRBbmRS
ZW1lbWJlcmVkOyB9CisgICAgLy8gVGhlIHJlY29tbWVuZGVkIGlkaW9tIGZvciB1c2luZyBjZWxs
U3RhdGUoKSBpcyB0byBzd2l0Y2ggb24gaXQgb3IgcGVyZm9ybSBhbiA9PSBjb21wYXJpc29uIG9u
IGl0CisgICAgLy8gZGlyZWN0bHkuIFdlIGRlbGliZXJhdGVseSBhdm9pZCBoZWxwZXJzIGZvciB0
aGlzLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdHJhbnNwYXJlbmN5IGFib3V0IGhvdyB0aGUKKyAg
ICAvLyB2YXJpb3VzIENlbGxTdGF0ZSB2YWx1ZXMgaW5mbHVlbmNlcyBvdXIgdmFyaW91cyBhbGdv
cml0aG1zLgorICAgIENlbGxTdGF0ZSBjZWxsU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NlbGxT
dGF0ZTsgfQorICAgIAorICAgIHZvaWQgc2V0Q2VsbFN0YXRlKENlbGxTdGF0ZSBkYXRhKSBjb25z
dCB7IGNvbnN0X2Nhc3Q8SlNDZWxsKj4odGhpcyktPm1fY2VsbFN0YXRlID0gZGF0YTsgfQogCiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAgICAgewpAQCAtMjA1LDkg
KzE4Miw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGws
IG1faW5kZXhpbmdUeXBlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGdjRGF0YU9m
ZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBjZWxsU3RhdGVPZmZzZXQoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fZ2NEYXRhKTsKKyAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fY2VsbFN0YXRlKTsKICAgICB9CiAKICAg
ICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gTm90
VHlwZWRBcnJheTsKQEAgLTI0MSw3ICsyMTgsNyBAQCBwcml2YXRlOgogICAgIEluZGV4aW5nVHlw
ZSBtX2luZGV4aW5nVHlwZTsKICAgICBKU1R5cGUgbV90eXBlOwogICAgIFR5cGVJbmZvOjpJbmxp
bmVUeXBlRmxhZ3MgbV9mbGFnczsKLSAgICB1aW50OF90IG1fZ2NEYXRhOworICAgIENlbGxTdGF0
ZSBtX2NlbGxTdGF0ZTsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9t
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMu
aAkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIEpTQ2VsbDo6SlNDZWxsKENyZWF0aW5nRWFybHlDZWxs
VGFnKQotICAgIDogbV9nY0RhdGEoTm90TWFya2VkKQorICAgIDogbV9jZWxsU3RhdGUoQ2VsbFN0
YXRlOjpOZXdXaGl0ZSkKIHsKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiB9
CkBAIC01MSw3ICs1MSw3IEBAIGlubGluZSBKU0NlbGw6OkpTQ2VsbChWTSYsIFN0cnVjdHVyZSog
c3QKICAgICAsIG1faW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCiAgICAg
LCBtX3R5cGUoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSkKICAgICAsIG1fZmxhZ3Moc3Ry
dWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKQotICAgICwgbV9nY0RhdGEoTm90
TWFya2VkKQorICAgICwgbV9jZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKIHsKICAgICBB
U1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaAkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0Niw3ICs0NDYsNyBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheTogewotICAgICAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
dGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw3ICsyMTgsNyBAQCB2b2lkIEpTT2JqZWN0Ojpjb3B5
QmFja2luZ1N0b3JlKEpTQ2VsbCogCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7Ci0gICAgCisKICAgICBpZiAodG9rZW4gIT0gQnV0dGVyZmx5Q29weVRv
a2VuKQogICAgICAgICByZXR1cm47CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcsIDIwMDgsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTc3LDcgKzc3LDcgQEAgdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAog
ICAgIGVsc2UgewogICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gdGhpc09iamVjdC0+bV92YWx1
ZS5pbXBsKCk7CiAgICAgICAgIEFTU0VSVChpbXBsKTsKLSAgICAgICAgdmlzaXRvci5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdCwgaW1wbC0+Y29zdER1cmluZ0dDKCkpOworICAg
ICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChpbXBsLT5jb3N0RHVyaW5nR0Mo
KSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJREJsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJREJsb2IuaAkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2
LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlSURCbG9iX2gKICNkZWZpbmUgU3RydWN0dXJlSURCbG9i
X2gKIAorI2luY2x1ZGUgIkNlbGxTdGF0ZS5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgog
I2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCkBA
IC00Niw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgdS5maWVsZHMuaW5kZXhpbmdUeXBlID0g
aW5kZXhpbmdUeXBlOwogICAgICAgICB1LmZpZWxkcy50eXBlID0gdHlwZUluZm8udHlwZSgpOwog
ICAgICAgICB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5pbmxpbmVUeXBlRmxh
Z3MoKTsKLSAgICAgICAgdS5maWVsZHMuZGVmYXVsdEdDRGF0YSA9IEpTQ2VsbDo6Tm90TWFya2Vk
OworICAgICAgICB1LmZpZWxkcy5kZWZhdWx0Q2VsbFN0YXRlID0gQ2VsbFN0YXRlOjpOZXdXaGl0
ZTsKICAgICB9CiAKICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVJREJsb2ImIG90
aGVyKSB7IHUuZG91YmxlV29yZCA9IG90aGVyLnUuZG91YmxlV29yZDsgfQpAQCAtNzksNyArODAs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZTsKICAg
ICAgICAgICAgIEpTVHlwZSB0eXBlOwogICAgICAgICAgICAgVHlwZUluZm86OklubGluZVR5cGVG
bGFncyBpbmxpbmVUeXBlRmxhZ3M7Ci0gICAgICAgICAgICBKU0NlbGw6OkdDRGF0YSBkZWZhdWx0
R0NEYXRhOworICAgICAgICAgICAgQ2VsbFN0YXRlIGRlZmF1bHRDZWxsU3RhdGU7CiAgICAgICAg
IH0gZmllbGRzOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgaW50MzJfdCB3b3JkMTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwRGF0YS5jcHAJ
KHJldmlzaW9uIDE5MDU0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtN
YXBEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFdlYWtNYXBEYXRh
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgLy8gUm91Z2ggYXBwcm94aW1hdGlvbiBvZiB0
aGUgZXh0ZXJuYWwgc3RvcmFnZSBuZWVkZWQgZm9yIHRoZSBoYXNodGFibGUuCiAgICAgLy8gVGhp
cyBpc24ndCBleGFjdCwgYnV0IGl0IGlzIGNsb3NlIGVub3VnaCwgYW5kIHByb3BvcnRpb25hbCB0
byB0aGUgYWN0dWFsCiAgICAgLy8gZXh0ZXJuYWwgbWVybW9yeSB1c2FnZS4KLSAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqLCB0aGlzT2JqLT5tX21hcC5jYXBhY2l0
eSgpICogKHNpemVvZihKU09iamVjdCopICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
KTsKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqLT5tX21hcC5j
YXBhY2l0eSgpICogKHNpemVvZihKU09iamVjdCopICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpKTsKIH0KIAogdm9pZCBXZWFrTWFwRGF0YTo6c2V0KFZNJiB2bSwgSlNPYmplY3QqIGtl
eSwgSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvYmFzaWMtZWRlbi1nYy10ZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvYmFzaWMtZWRlbi1nYy10ZXN0LmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9iYXNpYy1lZGVuLWdjLXRlc3QuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACit2YXIgbyA9IHtmOjQyfTsKK2VkZW5HQygp
OwordmFyIHAgPSB7Zjo0Mn07CitlZGVuR0MoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262382</attachid>
            <date>2015-10-03 15:54:35 -0700</date>
            <delta_ts>2015-10-05 11:18:27 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56762</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyMSBA
QAorMjAxNS0xMC0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFsbG93IGFuIG9iamVjdCdzIG1hcmtpbmcgc3RhdGUgdG8gdHJhY2sgVGhlIFRocmVlIENvbG9y
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NjU0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSB3YW50
IHRvIG1ha2UgR0MgbWFya2luZyBjb25jdXJyZW50IChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0OTQzMikuCisgICAgICAgIENvbmN1cnJlbnQgR0MgcmVxdWly
ZSBiYXJyaWVycyB0byBiZSBleGVjdXRlZCBkdXJpbmcgY2VydGFpbiBoZWFwIG9wZXJhdGlvbnMu
IFdlIGFscmVhZHkgaGF2ZSBhCisgICAgICAgIGdlbmVyYXRpb25hbCBHQy4gR2VuZXJhdGlvbmFs
IEdDcyBhbHNvIG5lZWQgYmFycmllcnMsIGFuZCB3ZSBhbHJlYWR5IGhhdmUgdGhvc2UuIFRoZSBn
ZW5lcmF0aW9uYWwKKyAgICAgICAgR0MgYmFycmllciB0aGF0IHdlIHVzZSBpcyB0aGUgInN0aWNr
eSBtYXJrIGJpdCIgYmFycmllci4gT3JkaW5hcmlseSwgbWFyayBiaXRzIGdldCByZXNldCBhZnRl
ciBhCisgICAgICAgIGNvbGxlY3Rpb24uIEluIG91ciBjb2xsZWN0b3IsIHRoZXJlIGlzIGEgc2Vj
b25kYXJ5IG1hcmsgYml0IHRoYXQgInN0aWNrcyIgLSBpLmUuIGl0IGRvZXMgbm90IGdldAorICAg
ICAgICByZXNldC4gSWYgdGhlIHN0aWNreSBtYXJrIGJpdCBpcyBzZXQgaW4gYmV0d2VlbiB0d28g
Y29sbGVjdGlvbnMsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4KKyAgICAgICAg
b2xkIHNwYWNlLiBUaGlzIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gcHV0IHRo
aW5ncyBpbnRvIHJlbWVtYmVyZWQgc2V0cy4gQWRkaXRpb25hbGx5LAorICAgICAgICB0aGUgc3Rp
Y2t5IG1hcmsgYml0IGlzIGFjdHVhbGx5IGEgdHJpLXN0YXRlIHRoYXQgY2FuIGFsc28gdGVsbCB1
cyBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIHBsYWNlZCBvbgorICAgICAgICBhIHJlbWVtYmVyZWQg
c2V0LgorCisgICAgICAgIFRoaXMgaXMgYXdmdWxseSBzaW1pbGFyIHRvIHdoYXQgeW91IHdhbnQg
aW4gYSBjb25jdXJyZW50IEdDLiBDb25jdXJyZW50IEdDcyB0eXBpY2FsbHkgd2FudCB3cml0ZXMK
KyAgICAgICAgdG8gdGhlIGhlYXAgdGhhdCBjaGFuZ2UgdGhlIG9iamVjdCBncmFwaCB0byBkbyBk
aWZmZXJlbnQgdGhpbmdzIGRlcGVuZGluZyBvbiBhbiBvYmplY3QncyBtYXJraW5nCisgICAgICAg
IHN0YXRlLCB3aGljaCBpcyB1c3VhbGx5IHJlZmVycmVkIHRvIGFzIGl0cyBjb2xvci4gV2hpdGUg
bWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBuZXZlciBiZWVuIHNlZW4KKyAgICAgICAgYnkgdGhl
IGNvbGxlY3Rvci4gQWxsIHdoaXRlIG9iamVjdHMgYXJlIHByZXN1bWVkIGRlYWQgYXQgdGhlIGZs
aXAuIEdyZXkgb2JqZWN0cyBhcmUgdGhvc2UgdGhhdCBhcmUKKyAgICAgICAga25vd24gdG8gdGhl
IGNvbGxlY3RvciBidXQgaGF2ZSBub3QgYmVlbiBzY2FubmVkLiBCbGFjayBvYmplY3RzIGFyZSB0
aG9zZSB0aGF0IGhhdmUgYmVlbiBzY2FubmVkLAorICAgICAgICBhbmQgd2lsbCBub3QgYmUgc2Nh
bm5lZCBhZ2Fpbi4gV2hpdGUgaXMgZXhhY3RseSBqdXN0ICJub3QgYmVpbmcgbWFya2VkIiwgYW5k
IGJvdGggZ3JleSBhbmQgYmxhY2sKKyAgICAgICAgbWVhbiAibWFya2VkIiAtIHdpdGggImJsYWNr
IiBtZWFuaW5nICJtYXJrZWQgYnV0IG5vdCBvbiBhbnkgd29ya2xpc3QiLiBUaGF0J3MgcXVpdGUg
YSBiaXQgbGlrZSB0aGUKKyAgICAgICAgY3VycmVudCAiTWFya2VkIiBhbmQgIk1hcmtlZEFuZFJl
bWVtYmVyZWQiIHN0YXRlcyB0aGF0IHdlIGhhdmUgZm9yIGdlbmVyYXRpb25hbCBHQy4KKyAgICAg
ICAgIk1hcmtlZEFuZFJlbWVtYmVyZWQiIGlzIGEgbG90IGxpa2UgImdyZXkiLCBhbmQgIk1hcmtl
ZCIgaXMgYSBsb3QgbGlrZSAiYmxhY2siLgorCisgICAgICAgIEkgd2FudCB0byBtYWtlIGEgY29u
Y3VycmVudCBHQyB0aGF0IHVuaWZpZXMgdGhlIGdlbmVyYXRpb25hbCBhbmQgY29uY3VycmVudCBi
YXJyaWVycyBpbnRvIGEgc2luZ2xlCisgICAgICAgIGZhc3QgcGF0aCBjaGVjay4gRXZlbiBiZXR0
ZXIgaWYgdGhlIHR3byBiYXJyaWVycyBhcmUgZW50aXJlbHkgaWRlbnRpY2FsLiBZb3UgY2FuIGRv
IHRoaXMgdXNpbmcKKyAgICAgICAgUGlyaW5lbidzIHRlY2huaXF1ZSAjMiBbMV0sIG9yaWdpbmFs
bHkgZHVlIHRvIEd1eSBTdGVlbGUgWzJdOiB3aGVuIGRvaW5nIG8uZj12IHdoZXJlIG8gaXMgYmxh
Y2sgYW5kCisgICAgICAgIHYgaXMgd2hpbGUsIHR1cm4gbyBncmV5IGFnYWluLiBUaGlzIGlzIGxp
a2UgcmVtZW1iZXJpbmcgYW4gb2JqZWN0LCBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgZ2VuIEdDCisg
ICAgICAgICJyZW1lbWJlcmVzIiBvIHdoZW4gbyBpcyBvbGQgYW5kIHYgaXMgbmV3LiBJdCByZW1l
bWJlcnMgb2JqZWN0cyBieSBwdXR0aW5nIHRoZW0gb24gdGhlIG1hcmsgc3RhY2ssCisgICAgICAg
IHNldHRpbmcgdGhlIGdlbmVyYXRpb25hbCBzdGF0ZSB0byBNYXJrZWRBbmRSZW1lbWJlcmVkLCBh
bmQgZG9pbmcgbm90aGluZyB0byB0aGUgcHJpbWFyeSBtYXJrIGJpdC4KKworICAgICAgICBUaGlz
IG1ha2VzIG91ciBjb25jdXJyZW50IEdDIGFwcHJvYWNoIHByZXR0eSBvYnZpb3VzLiBXZSB3YW50
IHRvIHVzZSBvbmUgYmFycmllciBmb3IgY29uY3VycmVudCBhbmQKKyAgICAgICAgZ2VuZXJhdGlv
bmFsLCBhbmQgd2Ugd2FudCB0byBiYXNpY2FsbHkga2VlcCBvdXIgY3VycmVudCBiYXJyaWVycyB1
bmNoYW5nZWQuIFRoZSBvbmx5IHRoaW5nIG1pc3NpbmcKKyAgICAgICAgYXJlIGp1c3Qgc29tZSBz
bWFsbCBjaGFuZ2VzIHRvIGFsbG93IHRoZSBjb25jdXJyZW50IEdDIHRvIGtub3cgcHJlY2lzZWx5
IHdoZW4gYW4gb2JqZWN0IGlzIGJsYWNrLAorICAgICAgICBhbmQgdG8ga25vdyBkdXJpbmcgb2Jq
ZWN0IHZpc2l0aW5nIGlmIHdlIGFyZSB2aXNpdGluZyB0aGUgb2JqZWN0IGZvciB0aGUgZmlyc3Qg
dGltZSBkdXJpbmcgYQorICAgICAgICBjb2xsZWN0aW9uIG9yIGEgc3Vic2VxdWVudCB0aW1lIGR1
ZSB0byBiYXJyaWVyIHJlLWdyZXlpbmcgKGNvbmN1cnJlbnQgR0MpIG9yIGJhcnJpZXIgcmVtZW1i
ZXJpbmcKKyAgICAgICAgKGdlbmVyYXRpb25hbCBHQykuIFNvLCB0aGlzIHBhdGNoIGRvZXMgdGhl
IGZvbGxvd2luZzoKKworICAgICAgICAtIENoYW5nZXMgdGhlIHRlcm1pbm9sb2d5IHVzZWQgZm9y
IHRoZSBnY0RhdGEgaGVhZGVyIGJ5dGUgaW4gSlNDZWxsLiBUaGlzIGNoYW5nZXMgdGhlIG5hbWUg
b2YgdGhpcworICAgICAgICAgIHRvIGNlbGxTdGF0ZSwgYW5kIGludHJvZHVjZXMgYSBuZXcgZW51
bWVyYXRpb24gY2FsbGVkIENlbGxTdGF0ZS4gVGhpcyBuZXcgZW51bWVyYXRpb24gYmVoYXZlcyBh
CisgICAgICAgICAgbG90IGxpa2UgdGhlIG9sZCBHQ0RhdGEgZGlkLiBJdCBoYXMgdGhlIGZvbGxv
d2luZyBtZW1iZXJzLCB3aXRoIHRoZSBmb2xsb3dpbmcgY29ycmVzcG9uZGVuY2UgdG8KKyAgICAg
ICAgICB0aGUgb2xkIEdDRGF0YToKKworICAgICAgICAgIE9sZEJsYWNrOiB0aGlzIGlzIGxpa2Ug
TWFya2VkLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB3ZSBlbnN1cmUgdGhhdCBhbiBvYmplY3Qg
YmVjb21lcyBPbGRCbGFjaworICAgICAgICAgICAgICBhcyBzb29uIGFzIHRoZSBvYmplY3Qgc3Rh
cnRzIHRvIGJlIHNjYW5uZWQuIFByZXZpb3VzbHksIGFuIG9iamVjdCBtaWdodCBiZQorICAgICAg
ICAgICAgICBNYXJrZWRBbmRSZW1lbWJlcmVkIGR1cmluZyBzY2FubmluZyBhbmQgd2UnZCB0dXJu
IGFsbCBNYXJrZWRBbmRSZW1lbWJlcmVkIG9iamVjdHMgaW50byBNYXJrZWQKKyAgICAgICAgICAg
ICAgb2JqZWN0cyBkdXJpbmcgYSBwb3N0LXByb2Nlc3Npbmcgc3RlcCBhdCB0aGUgZW5kIG9mIEdD
LiBUaGlzIHBhdGNoIGdldHMgcmlkIG9mIHRoYXQKKyAgICAgICAgICAgICAgcG9zdC1wcm9jZXNz
aW5nLiBUaGUgYWN0IG9mIHZpc2l0aW5nIGFuIG9iamVjdCB1bmNvbmRpdGlvbmFsbHkgbWFrZXMg
aXQgT2xkQmxhY2suIE5vdGUgdGhhdAorICAgICAgICAgICAgICBvdXIgZGVmaW5pdGlvbiBvZiAi
YmxhY2siIGlzIG5vdCB0aGF0IHRoZSBvYmplY3QgaXMgZG9uZSBiZWluZyBzY2FubmVkLCBidXQg
dGhhdCBpdCBpcyBlaXRoZXIKKyAgICAgICAgICAgICAgYmVpbmcgc2Nhbm5lZCByaWdodCBub3cg
b3IgaXQgaGFzIGFscmVhZHkgYmVlbiBzY2FubmVkLiBUaGlzIGlzIGxpa2UgYSBjb21iaW5hdGlv
biBvZgorICAgICAgICAgICAgICBTaWViZXJ0J3MgYW50aHJhY2l0ZSBhbmQgYmxhY2sgc3RhdGVz
IFszXS4KKworICAgICAgICAgIE5ld1doaXRlOiB0aGlzIGlzIGV4YWN0bHkgTm90TWFya2VkLiBJ
dCdzIHRoZSBzdGF0ZSB0aGF0IG9iamVjdHMgZ2V0IHdoZW4gdGhleSBhcmUgYWxsb2NhdGVkLgor
ICAgICAgICAgICAgICBJdCdzIGltcG9zc2libGUgZm9yIGFuIG9iamVjdCB0byByZXR1cm4gdG8g
dGhpcyBzdGF0ZS4KKworICAgICAgICAgIE9sZEdyZXk6IHRoZSBvYmplY3QgaXMgb24gdGhlIG1h
cmsgc3RhY2sgYW5kIHdpbGwgYmUgc2Nhbm5lZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUu
IFRoaXMKKyAgICAgICAgICAgICAgYWxzbyBtZWFucyB0aGF0IHRoaXMgaXNuJ3QgdGhlIGZpcnN0
IHRpbWUgaW4gdGhpcyBjeWNsZSB0aGF0IHRoZSBvYmplY3QgaGFzIGJlZW4gZ3JleS4gSW4gYW4K
KyAgICAgICAgICAgICAgZWRlbiBjb2xsZWN0aW9uLCBhbiBvbGQgb2JqZWN0IHRoYXQgaGFzIGJl
ZW4gcmVtZW1iZXJlZCBpcyB0aG91Z2h0IG9mIGFzIGJlaW5nIE9sZEdyZXksIGV2ZW4KKyAgICAg
ICAgICAgICAgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBkdXJpbmcgdGhpcyBlZGVuIGNvbGxl
Y3Rpb24gdGhhdCBpdCBpcyBncmV5LiBUaGF0J3MgYmVjYXVzZSBhbiBlZGVuCisgICAgICAgICAg
ICAgIGNvbGxlY3Rpb24gbXVzdCBiZWhhdmUgImFzIGlmIiB0aGUgZ3JleS0+YmxhY2sgdHJhbnNp
dGlvbiBmb3Igb2xkIG9iamVjdHMgbWFnaWNhbGx5IGhhcHBlbmVkCisgICAgICAgICAgICAgIGF0
IHRoZSBzdGFydCBvZiBHQy4gUmVtZW1iZXJlZCBvYmplY3RzIGFyZSBsaWtlIG9sZCBvYmplY3Rz
IHRoYXQgdW5kZXJ3ZW50IGEgY29uY3VycmVudAorICAgICAgICAgICAgICBiYXJyaWVyIHJlLWdy
ZXlpbmcganVzdCBhZnRlciB0aGUgbWFnaWNhbCBvbGQgb2JqZWN0IGdyZXktPmJsYWNrIHRyYW5z
aXRpb24gYXQgdGhlIHN0YXJ0IG9mCisgICAgICAgICAgICAgIEdDLiBUaGlzIHN0YXRlIGlzIGFs
bW9zdCBleGFjdGx5IGxpa2UgTWFya2VkQW5kUmVtZW1iZXJlZCwgZXhjZXB0IHRoYXQgYW4gb2Jq
ZWN0IG5vdworICAgICAgICAgICAgICB0cmFuc2l0aW9ucyBmcm9tIE9sZEdyZXkgdG8gT2xkQmxh
Y2sgYXQgdGhlIGJlZ2lubmluZyBvZiB2aXNpdGluZywgcmF0aGVyIHRoYW4gaG93IHByZXZpb3Vz
bHkKKyAgICAgICAgICAgICAgd2UgdHJhbnNpdGlvbmVkIGZyb20gTWFya2VkQW5kUmVtZW1iZXJl
ZCB0byBNYXJrZWQgYXQgdGhlIGJpdHRlcm4gZW5kIG9mIEdDLgorCisgICAgICAgICAgTmV3R3Jh
eTogdGhlIG9iamVjdCBpcyBvbiB0aGUgbWFyayBzdGFjayBhbmQgd2lsbCBiZSBzY2FubmVkIGF0
IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4gVGhpcworICAgICAgICAgICAgICBzdGF0ZSBoYXMg
bm8gY2xlYXIgcmVsYXRpdmUgaW4gdGhlIG9sZCBzdGF0ZSBzeXN0ZW0uIEl0IG1lYW5zIHRoYXQg
dGhlIG9iamVjdCBiZWNhbWUgZ3JleSBkdWUKKyAgICAgICAgICAgICAgdG8gb3JkaW5hcnkgbWFy
a2luZy4gUHJldmlvdXNseSwgb3JkaW5hcnkgbWFya2luZyB3b3VsZCBtYWtlIHRoZSBvYmplY3Qg
TWFya2VkLgorCisgICAgICAgIC0gUmVtb3ZhbCBvZiB0aGUgcG9zdC1wcm9jZXNzaW5nIHBoYXNl
IHRoYXQgImNsZWFycyIgdGhlIHJlbWVtYmVyZWQgc2V0IGJ5IG1vdmluZyBhbGwgcmVtZW1iZXJl
ZAorICAgICAgICAgIG9iamVjdHMgdG8gdGhlIE1hcmtlZCBzdGF0ZS4gVGhpcyBub3cgaGFwcGVu
cyBtYWdpY2FsbHkgZHVyaW5nIHZpc2l0aW5nLCBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgICAg
ICAgLSBTbG90VmlzaXRvciBub3cgcmVtZW1iZXJzIHRoZSBzdGF0ZSB0aGF0IHRoZSBvYmplY3Qg
ZGlkIGhhdmUganVzdCBiZWZvcmUgdmlzaXRpbmcuIFdoaWxlIHZpc2l0aW5nCisgICAgICAgICAg
dGhhdCBvYmplY3QsIGl0J3MgcG9zc2libGUgdG8gcXVlcnkgd2hhdCB0aGUgc3RhdGUgd2FzLiBU
aGlzIGlzIHVzZWQgZm9yIGNvcHkgc3BhY2UgZGVjaXNpb25zIGFuZAorICAgICAgICAgIGZvciBl
eHRyYSBtZW1vcnkgdXNhZ2UgYWNjb3VudGluZy4gV2UgZG9uJ3Qgd2FudCB0byBwdXQgdGhlIGJh
Y2tpbmcgc3RvcmUgb24gdGhlIGNvcHkgd29ya2xpc3QsCisgICAgICAgICAgYW5kIHdlIGRvbid0
IHdhbnQgdG8gY291bnQgZXh0cmEgbWVtb3J5IHVzYWdlLCBpZiB0aGUgb2JqZWN0IHdhcyBPbGRH
cmV5IGF0IHRoZSBzdGFydCBvZgorICAgICAgICAgIHZpc2l0aW5nLiBQcmV2aW91c2x5LCB3ZSB3
b3VsZCBiZSBhYmxlIHRvIGp1c3QgYXNrIGlmIHRoZSBvYmplY3Qgd2FzIE1hcmtlZEFuZFJlbWVt
YmVyZWQgc2luY2UKKyAgICAgICAgICB0aGF0IHN0YXRlIHdvdWxkbid0IGdldCBjbGVhcmVkIHVu
dGlsIGFmdGVyIGFsbCBtYXJraW5nIGZpbmlzaGVkLiBUaGlzIGNoYW5nZSBhbHNvIHNpbXBsaWZp
ZXMKKyAgICAgICAgICBzb21lIEFQSXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0byBwYXNz
IHRoZSBKU0NlbGwqIHBvaW50ZXIsIHNpbmNlIHRoZXNlIFNsb3RWaXNpdG9yIG1ldGhvZHMKKyAg
ICAgICAgICBubyBsb25nZXIgYXMgdGhlIGNlbGwgZm9yIGl0cyBzdGF0ZSAtIGluc3RlYWQgdGhl
eSB1c2UgdGhlIHNhdmVkIHByZS12aXNpdGluZyBzdGF0ZS4KKworICAgICAgICAtIFJlbW92YWwg
b2YgYSBidW5jaCBvZiBoZWxwZXJzIGFuZCBhYnN0cmFjdGlvbnMuIFByZXZpb3VzbHkgd2UgaGFk
IHZhcmlvdXMgbWV0aG9kcyBmb3IgYXNraW5nIGlmCisgICAgICAgICAgYW4gb2JqZWN0IHdhcyAi
bWFya2VkIiBhbmQgaWYgYW4gb2JqZWN0IHdhcyAicmVtZW1iZXJlZCIuIFdlIGhhZCBoZWxwZXJz
IGZvciBhZGp1c3RpbmcgdGhlc2UKKyAgICAgICAgICBzdGF0ZXMsIGFuZCB0aG9zZSBoZWxwZXJz
IHdvdWxkIGFzc2VydCB0aGF0IHRoZXkgd2VyZSBiZWluZyB1c2VkIHRoZSByaWdodCB3YXkuIFRo
aXMgaXMgbm90IHZlcnkKKyAgICAgICAgICB1c2VmdWwgZm9yIGNvbmN1cnJlbnQgR0MsIHNpbmNl
IG5vdyB0aGUgc2V0IG9mIHBvc3NpYmxlIHN0YXRlIHRyYW5zaXRpb25zIGlzIG11Y2ggbGFyZ2Vy
LiBBbHNvLAorICAgICAgICAgIHRoZSBwcmV2aW91cyB1c2Ugb2YgdGhlIHdvcmQgIm1hcmtlZCIg
d2FzIHByZXR0eSBiYWQgLSBmb3IgZXhhbXBsZSBpbiBIZWFwLCAibWFya2VkIiByZWZlcnMgdG8K
KyAgICAgICAgICB0aGUgcHJpbWFyeSBtYXJrIGJpdCAodGhhdCBnZXRzIGNsZWFyZWQgYXQgdGhl
IGZsaXApLCB3aGlsZSBpbiBKU0NlbGwsICJtYXJrZWQiIHJlZmVycyB0byB0aGUKKyAgICAgICAg
ICBzdGlja3kgbWFyayBiaXQgKHRoYXQgZG9lcyBub3QgZ2V0IGNsZWFyZWQsIGV2ZXIpLiBUaGlz
IGNoYW5nZSBnZXRzIHJpZCBvZiBhIGxvdCBvZiB0aG9zZSBoZWxwZXJzCisgICAgICAgICAgYW5k
IGlubGluZXMgdGhlaXIgbG9naWMuIFRoaXMgYWN0dWFsbHkgbWFrZXMgdGhlIGNvZGUgZWFzaWVy
IGFuZCBtb3JlIGZ1biB0byByZWFkLCBzaW5jZSB5b3UgY2FuCisgICAgICAgICAgbm93IGxvb2sg
YXQgdGhlIG1hcmtpbmcgYW5kIGJhcnJpZXIgY29kZSBhbmQgc2VlIGhvdyB0aGF0IGNvZGUgdXNl
cyB0aGUgZm91ciBDZWxsU3RhdGVzLiBGb3IKKyAgICAgICAgICBleGFtcGxlLCBpdCdzIGZ1biB0
byBzZWUgdGhhdCB0aGUgYmFycmllciBnZXRzIGZpcmVkIGZvciBvLmY9diBleGFjdGx5IHdoZW4g
byBpcyBPbGRCbGFjayBhbmQgdgorICAgICAgICAgIGlzIE5ld1doaXRlLgorCisgICAgICAgIFRo
aXMgY2hhbmdlIHNob3VsZG4ndCBoYXZlIGFueSBlZmZlY3Qgb24gcGVyZm9ybWFuY2Ugb3IgR0Mg
YmVoYXZpb3IuIEl0IGRvZXMgcHV0IG91ciBjb2RlIGluIGEKKyAgICAgICAgd2VpcmQgc3RhdGUg
d2hlcmUgd2Ugbm93IGhhdmUgc3RhdGVzIGFuZCBjb21tZW50cyByZWZlcmVuY2luZyBhIGNvbmN1
cnJlbnQgR0MgdGhhdCBkb2Vzbid0IGV4aXN0CisgICAgICAgIHlldC4KKworICAgICAgICBGaW5h
bGx5LCBzb21lIHRob3VnaHRzIGFib3V0IHRoZSBjb25jdXJyZW50IEdDIGJhcnJpZXIgYW5kIGl0
cyBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLiBUaGlzCisgICAgICAgIGJhcnJpZXIgZXho
aWJpdHMgdmVyeSBwb29yIGd1YXJhbnRlZXMgYWJvdXQgY29sbGVjdG9yIHByb2dyZXNzLCBidXQg
bWF4aW1pemVzIHRocm91Z2hwdXQgYnkganVzdAorICAgICAgICByZXVzaW5nIHRoZSBleGlzdGlu
ZyBiYXJyaWVyIGNvZGUgd2UgYWxyZWFkeSBlbWl0IGFuZCBvcHRpbWl6ZS4gSSBiZWxpZXZlIHRo
YXQgZXZlbiBvdXIgZXBvY2gtYmFzZWQKKyAgICAgICAgYmFycmllciBpbnNlcnRpb24gREZHIHBo
YXNlIGlzIGNvcnJlY3QgZm9yIHRoZSBjb25jdXJyZW50IGludGVycHJldGF0aW9uIG9mIG91ciBl
eGlzdGluZyBiYXJyaWVyLgorICAgICAgICBCdXQsIHRoZSBiYXJyaWVyIGNhbiByZWdyZXNzIHRo
ZSBwcm9ncmVzcyB0aGF0IHRoZSBjb2xsZWN0b3IgaGFzIG1hZGUgZm9yIHR3byByZWFzb25zOgor
CisgICAgICAgIEluY3JlbWVudGFsIHVwZGF0ZTogeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoaXMg
YmFycmllciB3aXRoIGEgYmxhY2sgc3RhY2ssIHNpbmNlIHRoYXQgd291bGQgbWVhbgorICAgICAg
ICB0aGF0IGhlYXAgbG9hZHMgb2Ygd2hpdGUgb2JqZWN0cyB3aWxsIGhhdmUgdG8gZXhwbGljaXRs
eSByZS1ncmV5IHRoZSBzdGFjay4gVGhlIHdheSB5b3UgaW1wbGVtZW50CisgICAgICAgIHRoaXMg
a2luZCBvZiBjb2xsZWN0b3IgaXMgdGhhdCBjb2xsZWN0b3IgdGVybWluYXRpb24gd2lsbCByZXNj
YW4gdGhlIHN0YWNrLiBUZXJtaW5hdGlvbiBpcyByZWFjaGVkCisgICAgICAgIG9ubHkgaWYgdGhl
IGF0LXRlcm1pbmF0aW9uIHJlLXNjYW4gZ3JleXMgbm8gb2JqZWN0cy4gVGhpcyBtZWFucyB0aGF0
IHRoZSBjb2xsZWN0b3IgaXMgYSBmaXhwb2ludC4KKyAgICAgICAgTHVja2lseSwgb3VyIGNvbGxl
Y3RvciBpcyBhbHJlYWR5IGEgZml4cG9pbnQgYmVjYXVzZSBvZiBvcGFxdWUgcm9vdHMgYW5kIHN0
cnVjdHVyZSB0cmFuc2l0aW9ucy4KKworICAgICAgICBNYXJraW5nIGFpbid0IG1vbm90b25pYzog
bm9ybWFsbHksIG9uY2UgYW4gb2JqZWN0IGlzIGJsYWNrLCBpdCBzdGF5cyB0aGF0IHdheS4gSW4g
dGhpcyBjb2xsZWN0b3IsCisgICAgICAgIGJsYWNrIG9iamVjdHMgbWF5IGJlY29tZSBncmV5IGFn
YWluLiBJIGRvbid0IGhhdmUgcGVyc29uYWwgZXhwZXJpZW5jZSB3aXRoIHN1Y2ggY29uY3VycmVu
dCBHQ3MsIGJ1dAorICAgICAgICBJIHN1c3BlY3QgdGhhdCB0aGlzIHdpbGwgYmFzaWNhbGx5IGJl
IGZpbmUuIENvbmN1cnJlbnQgY29sbGVjdGlvbnMgZmluaXNoIHByZXR0eSBxdWlja2x5LCBhbmQg
dGhlCisgICAgICAgIG11dGF0b3IgdXN1YWxseSB0b3VjaGVzIG9ubHkgYSBzdWJzZXQgb2YgdGhl
IGhlYXAuIE9ubHkgdGhhdCBzdWJzZXQgb2YgdGhlIGhlYXAgdGhhdCB0aGUgbXV0YXRvciBpcwor
ICAgICAgICB0b3VjaGluZyBjb3VsZCBiZSByZS1ncmV5ZWQuIFByb2JhYmx5LCB0aGUgR0Mgd2ls
bCBoYXZlIHRvIGJlIGh5YnJpZCBpbmNyZW1lbnRhbCBhbmQgY29uY3VycmVudCwKKyAgICAgICAg
YW5kIHRvd2FyZHMgdGhlIGVuZCBvZiBHQyB3aGVuIHdlIGRvIHRoZSB0ZXJtaW5hdGlvbiBzdGFj
ayByZS1zY2FuLCB3ZSBjYW4gZW5zdXJlIHRoYXQgdGhlCisgICAgICAgIGNvbGxlY3RvciBkb2Vz
IHNvbWUgbWluaW1hbCBhbW91bnQgb2YgbWFya2luZy4gSWYgdGhlIG1pbmltYWwgYW1vdW50IG9m
IG1hcmtpbmcgZG9uZSBieSB0aGUKKyAgICAgICAgY29sbGVjdG9yIGlzIGxhcmdlIGVub3VnaCwg
d2UgY2FuIGVuc3VyZSB0aGF0IHdlIHJlYWNoIHRlcm1pbmF0aW9uIGJlZm9yZSB0aGUgbXV0YXRv
ciBjYW4gcmVncmVzcworICAgICAgICBwcm9ncmVzcy4gVGhlIGJhcnJpZXIgY2Fubm90IHVuLXRl
cm1pbmF0ZSB0aGUgY29sbGVjdG9yOyBpZiB0aGUgY29sbGVjdG9yIHJlYWNoZXMgdGVybWluYXRp
b24gYW5kCisgICAgICAgIHRoZSBiYXJyaWVyIHJlLWdyZXlzIGFuIG9iamVjdCB0aGVuIGl0J3Mg
YWN0dWFsbHkgZG9pbmcgYSBnZW5lcmF0aW9uYWwgcmVtZW1iZXJpbmcgcmF0aGVyIHRoYW4gYQor
ICAgICAgICBjb25jdXJyZW50IHJlLWdyZXlpbmcuCisKKyAgICAgICAgVGhhdCdzIHNvcnQgb2Yg
dGhlIGN1dGUgdGhpbmcgYWJvdXQgdGhlIGJhcnJpZXIgLSBpdCBpcyBleGFjdGx5IGEgcmUtZ3Jl
eWluZyBiYXJyaWVyIGR1cmluZyBHQyBhbmQKKyAgICAgICAgaXQgaXMgZXhhY3RseSBhIHJlbWVt
YmVyaW5nIGJhcnJpZXIgaW4gYmV0d2VlbiBHQ3MuCisKKyAgICAgICAgWzFdIGh0dHA6Ly93d3cu
Y3MudXRleGFzLmVkdS9mdHAvZ2FyYmFnZS9zdWJtaXQvcmVhZGFibGUvcHBpcmluZW4xMS5wcwor
ICAgICAgICBbMl0gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTM2MTAwNQorICAg
ICAgICBbM10gaHR0cDovL3d3dy5haWNhcy5jb20vcGFwZXJzL0lTTU0xMzItc2llYmVydC5wZGYK
KworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRv
cnk6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnkpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjptYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvTExWTTo6bG9hZENlbGxTdGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvTExWTTo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6bG9hZE1hcmtCeXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0Nl
bGxTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja1NldDo6cmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxv
Y2tzKToKKyAgICAgICAgKiBoZWFwL0NvcGllZEJsb2NrLmg6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnJlcG9ydExpdmVC
eXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpzaG91bGRSZXBvcnRMaXZlQnl0ZXMp
OiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvR0NMb2dnaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6
TG9nZ2luZ0Z1bmN0b3I6OnJldml2ZUNlbGxzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNp
dFdlYWtIYW5kbGVzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6Y2xlYXJSZW1lbWJlcmVkU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAu
aDoKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6Omlz
TGl2ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmlzTWFya2VkKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlB
bGxvY2F0ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQp
OgorICAgICAgICAoSlNDOjpIZWFwOjppc1JlbWVtYmVyZWQpOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5k
KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjpkcmFpbik6CisgICAgICAgIChKU0M6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVk
LgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmNoaWxkQ291bnQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aW5jcmVtZW50Q2hp
bGRDb3VudCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkYXRhQmVmb3JlVmlzaXRpbmdD
dXJyZW50T2JqZWN0KToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQpOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6Y29weUxhdGVyKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpoZWFwKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6anVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4pOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmNlbGxT
dGF0ZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6c2V0Q2VsbFN0YXRlKToKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OnNldE1hcmtlZCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpTQ2VsbDo6c2V0UmVtZW1iZXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQ2Vs
bDo6aXNNYXJrZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0NlbGw6OmlzUmVtZW1iZXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2NEYXRhT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlND
ZWxsOjpKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlSURCbG9iOjpTdHJ1Y3R1cmVJREJsb2IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJs
b2I6Om9wZXJhdG9yPSk6CisgICAgICAgICogcnVudGltZS9XZWFrTWFwRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OldlYWtNYXBEYXRhOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2Vh
a01hcERhdGE6OnNldCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2Jhc2ljLWVkZW4tZ2MtdGVz
dC5qczogQWRkZWQuCisgICAgICAgICAgICBIaWxhcmlvdXNseSwgYW4gZWFybGllciB2ZXJzaW9u
IG9mIHRoaXMgcGF0Y2ggdGhhdCBkaWRuJ3QgaGF2ZSB0aGUgTmV3R3JleS9PbGRHcmV5IGRpc3Rp
bmN0aW9uCisgICAgICAgICAgICB3b3VsZCBvbmx5IGNyYXNoIHN1cGVyLWJpZyB0ZXN0cyB0aGF0
IEdDZCB0d2ljZSBidXQgaXQgZGlkbid0IGNyYXNoIGFueSBzbWFsbCBmb2N1c2VkIHRlc3QuIEFs
bAorICAgICAgICAgICAgaXQgdG9vayB0byBzaG93IHRoZSBuZWVkIGZvciB0aGUgTmV3R3JleS9P
bGRHcmV5IGRpc3RpbmN0aW9uIHdhcyB0aGlzIHN1cGVyIHNpbXBsZSB0ZXN0LgorCiAyMDE1LTEw
LTAyICBNYXR0IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBZGQgYnJlYWtwb2ludCBvcHRpb24gdG8gaWdub3JlIG4gdGltZXMgYmVmb3JlIHN0
b3BwaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlz
aW9uIDE5MDU0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMjYsNiArMTMy
Niw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMVmFsdWVSYW5nZS5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTFdlaWdodC5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTFdlaWdodGVkVGFyZ2V0LmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENlbGxTdGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caGVhcFxDb2RlQmxvY2tTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcQ29uc2VydmF0aXZlUm9vdHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcQ29waWVkQWxsb2NhdG9yLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxOTA1NDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTIyMTksNiArMjIxOSw5IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkaXNhc3NlbWJsZXJcRGlzYXNzZW1ibGVyLmgi
PgogICAgICAgPEZpbHRlcj5kaXNhc3NlbWJsZXI8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ2VsbFN0YXRlLmgiPgorICAgICAgPEZp
bHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxoZWFwXENvbnNlcnZhdGl2ZVJvb3RzLmgiPgogICAgICAgPEZpbHRlcj5oZWFwPC9G
aWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsx
MTUsNyBAQAogCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE4RDNDRTFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmggKi87IH07CiAJCTBGMTkwQ0FDMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpl
dHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMTkwQ0FBMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29u
LmNwcCAqLzsgfTsKIAkJMEYxOTBDQUQxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlz
b25SZWFzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYxQzNEREEx
QkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQzNERDkxQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1
MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0
NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1
NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyB9OwpAQCAtMTk2NSw2ICsxOTY2LDcgQEAK
IAkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaDsgcGF0aCA9IGRmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFF
NUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxl
ci9Qcm9maWxlckpldHRpc29uUmVhc29uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxOTBDQUIxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5o
OyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjFDM0REOTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENlbGxTdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBERkdB
cmd1bWVudFBvc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fy
Z3VtZW50UG9zaXRpb24uaDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdE
b3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdE
b3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0RvdWJsZUZvcm1hdFN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MjI5LDYgKzQyMzEsNyBAQAogCQkxNDJFMzEy
QTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMEYxQzNERDkxQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5o
ICovLAogCQkJCTBGRDhBMzExMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICov
LAogCQkJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLywKIAkJ
CQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLApA
QCAtNjkyMSw2ICs2OTI0LDcgQEAKIAkJCQkxNDE0MkU1MTFCNzk2RUNFMDBGNEJGNEIgLyogVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJDMTZE
MDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2
M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJp
YWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTkwNTQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNzMsOSArMjM3Myw5IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG8KICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRl
cihvdGhlckJsb2NrKTsKIAogICAgIGlmIChtX2ppdENvZGUpCi0gICAgICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXMsIG1faml0Q29kZS0+c2l6ZSgpKTsKKyAgICAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9qaXRDb2RlLT5zaXplKCkpOwogICAg
IGlmIChtX2luc3RydWN0aW9ucy5zaXplKCkpCi0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHRoaXMsIG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVj
dGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZDb3VudCgpKTsKKyAgICAgICAgdmlzaXRvci5yZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3Ry
dWN0aW9uKSAvIG1faW5zdHJ1Y3Rpb25zLnJlZkNvdW50KCkpOwogCiAgICAgdmlzaXRvci5hcHBl
bmQoJm1fdW5saW5rZWRDb2RlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAxOTA1
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMiArNjksMTIgQEAgQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeTo6QWJzdHJhY3RIZWFwUmVwbwogICAgIFJFTEVBU0VfQVNTRVJUKCEoSlNDZWxsX2lu
ZGV4aW5nVHlwZS5vZmZzZXQoKSAmIChzaXplb2YoaW50MzJfdCkgLSAxKSkpOwogICAgIFJFTEVB
U0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBl
SW5mb1R5cGUub2Zmc2V0KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5
cGUub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90eXBlSW5mb0ZsYWdzLm9mZnNldCgpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlLm9mZnNldCgpICsgMyA9PSBKU0NlbGxf
Z2NEYXRhLm9mZnNldCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBl
Lm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKIAogICAgIEpTQ2Vs
bF9pbmRleGluZ1R5cGUuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpT
Q2VsbF90eXBlSW5mb1R5cGUuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAg
IEpTQ2VsbF90eXBlSW5mb0ZsYWdzLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsK
LSAgICBKU0NlbGxfZ2NEYXRhLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKKyAg
ICBKU0NlbGxfY2VsbFN0YXRlLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAg
ICAKICAgICByb290Lm1fdGJhYU1ldGFkYXRhID0gbWROb2RlKG1fY29udGV4dCwgbWRTdHJpbmco
bV9jb250ZXh0LCByb290Lm1faGVhcE5hbWUpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZp
c2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTIgKzUyLDEyIEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld19sZW5n
dGgsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSBcCiAgICAgbWFjcm8oSlNB
cnJheUJ1ZmZlclZpZXdfbW9kZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTW9kZSgpKSBc
CiAgICAgbWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZWZWN0b3IoKSkgXAorICAgIG1hY3JvKEpTQ2VsbF9jZWxsU3RhdGUsIEpTQ2VsbDo6
Y2VsbFN0YXRlT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0Nl
bGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlE
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKLSAgICBtYWNybyhKU0NlbGxfdXNlZnVs
Qnl0ZXMsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0NlbGxf
dHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwKICAgICBtYWNy
byhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSBcCi0g
ICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQo
KSkgXAotICAgIG1hY3JvKEpTQ2VsbF9nY0RhdGEsIEpTQ2VsbDo6Z2NEYXRhT2Zmc2V0KCkpIFwK
KyAgICBtYWNybyhKU0NlbGxfdXNlZnVsQnl0ZXMsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX2V4ZWN1dGFibGUsIEpTRnVuY3Rpb246Om9mZnNl
dE9mRXhlY3V0YWJsZSgpKSBcCiAgICAgbWFjcm8oSlNGdW5jdGlvbl9zY29wZSwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX3JhcmVEYXRh
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTA1NDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODI2MCw5ICs4MjYwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IG1fZ3JhcGgubWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIH0KICAgICAKLSAgICBMVmFsdWUgbG9hZE1hcmtC
eXRlKExWYWx1ZSBiYXNlKQorICAgIExWYWx1ZSBsb2FkQ2VsbFN0YXRlKExWYWx1ZSBiYXNlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ4KGJhc2UsIG1faGVhcHMuSlNDZWxsX2dj
RGF0YSk7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkOChiYXNlLCBtX2hlYXBzLkpTQ2VsbF9j
ZWxsU3RhdGUpOwogICAgIH0KIAogICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFz
ZSkKQEAgLTgyNzQsNyArODI3NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQ2hlY2sgdGhl
IG1hcmsgYnl0ZS4gCiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0Lm5v
dFplcm84KGxvYWRNYXJrQnl0ZShiYXNlKSksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5
KGlzTWFya2VkQW5kTm90UmVtZW1iZXJlZCkpOworICAgICAgICAgICAgbV9vdXQubm90WmVybzgo
bG9hZENlbGxTdGF0ZShiYXNlKSksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KGlzTWFy
a2VkQW5kTm90UmVtZW1iZXJlZCkpOwogCiAgICAgICAgIC8vIEFwcGVuZCB0byB0aGUgd3JpdGUg
YmFycmllciBidWZmZXIuCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNNYXJrZWRBbmROb3RSZW1lbWJlcmVkLCBidWZmZXJIYXNTcGFjZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENlbGxTdGF0ZV9oCisjZGVmaW5lIENlbGxT
dGF0ZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIENlbGxTdGF0ZSA6IHVpbnQ4
X3QgeworICAgIC8vIFRoZSBvYmplY3QgaXMgYmxhY2sgYXMgZmFyIGFzIHRoaXMgR0MgaXMgY29u
Y2VybmVkLiBXaGVuIG5vdCBpbiBHQywgdGhpcyBqdXN0IG1lYW5zIHRoYXQgaXQncyBhbgorICAg
IC8vIG9sZCBnZW4gb2JqZWN0LiBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IGFycmFuZ2UgT2xk
QmxhY2sgdG8gYmUgemVybywgc28gdGhhdCB0aGUgc3RvcmUgYmFycmllciBvbgorICAgIC8vIGEg
dGFyZ2V0IG9iamVjdCAiZnJvbSIgaXMganVzdDoKKyAgICAvLworICAgIC8vIGlmICghZnJvbS0+
Y2VsbFN0YXRlKCkpCisgICAgLy8gICAgIHNsb3dQYXRoKGZyb20pOworICAgIC8vCisgICAgLy8g
VGhlcmUgaXMgYSBidW5jaCBvZiBjb2RlIGluIHRoZSBMTEludCBhbmQgSklUcyB0aGF0IHJlbHkg
b24gdGhpcyBiZWluZyB0aGUgY2FzZS4gWW91J2QgaGF2ZSB0bworICAgIC8vIGNoYW5nZSBhIGxv
dCBvZiBjb2RlIGlmIHlvdSBldmVyIHdhbnRlZCB0aGUgc3RvcmUgYmFycmllciB0byBiZSBhbnl0
aGluZyBidXQgYSBub24temVybyBjaGVjayBvbgorICAgIC8vIGNlbGxTdGF0ZS4KKyAgICBPbGRC
bGFjayA9IDAsCisgICAgCisgICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVuLiBEdXJpbmcgR0Ms
IHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJrZWQgeWV0LgorICAg
IE5ld1doaXRlID0gMSwKKworICAgIC8vIFRoZSBvYmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2ls
bCBiZSBzY2FubmVkIC0gYnV0IGl0IGVpdGhlciBiZWxvbmdzIHRvIG9sZCBnZW4gKGlmIHRoaXMg
aXMgZWRlbgorICAgIC8vIEdDKSBvciBpdCBpcyBncmV5IGEgc2Vjb25kIHRpbWUgaW4gdGhpcyBj
dXJyZW50IEdDIChiZWNhdXNlIGEgY29uY3VycmVudCBzdG9yZSBiYXJyaWVyIHJlcXVlc3RlZAor
ICAgIC8vIHJlLWdyZXlpbmcpLgorICAgIE9sZEdyZXkgPSAyLAorCisgICAgLy8gVGhlIG9iamVj
dCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBhbmQgdGhpcyBpcyB0aGUgZmly
c3QgdGltZSBpbiB0aGlzIEdDIHRoYXQgd2UgYXJlCisgICAgLy8gZ29pbmcgdG8gc2NhbiBpdC4g
SWYgdGhpcyBpcyBhbiBlZGVuIEdDLCB0aGlzIGFsc28gbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGlz
IGluIGVkZW4uCisgICAgTmV3R3JleSA9IDMKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gQ2VsbFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29kZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMCw3ICsx
MDAsNyBAQCB2b2lkIENvZGVCbG9ja1NldDo6cmVtZW1iZXJDdXJyZW50bHlFeGVjCiAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIlJlbWVtYmVyaW5nICIsIG1fY3VycmVudGx5RXhl
Y3V0aW5nLnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5cbiIpOwogICAgIGZvciAoQ29kZUJsb2NrKiBj
b2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKLSAgICAgICAgaGVhcC0+YWRkVG9SZW1l
bWJlcmVkU2V0KGNvZGVCbG9jayk7CisgICAgICAgIGhlYXAtPndyaXRlQmFycmllcihjb2RlQmxv
Y2spOwogICAgIG1fY3VycmVudGx5RXhlY3V0aW5nLmNsZWFyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkocmV2aXNpb24gMTkwNTQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTQsNyArNTQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRQcm9tb3RlKCk7CiAKICAgICB1bnNp
Z25lZCBsaXZlQnl0ZXMoKTsKLSAgICBib29sIHNob3VsZFJlcG9ydExpdmVCeXRlcyhMb2NrSG9s
ZGVyJiwgSlNDZWxsKiBvd25lcik7CiAgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRl
ciYsIEpTQ2VsbCosIENvcHlUb2tlbiwgdW5zaWduZWQpOwogICAgIHZvaWQgcmVwb3J0TGl2ZUJ5
dGVzRHVyaW5nQ29weWluZyh1bnNpZ25lZCk7CiAgICAgdm9pZCBkaWRTdXJ2aXZlR0MoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5o
CShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRC
bG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTYgKzMzLDYgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi1pbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxk
UmVwb3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKQotewotICAgIC8vIFdl
IHdhbnQgdG8gYWRkIHRvIGxpdmUgYnl0ZXMgaWYgdGhlIG93bmVyIGlzbid0IHBhcnQgb2YgdGhl
IHJlbWVtYmVyZWQgc2V0IG9yCi0gICAgLy8gaWYgdGhpcyBibG9jayB3YXMgYWxsb2NhdGVkIGR1
cmluZyB0aGUgbGFzdCBjeWNsZS4gCi0gICAgLy8gSWYgd2UgYWx3YXlzIGFkZGVkIGxpdmUgYnl0
ZXMgd2Ugd291bGQgZG91YmxlIGNvdW50IGZvciBlbGVtZW50cyBpbiB0aGUgcmVtZW1iZXJlZAot
ICAgIC8vIHNldCBhY3Jvc3MgY29sbGVjdGlvbnMuIAotICAgIC8vIElmIHdlIGRpZG4ndCBhbHdh
eXMgYWRkIGxpdmUgYnl0ZXMgdG8gbmV3IGJsb2Nrcywgd2UnZCBnZXQgdG9vIGZldy4KLSAgICBy
ZXR1cm4gIUhlYXA6OmlzUmVtZW1iZXJlZChvd25lcikgfHwgIW1faXNPbGQ7Ci19Ci0KIGlubGlu
ZSB2b2lkIENvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYsIEpTQ2VsbCog
b3duZXIsIENvcHlUb2tlbiB0b2tlbiwgdW5zaWduZWQgYnl0ZXMpCiB7CiAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NMb2dnaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0xvZ2dpbmcuY3Bw
CShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0xvZ2dp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKIAogICAgICAg
ICBmb3IgKGNvbnN0IEpTQ2VsbCogY2VsbCA6IG1fc2F2ZWRNYXJrU3RhY2spIHsKICAgICAgICAg
ICAgIG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCkuYXBwZW5kKGNlbGwpOwotICAgICAgICAgICAg
Y29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKS0+c2V0UmVtZW1iZXJlZCh0cnVlKTsKKyAgICAgICAg
ICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok9sZEdyZXkpOwogICAgICAgICB9CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTkw
NTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5OCw3ICs1OTgsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFy
dFRpbWUsCiAgICAgLy8gdGhlIGxpdmVuZXNzIG9mIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgZ3Jh
cGguCiAgICAgdmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwogCi0gICAgY2xlYXJS
ZW1lbWJlcmVkU2V0KHJlbWVtYmVyZWRTZXQpOwogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwogICAgICAgICBtX3BhcmFsbGVsTWFya2Vy
c1Nob3VsZEV4aXQgPSB0cnVlOwpAQCAtODU2LDEzICs4NTUsNiBAQCB2b2lkIEhlYXA6OnZpc2l0
V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmNsZWFyUmVt
ZW1iZXJlZFNldChWZWN0b3I8Y29uc3QgSlNDZWxsKj4mIHJlbWVtYmVyZWRTZXQpCi17Ci0gICAg
R0NQSEFTRShDbGVhclJlbWVtYmVyZWRTZXQpOwotICAgIGZvciAoYXV0byogY2VsbCA6IHJlbWVt
YmVyZWRTZXQpCi0gICAgICAgIGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCktPnNldFJlbWVtYmVy
ZWQoZmFsc2UpOwotfQotCiB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NT
dGFydFRpbWUpCiB7CiAgICAgR0NDT1VOVEVSKFZpc2l0ZWRWYWx1ZUNvdW50LCBtX3Nsb3RWaXNp
dG9yLnZpc2l0Q291bnQoKSk7CkBAIC0xMDEwLDkgKzEwMDIsMTMgQEAgdm9pZCBIZWFwOjphZGRU
b1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NF
UlQoIU9wdGlvbnM6OmVuYWJsZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVh
ZCgpKTsKLSAgICBpZiAoaXNSZW1lbWJlcmVkKGNlbGwpKQotICAgICAgICByZXR1cm47Ci0gICAg
Y29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKS0+c2V0UmVtZW1iZXJlZCh0cnVlKTsKKyAgICBBU1NF
UlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpPbGRCbGFjayk7CisgICAgLy8gSW5k
aWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9mIHRoZSBm
b2xsb3dpbmc6CisgICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVyaW5nIGEgY29uY3VycmVu
dCBjb2xsZWN0aW9uLgorICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0LgorICAgIC8v
ICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlzIHRydWUs
IGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCisgICAgLy8gc2FtZS4KKyAg
ICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKICAgICBtX3Nsb3RWaXNp
dG9yLnVuY29uZGl0aW9uYWxseUFwcGVuZChjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTkwNTQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEs
OSArMTAxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQq
KTsKICAgICBzdGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICBz
dGF0aWMgdm9pZCBzZXRNYXJrZWQoY29uc3Qgdm9pZCopOwotICAgIHN0YXRpYyBib29sIGlzUmVt
ZW1iZXJlZChjb25zdCB2b2lkKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFRv
UmVtZW1iZXJlZFNldChjb25zdCBKU0NlbGwqKTsKICAgICBzdGF0aWMgYm9vbCBpc1dyaXRlQmFy
cmllckVuYWJsZWQoKTsKICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqKTsKICAg
ICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKQEAgLTE2Nyw3ICsx
NjUsNyBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbCBib3RoIG9mIHRoZXNlIGZ1bmN0aW9uczogQ2Fs
bGluZyBvbmx5IG9uZSBtYXkgdHJpZ2dlciBjYXRhc3Ryb3BpYwogICAgIC8vIG1lbW9yeSBncm93
dGguCiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3QpOwotICAgIHZv
aWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKEpTQ2VsbCosIHNpemVfdCk7CisgICAgdm9pZCBy
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIGRhdGFCZWZvcmVWaXNpdGluZywgc2l6
ZV90KTsKIAogICAgIC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgbm9uLUdDIG1lbW9yeSBpZiB5
b3UgY2FuJ3QgdXNlIHRoZSBiZXR0ZXIgQVBJIGFib3ZlLgogICAgIHZvaWQgZGVwcmVjYXRlZFJl
cG9ydEV4dHJhTWVtb3J5KHNpemVfdCk7CkBAIC0zMDYsNyArMzA0LDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpOwogICAgIHZvaWQgY29u
dmVyZ2UoKTsKICAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0g
ICAgdm9pZCBjbGVhclJlbWVtYmVyZWRTZXQoVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7CiAgICAg
dm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIHJl
c2V0VmlzaXRvcnMoKTsKIApAQCAtMzIzLDYgKzMyMCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgdm9pZCBjbGVhclVubWFya2Vk
RXhlY3V0YWJsZXMoKTsKICAgICB2b2lkIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZWxs
Kik7CiAgICAgdm9pZCB1cGRhdGVBbGxvY2F0aW9uTGltaXRzKCk7CiAgICAgdm9pZCBkaWRGaW5p
c2hDb2xsZWN0aW9uKGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCByZXN1bWVDb21waWxl
clRocmVhZHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsMTQgKzcwLDYgQEAgaW5saW5lIGJvb2wgSGVhcDo6
aXNMaXZlKGNvbnN0IHZvaWQqIGNlbAogICAgIHJldHVybiBNYXJrZWRCbG9jazo6YmxvY2tGb3Io
Y2VsbCktPmlzTGl2ZUNlbGwoY2VsbCk7CiB9CiAKLWlubGluZSBib29sIEhlYXA6OmlzUmVtZW1i
ZXJlZChjb25zdCB2b2lkKiBwdHIpCi17Ci0gICAgY29uc3QgSlNDZWxsKiBjZWxsID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgSlNDZWxsKj4ocHRyKTsKLSAgICBBU1NFUlQoY2VsbCk7Ci0gICAgQVNTRVJU
KCFPcHRpb25zOjplbmFibGVDb25jdXJyZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSk7Ci0gICAgcmV0dXJuIGNlbGwtPmlzUmVtZW1iZXJlZCgpOwotfQotCiBpbmxpbmUgYm9vbCBI
ZWFwOjppc01hcmtlZChjb25zdCB2b2lkKiBjZWxsKQogewogICAgIHJldHVybiBNYXJrZWRCbG9j
azo6YmxvY2tGb3IoY2VsbCktPmlzTWFya2VkKGNlbGwpOwpAQCAtMTEzLDI1ICsxMDUsMTggQEAg
aW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQwogI2lmIEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0
ZUJhcnJpZXIoKTsKICNlbmRpZgotICAgIGlmICghZnJvbSB8fCAhZnJvbS0+aXNNYXJrZWQoKSkg
ewotICAgICAgICBBU1NFUlQoIWZyb20gfHwgIWlzTWFya2VkKGZyb20pKTsKKyAgICBpZiAoIWZy
b20gfHwgZnJvbS0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpPbGRCbGFjaykKICAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXRvIHx8IHRvLT5pc01hcmtlZCgpKSB7Ci0gICAgICAg
IEFTU0VSVCghdG8gfHwgaXNNYXJrZWQodG8pKTsKKyAgICBpZiAoIXRvIHx8IHRvLT5jZWxsU3Rh
dGUoKSAhPSBDZWxsU3RhdGU6Ok5ld1doaXRlKQogICAgICAgICByZXR1cm47Ci0gICAgfQogICAg
IGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKIH0KIAogaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVC
YXJyaWVyKGNvbnN0IEpTQ2VsbCogZnJvbSkKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tT
X1ZBTElEKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oZnJvbSkpOwotICAgIGlmICghZnJvbSB8fCAhZnJv
bS0+aXNNYXJrZWQoKSkgewotICAgICAgICBBU1NFUlQoIWZyb20gfHwgIWlzTWFya2VkKGZyb20p
KTsKKyAgICBpZiAoIWZyb20gfHwgZnJvbS0+Y2VsbFN0YXRlKCkgIT0gQ2VsbFN0YXRlOjpPbGRC
bGFjaykKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQoaXNNYXJrZWQoZnJvbSkp
OwogICAgIGFkZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKIH0KIApAQCAtMTQxLDEwICsxMjYsMTAg
QEAgaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlBbGxvYwogICAgICAgICByZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZFNsb3dDYXNlKHNpemUpOwogfQogCi1pbmxpbmUgdm9pZCBI
ZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoSlNDZWxsKiBvd25lciwgc2l6ZV90IHNpemUp
CitpbmxpbmUgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIGRh
dGFCZWZvcmVWaXNpdGluZywgc2l6ZV90IHNpemUpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBkb3VibGUtY291bnQgdGhlIGV4dHJhIG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2
aW91cyBjb2xsZWN0aW9ucy4KLSAgICBpZiAob3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5D
b2xsZWN0aW9uICYmIEhlYXA6OmlzUmVtZW1iZXJlZChvd25lcikpCisgICAgaWYgKG9wZXJhdGlv
bkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbiAmJiBkYXRhQmVmb3JlVmlzaXRpbmcgPT0g
Q2VsbFN0YXRlOjpPbGRHcmV5KQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3QqIGNvdW50
ZXIgPSAmbV9leHRyYU1lbW9yeVNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDI4ICs5NSwz
MiBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vCiAgICAgICAgIGlu
dGVybmFsQXBwZW5kKDAsIHJvb3RzW2ldKTsKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBKU0NlbGwqIGNlbGwp
CitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlND
ZWxsKiBjZWxsKQogewogICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CiAKICAgICBBU1NFUlQoSGVh
cDo6aXNNYXJrZWQoY2VsbCkpOworICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxs
U3RhdGU6Ok9sZEdyZXkgfHwgY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5
KTsKKworICAgIG1fZGF0YUJlZm9yZVZpc2l0aW5nID0gY2VsbC0+Y2VsbFN0YXRlKCk7CisgICAg
Y2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkQmxhY2spOwogICAgIAogICAgIGlmIChp
c0pTU3RyaW5nKGNlbGwpKSB7Ci0gICAgICAgIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCksIHZpc2l0b3IpOworICAgICAgICBKU1N0cmluZzo6dmlzaXRD
aGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KGNlbGwpKSB7Ci0gICAgICAgIEpT
RmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlz
aXRvcik7CisgICAgICAgIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxK
U0NlbGwqPihjZWxsKSwgKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KGlzSlNBcnJheShjZWxsKSkgewotICAgICAgICBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCksIHZpc2l0b3IpOworICAgICAgICBKU0FycmF5Ojp2aXNpdENo
aWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNlbGwtPm1ldGhvZFRhYmxlKCktPnZpc2l0Q2hpbGRyZW4oY29uc3Rf
Y2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRvcik7CisgICAgY2VsbC0+bWV0aG9kVGFibGUoKS0+
dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CiB9CiAKIHZv
aWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQpAQCAtMTU0LDcgKzE1OCw3IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKCkKICAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgp
KSB7CiAgICAgICAgIG1fc3RhY2sucmVmaWxsKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgY291
bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7
IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKLSAgICAgICAgICAgIHZp
c2l0Q2hpbGRyZW4oKnRoaXMsIG1fc3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgICAgIHZp
c2l0Q2hpbGRyZW4obV9zdGFjay5yZW1vdmVMYXN0KCkpOwogICAgICAgICBkb25hdGVLbm93blBh
cmFsbGVsKCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgU2xvdFZpc2l0b3JfaAogI2RlZmluZSBTbG90VmlzaXRvcl9oCiAK
KyNpbmNsdWRlICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJDb3B5VG9rZW4uaCIKICNpbmNsdWRl
ICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgpAQCAtMTA0LDcgKzEwNSw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29weUxhdGVyKEpTQ2VsbCosIENvcHlUb2tlbiwgdm9p
ZCosIHNpemVfdCk7CiAgICAgCi0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoSlND
ZWxsKiBvd25lciwgc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChz
aXplX3QpOwogICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyKik7CiAgICAgdm9pZCBhZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIqKTsKQEAgLTExMyw2ICsxMTQsOCBAQCBwdWJsaWM6CiAgICAg
aW5saW5lIHVuc2lnbmVkIGNoaWxkQ291bnQoKSB7IHJldHVybiBtX2xvZ0NoaWxkQ291bnQ7IH0K
ICAgICBpbmxpbmUgdm9pZCBpbmNyZW1lbnRDaGlsZENvdW50KCkgeyBtX2xvZ0NoaWxkQ291bnQr
KzsgfQogCisgICAgQ2VsbFN0YXRlIGRhdGFCZWZvcmVWaXNpdGluZ0N1cnJlbnRPYmplY3QoKSBj
b25zdCB7IHJldHVybiBtX2RhdGFCZWZvcmVWaXNpdGluZzsgfQorCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC0xMzEsNiArMTM0LDggQEAgcHJpdmF0
ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKICAgICB2
b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVS
b290c0lmUHJvZml0YWJsZSgpOworCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2Vs
bCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogCkBAIC0xNTAsNiAr
MTU1LDggQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fbG9nQ2hpbGRDb3VudDsKIAorICAg
IENlbGxTdGF0ZSBtX2RhdGFCZWZvcmVWaXNpdGluZyB7IENlbGxTdGF0ZTo6TmV3V2hpdGUgfTsK
KwogcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBib29sIG1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDU0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMTMsNyArMTEzLDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6aW50ZXJuYWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNlbGwtPnNldE1hcmtl
ZCgpOworICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0Ogor
ICAgIC8vIEluIGNhc2Ugb2YgY29uY3VycmVudCBHQzogaXQncyB0aGUgZmlyc3QgdGltZSBpdCBp
cyBncmV5IGluIHRoaXMgR0MgY3ljbGUuCisgICAgLy8gSW4gY2FzZSBvZiBlZGVuIGNvbGxlY3Rp
b246IGl0J3MgYSBuZXcgb2JqZWN0IHRoYXQgYmVjYW1lIGdyZXkgcmF0aGVyIHRoYW4gYW4gb2xk
IHJlbWVtYmVyZWQgb2JqZWN0LgorICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5l
d0dyZXkpOworICAgIAogICAgIG1fYnl0ZXNWaXNpdGVkICs9IE1hcmtlZEJsb2NrOjpibG9ja0Zv
cihjZWxsKS0+Y2VsbFNpemUoKTsKICAgICAgICAgCiAgICAgdW5jb25kaXRpb25hbGx5QXBwZW5k
KGNlbGwpOwpAQCAtMjM5LDE1ICsyNDMsMjIgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmNv
cHlMYXRlcihKU0NlbAogICAgIEFTU0VSVChoZWFwKCktPm1fc3RvcmFnZVNwYWNlLmNvbnRhaW5z
KGJsb2NrKSk7CiAKICAgICBMb2NrSG9sZGVyIGxvY2tlcigmYmxvY2stPndvcmtMaXN0TG9jaygp
KTsKLSAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rp
b24gfHwgYmxvY2stPnNob3VsZFJlcG9ydExpdmVCeXRlcyhsb2NrZXIsIG93bmVyKSkgeworICAg
IC8vIFdlIGFsd2F5cyByZXBvcnQgbGl2ZSBieXRlcywgZXhjZXB0IGlmIGR1cmluZyBhbiBlZGVu
IGNvbGxlY3Rpb24gd2Ugc2VlIGFuIG9sZCBvYmplY3QgcG9pbnRpbmcgdG8gYW4KKyAgICAvLyBv
bGQgYmFja2luZyBzdG9yZSBhbmQgdGhlIG9sZCBvYmplY3QgaXMgYmVpbmcgbWFya2VkIGJlY2F1
c2Ugb2YgdGhlIHJlbWVtYmVyZWQgc2V0LiBOb3RlIHRoYXQgaWYgd2UKKyAgICAvLyBhc2sgdGhl
IG9iamVjdCBpdHNlbGYsIGl0IHdpbGwgYWx3YXlzIHRlbGwgdXMgdGhhdCBpdCdzIGFuIG9sZCBi
bGFjayBvYmplY3QgLSBiZWNhdXNlIGV2ZW4gZHVyaW5nIGFuCisgICAgLy8gZWRlbiBjb2xsZWN0
aW9uIHdlIGhhdmUgYWxyZWFkeSBpbmRpY2F0ZWQgdGhhdCB0aGUgb2JqZWN0IGlzIG9sZC4gVGhh
dCdzIHdoeSB3ZSB1c2UgdGhlCisgICAgLy8gU2xvdFZpc2l0b3IncyBjYWNoZSBvZiB0aGUgb2Jq
ZWN0J3Mgb2xkIHN0YXRlLgorICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9
PSBGdWxsQ29sbGVjdGlvbgorICAgICAgICB8fCAhYmxvY2stPmlzT2xkKCkKKyAgICAgICAgfHwg
bV9kYXRhQmVmb3JlVmlzaXRpbmcgIT0gQ2VsbFN0YXRlOjpPbGRHcmV5KSB7CiAgICAgICAgIG1f
Ynl0ZXNDb3BpZWQgKz0gYnl0ZXM7CiAgICAgICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMobG9j
a2VyLCBvd25lciwgdG9rZW4sIGJ5dGVzKTsKICAgICB9CiB9CiAgICAgCi1pbmxpbmUgdm9pZCBT
bG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKEpTQ2VsbCogb3duZXIsIHNpemVf
dCBzaXplKQoraW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChv
d25lciwgc2l6ZSk7CisgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9kYXRh
QmVmb3JlVmlzaXRpbmcsIHNpemUpOwogfQogCiBpbmxpbmUgSGVhcCogU2xvdFZpc2l0b3I6Omhl
YXAoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTY1LDEyICsxMTY1LDEyIEBAIHB1
YmxpYzoKIAogICAgIEp1bXAganVtcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oR1BSUmVnIGNlbGwp
CiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Z2NEYXRhT2Zmc2V0KCkp
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsLCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSk7
CiAgICAgfQogCiAgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihKU0NlbGwqIGNl
bGwpCiAgICAgewotICAgICAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oY2VsbCkgKyBKU0NlbGw6OmdjRGF0YU9mZnNldCgpOworICAgICAgICB1aW50OF90
KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY2VsbCkgKyBKU0NlbGw6OmNl
bGxTdGF0ZU9mZnNldCgpOwogICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYWRkcmVzcykpOwog
ICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxOTA1NDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtNDk3LDggKzQ5Nyw4IEBAIG1hY3JvIHdyaXRlQmFycmllck9uT3Bl
cmFuZChjZWxsT3BlcmFuZCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oY2VsbE9wZXJhbmQs
IHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHQxLCBDZWxsVGFnLCB0Miwg
LndyaXRlQmFycmllckRvbmUpCiAgICAgc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4odDIsIHQx
LCB0MywgCi0gICAgICAgIG1hY3JvKGdjRGF0YSkKLSAgICAgICAgICAgIGJ0Ym56IGdjRGF0YSwg
LndyaXRlQmFycmllckRvbmUKKyAgICAgICAgbWFjcm8oY2VsbFN0YXRlKQorICAgICAgICAgICAg
YnRibnogY2VsbFN0YXRlLCAud3JpdGVCYXJyaWVyRG9uZQogICAgICAgICAgICAgcHVzaCBjZnIs
IFBDCiAgICAgICAgICAgICAjIFdlIG1ha2UgdHdvIGV4dHJhIHNsb3RzIGJlY2F1c2UgY0NhbGwy
IHdpbGwgcG9rZS4KICAgICAgICAgICAgIHN1YnAgOCwgc3AKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZp
c2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDAxLDggKzQwMSw4IEBAIG1hY3JvIHdy
aXRlQmFycmllck9uT3BlcmFuZChjZWxsT3BlcmFuZCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rp
b24oY2VsbE9wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHQxLCB0
MiwgLndyaXRlQmFycmllckRvbmUpCiAgICAgc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4odDIs
IHQxLCB0MywgCi0gICAgICAgIG1hY3JvKGdjRGF0YSkKLSAgICAgICAgICAgIGJ0Ym56IGdjRGF0
YSwgLndyaXRlQmFycmllckRvbmUKKyAgICAgICAgbWFjcm8oY2VsbFN0YXRlKQorICAgICAgICAg
ICAgYnRibnogY2VsbFN0YXRlLCAud3JpdGVCYXJyaWVyRG9uZQogICAgICAgICAgICAgcHVzaCBQ
QiwgUEMKICAgICAgICAgICAgIG1vdmUgdDIsIGExICMgdDIgY2FuIGJlIGEwIChub3Qgb24gNjQg
Yml0cywgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnkpCiAgICAgICAgICAgICBtb3ZlIGNmciwg
YTAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE5MDU0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzk5LDcg
Kzc5OSw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBlLCAKIGVuZAog
CiBtYWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGNvbnRpbnVhdGlvbikKLSAgICBsb2FkYiBKU0NlbGw6Om1fZ2NEYXRhW2NlbGxdLCBzY3Jh
dGNoMQorICAgIGxvYWRiIEpTQ2VsbDo6bV9jZWxsU3RhdGVbY2VsbF0sIHNjcmF0Y2gxCiAgICAg
Y29udGludWF0aW9uKHNjcmF0Y2gxKQogZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNywgMjAwOCwgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNiArMjQsNyBAQAogI2RlZmluZSBKU0NlbGxf
aAogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKKyNpbmNsdWRlICJDZWxsU3RhdGUuaCIKICNpbmNs
dWRlICJDb25zdHJ1Y3REYXRhLmgiCiAjaW5jbHVkZSAiRW51bWVyYXRpb25Nb2RlLmgiCiAjaW5j
bHVkZSAiSGVhcC5oIgpAQCAtMTU0LDM2ICsxNTUsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBi
b29sIGNhblVzZUZhc3RHZXRPd25Qcm9wZXJ0eShjb25zdCBTdHJ1Y3R1cmUmKTsKICAgICBKU1Zh
bHVlIGZhc3RHZXRPd25Qcm9wZXJ0eShWTSYsIFN0cnVjdHVyZSYsIFByb3BlcnR5TmFtZSk7CiAK
LSAgICBlbnVtIEdDRGF0YSA6IHVpbnQ4X3QgewotICAgICAgICBNYXJrZWQgPSAwLCAvLyBUaGUg
b2JqZWN0IGhhcyBzdXJ2aXZlZCBhIEdDIGFuZCBpcyBpbiB0aGUgb2xkIGdlbi4KLSAgICAgICAg
Tm90TWFya2VkID0gMSwgLy8gVGhlIG9iamVjdCBpcyBuZXcgYW5kIGluIHRoZSBlZGVuIGdlbi4K
LSAgICAgICAgTWFya2VkQW5kUmVtZW1iZXJlZCA9IDIsIC8vIFRoZSBvYmplY3QgaXMgaW4gdGhl
IEdDJ3MgcmVtZW1iZXJlZCBzZXQuCi0KLSAgICAgICAgLy8gVGhlIG9iamVjdCBiZWluZyBpbiB0
aGUgR0MncyByZW1lbWJlcmVkIHNldCBpbXBsaWVzIHRoYXQgaXQgaXMgYWxzbwotICAgICAgICAv
LyBNYXJrZWQuIFRoaXMgaXMgYmVjYXVzZSBvYmplY3RzIGFyZSBvbmx5IGFkZGVkIHRvIHRoZSBy
ZW1lbWJlcmVkIHNldHMKLSAgICAgICAgLy8gYnkgd3JpdGUgYmFycmllcnMsIGFuZCB3cml0ZSBi
YXJyaWVycyBhcmUgb25seSBpbnRlcmVzdGVkIGluIG9sZCBnZW4KLSAgICAgICAgLy8gb2JqZWN0
cyB0aGF0IHBvaW50IHRvIHBvdGVudGlhbCBlZGVuIGdlbiBvYmplY3RzLgotICAgIH07Ci0KLSAg
ICB2b2lkIHNldE1hcmtlZCgpIHsgbV9nY0RhdGEgPSBNYXJrZWQ7IH0KLSAgICB2b2lkIHNldFJl
bWVtYmVyZWQoYm9vbCByZW1lbWJlcmVkKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ2NEYXRh
ID09IChyZW1lbWJlcmVkID8gTWFya2VkIDogTWFya2VkQW5kUmVtZW1iZXJlZCkpOwotICAgICAg
ICBtX2djRGF0YSA9IHJlbWVtYmVyZWQgPyBNYXJrZWRBbmRSZW1lbWJlcmVkIDogTWFya2VkOyAK
LSAgICB9Ci0gICAgYm9vbCBpc01hcmtlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBzd2l0Y2gg
KG1fZ2NEYXRhKSB7Ci0gICAgICAgIGNhc2UgTWFya2VkOgotICAgICAgICBjYXNlIE1hcmtlZEFu
ZFJlbWVtYmVyZWQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBOb3RN
YXJrZWQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBib29sIGlzUmVtZW1iZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2NEYXRhID09IE1hcmtl
ZEFuZFJlbWVtYmVyZWQ7IH0KKyAgICAvLyBUaGUgcmVjb21tZW5kZWQgaWRpb20gZm9yIHVzaW5n
IGNlbGxTdGF0ZSgpIGlzIHRvIHN3aXRjaCBvbiBpdCBvciBwZXJmb3JtIGFuID09IGNvbXBhcmlz
b24gb24gaXQKKyAgICAvLyBkaXJlY3RseS4gV2UgZGVsaWJlcmF0ZWx5IGF2b2lkIGhlbHBlcnMg
Zm9yIHRoaXMsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0cmFuc3BhcmVuY3kgYWJvdXQgaG93IHRo
ZQorICAgIC8vIHZhcmlvdXMgQ2VsbFN0YXRlIHZhbHVlcyBpbmZsdWVuY2VzIG91ciB2YXJpb3Vz
IGFsZ29yaXRobXMuCisgICAgQ2VsbFN0YXRlIGNlbGxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2VsbFN0YXRlOyB9CisgICAgCisgICAgdm9pZCBzZXRDZWxsU3RhdGUoQ2VsbFN0YXRlIGRhdGEp
IGNvbnN0IHsgY29uc3RfY2FzdDxKU0NlbGwqPih0aGlzKS0+bV9jZWxsU3RhdGUgPSBkYXRhOyB9
CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IHN0cnVjdHVyZUlET2Zmc2V0KCkKICAgICB7CkBAIC0y
MDUsOSArMTgyLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
Q2VsbCwgbV9pbmRleGluZ1R5cGUpOwogICAgIH0KIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgZ2NE
YXRhT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IGNlbGxTdGF0ZU9mZnNldCgpCiAgICAg
ewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9nY0RhdGEpOworICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9jZWxsU3RhdGUpOwogICAgIH0K
IAogICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUg
PSBOb3RUeXBlZEFycmF5OwpAQCAtMjQxLDcgKzIxOCw3IEBAIHByaXZhdGU6CiAgICAgSW5kZXhp
bmdUeXBlIG1faW5kZXhpbmdUeXBlOwogICAgIEpTVHlwZSBtX3R5cGU7CiAgICAgVHlwZUluZm86
OklubGluZVR5cGVGbGFncyBtX2ZsYWdzOwotICAgIHVpbnQ4X3QgbV9nY0RhdGE7CisgICAgQ2Vs
bFN0YXRlIG1fY2VsbFN0YXRlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1l
IEZyb20+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQxLDcg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJs
eUNlbGxUYWcpCi0gICAgOiBtX2djRGF0YShOb3RNYXJrZWQpCisgICAgOiBtX2NlbGxTdGF0ZShD
ZWxsU3RhdGU6Ok5ld1doaXRlKQogewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgp
KTsKIH0KQEAgLTUxLDcgKzUxLDcgQEAgaW5saW5lIEpTQ2VsbDo6SlNDZWxsKFZNJiwgU3RydWN0
dXJlKiBzdAogICAgICwgbV9pbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkK
ICAgICAsIG1fdHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKQogICAgICwgbV9mbGFn
cyhzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpCi0gICAgLCBtX2djRGF0
YShOb3RNYXJrZWQpCisgICAgLCBtX2NlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld1doaXRlKQogewog
ICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OnYKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7Ci0g
ICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QsIHRoaXNP
YmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZCh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHJldmlzaW9uIDE5MDU0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgSlNPYmplY3Q6
OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiAKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAKKwogICAgIGlmICh0b2tlbiAhPSBCdXR0ZXJmbHlD
b3B5VG9rZW4pCiAgICAgICAgIHJldHVybjsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDE5MDU0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsCiAgICAgZWxzZSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIGltcGwgPSB0aGlzT2JqZWN0LT5t
X3ZhbHVlLmltcGwoKTsKICAgICAgICAgQVNTRVJUKGltcGwpOwotICAgICAgICB2aXNpdG9yLnJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LCBpbXBsLT5jb3N0RHVyaW5nR0MoKSk7
CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKGltcGwtPmNvc3REdXJp
bmdHQygpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlEQmxvYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCShyZXZpc2lvbiAxOTA1NDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVJREJsb2JfaAogI2RlZmluZSBTdHJ1Y3R1cmVJ
REJsb2JfaAogCisjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBl
LmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUu
aCIKQEAgLTQ2LDcgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICB1LmZpZWxkcy5pbmRleGluZ1R5
cGUgPSBpbmRleGluZ1R5cGU7CiAgICAgICAgIHUuZmllbGRzLnR5cGUgPSB0eXBlSW5mby50eXBl
KCk7CiAgICAgICAgIHUuZmllbGRzLmlubGluZVR5cGVGbGFncyA9IHR5cGVJbmZvLmlubGluZVR5
cGVGbGFncygpOwotICAgICAgICB1LmZpZWxkcy5kZWZhdWx0R0NEYXRhID0gSlNDZWxsOjpOb3RN
YXJrZWQ7CisgICAgICAgIHUuZmllbGRzLmRlZmF1bHRDZWxsU3RhdGUgPSBDZWxsU3RhdGU6Ok5l
d1doaXRlOwogICAgIH0KIAogICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZUlEQmxv
YiYgb3RoZXIpIHsgdS5kb3VibGVXb3JkID0gb3RoZXIudS5kb3VibGVXb3JkOyB9CkBAIC03OSw3
ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
OwogICAgICAgICAgICAgSlNUeXBlIHR5cGU7CiAgICAgICAgICAgICBUeXBlSW5mbzo6SW5saW5l
VHlwZUZsYWdzIGlubGluZVR5cGVGbGFnczsKLSAgICAgICAgICAgIEpTQ2VsbDo6R0NEYXRhIGRl
ZmF1bHRHQ0RhdGE7CisgICAgICAgICAgICBDZWxsU3RhdGUgZGVmYXVsdENlbGxTdGF0ZTsKICAg
ICAgICAgfSBmaWVsZHM7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBpbnQzMl90IHdv
cmQxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRh
LmNwcAkocmV2aXNpb24gMTkwNTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha01hcERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgV2Vha01h
cERhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICAvLyBSb3VnaCBhcHByb3hpbWF0aW9u
IG9mIHRoZSBleHRlcm5hbCBzdG9yYWdlIG5lZWRlZCBmb3IgdGhlIGhhc2h0YWJsZS4KICAgICAv
LyBUaGlzIGlzbid0IGV4YWN0LCBidXQgaXQgaXMgY2xvc2UgZW5vdWdoLCBhbmQgcHJvcG9ydGlv
bmFsIHRvIHRoZSBhY3R1YWwKICAgICAvLyBleHRlcm5hbCBtZXJtb3J5IHVzYWdlLgotICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmosIHRoaXNPYmotPm1fbWFwLmNh
cGFjaXR5KCkgKiAoc2l6ZW9mKEpTT2JqZWN0KikgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmotPm1f
bWFwLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKEpTT2JqZWN0KikgKyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkpOwogfQogCiB2b2lkIFdlYWtNYXBEYXRhOjpzZXQoVk0mIHZtLCBKU09iamVj
dCoga2V5LCBKU1ZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9iYXNpYy1lZGVuLWdjLXRlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9iYXNpYy1lZGVuLWdjLXRlc3QuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Jhc2ljLWVkZW4tZ2MtdGVz
dC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKK3ZhciBvID0ge2Y6NDJ9OworZWRl
bkdDKCk7Cit2YXIgcCA9IHtmOjQyfTsKK2VkZW5HQygpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTkwNTQ0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTUtMTAtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBbGxvdyBhbiBvYmplY3QncyBtYXJraW5nIHN0YXRlIHRvIHRyYWNrIFRo
ZSBUaHJlZSBDb2xvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0OTY1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlvci4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbik6CisKIDIwMTUtMTAtMDIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBw
bGUuY29tPgogCiAgICAgICAgIEluc2VydGluZyBhIGNoaWxkIHRvIGEgc2xvdCBhc3NpZ25lZCBu
b2RlIGRvZXNuJ3QgdHJpZ2dlciByZXBhaW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTkwNTQ0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdv
cmtpbmcgY29weSkKQEAgLTI5ODksNyArMjk4OSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVj
dC0+dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlzaXRvcik7XG4iKSBpZiAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21NYXJrRnVuY3Rpb24ifTsKICAgICAgICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBvcnRFeHRyYU1lbW9yeUNvc3Qi
fSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdmlzaXRvci5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQoY2VsbCwgdGhpc09iamVjdC0+aW1wbCgpLm1lbW9yeUNvc3QoKSk7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QtPmltcGwoKS5tZW1vcnlDb3N0KCkpO1xuIik7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKCRudW1DYWNoZWRBdHRyaWJ1dGVzID4gMCkgewogICAg
ICAgICAgICAgZm9yZWFjaCAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewo=
</data>
<flag name="review"
          id="287584"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262448</attachid>
            <date>2015-10-05 11:18:27 -0700</date>
            <delta_ts>2015-10-05 11:29:09 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56818</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyMSBA
QAorMjAxNS0xMC0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFsbG93IGFuIG9iamVjdCdzIG1hcmtpbmcgc3RhdGUgdG8gdHJhY2sgVGhlIFRocmVlIENvbG9y
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NjU0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgSSB3YW50
IHRvIG1ha2UgR0MgbWFya2luZyBjb25jdXJyZW50IChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0OTQzMikuCisgICAgICAgIENvbmN1cnJlbnQgR0MgcmVxdWly
ZSBiYXJyaWVycyB0byBiZSBleGVjdXRlZCBkdXJpbmcgY2VydGFpbiBoZWFwIG9wZXJhdGlvbnMu
IFdlIGFscmVhZHkgaGF2ZSBhCisgICAgICAgIGdlbmVyYXRpb25hbCBHQy4gR2VuZXJhdGlvbmFs
IEdDcyBhbHNvIG5lZWQgYmFycmllcnMsIGFuZCB3ZSBhbHJlYWR5IGhhdmUgdGhvc2UuIFRoZSBn
ZW5lcmF0aW9uYWwKKyAgICAgICAgR0MgYmFycmllciB0aGF0IHdlIHVzZSBpcyB0aGUgInN0aWNr
eSBtYXJrIGJpdCIgYmFycmllci4gT3JkaW5hcmlseSwgbWFyayBiaXRzIGdldCByZXNldCBhZnRl
ciBhCisgICAgICAgIGNvbGxlY3Rpb24uIEluIG91ciBjb2xsZWN0b3IsIHRoZXJlIGlzIGEgc2Vj
b25kYXJ5IG1hcmsgYml0IHRoYXQgInN0aWNrcyIgLSBpLmUuIGl0IGRvZXMgbm90IGdldAorICAg
ICAgICByZXNldC4gSWYgdGhlIHN0aWNreSBtYXJrIGJpdCBpcyBzZXQgaW4gYmV0d2VlbiB0d28g
Y29sbGVjdGlvbnMsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4KKyAgICAgICAg
b2xkIHNwYWNlLiBUaGlzIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gcHV0IHRo
aW5ncyBpbnRvIHJlbWVtYmVyZWQgc2V0cy4gQWRkaXRpb25hbGx5LAorICAgICAgICB0aGUgc3Rp
Y2t5IG1hcmsgYml0IGlzIGFjdHVhbGx5IGEgdHJpLXN0YXRlIHRoYXQgY2FuIGFsc28gdGVsbCB1
cyBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIHBsYWNlZCBvbgorICAgICAgICBhIHJlbWVtYmVyZWQg
c2V0LgorCisgICAgICAgIFRoaXMgaXMgYXdmdWxseSBzaW1pbGFyIHRvIHdoYXQgeW91IHdhbnQg
aW4gYSBjb25jdXJyZW50IEdDLiBDb25jdXJyZW50IEdDcyB0eXBpY2FsbHkgd2FudCB3cml0ZXMK
KyAgICAgICAgdG8gdGhlIGhlYXAgdGhhdCBjaGFuZ2UgdGhlIG9iamVjdCBncmFwaCB0byBkbyBk
aWZmZXJlbnQgdGhpbmdzIGRlcGVuZGluZyBvbiBhbiBvYmplY3QncyBtYXJraW5nCisgICAgICAg
IHN0YXRlLCB3aGljaCBpcyB1c3VhbGx5IHJlZmVycmVkIHRvIGFzIGl0cyBjb2xvci4gV2hpdGUg
bWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBuZXZlciBiZWVuIHNlZW4KKyAgICAgICAgYnkgdGhl
IGNvbGxlY3Rvci4gQWxsIHdoaXRlIG9iamVjdHMgYXJlIHByZXN1bWVkIGRlYWQgYXQgdGhlIGZs
aXAuIEdyZXkgb2JqZWN0cyBhcmUgdGhvc2UgdGhhdCBhcmUKKyAgICAgICAga25vd24gdG8gdGhl
IGNvbGxlY3RvciBidXQgaGF2ZSBub3QgYmVlbiBzY2FubmVkLiBCbGFjayBvYmplY3RzIGFyZSB0
aG9zZSB0aGF0IGhhdmUgYmVlbiBzY2FubmVkLAorICAgICAgICBhbmQgd2lsbCBub3QgYmUgc2Nh
bm5lZCBhZ2Fpbi4gV2hpdGUgaXMgZXhhY3RseSBqdXN0ICJub3QgYmVpbmcgbWFya2VkIiwgYW5k
IGJvdGggZ3JleSBhbmQgYmxhY2sKKyAgICAgICAgbWVhbiAibWFya2VkIiAtIHdpdGggImJsYWNr
IiBtZWFuaW5nICJtYXJrZWQgYnV0IG5vdCBvbiBhbnkgd29ya2xpc3QiLiBUaGF0J3MgcXVpdGUg
YSBiaXQgbGlrZSB0aGUKKyAgICAgICAgY3VycmVudCAiTWFya2VkIiBhbmQgIk1hcmtlZEFuZFJl
bWVtYmVyZWQiIHN0YXRlcyB0aGF0IHdlIGhhdmUgZm9yIGdlbmVyYXRpb25hbCBHQy4KKyAgICAg
ICAgIk1hcmtlZEFuZFJlbWVtYmVyZWQiIGlzIGEgbG90IGxpa2UgImdyZXkiLCBhbmQgIk1hcmtl
ZCIgaXMgYSBsb3QgbGlrZSAiYmxhY2siLgorCisgICAgICAgIEkgd2FudCB0byBtYWtlIGEgY29u
Y3VycmVudCBHQyB0aGF0IHVuaWZpZXMgdGhlIGdlbmVyYXRpb25hbCBhbmQgY29uY3VycmVudCBi
YXJyaWVycyBpbnRvIGEgc2luZ2xlCisgICAgICAgIGZhc3QgcGF0aCBjaGVjay4gRXZlbiBiZXR0
ZXIgaWYgdGhlIHR3byBiYXJyaWVycyBhcmUgZW50aXJlbHkgaWRlbnRpY2FsLiBZb3UgY2FuIGRv
IHRoaXMgdXNpbmcKKyAgICAgICAgUGlyaW5lbidzIHRlY2huaXF1ZSAjMiBbMV0sIG9yaWdpbmFs
bHkgZHVlIHRvIEd1eSBTdGVlbGUgWzJdOiB3aGVuIGRvaW5nIG8uZj12IHdoZXJlIG8gaXMgYmxh
Y2sgYW5kCisgICAgICAgIHYgaXMgd2hpdGUsIHR1cm4gbyBncmV5IGFnYWluLiBUaGlzIGlzIGxp
a2UgcmVtZW1iZXJpbmcgYW4gb2JqZWN0LCBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgZ2VuIEdDCisg
ICAgICAgICJyZW1lbWJlcmVzIiBvIHdoZW4gbyBpcyBvbGQgYW5kIHYgaXMgbmV3LiBJdCByZW1l
bWJlcnMgb2JqZWN0cyBieSBwdXR0aW5nIHRoZW0gb24gdGhlIG1hcmsgc3RhY2ssCisgICAgICAg
IHNldHRpbmcgdGhlIGdlbmVyYXRpb25hbCBzdGF0ZSB0byBNYXJrZWRBbmRSZW1lbWJlcmVkLCBh
bmQgZG9pbmcgbm90aGluZyB0byB0aGUgcHJpbWFyeSBtYXJrIGJpdC4KKworICAgICAgICBUaGlz
IG1ha2VzIG91ciBjb25jdXJyZW50IEdDIGFwcHJvYWNoIHByZXR0eSBvYnZpb3VzLiBXZSB3YW50
IHRvIHVzZSBvbmUgYmFycmllciBmb3IgY29uY3VycmVudCBhbmQKKyAgICAgICAgZ2VuZXJhdGlv
bmFsLCBhbmQgd2Ugd2FudCB0byBiYXNpY2FsbHkga2VlcCBvdXIgY3VycmVudCBiYXJyaWVycyB1
bmNoYW5nZWQuIFRoZSBvbmx5IHRoaW5ncyBtaXNzaW5nCisgICAgICAgIGFyZSBqdXN0IHNvbWUg
c21hbGwgY2hhbmdlcyB0byBhbGxvdyB0aGUgY29uY3VycmVudCBHQyB0byBrbm93IHByZWNpc2Vs
eSB3aGVuIGFuIG9iamVjdCBpcyBibGFjaywKKyAgICAgICAgYW5kIHRvIGtub3cgZHVyaW5nIG9i
amVjdCB2aXNpdGluZyBpZiB3ZSBhcmUgdmlzaXRpbmcgdGhlIG9iamVjdCBmb3IgdGhlIGZpcnN0
IHRpbWUgZHVyaW5nIGEKKyAgICAgICAgY29sbGVjdGlvbiBvciBhIHN1YnNlcXVlbnQgdGltZSBk
dWUgdG8gYmFycmllciByZS1ncmV5aW5nIChjb25jdXJyZW50IEdDKSBvciBiYXJyaWVyIHJlbWVt
YmVyaW5nCisgICAgICAgIChnZW5lcmF0aW9uYWwgR0MpLiBTbywgdGhpcyBwYXRjaCBkb2VzIHRo
ZSBmb2xsb3dpbmc6CisKKyAgICAgICAgLSBDaGFuZ2VzIHRoZSB0ZXJtaW5vbG9neSB1c2VkIGZv
ciB0aGUgZ2NEYXRhIGhlYWRlciBieXRlIGluIEpTQ2VsbC4gVGhpcyBjaGFuZ2VzIHRoZSBuYW1l
IG9mIHRoaXMKKyAgICAgICAgICB0byBjZWxsU3RhdGUsIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IGVu
dW1lcmF0aW9uIGNhbGxlZCBDZWxsU3RhdGUuIFRoaXMgbmV3IGVudW1lcmF0aW9uIGJlaGF2ZXMg
YQorICAgICAgICAgIGxvdCBsaWtlIHRoZSBvbGQgR0NEYXRhIGRpZC4gSXQgaGFzIHRoZSBmb2xs
b3dpbmcgbWVtYmVycywgd2l0aCB0aGUgZm9sbG93aW5nIGNvcnJlc3BvbmRlbmNlIHRvCisgICAg
ICAgICAgdGhlIG9sZCBHQ0RhdGE6CisKKyAgICAgICAgICBPbGRCbGFjazogdGhpcyBpcyBsaWtl
IE1hcmtlZCwgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgd2UgZW5zdXJlIHRoYXQgYW4gb2JqZWN0
IGJlY29tZXMgT2xkQmxhY2sKKyAgICAgICAgICAgICAgYXMgc29vbiBhcyB0aGUgb2JqZWN0IHN0
YXJ0cyB0byBiZSBzY2FubmVkLiBQcmV2aW91c2x5LCBhbiBvYmplY3QgbWlnaHQgYmUKKyAgICAg
ICAgICAgICAgTWFya2VkQW5kUmVtZW1iZXJlZCBkdXJpbmcgc2Nhbm5pbmcgYW5kIHdlJ2QgdHVy
biBhbGwgTWFya2VkQW5kUmVtZW1iZXJlZCBvYmplY3RzIGludG8gTWFya2VkCisgICAgICAgICAg
ICAgIG9iamVjdHMgZHVyaW5nIGEgcG9zdC1wcm9jZXNzaW5nIHN0ZXAgYXQgdGhlIGVuZCBvZiBH
Qy4gVGhpcyBwYXRjaCBnZXRzIHJpZCBvZiB0aGF0CisgICAgICAgICAgICAgIHBvc3QtcHJvY2Vz
c2luZy4gVGhlIGFjdCBvZiB2aXNpdGluZyBhbiBvYmplY3QgdW5jb25kaXRpb25hbGx5IG1ha2Vz
IGl0IE9sZEJsYWNrLiBOb3RlIHRoYXQKKyAgICAgICAgICAgICAgb3VyIGRlZmluaXRpb24gb2Yg
ImJsYWNrIiBpcyBub3QgdGhhdCB0aGUgb2JqZWN0IGlzIGRvbmUgYmVpbmcgc2Nhbm5lZCwgYnV0
IHRoYXQgaXQgaXMgZWl0aGVyCisgICAgICAgICAgICAgIGJlaW5nIHNjYW5uZWQgcmlnaHQgbm93
IG9yIGl0IGhhcyBhbHJlYWR5IGJlZW4gc2Nhbm5lZC4gVGhpcyBpcyBsaWtlIGEgY29tYmluYXRp
b24gb2YKKyAgICAgICAgICAgICAgU2llYmVydCdzIGFudGhyYWNpdGUgYW5kIGJsYWNrIHN0YXRl
cyBbM10uCisKKyAgICAgICAgICBOZXdXaGl0ZTogdGhpcyBpcyBleGFjdGx5IE5vdE1hcmtlZC4g
SXQncyB0aGUgc3RhdGUgdGhhdCBvYmplY3RzIGdldCB3aGVuIHRoZXkgYXJlIGFsbG9jYXRlZC4K
KyAgICAgICAgICAgICAgSXQncyBpbXBvc3NpYmxlIGZvciBhbiBvYmplY3QgdG8gcmV0dXJuIHRv
IHRoaXMgc3RhdGUuCisKKyAgICAgICAgICBPbGRHcmV5OiB0aGUgb2JqZWN0IGlzIG9uIHRoZSBt
YXJrIHN0YWNrIGFuZCB3aWxsIGJlIHNjYW5uZWQgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJl
LiBUaGlzCisgICAgICAgICAgICAgIGFsc28gbWVhbnMgdGhhdCB0aGlzIGlzbid0IHRoZSBmaXJz
dCB0aW1lIGluIHRoaXMgY3ljbGUgdGhhdCB0aGUgb2JqZWN0IGhhcyBiZWVuIGdyZXkuIEluIGFu
CisgICAgICAgICAgICAgIGVkZW4gY29sbGVjdGlvbiwgYW4gb2xkIG9iamVjdCB0aGF0IGhhcyBi
ZWVuIHJlbWVtYmVyZWQgaXMgdGhvdWdodCBvZiBhcyBiZWluZyBPbGRHcmV5LCBldmVuCisgICAg
ICAgICAgICAgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgZHVyaW5nIHRoaXMgZWRlbiBjb2xs
ZWN0aW9uIHRoYXQgaXQgaXMgZ3JleS4gVGhhdCdzIGJlY2F1c2UgYW4gZWRlbgorICAgICAgICAg
ICAgICBjb2xsZWN0aW9uIG11c3QgYmVoYXZlICJhcyBpZiIgdGhlIGdyZXktPmJsYWNrIHRyYW5z
aXRpb24gZm9yIG9sZCBvYmplY3RzIG1hZ2ljYWxseSBoYXBwZW5lZAorICAgICAgICAgICAgICBh
dCB0aGUgc3RhcnQgb2YgR0MuIFJlbWVtYmVyZWQgb2JqZWN0cyBhcmUgbGlrZSBvbGQgb2JqZWN0
cyB0aGF0IHVuZGVyd2VudCBhIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgYmFycmllciByZS1n
cmV5aW5nIGp1c3QgYWZ0ZXIgdGhlIG1hZ2ljYWwgb2xkIG9iamVjdCBncmV5LT5ibGFjayB0cmFu
c2l0aW9uIGF0IHRoZSBzdGFydCBvZgorICAgICAgICAgICAgICBHQy4gVGhpcyBzdGF0ZSBpcyBh
bG1vc3QgZXhhY3RseSBsaWtlIE1hcmtlZEFuZFJlbWVtYmVyZWQsIGV4Y2VwdCB0aGF0IGFuIG9i
amVjdCBub3cKKyAgICAgICAgICAgICAgdHJhbnNpdGlvbnMgZnJvbSBPbGRHcmV5IHRvIE9sZEJs
YWNrIGF0IHRoZSBiZWdpbm5pbmcgb2YgdmlzaXRpbmcsIHJhdGhlciB0aGFuIGhvdyBwcmV2aW91
c2x5CisgICAgICAgICAgICAgIHdlIHRyYW5zaXRpb25lZCBmcm9tIE1hcmtlZEFuZFJlbWVtYmVy
ZWQgdG8gTWFya2VkIGF0IHRoZSBiaXR0ZXIgZW5kIG9mIEdDLgorCisgICAgICAgICAgTmV3R3Jh
eTogdGhlIG9iamVjdCBpcyBvbiB0aGUgbWFyayBzdGFjayBhbmQgd2lsbCBiZSBzY2FubmVkIGF0
IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4gVGhpcworICAgICAgICAgICAgICBzdGF0ZSBoYXMg
bm8gY2xlYXIgcmVsYXRpdmUgaW4gdGhlIG9sZCBzdGF0ZSBzeXN0ZW0uIEl0IG1lYW5zIHRoYXQg
dGhlIG9iamVjdCBiZWNhbWUgZ3JleSBkdWUKKyAgICAgICAgICAgICAgdG8gb3JkaW5hcnkgbWFy
a2luZy4gUHJldmlvdXNseSwgb3JkaW5hcnkgbWFya2luZyB3b3VsZCBtYWtlIHRoZSBvYmplY3Qg
TWFya2VkLgorCisgICAgICAgIC0gUmVtb3ZhbCBvZiB0aGUgcG9zdC1wcm9jZXNzaW5nIHBoYXNl
IHRoYXQgImNsZWFycyIgdGhlIHJlbWVtYmVyZWQgc2V0IGJ5IG1vdmluZyBhbGwgcmVtZW1iZXJl
ZAorICAgICAgICAgIG9iamVjdHMgdG8gdGhlIE1hcmtlZCBzdGF0ZS4gVGhpcyBub3cgaGFwcGVu
cyBtYWdpY2FsbHkgZHVyaW5nIHZpc2l0aW5nLCBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgICAg
ICAgLSBTbG90VmlzaXRvciBub3cgcmVtZW1iZXJzIHRoZSBzdGF0ZSB0aGF0IHRoZSBvYmplY3Qg
ZGlkIGhhdmUganVzdCBiZWZvcmUgdmlzaXRpbmcuIFdoaWxlIHZpc2l0aW5nCisgICAgICAgICAg
dGhhdCBvYmplY3QsIGl0J3MgcG9zc2libGUgdG8gcXVlcnkgd2hhdCB0aGUgc3RhdGUgd2FzLiBU
aGlzIGlzIHVzZWQgZm9yIGNvcHkgc3BhY2UgZGVjaXNpb25zIGFuZAorICAgICAgICAgIGZvciBl
eHRyYSBtZW1vcnkgdXNhZ2UgYWNjb3VudGluZy4gV2UgZG9uJ3Qgd2FudCB0byBwdXQgdGhlIGJh
Y2tpbmcgc3RvcmUgb24gdGhlIGNvcHkgd29ya2xpc3QsCisgICAgICAgICAgYW5kIHdlIGRvbid0
IHdhbnQgdG8gY291bnQgZXh0cmEgbWVtb3J5IHVzYWdlLCBpZiB0aGUgb2JqZWN0IHdhcyBPbGRH
cmV5IGF0IHRoZSBzdGFydCBvZgorICAgICAgICAgIHZpc2l0aW5nLiBQcmV2aW91c2x5LCB3ZSB3
b3VsZCBiZSBhYmxlIHRvIGp1c3QgYXNrIGlmIHRoZSBvYmplY3Qgd2FzIE1hcmtlZEFuZFJlbWVt
YmVyZWQgc2luY2UKKyAgICAgICAgICB0aGF0IHN0YXRlIHdvdWxkbid0IGdldCBjbGVhcmVkIHVu
dGlsIGFmdGVyIGFsbCBtYXJraW5nIGZpbmlzaGVkLiBUaGlzIGNoYW5nZSBhbHNvIHNpbXBsaWZp
ZXMKKyAgICAgICAgICBzb21lIEFQSXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0byBwYXNz
IHRoZSBKU0NlbGwqIHBvaW50ZXIsIHNpbmNlIHRoZXNlIFNsb3RWaXNpdG9yIG1ldGhvZHMKKyAg
ICAgICAgICBubyBsb25nZXIgYXNrIHRoZSBjZWxsIGZvciBpdHMgc3RhdGUgLSBpbnN0ZWFkIHRo
ZXkgdXNlIHRoZSBzYXZlZCBwcmUtdmlzaXRpbmcgc3RhdGUuCisKKyAgICAgICAgLSBSZW1vdmFs
IG9mIGEgYnVuY2ggb2YgaGVscGVycyBhbmQgYWJzdHJhY3Rpb25zLiBQcmV2aW91c2x5IHdlIGhh
ZCB2YXJpb3VzIG1ldGhvZHMgZm9yIGFza2luZyBpZgorICAgICAgICAgIGFuIG9iamVjdCB3YXMg
Im1hcmtlZCIgYW5kIGlmIGFuIG9iamVjdCB3YXMgInJlbWVtYmVyZWQiLiBXZSBoYWQgaGVscGVy
cyBmb3IgYWRqdXN0aW5nIHRoZXNlCisgICAgICAgICAgc3RhdGVzLCBhbmQgdGhvc2UgaGVscGVy
cyB3b3VsZCBhc3NlcnQgdGhhdCB0aGV5IHdlcmUgYmVpbmcgdXNlZCB0aGUgcmlnaHQgd2F5LiBU
aGlzIGlzIG5vdCB2ZXJ5CisgICAgICAgICAgdXNlZnVsIGZvciBjb25jdXJyZW50IEdDLCBzaW5j
ZSBub3cgdGhlIHNldCBvZiBwb3NzaWJsZSBzdGF0ZSB0cmFuc2l0aW9ucyBpcyBtdWNoIGxhcmdl
ci4gQWxzbywKKyAgICAgICAgICB0aGUgcHJldmlvdXMgdXNlIG9mIHRoZSB3b3JkICJtYXJrZWQi
IHdhcyBwcmV0dHkgYmFkIC0gZm9yIGV4YW1wbGUgaW4gSGVhcCwgIm1hcmtlZCIgcmVmZXJzIHRv
CisgICAgICAgICAgdGhlIHByaW1hcnkgbWFyayBiaXQgKHRoYXQgZ2V0cyBjbGVhcmVkIGF0IHRo
ZSBmbGlwKSwgd2hpbGUgaW4gSlNDZWxsLCAibWFya2VkIiByZWZlcnMgdG8gdGhlCisgICAgICAg
ICAgc3RpY2t5IG1hcmsgYml0ICh0aGF0IGRvZXMgbm90IGdldCBjbGVhcmVkLCBldmVyKS4gVGhp
cyBjaGFuZ2UgZ2V0cyByaWQgb2YgYSBsb3Qgb2YgdGhvc2UgaGVscGVycworICAgICAgICAgIGFu
ZCBpbmxpbmVzIHRoZWlyIGxvZ2ljLiBUaGlzIGFjdHVhbGx5IG1ha2VzIHRoZSBjb2RlIGVhc2ll
ciBhbmQgbW9yZSBmdW4gdG8gcmVhZCwgc2luY2UgeW91IGNhbgorICAgICAgICAgIG5vdyBsb29r
IGF0IHRoZSBtYXJraW5nIGFuZCBiYXJyaWVyIGNvZGUgYW5kIHNlZSBob3cgdGhhdCBjb2RlIHVz
ZXMgdGhlIGZvdXIgQ2VsbFN0YXRlcy4gRm9yCisgICAgICAgICAgZXhhbXBsZSwgaXQncyBmdW4g
dG8gc2VlIHRoYXQgdGhlIGJhcnJpZXIgZ2V0cyBmaXJlZCBmb3Igby5mPXYgZXhhY3RseSB3aGVu
IG8gaXMgT2xkQmxhY2sgYW5kIHYKKyAgICAgICAgICBpcyBOZXdXaGl0ZS4KKworICAgICAgICBU
aGlzIGNoYW5nZSBzaG91bGRuJ3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHBlcmZvcm1hbmNlIG9yIEdD
IGJlaGF2aW9yLiBJdCBkb2VzIHB1dCBvdXIgY29kZSBpbiBhCisgICAgICAgIHdlaXJkIHN0YXRl
IHdoZXJlIHdlIG5vdyBoYXZlIHN0YXRlcyBhbmQgY29tbWVudHMgcmVmZXJlbmNpbmcgYSBjb25j
dXJyZW50IEdDIHRoYXQgZG9lc24ndCBleGlzdAorICAgICAgICB5ZXQuCisKKyAgICAgICAgRmlu
YWxseSwgc29tZSB0aG91Z2h0cyBhYm91dCB0aGUgY29uY3VycmVudCBHQyBiYXJyaWVyIGFuZCBp
dHMgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZS4gVGhpcworICAgICAgICBiYXJyaWVyIGV4
aGliaXRzIHZlcnkgcG9vciBndWFyYW50ZWVzIGFib3V0IGNvbGxlY3RvciBwcm9ncmVzcywgYnV0
IG1heGltaXplcyB0aHJvdWdocHV0IGJ5IGp1c3QKKyAgICAgICAgcmV1c2luZyB0aGUgZXhpc3Rp
bmcgYmFycmllciBjb2RlIHdlIGFscmVhZHkgZW1pdCBhbmQgb3B0aW1pemUuIEkgYmVsaWV2ZSB0
aGF0IGV2ZW4gb3VyIGVwb2NoLWJhc2VkCisgICAgICAgIGJhcnJpZXIgaW5zZXJ0aW9uIERGRyBw
aGFzZSBpcyBjb3JyZWN0IGZvciB0aGUgY29uY3VycmVudCBpbnRlcnByZXRhdGlvbiBvZiBvdXIg
ZXhpc3RpbmcgYmFycmllci4KKyAgICAgICAgQnV0LCB0aGUgYmFycmllciBjYW4gcmVncmVzcyB0
aGUgcHJvZ3Jlc3MgdGhhdCB0aGUgY29sbGVjdG9yIGhhcyBtYWRlIGZvciB0d28gcmVhc29uczoK
KworICAgICAgICBJbmNyZW1lbnRhbCB1cGRhdGU6IHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGlz
IGJhcnJpZXIgd2l0aCBhIGJsYWNrIHN0YWNrLCBzaW5jZSB0aGF0IHdvdWxkIG1lYW4KKyAgICAg
ICAgdGhhdCBoZWFwIGxvYWRzIG9mIHdoaXRlIG9iamVjdHMgd2lsbCBoYXZlIHRvIGV4cGxpY2l0
bHkgcmUtZ3JleSB0aGUgc3RhY2suIFRoZSB3YXkgeW91IGltcGxlbWVudAorICAgICAgICB0aGlz
IGtpbmQgb2YgY29sbGVjdG9yIGlzIHRoYXQgY29sbGVjdG9yIHRlcm1pbmF0aW9uIHdpbGwgcmVz
Y2FuIHRoZSBzdGFjay4gVGVybWluYXRpb24gaXMgcmVhY2hlZAorICAgICAgICBvbmx5IGlmIHRo
ZSBhdC10ZXJtaW5hdGlvbiByZS1zY2FuIGdyZXlzIG5vIG9iamVjdHMuIFRoaXMgbWVhbnMgdGhh
dCB0aGUgY29sbGVjdG9yIGlzIGEgZml4cG9pbnQuCisgICAgICAgIEx1Y2tpbHksIG91ciBjb2xs
ZWN0b3IgaXMgYWxyZWFkeSBhIGZpeHBvaW50IGJlY2F1c2Ugb2Ygb3BhcXVlIHJvb3RzIGFuZCBz
dHJ1Y3R1cmUgdHJhbnNpdGlvbnMuCisKKyAgICAgICAgTWFya2luZyBhaW4ndCBtb25vdG9uaWM6
IG5vcm1hbGx5LCBvbmNlIGFuIG9iamVjdCBpcyBibGFjaywgaXQgc3RheXMgdGhhdCB3YXkuIElu
IHRoaXMgY29sbGVjdG9yLAorICAgICAgICBibGFjayBvYmplY3RzIG1heSBiZWNvbWUgZ3JleSBh
Z2Fpbi4gSSBkb24ndCBoYXZlIHBlcnNvbmFsIGV4cGVyaWVuY2Ugd2l0aCBzdWNoIGNvbmN1cnJl
bnQgR0NzLCBidXQKKyAgICAgICAgSSBzdXNwZWN0IHRoYXQgdGhpcyB3aWxsIGJhc2ljYWxseSBi
ZSBmaW5lLiBDb25jdXJyZW50IGNvbGxlY3Rpb25zIGZpbmlzaCBwcmV0dHkgcXVpY2tseSwgYW5k
IHRoZQorICAgICAgICBtdXRhdG9yIHVzdWFsbHkgdG91Y2hlcyBvbmx5IGEgc3Vic2V0IG9mIHRo
ZSBoZWFwLiBPbmx5IHRoYXQgc3Vic2V0IG9mIHRoZSBoZWFwIHRoYXQgdGhlIG11dGF0b3IgaXMK
KyAgICAgICAgdG91Y2hpbmcgY291bGQgYmUgcmUtZ3JleWVkLiBQcm9iYWJseSwgdGhlIEdDIHdp
bGwgaGF2ZSB0byBiZSBoeWJyaWQgaW5jcmVtZW50YWwgYW5kIGNvbmN1cnJlbnQsCisgICAgICAg
IGFuZCB0b3dhcmRzIHRoZSBlbmQgb2YgR0Mgd2hlbiB3ZSBkbyB0aGUgdGVybWluYXRpb24gc3Rh
Y2sgcmUtc2Nhbiwgd2UgY2FuIGVuc3VyZSB0aGF0IHRoZQorICAgICAgICBjb2xsZWN0b3IgZG9l
cyBzb21lIG1pbmltYWwgYW1vdW50IG9mIG1hcmtpbmcuIElmIHRoZSBtaW5pbWFsIGFtb3VudCBv
ZiBtYXJraW5nIGRvbmUgYnkgdGhlCisgICAgICAgIGNvbGxlY3RvciBpcyBsYXJnZSBlbm91Z2gs
IHdlIGNhbiBlbnN1cmUgdGhhdCB3ZSByZWFjaCB0ZXJtaW5hdGlvbiBiZWZvcmUgdGhlIG11dGF0
b3IgY2FuIHJlZ3Jlc3MKKyAgICAgICAgcHJvZ3Jlc3MuIFRoZSBiYXJyaWVyIGNhbm5vdCB1bi10
ZXJtaW5hdGUgdGhlIGNvbGxlY3RvcjsgaWYgdGhlIGNvbGxlY3RvciByZWFjaGVzIHRlcm1pbmF0
aW9uIGFuZAorICAgICAgICB0aGUgYmFycmllciByZS1ncmV5cyBhbiBvYmplY3QgdGhlbiBpdCdz
IGFjdHVhbGx5IGRvaW5nIGEgZ2VuZXJhdGlvbmFsIHJlbWVtYmVyaW5nIHJhdGhlciB0aGFuIGEK
KyAgICAgICAgY29uY3VycmVudCByZS1ncmV5aW5nLgorCisgICAgICAgIFRoYXQncyBzb3J0IG9m
IHRoZSBjdXRlIHRoaW5nIGFib3V0IHRoZSBiYXJyaWVyIC0gaXQgaXMgZXhhY3RseSBhIHJlLWdy
ZXlpbmcgYmFycmllciBkdXJpbmcgR0MgYW5kCisgICAgICAgIGl0IGlzIGV4YWN0bHkgYSByZW1l
bWJlcmluZyBiYXJyaWVyIGluIGJldHdlZW4gR0NzLgorCisgICAgICAgIFsxXSBodHRwOi8vd3d3
LmNzLnV0ZXhhcy5lZHUvZnRwL2dhcmJhZ2Uvc3VibWl0L3JlYWRhYmxlL3BwaXJpbmVuMTEucHMK
KyAgICAgICAgWzJdIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zNjEwMDUKKyAg
ICAgICAgWzNdIGh0dHA6Ly93d3cuYWljYXMuY29tL3BhcGVycy9JU01NMTMyLXNpZWJlcnQucGRm
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5OjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5KToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmxvYWRDZWxsU3RhdGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmVtaXRTdG9yZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmxvYWRNYXJrQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9D
ZWxsU3RhdGUuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJs
b2Nrcyk6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgorICAgICAgICAqIGhlYXAvQ29w
aWVkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZl
Qnl0ZXMpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6c2hvdWxkUmVwb3J0TGl2ZUJ5dGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0dDTG9nZ2luZy5jcHA6CisgICAgICAgIChKU0M6
OkxvZ2dpbmdGdW5jdG9yOjpyZXZpdmVDZWxscyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlz
aXRXZWFrSGFuZGxlcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6
OkhlYXA6OmNsZWFyUmVtZW1iZXJlZFNldCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFw
Lmg6CisgICAgICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpIZWFwOjpp
c0xpdmUpOgorICAgICAgICAoSlNDOjpIZWFwOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Okhl
YXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNSZW1lbWJlcmVkKTogRGVsZXRlZC4KKyAgICAgICAg
KiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjp2aXNpdENoaWxkcmVuKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNp
dG9yOjpjaGlsZENvdW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmluY3JlbWVudENo
aWxkQ291bnQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGF0YUJlZm9yZVZpc2l0aW5n
Q3VycmVudE9iamVjdCk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmNvcHlMYXRlcik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aGVhcCk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6Omp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206
CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjZWxs
U3RhdGUpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnNldENlbGxTdGF0ZSk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpzZXRNYXJrZWQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKU0NlbGw6OnNldFJlbWVtYmVyZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0Nl
bGw6OmlzTWFya2VkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDZWxsOjppc1JlbWVtYmVy
ZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdjRGF0YU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6SlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSURCbG9iLmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUlEQmxvYjo6U3RydWN0dXJlSURCbG9iKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURC
bG9iOjpvcGVyYXRvcj0pOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcERhdGEuY3BwOgorICAg
ICAgICAoSlNDOjpXZWFrTWFwRGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6Oldl
YWtNYXBEYXRhOjpzZXQpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9iYXNpYy1lZGVuLWdjLXRl
c3QuanM6IEFkZGVkLgorICAgICAgICAgICAgSGlsYXJpb3VzbHksIGFuIGVhcmxpZXIgdmVyc2lv
biBvZiB0aGlzIHBhdGNoIHRoYXQgZGlkbid0IGhhdmUgdGhlIE5ld0dyZXkvT2xkR3JleSBkaXN0
aW5jdGlvbgorICAgICAgICAgICAgd291bGQgb25seSBjcmFzaCBzdXBlci1iaWcgdGVzdHMgdGhh
dCBHQ2QgdHdpY2UgYnV0IGl0IGRpZG4ndCBjcmFzaCBhbnkgc21hbGwgZm9jdXNlZCB0ZXN0LiBB
bGwKKyAgICAgICAgICAgIGl0IHRvb2sgdG8gc2hvdyB0aGUgbmVlZCBmb3IgdGhlIE5ld0dyZXkv
T2xkR3JleSBkaXN0aW5jdGlvbiB3YXMgdGhpcyBzdXBlciBzaW1wbGUgdGVzdC4KKwogMjAxNS0x
MC0wNSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEpTQzo6
U2xvdFZpc2l0b3Igc2hvdWxkIG5vdCBiZSBhIGhvdCBtZXNzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMjYsNiArMTMyNiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxmdGxcRlRMVmFsdWVSYW5nZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZnRsXEZUTFdlaWdodC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TFdlaWdodGVkVGFyZ2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENl
bGxTdGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb2RlQmxvY2tT
ZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29uc2VydmF0aXZlUm9v
dHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkQWxsb2NhdG9y
LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtp
bmcgY29weSkKQEAgLTIyMTksNiArMjIxOSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkaXNhc3NlbWJsZXJcRGlzYXNzZW1ibGVyLmgiPgogICAgICAgPEZpbHRlcj5kaXNhc3NlbWJs
ZXI8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcQ2VsbFN0YXRlLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9D
bEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvbnNlcnZhdGl2ZVJv
b3RzLmgiPgogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkwNTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsNyBAQAogCQkwRjE4RDNEMDFCNTVBNkUw
MDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE4RDNDRTFCNTVBNkUwMDAyQzVD
OUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87IH07CiAJCTBGMTkwQ0FD
MTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTkwQ0FBMTg5RDgyRjYwMDBB
RTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCAqLzsgfTsKIAkJMEYxOTBDQUQxODlE
ODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAv
KiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYxQzNEREExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQzNE
RDkxQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBK
U0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUUzQTQ2MTUzNENCQUYwMDBG
OTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1l
bnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91
YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5o
ICovOyB9OwpAQCAtMTk2NCw2ICsxOTY1LDcgQEAKIAkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgcGF0aCA9IGRm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFz
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUHJvZmlsZXJKZXR0
aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpldHRpc29uUmVhc29uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIxODlEODJGNjAwMEFFNUYw
IC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJK
ZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjFDM0REOTFC
QkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENlbGxTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFERDg0
OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MUUzQTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50UG9zaXRpb24uaDsgcGF0aCA9IGRm
Zy9ERkdBcmd1bWVudFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR0RvdWJsZUZvcm1hdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MjI2LDYgKzQyMjgsNyBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYxQzNERDkx
QkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oICovLAogCQkJCTBGRDhBMzExMTdENDMyNkMw
MENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovLAogCQkJCTBGRDhBMzEyMTdENDMyNkMwMENB
MkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIg
LyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLApAQCAtNjkxNyw2ICs2OTIwLDcgQEAKIAkJCQkx
NDE0MkU1MTFCNzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2lu
dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFs
dWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQg
LyogQ2VsbFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFG
OEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlFRTBDMDAxQjRBRkI4
NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhl
YWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNDUsMTUgKzIyNDUsMTUgQEAg
dm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAogICAgIGlmIChDb2RlQmxv
Y2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQogICAgICAgICBv
dGhlckJsb2NrLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIAotICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKG93bmVyRXhlY3V0YWJsZSgpLCBzaXplb2YoQ29kZUJsb2NrKSk7
CisgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZW9mKENvZGVCbG9jaykp
OwogICAgIGlmIChtX2ppdENvZGUpCi0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKG93bmVyRXhlY3V0YWJsZSgpLCBtX2ppdENvZGUtPnNpemUoKSk7CisgICAgICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1faml0Q29kZS0+c2l6ZSgpKTsKICAgICBp
ZiAobV9pbnN0cnVjdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgIC8vIERpdmlkZSBieSByZWZDb3Vu
dCgpIGJlY2F1c2UgbV9pbnN0cnVjdGlvbnMgcG9pbnRzIHRvIHNvbWV0aGluZyB0aGF0IGlzIHNo
YXJlZAogICAgICAgICAvLyBieSBtdWx0aXBsZSBDb2RlQmxvY2tzLCBhbmQgd2Ugb25seSB3YW50
IHRvIGNvdW50IGl0IHRvd2FyZHMgdGhlIGhlYXAgc2l6ZSBvbmNlLgogICAgICAgICAvLyBIYXZp
bmcgZWFjaCBDb2RlQmxvY2sgcmVwb3J0IG9ubHkgaXRzIHByb3BvcnRpb25hbCBzaGFyZSBvZiB0
aGUgc2l6ZSBpcyBvbmUgd2F5CiAgICAgICAgIC8vIG9mIGFjY29tcGxpc2hpbmcgdGhpcy4KLSAg
ICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQob3duZXJFeGVjdXRhYmxlKCks
IG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0
aW9ucy5yZWZDb3VudCgpKTsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQobV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1faW5zdHJ1
Y3Rpb25zLnJlZkNvdW50KCkpOwogICAgIH0KIAogICAgIHZpc2l0b3IuYXBwZW5kKCZtX3VubGlu
a2VkQ29kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDEyICs2OSwxMiBAQCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0
cmFjdEhlYXBSZXBvCiAgICAgUkVMRUFTRV9BU1NFUlQoIShKU0NlbGxfaW5kZXhpbmdUeXBlLm9m
ZnNldCgpICYgKHNpemVvZihpbnQzMl90KSAtIDEpKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoSlND
ZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSArIDEgPT0gSlNDZWxsX3R5cGVJbmZvVHlwZS5vZmZz
ZXQoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSAr
IDIgPT0gSlNDZWxsX3R5cGVJbmZvRmxhZ3Mub2Zmc2V0KCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9nY0RhdGEub2Zmc2V0
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAz
ID09IEpTQ2VsbF9jZWxsU3RhdGUub2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX2luZGV4aW5nVHlw
ZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgSlNDZWxsX3R5cGVJbmZv
VHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgSlNDZWxsX3R5cGVJ
bmZvRmxhZ3MuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwotICAgIEpTQ2VsbF9n
Y0RhdGEuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOworICAgIEpTQ2VsbF9jZWxs
U3RhdGUuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIAogICAgIHJvb3Qu
bV90YmFhTWV0YWRhdGEgPSBtZE5vZGUobV9jb250ZXh0LCBtZFN0cmluZyhtX2NvbnRleHQsIHJv
b3QubV9oZWFwTmFtZSkpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE5MDU2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMiArNTIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmll
d19tb2RlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkpIFwKICAgICBtYWNybyhK
U0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rv
cigpKSBcCisgICAgbWFjcm8oSlNDZWxsX2NlbGxTdGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZz
ZXQoKSkgXAorICAgIG1hY3JvKEpTQ2VsbF9pbmRleGluZ1R5cGUsIEpTQ2VsbDo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSkgXAotICAgIG1hY3JvKEpTQ2VsbF91c2VmdWxCeXRlcywgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0ZsYWdz
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBl
SW5mb1R5cGUsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpIFwKLSAgICBtYWNybyhKU0Nl
bGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSBcCi0gICAgbWFj
cm8oSlNDZWxsX2djRGF0YSwgSlNDZWxsOjpnY0RhdGFPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpT
Q2VsbF91c2VmdWxCeXRlcywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSkgXAogICAgIG1h
Y3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxl
KCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX3Njb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246
Om9mZnNldE9mUmFyZURhdGEoKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MjYwLDkgKzgyNjAsOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9ncmFwaC5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CiAgICAgfQogICAgIAotICAgIExWYWx1ZSBsb2FkTWFya0J5dGUoTFZhbHVlIGJh
c2UpCisgICAgTFZhbHVlIGxvYWRDZWxsU3RhdGUoTFZhbHVlIGJhc2UpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9vdXQubG9hZDgoYmFzZSwgbV9oZWFwcy5KU0NlbGxfZ2NEYXRhKTsKKyAgICAg
ICAgcmV0dXJuIG1fb3V0LmxvYWQ4KGJhc2UsIG1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSk7CiAg
ICAgfQogCiAgICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBiYXNlKQpAQCAtODI3NCw3
ICs4Mjc0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBDaGVjayB0aGUgbWFyayBieXRlLiAK
ICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90WmVybzgobG9hZE1h
cmtCeXRlKGJhc2UpKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNNYXJrZWRBbmRO
b3RSZW1lbWJlcmVkKSk7CisgICAgICAgICAgICBtX291dC5ub3RaZXJvOChsb2FkQ2VsbFN0YXRl
KGJhc2UpKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNNYXJrZWRBbmROb3RSZW1l
bWJlcmVkKSk7CiAKICAgICAgICAgLy8gQXBwZW5kIHRvIHRoZSB3cml0ZSBiYXJyaWVyIGJ1ZmZl
ci4KICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc01hcmtl
ZEFuZE5vdFJlbWVtYmVyZWQsIGJ1ZmZlckhhc1NwYWNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ2VsbFN0YXRlX2gKKyNkZWZpbmUgQ2VsbFN0YXRlX2gKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CisgICAgLy8g
VGhlIG9iamVjdCBpcyBibGFjayBhcyBmYXIgYXMgdGhpcyBHQyBpcyBjb25jZXJuZWQuIFdoZW4g
bm90IGluIEdDLCB0aGlzIGp1c3QgbWVhbnMgdGhhdCBpdCdzIGFuCisgICAgLy8gb2xkIGdlbiBv
YmplY3QuIE5vdGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgYXJyYW5nZSBPbGRCbGFjayB0byBiZSB6
ZXJvLCBzbyB0aGF0IHRoZSBzdG9yZSBiYXJyaWVyIG9uCisgICAgLy8gYSB0YXJnZXQgb2JqZWN0
ICJmcm9tIiBpcyBqdXN0OgorICAgIC8vCisgICAgLy8gaWYgKCFmcm9tLT5jZWxsU3RhdGUoKSkK
KyAgICAvLyAgICAgc2xvd1BhdGgoZnJvbSk7CisgICAgLy8KKyAgICAvLyBUaGVyZSBpcyBhIGJ1
bmNoIG9mIGNvZGUgaW4gdGhlIExMSW50IGFuZCBKSVRzIHRoYXQgcmVseSBvbiB0aGlzIGJlaW5n
IHRoZSBjYXNlLiBZb3UnZCBoYXZlIHRvCisgICAgLy8gY2hhbmdlIGEgbG90IG9mIGNvZGUgaWYg
eW91IGV2ZXIgd2FudGVkIHRoZSBzdG9yZSBiYXJyaWVyIHRvIGJlIGFueXRoaW5nIGJ1dCBhIG5v
bi16ZXJvIGNoZWNrIG9uCisgICAgLy8gY2VsbFN0YXRlLgorICAgIE9sZEJsYWNrID0gMCwKKyAg
ICAKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGluIGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0
aGF0IHRoZSBvYmplY3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCisgICAgTmV3V2hpdGUgPSAx
LAorCisgICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQg
LSBidXQgaXQgZWl0aGVyIGJlbG9uZ3MgdG8gb2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCisgICAg
Ly8gR0MpIG9yIGl0IGlzIGdyZXkgYSBzZWNvbmQgdGltZSBpbiB0aGlzIGN1cnJlbnQgR0MgKGJl
Y2F1c2UgYSBjb25jdXJyZW50IHN0b3JlIGJhcnJpZXIgcmVxdWVzdGVkCisgICAgLy8gcmUtZ3Jl
eWluZykuCisgICAgT2xkR3JleSA9IDIsCisKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBp
LmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGluIHRo
aXMgR0MgdGhhdCB3ZSBhcmUKKyAgICAvLyBnb2luZyB0byBzY2FuIGl0LiBJZiB0aGlzIGlzIGFu
IGVkZW4gR0MsIHRoaXMgYWxzbyBtZWFucyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gZWRlbi4KKyAg
ICBOZXdHcmV5ID0gMworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDZWxs
U3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1Nl
dC5jcHAJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
ZGVCbG9ja1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQg
Q29kZUJsb2NrU2V0OjpyZW1lbWJlckN1cnJlbnRseUV4ZWMKICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwgbV9jdXJyZW50bHlFeGVjdXRpbmcuc2l6ZSgp
LCAiIGNvZGUgYmxvY2tzLlxuIik7CiAgICAgZm9yIChjb25zdCBSZWZQdHI8Q29kZUJsb2NrPiYg
Y29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcpCi0gICAgICAgIGhlYXAtPmFkZFRvUmVt
ZW1iZXJlZFNldChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgaGVhcC0+
d3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwogCiAgICAgLy8gSXQn
cyBzYWZlIHRvIGNsZWFyIHRoZXNlIFJlZlB0ciBzZXRzIGJlY2F1c2Ugd2Ugd29uJ3QgZGVsZXRl
IHRoZSBDb2RlQmxvY2tzCiAgICAgLy8gaW4gdGhlbSB1bnRpbCB0aGUgbmV4dCBHQywgYW5kIHdl
J2xsIHJlY29tcHV0ZSB0aGVtIGF0IHRoYXQgdGltZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkQmxvY2suaAkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTQsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkaWRQcm9tb3RlKCk7CiAKICAgICB1bnNpZ25lZCBsaXZlQnl0
ZXMoKTsKLSAgICBib29sIHNob3VsZFJlcG9ydExpdmVCeXRlcyhMb2NrSG9sZGVyJiwgSlNDZWxs
KiBvd25lcik7CiAgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYsIEpTQ2VsbCos
IENvcHlUb2tlbiwgdW5zaWduZWQpOwogICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVzRHVyaW5nQ29w
eWluZyh1bnNpZ25lZCk7CiAgICAgdm9pZCBkaWRTdXJ2aXZlR0MoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAx
OTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTYgKzMzLDYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAgICAgCi1pbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxkUmVwb3J0TGl2ZUJ5
dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKQotewotICAgIC8vIFdlIHdhbnQgdG8gYWRk
IHRvIGxpdmUgYnl0ZXMgaWYgdGhlIG93bmVyIGlzbid0IHBhcnQgb2YgdGhlIHJlbWVtYmVyZWQg
c2V0IG9yCi0gICAgLy8gaWYgdGhpcyBibG9jayB3YXMgYWxsb2NhdGVkIGR1cmluZyB0aGUgbGFz
dCBjeWNsZS4gCi0gICAgLy8gSWYgd2UgYWx3YXlzIGFkZGVkIGxpdmUgYnl0ZXMgd2Ugd291bGQg
ZG91YmxlIGNvdW50IGZvciBlbGVtZW50cyBpbiB0aGUgcmVtZW1iZXJlZAotICAgIC8vIHNldCBh
Y3Jvc3MgY29sbGVjdGlvbnMuIAotICAgIC8vIElmIHdlIGRpZG4ndCBhbHdheXMgYWRkIGxpdmUg
Ynl0ZXMgdG8gbmV3IGJsb2Nrcywgd2UnZCBnZXQgdG9vIGZldy4KLSAgICByZXR1cm4gIUhlYXA6
OmlzUmVtZW1iZXJlZChvd25lcikgfHwgIW1faXNPbGQ7Ci19Ci0KIGlubGluZSB2b2lkIENvcGll
ZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYsIEpTQ2VsbCogb3duZXIsIENvcHlU
b2tlbiB0b2tlbiwgdW5zaWduZWQgYnl0ZXMpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NMb2dnaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0xvZ2dpbmcuY3BwCShyZXZpc2lvbiAx
OTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0xvZ2dpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBmb3IgKGNvbnN0
IEpTQ2VsbCogY2VsbCA6IG1fc2F2ZWRNYXJrU3RhY2spIHsKICAgICAgICAgICAgIG1fc2xvdFZp
c2l0b3IubWFya1N0YWNrKCkuYXBwZW5kKGNlbGwpOwotICAgICAgICAgICAgY29uc3RfY2FzdDxK
U0NlbGwqPihjZWxsKS0+c2V0UmVtZW1iZXJlZCh0cnVlKTsKKyAgICAgICAgICAgIGNlbGwtPnNl
dENlbGxTdGF0ZShDZWxsU3RhdGU6Ok9sZEdyZXkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTkwNTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Niw3
ICs1OTYsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUsCiAgICAg
Ly8gdGhlIGxpdmVuZXNzIG9mIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgZ3JhcGguCiAgICAgdmlz
aXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwogCi0gICAgY2xlYXJSZW1lbWJlcmVkU2V0
KHJlbWVtYmVyZWRTZXQpOwogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobV9tYXJraW5nTXV0ZXgpOwogICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQg
PSB0cnVlOwpAQCAtODUyLDEzICs4NTEsNiBAQCB2b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMo
SGVhcFJvb3RWaXNpCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmNsZWFyUmVtZW1iZXJlZFNldChW
ZWN0b3I8Y29uc3QgSlNDZWxsKj4mIHJlbWVtYmVyZWRTZXQpCi17Ci0gICAgR0NQSEFTRShDbGVh
clJlbWVtYmVyZWRTZXQpOwotICAgIGZvciAoYXV0byogY2VsbCA6IHJlbWVtYmVyZWRTZXQpCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCktPnNldFJlbWVtYmVyZWQoZmFsc2UpOwot
fQotCiB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpCiB7
CiAgICAgR0NDT1VOVEVSKFZpc2l0ZWRWYWx1ZUNvdW50LCBtX3Nsb3RWaXNpdG9yLnZpc2l0Q291
bnQoKSk7CkBAIC0xMDA4LDkgKzEwMDAsMTMgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRT
ZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9wdGlvbnM6
OmVuYWJsZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBp
ZiAoaXNSZW1lbWJlcmVkKGNlbGwpKQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3RfY2FzdDxK
U0NlbGwqPihjZWxsKS0+c2V0UmVtZW1iZXJlZCh0cnVlKTsKKyAgICBBU1NFUlQoY2VsbC0+Y2Vs
bFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpPbGRCbGFjayk7CisgICAgLy8gSW5kaWNhdGUgdGhhdCB0
aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6Cisg
ICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVyaW5nIGEgY29uY3VycmVudCBjb2xsZWN0aW9u
LgorICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0LgorICAgIC8vICJPbGRHcmV5IiBk
b2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3Vh
bGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCisgICAgLy8gc2FtZS4KKyAgICBjZWxsLT5zZXRD
ZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKICAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRv
TWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHNldE1h
cmtlZChjb25zdCB2b2lkKik7Ci0gICAgc3RhdGljIGJvb2wgaXNSZW1lbWJlcmVkKGNvbnN0IHZv
aWQqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNv
bnN0IEpTQ2VsbCopOwogICAgIHN0YXRpYyBib29sIGlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpOwog
ICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCopOwogICAgIHZvaWQgd3JpdGVCYXJy
aWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwpAQCAtMTY3LDcgKzE2NSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBjYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zOiBDYWxsaW5nIG9ubHkgb25lIG1h
eSB0cmlnZ2VyIGNhdGFzdHJvcGljCiAgICAgLy8gbWVtb3J5IGdyb3d0aC4KICAgICB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7Ci0gICAgdm9pZCByZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQoSlNDZWxsKiwgc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChDZWxsU3RhdGUgY2VsbFN0YXRlQmVmb3JlVmlzaXRpbmcsIHNpemVfdCk7CiAKICAg
ICAvLyBVc2UgdGhpcyBBUEkgdG8gcmVwb3J0IG5vbi1HQyBtZW1vcnkgaWYgeW91IGNhbid0IHVz
ZSB0aGUgYmV0dGVyIEFQSSBhYm92ZS4KICAgICB2b2lkIGRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1l
bW9yeShzaXplX3QpOwpAQCAtMzA2LDcgKzMwNCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0cmFj
ZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKICAgICB2b2lkIGNvbnZlcmdlKCk7CiAg
ICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgY2xl
YXJSZW1lbWJlcmVkU2V0KFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYpOwogICAgIHZvaWQgdXBkYXRl
T2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCByZXNldFZpc2l0b3Jz
KCk7CiAKQEAgLTMyMyw2ICszMjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsRmluYWxpemVycygpOwogICAgIHZvaWQgY2xlYXJVbm1hcmtlZEV4ZWN1dGFibGVz
KCk7CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCopOwogICAgIHZv
aWQgdXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpOwogICAgIHZvaWQgZGlkRmluaXNoQ29sbGVjdGlv
bihkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgcmVzdW1lQ29tcGlsZXJUaHJlYWRzKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9u
IDE5MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTcwLDE0ICs3MCw2IEBAIGlubGluZSBib29sIEhlYXA6OmlzTGl2ZShjb25z
dCB2b2lkKiBjZWwKICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5pc0xp
dmVDZWxsKGNlbGwpOwogfQogCi1pbmxpbmUgYm9vbCBIZWFwOjppc1JlbWVtYmVyZWQoY29uc3Qg
dm9pZCogcHRyKQotewotICAgIGNvbnN0IEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PGNvbnN0
IEpTQ2VsbCo+KHB0cik7Ci0gICAgQVNTRVJUKGNlbGwpOwotICAgIEFTU0VSVCghT3B0aW9uczo6
ZW5hYmxlQ29uY3VycmVudEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIHJl
dHVybiBjZWxsLT5pc1JlbWVtYmVyZWQoKTsKLX0KLQogaW5saW5lIGJvb2wgSGVhcDo6aXNNYXJr
ZWQoY29uc3Qgdm9pZCogY2VsbCkKIHsKICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJsb2NrRm9y
KGNlbGwpLT5pc01hcmtlZChjZWxsKTsKQEAgLTExMywyNSArMTA1LDE4IEBAIGlubGluZSB2b2lk
IEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0MKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7
CiAjZW5kaWYKLSAgICBpZiAoIWZyb20gfHwgIWZyb20tPmlzTWFya2VkKCkpIHsKLSAgICAgICAg
QVNTRVJUKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSk7CisgICAgaWYgKCFmcm9tIHx8IGZyb20t
PmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6T2xkQmxhY2spCiAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKCF0byB8fCB0by0+aXNNYXJrZWQoKSkgewotICAgICAgICBBU1NFUlQoIXRv
IHx8IGlzTWFya2VkKHRvKSk7CisgICAgaWYgKCF0byB8fCB0by0+Y2VsbFN0YXRlKCkgIT0gQ2Vs
bFN0YXRlOjpOZXdXaGl0ZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBhZGRUb1JlbWVt
YmVyZWRTZXQoZnJvbSk7CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqIGZyb20pCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChjb25z
dF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKLSAgICBpZiAoIWZyb20gfHwgIWZyb20tPmlzTWFya2Vk
KCkpIHsKLSAgICAgICAgQVNTRVJUKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSk7CisgICAgaWYg
KCFmcm9tIHx8IGZyb20tPmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6T2xkQmxhY2spCiAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKGlzTWFya2VkKGZyb20pKTsKICAgICBhZGRU
b1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKQEAgLTE0MSwxMCArMTI2LDEwIEBAIGlubGluZSB2
b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2MKICAgICAgICAgcmVwb3J0RXh0cmFNZW1v
cnlBbGxvY2F0ZWRTbG93Q2FzZShzaXplKTsKIH0KIAotaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKEpTQ2VsbCogb3duZXIsIHNpemVfdCBzaXplKQoraW5saW5lIHZv
aWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBkYXRhQmVmb3JlVmlz
aXRpbmcsIHNpemVfdCBzaXplKQogewogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNv
dW50IHRoZSBleHRyYSBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVj
dGlvbnMuCi0gICAgaWYgKG9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbiAm
JiBIZWFwOjppc1JlbWVtYmVyZWQob3duZXIpKQorICAgIGlmIChvcGVyYXRpb25JblByb2dyZXNz
KCkgPT0gRWRlbkNvbGxlY3Rpb24gJiYgZGF0YUJlZm9yZVZpc2l0aW5nID09IENlbGxTdGF0ZTo6
T2xkR3JleSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90KiBjb3VudGVyID0gJm1fZXh0
cmFNZW1vcnlTaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDExIEBAIHZvaWQg
U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWEKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGNlbGwtPnNldE1hcmtlZCgpOworICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG9i
amVjdCBpcyBncmV5IGFuZCB0aGF0OgorICAgIC8vIEluIGNhc2Ugb2YgY29uY3VycmVudCBHQzog
aXQncyB0aGUgZmlyc3QgdGltZSBpdCBpcyBncmV5IGluIHRoaXMgR0MgY3ljbGUuCisgICAgLy8g
SW4gY2FzZSBvZiBlZGVuIGNvbGxlY3Rpb246IGl0J3MgYSBuZXcgb2JqZWN0IHRoYXQgYmVjYW1l
IGdyZXkgcmF0aGVyIHRoYW4gYW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0LgorICAgIGNlbGwtPnNl
dENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworCiAgICAgYXBwZW5kVG9NYXJrU3RhY2so
Y2VsbCk7CiB9CiAKQEAgLTE1MywyNiArMTU3LDI5IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFRvTWFya1N0YWNrKEpTQ2UKICAgICBtX3N0YWNrLmFwcGVuZChjZWxsKTsKIH0KIAotQUxXQVlT
X0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKICAg
ICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOworCisgICAgbV9kYXRhQmVmb3JlVmlzaXRp
bmcgPSBjZWxsLT5jZWxsU3RhdGUoKTsKKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRl
OjpPbGRCbGFjayk7CiAgICAgCiAgICAgaWYgKGlzSlNTdHJpbmcoY2VsbCkpIHsKLSAgICAgICAg
SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRv
cik7CisgICAgICAgIEpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4o
Y2VsbCksICp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChpc0pTRmlu
YWxPYmplY3QoY2VsbCkpIHsKLSAgICAgICAgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihj
b25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKKyAgICAgICAgSlNGaW5hbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCAqdGhpcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoaXNKU0FycmF5KGNlbGwpKSB7Ci0gICAgICAg
IEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRv
cik7CisgICAgICAgIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihj
ZWxsKSwgKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2VsbC0+bWV0aG9k
VGFibGUoKS0+dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9y
KTsKKyAgICBjZWxsLT5tZXRob2RUYWJsZSgpLT52aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlND
ZWxsKj4oY2VsbCksICp0aGlzKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25Q
YXJhbGxlbCgpCkBAIC0yMDgsNyArMjE1LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQog
ICAgIHdoaWxlICghbV9zdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9zdGFjay5yZWZpbGwo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVt
YmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYg
Y291bnRkb3duLS07KQotICAgICAgICAgICAgdmlzaXRDaGlsZHJlbigqdGhpcywgbV9zdGFjay5y
ZW1vdmVMYXN0KCkpOworICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX3N0YWNrLnJlbW92ZUxh
c3QoKSk7CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9CiAgICAgCkBAIC0z
NjQsNyArMzcxLDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlMYXRlcihKU0NlbGwqIG93bmUK
ICAgICBBU1NFUlQoaGVhcCgpLT5tX3N0b3JhZ2VTcGFjZS5jb250YWlucyhibG9jaykpOwogCiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoJmJsb2NrLT53b3JrTGlzdExvY2soKSk7Ci0gICAgaWYgKGhl
YXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uIHx8IGJsb2NrLT5z
aG91bGRSZXBvcnRMaXZlQnl0ZXMobG9ja2VyLCBvd25lcikpIHsKKyAgICAvLyBXZSBhbHdheXMg
cmVwb3J0IGxpdmUgYnl0ZXMsIGV4Y2VwdCBpZiBkdXJpbmcgYW4gZWRlbiBjb2xsZWN0aW9uIHdl
IHNlZSBhbiBvbGQgb2JqZWN0IHBvaW50aW5nIHRvIGFuCisgICAgLy8gb2xkIGJhY2tpbmcgc3Rv
cmUgYW5kIHRoZSBvbGQgb2JqZWN0IGlzIGJlaW5nIG1hcmtlZCBiZWNhdXNlIG9mIHRoZSByZW1l
bWJlcmVkIHNldC4gTm90ZSB0aGF0IGlmIHdlCisgICAgLy8gYXNrIHRoZSBvYmplY3QgaXRzZWxm
LCBpdCB3aWxsIGFsd2F5cyB0ZWxsIHVzIHRoYXQgaXQncyBhbiBvbGQgYmxhY2sgb2JqZWN0IC0g
YmVjYXVzZSBldmVuIGR1cmluZyBhbgorICAgIC8vIGVkZW4gY29sbGVjdGlvbiB3ZSBoYXZlIGFs
cmVhZHkgaW5kaWNhdGVkIHRoYXQgdGhlIG9iamVjdCBpcyBvbGQuIFRoYXQncyB3aHkgd2UgdXNl
IHRoZQorICAgIC8vIFNsb3RWaXNpdG9yJ3MgY2FjaGUgb2YgdGhlIG9iamVjdCdzIG9sZCBzdGF0
ZS4KKyAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rp
b24KKyAgICAgICAgfHwgIWJsb2NrLT5pc09sZCgpCisgICAgICAgIHx8IG1fY3VycmVudE9iamVj
dENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nICE9IENlbGxTdGF0ZTo6T2xkR3JleSkgewogICAgICAg
ICBtX2J5dGVzQ29waWVkICs9IGJ5dGVzOwogICAgICAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVz
KGxvY2tlciwgb3duZXIsIHRva2VuLCBieXRlcyk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU2xvdFZpc2l0b3JfaAogI2Rl
ZmluZSBTbG90VmlzaXRvcl9oCiAKKyNpbmNsdWRlICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJD
b3B5VG9rZW4uaCIKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFj
ay5oIgpAQCAtMTAzLDcgKzEwNCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29weUxhdGVyKEpT
Q2VsbCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCi0gICAgdm9pZCByZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQoSlNDZWxsKiBvd25lciwgc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOwogICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKik7CiAgICAgdm9pZCBhZGRVbmNv
bmRpdGlvbmFsRmluYWxpemVyKFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIqKTsKQEAgLTEyMSw2ICsx
MjIsOCBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVS
b290cygpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiAgICAgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oY29uc3QgSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7
CiAKQEAgLTEzNCw2ICsxMzcsOCBAQCBwcml2YXRlOgogICAgIAogICAgIEhlYXAmIG1faGVhcDsK
IAorICAgIENlbGxTdGF0ZSBtX2N1cnJlbnRPYmplY3RDZWxsU3RhdGVCZWZvcmVWaXNpdGluZyB7
IENlbGxTdGF0ZTo6TmV3V2hpdGUgfTsKKwogcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQK
ICAgICBib29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDE5MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5Miw5IEBAIGlubGluZSB2b2lkIFNsb3RW
aXNpdG9yOjphZGRVbmNvbmRpdGlvbmEKICAgICBtX2hlYXAubV91bmNvbmRpdGlvbmFsRmluYWxp
emVycy5hZGRUaHJlYWRTYWZlKHVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwogfQogCi1pbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKEpTQ2VsbCogb3duZXIs
IHNpemVfdCBzaXplKQoraW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZChvd25lciwgc2l6ZSk7CisgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
bV9jdXJyZW50T2JqZWN0Q2VsbFN0YXRlQmVmb3JlVmlzaXRpbmcsIHNpemUpOwogfQogCiBpbmxp
bmUgSGVhcCogU2xvdFZpc2l0b3I6OmhlYXAoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTY1LDEyICsxMTY1LDEyIEBAIHB1YmxpYzoKIAogICAgIEp1bXAganVtcElmSXNSZW1lbWJl
cmVkT3JJbkVkZW4oR1BSUmVnIGNlbGwpCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDgoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGws
IEpTQ2VsbDo6Z2NEYXRhT2Zmc2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsLCBKU0Nl
bGw6OmNlbGxTdGF0ZU9mZnNldCgpKSk7CiAgICAgfQogCiAgICAgSnVtcCBqdW1wSWZJc1JlbWVt
YmVyZWRPckluRWRlbihKU0NlbGwqIGNlbGwpCiAgICAgewotICAgICAgICB1aW50OF90KiBhZGRy
ZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY2VsbCkgKyBKU0NlbGw6OmdjRGF0YU9m
ZnNldCgpOworICAgICAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oY2VsbCkgKyBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpOwogICAgICAgICByZXR1cm4g
YnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpBYnNv
bHV0ZUFkZHJlc3MoYWRkcmVzcykpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDk3LDggKzQ5Nyw4IEBA
IG1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZChjZWxsT3BlcmFuZCkKICAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oY2VsbE9wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQ
YXlsb2FkKHQxLCBDZWxsVGFnLCB0MiwgLndyaXRlQmFycmllckRvbmUpCiAgICAgc2tpcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4odDIsIHQxLCB0MywgCi0gICAgICAgIG1hY3JvKGdjRGF0YSkKLSAg
ICAgICAgICAgIGJ0Ym56IGdjRGF0YSwgLndyaXRlQmFycmllckRvbmUKKyAgICAgICAgbWFjcm8o
Y2VsbFN0YXRlKQorICAgICAgICAgICAgYnRibnogY2VsbFN0YXRlLCAud3JpdGVCYXJyaWVyRG9u
ZQogICAgICAgICAgICAgcHVzaCBjZnIsIFBDCiAgICAgICAgICAgICAjIFdlIG1ha2UgdHdvIGV4
dHJhIHNsb3RzIGJlY2F1c2UgY0NhbGwyIHdpbGwgcG9rZS4KICAgICAgICAgICAgIHN1YnAgOCwg
c3AKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAt
NDAxLDggKzQwMSw4IEBAIG1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZChjZWxsT3BlcmFuZCkK
ICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oY2VsbE9wZXJhbmQsIHQxKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGVDZWxsKHQxLCB0MiwgLndyaXRlQmFycmllckRvbmUpCiAgICAgc2tpcElm
SXNSZW1lbWJlcmVkT3JJbkVkZW4odDIsIHQxLCB0MywgCi0gICAgICAgIG1hY3JvKGdjRGF0YSkK
LSAgICAgICAgICAgIGJ0Ym56IGdjRGF0YSwgLndyaXRlQmFycmllckRvbmUKKyAgICAgICAgbWFj
cm8oY2VsbFN0YXRlKQorICAgICAgICAgICAgYnRibnogY2VsbFN0YXRlLCAud3JpdGVCYXJyaWVy
RG9uZQogICAgICAgICAgICAgcHVzaCBQQiwgUEMKICAgICAgICAgICAgIG1vdmUgdDIsIGExICMg
dDIgY2FuIGJlIGEwIChub3Qgb24gNjQgYml0cywgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnkp
CiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE5MDU2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
d29ya2luZyBjb3B5KQpAQCAtNzk5LDcgKzc5OSw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxs
QW5kSW5kZXhpbmdUeXBlLCAKIGVuZAogCiBtYWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRl
bihjZWxsLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGNvbnRpbnVhdGlvbikKLSAgICBsb2FkYiBKU0Nl
bGw6Om1fZ2NEYXRhW2NlbGxdLCBzY3JhdGNoMQorICAgIGxvYWRiIEpTQ2VsbDo6bV9jZWxsU3Rh
dGVbY2VsbF0sIHNjcmF0Y2gxCiAgICAgY29udGludWF0aW9uKHNjcmF0Y2gxKQogZW5kCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxOTA1NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNiAr
MjQsNyBAQAogI2RlZmluZSBKU0NlbGxfaAogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKKyNpbmNs
dWRlICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJDb25zdHJ1Y3REYXRhLmgiCiAjaW5jbHVkZSAi
RW51bWVyYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtMTU0LDM2ICsxNTUsMTIg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNhblVzZUZhc3RHZXRPd25Qcm9wZXJ0eShjb25z
dCBTdHJ1Y3R1cmUmKTsKICAgICBKU1ZhbHVlIGZhc3RHZXRPd25Qcm9wZXJ0eShWTSYsIFN0cnVj
dHVyZSYsIFByb3BlcnR5TmFtZSk7CiAKLSAgICBlbnVtIEdDRGF0YSA6IHVpbnQ4X3QgewotICAg
ICAgICBNYXJrZWQgPSAwLCAvLyBUaGUgb2JqZWN0IGhhcyBzdXJ2aXZlZCBhIEdDIGFuZCBpcyBp
biB0aGUgb2xkIGdlbi4KLSAgICAgICAgTm90TWFya2VkID0gMSwgLy8gVGhlIG9iamVjdCBpcyBu
ZXcgYW5kIGluIHRoZSBlZGVuIGdlbi4KLSAgICAgICAgTWFya2VkQW5kUmVtZW1iZXJlZCA9IDIs
IC8vIFRoZSBvYmplY3QgaXMgaW4gdGhlIEdDJ3MgcmVtZW1iZXJlZCBzZXQuCi0KLSAgICAgICAg
Ly8gVGhlIG9iamVjdCBiZWluZyBpbiB0aGUgR0MncyByZW1lbWJlcmVkIHNldCBpbXBsaWVzIHRo
YXQgaXQgaXMgYWxzbwotICAgICAgICAvLyBNYXJrZWQuIFRoaXMgaXMgYmVjYXVzZSBvYmplY3Rz
IGFyZSBvbmx5IGFkZGVkIHRvIHRoZSByZW1lbWJlcmVkIHNldHMKLSAgICAgICAgLy8gYnkgd3Jp
dGUgYmFycmllcnMsIGFuZCB3cml0ZSBiYXJyaWVycyBhcmUgb25seSBpbnRlcmVzdGVkIGluIG9s
ZCBnZW4KLSAgICAgICAgLy8gb2JqZWN0cyB0aGF0IHBvaW50IHRvIHBvdGVudGlhbCBlZGVuIGdl
biBvYmplY3RzLgotICAgIH07Ci0KLSAgICB2b2lkIHNldE1hcmtlZCgpIHsgbV9nY0RhdGEgPSBN
YXJrZWQ7IH0KLSAgICB2b2lkIHNldFJlbWVtYmVyZWQoYm9vbCByZW1lbWJlcmVkKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fZ2NEYXRhID09IChyZW1lbWJlcmVkID8gTWFya2VkIDogTWFya2Vk
QW5kUmVtZW1iZXJlZCkpOwotICAgICAgICBtX2djRGF0YSA9IHJlbWVtYmVyZWQgPyBNYXJrZWRB
bmRSZW1lbWJlcmVkIDogTWFya2VkOyAKLSAgICB9Ci0gICAgYm9vbCBpc01hcmtlZCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKG1fZ2NEYXRhKSB7Ci0gICAgICAgIGNhc2UgTWFya2Vk
OgotICAgICAgICBjYXNlIE1hcmtlZEFuZFJlbWVtYmVyZWQ6Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgY2FzZSBOb3RNYXJrZWQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBib29sIGlzUmVtZW1iZXJlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZ2NEYXRhID09IE1hcmtlZEFuZFJlbWVtYmVyZWQ7IH0KKyAgICAvLyBUaGUgcmVj
b21tZW5kZWQgaWRpb20gZm9yIHVzaW5nIGNlbGxTdGF0ZSgpIGlzIHRvIHN3aXRjaCBvbiBpdCBv
ciBwZXJmb3JtIGFuID09IGNvbXBhcmlzb24gb24gaXQKKyAgICAvLyBkaXJlY3RseS4gV2UgZGVs
aWJlcmF0ZWx5IGF2b2lkIGhlbHBlcnMgZm9yIHRoaXMsIGJlY2F1c2Ugd2Ugd2FudCB0cmFuc3Bh
cmVuY3kgYWJvdXQgaG93IHRoZSB2YXJpb3VzCisgICAgLy8gQ2VsbFN0YXRlIHZhbHVlcyBpbmZs
dWVuY2VzIG91ciB2YXJpb3VzIGFsZ29yaXRobXMuIAorICAgIENlbGxTdGF0ZSBjZWxsU3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX2NlbGxTdGF0ZTsgfQorICAgIAorICAgIHZvaWQgc2V0Q2VsbFN0
YXRlKENlbGxTdGF0ZSBkYXRhKSBjb25zdCB7IGNvbnN0X2Nhc3Q8SlNDZWxsKj4odGhpcyktPm1f
Y2VsbFN0YXRlID0gZGF0YTsgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9m
ZnNldCgpCiAgICAgewpAQCAtMjA1LDkgKzE4Miw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgcHRyZGlmZl90IGdjRGF0YU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBjZWxs
U3RhdGVPZmZzZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Nl
bGwsIG1fZ2NEYXRhKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1f
Y2VsbFN0YXRlKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlw
ZWRBcnJheVN0b3JhZ2VUeXBlID0gTm90VHlwZWRBcnJheTsKQEAgLTI0MSw3ICsyMTgsNyBAQCBw
cml2YXRlOgogICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKICAgICBKU1R5cGUgbV90
eXBlOwogICAgIFR5cGVJbmZvOjpJbmxpbmVUeXBlRmxhZ3MgbV9mbGFnczsKLSAgICB1aW50OF90
IG1fZ2NEYXRhOworICAgIENlbGxTdGF0ZSBtX2NlbGxTdGF0ZTsKIH07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MSw3ICs0MSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIEpTQ2VsbDo6
SlNDZWxsKENyZWF0aW5nRWFybHlDZWxsVGFnKQotICAgIDogbV9nY0RhdGEoTm90TWFya2VkKQor
ICAgIDogbV9jZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKIHsKICAgICBBU1NFUlQoIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7CiB9CkBAIC01MSw3ICs1MSw3IEBAIGlubGluZSBKU0NlbGw6
OkpTQ2VsbChWTSYsIFN0cnVjdHVyZSogc3QKICAgICAsIG1faW5kZXhpbmdUeXBlKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpCiAgICAgLCBtX3R5cGUoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5
cGUoKSkKICAgICAsIG1fZmxhZ3Moc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFn
cygpKQotICAgICwgbV9nY0RhdGEoTm90TWFya2VkKQorICAgICwgbV9jZWxsU3RhdGUoQ2VsbFN0
YXRlOjpOZXdXaGl0ZSkKIHsKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMTkwNTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE92ZXJz
aXplVHlwZWRBcnJheTogewotICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZCh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgdmlzaXRvci5y
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3ICsyMTks
NyBAQCB2b2lkIEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogCiB7CiAgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgCisKICAgICBpZiAo
dG9rZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQogICAgICAgICByZXR1cm47CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAx
OTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDcsIDIwMDgsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBKU1N0cmluZzo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIGVsc2UgewogICAgICAgICBTdHJpbmdJbXBsKiBp
bXBsID0gdGhpc09iamVjdC0+bV92YWx1ZS5pbXBsKCk7CiAgICAgICAgIEFTU0VSVChpbXBsKTsK
LSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdCwgaW1w
bC0+Y29zdER1cmluZ0dDKCkpOworICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZChpbXBsLT5jb3N0RHVyaW5nR0MoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkocmV2aXNpb24gMTkw
NTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlSURCbG9iX2gK
ICNkZWZpbmUgU3RydWN0dXJlSURCbG9iX2gKIAorI2luY2x1ZGUgIkNlbGxTdGF0ZS5oIgogI2lu
Y2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCkBAIC00Niw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
dS5maWVsZHMuaW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOwogICAgICAgICB1LmZpZWxkcy50
eXBlID0gdHlwZUluZm8udHlwZSgpOwogICAgICAgICB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3Mg
PSB0eXBlSW5mby5pbmxpbmVUeXBlRmxhZ3MoKTsKLSAgICAgICAgdS5maWVsZHMuZGVmYXVsdEdD
RGF0YSA9IEpTQ2VsbDo6Tm90TWFya2VkOworICAgICAgICB1LmZpZWxkcy5kZWZhdWx0Q2VsbFN0
YXRlID0gQ2VsbFN0YXRlOjpOZXdXaGl0ZTsKICAgICB9CiAKICAgICB2b2lkIG9wZXJhdG9yPShj
b25zdCBTdHJ1Y3R1cmVJREJsb2ImIG90aGVyKSB7IHUuZG91YmxlV29yZCA9IG90aGVyLnUuZG91
YmxlV29yZDsgfQpAQCAtNzksNyArODAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZTsKICAgICAgICAgICAgIEpTVHlwZSB0eXBlOwogICAgICAgICAg
ICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3M7Ci0gICAgICAgICAg
ICBKU0NlbGw6OkdDRGF0YSBkZWZhdWx0R0NEYXRhOworICAgICAgICAgICAgQ2VsbFN0YXRlIGRl
ZmF1bHRDZWxsU3RhdGU7CiAgICAgICAgIH0gZmllbGRzOwogICAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgICAgaW50MzJfdCB3b3JkMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwRGF0YS5jcHAJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyAr
NjQsNyBAQCB2b2lkIFdlYWtNYXBEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgLy8g
Um91Z2ggYXBwcm94aW1hdGlvbiBvZiB0aGUgZXh0ZXJuYWwgc3RvcmFnZSBuZWVkZWQgZm9yIHRo
ZSBoYXNodGFibGUuCiAgICAgLy8gVGhpcyBpc24ndCBleGFjdCwgYnV0IGl0IGlzIGNsb3NlIGVu
b3VnaCwgYW5kIHByb3BvcnRpb25hbCB0byB0aGUgYWN0dWFsCiAgICAgLy8gZXh0ZXJuYWwgbWVy
bW9yeSB1c2FnZS4KLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2Jq
LCB0aGlzT2JqLT5tX21hcC5jYXBhY2l0eSgpICogKHNpemVvZihKU09iamVjdCopICsgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZCh0aGlzT2JqLT5tX21hcC5jYXBhY2l0eSgpICogKHNpemVvZihKU09iamVjdCopICsg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIH0KIAogdm9pZCBXZWFrTWFwRGF0YTo6
c2V0KFZNJiB2bSwgSlNPYmplY3QqIGtleSwgSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYmFzaWMtZWRlbi1nYy10ZXN0LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYmFzaWMtZWRlbi1nYy10
ZXN0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9iYXNpYy1lZGVuLWdjLXRlc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACit2
YXIgbyA9IHtmOjQyfTsKK2VkZW5HQygpOwordmFyIHAgPSB7Zjo0Mn07CitlZGVuR0MoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTEwLTAzICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgYW4gb2JqZWN0J3MgbWFya2lu
ZyBzdGF0ZSB0byB0cmFjayBUaGUgVGhyZWUgQ29sb3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk2NTQKKworICAgICAgICBSZXZpZXdlZCBieSBH
ZW9mZnJleSBHYXJlbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBuZXcgYmVo
YXZpb3IuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToK
KyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorCiAyMDE1LTEwLTA1ICBNeWxlcyBD
LiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5wcmVmaXggLXdl
YmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxOTA1NjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29y
a2luZyBjb3B5KQpAQCAtMjk4OSw3ICsyOTg5LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2JqZWN0
LT52aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2aXNpdG9yKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbU1hcmtGdW5jdGlvbiJ9OwogICAgICAgICBpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcG9ydEV4dHJhTWVtb3J5Q29zdCJ9
KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2aXNpdG9yLnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZChjZWxsLCB0aGlzT2JqZWN0LT5pbXBsKCkubWVtb3J5Q29zdCgpKTtc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdmlzaXRvci5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+aW1wbCgpLm1lbW9yeUNvc3QoKSk7XG4iKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoJG51bUNhY2hlZEF0dHJpYnV0ZXMgPiAwKSB7CiAgICAg
ICAgICAgICBmb3JlYWNoIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262451</attachid>
            <date>2015-10-05 11:29:09 -0700</date>
            <delta_ts>2015-10-05 11:29:09 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56814</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyMSBA
QAorMjAxNS0xMC0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFsbG93IGFuIG9iamVjdCdzIG1hcmtpbmcgc3RhdGUgdG8gdHJhY2sgVGhlIFRocmVlIENvbG9y
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NjU0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgSSB3YW50
IHRvIG1ha2UgR0MgbWFya2luZyBjb25jdXJyZW50IChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0OTQzMikuCisgICAgICAgIENvbmN1cnJlbnQgR0MgcmVxdWly
ZSBiYXJyaWVycyB0byBiZSBleGVjdXRlZCBkdXJpbmcgY2VydGFpbiBoZWFwIG9wZXJhdGlvbnMu
IFdlIGFscmVhZHkgaGF2ZSBhCisgICAgICAgIGdlbmVyYXRpb25hbCBHQy4gR2VuZXJhdGlvbmFs
IEdDcyBhbHNvIG5lZWQgYmFycmllcnMsIGFuZCB3ZSBhbHJlYWR5IGhhdmUgdGhvc2UuIFRoZSBn
ZW5lcmF0aW9uYWwKKyAgICAgICAgR0MgYmFycmllciB0aGF0IHdlIHVzZSBpcyB0aGUgInN0aWNr
eSBtYXJrIGJpdCIgYmFycmllci4gT3JkaW5hcmlseSwgbWFyayBiaXRzIGdldCByZXNldCBhZnRl
ciBhCisgICAgICAgIGNvbGxlY3Rpb24uIEluIG91ciBjb2xsZWN0b3IsIHRoZXJlIGlzIGEgc2Vj
b25kYXJ5IG1hcmsgYml0IHRoYXQgInN0aWNrcyIgLSBpLmUuIGl0IGRvZXMgbm90IGdldAorICAg
ICAgICByZXNldC4gSWYgdGhlIHN0aWNreSBtYXJrIGJpdCBpcyBzZXQgaW4gYmV0d2VlbiB0d28g
Y29sbGVjdGlvbnMsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4KKyAgICAgICAg
b2xkIHNwYWNlLiBUaGlzIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gcHV0IHRo
aW5ncyBpbnRvIHJlbWVtYmVyZWQgc2V0cy4gQWRkaXRpb25hbGx5LAorICAgICAgICB0aGUgc3Rp
Y2t5IG1hcmsgYml0IGlzIGFjdHVhbGx5IGEgdHJpLXN0YXRlIHRoYXQgY2FuIGFsc28gdGVsbCB1
cyBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIHBsYWNlZCBvbgorICAgICAgICBhIHJlbWVtYmVyZWQg
c2V0LgorCisgICAgICAgIFRoaXMgaXMgYXdmdWxseSBzaW1pbGFyIHRvIHdoYXQgeW91IHdhbnQg
aW4gYSBjb25jdXJyZW50IEdDLiBDb25jdXJyZW50IEdDcyB0eXBpY2FsbHkgd2FudCB3cml0ZXMK
KyAgICAgICAgdG8gdGhlIGhlYXAgdGhhdCBjaGFuZ2UgdGhlIG9iamVjdCBncmFwaCB0byBkbyBk
aWZmZXJlbnQgdGhpbmdzIGRlcGVuZGluZyBvbiBhbiBvYmplY3QncyBtYXJraW5nCisgICAgICAg
IHN0YXRlLCB3aGljaCBpcyB1c3VhbGx5IHJlZmVycmVkIHRvIGFzIGl0cyBjb2xvci4gV2hpdGUg
bWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBuZXZlciBiZWVuIHNlZW4KKyAgICAgICAgYnkgdGhl
IGNvbGxlY3Rvci4gQWxsIHdoaXRlIG9iamVjdHMgYXJlIHByZXN1bWVkIGRlYWQgYXQgdGhlIGZs
aXAuIEdyZXkgb2JqZWN0cyBhcmUgdGhvc2UgdGhhdCBhcmUKKyAgICAgICAga25vd24gdG8gdGhl
IGNvbGxlY3RvciBidXQgaGF2ZSBub3QgYmVlbiBzY2FubmVkLiBCbGFjayBvYmplY3RzIGFyZSB0
aG9zZSB0aGF0IGhhdmUgYmVlbiBzY2FubmVkLAorICAgICAgICBhbmQgd2lsbCBub3QgYmUgc2Nh
bm5lZCBhZ2Fpbi4gV2hpdGUgaXMgZXhhY3RseSBqdXN0ICJub3QgYmVpbmcgbWFya2VkIiwgYW5k
IGJvdGggZ3JleSBhbmQgYmxhY2sKKyAgICAgICAgbWVhbiAibWFya2VkIiAtIHdpdGggImJsYWNr
IiBtZWFuaW5nICJtYXJrZWQgYnV0IG5vdCBvbiBhbnkgd29ya2xpc3QiLiBUaGF0J3MgcXVpdGUg
YSBiaXQgbGlrZSB0aGUKKyAgICAgICAgY3VycmVudCAiTWFya2VkIiBhbmQgIk1hcmtlZEFuZFJl
bWVtYmVyZWQiIHN0YXRlcyB0aGF0IHdlIGhhdmUgZm9yIGdlbmVyYXRpb25hbCBHQy4KKyAgICAg
ICAgIk1hcmtlZEFuZFJlbWVtYmVyZWQiIGlzIGEgbG90IGxpa2UgImdyZXkiLCBhbmQgIk1hcmtl
ZCIgaXMgYSBsb3QgbGlrZSAiYmxhY2siLgorCisgICAgICAgIEkgd2FudCB0byBtYWtlIGEgY29u
Y3VycmVudCBHQyB0aGF0IHVuaWZpZXMgdGhlIGdlbmVyYXRpb25hbCBhbmQgY29uY3VycmVudCBi
YXJyaWVycyBpbnRvIGEgc2luZ2xlCisgICAgICAgIGZhc3QgcGF0aCBjaGVjay4gRXZlbiBiZXR0
ZXIgaWYgdGhlIHR3byBiYXJyaWVycyBhcmUgZW50aXJlbHkgaWRlbnRpY2FsLiBZb3UgY2FuIGRv
IHRoaXMgdXNpbmcKKyAgICAgICAgUGlyaW5lbidzIHRlY2huaXF1ZSAjMiBbMV0sIG9yaWdpbmFs
bHkgZHVlIHRvIEd1eSBTdGVlbGUgWzJdOiB3aGVuIGRvaW5nIG8uZj12IHdoZXJlIG8gaXMgYmxh
Y2sgYW5kCisgICAgICAgIHYgaXMgd2hpdGUsIHR1cm4gbyBncmV5IGFnYWluLiBUaGlzIGlzIGxp
a2UgcmVtZW1iZXJpbmcgYW4gb2JqZWN0LCBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgZ2VuIEdDCisg
ICAgICAgICJyZW1lbWJlcmVzIiBvIHdoZW4gbyBpcyBvbGQgYW5kIHYgaXMgbmV3LiBJdCByZW1l
bWJlcnMgb2JqZWN0cyBieSBwdXR0aW5nIHRoZW0gb24gdGhlIG1hcmsgc3RhY2ssCisgICAgICAg
IHNldHRpbmcgdGhlIGdlbmVyYXRpb25hbCBzdGF0ZSB0byBNYXJrZWRBbmRSZW1lbWJlcmVkLCBh
bmQgZG9pbmcgbm90aGluZyB0byB0aGUgcHJpbWFyeSBtYXJrIGJpdC4KKworICAgICAgICBUaGlz
IG1ha2VzIG91ciBjb25jdXJyZW50IEdDIGFwcHJvYWNoIHByZXR0eSBvYnZpb3VzLiBXZSB3YW50
IHRvIHVzZSBvbmUgYmFycmllciBmb3IgY29uY3VycmVudCBhbmQKKyAgICAgICAgZ2VuZXJhdGlv
bmFsLCBhbmQgd2Ugd2FudCB0byBiYXNpY2FsbHkga2VlcCBvdXIgY3VycmVudCBiYXJyaWVycyB1
bmNoYW5nZWQuIFRoZSBvbmx5IHRoaW5ncyBtaXNzaW5nCisgICAgICAgIGFyZSBqdXN0IHNvbWUg
c21hbGwgY2hhbmdlcyB0byBhbGxvdyB0aGUgY29uY3VycmVudCBHQyB0byBrbm93IHByZWNpc2Vs
eSB3aGVuIGFuIG9iamVjdCBpcyBibGFjaywKKyAgICAgICAgYW5kIHRvIGtub3cgZHVyaW5nIG9i
amVjdCB2aXNpdGluZyBpZiB3ZSBhcmUgdmlzaXRpbmcgdGhlIG9iamVjdCBmb3IgdGhlIGZpcnN0
IHRpbWUgZHVyaW5nIGEKKyAgICAgICAgY29sbGVjdGlvbiBvciBhIHN1YnNlcXVlbnQgdGltZSBk
dWUgdG8gYmFycmllciByZS1ncmV5aW5nIChjb25jdXJyZW50IEdDKSBvciBiYXJyaWVyIHJlbWVt
YmVyaW5nCisgICAgICAgIChnZW5lcmF0aW9uYWwgR0MpLiBTbywgdGhpcyBwYXRjaCBkb2VzIHRo
ZSBmb2xsb3dpbmc6CisKKyAgICAgICAgLSBDaGFuZ2VzIHRoZSB0ZXJtaW5vbG9neSB1c2VkIGZv
ciB0aGUgZ2NEYXRhIGhlYWRlciBieXRlIGluIEpTQ2VsbC4gVGhpcyBjaGFuZ2VzIHRoZSBuYW1l
IG9mIHRoaXMKKyAgICAgICAgICB0byBjZWxsU3RhdGUsIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IGVu
dW1lcmF0aW9uIGNhbGxlZCBDZWxsU3RhdGUuIFRoaXMgbmV3IGVudW1lcmF0aW9uIGJlaGF2ZXMg
YQorICAgICAgICAgIGxvdCBsaWtlIHRoZSBvbGQgR0NEYXRhIGRpZC4gSXQgaGFzIHRoZSBmb2xs
b3dpbmcgbWVtYmVycywgd2l0aCB0aGUgZm9sbG93aW5nIGNvcnJlc3BvbmRlbmNlIHRvCisgICAg
ICAgICAgdGhlIG9sZCBHQ0RhdGE6CisKKyAgICAgICAgICBPbGRCbGFjazogdGhpcyBpcyBsaWtl
IE1hcmtlZCwgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgd2UgZW5zdXJlIHRoYXQgYW4gb2JqZWN0
IGJlY29tZXMgT2xkQmxhY2sKKyAgICAgICAgICAgICAgYXMgc29vbiBhcyB0aGUgb2JqZWN0IHN0
YXJ0cyB0byBiZSBzY2FubmVkLiBQcmV2aW91c2x5LCBhbiBvYmplY3QgbWlnaHQgYmUKKyAgICAg
ICAgICAgICAgTWFya2VkQW5kUmVtZW1iZXJlZCBkdXJpbmcgc2Nhbm5pbmcgYW5kIHdlJ2QgdHVy
biBhbGwgTWFya2VkQW5kUmVtZW1iZXJlZCBvYmplY3RzIGludG8gTWFya2VkCisgICAgICAgICAg
ICAgIG9iamVjdHMgZHVyaW5nIGEgcG9zdC1wcm9jZXNzaW5nIHN0ZXAgYXQgdGhlIGVuZCBvZiBH
Qy4gVGhpcyBwYXRjaCBnZXRzIHJpZCBvZiB0aGF0CisgICAgICAgICAgICAgIHBvc3QtcHJvY2Vz
c2luZy4gVGhlIGFjdCBvZiB2aXNpdGluZyBhbiBvYmplY3QgdW5jb25kaXRpb25hbGx5IG1ha2Vz
IGl0IE9sZEJsYWNrLiBOb3RlIHRoYXQKKyAgICAgICAgICAgICAgb3VyIGRlZmluaXRpb24gb2Yg
ImJsYWNrIiBpcyBub3QgdGhhdCB0aGUgb2JqZWN0IGlzIGRvbmUgYmVpbmcgc2Nhbm5lZCwgYnV0
IHRoYXQgaXQgaXMgZWl0aGVyCisgICAgICAgICAgICAgIGJlaW5nIHNjYW5uZWQgcmlnaHQgbm93
IG9yIGl0IGhhcyBhbHJlYWR5IGJlZW4gc2Nhbm5lZC4gVGhpcyBpcyBsaWtlIGEgY29tYmluYXRp
b24gb2YKKyAgICAgICAgICAgICAgU2llYmVydCdzIGFudGhyYWNpdGUgYW5kIGJsYWNrIHN0YXRl
cyBbM10uCisKKyAgICAgICAgICBOZXdXaGl0ZTogdGhpcyBpcyBleGFjdGx5IE5vdE1hcmtlZC4g
SXQncyB0aGUgc3RhdGUgdGhhdCBvYmplY3RzIGdldCB3aGVuIHRoZXkgYXJlIGFsbG9jYXRlZC4K
KyAgICAgICAgICAgICAgSXQncyBpbXBvc3NpYmxlIGZvciBhbiBvYmplY3QgdG8gcmV0dXJuIHRv
IHRoaXMgc3RhdGUuCisKKyAgICAgICAgICBPbGRHcmV5OiB0aGUgb2JqZWN0IGlzIG9uIHRoZSBt
YXJrIHN0YWNrIGFuZCB3aWxsIGJlIHNjYW5uZWQgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJl
LiBUaGlzCisgICAgICAgICAgICAgIGFsc28gbWVhbnMgdGhhdCB0aGlzIGlzbid0IHRoZSBmaXJz
dCB0aW1lIGluIHRoaXMgY3ljbGUgdGhhdCB0aGUgb2JqZWN0IGhhcyBiZWVuIGdyZXkuIEluIGFu
CisgICAgICAgICAgICAgIGVkZW4gY29sbGVjdGlvbiwgYW4gb2xkIG9iamVjdCB0aGF0IGhhcyBi
ZWVuIHJlbWVtYmVyZWQgaXMgdGhvdWdodCBvZiBhcyBiZWluZyBPbGRHcmV5LCBldmVuCisgICAg
ICAgICAgICAgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgZHVyaW5nIHRoaXMgZWRlbiBjb2xs
ZWN0aW9uIHRoYXQgaXQgaXMgZ3JleS4gVGhhdCdzIGJlY2F1c2UgYW4gZWRlbgorICAgICAgICAg
ICAgICBjb2xsZWN0aW9uIG11c3QgYmVoYXZlICJhcyBpZiIgdGhlIGdyZXktPmJsYWNrIHRyYW5z
aXRpb24gZm9yIG9sZCBvYmplY3RzIG1hZ2ljYWxseSBoYXBwZW5lZAorICAgICAgICAgICAgICBh
dCB0aGUgc3RhcnQgb2YgR0MuIFJlbWVtYmVyZWQgb2JqZWN0cyBhcmUgbGlrZSBvbGQgb2JqZWN0
cyB0aGF0IHVuZGVyd2VudCBhIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgYmFycmllciByZS1n
cmV5aW5nIGp1c3QgYWZ0ZXIgdGhlIG1hZ2ljYWwgb2xkIG9iamVjdCBncmV5LT5ibGFjayB0cmFu
c2l0aW9uIGF0IHRoZSBzdGFydCBvZgorICAgICAgICAgICAgICBHQy4gVGhpcyBzdGF0ZSBpcyBh
bG1vc3QgZXhhY3RseSBsaWtlIE1hcmtlZEFuZFJlbWVtYmVyZWQsIGV4Y2VwdCB0aGF0IGFuIG9i
amVjdCBub3cKKyAgICAgICAgICAgICAgdHJhbnNpdGlvbnMgZnJvbSBPbGRHcmV5IHRvIE9sZEJs
YWNrIGF0IHRoZSBiZWdpbm5pbmcgb2YgdmlzaXRpbmcsIHJhdGhlciB0aGFuIGhvdyBwcmV2aW91
c2x5CisgICAgICAgICAgICAgIHdlIHRyYW5zaXRpb25lZCBmcm9tIE1hcmtlZEFuZFJlbWVtYmVy
ZWQgdG8gTWFya2VkIGF0IHRoZSBiaXR0ZXIgZW5kIG9mIEdDLgorCisgICAgICAgICAgTmV3R3Jh
eTogdGhlIG9iamVjdCBpcyBvbiB0aGUgbWFyayBzdGFjayBhbmQgd2lsbCBiZSBzY2FubmVkIGF0
IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4gVGhpcworICAgICAgICAgICAgICBzdGF0ZSBoYXMg
bm8gY2xlYXIgcmVsYXRpdmUgaW4gdGhlIG9sZCBzdGF0ZSBzeXN0ZW0uIEl0IG1lYW5zIHRoYXQg
dGhlIG9iamVjdCBiZWNhbWUgZ3JleSBkdWUKKyAgICAgICAgICAgICAgdG8gb3JkaW5hcnkgbWFy
a2luZy4gUHJldmlvdXNseSwgb3JkaW5hcnkgbWFya2luZyB3b3VsZCBtYWtlIHRoZSBvYmplY3Qg
TWFya2VkLgorCisgICAgICAgIC0gUmVtb3ZhbCBvZiB0aGUgcG9zdC1wcm9jZXNzaW5nIHBoYXNl
IHRoYXQgImNsZWFycyIgdGhlIHJlbWVtYmVyZWQgc2V0IGJ5IG1vdmluZyBhbGwgcmVtZW1iZXJl
ZAorICAgICAgICAgIG9iamVjdHMgdG8gdGhlIE1hcmtlZCBzdGF0ZS4gVGhpcyBub3cgaGFwcGVu
cyBtYWdpY2FsbHkgZHVyaW5nIHZpc2l0aW5nLCBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgICAg
ICAgLSBTbG90VmlzaXRvciBub3cgcmVtZW1iZXJzIHRoZSBzdGF0ZSB0aGF0IHRoZSBvYmplY3Qg
ZGlkIGhhdmUganVzdCBiZWZvcmUgdmlzaXRpbmcuIFdoaWxlIHZpc2l0aW5nCisgICAgICAgICAg
dGhhdCBvYmplY3QsIGl0J3MgcG9zc2libGUgdG8gcXVlcnkgd2hhdCB0aGUgc3RhdGUgd2FzLiBU
aGlzIGlzIHVzZWQgZm9yIGNvcHkgc3BhY2UgZGVjaXNpb25zIGFuZAorICAgICAgICAgIGZvciBl
eHRyYSBtZW1vcnkgdXNhZ2UgYWNjb3VudGluZy4gV2UgZG9uJ3Qgd2FudCB0byBwdXQgdGhlIGJh
Y2tpbmcgc3RvcmUgb24gdGhlIGNvcHkgd29ya2xpc3QsCisgICAgICAgICAgYW5kIHdlIGRvbid0
IHdhbnQgdG8gY291bnQgZXh0cmEgbWVtb3J5IHVzYWdlLCBpZiB0aGUgb2JqZWN0IHdhcyBPbGRH
cmV5IGF0IHRoZSBzdGFydCBvZgorICAgICAgICAgIHZpc2l0aW5nLiBQcmV2aW91c2x5LCB3ZSB3
b3VsZCBiZSBhYmxlIHRvIGp1c3QgYXNrIGlmIHRoZSBvYmplY3Qgd2FzIE1hcmtlZEFuZFJlbWVt
YmVyZWQgc2luY2UKKyAgICAgICAgICB0aGF0IHN0YXRlIHdvdWxkbid0IGdldCBjbGVhcmVkIHVu
dGlsIGFmdGVyIGFsbCBtYXJraW5nIGZpbmlzaGVkLiBUaGlzIGNoYW5nZSBhbHNvIHNpbXBsaWZp
ZXMKKyAgICAgICAgICBzb21lIEFQSXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0byBwYXNz
IHRoZSBKU0NlbGwqIHBvaW50ZXIsIHNpbmNlIHRoZXNlIFNsb3RWaXNpdG9yIG1ldGhvZHMKKyAg
ICAgICAgICBubyBsb25nZXIgYXNrIHRoZSBjZWxsIGZvciBpdHMgc3RhdGUgLSBpbnN0ZWFkIHRo
ZXkgdXNlIHRoZSBzYXZlZCBwcmUtdmlzaXRpbmcgc3RhdGUuCisKKyAgICAgICAgLSBSZW1vdmFs
IG9mIGEgYnVuY2ggb2YgaGVscGVycyBhbmQgYWJzdHJhY3Rpb25zLiBQcmV2aW91c2x5IHdlIGhh
ZCB2YXJpb3VzIG1ldGhvZHMgZm9yIGFza2luZyBpZgorICAgICAgICAgIGFuIG9iamVjdCB3YXMg
Im1hcmtlZCIgYW5kIGlmIGFuIG9iamVjdCB3YXMgInJlbWVtYmVyZWQiLiBXZSBoYWQgaGVscGVy
cyBmb3IgYWRqdXN0aW5nIHRoZXNlCisgICAgICAgICAgc3RhdGVzLCBhbmQgdGhvc2UgaGVscGVy
cyB3b3VsZCBhc3NlcnQgdGhhdCB0aGV5IHdlcmUgYmVpbmcgdXNlZCB0aGUgcmlnaHQgd2F5LiBU
aGlzIGlzIG5vdCB2ZXJ5CisgICAgICAgICAgdXNlZnVsIGZvciBjb25jdXJyZW50IEdDLCBzaW5j
ZSBub3cgdGhlIHNldCBvZiBwb3NzaWJsZSBzdGF0ZSB0cmFuc2l0aW9ucyBpcyBtdWNoIGxhcmdl
ci4gQWxzbywKKyAgICAgICAgICB0aGUgcHJldmlvdXMgdXNlIG9mIHRoZSB3b3JkICJtYXJrZWQi
IHdhcyBwcmV0dHkgYmFkIC0gZm9yIGV4YW1wbGUgaW4gSGVhcCwgIm1hcmtlZCIgcmVmZXJzIHRv
CisgICAgICAgICAgdGhlIHByaW1hcnkgbWFyayBiaXQgKHRoYXQgZ2V0cyBjbGVhcmVkIGF0IHRo
ZSBmbGlwKSwgd2hpbGUgaW4gSlNDZWxsLCAibWFya2VkIiByZWZlcnMgdG8gdGhlCisgICAgICAg
ICAgc3RpY2t5IG1hcmsgYml0ICh0aGF0IGRvZXMgbm90IGdldCBjbGVhcmVkLCBldmVyKS4gVGhp
cyBjaGFuZ2UgZ2V0cyByaWQgb2YgYSBsb3Qgb2YgdGhvc2UgaGVscGVycworICAgICAgICAgIGFu
ZCBpbmxpbmVzIHRoZWlyIGxvZ2ljLiBUaGlzIGFjdHVhbGx5IG1ha2VzIHRoZSBjb2RlIGVhc2ll
ciBhbmQgbW9yZSBmdW4gdG8gcmVhZCwgc2luY2UgeW91IGNhbgorICAgICAgICAgIG5vdyBsb29r
IGF0IHRoZSBtYXJraW5nIGFuZCBiYXJyaWVyIGNvZGUgYW5kIHNlZSBob3cgdGhhdCBjb2RlIHVz
ZXMgdGhlIGZvdXIgQ2VsbFN0YXRlcy4gRm9yCisgICAgICAgICAgZXhhbXBsZSwgaXQncyBmdW4g
dG8gc2VlIHRoYXQgdGhlIGJhcnJpZXIgZ2V0cyBmaXJlZCBmb3Igby5mPXYgZXhhY3RseSB3aGVu
IG8gaXMgT2xkQmxhY2sgYW5kIHYKKyAgICAgICAgICBpcyBOZXdXaGl0ZS4KKworICAgICAgICBU
aGlzIGNoYW5nZSBzaG91bGRuJ3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHBlcmZvcm1hbmNlIG9yIEdD
IGJlaGF2aW9yLiBJdCBkb2VzIHB1dCBvdXIgY29kZSBpbiBhCisgICAgICAgIHdlaXJkIHN0YXRl
IHdoZXJlIHdlIG5vdyBoYXZlIHN0YXRlcyBhbmQgY29tbWVudHMgcmVmZXJlbmNpbmcgYSBjb25j
dXJyZW50IEdDIHRoYXQgZG9lc24ndCBleGlzdAorICAgICAgICB5ZXQuCisKKyAgICAgICAgRmlu
YWxseSwgc29tZSB0aG91Z2h0cyBhYm91dCB0aGUgY29uY3VycmVudCBHQyBiYXJyaWVyIGFuZCBp
dHMgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZS4gVGhpcworICAgICAgICBiYXJyaWVyIGV4
aGliaXRzIHZlcnkgcG9vciBndWFyYW50ZWVzIGFib3V0IGNvbGxlY3RvciBwcm9ncmVzcywgYnV0
IG1heGltaXplcyB0aHJvdWdocHV0IGJ5IGp1c3QKKyAgICAgICAgcmV1c2luZyB0aGUgZXhpc3Rp
bmcgYmFycmllciBjb2RlIHdlIGFscmVhZHkgZW1pdCBhbmQgb3B0aW1pemUuIEkgYmVsaWV2ZSB0
aGF0IGV2ZW4gb3VyIGVwb2NoLWJhc2VkCisgICAgICAgIGJhcnJpZXIgaW5zZXJ0aW9uIERGRyBw
aGFzZSBpcyBjb3JyZWN0IGZvciB0aGUgY29uY3VycmVudCBpbnRlcnByZXRhdGlvbiBvZiBvdXIg
ZXhpc3RpbmcgYmFycmllci4KKyAgICAgICAgQnV0LCB0aGUgYmFycmllciBjYW4gcmVncmVzcyB0
aGUgcHJvZ3Jlc3MgdGhhdCB0aGUgY29sbGVjdG9yIGhhcyBtYWRlIGZvciB0d28gcmVhc29uczoK
KworICAgICAgICBJbmNyZW1lbnRhbCB1cGRhdGU6IHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGlz
IGJhcnJpZXIgd2l0aCBhIGJsYWNrIHN0YWNrLCBzaW5jZSB0aGF0IHdvdWxkIG1lYW4KKyAgICAg
ICAgdGhhdCBoZWFwIGxvYWRzIG9mIHdoaXRlIG9iamVjdHMgd2lsbCBoYXZlIHRvIGV4cGxpY2l0
bHkgcmUtZ3JleSB0aGUgc3RhY2suIFRoZSB3YXkgeW91IGltcGxlbWVudAorICAgICAgICB0aGlz
IGtpbmQgb2YgY29sbGVjdG9yIGlzIHRoYXQgY29sbGVjdG9yIHRlcm1pbmF0aW9uIHdpbGwgcmVz
Y2FuIHRoZSBzdGFjay4gVGVybWluYXRpb24gaXMgcmVhY2hlZAorICAgICAgICBvbmx5IGlmIHRo
ZSBhdC10ZXJtaW5hdGlvbiByZS1zY2FuIGdyZXlzIG5vIG9iamVjdHMuIFRoaXMgbWVhbnMgdGhh
dCB0aGUgY29sbGVjdG9yIGlzIGEgZml4cG9pbnQuCisgICAgICAgIEx1Y2tpbHksIG91ciBjb2xs
ZWN0b3IgaXMgYWxyZWFkeSBhIGZpeHBvaW50IGJlY2F1c2Ugb2Ygb3BhcXVlIHJvb3RzIGFuZCBz
dHJ1Y3R1cmUgdHJhbnNpdGlvbnMuCisKKyAgICAgICAgTWFya2luZyBhaW4ndCBtb25vdG9uaWM6
IG5vcm1hbGx5LCBvbmNlIGFuIG9iamVjdCBpcyBibGFjaywgaXQgc3RheXMgdGhhdCB3YXkuIElu
IHRoaXMgY29sbGVjdG9yLAorICAgICAgICBibGFjayBvYmplY3RzIG1heSBiZWNvbWUgZ3JleSBh
Z2Fpbi4gSSBkb24ndCBoYXZlIHBlcnNvbmFsIGV4cGVyaWVuY2Ugd2l0aCBzdWNoIGNvbmN1cnJl
bnQgR0NzLCBidXQKKyAgICAgICAgSSBzdXNwZWN0IHRoYXQgdGhpcyB3aWxsIGJhc2ljYWxseSBi
ZSBmaW5lLiBDb25jdXJyZW50IGNvbGxlY3Rpb25zIGZpbmlzaCBwcmV0dHkgcXVpY2tseSwgYW5k
IHRoZQorICAgICAgICBtdXRhdG9yIHVzdWFsbHkgdG91Y2hlcyBvbmx5IGEgc3Vic2V0IG9mIHRo
ZSBoZWFwLiBPbmx5IHRoYXQgc3Vic2V0IG9mIHRoZSBoZWFwIHRoYXQgdGhlIG11dGF0b3IgaXMK
KyAgICAgICAgdG91Y2hpbmcgY291bGQgYmUgcmUtZ3JleWVkLiBQcm9iYWJseSwgdGhlIEdDIHdp
bGwgaGF2ZSB0byBiZSBoeWJyaWQgaW5jcmVtZW50YWwgYW5kIGNvbmN1cnJlbnQsCisgICAgICAg
IGFuZCB0b3dhcmRzIHRoZSBlbmQgb2YgR0Mgd2hlbiB3ZSBkbyB0aGUgdGVybWluYXRpb24gc3Rh
Y2sgcmUtc2Nhbiwgd2UgY2FuIGVuc3VyZSB0aGF0IHRoZQorICAgICAgICBjb2xsZWN0b3IgZG9l
cyBzb21lIG1pbmltYWwgYW1vdW50IG9mIG1hcmtpbmcuIElmIHRoZSBtaW5pbWFsIGFtb3VudCBv
ZiBtYXJraW5nIGRvbmUgYnkgdGhlCisgICAgICAgIGNvbGxlY3RvciBpcyBsYXJnZSBlbm91Z2gs
IHdlIGNhbiBlbnN1cmUgdGhhdCB3ZSByZWFjaCB0ZXJtaW5hdGlvbiBiZWZvcmUgdGhlIG11dGF0
b3IgY2FuIHJlZ3Jlc3MKKyAgICAgICAgcHJvZ3Jlc3MuIFRoZSBiYXJyaWVyIGNhbm5vdCB1bi10
ZXJtaW5hdGUgdGhlIGNvbGxlY3RvcjsgaWYgdGhlIGNvbGxlY3RvciByZWFjaGVzIHRlcm1pbmF0
aW9uIGFuZAorICAgICAgICB0aGUgYmFycmllciByZS1ncmV5cyBhbiBvYmplY3QgdGhlbiBpdCdz
IGFjdHVhbGx5IGRvaW5nIGEgZ2VuZXJhdGlvbmFsIHJlbWVtYmVyaW5nIHJhdGhlciB0aGFuIGEK
KyAgICAgICAgY29uY3VycmVudCByZS1ncmV5aW5nLgorCisgICAgICAgIFRoYXQncyBzb3J0IG9m
IHRoZSBjdXRlIHRoaW5nIGFib3V0IHRoZSBiYXJyaWVyIC0gaXQgaXMgZXhhY3RseSBhIHJlLWdy
ZXlpbmcgYmFycmllciBkdXJpbmcgR0MgYW5kCisgICAgICAgIGl0IGlzIGV4YWN0bHkgYSByZW1l
bWJlcmluZyBiYXJyaWVyIGluIGJldHdlZW4gR0NzLgorCisgICAgICAgIFsxXSBodHRwOi8vd3d3
LmNzLnV0ZXhhcy5lZHUvZnRwL2dhcmJhZ2Uvc3VibWl0L3JlYWRhYmxlL3BwaXJpbmVuMTEucHMK
KyAgICAgICAgWzJdIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zNjEwMDUKKyAg
ICAgICAgWzNdIGh0dHA6Ly93d3cuYWljYXMuY29tL3BhcGVycy9JU01NMTMyLXNpZWJlcnQucGRm
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5OjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5KToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmxvYWRDZWxsU3RhdGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmVtaXRTdG9yZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmxvYWRNYXJrQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9D
ZWxsU3RhdGUuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJs
b2Nrcyk6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgorICAgICAgICAqIGhlYXAvQ29w
aWVkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZl
Qnl0ZXMpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6c2hvdWxkUmVwb3J0TGl2ZUJ5dGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0dDTG9nZ2luZy5jcHA6CisgICAgICAgIChKU0M6
OkxvZ2dpbmdGdW5jdG9yOjpyZXZpdmVDZWxscyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlz
aXRXZWFrSGFuZGxlcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6
OkhlYXA6OmNsZWFyUmVtZW1iZXJlZFNldCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFw
Lmg6CisgICAgICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpIZWFwOjpp
c0xpdmUpOgorICAgICAgICAoSlNDOjpIZWFwOjppc01hcmtlZCk6CisgICAgICAgIChKU0M6Okhl
YXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNSZW1lbWJlcmVkKTogRGVsZXRlZC4KKyAgICAgICAg
KiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjp2aXNpdENoaWxkcmVuKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNp
dG9yOjpjaGlsZENvdW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmluY3JlbWVudENo
aWxkQ291bnQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGF0YUJlZm9yZVZpc2l0aW5n
Q3VycmVudE9iamVjdCk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKToKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmNvcHlMYXRlcik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aGVhcCk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6Omp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206
CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjZWxs
U3RhdGUpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnNldENlbGxTdGF0ZSk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpzZXRNYXJrZWQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKU0NlbGw6OnNldFJlbWVtYmVyZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0Nl
bGw6OmlzTWFya2VkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDZWxsOjppc1JlbWVtYmVy
ZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdjRGF0YU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6SlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSURCbG9iLmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUlEQmxvYjo6U3RydWN0dXJlSURCbG9iKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURC
bG9iOjpvcGVyYXRvcj0pOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcERhdGEuY3BwOgorICAg
ICAgICAoSlNDOjpXZWFrTWFwRGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6Oldl
YWtNYXBEYXRhOjpzZXQpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9iYXNpYy1lZGVuLWdjLXRl
c3QuanM6IEFkZGVkLgorICAgICAgICAgICAgSGlsYXJpb3VzbHksIGFuIGVhcmxpZXIgdmVyc2lv
biBvZiB0aGlzIHBhdGNoIHRoYXQgZGlkbid0IGhhdmUgdGhlIE5ld0dyZXkvT2xkR3JleSBkaXN0
aW5jdGlvbgorICAgICAgICAgICAgd291bGQgb25seSBjcmFzaCBzdXBlci1iaWcgdGVzdHMgdGhh
dCBHQ2QgdHdpY2UgYnV0IGl0IGRpZG4ndCBjcmFzaCBhbnkgc21hbGwgZm9jdXNlZCB0ZXN0LiBB
bGwKKyAgICAgICAgICAgIGl0IHRvb2sgdG8gc2hvdyB0aGUgbmVlZCBmb3IgdGhlIE5ld0dyZXkv
T2xkR3JleSBkaXN0aW5jdGlvbiB3YXMgdGhpcyBzdXBlciBzaW1wbGUgdGVzdC4KKwogMjAxNS0x
MC0wNSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEpTQzo6
U2xvdFZpc2l0b3Igc2hvdWxkIG5vdCBiZSBhIGhvdCBtZXNzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMjYsNiArMTMyNiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxmdGxcRlRMVmFsdWVSYW5nZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZnRsXEZUTFdlaWdodC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TFdlaWdodGVkVGFyZ2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENl
bGxTdGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb2RlQmxvY2tT
ZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29uc2VydmF0aXZlUm9v
dHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkQWxsb2NhdG9y
LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtp
bmcgY29weSkKQEAgLTIyMTksNiArMjIxOSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkaXNhc3NlbWJsZXJcRGlzYXNzZW1ibGVyLmgiPgogICAgICAgPEZpbHRlcj5kaXNhc3NlbWJs
ZXI8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcQ2VsbFN0YXRlLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9D
bEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvbnNlcnZhdGl2ZVJv
b3RzLmgiPgogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkwNTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsNyBAQAogCQkwRjE4RDNEMDFCNTVBNkUw
MDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE4RDNDRTFCNTVBNkUwMDAyQzVD
OUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87IH07CiAJCTBGMTkwQ0FD
MTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTkwQ0FBMTg5RDgyRjYwMDBB
RTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCAqLzsgfTsKIAkJMEYxOTBDQUQxODlE
ODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAv
KiBQcm9maWxlckpldHRpc29uUmVhc29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYxQzNEREExQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQzNE
RDkxQkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBK
U0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUUzQTQ2MTUzNENCQUYwMDBG
OTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1l
bnRQb3NpdGlvbi5oICovOyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91
YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5o
ICovOyB9OwpAQCAtMTk2NCw2ICsxOTY1LDcgQEAKIAkJMEYxOEQzQ0UxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgcGF0aCA9IGRm
Zy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYxOTBDQUExODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFz
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUHJvZmlsZXJKZXR0
aXNvblJlYXNvbi5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpldHRpc29uUmVhc29uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxOTBDQUIxODlEODJGNjAwMEFFNUYw
IC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJK
ZXR0aXNvblJlYXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjFDM0REOTFC
QkNFMDlFMDBFNTIzRTQgLyogQ2VsbFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENlbGxTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFERDg0
OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0NJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MUUzQTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50UG9zaXRpb24uaDsgcGF0aCA9IGRm
Zy9ERkdBcmd1bWVudFBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR0RvdWJsZUZvcm1hdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MjI2LDYgKzQyMjgsNyBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYxQzNERDkx
QkJDRTA5RTAwRTUyM0U0IC8qIENlbGxTdGF0ZS5oICovLAogCQkJCTBGRDhBMzExMTdENDMyNkMw
MENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovLAogCQkJCTBGRDhBMzEyMTdENDMyNkMwMENB
MkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIg
LyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLApAQCAtNjkxNyw2ICs2OTIwLDcgQEAKIAkJCQkx
NDE0MkU1MTFCNzk2RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2lu
dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFs
dWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjFDM0REQTFCQkNFMDlFMDBFNTIzRTQg
LyogQ2VsbFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFG
OEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlFRTBDMDAxQjRBRkI4
NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhl
YWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNDUsMTUgKzIyNDUsMTUgQEAg
dm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAogICAgIGlmIChDb2RlQmxv
Y2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQogICAgICAgICBv
dGhlckJsb2NrLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIAotICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKG93bmVyRXhlY3V0YWJsZSgpLCBzaXplb2YoQ29kZUJsb2NrKSk7
CisgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZW9mKENvZGVCbG9jaykp
OwogICAgIGlmIChtX2ppdENvZGUpCi0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKG93bmVyRXhlY3V0YWJsZSgpLCBtX2ppdENvZGUtPnNpemUoKSk7CisgICAgICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1faml0Q29kZS0+c2l6ZSgpKTsKICAgICBp
ZiAobV9pbnN0cnVjdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgIC8vIERpdmlkZSBieSByZWZDb3Vu
dCgpIGJlY2F1c2UgbV9pbnN0cnVjdGlvbnMgcG9pbnRzIHRvIHNvbWV0aGluZyB0aGF0IGlzIHNo
YXJlZAogICAgICAgICAvLyBieSBtdWx0aXBsZSBDb2RlQmxvY2tzLCBhbmQgd2Ugb25seSB3YW50
IHRvIGNvdW50IGl0IHRvd2FyZHMgdGhlIGhlYXAgc2l6ZSBvbmNlLgogICAgICAgICAvLyBIYXZp
bmcgZWFjaCBDb2RlQmxvY2sgcmVwb3J0IG9ubHkgaXRzIHByb3BvcnRpb25hbCBzaGFyZSBvZiB0
aGUgc2l6ZSBpcyBvbmUgd2F5CiAgICAgICAgIC8vIG9mIGFjY29tcGxpc2hpbmcgdGhpcy4KLSAg
ICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQob3duZXJFeGVjdXRhYmxlKCks
IG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0
aW9ucy5yZWZDb3VudCgpKTsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQobV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1faW5zdHJ1
Y3Rpb25zLnJlZkNvdW50KCkpOwogICAgIH0KIAogICAgIHZpc2l0b3IuYXBwZW5kKCZtX3VubGlu
a2VkQ29kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDEyICs2OSwxMiBAQCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0
cmFjdEhlYXBSZXBvCiAgICAgUkVMRUFTRV9BU1NFUlQoIShKU0NlbGxfaW5kZXhpbmdUeXBlLm9m
ZnNldCgpICYgKHNpemVvZihpbnQzMl90KSAtIDEpKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoSlND
ZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSArIDEgPT0gSlNDZWxsX3R5cGVJbmZvVHlwZS5vZmZz
ZXQoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSAr
IDIgPT0gSlNDZWxsX3R5cGVJbmZvRmxhZ3Mub2Zmc2V0KCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9nY0RhdGEub2Zmc2V0
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAz
ID09IEpTQ2VsbF9jZWxsU3RhdGUub2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX2luZGV4aW5nVHlw
ZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgSlNDZWxsX3R5cGVJbmZv
VHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgSlNDZWxsX3R5cGVJ
bmZvRmxhZ3MuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwotICAgIEpTQ2VsbF9n
Y0RhdGEuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOworICAgIEpTQ2VsbF9jZWxs
U3RhdGUuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIAogICAgIHJvb3Qu
bV90YmFhTWV0YWRhdGEgPSBtZE5vZGUobV9jb250ZXh0LCBtZFN0cmluZyhtX2NvbnRleHQsIHJv
b3QubV9oZWFwTmFtZSkpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE5MDU2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMiArNTIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmll
d19tb2RlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkpIFwKICAgICBtYWNybyhK
U0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rv
cigpKSBcCisgICAgbWFjcm8oSlNDZWxsX2NlbGxTdGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZz
ZXQoKSkgXAorICAgIG1hY3JvKEpTQ2VsbF9pbmRleGluZ1R5cGUsIEpTQ2VsbDo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSkgXAotICAgIG1hY3JvKEpTQ2VsbF91c2VmdWxCeXRlcywgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0ZsYWdz
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBl
SW5mb1R5cGUsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpIFwKLSAgICBtYWNybyhKU0Nl
bGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSBcCi0gICAgbWFj
cm8oSlNDZWxsX2djRGF0YSwgSlNDZWxsOjpnY0RhdGFPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpT
Q2VsbF91c2VmdWxCeXRlcywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSkgXAogICAgIG1h
Y3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxl
KCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX3Njb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246
Om9mZnNldE9mUmFyZURhdGEoKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MjYwLDkgKzgyNjAsOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9ncmFwaC5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CiAgICAgfQogICAgIAotICAgIExWYWx1ZSBsb2FkTWFya0J5dGUoTFZhbHVlIGJh
c2UpCisgICAgTFZhbHVlIGxvYWRDZWxsU3RhdGUoTFZhbHVlIGJhc2UpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9vdXQubG9hZDgoYmFzZSwgbV9oZWFwcy5KU0NlbGxfZ2NEYXRhKTsKKyAgICAg
ICAgcmV0dXJuIG1fb3V0LmxvYWQ4KGJhc2UsIG1faGVhcHMuSlNDZWxsX2NlbGxTdGF0ZSk7CiAg
ICAgfQogCiAgICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBiYXNlKQpAQCAtODI3NCw3
ICs4Mjc0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBDaGVjayB0aGUgbWFyayBieXRlLiAK
ICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90WmVybzgobG9hZE1h
cmtCeXRlKGJhc2UpKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNNYXJrZWRBbmRO
b3RSZW1lbWJlcmVkKSk7CisgICAgICAgICAgICBtX291dC5ub3RaZXJvOChsb2FkQ2VsbFN0YXRl
KGJhc2UpKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNNYXJrZWRBbmROb3RSZW1l
bWJlcmVkKSk7CiAKICAgICAgICAgLy8gQXBwZW5kIHRvIHRoZSB3cml0ZSBiYXJyaWVyIGJ1ZmZl
ci4KICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc01hcmtl
ZEFuZE5vdFJlbWVtYmVyZWQsIGJ1ZmZlckhhc1NwYWNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ2VsbFN0YXRlX2gKKyNkZWZpbmUgQ2VsbFN0YXRlX2gKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CisgICAgLy8g
VGhlIG9iamVjdCBpcyBibGFjayBhcyBmYXIgYXMgdGhpcyBHQyBpcyBjb25jZXJuZWQuIFdoZW4g
bm90IGluIEdDLCB0aGlzIGp1c3QgbWVhbnMgdGhhdCBpdCdzIGFuCisgICAgLy8gb2xkIGdlbiBv
YmplY3QuIE5vdGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgYXJyYW5nZSBPbGRCbGFjayB0byBiZSB6
ZXJvLCBzbyB0aGF0IHRoZSBzdG9yZSBiYXJyaWVyIG9uCisgICAgLy8gYSB0YXJnZXQgb2JqZWN0
ICJmcm9tIiBpcyBqdXN0OgorICAgIC8vCisgICAgLy8gaWYgKCFmcm9tLT5jZWxsU3RhdGUoKSkK
KyAgICAvLyAgICAgc2xvd1BhdGgoZnJvbSk7CisgICAgLy8KKyAgICAvLyBUaGVyZSBpcyBhIGJ1
bmNoIG9mIGNvZGUgaW4gdGhlIExMSW50IGFuZCBKSVRzIHRoYXQgcmVseSBvbiB0aGlzIGJlaW5n
IHRoZSBjYXNlLiBZb3UnZCBoYXZlIHRvCisgICAgLy8gY2hhbmdlIGEgbG90IG9mIGNvZGUgaWYg
eW91IGV2ZXIgd2FudGVkIHRoZSBzdG9yZSBiYXJyaWVyIHRvIGJlIGFueXRoaW5nIGJ1dCBhIG5v
bi16ZXJvIGNoZWNrIG9uCisgICAgLy8gY2VsbFN0YXRlLgorICAgIE9sZEJsYWNrID0gMCwKKyAg
ICAKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGluIGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0
aGF0IHRoZSBvYmplY3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCisgICAgTmV3V2hpdGUgPSAx
LAorCisgICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQg
LSBidXQgaXQgZWl0aGVyIGJlbG9uZ3MgdG8gb2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCisgICAg
Ly8gR0MpIG9yIGl0IGlzIGdyZXkgYSBzZWNvbmQgdGltZSBpbiB0aGlzIGN1cnJlbnQgR0MgKGJl
Y2F1c2UgYSBjb25jdXJyZW50IHN0b3JlIGJhcnJpZXIgcmVxdWVzdGVkCisgICAgLy8gcmUtZ3Jl
eWluZykuCisgICAgT2xkR3JleSA9IDIsCisKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBp
LmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGluIHRo
aXMgR0MgdGhhdCB3ZSBhcmUKKyAgICAvLyBnb2luZyB0byBzY2FuIGl0LiBJZiB0aGlzIGlzIGFu
IGVkZW4gR0MsIHRoaXMgYWxzbyBtZWFucyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gZWRlbi4KKyAg
ICBOZXdHcmV5ID0gMworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDZWxs
U3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1Nl
dC5jcHAJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
ZGVCbG9ja1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQg
Q29kZUJsb2NrU2V0OjpyZW1lbWJlckN1cnJlbnRseUV4ZWMKICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcgIiwgbV9jdXJyZW50bHlFeGVjdXRpbmcuc2l6ZSgp
LCAiIGNvZGUgYmxvY2tzLlxuIik7CiAgICAgZm9yIChjb25zdCBSZWZQdHI8Q29kZUJsb2NrPiYg
Y29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcpCi0gICAgICAgIGhlYXAtPmFkZFRvUmVt
ZW1iZXJlZFNldChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgaGVhcC0+
d3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwogCiAgICAgLy8gSXQn
cyBzYWZlIHRvIGNsZWFyIHRoZXNlIFJlZlB0ciBzZXRzIGJlY2F1c2Ugd2Ugd29uJ3QgZGVsZXRl
IHRoZSBDb2RlQmxvY2tzCiAgICAgLy8gaW4gdGhlbSB1bnRpbCB0aGUgbmV4dCBHQywgYW5kIHdl
J2xsIHJlY29tcHV0ZSB0aGVtIGF0IHRoYXQgdGltZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkQmxvY2suaAkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTQsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkaWRQcm9tb3RlKCk7CiAKICAgICB1bnNpZ25lZCBsaXZlQnl0
ZXMoKTsKLSAgICBib29sIHNob3VsZFJlcG9ydExpdmVCeXRlcyhMb2NrSG9sZGVyJiwgSlNDZWxs
KiBvd25lcik7CiAgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYsIEpTQ2VsbCos
IENvcHlUb2tlbiwgdW5zaWduZWQpOwogICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVzRHVyaW5nQ29w
eWluZyh1bnNpZ25lZCk7CiAgICAgdm9pZCBkaWRTdXJ2aXZlR0MoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAx
OTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTYgKzMzLDYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAgICAgCi1pbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxkUmVwb3J0TGl2ZUJ5
dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKQotewotICAgIC8vIFdlIHdhbnQgdG8gYWRk
IHRvIGxpdmUgYnl0ZXMgaWYgdGhlIG93bmVyIGlzbid0IHBhcnQgb2YgdGhlIHJlbWVtYmVyZWQg
c2V0IG9yCi0gICAgLy8gaWYgdGhpcyBibG9jayB3YXMgYWxsb2NhdGVkIGR1cmluZyB0aGUgbGFz
dCBjeWNsZS4gCi0gICAgLy8gSWYgd2UgYWx3YXlzIGFkZGVkIGxpdmUgYnl0ZXMgd2Ugd291bGQg
ZG91YmxlIGNvdW50IGZvciBlbGVtZW50cyBpbiB0aGUgcmVtZW1iZXJlZAotICAgIC8vIHNldCBh
Y3Jvc3MgY29sbGVjdGlvbnMuIAotICAgIC8vIElmIHdlIGRpZG4ndCBhbHdheXMgYWRkIGxpdmUg
Ynl0ZXMgdG8gbmV3IGJsb2Nrcywgd2UnZCBnZXQgdG9vIGZldy4KLSAgICByZXR1cm4gIUhlYXA6
OmlzUmVtZW1iZXJlZChvd25lcikgfHwgIW1faXNPbGQ7Ci19Ci0KIGlubGluZSB2b2lkIENvcGll
ZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYsIEpTQ2VsbCogb3duZXIsIENvcHlU
b2tlbiB0b2tlbiwgdW5zaWduZWQgYnl0ZXMpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NMb2dnaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0xvZ2dpbmcuY3BwCShyZXZpc2lvbiAx
OTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0xvZ2dpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBmb3IgKGNvbnN0
IEpTQ2VsbCogY2VsbCA6IG1fc2F2ZWRNYXJrU3RhY2spIHsKICAgICAgICAgICAgIG1fc2xvdFZp
c2l0b3IubWFya1N0YWNrKCkuYXBwZW5kKGNlbGwpOwotICAgICAgICAgICAgY29uc3RfY2FzdDxK
U0NlbGwqPihjZWxsKS0+c2V0UmVtZW1iZXJlZCh0cnVlKTsKKyAgICAgICAgICAgIGNlbGwtPnNl
dENlbGxTdGF0ZShDZWxsU3RhdGU6Ok9sZEdyZXkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTkwNTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Niw3
ICs1OTYsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUsCiAgICAg
Ly8gdGhlIGxpdmVuZXNzIG9mIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgZ3JhcGguCiAgICAgdmlz
aXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwogCi0gICAgY2xlYXJSZW1lbWJlcmVkU2V0
KHJlbWVtYmVyZWRTZXQpOwogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobV9tYXJraW5nTXV0ZXgpOwogICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQg
PSB0cnVlOwpAQCAtODUyLDEzICs4NTEsNiBAQCB2b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMo
SGVhcFJvb3RWaXNpCiAgICAgfQogfQogCi12b2lkIEhlYXA6OmNsZWFyUmVtZW1iZXJlZFNldChW
ZWN0b3I8Y29uc3QgSlNDZWxsKj4mIHJlbWVtYmVyZWRTZXQpCi17Ci0gICAgR0NQSEFTRShDbGVh
clJlbWVtYmVyZWRTZXQpOwotICAgIGZvciAoYXV0byogY2VsbCA6IHJlbWVtYmVyZWRTZXQpCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCktPnNldFJlbWVtYmVyZWQoZmFsc2UpOwot
fQotCiB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpCiB7
CiAgICAgR0NDT1VOVEVSKFZpc2l0ZWRWYWx1ZUNvdW50LCBtX3Nsb3RWaXNpdG9yLnZpc2l0Q291
bnQoKSk7CkBAIC0xMDA4LDkgKzEwMDAsMTMgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRT
ZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9wdGlvbnM6
OmVuYWJsZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBp
ZiAoaXNSZW1lbWJlcmVkKGNlbGwpKQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3RfY2FzdDxK
U0NlbGwqPihjZWxsKS0+c2V0UmVtZW1iZXJlZCh0cnVlKTsKKyAgICBBU1NFUlQoY2VsbC0+Y2Vs
bFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpPbGRCbGFjayk7CisgICAgLy8gSW5kaWNhdGUgdGhhdCB0
aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6Cisg
ICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVyaW5nIGEgY29uY3VycmVudCBjb2xsZWN0aW9u
LgorICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0LgorICAgIC8vICJPbGRHcmV5IiBk
b2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3Vh
bGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCisgICAgLy8gc2FtZS4KKyAgICBjZWxsLT5zZXRD
ZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKICAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRv
TWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGJvb2wgaXNNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBi
b29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHNldE1h
cmtlZChjb25zdCB2b2lkKik7Ci0gICAgc3RhdGljIGJvb2wgaXNSZW1lbWJlcmVkKGNvbnN0IHZv
aWQqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNv
bnN0IEpTQ2VsbCopOwogICAgIHN0YXRpYyBib29sIGlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpOwog
ICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCopOwogICAgIHZvaWQgd3JpdGVCYXJy
aWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwpAQCAtMTY3LDcgKzE2NSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBjYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zOiBDYWxsaW5nIG9ubHkgb25lIG1h
eSB0cmlnZ2VyIGNhdGFzdHJvcGljCiAgICAgLy8gbWVtb3J5IGdyb3d0aC4KICAgICB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7Ci0gICAgdm9pZCByZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQoSlNDZWxsKiwgc2l6ZV90KTsKKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChDZWxsU3RhdGUgY2VsbFN0YXRlQmVmb3JlVmlzaXRpbmcsIHNpemVfdCk7CiAKICAg
ICAvLyBVc2UgdGhpcyBBUEkgdG8gcmVwb3J0IG5vbi1HQyBtZW1vcnkgaWYgeW91IGNhbid0IHVz
ZSB0aGUgYmV0dGVyIEFQSSBhYm92ZS4KICAgICB2b2lkIGRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1l
bW9yeShzaXplX3QpOwpAQCAtMzA2LDcgKzMwNCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0cmFj
ZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKICAgICB2b2lkIGNvbnZlcmdlKCk7CiAg
ICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgY2xl
YXJSZW1lbWJlcmVkU2V0KFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYpOwogICAgIHZvaWQgdXBkYXRl
T2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCByZXNldFZpc2l0b3Jz
KCk7CiAKQEAgLTMyMyw2ICszMjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsRmluYWxpemVycygpOwogICAgIHZvaWQgY2xlYXJVbm1hcmtlZEV4ZWN1dGFibGVz
KCk7CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2VsbCopOwogICAgIHZv
aWQgdXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpOwogICAgIHZvaWQgZGlkRmluaXNoQ29sbGVjdGlv
bihkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgcmVzdW1lQ29tcGlsZXJUaHJlYWRzKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9u
IDE5MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTcwLDE0ICs3MCw2IEBAIGlubGluZSBib29sIEhlYXA6OmlzTGl2ZShjb25z
dCB2b2lkKiBjZWwKICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5pc0xp
dmVDZWxsKGNlbGwpOwogfQogCi1pbmxpbmUgYm9vbCBIZWFwOjppc1JlbWVtYmVyZWQoY29uc3Qg
dm9pZCogcHRyKQotewotICAgIGNvbnN0IEpTQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PGNvbnN0
IEpTQ2VsbCo+KHB0cik7Ci0gICAgQVNTRVJUKGNlbGwpOwotICAgIEFTU0VSVCghT3B0aW9uczo6
ZW5hYmxlQ29uY3VycmVudEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIHJl
dHVybiBjZWxsLT5pc1JlbWVtYmVyZWQoKTsKLX0KLQogaW5saW5lIGJvb2wgSGVhcDo6aXNNYXJr
ZWQoY29uc3Qgdm9pZCogY2VsbCkKIHsKICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmJsb2NrRm9y
KGNlbGwpLT5pc01hcmtlZChjZWxsKTsKQEAgLTExMywyNSArMTA1LDE4IEBAIGlubGluZSB2b2lk
IEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0MKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7
CiAjZW5kaWYKLSAgICBpZiAoIWZyb20gfHwgIWZyb20tPmlzTWFya2VkKCkpIHsKLSAgICAgICAg
QVNTRVJUKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSk7CisgICAgaWYgKCFmcm9tIHx8IGZyb20t
PmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6T2xkQmxhY2spCiAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKCF0byB8fCB0by0+aXNNYXJrZWQoKSkgewotICAgICAgICBBU1NFUlQoIXRv
IHx8IGlzTWFya2VkKHRvKSk7CisgICAgaWYgKCF0byB8fCB0by0+Y2VsbFN0YXRlKCkgIT0gQ2Vs
bFN0YXRlOjpOZXdXaGl0ZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBhZGRUb1JlbWVt
YmVyZWRTZXQoZnJvbSk7CiB9CiAKIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqIGZyb20pCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChjb25z
dF9jYXN0PEpTQ2VsbCo+KGZyb20pKTsKLSAgICBpZiAoIWZyb20gfHwgIWZyb20tPmlzTWFya2Vk
KCkpIHsKLSAgICAgICAgQVNTRVJUKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSk7CisgICAgaWYg
KCFmcm9tIHx8IGZyb20tPmNlbGxTdGF0ZSgpICE9IENlbGxTdGF0ZTo6T2xkQmxhY2spCiAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKGlzTWFya2VkKGZyb20pKTsKICAgICBhZGRU
b1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKQEAgLTE0MSwxMCArMTI2LDEwIEBAIGlubGluZSB2
b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2MKICAgICAgICAgcmVwb3J0RXh0cmFNZW1v
cnlBbGxvY2F0ZWRTbG93Q2FzZShzaXplKTsKIH0KIAotaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKEpTQ2VsbCogb3duZXIsIHNpemVfdCBzaXplKQoraW5saW5lIHZv
aWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBkYXRhQmVmb3JlVmlz
aXRpbmcsIHNpemVfdCBzaXplKQogewogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNv
dW50IHRoZSBleHRyYSBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVj
dGlvbnMuCi0gICAgaWYgKG9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbiAm
JiBIZWFwOjppc1JlbWVtYmVyZWQob3duZXIpKQorICAgIGlmIChvcGVyYXRpb25JblByb2dyZXNz
KCkgPT0gRWRlbkNvbGxlY3Rpb24gJiYgZGF0YUJlZm9yZVZpc2l0aW5nID09IENlbGxTdGF0ZTo6
T2xkR3JleSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90KiBjb3VudGVyID0gJm1fZXh0
cmFNZW1vcnlTaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDExIEBAIHZvaWQg
U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWEKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGNlbGwtPnNldE1hcmtlZCgpOworICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG9i
amVjdCBpcyBncmV5IGFuZCB0aGF0OgorICAgIC8vIEluIGNhc2Ugb2YgY29uY3VycmVudCBHQzog
aXQncyB0aGUgZmlyc3QgdGltZSBpdCBpcyBncmV5IGluIHRoaXMgR0MgY3ljbGUuCisgICAgLy8g
SW4gY2FzZSBvZiBlZGVuIGNvbGxlY3Rpb246IGl0J3MgYSBuZXcgb2JqZWN0IHRoYXQgYmVjYW1l
IGdyZXkgcmF0aGVyIHRoYW4gYW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0LgorICAgIGNlbGwtPnNl
dENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworCiAgICAgYXBwZW5kVG9NYXJrU3RhY2so
Y2VsbCk7CiB9CiAKQEAgLTE1MywyNiArMTU3LDI5IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFRvTWFya1N0YWNrKEpTQ2UKICAgICBtX3N0YWNrLmFwcGVuZChjZWxsKTsKIH0KIAotQUxXQVlT
X0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBKU0NlbGwqIGNlbGwpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0
Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxsKQogewogICAgIEFTU0VSVChIZWFwOjppc01hcmtl
ZChjZWxsKSk7CisKKyAgICBtX2N1cnJlbnRPYmplY3RDZWxsU3RhdGVCZWZvcmVWaXNpdGluZyA9
IGNlbGwtPmNlbGxTdGF0ZSgpOworICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok9s
ZEJsYWNrKTsKICAgICAKICAgICBpZiAoaXNKU1N0cmluZyhjZWxsKSkgewotICAgICAgICBKU1N0
cmluZzo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsK
KyAgICAgICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxs
KSwgKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGlzSlNGaW5hbE9i
amVjdChjZWxsKSkgewotICAgICAgICBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCksIHZpc2l0b3IpOworICAgICAgICBKU0ZpbmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksICp0aGlzKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChpc0pTQXJyYXkoY2VsbCkpIHsKLSAgICAgICAgSlNB
cnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsK
KyAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwp
LCAqdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjZWxsLT5tZXRob2RUYWJs
ZSgpLT52aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksIHZpc2l0b3IpOwor
ICAgIGNlbGwtPm1ldGhvZFRhYmxlKCktPnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwq
PihjZWxsKSwgKnRoaXMpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFs
bGVsKCkKQEAgLTIwOCw3ICsyMTUsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbigpCiAgICAg
d2hpbGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBtX3N0YWNrLnJlZmlsbCgpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJP
ZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX3N0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3Vu
dGRvd24tLTspCi0gICAgICAgICAgICB2aXNpdENoaWxkcmVuKCp0aGlzLCBtX3N0YWNrLnJlbW92
ZUxhc3QoKSk7CisgICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fc3RhY2sucmVtb3ZlTGFzdCgp
KTsKICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KICAgICAKQEAgLTM2NCw3
ICszNzEsMTQgQEAgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKEpTQ2VsbCogb3duZQogICAg
IEFTU0VSVChoZWFwKCktPm1fc3RvcmFnZVNwYWNlLmNvbnRhaW5zKGJsb2NrKSk7CiAKICAgICBM
b2NrSG9sZGVyIGxvY2tlcigmYmxvY2stPndvcmtMaXN0TG9jaygpKTsKLSAgICBpZiAoaGVhcCgp
LT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24gfHwgYmxvY2stPnNob3Vs
ZFJlcG9ydExpdmVCeXRlcyhsb2NrZXIsIG93bmVyKSkgeworICAgIC8vIFdlIGFsd2F5cyByZXBv
cnQgbGl2ZSBieXRlcywgZXhjZXB0IGlmIGR1cmluZyBhbiBlZGVuIGNvbGxlY3Rpb24gd2Ugc2Vl
IGFuIG9sZCBvYmplY3QgcG9pbnRpbmcgdG8gYW4KKyAgICAvLyBvbGQgYmFja2luZyBzdG9yZSBh
bmQgdGhlIG9sZCBvYmplY3QgaXMgYmVpbmcgbWFya2VkIGJlY2F1c2Ugb2YgdGhlIHJlbWVtYmVy
ZWQgc2V0LiBOb3RlIHRoYXQgaWYgd2UKKyAgICAvLyBhc2sgdGhlIG9iamVjdCBpdHNlbGYsIGl0
IHdpbGwgYWx3YXlzIHRlbGwgdXMgdGhhdCBpdCdzIGFuIG9sZCBibGFjayBvYmplY3QgLSBiZWNh
dXNlIGV2ZW4gZHVyaW5nIGFuCisgICAgLy8gZWRlbiBjb2xsZWN0aW9uIHdlIGhhdmUgYWxyZWFk
eSBpbmRpY2F0ZWQgdGhhdCB0aGUgb2JqZWN0IGlzIG9sZC4gVGhhdCdzIHdoeSB3ZSB1c2UgdGhl
CisgICAgLy8gU2xvdFZpc2l0b3IncyBjYWNoZSBvZiB0aGUgb2JqZWN0J3Mgb2xkIHN0YXRlLgor
ICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbgor
ICAgICAgICB8fCAhYmxvY2stPmlzT2xkKCkKKyAgICAgICAgfHwgbV9jdXJyZW50T2JqZWN0Q2Vs
bFN0YXRlQmVmb3JlVmlzaXRpbmcgIT0gQ2VsbFN0YXRlOjpPbGRHcmV5KSB7CiAgICAgICAgIG1f
Ynl0ZXNDb3BpZWQgKz0gYnl0ZXM7CiAgICAgICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMobG9j
a2VyLCBvd25lciwgdG9rZW4sIGJ5dGVzKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTbG90VmlzaXRvcl9oCiAjZGVmaW5l
IFNsb3RWaXNpdG9yX2gKIAorI2luY2x1ZGUgIkNlbGxTdGF0ZS5oIgogI2luY2x1ZGUgIkNvcHlU
b2tlbi5oIgogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgi
CkBAIC0xMDMsNyArMTA0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjb3B5TGF0ZXIoSlNDZWxs
KiwgQ29weVRva2VuLCB2b2lkKiwgc2l6ZV90KTsKICAgICAKLSAgICB2b2lkIHJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZChKU0NlbGwqIG93bmVyLCBzaXplX3QpOworICAgIHZvaWQgcmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNl
SGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqKTsKICAgICB2b2lkIGFkZFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIoVW5jb25kaXRpb25hbEZpbmFsaXplciopOwpAQCAtMTIxLDYgKzEyMiw4
IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3Rz
KCk7CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKICAgICB2b2lkIG1l
cmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihj
b25zdCBKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKIApA
QCAtMTM0LDYgKzEzNyw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwogCisg
ICAgQ2VsbFN0YXRlIG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nIHsgQ2Vs
bFN0YXRlOjpOZXdXaGl0ZSB9OworCiBwdWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAg
IGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24g
MTkwNTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDkgKzkyLDkgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0
b3I6OmFkZFVuY29uZGl0aW9uYQogICAgIG1faGVhcC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJz
LmFkZFRocmVhZFNhZmUodW5jb25kaXRpb25hbEZpbmFsaXplcik7CiB9CiAKLWlubGluZSB2b2lk
IFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoSlNDZWxsKiBvd25lciwgc2l6
ZV90IHNpemUpCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKHNpemVfdCBzaXplKQogewotICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KG93bmVyLCBzaXplKTsKKyAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX2N1
cnJlbnRPYmplY3RDZWxsU3RhdGVCZWZvcmVWaXNpdGluZywgc2l6ZSk7CiB9CiAKIGlubGluZSBI
ZWFwKiBTbG90VmlzaXRvcjo6aGVhcCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NjUsMTIgKzExNjUsMTIgQEAgcHVibGljOgogCiAgICAgSnVtcCBqdW1wSWZJc1JlbWVtYmVyZWRP
ckluRWRlbihHUFJSZWcgY2VsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBicmFuY2hUZXN0OChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbCwgSlND
ZWxsOjpnY0RhdGFPZmZzZXQoKSkpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDgoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6
Y2VsbFN0YXRlT2Zmc2V0KCkpKTsKICAgICB9CiAKICAgICBKdW1wIGp1bXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuKEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIHVpbnQ4X3QqIGFkZHJlc3Mg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Z2NEYXRhT2Zmc2V0
KCk7CisgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihjZWxsKSArIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBicmFu
Y2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRl
QWRkcmVzcyhhZGRyZXNzKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJl
dmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsOCArNDk3LDggQEAgbWFj
cm8gd3JpdGVCYXJyaWVyT25PcGVyYW5kKGNlbGxPcGVyYW5kKQogICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbihjZWxsT3BlcmFuZCwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxv
YWQodDEsIENlbGxUYWcsIHQyLCAud3JpdGVCYXJyaWVyRG9uZSkKICAgICBza2lwSWZJc1JlbWVt
YmVyZWRPckluRWRlbih0MiwgdDEsIHQzLCAKLSAgICAgICAgbWFjcm8oZ2NEYXRhKQotICAgICAg
ICAgICAgYnRibnogZ2NEYXRhLCAud3JpdGVCYXJyaWVyRG9uZQorICAgICAgICBtYWNybyhjZWxs
U3RhdGUpCisgICAgICAgICAgICBidGJueiBjZWxsU3RhdGUsIC53cml0ZUJhcnJpZXJEb25lCiAg
ICAgICAgICAgICBwdXNoIGNmciwgUEMKICAgICAgICAgICAgICMgV2UgbWFrZSB0d28gZXh0cmEg
c2xvdHMgYmVjYXVzZSBjQ2FsbDIgd2lsbCBwb2tlLgogICAgICAgICAgICAgc3VicCA4LCBzcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00MDEs
OCArNDAxLDggQEAgbWFjcm8gd3JpdGVCYXJyaWVyT25PcGVyYW5kKGNlbGxPcGVyYW5kKQogICAg
IGxvYWRpc0Zyb21JbnN0cnVjdGlvbihjZWxsT3BlcmFuZCwgdDEpCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZUNlbGwodDEsIHQyLCAud3JpdGVCYXJyaWVyRG9uZSkKICAgICBza2lwSWZJc1Jl
bWVtYmVyZWRPckluRWRlbih0MiwgdDEsIHQzLCAKLSAgICAgICAgbWFjcm8oZ2NEYXRhKQotICAg
ICAgICAgICAgYnRibnogZ2NEYXRhLCAud3JpdGVCYXJyaWVyRG9uZQorICAgICAgICBtYWNybyhj
ZWxsU3RhdGUpCisgICAgICAgICAgICBidGJueiBjZWxsU3RhdGUsIC53cml0ZUJhcnJpZXJEb25l
CiAgICAgICAgICAgICBwdXNoIFBCLCBQQwogICAgICAgICAgICAgbW92ZSB0MiwgYTEgIyB0MiBj
YW4gYmUgYTAgKG5vdCBvbiA2NCBiaXRzLCBidXQgYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSkKICAg
ICAgICAgICAgIG1vdmUgY2ZyLCBhMApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTkwNTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OTksNyArNzk5LDcgQEAgbWFjcm8gYXJyYXlQcm9maWxlKGNlbGxBbmRJ
bmRleGluZ1R5cGUsIAogZW5kCiAKIG1hY3JvIHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGNl
bGwsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgY29udGludWF0aW9uKQotICAgIGxvYWRiIEpTQ2VsbDo6
bV9nY0RhdGFbY2VsbF0sIHNjcmF0Y2gxCisgICAgbG9hZGIgSlNDZWxsOjptX2NlbGxTdGF0ZVtj
ZWxsXSwgc2NyYXRjaDEKICAgICBjb250aW51YXRpb24oc2NyYXRjaDEpCiBlbmQKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDE5MDU2NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw2ICsyNCw3
IEBACiAjZGVmaW5lIEpTQ2VsbF9oCiAKICNpbmNsdWRlICJDYWxsRGF0YS5oIgorI2luY2x1ZGUg
IkNlbGxTdGF0ZS5oIgogI2luY2x1ZGUgIkNvbnN0cnVjdERhdGEuaCIKICNpbmNsdWRlICJFbnVt
ZXJhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0xNTQsMzYgKzE1NSwxMiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2FuVXNlRmFzdEdldE93blByb3BlcnR5KGNvbnN0IFN0
cnVjdHVyZSYpOwogICAgIEpTVmFsdWUgZmFzdEdldE93blByb3BlcnR5KFZNJiwgU3RydWN0dXJl
JiwgUHJvcGVydHlOYW1lKTsKIAotICAgIGVudW0gR0NEYXRhIDogdWludDhfdCB7Ci0gICAgICAg
IE1hcmtlZCA9IDAsIC8vIFRoZSBvYmplY3QgaGFzIHN1cnZpdmVkIGEgR0MgYW5kIGlzIGluIHRo
ZSBvbGQgZ2VuLgotICAgICAgICBOb3RNYXJrZWQgPSAxLCAvLyBUaGUgb2JqZWN0IGlzIG5ldyBh
bmQgaW4gdGhlIGVkZW4gZ2VuLgotICAgICAgICBNYXJrZWRBbmRSZW1lbWJlcmVkID0gMiwgLy8g
VGhlIG9iamVjdCBpcyBpbiB0aGUgR0MncyByZW1lbWJlcmVkIHNldC4KLQotICAgICAgICAvLyBU
aGUgb2JqZWN0IGJlaW5nIGluIHRoZSBHQydzIHJlbWVtYmVyZWQgc2V0IGltcGxpZXMgdGhhdCBp
dCBpcyBhbHNvCi0gICAgICAgIC8vIE1hcmtlZC4gVGhpcyBpcyBiZWNhdXNlIG9iamVjdHMgYXJl
IG9ubHkgYWRkZWQgdG8gdGhlIHJlbWVtYmVyZWQgc2V0cwotICAgICAgICAvLyBieSB3cml0ZSBi
YXJyaWVycywgYW5kIHdyaXRlIGJhcnJpZXJzIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gb2xkIGdl
bgotICAgICAgICAvLyBvYmplY3RzIHRoYXQgcG9pbnQgdG8gcG90ZW50aWFsIGVkZW4gZ2VuIG9i
amVjdHMuCi0gICAgfTsKLQotICAgIHZvaWQgc2V0TWFya2VkKCkgeyBtX2djRGF0YSA9IE1hcmtl
ZDsgfQotICAgIHZvaWQgc2V0UmVtZW1iZXJlZChib29sIHJlbWVtYmVyZWQpCi0gICAgewotICAg
ICAgICBBU1NFUlQobV9nY0RhdGEgPT0gKHJlbWVtYmVyZWQgPyBNYXJrZWQgOiBNYXJrZWRBbmRS
ZW1lbWJlcmVkKSk7Ci0gICAgICAgIG1fZ2NEYXRhID0gcmVtZW1iZXJlZCA/IE1hcmtlZEFuZFJl
bWVtYmVyZWQgOiBNYXJrZWQ7IAotICAgIH0KLSAgICBib29sIGlzTWFya2VkKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAobV9nY0RhdGEpIHsKLSAgICAgICAgY2FzZSBNYXJrZWQ6Ci0g
ICAgICAgIGNhc2UgTWFya2VkQW5kUmVtZW1iZXJlZDoKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBjYXNlIE5vdE1hcmtlZDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGJvb2wgaXNSZW1lbWJlcmVkKCkgY29uc3QgeyByZXR1
cm4gbV9nY0RhdGEgPT0gTWFya2VkQW5kUmVtZW1iZXJlZDsgfQorICAgIC8vIFRoZSByZWNvbW1l
bmRlZCBpZGlvbSBmb3IgdXNpbmcgY2VsbFN0YXRlKCkgaXMgdG8gc3dpdGNoIG9uIGl0IG9yIHBl
cmZvcm0gYW4gPT0gY29tcGFyaXNvbiBvbiBpdAorICAgIC8vIGRpcmVjdGx5LiBXZSBkZWxpYmVy
YXRlbHkgYXZvaWQgaGVscGVycyBmb3IgdGhpcywgYmVjYXVzZSB3ZSB3YW50IHRyYW5zcGFyZW5j
eSBhYm91dCBob3cgdGhlIHZhcmlvdXMKKyAgICAvLyBDZWxsU3RhdGUgdmFsdWVzIGluZmx1ZW5j
ZXMgb3VyIHZhcmlvdXMgYWxnb3JpdGhtcy4gCisgICAgQ2VsbFN0YXRlIGNlbGxTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2VsbFN0YXRlOyB9CisgICAgCisgICAgdm9pZCBzZXRDZWxsU3RhdGUo
Q2VsbFN0YXRlIGRhdGEpIGNvbnN0IHsgY29uc3RfY2FzdDxKU0NlbGwqPih0aGlzKS0+bV9jZWxs
U3RhdGUgPSBkYXRhOyB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IHN0cnVjdHVyZUlET2Zmc2V0
KCkKICAgICB7CkBAIC0yMDUsOSArMTgyLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9pbmRleGluZ1R5cGUpOwogICAgIH0KIAotICAgIHN0YXRp
YyBwdHJkaWZmX3QgZ2NEYXRhT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IGNlbGxTdGF0
ZU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwg
bV9nY0RhdGEpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9jZWxs
U3RhdGUpOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFy
cmF5U3RvcmFnZVR5cGUgPSBOb3RUeXBlZEFycmF5OwpAQCAtMjQxLDcgKzIxOCw3IEBAIHByaXZh
dGU6CiAgICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOwogICAgIEpTVHlwZSBtX3R5cGU7
CiAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBtX2ZsYWdzOwotICAgIHVpbnQ4X3QgbV9n
Y0RhdGE7CisgICAgQ2VsbFN0YXRlIG1fY2VsbFN0YXRlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVG8sIHR5cGVuYW1lIEZyb20+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBpbmxpbmUgSlNDZWxsOjpKU0Nl
bGwoQ3JlYXRpbmdFYXJseUNlbGxUYWcpCi0gICAgOiBtX2djRGF0YShOb3RNYXJrZWQpCisgICAg
OiBtX2NlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld1doaXRlKQogewogICAgIEFTU0VSVCghaXNDb21w
aWxhdGlvblRocmVhZCgpKTsKIH0KQEAgLTUxLDcgKzUxLDcgQEAgaW5saW5lIEpTQ2VsbDo6SlND
ZWxsKFZNJiwgU3RydWN0dXJlKiBzdAogICAgICwgbV9pbmRleGluZ1R5cGUoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkKICAgICAsIG1fdHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgp
KQogICAgICwgbV9mbGFncyhzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkp
Ci0gICAgLCBtX2djRGF0YShOb3RNYXJrZWQpCisgICAgLCBtX2NlbGxTdGF0ZShDZWxsU3RhdGU6
Ok5ld1doaXRlKQogewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAxOTA1NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OnYKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgT3ZlcnNpemVU
eXBlZEFycmF5OiB7Ci0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRo
aXNPYmplY3QsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICB2aXNpdG9yLnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE5MDU2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBA
IHZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiAKIHsKICAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICAKKwogICAgIGlmICh0b2tl
biAhPSBCdXR0ZXJmbHlDb3B5VG9rZW4pCiAgICAgICAgIHJldHVybjsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDE5MDU2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNywgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpTU3RyaW5nOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgZWxzZSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIGltcGwg
PSB0aGlzT2JqZWN0LT5tX3ZhbHVlLmltcGwoKTsKICAgICAgICAgQVNTRVJUKGltcGwpOwotICAg
ICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LCBpbXBsLT5j
b3N0RHVyaW5nR0MoKSk7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KGltcGwtPmNvc3REdXJpbmdHQygpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCShyZXZpc2lvbiAxOTA1NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVJREJsb2JfaAogI2Rl
ZmluZSBTdHJ1Y3R1cmVJREJsb2JfaAogCisjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVk
ZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZUlEVGFibGUuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICB1LmZp
ZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CiAgICAgICAgIHUuZmllbGRzLnR5cGUg
PSB0eXBlSW5mby50eXBlKCk7CiAgICAgICAgIHUuZmllbGRzLmlubGluZVR5cGVGbGFncyA9IHR5
cGVJbmZvLmlubGluZVR5cGVGbGFncygpOwotICAgICAgICB1LmZpZWxkcy5kZWZhdWx0R0NEYXRh
ID0gSlNDZWxsOjpOb3RNYXJrZWQ7CisgICAgICAgIHUuZmllbGRzLmRlZmF1bHRDZWxsU3RhdGUg
PSBDZWxsU3RhdGU6Ok5ld1doaXRlOwogICAgIH0KIAogICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0
IFN0cnVjdHVyZUlEQmxvYiYgb3RoZXIpIHsgdS5kb3VibGVXb3JkID0gb3RoZXIudS5kb3VibGVX
b3JkOyB9CkBAIC03OSw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlOwogICAgICAgICAgICAgSlNUeXBlIHR5cGU7CiAgICAgICAgICAgICBU
eXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFnczsKLSAgICAgICAgICAgIEpT
Q2VsbDo6R0NEYXRhIGRlZmF1bHRHQ0RhdGE7CisgICAgICAgICAgICBDZWxsU3RhdGUgZGVmYXVs
dENlbGxTdGF0ZTsKICAgICAgICAgfSBmaWVsZHM7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAg
ICAgICBpbnQzMl90IHdvcmQxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha01hcERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBEYXRhLmNwcAkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NCw3
IEBAIHZvaWQgV2Vha01hcERhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICAvLyBSb3Vn
aCBhcHByb3hpbWF0aW9uIG9mIHRoZSBleHRlcm5hbCBzdG9yYWdlIG5lZWRlZCBmb3IgdGhlIGhh
c2h0YWJsZS4KICAgICAvLyBUaGlzIGlzbid0IGV4YWN0LCBidXQgaXQgaXMgY2xvc2UgZW5vdWdo
LCBhbmQgcHJvcG9ydGlvbmFsIHRvIHRoZSBhY3R1YWwKICAgICAvLyBleHRlcm5hbCBtZXJtb3J5
IHVzYWdlLgotICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmosIHRo
aXNPYmotPm1fbWFwLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKEpTT2JqZWN0KikgKyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKHRoaXNPYmotPm1fbWFwLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKEpTT2JqZWN0KikgKyBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogfQogCiB2b2lkIFdlYWtNYXBEYXRhOjpzZXQo
Vk0mIHZtLCBKU09iamVjdCoga2V5LCBKU1ZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9iYXNpYy1lZGVuLWdjLXRlc3QuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9iYXNpYy1lZGVuLWdjLXRlc3Qu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Jh
c2ljLWVkZW4tZ2MtdGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKK3ZhciBv
ID0ge2Y6NDJ9OworZWRlbkdDKCk7Cit2YXIgcCA9IHtmOjQyfTsKK2VkZW5HQygpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMTkwNTY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMTAtMDMgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBhbiBvYmplY3QncyBtYXJraW5nIHN0
YXRlIHRvIHRyYWNrIFRoZSBUaHJlZSBDb2xvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTY1NAorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2Zm
cmV5IEdhcmVuLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlv
ci4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAg
ICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisKIDIwMTUtMTAtMDUgIE15bGVzIEMuIE1h
eGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnByZWZpeCAtd2Via2l0
LWZvbnQtZmVhdHVyZS1zZXR0aW5ncwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDE5MDU2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTg5LDcgKzI5ODksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3IpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tTWFya0Z1bmN0aW9uIn07CiAgICAgICAgIGlmICgkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVwb3J0RXh0cmFNZW1vcnlDb3N0In0pIHsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHZpc2l0b3IucmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKGNlbGwsIHRoaXNPYmplY3QtPmltcGwoKS5tZW1vcnlDb3N0KCkpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2aXNpdG9yLnJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZCh0aGlzT2JqZWN0LT5pbXBsKCkubWVtb3J5Q29zdCgpKTtcbiIpOwogICAg
ICAgICB9CiAgICAgICAgIGlmICgkbnVtQ2FjaGVkQXR0cmlidXRlcyA+IDApIHsKICAgICAgICAg
ICAgIGZvcmVhY2ggKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>