<?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>114909</bug_id>
          
          <creation_ts>2013-04-21 00:53:00 -0700</creation_ts>
          <short_desc>fourthTier: It should be possible to query WatchpointSets, and add Watchpoints, even if the compiler is running in another thread</short_desc>
          <delta_ts>2013-04-21 10:10:50 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>112839</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>878833</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-21 00:53:00 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878835</commentid>
    <comment_count>1</comment_count>
      <attachid>198958</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-21 01:10:02 -0700</bug_when>
    <thetext>Created attachment 198958
the patch

Will run a few more tests before setting r?.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878866</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-21 09:02:22 -0700</bug_when>
    <thetext>It passes tests and performance is neutral:


Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r148801)
&quot;AsyncWatchpoint&quot; at /Volumes/Data/fromMiniMe/fourthTier/primary/OpenSource/WebKitBuild/Release/jsc (r148817)

Collected 12 samples per benchmark/VM, with 4 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              AsyncWatchpoint                                  
SunSpider:
   3d-cube                                         9.4624+-0.1453            9.4223+-0.1742        
   3d-morph                                        8.7642+-0.1370     ?      8.7911+-0.1146        ?
   3d-raytrace                                    10.4555+-0.1426     ?     10.4793+-0.1526        ?
   access-binary-trees                             1.8919+-0.0087     ?      1.8930+-0.0072        ?
   access-fannkuch                                 7.7708+-0.1319     ?      7.8142+-0.1211        ?
   access-nbody                                    4.6838+-0.0331            4.6431+-0.0645        
   access-nsieve                                   4.9935+-0.0455            4.9643+-0.0546        
   bitops-3bit-bits-in-byte                        1.8463+-0.0107     ?      1.8471+-0.0105        ?
   bitops-bits-in-byte                             7.1302+-0.0857            7.1246+-0.0887        
   bitops-bitwise-and                              2.7807+-0.0796     ?      2.8067+-0.0751        ?
   bitops-nsieve-bits                              4.7958+-0.0096            4.7749+-0.0761        
   controlflow-recursive                           3.1401+-0.0471            3.1401+-0.0455        
   crypto-aes                                      7.8139+-0.1309     ?      7.8883+-0.1089        ?
   crypto-md5                                      4.2853+-0.0540            4.2595+-0.0581        
   crypto-sha1                                     3.3175+-0.0198            3.3062+-0.0138        
   date-format-tofte                              15.1240+-0.1486     ?     15.4249+-0.2291        ? might be 1.0199x slower
   date-format-xparb                               9.4658+-0.1562     ?      9.5160+-0.2004        ?
   math-cordic                                     4.0511+-0.0079     ?      4.0637+-0.0102        ?
   math-partial-sums                              12.4888+-0.1076     ?     12.5577+-0.0958        ?
   math-spectral-norm                              3.1695+-0.0113     ?      3.1724+-0.0109        ?
   regexp-dna                                     12.7374+-0.1913           12.6778+-0.1800        
   string-base64                                   5.1015+-0.0663     ?      5.1196+-0.0714        ?
   string-fasta                                   10.8545+-0.1200           10.7632+-0.0887        
   string-tagcloud                                14.6706+-0.4138           14.3995+-0.2115          might be 1.0188x faster
   string-unpack-code                             28.0774+-0.1330     ?     28.2238+-0.1609        ?
   string-validate-input                           7.4179+-0.1888            7.2902+-0.1626          might be 1.0175x faster

   &lt;arithmetic&gt; *                                  7.9342+-0.0603     ?      7.9371+-0.0676        ? might be 1.0004x slower
   &lt;geometric&gt;                                     6.3961+-0.0393            6.3941+-0.0440          might be 1.0003x faster
   &lt;harmonic&gt;                                      5.1598+-0.0226            5.1586+-0.0235          might be 1.0002x faster

                                                     TipOfTree              AsyncWatchpoint                                  
V8Spider:
   crypto                                         87.2282+-0.1259     ?     87.3277+-0.2366        ?
   deltablue                                     132.0973+-1.1899          132.0719+-0.5306        
   earley-boyer                                   83.3092+-0.4370     ?     83.3627+-0.2017        ?
   raytrace                                       62.3065+-0.1704     ^     61.8550+-0.1119        ^ definitely 1.0073x faster
   regexp                                        101.1329+-0.2940     ?    101.7167+-0.4171        ?
   richards                                      118.9968+-0.6657     ?    119.0017+-0.5574        ?
   splay                                          48.7871+-0.2888           48.5905+-0.2400        

   &lt;arithmetic&gt;                                   90.5511+-0.2803     ?     90.5609+-0.1667        ? might be 1.0001x slower
   &lt;geometric&gt; *                                  86.1118+-0.2183           86.0645+-0.1535          might be 1.0005x faster
   &lt;harmonic&gt;                                     81.5090+-0.1909           81.3934+-0.1503          might be 1.0014x faster

                                                     TipOfTree              AsyncWatchpoint                                  
Octane and V8v7:
   encrypt                                        0.46978+-0.00087          0.46953+-0.00061       
   decrypt                                        8.67871+-0.02157    ?     8.68315+-0.01952       ?
   deltablue                             x2       0.60710+-0.00076    !     0.61180+-0.00224       ! definitely 1.0077x slower
   earley                                         0.92465+-0.00268    ^     0.91257+-0.00510       ^ definitely 1.0132x faster
   boyer                                         12.78433+-0.04596         12.76024+-0.03643       
   raytrace                              x2       4.43748+-0.01728    ?     4.45391+-0.01871       ?
   regexp                                x2      32.28146+-0.12836    ?    32.38265+-0.14827       ?
   richards                              x2       0.30771+-0.00050    !     0.30907+-0.00067       ! definitely 1.0044x slower
   splay                                 x2       0.64992+-0.02267          0.64487+-0.02560       
   navier-stokes                         x2      10.79971+-0.01594    ?    10.81099+-0.01362       ?
   closure                                        0.30974+-0.03575          0.30765+-0.03478       
   jquery                                         4.39805+-0.55037          4.39443+-0.54967       
   gbemu                                 x2     250.46442+-17.54922   ?   251.17726+-16.61362      ?
   box2d                                 x2      31.89373+-0.09990         31.86387+-0.08341       

V8v7:
   &lt;arithmetic&gt;                                   7.56402+-0.01823    ?     7.57825+-0.02143       ? might be 1.0019x slower
   &lt;geometric&gt; *                                  2.45101+-0.01118    ?     2.45232+-0.01260       ? might be 1.0005x slower
   &lt;harmonic&gt;                                     0.94234+-0.00594    ?     0.94310+-0.00644       ? might be 1.0008x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  31.38402+-1.61235    ?    31.45620+-1.52198       ? might be 1.0023x slower
   &lt;geometric&gt; *                                  4.39824+-0.06722    ?     4.39947+-0.06493       ? might be 1.0003x slower
   &lt;harmonic&gt;                                     1.06842+-0.01895          1.06809+-0.01880         might be 1.0003x faster

                                                     TipOfTree              AsyncWatchpoint                                  
Kraken:
   ai-astar                                       493.774+-0.682      ?     494.101+-2.040         ?
   audio-beat-detection                           245.283+-1.078            244.899+-1.546         
   audio-dft                                      324.144+-4.368            321.877+-1.785         
   audio-fft                                      143.387+-0.327            143.356+-0.323         
   audio-oscillator                               235.257+-1.053            234.735+-0.939         
   imaging-darkroom                               293.383+-1.008            293.314+-1.505         
   imaging-desaturate                             160.295+-0.181      ?     160.326+-0.281         ?
   imaging-gaussian-blur                          397.754+-0.379            397.596+-0.222         
   json-parse-financial                            81.910+-0.407      ?      82.256+-0.232         ?
   json-stringify-tinderbox                       101.296+-0.506      ?     103.138+-2.279         ? might be 1.0182x slower
   stanford-crypto-aes                            239.862+-3.231            237.746+-2.138         
   stanford-crypto-ccm                            111.108+-0.233      !     112.205+-0.622         ! definitely 1.0099x slower
   stanford-crypto-pbkdf2                         276.695+-3.548            275.209+-1.518         
   stanford-crypto-sha256-iterative               115.207+-0.603      !     117.162+-0.527         ! definitely 1.0170x slower

   &lt;arithmetic&gt; *                                 229.954+-0.610            229.851+-0.466           might be 1.0004x faster
   &lt;geometric&gt;                                    200.902+-0.473      ?     201.243+-0.458         ? might be 1.0017x slower
   &lt;harmonic&gt;                                     174.731+-0.332      !     175.518+-0.434         ! definitely 1.0045x slower

                                                     TipOfTree              AsyncWatchpoint                                  
JSRegress:
   adapt-to-double-divide                         22.5302+-0.1057     ?     22.5787+-0.1234        ?
   aliased-arguments-getbyval                      0.9189+-0.0106     ?      0.9470+-0.0410        ? might be 1.0305x slower
   allocate-big-object                             2.5424+-0.0316     ?      2.5571+-0.0377        ?
   arity-mismatch-inlining                         0.7512+-0.0344     ?      0.7817+-0.0119        ? might be 1.0407x slower
   array-access-polymorphic-structure              7.1277+-0.0784            7.1149+-0.0945        
   array-with-double-add                           5.8235+-0.0965            5.8178+-0.0903        
   array-with-double-increment                     4.1918+-0.0913            4.1024+-0.0226          might be 1.0218x faster
   array-with-double-mul-add                       7.0358+-0.0976            7.0291+-0.0911        
   array-with-double-sum                           7.8648+-0.0929     ?      7.9663+-0.1044        ? might be 1.0129x slower
   array-with-int32-add-sub                       10.4483+-0.0938     ?     10.4626+-0.1130        ?
   array-with-int32-or-double-sum                  7.9779+-0.1283     ?      8.0149+-0.1162        ?
   big-int-mul                                     4.9039+-0.0782     ?      4.9555+-0.0592        ? might be 1.0105x slower
   boolean-test                                    4.4169+-0.0567     ?      4.4412+-0.0657        ?
   cast-int-to-double                             14.0205+-0.1479           13.9701+-0.1233        
   cell-argument                                  14.5516+-0.1415           14.4529+-0.1227        
   cfg-simplify                                    3.9043+-0.0610     ?      3.9722+-0.0638        ? might be 1.0174x slower
   cmpeq-obj-to-obj-other                         11.5072+-0.1087           11.4853+-0.0747        
   constant-test                                   8.3773+-0.1539     ?      8.5387+-0.1066        ? might be 1.0193x slower
   direct-arguments-getbyval                       0.8446+-0.0110     ?      0.8449+-0.0105        ?
   double-pollution-getbyval                      10.8089+-0.1330           10.7741+-0.0976        
   double-pollution-putbyoffset                    5.0089+-0.0620     ?      5.0534+-0.1314        ?
   empty-string-plus-int                          11.0564+-0.1943     ?     11.1526+-0.2270        ?
   external-arguments-getbyval                     2.2160+-0.0307            2.2115+-0.0302        
   external-arguments-putbyval                     3.3107+-0.0158     !      3.7802+-0.0550        ! definitely 1.1418x slower
   Float32Array-matrix-mult                       14.2549+-0.0713     ^     14.1156+-0.0482        ^ definitely 1.0099x faster
   fold-double-to-int                             22.0906+-0.1712     ?     22.0965+-0.1658        ?
   function-dot-apply                              3.2028+-0.0164            3.1925+-0.0103        
   function-test                                   4.9566+-0.0856     ?      5.0777+-0.0738        ? might be 1.0244x slower
   get-by-id-chain-from-try-block                  7.3224+-0.0948     ?      7.3895+-0.1015        ?
   HashMap-put-get-iterate-keys                   96.7845+-0.9027           96.3328+-0.4724        
   HashMap-put-get-iterate                        98.4063+-0.7154           97.7445+-0.3230        
   HashMap-string-put-get-iterate                 74.7816+-0.6955     ?     74.9352+-0.3704        ?
   indexed-properties-in-objects                   4.5315+-0.0575     ?      4.5745+-0.0197        ?
   inline-arguments-access                         1.2596+-0.0095     ?      1.2618+-0.0094        ?
   inline-arguments-local-escape                  23.2648+-0.1731     ?     23.3715+-0.1577        ?
   inline-get-scoped-var                           6.5789+-0.1027     ?      6.5924+-0.1007        ?
   inlined-put-by-id-transition                   16.4556+-0.2793           16.4019+-0.3461        
   int-or-other-abs-then-get-by-val                8.8608+-0.1154     ?      8.8766+-0.0923        ?
   int-or-other-abs-zero-then-get-by-val          37.2535+-0.2033           37.0774+-0.0990        
   int-or-other-add-then-get-by-val               10.2087+-0.1034           10.1830+-0.0814        
   int-or-other-add                               10.4865+-0.1052     ?     10.5036+-0.1010        ?
   int-or-other-div-then-get-by-val                7.9775+-0.1145            7.9276+-0.0972        
   int-or-other-max-then-get-by-val               10.0269+-0.1688            9.9725+-0.2601        
   int-or-other-min-then-get-by-val                8.1689+-0.1159     ?      8.2354+-0.1030        ?
   int-or-other-mod-then-get-by-val                8.0470+-0.0967     ?      8.1255+-0.1014        ?
   int-or-other-mul-then-get-by-val                7.2257+-0.1003            7.1286+-0.0867          might be 1.0136x faster
   int-or-other-neg-then-get-by-val                8.0812+-0.1071     ?      8.1594+-0.0810        ?
   int-or-other-neg-zero-then-get-by-val          36.4790+-0.1145     ?     36.5684+-0.1985        ?
   int-or-other-sub-then-get-by-val               10.2469+-0.1167           10.2370+-0.1108        
   int-or-other-sub                                8.3189+-0.1053            8.2137+-0.1018          might be 1.0128x faster
   int-overflow-local                             12.9351+-0.1322     ?     12.9373+-0.1206        ?
   Int16Array-bubble-sort                         49.3897+-0.1907     ?     50.1629+-0.8762        ? might be 1.0157x slower
   Int16Array-load-int-mul                         1.8925+-0.0055     ?      1.8974+-0.0068        ?
   Int8Array-load                                  4.8892+-0.0107            4.8803+-0.0129        
   integer-divide                                 15.0988+-0.0764     ?     15.2006+-0.1232        ?
   integer-modulo                                  2.1066+-0.0174     ?      2.1426+-0.0275        ? might be 1.0171x slower
   make-indexed-storage                            3.9147+-0.0429            3.9077+-0.0390        
   method-on-number                               23.9023+-0.5875     ?     24.7478+-0.4397        ? might be 1.0354x slower
   nested-function-parsing-random                382.7736+-13.1703         381.5584+-12.9494       
   nested-function-parsing                        47.6313+-1.1389     ?     47.7922+-1.1046        ?
   new-array-buffer-dead                           3.6326+-0.0129     ?      3.6368+-0.0135        ?
   new-array-buffer-push                          10.4611+-0.1650           10.4217+-0.1559        
   new-array-dead                                 28.3557+-0.1237     ?     28.3615+-0.1313        ?
   new-array-push                                  6.9400+-0.0787     ?      6.9927+-0.1202        ?
   number-test                                     4.3232+-0.0569     ?      4.3364+-0.0525        ?
   object-closure-call                             8.3630+-0.0943            8.2623+-0.0888          might be 1.0122x faster
   object-test                                     4.9699+-0.1383            4.9302+-0.0736        
   poly-stricteq                                  92.9717+-1.5753           91.7579+-1.3271          might be 1.0132x faster
   polymorphic-structure                          20.0726+-0.1116     ?     20.1121+-0.1343        ?
   polyvariant-monomorphic-get-by-id              12.4976+-0.0943     ?     12.5325+-0.1038        ?
   rare-osr-exit-on-local                         20.6530+-0.1318           20.5966+-0.1113        
   register-pressure-from-osr                     31.5627+-0.0896           31.5355+-0.1076        
   simple-activation-demo                         34.3696+-0.0929     ?     34.5448+-0.1372        ?
   slow-array-profile-convergence                  4.3020+-0.0081     ?      4.3051+-0.0120        ?
   slow-convergence                                3.8152+-0.0065     ?      3.8180+-0.0086        ?
   sparse-conditional                              1.3317+-0.0109     ?      1.3337+-0.0115        ?
   splice-to-remove                               50.8382+-0.1646           50.6242+-0.4726        
   string-concat-object                            2.7502+-0.0338            2.7253+-0.0427        
   string-concat-pair-object                       2.7024+-0.0637            2.6427+-0.0540          might be 1.0226x faster
   string-concat-pair-simple                      17.2599+-0.2702           17.0091+-0.2748          might be 1.0147x faster
   string-concat-simple                           17.2897+-0.3134     ?     17.3113+-0.2563        ?
   string-cons-repeat                             10.1218+-0.0308     ?     10.1488+-0.0278        ?
   string-cons-tower                              10.9965+-0.0286           10.9741+-0.0222        
   string-equality                               104.6941+-0.1362     ?    105.1322+-0.3684        ?
   string-hash                                     2.6567+-0.0076     ?      2.6619+-0.0077        ?
   string-repeat-arith                            50.4775+-3.2931           48.4711+-0.6091          might be 1.0414x faster
   string-sub                                     91.5338+-0.4826     ?     91.5724+-0.4627        ?
   string-test                                     4.2714+-0.0240     ?      4.3334+-0.0571        ? might be 1.0145x slower
   structure-hoist-over-transitions                3.2805+-0.0247            3.2740+-0.0270        
   tear-off-arguments-simple                       1.7914+-0.0110     ?      1.8009+-0.0121        ?
   tear-off-arguments                              3.3943+-0.0093     ?      3.3987+-0.0084        ?
   temporal-structure                             21.1307+-0.3393           20.8991+-0.0782          might be 1.0111x faster
   to-int32-boolean                               30.6167+-0.0895           30.6167+-0.1125        
   undefined-test                                  4.5638+-0.0373     ?      4.5778+-0.0389        ?

   &lt;arithmetic&gt;                                   21.0738+-0.1482           21.0445+-0.1578          might be 1.0014x faster
   &lt;geometric&gt; *                                   9.4486+-0.0290     ?      9.4749+-0.0289        ? might be 1.0028x slower
   &lt;harmonic&gt;                                      5.1933+-0.0259     ?      5.2352+-0.0182        ? might be 1.0081x slower

                                                     TipOfTree              AsyncWatchpoint                                  
All benchmarks:
   &lt;arithmetic&gt;                                   41.2938+-0.3067           41.2787+-0.3169          might be 1.0004x faster
   &lt;geometric&gt;                                    11.4485+-0.0539     ?     11.4681+-0.0555        ? might be 1.0017x slower
   &lt;harmonic&gt;                                      3.7126+-0.0331     ?      3.7244+-0.0332        ? might be 1.0032x slower

                                                     TipOfTree              AsyncWatchpoint                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                                23.0651+-0.1274     ?     23.0763+-0.1305        ? might be 1.0005x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878875</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-21 10:10:50 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/148836</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198958</attachid>
            <date>2013-04-21 01:10:02 -0700</date>
            <delta_ts>2013-04-21 09:46:05 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55242</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4ODE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAxMy0wNC0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBxdWVyeSBXYXRjaHBvaW50U2V0
cywgYW5kIGFkZCBXYXRjaHBvaW50cywgZXZlbiBpZiB0aGUgY29tcGlsZXIgaXMgcnVubmluZyBp
biBhbm90aGVyIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE0OTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgYSBjb25jdXJyZW50IGNvbXBp
bGVyIHdpbGwgdXNlIHdhdGNocG9pbnQgc2V0cyBhcyBmb2xsb3dzOgorICAgICAgICAKKyAgICAg
ICAgRHVyaW5nIGNvbmN1cnJlbnQgY29tcGlsYXRpb246IEl0IHdpbGwgY3JlYXRlIFdhdGNocG9p
bnRzLCBhbmQgcXVlcnkgV2F0Y2hwb2ludFNldHMgb25seQorICAgICAgICBmb3IgdGhlIHB1cnBv
c2Ugb2YgcHJvZmlsaW5nLiBUaGF0IGlzLCBpdCB3aWxsIHVzZSBkZWNpZGUgd2hldGhlciBpdCBp
cyBwcm9maXRhYmxlIHRvCisgICAgICAgIGNvbXBpbGUgdGhlIGNvZGUgImFzIGlmIiB0aGUgd2F0
Y2hwb2ludCBzZXRzIGFyZSB2YWxpZC4KKyAgICAgICAgCisgICAgICAgIER1cmluZyBzeW5jaHJv
bm91cyBsaW5raW5nOiBCeSAibGlua2luZyIgSSBkb24ndCBuZWNlc3NhcmlseSBtZWFuIHRoZSBM
aW5rQnVmZmVyIHN0dWZmLAorICAgICAgICBidXQganVzdCB0aGUgdmVyeSBiaXR0ZXIgZW5kIG9m
IGNvbXBpbGF0aW9uIHdoZXJlIHdlIG1ha2UgdGhlIEpJVCBjb2RlIGNhbGxhYmxlLiBUaGlzCisg
ICAgICAgIGNhbiBoYXBwZW4gYWZ0ZXIgTGlua0J1ZmZlciBzdHVmZi4gQW55d2F5LCB0aGlzIHdp
bGwgaGF2ZSB0byBoYXBwZW4gc3luY2hyb25vdXNseSwgYW5kCisgICAgICAgIGF0IHRoYXQgcG9p
bnQgd2UgY2FuIChhKSBjaGVjayB0aGF0IGFsbCBXYXRjaHBvaW50U2V0cyB0aGF0IHdlIGFzc3Vt
ZWQgd2VyZSB2YWxpZCBhcmUKKyAgICAgICAgc3RpbGwgdmFsaWQgYW5kIChiKSBpZiB0aGV5IGFy
ZSB0aGVuIHdlIGFkZCB0aGUgd2F0Y2hwb2ludHMgdG8gdGhvc2Ugc2V0cy4gSWYgYW55IG9mIHRo
ZQorICAgICAgICBzZXRzIGFyZSBpbnZhbGlkLCB3ZSBnaXZlIHVwIG9uIHRoaXMgY29tcGlsYXRp
b24gYW5kIHRyeSBhZ2FpbiBsYXRlci4KKyAgICAgICAgCisgICAgICAgIFRoZSBxdWVyeWluZyBv
ZiBXYXRjaHBvaW50U2V0cyBpcyBlbmdpbmVlcmVkIHRvIHNheSB0aGF0IHRoZSBzZXQgaXMgc3Rp
bGwgdmFsaWQgaWYgaXQKKyAgICAgICAgaXMgc28gKnJpZ2h0IG5vdyosIGJ1dCB0aGlzIGlzIGRv
bmUgaW4gYSByYWN5IHdheSBhbmQgc28gaXQgbWF5IHNheSBzbyBzcHVyaW91c2x5OiB3ZQorICAg
ICAgICBtYXksIHdpdGggaG9wZWZ1bGx5IGxvdyBwcm9iYWJpbGl0eSwgaGF2ZSBhIHNldCB0aGF0
IHNheXMgaXQgaXMgdmFsaWQgZXZlbiB0aG91Z2ggaXQgd2FzCisgICAgICAgIGp1c3QgaW52YWxp
ZGF0ZWQuIFRoZSBnb2FsIGlzIG9ubHkgdG8gZW5zdXJlIHRoYXQgKGkpIGEgc2V0IG5ldmVyIGNs
YWltcyB0byBiZSBpbnZhbGlkCisgICAgICAgIGlmIGl0IGlzIGFjdHVhbGx5IHZhbGlkLCAoaWkp
IGEgc2V0IGRvZXNuJ3QgY2xhaW0gdG8gYmUgdmFsaWQgaWYgaXQgd2FzIGludmFsaWRhdGVkCisg
ICAgICAgIGJlZm9yZSBjb21waWxhdGlvbiBldmVuIGJlZ2FuLCBhbmQgKGlpaSkgcXVlcnlpbmcg
dGhlIHZhbGlkaXR5IG9mIGEgc2V0IGRvZXNuJ3QgY2F1c2UgdXMKKyAgICAgICAgdG8gY3Jhc2gu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGJ5dGVjb2RlL1dhdGNocG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVX
YXRjaHBvaW50U2V0OjppbmZsYXRlU2xvdyk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2lu
dC5oOgorICAgICAgICAoV2F0Y2hwb2ludFNldCk6CisgICAgICAgIChJbmxpbmVXYXRjaHBvaW50
U2V0KToKKyAgICAgICAgKEpTQzo6SW5saW5lV2F0Y2hwb2ludFNldDo6aGFzQmVlbkludmFsaWRh
dGVkKToKKyAgICAgICAgKEpTQzo6SW5saW5lV2F0Y2hwb2ludFNldDo6aXNUaGluKToKKyAgICAg
ICAgKEpTQzo6SW5saW5lV2F0Y2hwb2ludFNldDo6aXNGYXQpOgorICAgICAgICAoSlNDOjpJbmxp
bmVXYXRjaHBvaW50U2V0OjpmYXQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJl
ZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkRl
c2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRXYXRjaHBvaW50cyk6CisgICAgICAgIChKU0M6OkRG
Rzo6RGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRl
c2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVk
V2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Oldh
dGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDo6V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRj
aHBvaW50U2V0KToKKyAgICAgICAgKFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldCk6
CisgICAgICAgIChHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZH
OjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkp
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6YXJlU3Rp
bGxWYWxpZCk6CisgICAgICAgIChEZXNpcmVkV2F0Y2hwb2ludHMpOgorICAgICAgICAqIGRmZy9E
RkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkTGF6
aWx5KToKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVl
cEhvbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZU5vblBlZXBob2xlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0
eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9i
amVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JP
dGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAg
ICAgKiBmdGwvRlRMQ29tcGlsZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwvRlRM
U3RhdGUuaDoKKyAgICAgICAgKFN0YXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24u
aDoKKyAgICAgICAgKEpTRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjphbGxv
Y2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
Lmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0KToKKwogMjAxMy0wNC0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IHZhbHVlIHByb2ZpbGVzIGFuZCBhcnJh
eSBwcm9maWxlcyBzaG91bGQgYmUgdGhyZWFkLXNhZmUgZW5vdWdoIHRvIGJlIGFjY2Vzc2libGUg
aW4gYSBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE0ODgwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDksNiArMzA5LDggQEAKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAv
KiBPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2
QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9OworCQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4RjUgLyog
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwICovOyB9OworCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVz
aXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZF
QTBBMDgxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwOUZEMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMDkxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxp
dGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVBMDlGRTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKIAkJ
MEZFQTBBMEExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkYxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTENhcGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xMjgyLDYgKzEyODQsOCBAQAogCQkwRkREQkZCMzE2NjZFRUQ1
MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRj
aHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8q
IEZUTEFiYnJldmlhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
QWJicmV2aWF0aW9ucy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFi
aWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExDYXBh
YmlsaXRpZXMuY3BwOyBwYXRoID0gZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmls
aXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQ2FwYWJpbGl0aWVz
Lmg7IHBhdGggPSBmdGwvRlRMQ2FwYWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yODM1LDYgKzI4MzksOCBAQAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdDU0VQaGFzZS5oICovLAogCQkJCTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdE
Q0VQaGFzZS5jcHAgKi8sCiAJCQkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBo
YXNlLmggKi8sCisJCQkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRj
aHBvaW50cy5jcHAgKi8sCisJCQkJMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5oICovLAogCQkJCTBGRjQyNzYxMTU5MUExQzkwMDRDQjlGRiAvKiBERkdE
aXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzYyMTU5MUExQzkwMDRDQjlGRiAvKiBERkdE
aXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9t
aW5hdG9ycy5jcHAgKi8sCkBAIC0zNDE1LDYgKzM0MjEsNyBAQAogCQkJCUZFMjBDRTlFMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0
QkJCMTZDMDBCRkUyNzIgLyogTExJbnRDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4
MEQzMTRCQkQxNjcwMEJGRTI3MiAvKiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEI4MzlCMTRCQ0Y0NjAwMDg4NUI0RiAvKiBMTEludEVudHJ5cG9pbnRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBBMzE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRF
eGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIg
LyogTExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVhZGVycyAqLywKQEAgLTQwNzgsNiArNDA4
NSw3IEBACiAJCQkJMEZGMEYxOUYxNkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8q
IEZ1bmN0aW9uUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRDU4QzM0MTU5MTJG
RUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjM5RDFBMTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjExMjJFMTE1REQ5QUIzMDA3
OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAkocmV2aXNpb24g
MTQ4ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04Nyw2ICs4Nyw3IEBAIFdhdGNocG9pbnRTZXQqIElubGluZVdhdGNo
cG9pbnRTZXQ6OmluZmwKICAgICAgICAgZmF0LT5tX2lzSW52YWxpZGF0ZWQgPSB0cnVlOwogICAg
IGlmIChtX2RhdGEgJiBJc1dhdGNoZWRGbGFnKQogICAgICAgICBmYXQtPm1faXNXYXRjaGVkID0g
dHJ1ZTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1fZGF0YSA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KGZhdCk7CiAgICAgcmV0dXJuIGZhdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTQ4ODAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTQsNyArNTQsMTEgQEAgcHVibGljOgogICAgIFdhdGNocG9pbnRTZXQoSW5pdGlhbFdh
dGNocG9pbnRTZXRNb2RlKTsKICAgICB+V2F0Y2hwb2ludFNldCgpOwogICAgIAorICAgIC8vIEl0
IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZyb20gYW5vdGhlciB0aHJlYWQuICBJdCBtYXkgcmV0dXJu
IHRydWUKKyAgICAvLyBldmVuIGlmIHRoZSBzZXQgYWN0dWFsbHkgaGFkIGJlZW4gaW52YWxpZGF0
ZWQsIGJ1dCB0aGF0IG91Z2h0IHRvIGhhcHBlbgorICAgIC8vIG9ubHkgaW4gdGhlIGNhc2Ugb2Yg
cmFjZXMsIGFuZCBzaG91bGQgYmUgcmFyZS4KICAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuICFtX2lzSW52YWxpZGF0ZWQ7IH0KKyAgICAvLyBMaWtlIGlzU3RpbGxWYWxpZCgp
LCBtYXkgYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQuCiAgICAgYm9vbCBoYXNCZWVuSW52
YWxpZGF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSW52YWxpZGF0ZWQ7IH0KICAgICAKICAgICAv
LyBBcyBhIGNvbnZlbmllbmNlLCB0aGlzIHdpbGwgaWdub3JlIDAuIFRoYXQncyBiZWNhdXNlIGNv
ZGUgcGF0aHMgaW4gdGhlIERGRwpAQCAtMTI0LDEzICsxMjgsMjAgQEAgcHVibGljOgogICAgICAg
ICBmcmVlRmF0KCk7CiAgICAgfQogICAgIAorICAgIC8vIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlz
IGZyb20gYW5vdGhlciB0aHJlYWQuICBJdCBtYXkgcmV0dXJuIGZhbHNlCisgICAgLy8gZXZlbiBp
ZiB0aGUgc2V0IGFjdHVhbGx5IGhhZCBiZWVuIGludmFsaWRhdGVkLCBidXQgdGhhdCBvdWdodCB0
byBoYXBwZW4KKyAgICAvLyBvbmx5IGluIHRoZSBjYXNlIG9mIHJhY2VzLCBhbmQgc2hvdWxkIGJl
IHJhcmUuCiAgICAgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgaWYgKGlzRmF0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmF0KCktPmhhc0JlZW5JbnZhbGlk
YXRlZCgpOwotICAgICAgICByZXR1cm4gbV9kYXRhICYgSXNJbnZhbGlkYXRlZEZsYWc7CisgICAg
ICAgIHVpbnRwdHJfdCBkYXRhID0gbV9kYXRhOworICAgICAgICBpZiAoaXNGYXQoZGF0YSkpIHsK
KyAgICAgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICAgICAgcmV0dXJuIGZh
dChkYXRhKS0+aGFzQmVlbkludmFsaWRhdGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGRhdGEgJiBJc0ludmFsaWRhdGVkRmxhZzsKICAgICB9CiAgICAgCisgICAgLy8gTGlrZSBoYXNC
ZWVuSW52YWxpZGF0ZWQoKSwgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgogICAg
IGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhaGFzQmVl
bkludmFsaWRhdGVkKCk7CkBAIC0xNjMsMTkgKzE3NCwyNyBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyBjb25zdCB1aW50cHRyX3QgSXNJbnZhbGlkYXRlZEZsYWcgPSAyOwogICAgIHN0YXRpYyBjb25z
dCB1aW50cHRyX3QgSXNXYXRjaGVkRmxhZyAgICAgPSA0OwogICAgIAotICAgIGJvb2wgaXNUaGlu
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhICYgSXNUaGluRmxhZzsgfQotICAgIGJvb2wgaXNGYXQo
KSBjb25zdCB7IHJldHVybiAhaXNUaGluKCk7IH07CisgICAgc3RhdGljIGJvb2wgaXNUaGluKHVp
bnRwdHJfdCBkYXRhKSB7IHJldHVybiBkYXRhICYgSXNUaGluRmxhZzsgfQorICAgIHN0YXRpYyBi
b29sIGlzRmF0KHVpbnRwdHJfdCBkYXRhKSB7IHJldHVybiAhaXNUaGluKGRhdGEpOyB9CisgICAg
CisgICAgYm9vbCBpc1RoaW4oKSBjb25zdCB7IHJldHVybiBpc1RoaW4obV9kYXRhKTsgfQorICAg
IGJvb2wgaXNGYXQoKSBjb25zdCB7IHJldHVybiBpc0ZhdChtX2RhdGEpOyB9OworICAgIAorICAg
IHN0YXRpYyBXYXRjaHBvaW50U2V0KiBmYXQodWludHB0cl90IGRhdGEpCisgICAgeworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PFdhdGNocG9pbnRTZXQqPihkYXRhKTsKKyAgICB9CiAgICAg
CiAgICAgV2F0Y2hwb2ludFNldCogZmF0KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZhdCgp
KTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXYXRjaHBvaW50U2V0Kj4obV9kYXRhKTsK
KyAgICAgICAgcmV0dXJuIGZhdChtX2RhdGEpOwogICAgIH0KICAgICAKICAgICBjb25zdCBXYXRj
aHBvaW50U2V0KiBmYXQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzRmF0KCkpOwot
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdhdGNocG9pbnRTZXQqPihtX2RhdGEpOworICAg
ICAgICByZXR1cm4gZmF0KG1fZGF0YSk7CiAgICAgfQogICAgIAogICAgIFdhdGNocG9pbnRTZXQq
IGluZmxhdGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK0Rlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CitEZXNpcmVk
V2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KKwordm9pZCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmFkZExhemlseShXYXRjaHBvaW50KiB3YXRjaHBvaW50LCBXYXRjaHBvaW50U2V0
KiBzZXQpCit7CisgICAgbV9zZXRzLmFkZExhemlseShXYXRjaHBvaW50Rm9yV2F0Y2hwb2ludFNl
dCh3YXRjaHBvaW50LCBzZXQpKTsKK30KKwordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExh
emlseShXYXRjaHBvaW50KiB3YXRjaHBvaW50LCBJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCit7
CisgICAgbV9pbmxpbmVTZXRzLmFkZExhemlseShXYXRjaHBvaW50Rm9ySW5saW5lV2F0Y2hwb2lu
dFNldCh3YXRjaHBvaW50LCAmc2V0KSk7Cit9CisKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpy
ZWFsbHlBZGQoKQoreworICAgIG1fc2V0cy5yZWFsbHlBZGQoKTsKKyAgICBtX2lubGluZVNldHMu
cmVhbGx5QWRkKCk7Cit9CisKK2Jvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZXRzLmFyZVN0aWxsVmFsaWQoKSAmJiBtX2lubGlu
ZVNldHMuYXJlU3RpbGxWYWxpZCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Rlc2lyZWRXYXRjaHBvaW50c19oCisjZGVmaW5lIERG
R0Rlc2lyZWRXYXRjaHBvaW50c19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlw
ZT4KK3N0cnVjdCBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQgeworICAgIFdhdGNo
cG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldCgpCisgICAgICAgIDogbV93YXRjaHBvaW50KDAp
CisgICAgICAgICwgbV9zZXQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFdhdGNocG9pbnRG
b3JHZW5lcmljV2F0Y2hwb2ludFNldChXYXRjaHBvaW50KiB3YXRjaHBvaW50LCBXYXRjaHBvaW50
U2V0VHlwZSogc2V0KQorICAgICAgICA6IG1fd2F0Y2hwb2ludCh3YXRjaHBvaW50KQorICAgICAg
ICAsIG1fc2V0KHNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFdhdGNocG9pbnQqIG1fd2F0
Y2hwb2ludDsKKyAgICBXYXRjaHBvaW50U2V0VHlwZSogbV9zZXQ7Cit9OworCit0eXBlZGVmIFdh
dGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0PiBXYXRjaHBvaW50
Rm9yV2F0Y2hwb2ludFNldDsKK3R5cGVkZWYgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50
U2V0PElubGluZVdhdGNocG9pbnRTZXQ+IFdhdGNocG9pbnRGb3JJbmxpbmVXYXRjaHBvaW50U2V0
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZT4KK2NsYXNzIEdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdlbmVyaWNEZXNp
cmVkV2F0Y2hwb2ludHMpOworcHVibGljOgorICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMo
KQorICAgICAgICA6IG1fcmVhbGx5QWRkZWQoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFkZExhemlseShjb25zdCBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8
V2F0Y2hwb2ludFNldFR5cGU+JiB3YXRjaHBvaW50KQorICAgIHsKKyAgICAgICAgbV93YXRjaHBv
aW50cy5hcHBlbmQod2F0Y2hwb2ludCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVhbGx5QWRk
KCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlYWxseUFkZGVkKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV93YXRjaHBvaW50cy5zaXplKCk7IGktLTspCisgICAgICAg
ICAgICBtX3dhdGNocG9pbnRzW2ldLm1fc2V0LT5hZGQobV93YXRjaHBvaW50c1tpXS5tX3dhdGNo
cG9pbnQpOworICAgICAgICBtX3JlYWxseUFkZGVkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBhcmVTdGlsbFZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fd2F0Y2hwb2ludHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV93YXRj
aHBvaW50c1tpXS5tX3NldC0+aGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdh
dGNocG9pbnRTZXRUeXBlPiA+IG1fd2F0Y2hwb2ludHM7CisgICAgYm9vbCBtX3JlYWxseUFkZGVk
OworfTsKKworY2xhc3MgRGVzaXJlZFdhdGNocG9pbnRzIHsKK3B1YmxpYzoKKyAgICBEZXNpcmVk
V2F0Y2hwb2ludHMoKTsKKyAgICB+RGVzaXJlZFdhdGNocG9pbnRzKCk7CisgICAgCisgICAgdm9p
ZCBhZGRMYXppbHkoV2F0Y2hwb2ludCosIFdhdGNocG9pbnRTZXQqKTsKKyAgICB2b2lkIGFkZExh
emlseShXYXRjaHBvaW50KiwgSW5saW5lV2F0Y2hwb2ludFNldCYpOworICAgIAorICAgIHZvaWQg
cmVhbGx5QWRkKCk7CisgICAgCisgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7CisgICAg
Citwcml2YXRlOgorICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNldD4g
bV9zZXRzOworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5saW5lV2F0Y2hwb2ludFNl
dD4gbV9pbmxpbmVTZXRzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdEZXNpcmVkV2F0Y2hwb2ludHNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biAxNDg4MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3MSwxMiArMTcxLDcgQEAgc3RhdGljIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgICAgICAKICAgICAgICAgRlRMOjpTdGF0ZSBzdGF0ZShkZmcp
OwogICAgICAgICBGVEw6Omxvd2VyREZHVG9MTFZNKHN0YXRlKTsKLSAgICAgICAgRlRMOjpjb21w
aWxlKHN0YXRlLCBqaXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGFkZCBzdXBwb3J0IGZvciB0aGUgY2FzZSB3aGVyZSBK
SVQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIwCi0gICAgICAgIAotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIEZUTDo6Y29tcGlsZShzdGF0ZSwgaml0Q29kZSwgKmppdENv
ZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNiArMjQxLDggQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1faml0Q29kZS0+c2hyaW5r
VG9GaXQoKTsKICAgICBjb2RlQmxvY2soKS0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRlU2hy
aW5rKTsKKyAgICAKKyAgICBtX3dhdGNocG9pbnRzLnJlYWxseUFkZCgpOwogfQogCiBib29sIEpJ
VENvbXBpbGVyOjpjb21waWxlKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSkKQEAgLTI2Myw2
ICsyNjUsOSBAQCBib29sIEpJVENvbXBpbGVyOjpjb21waWxlKFJlZlB0cjxKU0M6OkpJCiAgICAg
c3BlY3VsYXRpdmUuY3JlYXRlT1NSRW50cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwogCisg
ICAgaWYgKCFtX3dhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgdGhpcywgbV9jb2Rl
QmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQ5LDYgKzM1NCw5IEBA
IGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihSZWZQdHIKICAgICAvLyBDcmVhdGUg
T1NSIGVudHJ5IHRyYW1wb2xpbmVzIGlmIG5lY2Vzc2FyeS4KICAgICBzcGVjdWxhdGl2ZS5jcmVh
dGVPU1JFbnRyaWVzKCk7CiAgICAgc2V0RW5kT2ZDb2RlKCk7CisgICAgCisgICAgaWYgKCFtX3dh
dGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8gPT09IExpbmsgPT09CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX3ZtLCB0aGlzLCBt
X2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHQ0Nh
bGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiREZHRGVzaXJlZFdhdGNocG9pbnRzLmgiCiAjaW5jbHVk
ZSAiREZHRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiREZHRlBSSW5mby5oIgogI2luY2x1ZGUg
IkRGR0dQUkluZm8uaCIKQEAgLTI1Miw2ICsyNTMsMTUgQEAgcHVibGljOgogICAgIC8vIEFjY2Vz
c29ycyBmb3IgcHJvcGVydGllcy4KICAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBo
OyB9CiAgICAgCisgICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCwgV2F0
Y2hwb2ludFNldCogc2V0KQorICAgIHsKKyAgICAgICAgbV93YXRjaHBvaW50cy5hZGRMYXppbHko
d2F0Y2hwb2ludCwgc2V0KTsKKyAgICB9CisgICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hwb2ludCog
d2F0Y2hwb2ludCwgSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQorICAgIHsKKyAgICAgICAgbV93
YXRjaHBvaW50cy5hZGRMYXppbHkod2F0Y2hwb2ludCwgc2V0KTsKKyAgICB9CisgICAgCiAgICAg
Ly8gTWV0aG9kcyB0byBzZXQgbGFiZWxzIGZvciB0aGUgZGlzYXNzZW1ibGVyLgogICAgIHZvaWQg
c2V0U3RhcnRPZkNvZGUoKQogICAgIHsKQEAgLTQ2OSw2ICs0NzksOCBAQCBwcml2YXRlOgogICAg
IFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBtX2V4aXRDb21waWxhdGlvbkluZm87CiAg
ICAgVmVjdG9yPFZlY3RvcjxMYWJlbD4gPiBtX2V4aXRTaXRlTGFiZWxzOwogICAgIHVuc2lnbmVk
IG1fY3VycmVudENvZGVPcmlnaW5JbmRleDsKKyAgICAKKyAgICBEZXNpcmVkV2F0Y2hwb2ludHMg
bV93YXRjaHBvaW50czsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxLDcgKzM5MSw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAgaWYgKCFp
c0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCiAgICAgICAgICAgICBub3RDZWxsID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmdUYWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIG1faml0
LmFkZExhemlseSgKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAorICAgICAg
ICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOwogICAgICAgICBtX2pp
dC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0
UGF5bG9hZEdQUik7CiAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5q
dW1wKCk7CiAgICAgfSBlbHNlIHsKQEAgLTQ1OCw3ICs0NjAsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFu
ZC5ub2RlKCkpKQogICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpOwogCi0gICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQo
c3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAgICBtX2ppdC5hZGRMYXppbHkoCisgICAg
ICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKKyAgICAgICAgICAgIG1faml0LmdyYXBo
KCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKICAgICAgICAganVtcChpbnZlcnQgPyB0YWtlbiA6
IG5vdFRha2VuLCBGb3JjZUp1bXApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSBsb2NhbEdsb2JhbE9iamVjdCh0aGlzKTsKQEAgLTEyODQsNyArMTI4OCw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICBHUFJSZWcgb3AyR1BSID0gb3Ay
LmdwcigpOwogICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGls
bFZhbGlkKCkpIHsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVj
dWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIG1faml0LmFkZExhemlseSgKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAorICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCkpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0
LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKQEAgLTEzNjEsNyArMTM2Nyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmpl
Y3RUb09iamUKICAgICB9CiAKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnRWYWxpZCkgewotICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAor
ICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCisgICAgICAgICAgICBtX2ppdC5n
cmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAog
ICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxk
LCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKQEAgLTEzODksNyArMTM5Nyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRo
aXMgYnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxsLgogICAgIGlmIChtYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7Ci0gICAgICAgIG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAg
ICBtX2ppdC5hZGRMYXppbHkoCisgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwK
KyAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKICAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9w
MlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsCiAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hQdHIoCkBAIC0xNDY5LDcgKzE0NzksOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgfQogCiAgICAgaWYgKG1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAg
ICAgIG1faml0LmFkZExhemlseSgKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgp
LAorICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOwogICAg
ICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0xNDk2LDcgKzE1MDgsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8g
V2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2Vs
bC4KICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewotICAg
ICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpKTsKKyAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAorICAgICAgICAgICAgc3Bl
Y3VsYXRpb25XYXRjaHBvaW50KCksCisgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnQoKSk7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNW
YWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2Vs
bCkgfCBTcGVjT2JqZWN0LAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKApAQCAtMTYxNCw3
ICsxNjI4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogCiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsK
LSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxh
dGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIG1faml0LmFkZExhemlseSgKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAorICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50KCkpOwogCiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVVc2UsICh+
U3BlY0NlbGwpIHwgU3BlY09iamVjdCwKQEAgLTE3NDQsNyArMTc2MCw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2
YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKICAgICBpZiAobV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAg
ICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25X
YXRjaHBvaW50KCkpOworICAgICAgICBtX2ppdC5hZGRMYXppbHkoCisgICAgICAgICAgICBzcGVj
dWxhdGlvbldhdGNocG9pbnQoKSwKKyAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpKTsKIAogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCAoflNwZWND
ZWxsKSB8IFNwZWNPYmplY3QsCkBAIC0yNTU3LDggKzI1NzUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc1NhbmVDaGFpbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdp
bik7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90
eXBlQ2hhaW5Jc1NhbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJy
YXlQcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHNwZWN1
bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHNw
ZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkTGF6
aWx5KAorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlKCktPnN0
cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuYWRkTGF6aWx5KAorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25X
YXRjaHBvaW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBA
IC0zMzcxLDcgKzMzOTMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBOZXdBcnJheTogewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbik7
CiAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0Fy
cmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIGdsb2JhbE9i
amVjdC0+aGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9p
bnQoKSk7CisgICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25XYXRjaHBvaW50KCksCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5oYXZp
bmdBQmFkVGltZVdhdGNocG9pbnQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gbm9kZS0+aW5kZXhpbmdUeXBlKCkp
OwpAQCAtMzU0MSw3ICszNTY1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogewogICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbik7CiAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1l
KCkgJiYgIWhhc0FycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAg
ICAgIGdsb2JhbE9iamVjdC0+aGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KCktPmFkZChzcGVjdWxh
dGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25XYXRjaHBvaW50KCksCisgICAgICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0zNjE3LDcg
KzM2NDMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSA9IG5vZGUtPmluZGV4aW5nVHlwZSgpOwogICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+
aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkgewot
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKS0+YWRk
KHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgICAgIG1faml0LmFkZExhemlseSgK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKKyAgICAgICAgICAgICAg
ICBnbG9iYWxPYmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBub2RlLT5udW1Db25zdGFudHMo
KTsKICAgICAgICAgICAgIApAQCAtMzcyMyw3ICszNzUxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQWxsb2NhdGlvblByb2Zp
bGVXYXRjaHBvaW50OiB7Ci0gICAgICAgIGpzQ2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rp
b24oKSktPmFkZEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludChzcGVjdWxhdGlvbldhdGNocG9p
bnQoKSk7CisgICAgICAgIG1faml0LmFkZExhemlseSgKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpLAorICAgICAgICAgICAganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5j
dGlvbigpKS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkpOwogICAgICAgICBub1Jl
c3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDAxNiw5ICs0MDQ2LDEwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8gcXVp
dGUgYSBoaW50IGFscmVhZHkuCiAgICAgICAgIAogICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJl
bmNlKG5vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgbm9kZS0+c3RydWN0dXJlKCktPmFkZFRy
YW5zaXRpb25XYXRjaHBvaW50KAorICAgICAgICBtX2ppdC5hZGRMYXppbHkoCiAgICAgICAgICAg
ICBzcGVjdWxhdGlvbldhdGNocG9pbnQoCi0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQgPyBCYWRXZWFrQ29uc3RhbnRDYWNoZSA6IEJhZENhY2hl
KSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3Rh
bnQgPyBCYWRXZWFrQ29uc3RhbnRDYWNoZSA6IEJhZENhY2hlKSwKKyAgICAgICAgICAgIG5vZGUt
PnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAgCiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwpAQCAtNDIyNyw5ICs0MjU4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHbG9iYWxW
YXJXYXRjaHBvaW50OiB7Ci0gICAgICAgIG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKS0+c3ltYm9sVGFibGUoKS0+Z2V0KAotICAgICAgICAgICAgaWRlbnRpZmllcihub2Rl
LT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSktPmltcGwoKSkuYWRkV2F0Y2hwb2ludCgKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIFdhdGNocG9p
bnRTZXQqIHNldCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+c3lt
Ym9sVGFibGUoKS0+Z2V0KAorICAgICAgICAgICAgaWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVy
TnVtYmVyRm9yQ2hlY2soKSktPmltcGwoKSkud2F0Y2hwb2ludFNldCgpOworICAgICAgICBtX2pp
dC5hZGRMYXppbHkoc3BlY3VsYXRpb25XYXRjaHBvaW50KCksIHNldCk7CiAgICAgICAgIAogI2lm
IERGR19FTkFCTEUoSklUX0FTU0VSVCkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CkBAIC00MjgyLDcgKzQzMTMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGlzQ2VsbC5saW5rKCZtX2ppdCk7CiAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ7CiAgICAgICAgIGlmIChtX2ppdC5n
cmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgIG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAg
ICAgICAgICAgbV9qaXQuYWRkTGF6aWx5KAorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0
Y2hwb2ludCgpLAorICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsK
ICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOwog
ICAgICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0Lmp1bXAoKTsKICAg
ICAgICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzM5LDcgKzMzOSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUK
ICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCiAgICAgICAgICAgICBu
b3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdH
UFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3Iob3BlcmFuZC0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIG1f
aml0LmFkZExhemlseSgKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAorICAg
ICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iob3BlcmFuZC0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOwogICAgICAgICBtX2ppdC5t
b3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0Lmp1bXAoKTsKICAg
ICB9IGVsc2UgewpAQCAtNDA1LDcgKzQwNyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlUGVlcGgKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkp
CiAgICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAKLSAgICAgICAg
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iob3BlcmFuZC0+Y29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQo
KSk7CisgICAgICAgIG1faml0LmFkZExhemlseSgKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0
Y2hwb2ludCgpLAorICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iob3Bl
cmFuZC0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOwog
ICAgICAgICBqdW1wKGludmVydCA/IHRha2VuIDogbm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwpA
QCAtMTMxMCw3ICsxMzE0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVx
dWFsaQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAKICAgICBpZiAo
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwor
ICAgICAgICBtX2ppdC5hZGRMYXppbHkoCisgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9p
bnQoKSwKKyAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKICAgICAgICAg
REZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0xMzgzLDcgKzEzODksOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgfQogCiAgICAg
aWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAgICAgbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9p
bnQoKSk7CisgICAgICAgIG1faml0LmFkZExhemlseSgKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpLAorICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCkpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJh
bmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0xNDEw
LDcgKzE0MTgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAg
ICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBt
dXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
VmFsaWQpIHsgCi0gICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5h
ZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAgICBtX2ppdC5hZGRMYXppbHkoCisg
ICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKKyAgICAgICAgICAgIG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8
IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIApAQCAtMTQ4Nyw3ICsxNDk3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIH0KIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludFZhbGlkKSB7Ci0gICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAgICBtX2ppdC5h
ZGRMYXppbHkoCisgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKKyAgICAgICAg
ICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKICAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIp
LCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTUxNCw3ICsxNTI2LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAgIC8vIFdlIGtub3cgdGhh
dCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlm
IChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7Ci0gICAgICAgIG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50
KCkpOworICAgICAgICBtX2ppdC5hZGRMYXppbHkoCisgICAgICAgICAgICBzcGVjdWxhdGlvbldh
dGNocG9pbnQoKSwKKyAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1f
Y3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dCgpKTsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyhv
cDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5j
aFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMTYyNiw3
ICsxNjQwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogCiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7
CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKLSAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldh
dGNocG9pbnQoKSk7CisgICAgICAgIG1faml0LmFkZExhemlseSgKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uV2F0Y2hwb2ludCgpLAorICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCkpOwogICAgICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2pp
dC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLApAQCAt
MTc2OCw3ICsxNzg0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJC
cgogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpOwogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIG1faml0LmFkZExh
emlseSgKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAorICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOwogCiAgICAgICAgIERGR19UWVBF
X0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNw
ZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKQEAgLTI0NjYsOCArMjQ4NCwx
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2Jh
bE9iamVjdC0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2FuZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNp
dGlvbldhdGNocG9pbnQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICAgICAgICAg
ICAgICBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+YWRkVHJh
bnNpdGlvbldhdGNocG9pbnQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5hZGRMYXppbHkoCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbldhdGNocG9pbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+
YXJyYXlQcm90b3R5cGUoKS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkp
OworICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCisgICAgICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKQEAgLTMyODUsNyArMzMwNyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld0FycmF5OiB7CiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5n
QUJhZFRpbWUoKSAmJiAhaGFzQXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewot
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQoKS0+YWRk
KHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgICAgIG1faml0LmFkZExhemlseSgK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKKyAgICAgICAgICAgICAg
ICBnbG9iYWxPYmplY3QtPmhhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludCgpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5
cGUoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpID09IG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKQEAgLTM0NTgsNyArMzQ4Miw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld0FycmF5V2l0
aFNpemU6IHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICBpZiAoIWds
b2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBcnJheVN0b3JhZ2Uobm9kZS0+
aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICBnbG9iYWxPYmplY3QtPmhhdmluZ0FCYWRU
aW1lV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAgICAgICAg
ICAgbV9qaXQuYWRkTGF6aWx5KAorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2lu
dCgpLAorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+aGF2aW5nQUJhZFRpbWVXYXRjaHBv
aW50KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwpAQCAtMzUzMSw3ICszNTU3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAg
ICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBub2RlLT5pbmRleGluZ1R5cGUoKTsK
ICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQXJy
YXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpIHsKLSAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+aGF2
aW5nQUJhZFRpbWVXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGRMYXppbHkoCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25X
YXRjaHBvaW50KCksCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5oYXZpbmdBQmFkVGlt
ZVdhdGNocG9pbnQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVs
ZW1lbnRzID0gbm9kZS0+bnVtQ29uc3RhbnRzKCk7CiAgICAgICAgICAgICAKQEAgLTM2MzAsNyAr
MzY1OCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OiB7Ci0gICAg
ICAgIGpzQ2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKSktPmFkZEFsbG9jYXRpb25Q
cm9maWxlV2F0Y2hwb2ludChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CisgICAgICAgIG1faml0
LmFkZExhemlseSgKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpLAorICAgICAg
ICAgICAganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKS0+YWxsb2NhdGlvblBy
b2ZpbGVXYXRjaHBvaW50U2V0KCkpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMzkyMiw5ICszOTUyLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8gcXVpdGUgYSBoaW50IGFscmVhZHkuCiAg
ICAgICAgIAogICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUtPnN0cnVjdHVyZSgp
KTsKLSAgICAgICAgbm9kZS0+c3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KAor
ICAgICAgICBtX2ppdC5hZGRMYXppbHkoCiAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9p
bnQoCi0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3Rh
bnQgPyBCYWRXZWFrQ29uc3RhbnRDYWNoZSA6IEJhZENhY2hlKSk7CisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQgPyBCYWRXZWFrQ29uc3RhbnRD
YWNoZSA6IEJhZENhY2hlKSwKKyAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZSgpLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTQxMTUsOSAr
NDE0Niw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDogewotICAgICAgICBtX2pp
dC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgK
LSAgICAgICAgICAgIGlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkp
LT5pbXBsKCkpLmFkZFdhdGNocG9pbnQoCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25XYXRj
aHBvaW50KCkpOworICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX2ppdC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKKyAgICAgICAgICAg
IGlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkpLT5pbXBsKCkpLndh
dGNocG9pbnRTZXQoKTsKKyAgICAgICAgbV9qaXQuYWRkTGF6aWx5KHNwZWN1bGF0aW9uV2F0Y2hw
b2ludCgpLCBzZXQpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQpCiAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtNDE2NSw3ICs0MTk2LDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBpc0NlbGwubGlu
aygmbV9qaXQpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkOwogICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxW
YWxpZCgpKSB7Ci0gICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNw
ZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgICAgIG1faml0LmFkZExhemlseSgKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoKSwKKyAgICAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MTQ4ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTEsNyArMTM1MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwog
ICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkp
IHsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldh
dGNocG9pbnQoKSk7CisgICAgICAgIG1faml0LmFkZExhemlseSgKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uV2F0Y2hwb2ludCgpLAorICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
KCkpOwogICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUg
JiB+U3BlY09iamVjdCkgewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAg
ICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2Rl
LT5jaGlsZDEoKSwgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAJKHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIHZvaWQgY29t
cGlsZUVudHJ5KENDYWxsSGVscGVycyYgagogICAgIGppdC5lbWl0UHV0SW1tZWRpYXRlVG9DYWxs
RnJhbWVIZWFkZXIoaml0LmNvZGVCbG9jaygpLCBKU1N0YWNrOjpDb2RlQmxvY2spOwogfQogCi12
b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCitib29sIGNvbXBp
bGUoU3RhdGUmIHN0YXRlLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCiB7CiAgICAgTExWTUV4ZWN1dGlv
bkVuZ2luZVJlZiBlbmdpbmU7CiAgICAgY2hhciogZXJyb3IgPSAwOwpAQCAtODAsOSArODAsMTgg
QEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgUmVmUHRyPEpTQzo6SgogICAgIC8vIEZJWE1F
OiBMTFZNIHNob3VsZCB1c2Ugb3VyIG93biBKSVQgbWVtb3J5IGFsbG9jYXRvciwgYW5kIHdlIHNo
b3VsZG4ndCBoYXZlIHRvCiAgICAgLy8ga2VlcCBhcm91bmQgYW4gTExWTUV4ZWN1dGlvbkVuZ2lu
ZVJlZiB0byBrZWVwIGNvZGUgYWxpdmUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzYxOQorICAgIC8vIEZJWE1FOiBOZWVkIHRvIGFkZCBzdXBwb3J0
IGZvciB0aGUgY2FzZSB3aGVyZSBKSVQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjAKICAgICBHZW5l
cmF0ZWRGdW5jdGlvbiBmdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2VuZXJhdGVkRnVuY3Rp
b24+KExMVk1HZXRQb2ludGVyVG9HbG9iYWwoZW5naW5lLCBzdGF0ZS5mdW5jdGlvbikpOwogICAg
IExMVk1EaXNwb3NlUGFzc01hbmFnZXIocGFzcyk7CiAgICAgCisgICAgaWYgKCFzdGF0ZS53YXRj
aHBvaW50cy5hcmVTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgTExWTURpc3Bvc2VFeGVjdXRpb25F
bmdpbmUoZW5naW5lKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBz
dGF0ZS53YXRjaHBvaW50cy5yZWFsbHlBZGQoKTsKKyAgICAKICAgICAvLyBDcmVhdGUgdGhlIGVu
dHJ5cG9pbnQuCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0b3RhbCBrbHVkZ2UgLSBMTFZNIHNo
b3VsZCBqdXN0IHVzZSBvdXIgY2FsbGluZyBjb252ZW50aW9uLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKQEAgLTE2Miw2ICsxNzEsOCBAQCB2
b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBSZWZQdHI8SlNDOjpKCiAgICAgICAgICAgICBsaW5r
QnVmZmVyLAogICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBM
TFZNIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0
aW9uKSkpOwogICAgIGppdENvZGUgPSBzdGF0ZS5qaXRDb2RlOworICAgIAorICAgIHJldHVybiB0
cnVlOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuaAkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi12b2lkIGNvbXBpbGUoU3Rh
dGUmLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29k
ZVdpdGhBcml0eUNoZWNrKTsKK2Jvb2wgY29tcGlsZShTdGF0ZSYsIFJlZlB0cjxKU0M6OkpJVENv
ZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmgJKHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaWYgRU5BQkxF
KEZUTF9KSVQpCiAKKyNpbmNsdWRlICJERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCIKICNpbmNsdWRl
ICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJG
VExKSVRDb2RlLmgiCkBAIC01MSw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgZnVuY3Rp
b247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiAgICAgVmVjdG9yPE9TUkV4aXRDb21w
aWxhdGlvbkluZm8+IG9zckV4aXQ7CisgICAgREZHOjpEZXNpcmVkV2F0Y2hwb2ludHMgd2F0Y2hw
b2ludHM7CiAgICAgCiAgICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNp
b24gMTQ4ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNiArMTUzLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgQVNTRVJUKHRyeUdldEFsbG9jYXRpb25Qcm9maWxlKCkpOwogICAgICAgICAgICAg
bV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQuYWRkKHdhdGNocG9pbnQpOwogICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiBhbGxvY2F0aW9uUHJvZmls
ZVdhdGNocG9pbnRTZXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0
aW9uUHJvZmlsZVdhdGNocG9pbnQ7CisgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxh
Z3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2
aXNpb24gMTQ4ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsMTEgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5ub3RpZnlXcml0ZSgpOwogICAgIH0KKyAg
ICAKKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKKyAg
ICB9CiAgICAgICAgIAogICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDg4MTYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEzLTA0LTIxICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgZm91cnRoVGllcjogSXQgc2hvdWxkIGJl
IHBvc3NpYmxlIHRvIHF1ZXJ5IFdhdGNocG9pbnRTZXRzLCBhbmQgYWRkIFdhdGNocG9pbnRzLCBl
dmVuIGlmIHRoZSBjb21waWxlciBpcyBydW5uaW5nIGluIGFub3RoZXIgdGhyZWFkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ5MDkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEhhcmRlbiBv
dXIgbm90aW9ucyBvZiBtZW1vcnkgZmVuY2VzLCBub3cgdGhhdCB3ZSdyZSBkb2luZyByYWN5IGFs
Z29yaXRobXMuCisKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGKToKKyAg
ICAgICAgKFdURjo6Y29tcGlsZXJGZW5jZSk6CisgICAgICAgIChXVEY6OmFybVY3X2RtYik6Cisg
ICAgICAgIChXVEY6OmFybVY3X2RtYl9zdCk6CisgICAgICAgIChXVEY6OmxvYWRMb2FkRmVuY2Up
OgorICAgICAgICAoV1RGOjpsb2FkU3RvcmVGZW5jZSk6CisgICAgICAgIChXVEY6OnN0b3JlTG9h
ZEZlbmNlKToKKyAgICAgICAgKFdURjo6c3RvcmVTdG9yZUZlbmNlKToKKyAgICAgICAgKFdURjo6
bWVtb3J5QmFycmllckFmdGVyTG9jayk6CisgICAgICAgIChXVEY6Om1lbW9yeUJhcnJpZXJCZWZv
cmVVbmxvY2spOgorICAgICAgICAoV1RGOjp4ODZfbWZlbmNlKToKKwogMjAxMy0wNC0yMCAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IHZhbHVl
IHByb2ZpbGVzIGFuZCBhcnJheSBwcm9maWxlcyBzaG91bGQgYmUgdGhyZWFkLXNhZmUgZW5vdWdo
IHRvIGJlIGFjY2Vzc2libGUgaW4gYSBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZApJbmRl
eDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0F0b21pY3MuaAkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNlL1dURi93dGYvQXRvbWljcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChq
aGF5Z29vZEByZWFrdGl4LmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIwNywyMiArMjA3LDU4
IEBAIGlubGluZSBib29sIHdlYWtDb21wYXJlQW5kU3dhcFVJbnRQdHIodm8KICAgICByZXR1cm4g
d2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCp2b2xhdGlsZSo+KGxvY2F0
aW9uKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZXhwZWN0ZWQpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihuZXdWYWx1ZSkpOwogfQogCisvLyBKdXN0IGEgY29tcGlsZXIgZmVuY2UuIEhhcyBu
byBlZmZlY3Qgb24gdGhlIGhhcmR3YXJlLCBidXQgdGVsbHMgdGhlIGNvbXBpbGVyCisvLyBub3Qg
dG8gbW92ZSB0aGluZ3MgYXJvdW5kIHRoaXMgY2FsbC4gU2hvdWxkIG5vdCBhZmZlY3QgdGhlIGNv
bXBpbGVyJ3MgYWJpbGl0eQorLy8gdG8gZG8gdGhpbmdzIGxpa2UgcmVnaXN0ZXIgYWxsb2NhdGlv
biBhbmQgY29kZSBtb3Rpb24gb3ZlciBwdXJlIG9wZXJhdGlvbnMuCitpbmxpbmUgdm9pZCBjb21w
aWxlckZlbmNlKCkKK3sKKyAgICBhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKTsKK30KKwog
I2lmIENQVShBUk1fVEhVTUIyKQogCi1pbmxpbmUgdm9pZCBtZW1vcnlCYXJyaWVyQWZ0ZXJMb2Nr
KCkKKy8vIEZ1bGwgbWVtb3J5IGZlbmNlLiBObyBhY2Nlc3NlcyB3aWxsIGZsb2F0IGFib3ZlIHRo
aXMsIGFuZCBubyBhY2Nlc3NlcyB3aWxsIHNpbmsKKy8vIGJlbG93IGl0LgoraW5saW5lIHZvaWQg
YXJtVjdfZG1iKCkKIHsKICAgICBhc20gdm9sYXRpbGUoImRtYiIgOjo6ICJtZW1vcnkiKTsKIH0K
IAotaW5saW5lIHZvaWQgbWVtb3J5QmFycmllckJlZm9yZVVubG9jaygpCisvLyBMaWtlIHRoZSBh
Ym92ZSwgYnV0IG9ubHkgYWZmZWN0cyBzdG9yZXMuCitpbmxpbmUgdm9pZCBhcm1WN19kbWJfc3Qo
KQogewotICAgIGFzbSB2b2xhdGlsZSgiZG1iIiA6OjogIm1lbW9yeSIpOworICAgIGFzbSB2b2xh
dGlsZSgiZG1iIHN0IiA6OjogIm1lbW9yeSIpOworfQorCitpbmxpbmUgdm9pZCBsb2FkTG9hZEZl
bmNlKCkgeyBhcm1WN19kbWIoKTsgfQoraW5saW5lIHZvaWQgbG9hZFN0b3JlRmVuY2UoKSB7IGFy
bVY3X2RtYigpOyB9CitpbmxpbmUgdm9pZCBzdG9yZUxvYWRGZW5jZSgpIHsgYXJtVjdfZG1iKCk7
IH0KK2lubGluZSB2b2lkIHN0b3JlU3RvcmVGZW5jZSgpIHsgYXJtVjdfZG1iX3N0KCk7IH0KK2lu
bGluZSB2b2lkIG1lbW9yeUJhcnJpZXJBZnRlckxvY2soKSB7IGFybVY3X2RtYigpOyB9Citpbmxp
bmUgdm9pZCBtZW1vcnlCYXJyaWVyQmVmb3JlVW5sb2NrKCkgeyBhcm1WN19kbWIoKTsgfQorCisj
ZWxpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorCitpbmxpbmUgdm9pZCB4ODZfbWZlbmNlKCkK
K3sKKyAgICBhc20gdm9sYXRpbGUoIm1mZW5jZSIgOjo6ICJtZW1vcnkiKTsKIH0KIAoraW5saW5l
IHZvaWQgbG9hZExvYWRGZW5jZSgpIHsgY29tcGlsZXJGZW5jZSgpOyB9CitpbmxpbmUgdm9pZCBs
b2FkU3RvcmVGZW5jZSgpIHsgY29tcGlsZXJGZW5jZSgpOyB9CitpbmxpbmUgdm9pZCBzdG9yZUxv
YWRGZW5jZSgpIHsgeDg2X21mZW5jZSgpOyB9CitpbmxpbmUgdm9pZCBzdG9yZVN0b3JlRmVuY2Uo
KSB7IGNvbXBpbGVyRmVuY2UoKTsgfQoraW5saW5lIHZvaWQgbWVtb3J5QmFycmllckFmdGVyTG9j
aygpIHsgY29tcGlsZXJGZW5jZSgpOyB9CitpbmxpbmUgdm9pZCBtZW1vcnlCYXJyaWVyQmVmb3Jl
VW5sb2NrKCkgeyBjb21waWxlckZlbmNlKCk7IH0KKwogI2Vsc2UKIAotaW5saW5lIHZvaWQgbWVt
b3J5QmFycmllckFmdGVyTG9jaygpIHsgfQotaW5saW5lIHZvaWQgbWVtb3J5QmFycmllckJlZm9y
ZVVubG9jaygpIHsgfQoraW5saW5lIHZvaWQgbG9hZExvYWRGZW5jZSgpIHsgY29tcGlsZXJGZW5j
ZSgpOyB9CitpbmxpbmUgdm9pZCBsb2FkU3RvcmVGZW5jZSgpIHsgY29tcGlsZXJGZW5jZSgpOyB9
CitpbmxpbmUgdm9pZCBzdG9yZUxvYWRGZW5jZSgpIHsgY29tcGlsZXJGZW5jZSgpOyB9Citpbmxp
bmUgdm9pZCBzdG9yZVN0b3JlRmVuY2UoKSB7IGNvbXBpbGVyRmVuY2UoKTsgfQoraW5saW5lIHZv
aWQgbWVtb3J5QmFycmllckFmdGVyTG9jaygpIHsgY29tcGlsZXJGZW5jZSgpOyB9CitpbmxpbmUg
dm9pZCBtZW1vcnlCYXJyaWVyQmVmb3JlVW5sb2NrKCkgeyBjb21waWxlckZlbmNlKCk7IH0KIAog
I2VuZGlmCiAK
</data>
<flag name="review"
          id="220646"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>