<?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>145722</bug_id>
          
          <creation_ts>2015-06-06 00:14:17 -0700</creation_ts>
          <short_desc>The tiny set magic in StructureSet should be available in WTF</short_desc>
          <delta_ts>2015-06-08 12:48:42 -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>Web Template Framework</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>145741</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1100068</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-06 00:14:17 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100069</commentid>
    <comment_count>1</comment_count>
      <attachid>254408</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-06 00:15:19 -0700</bug_when>
    <thetext>Created attachment 254408
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100282</commentid>
    <comment_count>2</comment_count>
      <attachid>254465</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-07 19:09:28 -0700</bug_when>
    <thetext>Created attachment 254465
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100284</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-07 19:12:11 -0700</bug_when>
    <thetext>Attachment 254465 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStructureAbstractValue.cpp:283:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureSet.cpp:38:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureSet.cpp:70:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureSet.cpp:80:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100287</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-07 19:36:18 -0700</bug_when>
    <thetext>Looks neutral, as intended:

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

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

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

                                                        TipOfTree                 TinyPtrSet                                    
SunSpider:
   3d-cube                                            5.3191+-0.2489            5.1807+-0.0387          might be 1.0267x faster
   3d-morph                                           5.7531+-0.0553     ?      5.8585+-0.2041        ? might be 1.0183x slower
   3d-raytrace                                        6.4535+-0.0967            6.3954+-0.0670        
   access-binary-trees                                2.4714+-0.2300            2.3067+-0.0551          might be 1.0714x faster
   access-fannkuch                                    6.4837+-0.4908            6.2308+-0.1027          might be 1.0406x faster
   access-nbody                                       3.0047+-0.1380     ?      3.0423+-0.3053        ? might be 1.0125x slower
   access-nsieve                                      3.6183+-0.3972            3.6182+-0.2538        
   bitops-3bit-bits-in-byte                           1.5933+-0.0306     ?      1.7817+-0.2797        ? might be 1.1182x slower
   bitops-bits-in-byte                                3.9139+-0.2418            3.8151+-0.2444          might be 1.0259x faster
   bitops-bitwise-and                                 2.2111+-0.0977            2.1358+-0.0350          might be 1.0353x faster
   bitops-nsieve-bits                                 3.2478+-0.0371     ?      3.3864+-0.2568        ? might be 1.0427x slower
   controlflow-recursive                              3.1949+-0.1993            3.1033+-0.2352          might be 1.0295x faster
   crypto-aes                                         5.0572+-0.2922            4.6593+-0.1602          might be 1.0854x faster
   crypto-md5                                         2.7676+-0.1198     ?      2.7832+-0.1347        ?
   crypto-sha1                                        3.7579+-0.2015     ?      3.9406+-0.4974        ? might be 1.0486x slower
   date-format-tofte                                  9.1592+-0.0451     !      9.3966+-0.1745        ! definitely 1.0259x slower
   date-format-xparb                                  6.0927+-0.5300            6.0801+-0.5972        
   math-cordic                                        3.2531+-0.2424     ?      3.4195+-0.4473        ? might be 1.0511x slower
   math-partial-sums                                  5.7742+-0.7570            5.2780+-0.0747          might be 1.0940x faster
   math-spectral-norm                                 2.0674+-0.0787     ?      2.2081+-0.3136        ? might be 1.0681x slower
   regexp-dna                                         8.2462+-1.1123            8.0403+-1.2977          might be 1.0256x faster
   string-base64                                      5.0524+-0.1948     ?      5.5262+-0.8539        ? might be 1.0938x slower
   string-fasta                                       6.8415+-0.1501     ?      6.8796+-0.2935        ?
   string-tagcloud                                    9.9096+-0.6306     ?     10.0142+-0.8384        ? might be 1.0106x slower
   string-unpack-code                                20.8892+-1.0617           20.2604+-0.8390          might be 1.0310x faster
   string-validate-input                              6.3465+-0.2852            6.0027+-0.0876          might be 1.0573x faster

   &lt;arithmetic&gt;                                       5.4800+-0.0460            5.4363+-0.0805          might be 1.0080x faster

                                                        TipOfTree                 TinyPtrSet                                    
LongSpider:
   3d-cube                                          897.6033+-4.6188     ?    898.5425+-5.6279        ?
   3d-morph                                        1535.0707+-9.8443         1534.9906+-20.7606       
   3d-raytrace                                      721.4172+-37.5729         707.0935+-11.3032         might be 1.0203x faster
   access-binary-trees                             1002.3269+-3.9306     ?   1003.3008+-10.3461       ?
   access-fannkuch                                  342.9111+-10.2627    ?    345.8151+-6.6754        ?
   access-nbody                                     589.8055+-3.1836          588.9665+-1.9847        
   access-nsieve                                    486.6346+-19.9478         476.3147+-6.0936          might be 1.0217x faster
   bitops-3bit-bits-in-byte                          44.6828+-1.6882     ?     45.4281+-1.9404        ? might be 1.0167x slower
   bitops-bits-in-byte                               99.1736+-1.2021     ?    102.0531+-3.5380        ? might be 1.0290x slower
   bitops-nsieve-bits                               422.0681+-3.6908          420.8995+-1.8573        
   controlflow-recursive                            493.4644+-11.8931         490.6305+-11.6212       
   crypto-aes                                       711.4067+-9.3948          708.4561+-12.1591       
   crypto-md5                                       561.1379+-88.9807         532.5444+-4.4074          might be 1.0537x faster
   crypto-sha1                                      678.4827+-9.4750     ?    689.0468+-14.9212       ? might be 1.0156x slower
   date-format-tofte                                761.4532+-75.3425         731.2587+-17.9038         might be 1.0413x faster
   date-format-xparb                                790.8295+-20.4362    ?    809.0667+-20.0988       ? might be 1.0231x slower
   hash-map                                         181.7381+-3.8521          181.7036+-4.5264        
   math-cordic                                      577.9332+-3.4967          576.4648+-2.2299        
   math-partial-sums                                507.5356+-0.5263          507.3247+-1.8338        
   math-spectral-norm                               565.7697+-4.7436          565.0618+-1.7838        
   string-base64                                    412.1976+-8.9669     ?    412.3352+-7.6437        ?
   string-fasta                                     436.1008+-7.5805          434.4879+-24.6807       
   string-tagcloud                                  201.4974+-16.4675         193.1369+-3.1622          might be 1.0433x faster

   &lt;geometric&gt;                                      458.0086+-3.7148          456.1868+-1.6056          might be 1.0040x faster

                                                        TipOfTree                 TinyPtrSet                                    
V8Spider:
   crypto                                            58.6490+-2.7355           56.8694+-3.4422          might be 1.0313x faster
   deltablue                                        100.6298+-1.8247     ?    104.2377+-7.7390        ? might be 1.0359x slower
   earley-boyer                                      49.0927+-2.0186           48.4252+-3.4303          might be 1.0138x faster
   raytrace                                          41.5741+-2.8319     ?     42.6473+-1.0084        ? might be 1.0258x slower
   regexp                                            82.8983+-2.6392     ?     83.7420+-6.2923        ? might be 1.0102x slower
   richards                                          80.8396+-3.7283           80.3046+-2.6683        
   splay                                             39.6726+-2.4491     ?     39.7226+-1.9454        ?

   &lt;geometric&gt;                                       61.1138+-0.4855     ?     61.2756+-0.8210        ? might be 1.0026x slower

                                                        TipOfTree                 TinyPtrSet                                    
Octane:
   encrypt                                           0.20401+-0.00103    ?     0.21300+-0.02414       ? might be 1.0441x slower
   decrypt                                           3.55825+-0.01749    ?     3.63535+-0.21309       ? might be 1.0217x slower
   deltablue                                x2       0.19612+-0.00167          0.19436+-0.00080       
   earley                                            0.39502+-0.00470          0.39494+-0.00620       
   boyer                                             5.18932+-0.02660    ?     5.22596+-0.13514       ?
   navier-stokes                            x2       5.25197+-0.19933          5.17892+-0.00832         might be 1.0141x faster
   raytrace                                 x2       1.33023+-0.03456          1.31382+-0.07377         might be 1.0125x faster
   richards                                 x2       0.13022+-0.00813    ?     0.13446+-0.01523       ? might be 1.0325x slower
   splay                                    x2       0.40486+-0.00411          0.40443+-0.00505       
   regexp                                   x2      31.67850+-0.23934         31.53409+-0.09758       
   pdfjs                                    x2      42.53771+-0.25719    ?    43.05854+-0.82041       ? might be 1.0122x slower
   mandreel                                 x2      51.05867+-0.46072         50.96631+-0.42307       
   gbemu                                    x2      43.63317+-2.53613    ?    46.26553+-5.97543       ? might be 1.0603x slower
   closure                                           0.57908+-0.03613          0.56295+-0.00240         might be 1.0287x faster
   jquery                                            7.36744+-0.08844          7.34169+-0.03671       
   box2d                                    x2      11.87338+-0.04680         11.85751+-0.03018       
   zlib                                     x2     392.05039+-15.56576   ?   397.61131+-2.11661       ? might be 1.0142x slower
   typescript                               x2     810.54313+-15.59345   ?   836.09941+-29.29402      ? might be 1.0315x slower

   &lt;geometric&gt;                                       6.61929+-0.05083    ?     6.66961+-0.05981       ? might be 1.0076x slower

                                                        TipOfTree                 TinyPtrSet                                    
Kraken:
   ai-astar                                          235.888+-3.540      ?     247.539+-32.607        ? might be 1.0494x slower
   audio-beat-detection                               81.858+-0.225      ?      82.601+-0.951         ?
   audio-dft                                         119.628+-1.893      ?     119.987+-1.947         ?
   audio-fft                                          71.026+-1.583             70.200+-1.503           might be 1.0118x faster
   audio-oscillator                                   76.928+-1.012      ?      77.881+-1.579         ? might be 1.0124x slower
   imaging-darkroom                                  105.436+-1.638      ?     105.475+-2.159         ?
   imaging-desaturate                                 62.989+-0.357      ?      64.274+-1.654         ? might be 1.0204x slower
   imaging-gaussian-blur                             110.023+-1.621      ?     112.078+-4.510         ? might be 1.0187x slower
   json-parse-financial                               49.344+-1.949             47.134+-1.461           might be 1.0469x faster
   json-stringify-tinderbox                           28.935+-1.359      ?      30.384+-2.483         ? might be 1.0501x slower
   stanford-crypto-aes                                58.611+-0.844             58.083+-0.502         
   stanford-crypto-ccm                                49.392+-2.076             48.435+-0.842           might be 1.0198x faster
   stanford-crypto-pbkdf2                            112.250+-3.430      ?     113.819+-2.662         ? might be 1.0140x slower
   stanford-crypto-sha256-iterative                   44.928+-2.182             44.631+-2.280         

   &lt;arithmetic&gt;                                       86.231+-0.524      ?      87.323+-2.053         ? might be 1.0127x slower

                                                        TipOfTree                 TinyPtrSet                                    
JSRegress:
   abs-boolean                                        2.8479+-0.3229            2.7295+-0.0648          might be 1.0434x faster
   adapt-to-double-divide                            16.9288+-0.4492     ?     17.2027+-1.0180        ? might be 1.0162x slower
   aliased-arguments-getbyval                         1.3481+-0.0999            1.3177+-0.0581          might be 1.0231x faster
   allocate-big-object                                2.9408+-0.1368            2.8883+-0.0887          might be 1.0182x faster
   arguments-named-and-reflective                    12.5912+-0.6703           12.5565+-0.5749        
   arguments-out-of-bounds                           14.3549+-0.1871     ?     14.5664+-0.2020        ? might be 1.0147x slower
   arguments-strict-mode                             10.9449+-0.1538     ?     11.1137+-0.8848        ? might be 1.0154x slower
   arguments                                          9.6493+-0.2088     ?      9.6736+-0.3443        ?
   arity-mismatch-inlining                            0.9128+-0.0819            0.8930+-0.0351          might be 1.0221x faster
   array-access-polymorphic-structure                 7.3872+-0.9438            7.0837+-0.4348          might be 1.0428x faster
   array-nonarray-polymorhpic-access                 34.1239+-2.3336           32.7094+-1.0541          might be 1.0432x faster
   array-prototype-every                             85.0269+-1.8664           84.6779+-1.2234        
   array-prototype-forEach                           85.1055+-1.4026           82.5742+-2.9177          might be 1.0307x faster
   array-prototype-map                               93.4482+-1.1376           91.3472+-4.7270          might be 1.0230x faster
   array-prototype-reduce                            80.2813+-2.3594     ?     81.0398+-0.9093        ?
   array-prototype-reduceRight                       84.8042+-4.5062           81.4537+-2.4011          might be 1.0411x faster
   array-prototype-some                              87.2232+-3.0551           84.7371+-1.4053          might be 1.0293x faster
   array-splice-contiguous                           45.4596+-2.3609           42.2424+-1.6710          might be 1.0762x faster
   array-with-double-add                              4.4533+-0.5335            4.3342+-0.2828          might be 1.0275x faster
   array-with-double-increment                        3.6783+-0.5338            3.3406+-0.0509          might be 1.1011x faster
   array-with-double-mul-add                          5.2737+-0.2211     ?      5.2909+-0.1541        ?
   array-with-double-sum                              3.5675+-0.2584            3.3500+-0.0273          might be 1.0649x faster
   array-with-int32-add-sub                           6.9126+-0.2438            6.7867+-0.0414          might be 1.0186x faster
   array-with-int32-or-double-sum                     3.4726+-0.1841     ?      3.5111+-0.2712        ? might be 1.0111x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     38.0944+-1.7210           38.0469+-2.1643        
   ArrayBuffer-DataView-alloc-long-lived             16.3567+-1.9870           15.2793+-1.8682          might be 1.0705x faster
   ArrayBuffer-Int32Array-byteOffset                  3.8754+-0.1036     ?      4.1532+-0.4622        ? might be 1.0717x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     38.4623+-1.5513           37.9769+-1.0172          might be 1.0128x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.9194+-1.4559           22.7958+-1.4188        
   ArrayBuffer-Int8Array-alloc-long-lived            14.9330+-1.8262           14.5368+-1.4664          might be 1.0273x faster
   ArrayBuffer-Int8Array-alloc                       10.6904+-0.3668     ?     11.4328+-1.7477        ? might be 1.0694x slower
   asmjs_bool_bug                                     7.9541+-0.1476            7.9155+-0.3951        
   assign-custom-setter-polymorphic                   3.4884+-0.4495            3.3230+-0.1433          might be 1.0498x faster
   assign-custom-setter                               4.8338+-0.2617            4.6167+-0.3015          might be 1.0470x faster
   basic-set                                          9.5315+-0.2035     ?     10.2050+-1.6125        ? might be 1.0707x slower
   big-int-mul                                        4.3151+-0.1561            4.2420+-0.2606          might be 1.0172x faster
   boolean-test                                       3.1595+-0.0349     ?      3.2506+-0.1204        ? might be 1.0288x slower
   branch-fold                                        4.3285+-0.4496            4.1829+-0.1922          might be 1.0348x faster
   branch-on-string-as-boolean                       21.0270+-1.2507           20.5987+-0.7989          might be 1.0208x faster
   by-val-generic                                     8.2805+-0.4256            8.2239+-0.4943        
   call-spread-apply                                 33.2735+-4.5136           30.7585+-1.1480          might be 1.0818x faster
   call-spread-call                                  25.5127+-1.0686     ?     25.7055+-1.0160        ?
   captured-assignments                               0.5511+-0.0698     ?      0.5728+-0.0803        ? might be 1.0392x slower
   cast-int-to-double                                 5.4638+-0.2079     ?      5.5561+-0.5734        ? might be 1.0169x slower
   cell-argument                                      8.7309+-0.3151            8.6687+-0.2353        
   cfg-simplify                                       2.9799+-0.3444            2.8475+-0.0368          might be 1.0465x faster
   chain-getter-access                                9.4361+-0.2918            9.3311+-0.1740          might be 1.0113x faster
   cmpeq-obj-to-obj-other                            12.9614+-0.5658           12.0200+-0.6360          might be 1.0783x faster
   constant-test                                      5.0491+-0.1406            5.0400+-0.0859        
   create-lots-of-functions                          11.6174+-0.1931           11.5975+-0.3802        
   cse-new-array-buffer                               2.6897+-0.3127            2.5348+-0.0469          might be 1.0611x faster
   cse-new-array                                      2.6627+-0.0353     ?      2.6930+-0.1012        ? might be 1.0114x slower
   DataView-custom-properties                        42.9024+-1.7984     ?     44.0199+-2.8098        ? might be 1.0260x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.6209+-0.0721            0.6108+-0.1061          might be 1.0165x faster
   delay-tear-off-arguments-strictmode               14.6351+-1.1036           14.5749+-0.4396        
   deltablue-varargs                                211.0703+-5.5548          209.6666+-1.2414        
   destructuring-arguments                           17.2899+-0.3485     ?     17.4878+-1.1239        ? might be 1.0114x slower
   destructuring-swap                                 5.0957+-0.0277     ?      5.1345+-0.1010        ?
   direct-arguments-getbyval                          1.2987+-0.0377     ?      1.3923+-0.1472        ? might be 1.0721x slower
   div-boolean-double                                 5.2904+-0.0414     ?      5.3179+-0.1205        ?
   div-boolean                                        7.9836+-0.2253            7.9382+-0.1421        
   double-get-by-val-out-of-bounds                    4.6099+-0.0341     ?      4.6192+-0.1374        ?
   double-pollution-getbyval                          9.0774+-0.3202            8.9442+-0.1515          might be 1.0149x faster
   double-pollution-putbyoffset                       4.4840+-0.1219            4.4017+-0.0912          might be 1.0187x faster
   double-real-use                                   29.8947+-0.7180     ?     30.6107+-1.5471        ? might be 1.0239x slower
   double-to-int32-typed-array-no-inline              2.7193+-0.4333            2.7021+-0.1514        
   double-to-int32-typed-array                        2.0071+-0.0513     ?      2.0117+-0.0449        ?
   double-to-uint32-typed-array-no-inline             2.5763+-0.2522     ?      2.7533+-0.3538        ? might be 1.0687x slower
   double-to-uint32-typed-array                       2.2567+-0.2945            2.2089+-0.3098          might be 1.0217x faster
   elidable-new-object-dag                           43.6978+-1.5753           43.2466+-1.1404          might be 1.0104x faster
   elidable-new-object-roflcopter                    43.6501+-0.9659     ?     45.3653+-1.5382        ? might be 1.0393x slower
   elidable-new-object-then-call                     40.3194+-1.2303           40.2325+-1.1905        
   elidable-new-object-tree                          46.1779+-2.3065           46.0375+-1.6464        
   empty-string-plus-int                              5.5767+-0.1141     ?      5.5959+-0.0638        ?
   emscripten-cube2hash                              39.9722+-1.1653           39.3777+-1.0785          might be 1.0151x faster
   exit-length-on-plain-object                       15.1213+-1.5303     ?     16.0574+-1.8892        ? might be 1.0619x slower
   external-arguments-getbyval                        1.4633+-0.2321            1.3188+-0.1472          might be 1.1095x faster
   external-arguments-putbyval                        2.4535+-0.1212            2.4174+-0.0444          might be 1.0149x faster
   fixed-typed-array-storage-var-index                1.2397+-0.0505     ?      1.3925+-0.1449        ? might be 1.1232x slower
   fixed-typed-array-storage                          0.9147+-0.0465     ?      0.9562+-0.1051        ? might be 1.0454x slower
   Float32Array-matrix-mult                           4.7806+-0.4907            4.6502+-0.2914          might be 1.0280x faster
   Float32Array-to-Float64Array-set                  51.8236+-0.5188     !     58.1235+-2.2722        ! definitely 1.1216x slower
   Float64Array-alloc-long-lived                     87.8609+-1.5978     ?     88.5601+-2.6589        ?
   Float64Array-to-Int16Array-set                    69.4520+-2.1629     ?     71.3817+-0.9080        ? might be 1.0278x slower
   fold-double-to-int                                14.0315+-0.6646     ?     14.1147+-0.9869        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.0230+-1.1117     ?     12.5087+-4.6310        ? might be 1.2480x slower
   fold-get-by-id-to-multi-get-by-offset             10.5392+-1.6867           10.0089+-0.9799          might be 1.0530x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.3839+-0.8552     ?      9.4904+-0.7340        ? might be 1.0114x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.2277+-0.7338            9.1820+-0.6145        
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.8270+-0.9703     ?     10.1058+-1.1211        ? might be 1.0284x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      7.8099+-0.3987     ?      8.5083+-0.8635        ? might be 1.0894x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.1386+-0.4455     ?     10.3800+-1.1890        ? might be 1.0238x slower
   fold-put-by-id-to-multi-put-by-offset             10.3738+-0.5439     ?     11.0265+-1.3536        ? might be 1.0629x slower
   fold-put-structure                                 6.5744+-1.9523     ?      7.6774+-0.4208        ? might be 1.1678x slower
   for-of-iterate-array-entries                       4.7887+-0.5425     ?      4.8005+-0.3108        ?
   for-of-iterate-array-keys                          3.7852+-0.1762            3.7078+-0.1562          might be 1.0209x faster
   for-of-iterate-array-values                        3.6299+-0.0820            3.6248+-0.2191        
   fround                                            20.9811+-0.7285     ?     21.2666+-0.8141        ? might be 1.0136x slower
   ftl-library-inlining-dataview                     67.9492+-4.6675           65.8173+-0.6496          might be 1.0324x faster
   ftl-library-inlining                              66.9235+-0.5707     ?     74.7697+-18.6100       ? might be 1.1172x slower
   function-dot-apply                                 2.2974+-0.0636     ?      2.3658+-0.1599        ? might be 1.0298x slower
   function-test                                      3.1968+-0.4024            2.9865+-0.1993          might be 1.0704x faster
   function-with-eval                               103.2755+-2.2412          102.2538+-3.8499        
   gcse-poly-get-less-obvious                        18.1734+-0.4225     ?     18.5114+-0.7657        ? might be 1.0186x slower
   gcse-poly-get                                     21.8266+-2.9215           21.4795+-1.7698          might be 1.0162x faster
   gcse                                               4.6036+-0.5494            4.4480+-0.1301          might be 1.0350x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7999+-0.0833            2.7770+-0.0472        
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0968+-0.1338     ?      6.1543+-0.2213        ?
   get-by-id-chain-from-try-block                     7.0790+-1.1748     ?      7.2447+-0.9936        ? might be 1.0234x slower
   get-by-id-check-structure-elimination              5.3716+-0.5794            5.3625+-0.4855        
   get-by-id-proto-or-self                           18.6276+-0.8091           18.4346+-1.0502          might be 1.0105x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0585+-0.1090     ?      3.0734+-0.1989        ?
   get-by-id-self-or-proto                           19.4237+-2.5961           18.9027+-1.9265          might be 1.0276x faster
   get-by-val-out-of-bounds                           4.4994+-0.0785     ?      4.5629+-0.2039        ? might be 1.0141x slower
   get_callee_monomorphic                             3.3573+-0.7394            2.9379+-0.2737          might be 1.1427x faster
   get_callee_polymorphic                             3.9492+-0.2547     ?      4.0084+-0.3783        ? might be 1.0150x slower
   getter-no-activation                               5.1785+-0.3681            5.1122+-0.3797          might be 1.0130x faster
   getter-prototype                                  15.0407+-0.1938     ?     15.1294+-1.0844        ?
   getter-richards                                  127.6915+-3.3813          124.6259+-6.9628          might be 1.0246x faster
   getter                                             6.3164+-0.8393            5.7130+-0.4998          might be 1.1056x faster
   global-var-const-infer-fire-from-opt               0.9720+-0.0898     ?      1.0295+-0.1144        ? might be 1.0592x slower
   global-var-const-infer                             0.9024+-0.1065     ?      0.9817+-0.2145        ? might be 1.0879x slower
   HashMap-put-get-iterate-keys                      31.1036+-1.0953     ?     32.1727+-4.6163        ? might be 1.0344x slower
   HashMap-put-get-iterate                           34.0883+-2.2028           32.6543+-1.9931          might be 1.0439x faster
   HashMap-string-put-get-iterate                    32.0160+-0.6921           31.6593+-1.9511          might be 1.0113x faster
   hoist-make-rope                                   12.1187+-1.0933     ?     12.4460+-0.8654        ? might be 1.0270x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.0983+-0.0394     ?      5.1904+-0.1289        ? might be 1.0181x slower
   hoist-poly-check-structure                         3.7706+-0.0726     ?      3.7730+-0.0850        ?
   imul-double-only                                   8.5296+-0.6759     ?      9.3268+-2.1158        ? might be 1.0935x slower
   imul-int-only                                     10.7864+-1.4276           10.0552+-0.1893          might be 1.0727x faster
   imul-mixed                                         8.5047+-0.4569            8.3876+-0.1704          might be 1.0140x faster
   in-four-cases                                     22.1456+-0.2798     ?     22.3564+-0.2162        ?
   in-one-case-false                                 11.1701+-0.2335     ?     11.2282+-0.1624        ?
   in-one-case-true                                  11.0377+-0.0464     ?     11.2014+-0.4335        ? might be 1.0148x slower
   in-two-cases                                      12.0249+-0.9413           11.8019+-0.2699          might be 1.0189x faster
   indexed-properties-in-objects                      2.9872+-0.0386     ?      3.0658+-0.1178        ? might be 1.0263x slower
   infer-closure-const-then-mov-no-inline             4.3163+-0.4779     ?      4.6901+-0.5723        ? might be 1.0866x slower
   infer-closure-const-then-mov                      20.1397+-0.4548           19.8938+-0.3262          might be 1.0124x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.8813+-0.1920           12.7915+-0.2131        
   infer-closure-const-then-put-to-scope             22.0605+-0.8060     ?     22.0624+-0.9962        ?
   infer-closure-const-then-reenter-no-inline   
                                                     55.4795+-1.5557           54.3602+-0.4273          might be 1.0206x faster
   infer-closure-const-then-reenter                  22.2348+-0.6766     ?     23.1622+-2.2565        ? might be 1.0417x slower
   infer-constant-global-property                     3.7861+-0.3853            3.5536+-0.0483          might be 1.0654x faster
   infer-constant-property                            2.7598+-0.0207     ?      2.8130+-0.1299        ? might be 1.0193x slower
   infer-one-time-closure-ten-vars                   12.8559+-0.5446     ?     13.3357+-1.5744        ? might be 1.0373x slower
   infer-one-time-closure-two-vars                   12.8951+-1.6486           12.4902+-0.4917          might be 1.0324x faster
   infer-one-time-closure                            12.7609+-1.4112           12.2935+-0.6356          might be 1.0380x faster
   infer-one-time-deep-closure                       22.8702+-2.0732           21.9856+-1.3460          might be 1.0402x faster
   inline-arguments-access                            4.7402+-0.1915     ?      4.7900+-0.2857        ? might be 1.0105x slower
   inline-arguments-aliased-access                    4.7981+-0.2518            4.6713+-0.0675          might be 1.0271x faster
   inline-arguments-local-escape                      4.9210+-0.5154            4.7867+-0.1526          might be 1.0281x faster
   inline-get-scoped-var                              4.7880+-0.0357     ?      4.8816+-0.1579        ? might be 1.0195x slower
   inlined-put-by-id-transition                      11.8046+-0.1722     ?     11.8966+-0.2272        ?
   int-or-other-abs-then-get-by-val                   5.0622+-0.1724            4.9875+-0.0484          might be 1.0150x faster
   int-or-other-abs-zero-then-get-by-val             18.1048+-1.4270           17.9934+-0.9790        
   int-or-other-add-then-get-by-val                   4.4174+-0.0991            4.3489+-0.0289          might be 1.0158x faster
   int-or-other-add                                   5.4565+-0.1712            5.4531+-0.2196        
   int-or-other-div-then-get-by-val                   4.2794+-0.0263     ?      4.3871+-0.1830        ? might be 1.0252x slower
   int-or-other-max-then-get-by-val                   4.4460+-0.1628     ?      4.5142+-0.2041        ? might be 1.0154x slower
   int-or-other-min-then-get-by-val                   4.3719+-0.0473     ?      4.4609+-0.2493        ? might be 1.0204x slower
   int-or-other-mod-then-get-by-val                   3.9611+-0.0383            3.9563+-0.0261        
   int-or-other-mul-then-get-by-val                   3.9409+-0.0177     ?      4.0503+-0.1623        ? might be 1.0278x slower
   int-or-other-neg-then-get-by-val                   4.9025+-0.2559            4.8805+-0.0745        
   int-or-other-neg-zero-then-get-by-val             18.6997+-2.8542           18.2103+-1.6463          might be 1.0269x faster
   int-or-other-sub-then-get-by-val                   4.5969+-0.3538            4.4065+-0.0418          might be 1.0432x faster
   int-or-other-sub                                   3.7558+-0.1721     ?      3.9353+-0.4545        ? might be 1.0478x slower
   int-overflow-local                                 4.8270+-0.3399            4.6151+-0.0492          might be 1.0459x faster
   Int16Array-alloc-long-lived                       52.9849+-1.4205           52.3640+-0.8191          might be 1.0119x faster
   Int16Array-bubble-sort-with-byteLength            20.3641+-0.6069           20.0706+-0.3212          might be 1.0146x faster
   Int16Array-bubble-sort                            20.3995+-0.2368     ?     20.4997+-0.3495        ?
   Int16Array-load-int-mul                            1.7380+-0.2312            1.5424+-0.0167          might be 1.1268x faster
   Int16Array-to-Int32Array-set                      54.0756+-2.3864     ?     58.0498+-2.0023        ? might be 1.0735x slower
   Int32Array-alloc-large                            24.4413+-1.2589           23.9777+-1.1138          might be 1.0193x faster
   Int32Array-alloc-long-lived                       64.0084+-1.4728     ?     64.2548+-0.5238        ?
   Int32Array-alloc                                   3.6075+-0.5548     ?      3.6461+-0.5970        ? might be 1.0107x slower
   Int32Array-Int8Array-view-alloc                    7.0553+-0.6406            6.7932+-0.4275          might be 1.0386x faster
   int52-spill                                        5.8850+-0.2109            5.7084+-0.1211          might be 1.0309x faster
   Int8Array-alloc-long-lived                        48.8361+-1.5598           48.7661+-0.6169        
   Int8Array-load-with-byteLength                     3.6073+-0.4277            3.4529+-0.0845          might be 1.0447x faster
   Int8Array-load                                     3.5657+-0.2966     ?      3.6707+-0.4808        ? might be 1.0294x slower
   integer-divide                                    10.9965+-0.1224     ?     11.0092+-0.1974        ?
   integer-modulo                                     2.2345+-0.2805            2.1040+-0.0568          might be 1.0620x faster
   is-boolean-fold-tricky                             4.5772+-0.3006     ?      4.6104+-0.2422        ?
   is-boolean-fold                                    3.0296+-0.3475            3.0216+-0.1628        
   is-function-fold-tricky-internal-function   
                                                     11.9956+-0.2038     ?     12.4359+-0.3380        ? might be 1.0367x slower
   is-function-fold-tricky                            4.7743+-0.3173            4.7472+-0.3535        
   is-function-fold                                   3.0537+-0.3409            2.9462+-0.0600          might be 1.0365x faster
   is-number-fold-tricky                              4.4902+-0.0520     ?      4.5503+-0.2406        ? might be 1.0134x slower
   is-number-fold                                     3.0606+-0.2107            2.8929+-0.0330          might be 1.0579x faster
   is-object-or-null-fold-functions                   2.9908+-0.0643     ?      3.1110+-0.3408        ? might be 1.0402x slower
   is-object-or-null-fold-less-tricky                 5.1239+-1.1333            4.7003+-0.2217          might be 1.0901x faster
   is-object-or-null-fold-tricky                      6.7899+-0.1472     ?      6.8633+-0.3750        ? might be 1.0108x slower
   is-object-or-null-fold                             2.9856+-0.1051            2.9275+-0.0264          might be 1.0198x faster
   is-object-or-null-trickier-function                4.7738+-0.3539     ?      4.7747+-0.2797        ?
   is-object-or-null-trickier-internal-function   
                                                     12.6493+-0.0684     ?     12.7041+-0.0425        ?
   is-object-or-null-tricky-function                  4.6325+-0.1224     ?      4.6616+-0.1769        ?
   is-object-or-null-tricky-internal-function   
                                                      9.4765+-0.5709            9.4469+-0.0611        
   is-string-fold-tricky                              4.6137+-0.1776     ?      4.8032+-0.2818        ? might be 1.0411x slower
   is-string-fold                                     2.9776+-0.2208     ?      3.0142+-0.1528        ? might be 1.0123x slower
   is-undefined-fold-tricky                           3.9694+-0.4164     ?      4.0247+-0.4721        ? might be 1.0139x slower
   is-undefined-fold                                  2.9598+-0.1661     ?      2.9831+-0.2051        ?
   large-int-captured                                 4.9348+-0.0586     ?      4.9685+-0.1779        ?
   large-int-neg                                     16.3123+-0.4001     ?     17.3861+-1.6283        ? might be 1.0658x slower
   large-int                                         15.4489+-0.8586           14.8415+-0.2946          might be 1.0409x faster
   load-varargs-elimination                          23.6385+-0.6988           23.0935+-0.5116          might be 1.0236x faster
   logical-not-weird-types                            3.7013+-1.0216            3.4592+-0.2949          might be 1.0700x faster
   logical-not                                        4.7249+-0.2425            4.5843+-0.0533          might be 1.0307x faster
   lots-of-fields                                    12.7232+-0.8116           12.4855+-0.2857          might be 1.0190x faster
   make-indexed-storage                               3.2551+-0.1216     ?      3.2557+-0.0824        ?
   make-rope-cse                                     12.7361+-1.4326           12.4097+-1.0568          might be 1.0263x faster
   marsaglia-larger-ints                             36.4670+-1.0180           36.4375+-0.9861        
   marsaglia-osr-entry                               24.0907+-1.8570           23.3748+-0.5899          might be 1.0306x faster
   math-with-out-of-bounds-array-values              25.5010+-0.5837           25.0625+-0.3894          might be 1.0175x faster
   max-boolean                                        2.5767+-0.0988     ?      2.7056+-0.1567        ? might be 1.0500x slower
   method-on-number                                  17.4583+-0.3009     ?     17.9112+-0.9346        ? might be 1.0259x slower
   min-boolean                                        2.8064+-0.3585            2.7844+-0.3169        
   minus-boolean-double                               3.2610+-0.0550            3.2444+-0.0499        
   minus-boolean                                      2.5658+-0.3073            2.4191+-0.0172          might be 1.0606x faster
   misc-strict-eq                                    40.4473+-2.1415           40.1650+-2.4193        
   mod-boolean-double                                11.0638+-0.1379           10.9041+-0.1567          might be 1.0147x faster
   mod-boolean                                        8.0004+-0.1588            7.9596+-0.1754        
   mul-boolean-double                                 3.8450+-0.1624            3.8420+-0.2087        
   mul-boolean                                        2.9723+-0.0749     ?      2.9797+-0.0773        ?
   neg-boolean                                        3.2695+-0.0470     ?      3.3318+-0.1649        ? might be 1.0191x slower
   negative-zero-divide                               0.4174+-0.0427            0.4116+-0.0607          might be 1.0141x faster
   negative-zero-modulo                               0.3986+-0.0355            0.3857+-0.0247          might be 1.0332x faster
   negative-zero-negate                               0.3720+-0.0191            0.3598+-0.0124          might be 1.0339x faster
   nested-function-parsing                           41.2523+-1.7412           39.9197+-1.3196          might be 1.0334x faster
   new-array-buffer-dead                            115.6723+-2.1272          114.5385+-1.4922        
   new-array-buffer-push                              7.3392+-1.0779            7.3257+-0.3789        
   new-array-dead                                    19.3797+-0.5025     ?     20.1678+-1.5696        ? might be 1.0407x slower
   new-array-push                                     6.4863+-0.2000     ?      6.6836+-0.3323        ? might be 1.0304x slower
   no-inline-constructor                             41.7320+-0.8107           41.6415+-1.2519        
   number-test                                        3.2141+-0.3070     ?      3.2150+-0.2724        ?
   object-closure-call                                5.7545+-0.1369            5.7270+-0.0317        
   object-test                                        2.8904+-0.0464            2.8881+-0.0435        
   obvious-sink-pathology-taken                     140.3702+-2.9728     ?    143.8995+-2.4614        ? might be 1.0251x slower
   obvious-sink-pathology                           133.2245+-3.0371          133.0769+-1.3188        
   obviously-elidable-new-object                     35.9141+-1.2592           34.8810+-0.5379          might be 1.0296x faster
   plus-boolean-arith                                 2.6033+-0.1095     ?      2.8470+-0.2865        ? might be 1.0936x slower
   plus-boolean-double                                3.4722+-0.3458            3.3672+-0.2372          might be 1.0312x faster
   plus-boolean                                       2.5670+-0.2140            2.4544+-0.0286          might be 1.0459x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.3379+-0.0396     ?      3.7008+-0.8404        ? might be 1.1087x slower
   poly-chain-access-different-prototypes             2.7047+-0.3129            2.6700+-0.1656          might be 1.0130x faster
   poly-chain-access-simpler                          3.3394+-0.0571     ?      3.3752+-0.1712        ? might be 1.0107x slower
   poly-chain-access                                  2.6437+-0.0981            2.6078+-0.0276          might be 1.0138x faster
   poly-stricteq                                     60.8191+-2.0477     ?     61.9794+-2.5583        ? might be 1.0191x slower
   polymorphic-array-call                             1.5253+-0.1820            1.4576+-0.1122          might be 1.0465x faster
   polymorphic-get-by-id                              3.2069+-0.0419     ?      3.2308+-0.1119        ?
   polymorphic-put-by-id                             35.5503+-2.4587           32.0854+-1.2412          might be 1.1080x faster
   polymorphic-structure                             15.3671+-0.3991           15.3113+-1.5053        
   polyvariant-monomorphic-get-by-id                  9.0884+-0.5630            8.9532+-0.4822          might be 1.0151x faster
   proto-getter-access                                9.3042+-0.1729     ?      9.4566+-0.3159        ? might be 1.0164x slower
   put-by-id-replace-and-transition                   9.8323+-0.3201            9.6556+-0.2173          might be 1.0183x faster
   put-by-id-slightly-polymorphic                     2.8938+-0.0995     ?      2.9061+-0.1061        ?
   put-by-id                                         13.0365+-0.5142           12.8619+-0.5624          might be 1.0136x faster
   put-by-val-direct                                  0.4093+-0.0325     ?      0.4123+-0.0126        ?
   put-by-val-large-index-blank-indexing-type   
                                                     12.4361+-0.9710     ?     12.7490+-1.3617        ? might be 1.0252x slower
   put-by-val-machine-int                             2.9853+-0.2516            2.8753+-0.0801          might be 1.0383x faster
   rare-osr-exit-on-local                            15.2321+-0.3169     ?     15.6609+-1.0320        ? might be 1.0282x slower
   register-pressure-from-osr                        21.4696+-0.2886     ?     21.7397+-0.3232        ? might be 1.0126x slower
   repeat-multi-get-by-offset                        25.3495+-1.4178           24.7106+-0.4820          might be 1.0259x faster
   setter-prototype                                  10.6532+-0.2683     ?     10.6766+-0.3944        ?
   setter                                             5.5690+-0.1054     ?      6.2208+-0.9209        ? might be 1.1170x slower
   simple-activation-demo                            25.3441+-0.4863     ?     26.1314+-1.1835        ? might be 1.0311x slower
   simple-getter-access                              11.6911+-0.2199     ?     11.9335+-0.3541        ? might be 1.0207x slower
   simple-poly-call-nested                            7.9218+-0.2836     ?      8.5307+-0.6600        ? might be 1.0769x slower
   simple-poly-call                                   1.4770+-0.1800            1.3735+-0.0968          might be 1.0754x faster
   sin-boolean                                       22.7137+-0.9925     ?     23.7478+-2.0037        ? might be 1.0455x slower
   singleton-scope                                   62.6904+-0.5684     ?     64.5083+-3.2763        ? might be 1.0290x slower
   sink-function                                     12.1633+-0.1390     !     12.6837+-0.3603        ! definitely 1.0428x slower
   sink-huge-activation                              19.0327+-0.5206     ?     19.2293+-0.6322        ? might be 1.0103x slower
   sinkable-new-object-dag                           71.6020+-1.6095           70.6304+-1.5439          might be 1.0138x faster
   sinkable-new-object-taken                         52.6130+-2.7784           52.4972+-2.8857        
   sinkable-new-object                               39.4181+-1.2882           38.9067+-1.3055          might be 1.0131x faster
   slow-array-profile-convergence                     3.0290+-0.2013            2.9512+-0.1563          might be 1.0264x faster
   slow-convergence                                   2.9494+-0.2205            2.9088+-0.3048          might be 1.0140x faster
   slow-ternaries                                    19.6014+-2.4742     ?     22.3026+-1.5857        ? might be 1.1378x slower
   sorting-benchmark                                 18.8219+-0.8873     ?     18.8328+-0.4815        ?
   sparse-conditional                                 1.2193+-0.0549            1.1830+-0.0340          might be 1.0307x faster
   splice-to-remove                                  15.4615+-0.8164     ?     15.7972+-1.3820        ? might be 1.0217x slower
   string-char-code-at                               16.3339+-0.3841           16.2421+-0.2841        
   string-concat-object                               2.6727+-0.1151     ?      2.7445+-0.3147        ? might be 1.0269x slower
   string-concat-pair-object                          2.5900+-0.1182     ?      2.6722+-0.1382        ? might be 1.0318x slower
   string-concat-pair-simple                         12.4956+-1.1258           11.8678+-0.4164          might be 1.0529x faster
   string-concat-simple                              12.8571+-0.6548     ?     12.8901+-1.5226        ?
   string-cons-repeat                                 8.8676+-1.1929            8.6564+-0.8265          might be 1.0244x faster
   string-cons-tower                                  8.4738+-0.5043     ?      8.7577+-0.6238        ? might be 1.0335x slower
   string-equality                                   18.0010+-0.7842     ?     18.5206+-0.7459        ? might be 1.0289x slower
   string-get-by-val-big-char                         7.2613+-0.0899     ?      7.4558+-0.2843        ? might be 1.0268x slower
   string-get-by-val-out-of-bounds-insane             3.6541+-0.0358     ?      4.0948+-0.7242        ? might be 1.1206x slower
   string-get-by-val-out-of-bounds                    5.5048+-0.0284     ?      5.7115+-0.2444        ? might be 1.0375x slower
   string-get-by-val                                  3.3793+-0.0552     ?      3.4504+-0.0902        ? might be 1.0210x slower
   string-hash                                        2.1744+-0.0462     ?      2.2724+-0.4014        ? might be 1.0451x slower
   string-long-ident-equality                        16.5503+-4.8695           14.7026+-0.1606          might be 1.1257x faster
   string-out-of-bounds                              15.3559+-0.6588           14.8937+-0.3369          might be 1.0310x faster
   string-repeat-arith                               33.4270+-1.7242     !     36.9967+-1.6230        ! definitely 1.1068x slower
   string-sub                                        66.7242+-3.6755           65.8413+-4.1264          might be 1.0134x faster
   string-test                                        3.1992+-0.3032            3.0281+-0.0392          might be 1.0565x faster
   string-var-equality                               32.9170+-1.2822           32.1495+-0.3812          might be 1.0239x faster
   structure-hoist-over-transitions                   2.8124+-0.2555            2.7675+-0.1391          might be 1.0162x faster
   substring-concat-weird                            41.9745+-1.6355           40.7881+-0.8769          might be 1.0291x faster
   substring-concat                                  42.9856+-1.1849     ?     43.6468+-2.0968        ? might be 1.0154x slower
   substring                                         47.0066+-2.8101           46.2303+-1.6517          might be 1.0168x faster
   switch-char-constant                               3.0183+-0.3806     ?      3.1375+-0.5187        ? might be 1.0395x slower
   switch-char                                        7.1589+-1.1983            6.7773+-0.6331          might be 1.0563x faster
   switch-constant                                    8.5999+-0.2823            8.4880+-0.1189          might be 1.0132x faster
   switch-string-basic-big-var                       18.5255+-0.3129     ?     18.8117+-0.2950        ? might be 1.0155x slower
   switch-string-basic-big                           15.1660+-0.6018     ?     16.6142+-4.2040        ? might be 1.0955x slower
   switch-string-basic-var                           15.1960+-0.1612           15.1661+-0.1544        
   switch-string-basic                               13.5857+-0.1560     ?     13.7244+-0.3123        ? might be 1.0102x slower
   switch-string-big-length-tower-var                20.0801+-0.2567     ?     20.3727+-0.0981        ? might be 1.0146x slower
   switch-string-length-tower-var                    16.0488+-0.7769           15.6705+-0.2285          might be 1.0241x faster
   switch-string-length-tower                        13.2840+-0.1702     ?     13.7479+-1.6321        ? might be 1.0349x slower
   switch-string-short                               13.5298+-0.6102           13.2279+-0.3328          might be 1.0228x faster
   switch                                            12.7625+-0.2269     ?     12.8844+-0.2355        ?
   tear-off-arguments-simple                          3.5555+-0.1040     ?      3.5732+-0.0784        ?
   tear-off-arguments                                 4.9155+-0.1511     ?      5.1160+-0.4080        ? might be 1.0408x slower
   temporal-structure                                12.2638+-0.1187     ?     12.4526+-0.4767        ? might be 1.0154x slower
   to-int32-boolean                                  14.0331+-0.2138     ?     14.3897+-0.5277        ? might be 1.0254x slower
   try-catch-get-by-val-cloned-arguments             15.1026+-1.2512           14.5806+-0.2408          might be 1.0358x faster
   try-catch-get-by-val-direct-arguments              6.6929+-0.1817     ?      7.1008+-0.9555        ? might be 1.0609x slower
   try-catch-get-by-val-scoped-arguments              7.8922+-0.2499            7.6379+-0.2396          might be 1.0333x faster
   typed-array-get-set-by-val-profiling              32.8710+-0.6502     ?     34.1693+-2.0875        ? might be 1.0395x slower
   undefined-property-access                        345.8730+-5.0483          343.5166+-3.0118        
   undefined-test                                     3.1737+-0.1113     ?      3.2045+-0.1806        ?
   unprofiled-licm                                   23.0725+-0.6967           22.9987+-0.7461        
   varargs-call                                      15.9402+-1.7054           15.4289+-0.7248          might be 1.0331x faster
   varargs-construct-inline                          28.8119+-1.2746     ?     28.8876+-1.4511        ?
   varargs-construct                                 22.5822+-0.8611     ?     22.6681+-0.4186        ?
   varargs-inline                                     9.4407+-0.1156     ?      9.7305+-0.6258        ? might be 1.0307x slower
   varargs-strict-mode                               10.0551+-0.0840     ?     10.3384+-0.3775        ? might be 1.0282x slower
   varargs                                           10.3424+-0.5356     ?     10.5314+-1.1513        ? might be 1.0183x slower
   weird-inlining-const-prop                          3.5088+-0.3749     ?      3.5110+-0.1861        ?

   &lt;geometric&gt;                                        8.9682+-0.0308     ?      8.9732+-0.0233        ? might be 1.0006x slower

                                                        TipOfTree                 TinyPtrSet                                    
AsmBench:
   bigfib.cpp                                       498.6012+-2.0016     ?    502.2655+-8.9944        ?
   cray.c                                           428.2922+-1.6718     ?    430.4133+-8.7579        ?
   dry.c                                            487.8191+-7.4146          487.6808+-0.3369        
   FloatMM.c                                        721.1678+-2.2894          720.7960+-2.2501        
   gcc-loops.cpp                                   4236.7942+-365.3080       4096.3927+-8.4576          might be 1.0343x faster
   n-body.c                                         974.1358+-4.0840          972.1397+-3.1119        
   Quicksort.c                                      423.4521+-4.2217          418.1765+-7.4105          might be 1.0126x faster
   stepanov_container.cpp                          3598.1225+-25.8258    ?   3617.6165+-51.1902       ?
   Towers.c                                         256.1912+-1.7160     ?    256.3771+-1.6591        ?

   &lt;geometric&gt;                                      790.6351+-6.5441          788.1257+-2.4234          might be 1.0032x faster

                                                        TipOfTree                 TinyPtrSet                                    
CompressionBench:
   huffman                                          364.4367+-19.5987    ?    378.9141+-0.9070        ? might be 1.0397x slower
   arithmetic-simple                                367.4875+-2.1552     ?    368.6082+-2.4405        ?
   arithmetic-precise                               282.6110+-2.2479     ?    285.4447+-1.9486        ? might be 1.0100x slower
   arithmetic-complex-precise                       283.3549+-4.2915     ?    283.4703+-2.3068        ?
   arithmetic-precise-order-0                       378.3125+-4.8189     ?    379.2662+-6.3254        ?
   arithmetic-precise-order-1                       330.9698+-3.2994     ?    333.2535+-4.2668        ?
   arithmetic-precise-order-2                       366.5061+-3.7421          366.2938+-3.3808        
   arithmetic-simple-order-1                        432.5877+-4.7299          426.8851+-2.5227          might be 1.0134x faster
   arithmetic-simple-order-2                        470.5686+-3.0024     ?    471.2037+-5.0320        ?
   lz-string                                        316.7017+-2.6569     ?    318.4401+-6.8824        ?

   &lt;geometric&gt;                                      354.8864+-1.8841     ?    356.8649+-1.2719        ? might be 1.0056x slower

                                                        TipOfTree                 TinyPtrSet                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                   62.0686+-0.1277     ?     62.1736+-0.1863        ? might be 1.0017x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100373</commentid>
    <comment_count>5</comment_count>
      <attachid>254465</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-06-08 09:02:33 -0700</bug_when>
    <thetext>Comment on attachment 254465
the patch

r=me if you fix the Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100407</commentid>
    <comment_count>6</comment_count>
      <attachid>254501</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-08 11:12:51 -0700</bug_when>
    <thetext>Created attachment 254501
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100408</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-08 11:15:17 -0700</bug_when>
    <thetext>Attachment 254501 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStructureAbstractValue.cpp:283:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureSet.cpp:38:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureSet.cpp:70:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureSet.cpp:80:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100413</commentid>
    <comment_count>8</comment_count>
      <attachid>254502</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-08 11:59:11 -0700</bug_when>
    <thetext>Created attachment 254502
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100414</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-08 12:07:05 -0700</bug_when>
    <thetext>Attachment 254502 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStructureAbstractValue.cpp:283:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureSet.cpp:38:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureSet.cpp:70:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureSet.cpp:80:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100420</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-08 12:42:39 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/185324</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100422</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-06-08 12:48:42 -0700</bug_when>
    <thetext>Build fix in r185325.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254408</attachid>
            <date>2015-06-06 00:15:19 -0700</date>
            <delta_ts>2015-06-07 19:09:28 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36194</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
Y3BwCShyZXZpc2lvbiAxODUyNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMjAzICszMSwyNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNsZWFyKCkKLXsKLSAgICBkZWxldGVT
dHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKLSAgICBzZXRFbXB0eSgpOwotfQotCi1ib29sIFN0
cnVjdHVyZVNldDo6YWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIEFTU0VSVChzdHJ1
Y3R1cmUpOwotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoc2luZ2xlU3RydWN0dXJl
KCkgPT0gc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
IXNpbmdsZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICBzZXQoc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIE91dE9mTGluZUxpc3QqIGxp
c3QgPSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUoZGVmYXVsdFN0YXJ0aW5nU2l6ZSk7Ci0gICAgICAg
IGxpc3QtPm1fbGVuZ3RoID0gMjsKLSAgICAgICAgbGlzdC0+bGlzdCgpWzBdID0gc2luZ2xlU3Ry
dWN0dXJlKCk7Ci0gICAgICAgIGxpc3QtPmxpc3QoKVsxXSA9IHN0cnVjdHVyZTsKLSAgICAgICAg
c2V0KGxpc3QpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IGFkZE91dE9mTGluZShzdHJ1Y3R1cmUpOwotfQotCi1ib29sIFN0cnVjdHVyZVNldDo6cmVtb3Zl
KFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBp
ZiAoc2luZ2xlU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBzZXRFbXB0
eSgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJl
TGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0gIT0gc3RydWN0dXJlKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGxpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3QoKVstLWxp
c3QtPm1fbGVuZ3RoXTsKLSAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkgewotICAgICAgICAg
ICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShsaXN0KTsKLSAgICAgICAgICAgIHNldEVtcHR5KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBTdHJ1Y3R1cmVTZXQ6OmNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJl
KSBjb25zdAotewotICAgIGlmIChpc1RoaW4oKSkKLSAgICAgICAgcmV0dXJuIHNpbmdsZVN0cnVj
dHVyZSgpID09IHN0cnVjdHVyZTsKLQotICAgIHJldHVybiBjb250YWluc091dE9mTGluZShzdHJ1
Y3R1cmUpOwotfQotCi1ib29sIFN0cnVjdHVyZVNldDo6bWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikKLXsKLSAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKG90aGVy
LnNpbmdsZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZChvdGhlci5zaW5nbGVT
dHJ1Y3R1cmUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgT3V0
T2ZMaW5lTGlzdCogbGlzdCA9IG90aGVyLnN0cnVjdHVyZUxpc3QoKTsKLSAgICBpZiAobGlzdC0+
bV9sZW5ndGggPj0gMikgewotICAgICAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgICAgIE91
dE9mTGluZUxpc3QqIG15TmV3TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZSgKLSAgICAgICAg
ICAgICAgICBsaXN0LT5tX2xlbmd0aCArICEhc2luZ2xlU3RydWN0dXJlKCkpOwotICAgICAgICAg
ICAgaWYgKHNpbmdsZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgbXlOZXdMaXN0LT5t
X2xlbmd0aCA9IDE7Ci0gICAgICAgICAgICAgICAgbXlOZXdMaXN0LT5saXN0KClbMF0gPSBzaW5n
bGVTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldChteU5ld0xpc3Qp
OwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gYWRkT3V0T2ZMaW5lKGxpc3QtPmxpc3QoKVtpXSk7Ci0gICAgICAgIHJldHVybiBj
aGFuZ2VkOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobGlzdC0+bV9sZW5ndGgpOwotICAgIHJl
dHVybiBhZGQobGlzdC0+bGlzdCgpWzBdKTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRl
cihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotewotICAgIGlmIChvdGhlci5pc1RoaW4oKSkg
ewotICAgICAgICBpZiAoIW90aGVyLnNpbmdsZVN0cnVjdHVyZSgpIHx8ICFjb250YWlucyhvdGhl
ci5zaW5nbGVTdHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICBjbGVhcigpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICBzZXQob3RoZXIuc2luZ2xlU3Ry
dWN0dXJlKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
Q29udGFpbnNPdXRPZkxpbmUgY29udGFpbnNPdXRPZkxpbmUob3RoZXIpOwotICAgIGdlbmVyaWNG
aWx0ZXIoY29udGFpbnNPdXRPZkxpbmUpOwotfQotCi12b2lkIFN0cnVjdHVyZVNldDo6ZXhjbHVk
ZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotewotICAgIGlmIChvdGhlci5pc1RoaW4oKSkg
ewotICAgICAgICBpZiAob3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpCi0gICAgICAgICAgICByZW1v
dmUob3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuY29udGFpbnMoc2luZ2xlU3Ry
dWN0dXJlKCkpKQotICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlm
ICghb3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxp
c3QtPm1fbGVuZ3RoXTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKLSAgICAgICAg
Y2xlYXIoKTsKLX0KLQogI2lmIEVOQUJMRShERkdfSklUKQogCi1uYW1lc3BhY2UgewotCi1jbGFz
cyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMgewotcHVibGljOgotICAgIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWVDb250YWlucyhjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUm
IHZhbHVlKQotICAgICAgICA6IG1fdmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICBib29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbV92YWx1ZS5jb250YWlucyhzdHJ1Y3R1cmUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAg
Y29uc3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBtX3ZhbHVlOwotfTsKLQotY2xhc3Mg
U3BlY3VsYXRlZFR5cGVDb250YWlucyB7Ci1wdWJsaWM6Ci0gICAgU3BlY3VsYXRlZFR5cGVDb250
YWlucyhTcGVjdWxhdGVkVHlwZSB0eXBlKQotICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAmIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShz
dHJ1Y3R1cmUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgU3BlY3VsYXRlZFR5cGUgbV90eXBlOwot
fTsKLQotY2xhc3MgQXJyYXlNb2Rlc0NvbnRhaW5zIHsKLXB1YmxpYzoKLSAgICBBcnJheU1vZGVz
Q29udGFpbnMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQotICAgICAgICA6IG1fYXJyYXlNb2Rlcyhh
cnJheU1vZGVzKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcigpKFN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJyYXlNb2RlcyAmIGFy
cmF5TW9kZUZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICB9Ci1wcml2YXRlOgotICAgIEFy
cmF5TW9kZXMgbV9hcnJheU1vZGVzOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0K
IHZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlJiBvdGhlcikKIHsKLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMgZnVuY3Rv
cihvdGhlcik7Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVy
KFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIC0+IGJvb2wgeyByZXR1cm4gb3RoZXIuY29udGFp
bnMoc3RydWN0dXJlKTsgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoU3BlY3Vs
YXRlZFR5cGUgdHlwZSkKIHsKLSAgICBTcGVjdWxhdGVkVHlwZUNvbnRhaW5zIGZ1bmN0b3IodHlw
ZSk7Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKAorICAg
ICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJl
dHVybiB0eXBlICYgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAg
IH0pOwogfQogCiB2b2lkIFN0cnVjdHVyZVNldDo6ZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVz
IGFycmF5TW9kZXMpCiB7Ci0gICAgQXJyYXlNb2Rlc0NvbnRhaW5zIGZ1bmN0b3IoYXJyYXlNb2Rl
cyk7Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKAorICAg
ICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJl
dHVybiBhcnJheU1vZGVzICYgYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAg
ICAgICAgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgREZHOjpBYnN0
cmFjdFZhbHVlJiBvdGhlcikKQEAgLTIzOSw4OSArNjMsMjMgQEAgdm9pZCBTdHJ1Y3R1cmVTZXQ6
OmZpbHRlcihjb25zdCBERkc6OkFicwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLWJv
b2wgU3RydWN0dXJlU2V0Ojppc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNv
bnN0Ci17Ci0gICAgaWYgKGlzVGhpbigpKSB7Ci0gICAgICAgIGlmICghc2luZ2xlU3RydWN0dXJl
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRh
aW5zKHNpbmdsZVN0cnVjdHVyZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG90aGVyLmlzVGhp
bigpKSB7Ci0gICAgICAgIGlmICghb3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVM
aXN0KCk7Ci0gICAgICAgIGlmIChsaXN0LT5tX2xlbmd0aCA+PSAyKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAobGlzdC0+bGlzdCgpWzBdID09IG90aGVyLnNpbmdsZVN0
cnVjdHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3Qo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkgewot
ICAgICAgICBpZiAoIW90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKGxpc3QtPmxpc3QoKVtpXSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFN0cnVjdHVyZVNldDo6b3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29u
c3QKLXsKLSAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1cmUo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRh
aW5zKHNpbmdsZVN0cnVjdHVyZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG90aGVyLmlzVGhp
bigpKSB7Ci0gICAgICAgIGlmICghb3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBjb250YWluc091dE9mTGluZShvdGhlci5z
aW5nbGVTdHJ1Y3R1cmUoKSk7Ci0gICAgfQotICAgIAotICAgIE91dE9mTGluZUxpc3QqIGxpc3Qg
PSBzdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1f
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKGxpc3Qt
Pmxpc3QoKVtpXSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFN0cnVjdHVyZVNldDo6b3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1
cmVTZXQmIG90aGVyKSBjb25zdAotewotICAgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlzU3Vic2V0T2Yob3RoZXIpOwotfQot
CiBTcGVjdWxhdGVkVHlwZSBTdHJ1Y3R1cmVTZXQ6OnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMo
KSBjb25zdAogewotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVj
dHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIFNwZWNOb25lOwotICAgICAgICByZXR1cm4gc3Bl
Y3VsYXRpb25Gcm9tU3RydWN0dXJlKHNpbmdsZVN0cnVjdHVyZSgpKTsKLSAgICB9Ci0gICAgCiAg
ICAgU3BlY3VsYXRlZFR5cGUgcmVzdWx0ID0gU3BlY05vbmU7Ci0gICAgT3V0T2ZMaW5lTGlzdCog
bGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlz
dC0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgbWVyZ2VTcGVjdWxhdGlvbihyZXN1bHQsIHNwZWN1
bGF0aW9uRnJvbVN0cnVjdHVyZShsaXN0LT5saXN0KClbaV0pKTsKKyAgICBmb3JFYWNoKAorICAg
ICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICBtZXJnZVNwZWN1
bGF0aW9uKHJlc3VsdCwgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpOworICAg
ICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBBcnJheU1vZGVzIFN0cnVjdHVyZVNl
dDo6YXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCkgY29uc3QKIHsKLSAgICBpZiAoaXNUaGluKCkp
IHsKLSAgICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKHNpbmdsZVN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSk7Ci0gICAgfQotICAgIAogICAgIEFycmF5TW9kZXMgcmVzdWx0ID0gMDsKLSAgICBP
dXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKQotICAgICAgICBtZXJnZUFycmF5TW9kZXMo
cmVzdWx0LCBhc0FycmF5TW9kZXMobGlzdC0+bGlzdCgpW2ldLT5pbmRleGluZ1R5cGUoKSkpOwor
ICAgIGZvckVhY2goCisgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAg
ICAgICAgIG1lcmdlQXJyYXlNb2RlcyhyZXN1bHQsIGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTMyOSw4ICs4Nyw3IEBAIHZvaWQgU3RydWN0dXJlU2V0OjpkdW1wSW5Db250ZXh0KFByaW50U3QK
IHsKICAgICBDb21tYVByaW50ZXIgY29tbWE7CiAgICAgb3V0LnByaW50KCJbIik7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBpbkNvbnRleHQoKmF0KGkpLCBjb250ZXh0KSk7CisgICAgZm9yRWFjaChbJl0gKFN0cnVjdHVy
ZSogc3RydWN0dXJlKSB7IG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KCpzdHJ1Y3R1cmUsIGNv
bnRleHQpKTsgfSk7CiAgICAgb3V0LnByaW50KCJdIik7CiB9CiAKQEAgLTMzOSw1OSArOTYsNSBA
QCB2b2lkIFN0cnVjdHVyZVNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0CiAgICAgZHVtcEluQ29u
dGV4dChvdXQsIG51bGxwdHIpOwogfQogCi1ib29sIFN0cnVjdHVyZVNldDo6YWRkT3V0T2ZMaW5l
KFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1
Y3R1cmVMaXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKGxpc3QtPmxpc3QoKVtpXSA9PSBzdHJ1Y3R1cmUpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlmIChsaXN0LT5tX2xlbmd0
aCA8IGxpc3QtPm1fY2FwYWNpdHkpIHsKLSAgICAgICAgbGlzdC0+bGlzdCgpW2xpc3QtPm1fbGVu
Z3RoKytdID0gc3RydWN0dXJlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgT3V0T2ZMaW5lTGlzdCogbmV3TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZShsaXN0LT5t
X2NhcGFjaXR5ICogMik7Ci0gICAgbmV3TGlzdC0+bV9sZW5ndGggPSBsaXN0LT5tX2xlbmd0aCAr
IDE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC0+bV9sZW5ndGg7IGktLTspCi0gICAgICAg
IG5ld0xpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3QoKVtpXTsKLSAgICBuZXdMaXN0LT5saXN0
KClbbGlzdC0+bV9sZW5ndGhdID0gc3RydWN0dXJlOwotICAgIE91dE9mTGluZUxpc3Q6OmRlc3Ry
b3kobGlzdCk7Ci0gICAgc2V0KG5ld0xpc3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFN0cnVjdHVyZVNldDo6Y29udGFpbnNPdXRPZkxpbmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Ci17Ci0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkgewotICAgICAgICBp
ZiAobGlzdC0+bGlzdCgpW2ldID09IHN0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU3RydWN0dXJlU2V0Ojpjb3B5
RnJvbU91dE9mTGluZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotewotICAgIEFTU0VSVCgh
b3RoZXIuaXNUaGluKCkgJiYgb3RoZXIubV9wb2ludGVyICE9IHJlc2VydmVkVmFsdWUpOwotICAg
IE91dE9mTGluZUxpc3QqIG90aGVyTGlzdCA9IG90aGVyLnN0cnVjdHVyZUxpc3QoKTsKLSAgICBP
dXRPZkxpbmVMaXN0KiBteUxpc3QgPSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUob3RoZXJMaXN0LT5t
X2xlbmd0aCk7Ci0gICAgbXlMaXN0LT5tX2xlbmd0aCA9IG90aGVyTGlzdC0+bV9sZW5ndGg7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gb3RoZXJMaXN0LT5tX2xlbmd0aDsgaS0tOykKLSAgICAgICAg
bXlMaXN0LT5saXN0KClbaV0gPSBvdGhlckxpc3QtPmxpc3QoKVtpXTsKLSAgICBzZXQobXlMaXN0
KTsKLX0KLQotU3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0KiBTdHJ1Y3R1cmVTZXQ6Ok91dE9m
TGluZUxpc3Q6OmNyZWF0ZSh1bnNpZ25lZCBjYXBhY2l0eSkKLXsKLSAgICByZXR1cm4gbmV3IChO
b3ROdWxsLCBmYXN0TWFsbG9jKHNpemVvZihPdXRPZkxpbmVMaXN0KSArIGNhcGFjaXR5ICogc2l6
ZW9mKFN0cnVjdHVyZSopKSkgT3V0T2ZMaW5lTGlzdCgwLCBjYXBhY2l0eSk7Ci19Ci0KLXZvaWQg
U3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0OjpkZXN0cm95KE91dE9mTGluZUxpc3QqIGxpc3Qp
Ci17Ci0gICAgZmFzdEZyZWUobGlzdCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZp
c2lvbiAxODUyNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVk
ZSAiRHVtcENvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvVGlueVB0clNldC5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtMzgsNjggKzM5LDE1IEBAIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWU7CiBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZTsKIH0KIAotY2xhc3MgU3RydWN0dXJlU2V0IHsKK2Ns
YXNzIFN0cnVjdHVyZVNldCA6IHB1YmxpYyBUaW55UHRyU2V0PFN0cnVjdHVyZSo+IHsKIHB1Ymxp
YzoKLSAgICBTdHJ1Y3R1cmVTZXQoKQotICAgICAgICA6IG1fcG9pbnRlcigwKQotICAgIHsKLSAg
ICAgICAgc2V0RW1wdHkoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlU2V0KFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgICAgICA6IG1fcG9pbnRlcigwKQotICAgIHsKLSAgICAgICAgc2V0
KHN0cnVjdHVyZSk7Ci0gICAgfQotICAgIAotICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlU2V0
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi0gICAgICAgIDogbV9wb2ludGVyKDApCi0gICAg
ewotICAgICAgICBjb3B5RnJvbShvdGhlcik7Ci0gICAgfQotICAgIAotICAgIEFMV0FZU19JTkxJ
TkUgU3RydWN0dXJlU2V0JiBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgICAgIHJldHVybiAqdGhp
czsKLSAgICAgICAgZGVsZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIGNv
cHlGcm9tKG90aGVyKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICAKLSAgICB+
U3RydWN0dXJlU2V0KCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vz
c2FyeSgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNsZWFyKCk7CisgICAgdXNpbmcgVGlueVB0
clNldDo6VGlueVB0clNldDsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG9ubHlTdHJ1Y3R1cmUoKSBj
b25zdAogICAgIHsKLSAgICAgICAgaWYgKGlzVGhpbigpKQotICAgICAgICAgICAgcmV0dXJuIHNp
bmdsZVN0cnVjdHVyZSgpOwotICAgICAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJl
TGlzdCgpOwotICAgICAgICBpZiAobGlzdC0+bV9sZW5ndGggIT0gMSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gbGlzdC0+bGlzdCgpWzBdOworICAgICAgICBy
ZXR1cm4gb25seUVudHJ5KCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBib29sIHJlc3VsdCA9IGlzVGhpbigpICYmICFzaW5nbGVTdHJ1Y3R1
cmUoKTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIEFTU0VSVChtX3BvaW50ZXIg
IT0gcmVzZXJ2ZWRWYWx1ZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAot
ICAgIGJvb2wgYWRkKFN0cnVjdHVyZSopOwotICAgIGJvb2wgcmVtb3ZlKFN0cnVjdHVyZSopOwot
ICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKikgY29uc3Q7Ci0gICAgCi0gICAgYm9vbCBtZXJn
ZShjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVT
ZXQmKTsKLSAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgU3RydWN0dXJlU2V0Jik7Ci0gICAgCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgREZHOjpTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlJik7CiAgICAgdm9pZCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUpOwpAQCAtMTA3LDIx
MiArNTUsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IERGRzo6QWJzdHJhY3RW
YWx1ZSYpOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogICAgIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBnZW5lcmljRmlsdGVyKEZ1bmN0b3ImIGZ1bmN0b3Ip
Ci0gICAgewotICAgICAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgICAgIGlmICghc2luZ2xl
U3RydWN0dXJlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGZ1
bmN0b3Ioc2luZ2xlU3RydWN0dXJlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAoZnVuY3RvcihsaXN0LT5saXN0KClbaV0pKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgbGlzdC0+bGlzdCgpW2ktLV0gPSBsaXN0LT5saXN0KClbLS1saXN0
LT5tX2xlbmd0aF07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKLSAg
ICAgICAgICAgIGNsZWFyKCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNTdWJzZXRPZihjb25z
dCBTdHJ1Y3R1cmVTZXQmKSBjb25zdDsKLSAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1
Y3R1cmVTZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG90aGVyLmlzU3Vi
c2V0T2YoKnRoaXMpOwotICAgIH0KLSAgICAKLSAgICBib29sIG92ZXJsYXBzKGNvbnN0IFN0cnVj
dHVyZVNldCYpIGNvbnN0OwotICAgIAotICAgIHNpemVfdCBzaXplKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGlmIChpc1RoaW4oKSkKLSAgICAgICAgICAgIHJldHVybiAhIXNpbmdsZVN0cnVjdHVy
ZSgpOwotICAgICAgICByZXR1cm4gc3RydWN0dXJlTGlzdCgpLT5tX2xlbmd0aDsKLSAgICB9Ci0g
ICAgCi0gICAgU3RydWN0dXJlKiBhdChzaXplX3QgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
IChpc1RoaW4oKSkgewotICAgICAgICAgICAgQVNTRVJUKCFpKTsKLSAgICAgICAgICAgIEFTU0VS
VChzaW5nbGVTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gc2luZ2xlU3RydWN0dXJl
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGkgPCBzdHJ1Y3R1cmVMaXN0KCktPm1fbGVu
Z3RoKTsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZUxpc3QoKS0+bGlzdCgpW2ldOwotICAgIH0K
LSAgICAKLSAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJu
IGF0KGkpOyB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICAgICAgQVNTRVJUKHNpbmdsZVN0cnVjdHVyZSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBzaW5nbGVTdHJ1Y3R1cmUoKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gc3RydWN0dXJlTGlzdCgpLT5saXN0KClbc3RydWN0dXJlTGlzdCgpLT5tX2xl
bmd0aCAtIDFdOwotICAgIH0KLSAgICAKLSAgICBjbGFzcyBpdGVyYXRvciB7Ci0gICAgcHVibGlj
OgotICAgICAgICBpdGVyYXRvcigpCi0gICAgICAgICAgICA6IG1fc2V0KG51bGxwdHIpCi0gICAg
ICAgICAgICAsIG1faW5kZXgoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpdGVyYXRvcihjb25zdCBTdHJ1Y3R1cmVTZXQqIHNldCwgc2l6ZV90IGluZGV4KQotICAg
ICAgICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RydWN0dXJlKiBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiBtX3NldC0+YXQobV9pbmRleCk7IH0KLSAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2luZGV4Kys7Ci0gICAgICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCogbV9zZXQ7Ci0gICAgICAgIHNpemVfdCBtX2lu
ZGV4OwotICAgIH07Ci0gICAgCi0gICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcih0aGlzLCAwKTsgfQotICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKHRoaXMsIHNpemUoKSk7IH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7Ci0gICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgc3Bl
Y3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0OwogICAgIEFycmF5TW9kZXMgYXJyYXlNb2Rl
c0Zyb21TdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIERGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHRoaW5G
bGFnID0gMTsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkRmxhZyA9IDI7Ci0g
ICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBmbGFncyA9IHRoaW5GbGFnIHwgcmVzZXJ2ZWRGbGFn
OwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVzZXJ2ZWRWYWx1ZSA9IDQ7Ci0KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdFN0YXJ0aW5nU2l6ZSA9IDQ7Ci0gICAgCi0gICAg
Ym9vbCBhZGRPdXRPZkxpbmUoU3RydWN0dXJlKik7Ci0gICAgYm9vbCBjb250YWluc091dE9mTGlu
ZShTdHJ1Y3R1cmUqKSBjb25zdDsKLSAgICAKLSAgICBjbGFzcyBDb250YWluc091dE9mTGluZSB7
Ci0gICAgcHVibGljOgotICAgICAgICBDb250YWluc091dE9mTGluZShjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCkKLSAgICAgICAgICAgIDogbV9zZXQoc2V0KQotICAgICAgICB7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5zT3V0T2ZMaW5lKHN0
cnVjdHVyZSk7Ci0gICAgICAgIH0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIG1fc2V0OwotICAgIH07Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUZyb20o
Y29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChvdGhlci5pc1Ro
aW4oKSB8fCBvdGhlci5tX3BvaW50ZXIgPT0gcmVzZXJ2ZWRWYWx1ZSkgewotICAgICAgICAgICAg
Ym9vbCB2YWx1ZSA9IGdldFJlc2VydmVkRmxhZygpOwotICAgICAgICAgICAgbV9wb2ludGVyID0g
b3RoZXIubV9wb2ludGVyOwotICAgICAgICAgICAgc2V0UmVzZXJ2ZWRGbGFnKHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb3B5RnJvbU91dE9mTGluZShv
dGhlcik7Ci0gICAgfQotICAgIHZvaWQgY29weUZyb21PdXRPZkxpbmUoY29uc3QgU3RydWN0dXJl
U2V0JiBvdGhlcik7Ci0gICAgCi0gICAgY2xhc3MgT3V0T2ZMaW5lTGlzdCB7Ci0gICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgT3V0T2ZMaW5lTGlzdCogY3JlYXRlKHVuc2lnbmVkIGNhcGFjaXR5
KTsKLSAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShPdXRPZkxpbmVMaXN0Kik7Ci0gICAgICAg
IAotICAgICAgICBTdHJ1Y3R1cmUqKiBsaXN0KCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFN0cnVj
dHVyZSoqPih0aGlzICsgMSk7IH0KLSAgICAgICAgCi0gICAgICAgIE91dE9mTGluZUxpc3QodW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBjYXBhY2l0eSkKLSAgICAgICAgICAgIDogbV9sZW5ndGgo
bGVuZ3RoKQotICAgICAgICAgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5KQotICAgICAgICB7Ci0g
ICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICAgICAgdW5zaWduZWQg
bV9jYXBhY2l0eTsKLSAgICB9OwotICAgIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkZWxldGVT
dHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1RoaW4oKSAm
JiBtX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSkKLSAgICAgICAgICAgIE91dE9mTGluZUxpc3Q6
OmRlc3Ryb3koc3RydWN0dXJlTGlzdCgpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1RoaW4o
KSBjb25zdCB7IHJldHVybiBtX3BvaW50ZXIgJiB0aGluRmxhZzsgfQotICAgIAotICAgIHZvaWQq
IHBvaW50ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lk
Kj4obV9wb2ludGVyICYgfmZsYWdzKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzaW5n
bGVTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVGhpbigpKTsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZSo+KHBvaW50ZXIoKSk7Ci0gICAgfQot
ICAgIAotICAgIE91dE9mTGluZUxpc3QqIHN0cnVjdHVyZUxpc3QoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFpc1RoaW4oKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxPdXRP
ZkxpbmVMaXN0Kj4ocG9pbnRlcigpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBzZXQoYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oc3RydWN0dXJlKSwgdHJ1ZSk7Ci0gICAgfQotICAgIHZvaWQgc2V0KE91dE9mTGluZUxpc3Qq
IHN0cnVjdHVyZXMpCi0gICAgewotICAgICAgICBzZXQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
c3RydWN0dXJlcyksIGZhbHNlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRFbXB0eSgpCi0gICAgewot
ICAgICAgICBzZXQoMCwgdHJ1ZSk7Ci0gICAgfQotICAgIHZvaWQgc2V0KHVpbnRwdHJfdCBwb2lu
dGVyLCBib29sIHNpbmdsZVN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIG1fcG9pbnRlciA9IHBv
aW50ZXIgfCAoc2luZ2xlU3RydWN0dXJlID8gdGhpbkZsYWcgOiAwKSB8IChtX3BvaW50ZXIgJiBy
ZXNlcnZlZEZsYWcpOwotICAgIH0KLSAgICBib29sIGdldFJlc2VydmVkRmxhZygpIGNvbnN0IHsg
cmV0dXJuIG1fcG9pbnRlciAmIHJlc2VydmVkRmxhZzsgfQotICAgIHZvaWQgc2V0UmVzZXJ2ZWRG
bGFnKGJvb2wgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBt
X3BvaW50ZXIgfD0gcmVzZXJ2ZWRGbGFnOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3Bv
aW50ZXIgJj0gfnJlc2VydmVkRmxhZzsKLSAgICB9Ci0KLSAgICB1aW50cHRyX3QgbV9wb2ludGVy
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NTI3NykKKysrIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAK
IAkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUM0MTU0RkIyMkUwMDk4
M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsg
fTsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE1
MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGRERC
RkE4MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTYxNjY2REZBMzAwQzU1RkVG
IC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi87IH07CisJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0Ux
NSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9Owog
CQkxNDAyMkY0MTE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMjJGNDAxOEY1QzNGQzAwN0ZG
MEVCIC8qIGxpYmJtYWxsb2MuYSAqLzsgfTsKIAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8q
IFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovOyB9OwogCQkxNDNG
NjEyMDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNp
emUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwpAQCAtMzIwLDYgKzMy
MSw3IEBACiAJCTBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdQcmludFN0cmVh
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1
NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVDM0VFNDE3MUI4MzQ3MDBGREFDOEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJ5dGVTcGluTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVENjdCNTFC
MjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUaW55UHRyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDIy
RjQwMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBwYXRoID0gbGliYm1hbGxv
Yy5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxNDNGNjExRDE1NjVG
MEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSQU1TaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYx
MUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUkFNU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODYyLDYg
Kzg2NCw3IEBACiAJCQkJQThBNDczMzYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1B0aHJl
YWRzLmNwcCAqLywKIAkJCQlBOEE0NzMzRTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaCAqLywKIAkJCQlBOEE0NzMzRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3Bl
Y2lmaWMuaCAqLywKKwkJCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5o
ICovLAogCQkJCTE0OUVGMTYyMTZCQkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oICovLAogCQkJ
CTgzRkJBOTMxMTlERjQ1OTcwMEYzMEFEQiAvKiBUeXBlQ2FzdHMuaCAqLywKIAkJCQlBOEE0NzM1
QzE1MUE4MjVCMDA0MTIzRkYgLyogVW5pb25GaW5kLmggKi8sCkBAIC0xMjAxLDYgKzEyMDQsNyBA
QAogCQkJCUE4QTQ3NDdEMTUxQTgyNUIwMDQxMjNGRiAvKiBWYWx1ZUNoZWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQ3RTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQ3RjE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0ODAxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0QTBBRDNBMUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVl
dWUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvVGlueVB0clNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbnlQdHJTZXQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XVEYvd3RmL1RpbnlQdHJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFRpbnlQdHJTZXRfaAorI2RlZmluZSBUaW55UHRyU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKK2NsYXNzIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWU7Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVGlueVB0clNldCB7Citw
dWJsaWM6CisgICAgVGlueVB0clNldCgpCisgICAgICAgIDogbV9wb2ludGVyKDApCisgICAgewor
ICAgICAgICBzZXRFbXB0eSgpOworICAgIH0KKyAgICAKKyAgICBUaW55UHRyU2V0KFQgZWxlbWVu
dCkKKyAgICAgICAgOiBtX3BvaW50ZXIoMCkKKyAgICB7CisgICAgICAgIHNldChlbGVtZW50KTsK
KyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSBUaW55UHRyU2V0KGNvbnN0IFRpbnlQdHJT
ZXQmIG90aGVyKQorICAgICAgICA6IG1fcG9pbnRlcigwKQorICAgIHsKKyAgICAgICAgY29weUZy
b20ob3RoZXIpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIFRpbnlQdHJTZXQmIG9w
ZXJhdG9yPShjb25zdCBUaW55UHRyU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlz
ID09ICZvdGhlcikKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgZGVsZXRlTGlz
dElmTmVjZXNzYXJ5KCk7CisgICAgICAgIGNvcHlGcm9tKG90aGVyKTsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKyAgICAKKyAgICB+VGlueVB0clNldCgpCisgICAgeworICAgICAgICBk
ZWxldGVMaXN0SWZOZWNlc3NhcnkoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisg
ICAgeworICAgICAgICBkZWxldGVMaXN0SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgc2V0RW1wdHko
KTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgb25seSBlbnRyeSBpZiB0aGUgYXJy
YXkgaGFzIGV4YWN0bHkgb25lIGVudHJ5LgorICAgIFQgb25seUVudHJ5KCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpc1RoaW4oKSkKKyAgICAgICAgICAgIHJldHVybiBzaW5nbGVFbnRyeSgp
OworICAgICAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gdGhpcy0+bGlzdCgpOworICAgICAgICBp
ZiAobGlzdC0+bV9sZW5ndGggIT0gMSkKKyAgICAgICAgICAgIHJldHVybiBUKCk7CisgICAgICAg
IHJldHVybiBsaXN0LT5saXN0KClbMF07CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0CisgICAgeworICAgICAgICBib29sIHJlc3VsdCA9IGlzVGhpbigpICYmICFzaW5nbGVF
bnRyeSgpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgQVNTRVJUKG1fcG9vaW50
ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUpOwor
ICAgICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmIChzaW5nbGVFbnRyeSgpID09
IHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICgh
c2luZ2xlRW50cnkoKSkgeworICAgICAgICAgICAgICAgIHNldCh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUoZGVmYXVsdFN0
YXJ0aW5nU2l6ZSk7CisgICAgICAgICAgICBsaXN0LT5tX2xlbmd0aCA9IDI7CisgICAgICAgICAg
ICBsaXN0LT5saXN0KClbMF0gPSBzaW5nbGVFbnRyeSgpOworICAgICAgICAgICAgbGlzdC0+bGlz
dCgpWzFdID0gdmFsdWU7CisgICAgICAgICAgICBzZXQobGlzdCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGFkZE91dE9mTGlu
ZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVtb3ZlKFQgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmIChzaW5nbGVFbnRyeSgpID09
IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgc2V0RW1wdHkoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHRoaXMtPmxp
c3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0gIT0gZW50cnkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBsaXN0LT5saXN0KClbaV0gPSBsaXN0LT5s
aXN0KClbLS1saXN0LT5tX2xlbmd0aF07CisgICAgICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShsaXN0KTsKKyAgICAg
ICAgICAgICAgICBzZXRFbXB0eSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBib29sIGNvbnRhaW5zKFQgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUaGlu
KCkpCisgICAgICAgICAgICByZXR1cm4gc2luZ2xlRW50cnkoKSA9PSB2YWx1ZTsKKyAgICAgICAg
cmV0dXJuIGNvbnRhaW5zT3V0T2ZMaW5lKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBt
ZXJnZShjb25zdCBUaW55UHRyU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChvdGhlci5p
c1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKG90aGVyLnNpbmdsZUVudHJ5KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFkZChvdGhlci5zaW5nbGVFbnRyeSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCog
bGlzdCA9IG90aGVyLmxpc3QoKTsKKyAgICAgICAgaWYgKGxpc3QtPm1fbGVuZ3RoID49IDIpIHsK
KyAgICAgICAgICAgIGlmIChpc1RoaW4oKSkgeworICAgICAgICAgICAgICAgIE91dE9mTGluZUxp
c3QqIG15TmV3TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgbGlzdC0+bV9sZW5ndGggKyAhIXNpbmdsZUVudHJ5KCkpOworICAgICAgICAgICAgICAgIGlm
IChzaW5nbGVFbnRyeSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG15TmV3TGlzdC0+bV9sZW5n
dGggPSAxOworICAgICAgICAgICAgICAgICAgICBteU5ld0xpc3QtPmxpc3QoKVswXSA9IHNpbmds
ZUVudHJ5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldChteU5ld0xp
c3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGFkZE91dE9mTGluZShsaXN0LT5saXN0KClbaV0p
OworICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVChsaXN0LT5tX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBhZGQobGlzdC0+bGlz
dCgpWzBdKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGlm
IChpc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFzaW5nbGVFbnRyeSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGZ1bmN0b3Ioc2luZ2xlRW50cnkoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxp
c3QqIGxpc3QgPSB0aGlzLT5saXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsaXN0LT5tX2xlbmd0aDsgKytpKQorICAgICAgICAgICAgZnVuY3RvcihsaXN0LT5saXN0KClb
aV0pOworICAgIH0KKyAgICAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGdlbmVyaWNGaWx0ZXIoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGlmIChpc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFzaW5nbGVFbnRyeSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmdW5jdG9yKHNpbmdsZUVudHJ5
KCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxp
c3QqIGxpc3QgPSB0aGlzLT5saXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3RvcihsaXN0LT5s
aXN0KClbaV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGlzdC0+
bGlzdCgpW2ktLV0gPSBsaXN0LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAg
fQorICAgICAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBUaW55UHRyU2V0JiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmIChvdGhlci5pc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFvdGhl
ci5zaW5nbGVFbnRyeSgpIHx8ICFjb250YWlucyhvdGhlci5zaW5nbGVFbnRyeSgpKSkKKyAgICAg
ICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICBzZXQob3RoZXIuc2luZ2xlRW50cnkoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGdlbmVyaWNGaWx0ZXIoWyZdIChUIHZhbHVlKSB7IHJldHVybiBvdGhlci5jb250YWluc091
dE9mTGluZSh2YWx1ZSk7IH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGV4Y2x1ZGUoY29uc3Qg
VGlueVB0clNldCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsK
KyAgICAgICAgICAgIGlmIChvdGhlci5zaW5nbGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgICAg
ICByZW1vdmUob3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBnZW5lcmljRmlsdGVyKFsmXSAoVCB2YWx1ZSkg
eyByZXR1cm4gIW90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKHZhbHVlKTsgfSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBUaW55UHRyU2V0JikgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChpc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFzaW5nbGVFbnRyeSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG90aGVyLmNv
bnRhaW5zKHNpbmdsZUVudHJ5KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
b3RoZXIuaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmICghb3RoZXIuc2luZ2xlRW50cnkoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBPdXRPZkxpbmVMaXN0
KiBsaXN0ID0gdGhpcy0+bGlzdCgpOworICAgICAgICAgICAgaWYgKGxpc3QtPm1fbGVuZ3RoID49
IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGxpc3Qt
Pmxpc3QoKVswXSA9PSBvdGhlci5zaW5nbGVFbnRyeSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gdGhpcy0+bGlzdCgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
aWYgKCFvdGhlci5jb250YWluc091dE9mTGluZShsaXN0LT5saXN0KClbaV0pKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgVGlueVB0clNldCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhpcyk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgVGlueVB0clNldCYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmICghc2lu
Z2xlRW50cnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gb3RoZXIuY29udGFpbnMoc2luZ2xlRW50cnkoKSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChvdGhlci5pc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFvdGhlci5z
aW5nbGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gY29udGFpbnNPdXRPZkxpbmUob3RoZXIuc2luZ2xlRW50cnkoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSB0aGlzLT5saXN0
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgp
W2ldKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpc1RoaW4oKSkKKyAgICAgICAgICAgIHJldHVybiAhIXNpbmdsZUVudHJ5
KCk7CisgICAgICAgIHJldHVybiBsaXN0KCktPm1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBU
IGF0KHNpemVfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVGhpbigpKSB7CisgICAg
ICAgICAgICBBU1NFUlQoIWkpOworICAgICAgICAgICAgQVNTRVJUKHNpbmdsZUVudHJ5KCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZUVudHJ5KCk7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUKGkgPCBsaXN0KCktPm1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGxpc3QoKS0+bGlzdCgp
W2ldOworICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0
dXJuIGF0KGkpOyB9CisgICAgCisgICAgVCBsYXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc1RoaW4oKSkgeworICAgICAgICAgICAgQVNTRVJUKHNpbmdsZUVudHJ5KCkpOworICAgICAg
ICAgICAgcmV0dXJuIHNpbmdsZUVudHJ5KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxp
c3QoKS0+bGlzdCgpW2xpc3QoKS0+bV9sZW5ndGggLSAxXTsKKyAgICB9CisgICAgCisgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAg
ICAgOiBtX3NldChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgVGlueVB0clNldCog
c2V0LCBzaXplX3QgaW5kZXgpCisgICAgICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBUIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LT5hdChpbmRleCk7IH0KKyAgICAg
ICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4
Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9
PSBvdGhlci5tX2luZGV4OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgIAor
ICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFRpbnlQdHJTZXQqIG1fc2V0OworICAgICAgICBz
aXplX3QgbV9pbmRleDsKKyAgICB9OworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFRpbnlQdHJTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHNp
emUoKSAhPSBvdGhlci5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBpc1N1YnNldE9mKG90aGVyKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsKKworICAgIHN0YXRp
YyBjb25zdCB1aW50cHRyX3QgdGhpbkZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRy
X3QgcmVzZXJ2ZWRGbGFnID0gMjsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0g
dGhpbkZsYWcgfCByZXNlcnZlZEZsYWc7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNl
cnZlZFZhbHVlID0gNDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRp
bmdTaXplID0gNDsKKyAgICAKKyAgICBib29sIGFkZE91dE9mTGluZShUIHZhbHVlKQorICAgIHsK
KyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHRoaXMtPmxpc3QoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChsaXN0LT5saXN0KClbaV0gPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGlzdC0+bV9sZW5ndGggPCBs
aXN0LT5tX2NhcGFjaXR5KSB7CisgICAgICAgICAgICBsaXN0LT5saXN0KClbbGlzdC0+bV9sZW5n
dGgrK10gPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBPdXRPZkxpbmVMaXN0KiBuZXdMaXN0ID0gT3V0T2ZMaW5lTGlzdDo6Y3Jl
YXRlKGxpc3QtPm1fY2FwYWNpdHkgKiAyKTsKKyAgICAgICAgbmV3TGlzdC0+bV9sZW5ndGggPSBs
aXN0LT5tX2xlbmd0aCArIDE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxpc3QtPm1fbGVu
Z3RoOyBpLS07KQorICAgICAgICAgICAgbmV3TGlzdC0+bGlzdCgpW2ldID0gbGlzdC0+bGlzdCgp
W2ldOworICAgICAgICBuZXdMaXN0LT5saXN0KClbbGlzdC0+bV9sZW5ndGhdID0gdmFsdWU7Cisg
ICAgICAgIE91dE9mTGluZUxpc3Q6OmRlc3Ryb3kobGlzdCk7CisgICAgICAgIHNldChuZXdMaXN0
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnNP
dXRPZkxpbmUoVCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIE91dE9mTGluZUxpc3QqIGxp
c3QgPSB0aGlzLT5saXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0
LT5tX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAobGlzdC0+bGlzdCgpW2ldID09IHZh
bHVlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlGcm9t
KGNvbnN0IFRpbnlQdHJTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzVGhp
bigpIHx8IG90aGVyLm1fcG9pbnRlciA9PSByZXNlcnZlZFZhbHVlKSB7CisgICAgICAgICAgICBi
b29sIHZhbHVlID0gZ2V0UmVzZXJ2ZWRGbGFnKCk7CisgICAgICAgICAgICBtX3BvaW50ZXIgPSBv
dGhlci5tX3BvaW50ZXI7CisgICAgICAgICAgICBzZXRSZXNlcnZlZEZsYWcodmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNvcHlGcm9tT3V0T2ZMaW5lKG90
aGVyKTsKKyAgICB9CisgICAgCisgICAgTkVWRVJfSU5MSU5FIHZvaWQgY29weUZyb21PdXRPZkxp
bmUoY29uc3QgVGlueVB0clNldCYgb3RoZXIpCisgICAgeworICAgICAgICBBU1NFUlQoIW90aGVy
LmlzVGhpbigpICYmIG90aGVyLm1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKTsKKyAgICAgICAg
T3V0T2ZMaW5lTGlzdCogb3RoZXJMaXN0ID0gb3RoZXIubGlzdCgpOworICAgICAgICBPdXRPZkxp
bmVMaXN0KiBteUxpc3QgPSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUob3RoZXJMaXN0LT5tX2xlbmd0
aCk7CisgICAgICAgIG15TGlzdC0+bV9sZWd0aCA9IG90aGVyTGlzdC0+bV9sZW5ndGg7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG90aGVyTGlzdC0+bV9sZW5ndGg7IGktLTspCisgICAgICAg
ICAgICBteUxpc3QtPmxpc3QoKVtpXSA9IG90aGVyTGlzdC0+bGlzdCgpW2ldOworICAgICAgICBz
ZXQobXlMaXN0KTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRlbGV0ZUxp
c3RJZk5lY2Vzc2FyeSgpCisgICAgeworICAgICAgICBpZiAoIWlzVGhpbigpICYmIG1fcG9pbnRl
ciAhPSByZXNlcnZlZFZhbHVlKQorICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShs
aXN0KCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVGhpbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG9pbnRlciAmIHRoaW5GbGFnOyB9CisgICAgCisgICAgdm9pZCogcG9pbnRlcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihtX3BvaW50ZXIgJiB+Zmxh
Z3MpOworICAgIH0KKyAgICAKKyAgICBUIHNpbmdsZUVudHJ5KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc1RoaW4oKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihwb2lu
dGVyKCkpOworICAgIH0KKyAgICAKKyAgICBPdXRPZkxpbmVMaXN0KiBsaXN0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghaXNUaGluKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8T3V0T2ZMaW5lTGlzdCo+KHBvaW50ZXIoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
KFQgdmFsdWUpCisgICAgeworICAgICAgICBzZXQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFs
dWUpLCB0cnVlKTsKKyAgICB9CisgICAgdm9pZCBzZXQoT3V0T2ZMaW5lTGlzdCogbGlzdCkKKyAg
ICB7CisgICAgICAgIHNldChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihsaXN0KSwgZmFsc2UpOwor
ICAgIH0KKyAgICB2b2lkIHNldEVtcHR5KCkKKyAgICB7CisgICAgICAgIHNldCgwLCB0cnVlKTsK
KyAgICB9CisgICAgdm9pZCBzZXQodWludHB0cl90IHBvaW50ZXIsIGJvb2wgc2luZ2xlRW50cnkp
CisgICAgeworICAgICAgICBtX3BvaW50ZXIgPSBwb2ludGVyIHwgKHNpbmdsZUVudHJ5ID8gdGhp
bkZsYWcgOiAwKSB8IChtX3BvaW50ZXIgJiByZXNlcnZlZEZsYWcpOworICAgIH0KKyAgICBib29s
IGdldFJlc2VydmVkRmxhZygpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnRlciAmIHJlc2VydmVkRmxh
ZzsgfQorICAgIHZvaWQgc2V0UmVzZXJ2ZWRGbGFnKGJvb2wgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUpCisgICAgICAgICAgICBtX3BvaW50ZXIgfD0gcmVzZXJ2ZWRGbGFnOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX3BvaW50ZXIgJj0gfnJlc2VydmVkRmxhZzsKKyAgICB9
CisgICAgCisgICAgdWludHB0cl90IG1fcG9pbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCit1c2luZyBXVEY6OlRpbnlQdHJTZXQ7CisKKyNlbmRpZiAvLyBUaW55UHRyU2V0X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254465</attachid>
            <date>2015-06-07 19:09:28 -0700</date>
            <delta_ts>2015-06-08 11:12:51 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48110</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1MzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDE1LTA2LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIHRpbnkgc2V0IG1hZ2ljIGluIFN0cnVjdHVyZVNldCBzaG91bGQgYmUgYXZhaWxhYmxlIGlu
IFdURgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1
NzIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBJIG1vdmVkIHRoZSBnZW5lcmljIGxvZ2ljIG9mIHNtYWxsIHNldHMgb2YgcG9pbnRlcnMg
YW5kIG1vdmVkIGl0IGludG8gV1RGLiBOb3csCisgICAgICAgIFN0cnVjdHVyZVNldCBpcyBhIHN1
YmNsYXNzIG9mIFRpbnlQdHJTZXQ8U3RydWN0dXJlKj4uIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkg
ZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuCisKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1
cmVTZXQuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmZpbHRlcik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVNldDo6ZmlsdGVyQXJyYXlNb2Rlcyk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNldDo6c3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNldDo6YXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU2V0OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpk
dW1wKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpjbGVhcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU2V0OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6
OmNvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjptZXJnZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6ZXhjbHVkZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6b3ZlcmxhcHMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTZXQ6OmFkZE91dE9mTGluZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVNldDo6Y29udGFpbnNPdXRPZkxpbmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTZXQ6OmNvcHlGcm9tT3V0T2ZMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjpPdXRPZkxpbmVMaXN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3Q6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Om9u
bHlTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OlN0cnVjdHVyZVNldCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6b3BlcmF0b3I9KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojp+U3RydWN0dXJlU2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojppc0VtcHR5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU2V0OjpnZW5lcmljRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU2V0Ojppc1N1cGVyc2V0T2YpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6
OmF0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpvcGVyYXRvcltdKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpsYXN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6aXRlcmF0b3IpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvciopOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9y
IT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmJlZ2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjplbmQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpDb250YWluc091dE9mTGluZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Q29udGFpbnNPdXRPZkxpbmU6
Om9wZXJhdG9yKCkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmNvcHlG
cm9tKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0
OjpsaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpPdXRPZkxpbmVM
aXN0OjpPdXRPZkxpbmVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0
OjpkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTZXQ6OmlzVGhpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVNldDo6cG9pbnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6c2lu
Z2xlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpzdHJ1
Y3R1cmVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldEVtcHR5KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpnZXRSZXNlcnZlZEZsYWcpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldFJlc2VydmVkRmxhZyk6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyU2xvdyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y29udGFpbnMpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6bWFrZVRvcCk6CisKIDIwMTUtMDYtMDYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldHVybmVkIEV4Y2VwdGlvbiogdmFsdWVzIG5lZWQgdG8gYmUg
aW5pdGlhbGl6ZWQgdG8gbnVsbHB0ciB3aGVuIG5vIGV4Y2VwdGlvbnMgYXJlIHRocm93bi4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3Bw
CShyZXZpc2lvbiAxODUzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMjAzICszMSwyNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNsZWFyKCkKLXsKLSAgICBkZWxldGVTdHJ1
Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKLSAgICBzZXRFbXB0eSgpOwotfQotCi1ib29sIFN0cnVj
dHVyZVNldDo6YWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIEFTU0VSVChzdHJ1Y3R1
cmUpOwotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoc2luZ2xlU3RydWN0dXJlKCkg
PT0gc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXNp
bmdsZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICBzZXQoc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3Qg
PSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUoZGVmYXVsdFN0YXJ0aW5nU2l6ZSk7Ci0gICAgICAgIGxp
c3QtPm1fbGVuZ3RoID0gMjsKLSAgICAgICAgbGlzdC0+bGlzdCgpWzBdID0gc2luZ2xlU3RydWN0
dXJlKCk7Ci0gICAgICAgIGxpc3QtPmxpc3QoKVsxXSA9IHN0cnVjdHVyZTsKLSAgICAgICAgc2V0
KGxpc3QpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGFk
ZE91dE9mTGluZShzdHJ1Y3R1cmUpOwotfQotCi1ib29sIFN0cnVjdHVyZVNldDo6cmVtb3ZlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAo
c2luZ2xlU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBzZXRFbXB0eSgp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlz
dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0gIT0gc3RydWN0dXJlKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGxpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3QoKVstLWxpc3Qt
Pm1fbGVuZ3RoXTsKLSAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkgewotICAgICAgICAgICAg
T3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShsaXN0KTsKLSAgICAgICAgICAgIHNldEVtcHR5KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBTdHJ1Y3R1cmVTZXQ6OmNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBj
b25zdAotewotICAgIGlmIChpc1RoaW4oKSkKLSAgICAgICAgcmV0dXJuIHNpbmdsZVN0cnVjdHVy
ZSgpID09IHN0cnVjdHVyZTsKLQotICAgIHJldHVybiBjb250YWluc091dE9mTGluZShzdHJ1Y3R1
cmUpOwotfQotCi1ib29sIFN0cnVjdHVyZVNldDo6bWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikKLXsKLSAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKG90aGVyLnNp
bmdsZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZChvdGhlci5zaW5nbGVTdHJ1
Y3R1cmUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZM
aW5lTGlzdCogbGlzdCA9IG90aGVyLnN0cnVjdHVyZUxpc3QoKTsKLSAgICBpZiAobGlzdC0+bV9s
ZW5ndGggPj0gMikgewotICAgICAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgICAgIE91dE9m
TGluZUxpc3QqIG15TmV3TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZSgKLSAgICAgICAgICAg
ICAgICBsaXN0LT5tX2xlbmd0aCArICEhc2luZ2xlU3RydWN0dXJlKCkpOwotICAgICAgICAgICAg
aWYgKHNpbmdsZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgbXlOZXdMaXN0LT5tX2xl
bmd0aCA9IDE7Ci0gICAgICAgICAgICAgICAgbXlOZXdMaXN0LT5saXN0KClbMF0gPSBzaW5nbGVT
dHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldChteU5ld0xpc3QpOwot
ICAgICAgICB9Ci0gICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYWRkT3V0T2ZMaW5lKGxpc3QtPmxpc3QoKVtpXSk7Ci0gICAgICAgIHJldHVybiBjaGFu
Z2VkOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobGlzdC0+bV9sZW5ndGgpOwotICAgIHJldHVy
biBhZGQobGlzdC0+bGlzdCgpWzBdKTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotewotICAgIGlmIChvdGhlci5pc1RoaW4oKSkgewot
ICAgICAgICBpZiAoIW90aGVyLnNpbmdsZVN0cnVjdHVyZSgpIHx8ICFjb250YWlucyhvdGhlci5z
aW5nbGVTdHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICBjbGVhcigpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICBzZXQob3RoZXIuc2luZ2xlU3RydWN0
dXJlKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQ29u
dGFpbnNPdXRPZkxpbmUgY29udGFpbnNPdXRPZkxpbmUob3RoZXIpOwotICAgIGdlbmVyaWNGaWx0
ZXIoY29udGFpbnNPdXRPZkxpbmUpOwotfQotCi12b2lkIFN0cnVjdHVyZVNldDo6ZXhjbHVkZShj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotewotICAgIGlmIChvdGhlci5pc1RoaW4oKSkgewot
ICAgICAgICBpZiAob3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpCi0gICAgICAgICAgICByZW1vdmUo
b3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuY29udGFpbnMoc2luZ2xlU3RydWN0
dXJlKCkpKQotICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICgh
b3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxpc3Qt
Pm1fbGVuZ3RoXTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKLSAgICAgICAgY2xl
YXIoKTsKLX0KLQogI2lmIEVOQUJMRShERkdfSklUKQogCi1uYW1lc3BhY2UgewotCi1jbGFzcyBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMgewotcHVibGljOgotICAgIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWVDb250YWlucyhjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHZh
bHVlKQotICAgICAgICA6IG1fdmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBi
b29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZS5jb250YWlucyhzdHJ1Y3R1cmUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgY29u
c3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBtX3ZhbHVlOwotfTsKLQotY2xhc3MgU3Bl
Y3VsYXRlZFR5cGVDb250YWlucyB7Ci1wdWJsaWM6Ci0gICAgU3BlY3VsYXRlZFR5cGVDb250YWlu
cyhTcGVjdWxhdGVkVHlwZSB0eXBlKQotICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAmIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1
Y3R1cmUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgU3BlY3VsYXRlZFR5cGUgbV90eXBlOwotfTsK
LQotY2xhc3MgQXJyYXlNb2Rlc0NvbnRhaW5zIHsKLXB1YmxpYzoKLSAgICBBcnJheU1vZGVzQ29u
dGFpbnMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQotICAgICAgICA6IG1fYXJyYXlNb2RlcyhhcnJh
eU1vZGVzKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJyYXlNb2RlcyAmIGFycmF5
TW9kZUZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICB9Ci1wcml2YXRlOgotICAgIEFycmF5
TW9kZXMgbV9hcnJheU1vZGVzOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZv
aWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcikKIHsKLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMgZnVuY3Rvcihv
dGhlcik7Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKFsm
XSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIC0+IGJvb2wgeyByZXR1cm4gb3RoZXIuY29udGFpbnMo
c3RydWN0dXJlKTsgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoU3BlY3VsYXRl
ZFR5cGUgdHlwZSkKIHsKLSAgICBTcGVjdWxhdGVkVHlwZUNvbnRhaW5zIGZ1bmN0b3IodHlwZSk7
Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKAorICAgICAg
ICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVy
biB0eXBlICYgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAgIH0p
OwogfQogCiB2b2lkIFN0cnVjdHVyZVNldDo6ZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVzIGFy
cmF5TW9kZXMpCiB7Ci0gICAgQXJyYXlNb2Rlc0NvbnRhaW5zIGZ1bmN0b3IoYXJyYXlNb2Rlcyk7
Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKAorICAgICAg
ICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVy
biBhcnJheU1vZGVzICYgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgICAg
ICB9KTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlcihjb25zdCBERkc6OkFic3RyYWN0
VmFsdWUmIG90aGVyKQpAQCAtMjM5LDg5ICs2MywyMyBAQCB2b2lkIFN0cnVjdHVyZVNldDo6Zmls
dGVyKGNvbnN0IERGRzo6QWJzCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotYm9vbCBT
dHJ1Y3R1cmVTZXQ6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QK
LXsKLSAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1cmUoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gb3RoZXIuY29udGFpbnMo
c2luZ2xlU3RydWN0dXJlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAob3RoZXIuaXNUaGluKCkp
IHsKLSAgICAgICAgaWYgKCFvdGhlci5zaW5nbGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3Qo
KTsKLSAgICAgICAgaWYgKGxpc3QtPm1fbGVuZ3RoID49IDIpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChsaXN0LT5saXN0KClbMF0gPT0gb3RoZXIuc2luZ2xlU3RydWN0
dXJlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGlmICghb3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
U3RydWN0dXJlU2V0OjpvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAot
ewotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gb3RoZXIuY29udGFpbnMo
c2luZ2xlU3RydWN0dXJlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAob3RoZXIuaXNUaGluKCkp
IHsKLSAgICAgICAgaWYgKCFvdGhlci5zaW5nbGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGNvbnRhaW5zT3V0T2ZMaW5lKG90aGVyLnNpbmds
ZVN0cnVjdHVyZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0
cnVjdHVyZUxpc3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5n
dGg7ICsraSkgewotICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlz
dCgpW2ldKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgU3RydWN0dXJlU2V0OjpvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKHNpemUoKSAhPSBvdGhlci5zaXplKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNTdWJzZXRPZihvdGhlcik7Ci19Ci0KIFNw
ZWN1bGF0ZWRUeXBlIFN0cnVjdHVyZVNldDo6c3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzVGhpbigpKSB7Ci0gICAgICAgIGlmICghc2luZ2xlU3RydWN0dXJl
KCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY05vbmU7Ci0gICAgICAgIHJldHVybiBzcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmUoc2luZ2xlU3RydWN0dXJlKCkpOwotICAgIH0KLSAgICAKICAgICBT
cGVjdWxhdGVkVHlwZSByZXN1bHQgPSBTcGVjTm9uZTsKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0
ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5t
X2xlbmd0aDsgKytpKQotICAgICAgICBtZXJnZVNwZWN1bGF0aW9uKHJlc3VsdCwgc3BlY3VsYXRp
b25Gcm9tU3RydWN0dXJlKGxpc3QtPmxpc3QoKVtpXSkpOworICAgIGZvckVhY2goCisgICAgICAg
IFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIG1lcmdlU3BlY3VsYXRp
b24ocmVzdWx0LCBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CisgICAgICAg
IH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEFycmF5TW9kZXMgU3RydWN0dXJlU2V0Ojph
cnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKSBjb25zdAogewotICAgIGlmIChpc1RoaW4oKSkgewot
ICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoc2luZ2xlU3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKTsKLSAgICB9Ci0gICAgCiAgICAgQXJyYXlNb2RlcyByZXN1bHQgPSAwOwotICAgIE91dE9m
TGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpCi0gICAgICAgIG1lcmdlQXJyYXlNb2RlcyhyZXN1
bHQsIGFzQXJyYXlNb2RlcyhsaXN0LT5saXN0KClbaV0tPmluZGV4aW5nVHlwZSgpKSk7CisgICAg
Zm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAg
ICAgbWVyZ2VBcnJheU1vZGVzKHJlc3VsdCwgYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKTsKKyAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzI5
LDggKzg3LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTZXQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdAogewog
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKICAgICBvdXQucHJpbnQoIlsiKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIGlu
Q29udGV4dCgqYXQoaSksIGNvbnRleHQpKTsKKyAgICBmb3JFYWNoKFsmXSAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIHsgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoKnN0cnVjdHVyZSwgY29udGV4
dCkpOyB9KTsKICAgICBvdXQucHJpbnQoIl0iKTsKIH0KIApAQCAtMzM5LDU5ICs5Niw1IEBAIHZv
aWQgU3RydWN0dXJlU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQKICAgICBkdW1wSW5Db250ZXh0
KG91dCwgbnVsbHB0cik7CiB9CiAKLWJvb2wgU3RydWN0dXJlU2V0OjphZGRPdXRPZkxpbmUoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVy
ZUxpc3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsr
aSkgewotICAgICAgICBpZiAobGlzdC0+bGlzdCgpW2ldID09IHN0cnVjdHVyZSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGxpc3QtPm1fbGVuZ3RoIDwg
bGlzdC0+bV9jYXBhY2l0eSkgewotICAgICAgICBsaXN0LT5saXN0KClbbGlzdC0+bV9sZW5ndGgr
K10gPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBP
dXRPZkxpbmVMaXN0KiBuZXdMaXN0ID0gT3V0T2ZMaW5lTGlzdDo6Y3JlYXRlKGxpc3QtPm1fY2Fw
YWNpdHkgKiAyKTsKLSAgICBuZXdMaXN0LT5tX2xlbmd0aCA9IGxpc3QtPm1fbGVuZ3RoICsgMTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LT5tX2xlbmd0aDsgaS0tOykKLSAgICAgICAgbmV3
TGlzdC0+bGlzdCgpW2ldID0gbGlzdC0+bGlzdCgpW2ldOwotICAgIG5ld0xpc3QtPmxpc3QoKVts
aXN0LT5tX2xlbmd0aF0gPSBzdHJ1Y3R1cmU7Ci0gICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShs
aXN0KTsKLSAgICBzZXQobmV3TGlzdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3Ry
dWN0dXJlU2V0Ojpjb250YWluc091dE9mTGluZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QK
LXsKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChs
aXN0LT5saXN0KClbaV0gPT0gc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNvcHlGcm9t
T3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKCFvdGhl
ci5pc1RoaW4oKSAmJiBvdGhlci5tX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSk7Ci0gICAgT3V0
T2ZMaW5lTGlzdCogb3RoZXJMaXN0ID0gb3RoZXIuc3RydWN0dXJlTGlzdCgpOwotICAgIE91dE9m
TGluZUxpc3QqIG15TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZShvdGhlckxpc3QtPm1fbGVu
Z3RoKTsKLSAgICBteUxpc3QtPm1fbGVuZ3RoID0gb3RoZXJMaXN0LT5tX2xlbmd0aDsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvdGhlckxpc3QtPm1fbGVuZ3RoOyBpLS07KQotICAgICAgICBteUxp
c3QtPmxpc3QoKVtpXSA9IG90aGVyTGlzdC0+bGlzdCgpW2ldOwotICAgIHNldChteUxpc3QpOwot
fQotCi1TdHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3QqIFN0cnVjdHVyZVNldDo6T3V0T2ZMaW5l
TGlzdDo6Y3JlYXRlKHVuc2lnbmVkIGNhcGFjaXR5KQotewotICAgIHJldHVybiBuZXcgKE5vdE51
bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKE91dE9mTGluZUxpc3QpICsgY2FwYWNpdHkgKiBzaXplb2Yo
U3RydWN0dXJlKikpKSBPdXRPZkxpbmVMaXN0KDAsIGNhcGFjaXR5KTsKLX0KLQotdm9pZCBTdHJ1
Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3Q6OmRlc3Ryb3koT3V0T2ZMaW5lTGlzdCogbGlzdCkKLXsK
LSAgICBmYXN0RnJlZShsaXN0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9u
IDE4NTMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJE
dW1wQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9UaW55UHRyU2V0Lmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0zOCw2OCArMzksMTUgQEAgY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsK
IHN0cnVjdCBBYnN0cmFjdFZhbHVlOwogfQogCi1jbGFzcyBTdHJ1Y3R1cmVTZXQgeworY2xhc3Mg
U3RydWN0dXJlU2V0IDogcHVibGljIFRpbnlQdHJTZXQ8U3RydWN0dXJlKj4gewogcHVibGljOgot
ICAgIFN0cnVjdHVyZVNldCgpCi0gICAgICAgIDogbV9wb2ludGVyKDApCi0gICAgewotICAgICAg
ICBzZXRFbXB0eSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgICAgIDogbV9wb2ludGVyKDApCi0gICAgewotICAgICAgICBzZXQoc3Ry
dWN0dXJlKTsKLSAgICB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmVTZXQoY29u
c3QgU3RydWN0dXJlU2V0JiBvdGhlcikKLSAgICAgICAgOiBtX3BvaW50ZXIoMCkKLSAgICB7Ci0g
ICAgICAgIGNvcHlGcm9tKG90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBT
dHJ1Y3R1cmVTZXQmIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgICAgICBkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKLSAgICAgICAgY29weUZy
b20ob3RoZXIpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAotICAgIH5TdHJ1
Y3R1cmVTZXQoKQotICAgIHsKLSAgICAgICAgZGVsZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5
KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoKTsKKyAgICB1c2luZyBUaW55UHRyU2V0
OjpUaW55UHRyU2V0OwogICAgIAogICAgIFN0cnVjdHVyZSogb25seVN0cnVjdHVyZSgpIGNvbnN0
CiAgICAgewotICAgICAgICBpZiAoaXNUaGluKCkpCi0gICAgICAgICAgICByZXR1cm4gc2luZ2xl
U3RydWN0dXJlKCk7Ci0gICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVMaXN0
KCk7Ci0gICAgICAgIGlmIChsaXN0LT5tX2xlbmd0aCAhPSAxKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBsaXN0LT5saXN0KClbMF07CisgICAgICAgIHJldHVy
biBvbmx5RW50cnkoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVjdHVyZSgp
OwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgQVNTRVJUKG1fcG9pbnRlciAhPSBy
ZXNlcnZlZFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBhZGQoU3RydWN0dXJlKik7Ci0gICAgYm9vbCByZW1vdmUoU3RydWN0dXJlKik7Ci0gICAg
Ym9vbCBjb250YWlucyhTdHJ1Y3R1cmUqKSBjb25zdDsKLSAgICAKLSAgICBib29sIG1lcmdlKGNv
bnN0IFN0cnVjdHVyZVNldCYpOwotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYp
OwotICAgIHZvaWQgZXhjbHVkZShjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKLSAgICAKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICB2b2lkIGZpbHRlcihjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmKTsKICAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSk7CkBAIC0xMDcsMjEyICs1
NSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgREZHOjpBYnN0cmFjdFZhbHVl
Jik7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KLSAgICB2b2lkIGdlbmVyaWNGaWx0ZXIoRnVuY3RvciYgZnVuY3RvcikKLSAg
ICB7Ci0gICAgICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICAgICAgaWYgKCFzaW5nbGVTdHJ1
Y3R1cmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoZnVuY3Rv
cihzaW5nbGVTdHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChmdW5jdG9yKGxpc3QtPmxpc3QoKVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1f
bGVuZ3RoXTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3RoKQotICAgICAg
ICAgICAgY2xlYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0
cnVjdHVyZVNldCYpIGNvbnN0OwotICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRP
ZigqdGhpcyk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJl
U2V0JikgY29uc3Q7Ci0gICAgCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKGlzVGhpbigpKQotICAgICAgICAgICAgcmV0dXJuICEhc2luZ2xlU3RydWN0dXJlKCk7
Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVMaXN0KCktPm1fbGVuZ3RoOwotICAgIH0KLSAgICAK
LSAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlz
VGhpbigpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWkpOwotICAgICAgICAgICAgQVNTRVJUKHNp
bmdsZVN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBzaW5nbGVTdHJ1Y3R1cmUoKTsK
LSAgICAgICAgfQotICAgICAgICBBU1NFUlQoaSA8IHN0cnVjdHVyZUxpc3QoKS0+bV9sZW5ndGgp
OwotICAgICAgICByZXR1cm4gc3RydWN0dXJlTGlzdCgpLT5saXN0KClbaV07Ci0gICAgfQotICAg
IAotICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQo
aSk7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKGlzVGhpbigpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2luZ2xlU3RydWN0dXJlKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZVN0cnVjdHVyZSgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBzdHJ1Y3R1cmVMaXN0KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0KCktPm1fbGVuZ3Ro
IC0gMV07Ci0gICAgfQotICAgIAotICAgIGNsYXNzIGl0ZXJhdG9yIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIGl0ZXJhdG9yKCkKLSAgICAgICAgICAgIDogbV9zZXQobnVsbHB0cikKLSAgICAgICAg
ICAgICwgbV9pbmRleCgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGl0ZXJhdG9yKGNvbnN0IFN0cnVjdHVyZVNldCogc2V0LCBzaXplX3QgaW5kZXgpCi0gICAgICAg
ICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuIG1fc2V0LT5hdChtX2luZGV4KTsgfQotICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faW5kZXgrKzsKLSAgICAgICAgICAg
IHJldHVybiAqdGhpczsKLSAgICAgICAgfQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7
IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgY29uc3QgU3RydWN0dXJlU2V0KiBtX3NldDsKLSAgICAgICAgc2l6ZV90IG1faW5kZXg7
Ci0gICAgfTsKLSAgICAKLSAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKHRoaXMsIDApOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IodGhpcywgc2l6ZSgpKTsgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1
Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKLSAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzRnJv
bVN0cnVjdHVyZXMoKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgREZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOwotICAgIAotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdGhpbkZsYWcg
PSAxOwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVzZXJ2ZWRGbGFnID0gMjsKLSAgICBz
dGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0gdGhpbkZsYWcgfCByZXNlcnZlZEZsYWc7Ci0g
ICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZhbHVlID0gNDsKLQotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXplID0gNDsKLSAgICAKLSAgICBib29s
IGFkZE91dE9mTGluZShTdHJ1Y3R1cmUqKTsKLSAgICBib29sIGNvbnRhaW5zT3V0T2ZMaW5lKFN0
cnVjdHVyZSopIGNvbnN0OwotICAgIAotICAgIGNsYXNzIENvbnRhaW5zT3V0T2ZMaW5lIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIENvbnRhaW5zT3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVyZVNldCYg
c2V0KQotICAgICAgICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFpbnNPdXRPZkxpbmUoc3RydWN0
dXJlKTsKLSAgICAgICAgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgbV9zZXQ7Ci0gICAgfTsKLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5RnJvbShjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKG90aGVyLmlzVGhpbigp
IHx8IG90aGVyLm1fcG9pbnRlciA9PSByZXNlcnZlZFZhbHVlKSB7Ci0gICAgICAgICAgICBib29s
IHZhbHVlID0gZ2V0UmVzZXJ2ZWRGbGFnKCk7Ci0gICAgICAgICAgICBtX3BvaW50ZXIgPSBvdGhl
ci5tX3BvaW50ZXI7Ci0gICAgICAgICAgICBzZXRSZXNlcnZlZEZsYWcodmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvcHlGcm9tT3V0T2ZMaW5lKG90aGVy
KTsKLSAgICB9Ci0gICAgdm9pZCBjb3B5RnJvbU91dE9mTGluZShjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKTsKLSAgICAKLSAgICBjbGFzcyBPdXRPZkxpbmVMaXN0IHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyBPdXRPZkxpbmVMaXN0KiBjcmVhdGUodW5zaWduZWQgY2FwYWNpdHkpOwot
ICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KE91dE9mTGluZUxpc3QqKTsKLSAgICAgICAgCi0g
ICAgICAgIFN0cnVjdHVyZSoqIGxpc3QoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RydWN0dXJl
Kio+KHRoaXMgKyAxKTsgfQotICAgICAgICAKLSAgICAgICAgT3V0T2ZMaW5lTGlzdCh1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIGNhcGFjaXR5KQotICAgICAgICAgICAgOiBtX2xlbmd0aChsZW5n
dGgpCi0gICAgICAgICAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgICAgICB1bnNpZ25lZCBtX2Nh
cGFjaXR5OwotICAgIH07Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRlbGV0ZVN0cnVj
dHVyZUxpc3RJZk5lY2Vzc2FyeSgpCi0gICAgewotICAgICAgICBpZiAoIWlzVGhpbigpICYmIG1f
cG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKQotICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVz
dHJveShzdHJ1Y3R1cmVMaXN0KCkpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzVGhpbigpIGNv
bnN0IHsgcmV0dXJuIG1fcG9pbnRlciAmIHRoaW5GbGFnOyB9Ci0gICAgCi0gICAgdm9pZCogcG9p
bnRlcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPiht
X3BvaW50ZXIgJiB+ZmxhZ3MpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHNpbmdsZVN0
cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNUaGluKCkpOwotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlKj4ocG9pbnRlcigpKTsKLSAgICB9Ci0gICAg
Ci0gICAgT3V0T2ZMaW5lTGlzdCogc3RydWN0dXJlTGlzdCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoIWlzVGhpbigpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE91dE9mTGlu
ZUxpc3QqPihwb2ludGVyKCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIHNldChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihz
dHJ1Y3R1cmUpLCB0cnVlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXQoT3V0T2ZMaW5lTGlzdCogc3Ry
dWN0dXJlcykKLSAgICB7Ci0gICAgICAgIHNldChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1
Y3R1cmVzKSwgZmFsc2UpOwotICAgIH0KLSAgICB2b2lkIHNldEVtcHR5KCkKLSAgICB7Ci0gICAg
ICAgIHNldCgwLCB0cnVlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXQodWludHB0cl90IHBvaW50ZXIs
IGJvb2wgc2luZ2xlU3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgbV9wb2ludGVyID0gcG9pbnRl
ciB8IChzaW5nbGVTdHJ1Y3R1cmUgPyB0aGluRmxhZyA6IDApIHwgKG1fcG9pbnRlciAmIHJlc2Vy
dmVkRmxhZyk7Ci0gICAgfQotICAgIGJvb2wgZ2V0UmVzZXJ2ZWRGbGFnKCkgY29uc3QgeyByZXR1
cm4gbV9wb2ludGVyICYgcmVzZXJ2ZWRGbGFnOyB9Ci0gICAgdm9pZCBzZXRSZXNlcnZlZEZsYWco
Ym9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1fcG9p
bnRlciB8PSByZXNlcnZlZEZsYWc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcG9pbnRl
ciAmPSB+cmVzZXJ2ZWRGbGFnOwotICAgIH0KLQotICAgIHVpbnRwdHJfdCBtX3BvaW50ZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTg1
MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTQgKzY0LDE0IEBAIHZvaWQgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6Y2xvYmJlcigpCiAgICAgc2V0Q2xvYmJlcmVkKHRydWUpOwogICAgICAgICAK
ICAgICBpZiAobV9zZXQuaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVTdHJ1
Y3R1cmUoKSkKKyAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVFbnRyeSgpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAoIW1fc2V0LnNpbmdsZVN0cnVjdHVyZSgpLT5kZmdTaG91bGRX
YXRjaCgpKQorICAgICAgICBpZiAoIW1fc2V0LnNpbmdsZUVudHJ5KCktPmRmZ1Nob3VsZFdhdGNo
KCkpCiAgICAgICAgICAgICBtYWtlVG9wV2hlblRoaW4oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAgICAgCi0gICAgU3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0KiBsaXN0ID0gbV9z
ZXQuc3RydWN0dXJlTGlzdCgpOworICAgIAorICAgIFN0cnVjdHVyZVNldDo6T3V0T2ZMaW5lTGlz
dCogbGlzdCA9IG1fc2V0Lmxpc3QoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LT5tX2xl
bmd0aDsgaS0tOykgewogICAgICAgICBpZiAoIWxpc3QtPmxpc3QoKVtpXS0+ZGZnU2hvdWxkV2F0
Y2goKSkgewogICAgICAgICAgICAgbWFrZVRvcCgpOwpAQCAtMjY4LDI1ICsyNjgsNiBAQCB2b2lk
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcihjb25zCiAgICAgZmlsdGVyKG90aGVyLm1f
c2V0KTsKIH0KIAotbmFtZXNwYWNlIHsKLQotY2xhc3MgQ29uZm9ybXNUb1R5cGUgewotcHVibGlj
OgotICAgIENvbmZvcm1zVG9UeXBlKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCi0gICAgICAgIDogbV90
eXBlKHR5cGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9t
U3RydWN0dXJlKHN0cnVjdHVyZSkgJiBtX3R5cGUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgU3Bl
Y3VsYXRlZFR5cGUgbV90eXBlOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZv
aWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyU2xvdyhTcGVjdWxhdGVkVHlwZSB0eXBl
KQogewogICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBmaWx0ZXIgdHlwZSBzbG93
Iik7CkBAIC0yOTgsOCArMjc5LDEwIEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyU2xvdygKICAgICAKICAgICBBU1NFUlQoIWlzVG9wKCkpOwogICAgIAotICAgIENvbmZvcm1z
VG9UeXBlIGNvbmZvcm1zVG9UeXBlKHR5cGUpOwotICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIoY29u
Zm9ybXNUb1R5cGUpOworICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIoCisgICAgICAgIFsmXSAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZy
b21TdHJ1Y3R1cmUoc3RydWN0dXJlKSAmIHR5cGUpOworICAgICAgICB9KTsKIH0KIAogYm9vbCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29u
c3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxODUzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIG1ha2VU
b3AoKQogICAgIHsKLSAgICAgICAgbV9zZXQuZGVsZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5
KCk7CisgICAgICAgIG1fc2V0LmRlbGV0ZUxpc3RJZk5lY2Vzc2FyeSgpOwogICAgICAgICBtX3Nl
dC5tX3BvaW50ZXIgPSB0b3BWYWx1ZTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV1RGL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1
MzA5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2
NiBAQAorMjAxNS0wNi0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIFRoZSB0aW55IHNldCBtYWdpYyBpbiBTdHJ1Y3R1cmVTZXQgc2hvdWxkIGJlIGF2YWlsYWJs
ZSBpbiBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTcyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgQXMgdGhlIG1hbmFnZW1lbnQgb2Ygc3RydWN0dXJlIHNldHMgZXZvbHZlZCBpbiBK
U0MsIHRoZSBTdHJ1Y3R1cmVTZXQgZGF0YSBzdHJ1Y3R1cmUgZ3JldworICAgICAgICBpbmNyZWFz
aW5nbHkgc21hcnQuIEl0J3MgZ290IHNvbWUgc21hcnQgc3R1ZmYgZm9yIG1hbmFnaW5nIHNtYWxs
IHNldHMgb2YgcG9pbnRlcnMuIEkKKyAgICAgICAgd2FudGVkIHRvIHRha2UgdGhlIGdlbmVyaWMg
bG9naWMgb3V0IG9mIEpTQyBhbmQgcHV0IGl0IGludG8gYSByZXVzYWJsZSB0ZW1wbGF0aXplZCBj
bGFzcworICAgICAgICBpbiBXVEYuCisgICAgICAgIAorICAgICAgICAqIFdURi52Y3hwcm9qL1dU
Ri52Y3hwcm9qOgorICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvVGlueVB0clNldC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6VGlueVB0clNldCk6CisgICAgICAgIChX
VEY6OlRpbnlQdHJTZXQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6On5U
aW55UHRyU2V0KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6Y2xlYXIpOgorICAgICAgICAo
V1RGOjpUaW55UHRyU2V0Ojpvbmx5RW50cnkpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0Ojpp
c0VtcHR5KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6YWRkKToKKyAgICAgICAgKFdURjo6
VGlueVB0clNldDo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6Y29udGFpbnMp
OgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjptZXJnZSk6CisgICAgICAgIChXVEY6OlRpbnlQ
dHJTZXQ6OmZvckVhY2gpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpnZW5lcmljRmlsdGVy
KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6ZmlsdGVyKToKKyAgICAgICAgKFdURjo6VGlu
eVB0clNldDo6ZXhjbHVkZSk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmlzU3Vic2V0T2Yp
OgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0Ojppc1N1cGVyc2V0T2YpOgorICAgICAgICAoV1RG
OjpUaW55UHRyU2V0OjpvdmVybGFwcyk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OnNpemUp
OgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjphdCk6CisgICAgICAgIChXVEY6OlRpbnlQdHJT
ZXQ6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpsYXN0KToKKyAgICAg
ICAgKFdURjo6VGlueVB0clNldDo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6
VGlueVB0clNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6OlRpbnlQdHJT
ZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6aXRl
cmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjppdGVyYXRvcjo6
b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmJlZ2luKToKKyAgICAgICAg
KFdURjo6VGlueVB0clNldDo6ZW5kKToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmFkZE91dE9mTGluZSk6CisgICAgICAg
IChXVEY6OlRpbnlQdHJTZXQ6OmNvbnRhaW5zT3V0T2ZMaW5lKToKKyAgICAgICAgKFdURjo6VGlu
eVB0clNldDo6Y29weUZyb20pOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0Ojpjb3B5RnJvbU91
dE9mTGluZSk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6Ok91dE9mTGluZUxpc3Q6OmNyZWF0
ZSk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6Ok91dE9mTGluZUxpc3Q6OmRlc3Ryb3kpOgor
ICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpPdXRPZkxpbmVMaXN0OjpsaXN0KToKKyAgICAgICAg
KFdURjo6VGlueVB0clNldDo6T3V0T2ZMaW5lTGlzdDo6T3V0T2ZMaW5lTGlzdCk6CisgICAgICAg
IChXVEY6OlRpbnlQdHJTZXQ6OmRlbGV0ZUxpc3RJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXVEY6
OlRpbnlQdHJTZXQ6OmlzVGhpbik6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OnBvaW50ZXIp
OgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpzaW5nbGVFbnRyeSk6CisgICAgICAgIChXVEY6
OlRpbnlQdHJTZXQ6Omxpc3QpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpzZXQpOgorICAg
ICAgICAoV1RGOjpUaW55UHRyU2V0OjpzZXRFbXB0eSk6CisgICAgICAgIChXVEY6OlRpbnlQdHJT
ZXQ6OmdldFJlc2VydmVkRmxhZyk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OnNldFJlc2Vy
dmVkRmxhZyk6CisKIDIwMTUtMDYtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBbV0syXVtpT1NdIExpbWl0IHRoZSBudW1iZXIgb2Ygdm5vZGVzIHVzZWQgYnkg
dGhlIFdlYkNvbnRlbnQgcHJvY2Vzc2VzCkluZGV4OiBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dU
Ri52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHBy
b2oJKHJldmlzaW9uIDE4NTMwMykKKysrIFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTMwMCw2ICszMDAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cd3RmXHRocmVhZHNhZmVSZWZDb3VudGVkLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlx3dGZcdGhyZWFkc3BlY2lmaWMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHd0Zlx0aHJlYWRzXEJpbmFyeVNlbWFwaG9yZS5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cd3RmXFRpbnlQdHJTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHd0Zlx1bmljb2RlXENoYXJhY3Rlck5hbWVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlx3dGZcdW5pY29kZVxDb2xsYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cd3RmXHVuaWNvZGVcVVRGOC5oIiAvPgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODUzMDMpCisrKyBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBA
CiAJCTBGRDgxQUM1MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDNDE1NEZCMjJFMDA5
ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7
IH07IH07CiAJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZB
NTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkRE
QkZBODE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovOyB9OworCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNF
MTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLzsgfTsK
IAkJMTQwMjJGNDExOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDIyRjQwMThGNUMzRkMwMDdG
RjBFQiAvKiBsaWJibWFsbG9jLmEgKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAv
KiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKIAkJMTQz
RjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1T
aXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKQEAgLTMyMCw2ICsz
MjEsNyBAQAogCQkwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJl
YW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZBNjE2NjZERkEzMDBD
NTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3RyaW5nUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCeXRlU3BpbkxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFRDY3QjUx
QjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGlueVB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAy
MkY0MDE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgcGF0aCA9IGxpYmJtYWxs
b2MuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMTQzRjYxMUQxNTY1
RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2
MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2Miw2
ICs4NjQsNyBAQAogCQkJCUE4QTQ3MzM2MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhy
ZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczM0UxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVS
ZWZDb3VudGVkLmggKi8sCiAJCQkJQThBNDczM0YxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNw
ZWNpZmljLmggKi8sCisJCQkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQu
aCAqLywKIAkJCQkxNDlFRjE2MjE2QkJGRTBEMDAwQTQzMzEgLyogVHJpU3RhdGUuaCAqLywKIAkJ
CQk4M0ZCQTkzMTE5REY0NTk3MDBGMzBBREIgLyogVHlwZUNhc3RzLmggKi8sCiAJCQkJQThBNDcz
NUMxNTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9uRmluZC5oICovLApAQCAtMTIwMSw2ICsxMjA0LDcg
QEAKIAkJCQlBOEE0NzQ3RDE1MUE4MjVCMDA0MTIzRkYgLyogVmFsdWVDaGVjay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0N0UxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0N0YxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDgwMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3NENGQzhFMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEEwQUQzQTFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1
ZXVlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAx
ODUzMDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTQsNiArOTQsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBUaHJlYWRTcGVjaWZpYy5oCiAg
ICAgVGhyZWFkaW5nLmgKICAgICBUaHJlYWRpbmdQcmltaXRpdmVzLmgKKyAgICBUaW55UHRyU2V0
LmgKICAgICBWTVRhZ3MuaAogICAgIFZhbHVlQ2hlY2suaAogICAgIFZlY3Rvci5oCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9UaW55UHRyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
VGlueVB0clNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvVGlueVB0clNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVGlueVB0clNldF9oCisjZGVmaW5lIFRp
bnlQdHJTZXRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CitjbGFzcyBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1l
c3BhY2UgV1RGIHsKKworLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9ubHkgd29ya3MgZm9yIHR5
cGVzIHRoYXQgYXJlIHBvaW50ZXItbGlrZTogdGhleSBzaG91bGQgaGF2ZSB0aGUgc2l6ZQorLy8g
b2YgYSBwb2ludGVyIGFuZCBsaWtlIGEgcG9pbnRlciB0aGV5IHNob3VsZCBub3QgaGF2ZSBhc3Np
Z25tZW50IG9wZXJhdG9ycywgY29weSBjb25zdHJ1Y3RvcnMsCisvLyBub24tdHJpdmlhbCBkZWZh
dWx0IGNvbnN0cnVjdG9ycywgYW5kIG5vbi10cml2aWFsIGRlc3RydWN0b3JzLiBJdCBtYXkgYmUg
cG9zc2libGUgdG8gbGlmdCBhbGwKKy8vIG9mIHRoZXNlIHJlc3RyaWN0aW9ucy4gSWYgd2Ugc3Vj
Y2VlZGVkIHRoZW4gdGhpcyBzaG91bGQgYmUgcmVuYW1lZCB0byBqdXN0IFRpbnlTZXQuCisvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1NzQxCisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitjbGFzcyBUaW55UHRyU2V0IHsKK3B1YmxpYzoKKyAgICBUaW55UHRyU2V0
KCkKKyAgICAgICAgOiBtX3BvaW50ZXIoMCkKKyAgICB7CisgICAgICAgIHNldEVtcHR5KCk7Cisg
ICAgfQorICAgIAorICAgIFRpbnlQdHJTZXQoVCBlbGVtZW50KQorICAgICAgICA6IG1fcG9pbnRl
cigwKQorICAgIHsKKyAgICAgICAgc2V0KGVsZW1lbnQpOworICAgIH0KKyAgICAKKyAgICBBTFdB
WVNfSU5MSU5FIFRpbnlQdHJTZXQoY29uc3QgVGlueVB0clNldCYgb3RoZXIpCisgICAgICAgIDog
bV9wb2ludGVyKDApCisgICAgeworICAgICAgICBjb3B5RnJvbShvdGhlcik7CisgICAgfQorICAg
IAorICAgIEFMV0FZU19JTkxJTkUgVGlueVB0clNldCYgb3BlcmF0b3I9KGNvbnN0IFRpbnlQdHJT
ZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICBkZWxldGVMaXN0SWZOZWNlc3NhcnkoKTsKKyAgICAg
ICAgY29weUZyb20ob3RoZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAor
ICAgIH5UaW55UHRyU2V0KCkKKyAgICB7CisgICAgICAgIGRlbGV0ZUxpc3RJZk5lY2Vzc2FyeSgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZUxp
c3RJZk5lY2Vzc2FyeSgpOworICAgICAgICBzZXRFbXB0eSgpOworICAgIH0KKyAgICAKKyAgICAv
LyBSZXR1cm5zIHRoZSBvbmx5IGVudHJ5IGlmIHRoZSBhcnJheSBoYXMgZXhhY3RseSBvbmUgZW50
cnkuCisgICAgVCBvbmx5RW50cnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVGhpbigp
KQorICAgICAgICAgICAgcmV0dXJuIHNpbmdsZUVudHJ5KCk7CisgICAgICAgIE91dE9mTGluZUxp
c3QqIGxpc3QgPSB0aGlzLT5saXN0KCk7CisgICAgICAgIGlmIChsaXN0LT5tX2xlbmd0aCAhPSAx
KQorICAgICAgICAgICAgcmV0dXJuIFQoKTsKKyAgICAgICAgcmV0dXJuIGxpc3QtPmxpc3QoKVsw
XTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAg
IGJvb2wgcmVzdWx0ID0gaXNUaGluKCkgJiYgIXNpbmdsZUVudHJ5KCk7CisgICAgICAgIGlmIChy
ZXN1bHQpCisgICAgICAgICAgICBBU1NFUlQobV9wb29pbnRlciAhPSByZXNlcnZlZFZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBhZGQoVCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgICAgIGlmIChpc1RoaW4oKSkg
eworICAgICAgICAgICAgaWYgKHNpbmdsZUVudHJ5KCkgPT0gdmFsdWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFzaW5nbGVFbnRyeSgpKSB7CisgICAg
ICAgICAgICAgICAgc2V0KHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlz
dCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZShkZWZhdWx0U3RhcnRpbmdTaXplKTsKKyAgICAgICAg
ICAgIGxpc3QtPm1fbGVuZ3RoID0gMjsKKyAgICAgICAgICAgIGxpc3QtPmxpc3QoKVswXSA9IHNp
bmdsZUVudHJ5KCk7CisgICAgICAgICAgICBsaXN0LT5saXN0KClbMV0gPSB2YWx1ZTsKKyAgICAg
ICAgICAgIHNldChsaXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gYWRkT3V0T2ZMaW5lKHZhbHVlKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCByZW1vdmUoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChpc1RoaW4oKSkg
eworICAgICAgICAgICAgaWYgKHNpbmdsZUVudHJ5KCkgPT0gdmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICBzZXRFbXB0eSgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gdGhpcy0+bGlzdCgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYg
KGxpc3QtPmxpc3QoKVtpXSAhPSB2YWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGxpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3Ro
XTsKKyAgICAgICAgICAgIGlmICghbGlzdC0+bV9sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBP
dXRPZkxpbmVMaXN0OjpkZXN0cm95KGxpc3QpOworICAgICAgICAgICAgICAgIHNldEVtcHR5KCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnMoVCB2YWx1
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RoaW4oKSkKKyAgICAgICAgICAgIHJldHVy
biBzaW5nbGVFbnRyeSgpID09IHZhbHVlOworICAgICAgICByZXR1cm4gY29udGFpbnNPdXRPZkxp
bmUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG1lcmdlKGNvbnN0IFRpbnlQdHJTZXQm
IG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzVGhpbigpKSB7CisgICAgICAgICAg
ICBpZiAob3RoZXIuc2luZ2xlRW50cnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkKG90
aGVyLnNpbmdsZUVudHJ5KCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gb3RoZXIubGlzdCgpOwor
ICAgICAgICBpZiAobGlzdC0+bV9sZW5ndGggPj0gMikgeworICAgICAgICAgICAgaWYgKGlzVGhp
bigpKSB7CisgICAgICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdCogbXlOZXdMaXN0ID0gT3V0T2ZM
aW5lTGlzdDo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICBsaXN0LT5tX2xlbmd0aCArICEh
c2luZ2xlRW50cnkoKSk7CisgICAgICAgICAgICAgICAgaWYgKHNpbmdsZUVudHJ5KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbXlOZXdMaXN0LT5tX2xlbmd0aCA9IDE7CisgICAgICAgICAgICAg
ICAgICAgIG15TmV3TGlzdC0+bGlzdCgpWzBdID0gc2luZ2xlRW50cnkoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgc2V0KG15TmV3TGlzdCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYWRkT3V0T2ZMaW5lKGxpc3QtPmxpc3QoKVtpXSk7CisgICAgICAgICAgICByZXR1cm4g
Y2hhbmdlZDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGxpc3QtPm1fbGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIGFkZChsaXN0LT5saXN0KClbMF0pOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVGhpbigpKSB7Cisg
ICAgICAgICAgICBpZiAoIXNpbmdsZUVudHJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgZnVuY3RvcihzaW5nbGVFbnRyeSgpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHRoaXMt
Pmxpc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICBmdW5jdG9yKGxpc3QtPmxpc3QoKVtpXSk7CisgICAgfQorICAg
ICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZ2VuZXJpY0Zp
bHRlcihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaWYgKGlzVGhpbigp
KSB7CisgICAgICAgICAgICBpZiAoIXNpbmdsZUVudHJ5KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgaWYgKGZ1bmN0b3Ioc2luZ2xlRW50cnkoKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHRoaXMt
Pmxpc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdG9yKGxpc3QtPmxpc3QoKVtpXSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxp
c3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3RoXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxp
c3QtPm1fbGVuZ3RoKQorICAgICAgICAgICAgY2xlYXIoKTsKKyAgICB9CisgICAgICAgIAorICAg
IHZvaWQgZmlsdGVyKGNvbnN0IFRpbnlQdHJTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYg
KG90aGVyLmlzVGhpbigpKSB7CisgICAgICAgICAgICBpZiAoIW90aGVyLnNpbmdsZUVudHJ5KCkg
fHwgIWNvbnRhaW5zKG90aGVyLnNpbmdsZUVudHJ5KCkpKQorICAgICAgICAgICAgICAgIGNsZWFy
KCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjbGVhcigpOworICAgICAg
ICAgICAgICAgIHNldChvdGhlci5zaW5nbGVFbnRyeSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZ2VuZXJpY0ZpbHRl
cihbJl0gKFQgdmFsdWUpIHsgcmV0dXJuIG90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKHZhbHVlKTsg
fSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZXhjbHVkZShjb25zdCBUaW55UHRyU2V0JiBvdGhl
cikKKyAgICB7CisgICAgICAgIGlmIChvdGhlci5pc1RoaW4oKSkgeworICAgICAgICAgICAgaWYg
KG90aGVyLnNpbmdsZUVudHJ5KCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlKG90aGVyLnNpbmds
ZUVudHJ5KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBnZW5lcmljRmlsdGVyKFsmXSAoVCB2YWx1ZSkgeyByZXR1cm4gIW90aGVyLmNvbnRhaW5z
T3V0T2ZMaW5lKHZhbHVlKTsgfSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdWJzZXRPZihj
b25zdCBUaW55UHRyU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RoaW4o
KSkgeworICAgICAgICAgICAgaWYgKCFzaW5nbGVFbnRyeSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRhaW5zKHNpbmdsZUVudHJ5
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsK
KyAgICAgICAgICAgIGlmICghb3RoZXIuc2luZ2xlRW50cnkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gdGhpcy0+bGlz
dCgpOworICAgICAgICAgICAgaWYgKGxpc3QtPm1fbGVuZ3RoID49IDIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGxpc3QtPmxpc3QoKVswXSA9PSBvdGhl
ci5zaW5nbGVFbnRyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBPdXRPZkxpbmVM
aXN0KiBsaXN0ID0gdGhpcy0+bGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGlzdC0+bV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlu
c091dE9mTGluZShsaXN0LT5saXN0KClbaV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc1N1cGVyc2V0T2YoY29uc3QgVGlueVB0clNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhpcyk7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgVGlueVB0clNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmICghc2luZ2xlRW50cnkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gb3RoZXIuY29udGFp
bnMoc2luZ2xlRW50cnkoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChvdGhl
ci5pc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFvdGhlci5zaW5nbGVFbnRyeSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBjb250YWluc091
dE9mTGluZShvdGhlci5zaW5nbGVFbnRyeSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHRoaXMtPmxpc3QoKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChv
dGhlci5jb250YWluc091dE9mTGluZShsaXN0LT5saXN0KClbaV0pKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVGhpbigp
KQorICAgICAgICAgICAgcmV0dXJuICEhc2luZ2xlRW50cnkoKTsKKyAgICAgICAgcmV0dXJuIGxp
c3QoKS0+bV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIFQgYXQoc2l6ZV90IGkpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaSk7Cisg
ICAgICAgICAgICBBU1NFUlQoc2luZ2xlRW50cnkoKSk7CisgICAgICAgICAgICByZXR1cm4gc2lu
Z2xlRW50cnkoKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoaSA8IGxpc3QoKS0+bV9sZW5n
dGgpOworICAgICAgICByZXR1cm4gbGlzdCgpLT5saXN0KClbaV07CisgICAgfQorICAgIAorICAg
IFQgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KKyAgICAKKyAg
ICBUIGxhc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVGhpbigpKSB7CisgICAgICAg
ICAgICBBU1NFUlQoc2luZ2xlRW50cnkoKSk7CisgICAgICAgICAgICByZXR1cm4gc2luZ2xlRW50
cnkoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGlzdCgpLT5saXN0KClbbGlzdCgpLT5t
X2xlbmd0aCAtIDFdOworICAgIH0KKyAgICAKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVi
bGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fc2V0KG51bGxwdHIpCisg
ICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpdGVyYXRvcihjb25zdCBUaW55UHRyU2V0KiBzZXQsIHNpemVfdCBpbmRleCkKKyAg
ICAgICAgICAgIDogbV9zZXQoc2V0KQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFQgb3BlcmF0b3IqKCkgY29uc3Qg
eyByZXR1cm4gbV9zZXQtPmF0KGluZGV4KTsgfQorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3Ir
KygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7IH0KKyAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAg
Y29uc3QgVGlueVB0clNldCogbV9zZXQ7CisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgIH07
CisgICAgCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlz
LCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMs
IHNpemUoKSk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGlueVB0clNldCYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoc2l6ZSgpICE9IG90aGVyLnNpemUoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGlzU3Vic2V0T2Yob3Ro
ZXIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEpTQzo6REZHOjpT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworCisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCB0aGlu
RmxhZyA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZEZsYWcgPSAyOwor
ICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgZmxhZ3MgPSB0aGluRmxhZyB8IHJlc2VydmVkRmxh
ZzsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkVmFsdWUgPSA0OworCisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRTdGFydGluZ1NpemUgPSA0OworICAgIAorICAg
IGJvb2wgYWRkT3V0T2ZMaW5lKFQgdmFsdWUpCisgICAgeworICAgICAgICBPdXRPZkxpbmVMaXN0
KiBsaXN0ID0gdGhpcy0+bGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGlzdC0+bV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGxpc3QtPmxpc3QoKVtpXSA9
PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChsaXN0LT5tX2xlbmd0aCA8IGxpc3QtPm1fY2FwYWNpdHkpIHsKKyAg
ICAgICAgICAgIGxpc3QtPmxpc3QoKVtsaXN0LT5tX2xlbmd0aCsrXSA9IHZhbHVlOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGlu
ZUxpc3QqIG5ld0xpc3QgPSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUobGlzdC0+bV9jYXBhY2l0eSAq
IDIpOworICAgICAgICBuZXdMaXN0LT5tX2xlbmd0aCA9IGxpc3QtPm1fbGVuZ3RoICsgMTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC0+bV9sZW5ndGg7IGktLTspCisgICAgICAgICAg
ICBuZXdMaXN0LT5saXN0KClbaV0gPSBsaXN0LT5saXN0KClbaV07CisgICAgICAgIG5ld0xpc3Qt
Pmxpc3QoKVtsaXN0LT5tX2xlbmd0aF0gPSB2YWx1ZTsKKyAgICAgICAgT3V0T2ZMaW5lTGlzdDo6
ZGVzdHJveShsaXN0KTsKKyAgICAgICAgc2V0KG5ld0xpc3QpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjb250YWluc091dE9mTGluZShUIHZhbHVlKSBjb25z
dAorICAgIHsKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHRoaXMtPmxpc3QoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0gPT0gdmFsdWUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUZyb20oY29uc3QgVGlueVB0clNldCYgb3Ro
ZXIpCisgICAgeworICAgICAgICBpZiAob3RoZXIuaXNUaGluKCkgfHwgb3RoZXIubV9wb2ludGVy
ID09IHJlc2VydmVkVmFsdWUpIHsKKyAgICAgICAgICAgIGJvb2wgdmFsdWUgPSBnZXRSZXNlcnZl
ZEZsYWcoKTsKKyAgICAgICAgICAgIG1fcG9pbnRlciA9IG90aGVyLm1fcG9pbnRlcjsKKyAgICAg
ICAgICAgIHNldFJlc2VydmVkRmxhZyh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY29weUZyb21PdXRPZkxpbmUob3RoZXIpOworICAgIH0KKyAgICAKKyAg
ICBORVZFUl9JTkxJTkUgdm9pZCBjb3B5RnJvbU91dE9mTGluZShjb25zdCBUaW55UHRyU2V0JiBv
dGhlcikKKyAgICB7CisgICAgICAgIEFTU0VSVCghb3RoZXIuaXNUaGluKCkgJiYgb3RoZXIubV9w
b2ludGVyICE9IHJlc2VydmVkVmFsdWUpOworICAgICAgICBPdXRPZkxpbmVMaXN0KiBvdGhlckxp
c3QgPSBvdGhlci5saXN0KCk7CisgICAgICAgIE91dE9mTGluZUxpc3QqIG15TGlzdCA9IE91dE9m
TGluZUxpc3Q6OmNyZWF0ZShvdGhlckxpc3QtPm1fbGVuZ3RoKTsKKyAgICAgICAgbXlMaXN0LT5t
X2xlbmd0aCA9IG90aGVyTGlzdC0+bV9sZW5ndGg7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG90aGVyTGlzdC0+bV9sZW5ndGg7IGktLTspCisgICAgICAgICAgICBteUxpc3QtPmxpc3QoKVtp
XSA9IG90aGVyTGlzdC0+bGlzdCgpW2ldOworICAgICAgICBzZXQobXlMaXN0KTsKKyAgICB9Cisg
ICAgCisgICAgY2xhc3MgT3V0T2ZMaW5lTGlzdCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgT3V0T2ZMaW5lTGlzdCogY3JlYXRlKHVuc2lnbmVkIGNhcGFjaXR5KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IChOb3ROdWxsLCBmYXN0TWFsbG9jKHNpemVvZihPdXRPZkxp
bmVMaXN0KSArIGNhcGFjaXR5ICogc2l6ZW9mKFQpKSkgT3V0T2ZMaW5lTGlzdCgwLCBjYXBhY2l0
eSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koT3V0
T2ZMaW5lTGlzdCogbGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgZmFzdEZyZWUobGlzdCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFQqIGxpc3QoKSB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8VCo+KHRoaXMgKyAxKTsgfQorICAgICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCh1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGNhcGFjaXR5KQorICAgICAgICAgICAgOiBtX2xlbmd0
aChsZW5ndGgpCisgICAgICAgICAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgICAgICB1bnNpZ25l
ZCBtX2NhcGFjaXR5OworICAgIH07CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRlbGV0
ZUxpc3RJZk5lY2Vzc2FyeSgpCisgICAgeworICAgICAgICBpZiAoIWlzVGhpbigpICYmIG1fcG9p
bnRlciAhPSByZXNlcnZlZFZhbHVlKQorICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJv
eShsaXN0KCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVGhpbigpIGNvbnN0IHsgcmV0dXJu
IG1fcG9pbnRlciAmIHRoaW5GbGFnOyB9CisgICAgCisgICAgdm9pZCogcG9pbnRlcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihtX3BvaW50ZXIgJiB+
ZmxhZ3MpOworICAgIH0KKyAgICAKKyAgICBUIHNpbmdsZUVudHJ5KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc1RoaW4oKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihw
b2ludGVyKCkpOworICAgIH0KKyAgICAKKyAgICBPdXRPZkxpbmVMaXN0KiBsaXN0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVCghaXNUaGluKCkpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8T3V0T2ZMaW5lTGlzdCo+KHBvaW50ZXIoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0KFQgdmFsdWUpCisgICAgeworICAgICAgICBzZXQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
dmFsdWUpLCB0cnVlKTsKKyAgICB9CisgICAgdm9pZCBzZXQoT3V0T2ZMaW5lTGlzdCogbGlzdCkK
KyAgICB7CisgICAgICAgIHNldChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihsaXN0KSwgZmFsc2Up
OworICAgIH0KKyAgICB2b2lkIHNldEVtcHR5KCkKKyAgICB7CisgICAgICAgIHNldCgwLCB0cnVl
KTsKKyAgICB9CisgICAgdm9pZCBzZXQodWludHB0cl90IHBvaW50ZXIsIGJvb2wgc2luZ2xlRW50
cnkpCisgICAgeworICAgICAgICBtX3BvaW50ZXIgPSBwb2ludGVyIHwgKHNpbmdsZUVudHJ5ID8g
dGhpbkZsYWcgOiAwKSB8IChtX3BvaW50ZXIgJiByZXNlcnZlZEZsYWcpOworICAgIH0KKyAgICBi
b29sIGdldFJlc2VydmVkRmxhZygpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnRlciAmIHJlc2VydmVk
RmxhZzsgfQorICAgIHZvaWQgc2V0UmVzZXJ2ZWRGbGFnKGJvb2wgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtX3BvaW50ZXIgfD0gcmVzZXJ2ZWRGbGFnOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BvaW50ZXIgJj0gfnJlc2VydmVkRmxhZzsKKyAg
ICB9CisgICAgCisgICAgdWludHB0cl90IG1fcG9pbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCit1c2luZyBXVEY6OlRpbnlQdHJTZXQ7CisKKyNlbmRpZiAvLyBUaW55UHRyU2V0X2gK
Kwo=
</data>
<flag name="review"
          id="279452"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254501</attachid>
            <date>2015-06-08 11:12:51 -0700</date>
            <delta_ts>2015-06-08 11:59:11 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48354</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1MzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDE1LTA2LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIHRpbnkgc2V0IG1hZ2ljIGluIFN0cnVjdHVyZVNldCBzaG91bGQgYmUgYXZhaWxhYmxlIGlu
IFdURgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1
NzIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisgICAgICAgIAorICAg
ICAgICBJIG1vdmVkIHRoZSBnZW5lcmljIGxvZ2ljIG9mIHNtYWxsIHNldHMgb2YgcG9pbnRlcnMg
YW5kIG1vdmVkIGl0IGludG8gV1RGLiBOb3csCisgICAgICAgIFN0cnVjdHVyZVNldCBpcyBhIHN1
YmNsYXNzIG9mIFRpbnlQdHJTZXQ8U3RydWN0dXJlKj4uIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkg
ZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuCisKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1
cmVTZXQuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmZpbHRlcik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVNldDo6ZmlsdGVyQXJyYXlNb2Rlcyk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNldDo6c3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNldDo6YXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU2V0OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpk
dW1wKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpjbGVhcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU2V0OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6
OmNvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjptZXJnZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6ZXhjbHVkZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6b3ZlcmxhcHMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTZXQ6OmFkZE91dE9mTGluZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVNldDo6Y29udGFpbnNPdXRPZkxpbmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTZXQ6OmNvcHlGcm9tT3V0T2ZMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjpPdXRPZkxpbmVMaXN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3Q6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Om9u
bHlTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OlN0cnVjdHVyZVNldCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6b3BlcmF0b3I9KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojp+U3RydWN0dXJlU2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojppc0VtcHR5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU2V0OjpnZW5lcmljRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU2V0Ojppc1N1cGVyc2V0T2YpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6
OmF0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpvcGVyYXRvcltdKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpsYXN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6aXRlcmF0b3IpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvciopOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9y
IT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmJlZ2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjplbmQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpDb250YWluc091dE9mTGluZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Q29udGFpbnNPdXRPZkxpbmU6
Om9wZXJhdG9yKCkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmNvcHlG
cm9tKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0
OjpsaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpPdXRPZkxpbmVM
aXN0OjpPdXRPZkxpbmVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0
OjpkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTZXQ6OmlzVGhpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVNldDo6cG9pbnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6c2lu
Z2xlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpzdHJ1
Y3R1cmVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldEVtcHR5KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpnZXRSZXNlcnZlZEZsYWcpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldFJlc2VydmVkRmxhZyk6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyU2xvdyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y29udGFpbnMpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6bWFrZVRvcCk6CisKIDIwMTUtMDYtMDYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldHVybmVkIEV4Y2VwdGlvbiogdmFsdWVzIG5lZWQgdG8gYmUg
aW5pdGlhbGl6ZWQgdG8gbnVsbHB0ciB3aGVuIG5vIGV4Y2VwdGlvbnMgYXJlIHRocm93bi4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3Bw
CShyZXZpc2lvbiAxODUzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMjAzICszMSwyNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNsZWFyKCkKLXsKLSAgICBkZWxldGVTdHJ1
Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKLSAgICBzZXRFbXB0eSgpOwotfQotCi1ib29sIFN0cnVj
dHVyZVNldDo6YWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIEFTU0VSVChzdHJ1Y3R1
cmUpOwotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoc2luZ2xlU3RydWN0dXJlKCkg
PT0gc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXNp
bmdsZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICBzZXQoc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3Qg
PSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUoZGVmYXVsdFN0YXJ0aW5nU2l6ZSk7Ci0gICAgICAgIGxp
c3QtPm1fbGVuZ3RoID0gMjsKLSAgICAgICAgbGlzdC0+bGlzdCgpWzBdID0gc2luZ2xlU3RydWN0
dXJlKCk7Ci0gICAgICAgIGxpc3QtPmxpc3QoKVsxXSA9IHN0cnVjdHVyZTsKLSAgICAgICAgc2V0
KGxpc3QpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGFk
ZE91dE9mTGluZShzdHJ1Y3R1cmUpOwotfQotCi1ib29sIFN0cnVjdHVyZVNldDo6cmVtb3ZlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAo
c2luZ2xlU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBzZXRFbXB0eSgp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlz
dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0gIT0gc3RydWN0dXJlKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGxpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3QoKVstLWxpc3Qt
Pm1fbGVuZ3RoXTsKLSAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkgewotICAgICAgICAgICAg
T3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShsaXN0KTsKLSAgICAgICAgICAgIHNldEVtcHR5KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBTdHJ1Y3R1cmVTZXQ6OmNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBj
b25zdAotewotICAgIGlmIChpc1RoaW4oKSkKLSAgICAgICAgcmV0dXJuIHNpbmdsZVN0cnVjdHVy
ZSgpID09IHN0cnVjdHVyZTsKLQotICAgIHJldHVybiBjb250YWluc091dE9mTGluZShzdHJ1Y3R1
cmUpOwotfQotCi1ib29sIFN0cnVjdHVyZVNldDo6bWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikKLXsKLSAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKG90aGVyLnNp
bmdsZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZChvdGhlci5zaW5nbGVTdHJ1
Y3R1cmUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZM
aW5lTGlzdCogbGlzdCA9IG90aGVyLnN0cnVjdHVyZUxpc3QoKTsKLSAgICBpZiAobGlzdC0+bV9s
ZW5ndGggPj0gMikgewotICAgICAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgICAgIE91dE9m
TGluZUxpc3QqIG15TmV3TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZSgKLSAgICAgICAgICAg
ICAgICBsaXN0LT5tX2xlbmd0aCArICEhc2luZ2xlU3RydWN0dXJlKCkpOwotICAgICAgICAgICAg
aWYgKHNpbmdsZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgbXlOZXdMaXN0LT5tX2xl
bmd0aCA9IDE7Ci0gICAgICAgICAgICAgICAgbXlOZXdMaXN0LT5saXN0KClbMF0gPSBzaW5nbGVT
dHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldChteU5ld0xpc3QpOwot
ICAgICAgICB9Ci0gICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYWRkT3V0T2ZMaW5lKGxpc3QtPmxpc3QoKVtpXSk7Ci0gICAgICAgIHJldHVybiBjaGFu
Z2VkOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobGlzdC0+bV9sZW5ndGgpOwotICAgIHJldHVy
biBhZGQobGlzdC0+bGlzdCgpWzBdKTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotewotICAgIGlmIChvdGhlci5pc1RoaW4oKSkgewot
ICAgICAgICBpZiAoIW90aGVyLnNpbmdsZVN0cnVjdHVyZSgpIHx8ICFjb250YWlucyhvdGhlci5z
aW5nbGVTdHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICBjbGVhcigpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICBzZXQob3RoZXIuc2luZ2xlU3RydWN0
dXJlKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQ29u
dGFpbnNPdXRPZkxpbmUgY29udGFpbnNPdXRPZkxpbmUob3RoZXIpOwotICAgIGdlbmVyaWNGaWx0
ZXIoY29udGFpbnNPdXRPZkxpbmUpOwotfQotCi12b2lkIFN0cnVjdHVyZVNldDo6ZXhjbHVkZShj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotewotICAgIGlmIChvdGhlci5pc1RoaW4oKSkgewot
ICAgICAgICBpZiAob3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpCi0gICAgICAgICAgICByZW1vdmUo
b3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuY29udGFpbnMoc2luZ2xlU3RydWN0
dXJlKCkpKQotICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICgh
b3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxpc3Qt
Pm1fbGVuZ3RoXTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKLSAgICAgICAgY2xl
YXIoKTsKLX0KLQogI2lmIEVOQUJMRShERkdfSklUKQogCi1uYW1lc3BhY2UgewotCi1jbGFzcyBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMgewotcHVibGljOgotICAgIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWVDb250YWlucyhjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHZh
bHVlKQotICAgICAgICA6IG1fdmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBi
b29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZS5jb250YWlucyhzdHJ1Y3R1cmUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgY29u
c3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBtX3ZhbHVlOwotfTsKLQotY2xhc3MgU3Bl
Y3VsYXRlZFR5cGVDb250YWlucyB7Ci1wdWJsaWM6Ci0gICAgU3BlY3VsYXRlZFR5cGVDb250YWlu
cyhTcGVjdWxhdGVkVHlwZSB0eXBlKQotICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAmIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1
Y3R1cmUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgU3BlY3VsYXRlZFR5cGUgbV90eXBlOwotfTsK
LQotY2xhc3MgQXJyYXlNb2Rlc0NvbnRhaW5zIHsKLXB1YmxpYzoKLSAgICBBcnJheU1vZGVzQ29u
dGFpbnMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQotICAgICAgICA6IG1fYXJyYXlNb2RlcyhhcnJh
eU1vZGVzKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJyYXlNb2RlcyAmIGFycmF5
TW9kZUZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICB9Ci1wcml2YXRlOgotICAgIEFycmF5
TW9kZXMgbV9hcnJheU1vZGVzOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZv
aWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcikKIHsKLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMgZnVuY3Rvcihv
dGhlcik7Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKFsm
XSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIC0+IGJvb2wgeyByZXR1cm4gb3RoZXIuY29udGFpbnMo
c3RydWN0dXJlKTsgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoU3BlY3VsYXRl
ZFR5cGUgdHlwZSkKIHsKLSAgICBTcGVjdWxhdGVkVHlwZUNvbnRhaW5zIGZ1bmN0b3IodHlwZSk7
Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKAorICAgICAg
ICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVy
biB0eXBlICYgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAgIH0p
OwogfQogCiB2b2lkIFN0cnVjdHVyZVNldDo6ZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVzIGFy
cmF5TW9kZXMpCiB7Ci0gICAgQXJyYXlNb2Rlc0NvbnRhaW5zIGZ1bmN0b3IoYXJyYXlNb2Rlcyk7
Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKAorICAgICAg
ICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVy
biBhcnJheU1vZGVzICYgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgICAg
ICB9KTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlcihjb25zdCBERkc6OkFic3RyYWN0
VmFsdWUmIG90aGVyKQpAQCAtMjM5LDg5ICs2MywyMyBAQCB2b2lkIFN0cnVjdHVyZVNldDo6Zmls
dGVyKGNvbnN0IERGRzo6QWJzCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotYm9vbCBT
dHJ1Y3R1cmVTZXQ6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QK
LXsKLSAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1cmUoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gb3RoZXIuY29udGFpbnMo
c2luZ2xlU3RydWN0dXJlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAob3RoZXIuaXNUaGluKCkp
IHsKLSAgICAgICAgaWYgKCFvdGhlci5zaW5nbGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3Qo
KTsKLSAgICAgICAgaWYgKGxpc3QtPm1fbGVuZ3RoID49IDIpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChsaXN0LT5saXN0KClbMF0gPT0gb3RoZXIuc2luZ2xlU3RydWN0
dXJlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGlmICghb3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
U3RydWN0dXJlU2V0OjpvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAot
ewotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gb3RoZXIuY29udGFpbnMo
c2luZ2xlU3RydWN0dXJlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAob3RoZXIuaXNUaGluKCkp
IHsKLSAgICAgICAgaWYgKCFvdGhlci5zaW5nbGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGNvbnRhaW5zT3V0T2ZMaW5lKG90aGVyLnNpbmds
ZVN0cnVjdHVyZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0
cnVjdHVyZUxpc3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5n
dGg7ICsraSkgewotICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlz
dCgpW2ldKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgU3RydWN0dXJlU2V0OjpvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKHNpemUoKSAhPSBvdGhlci5zaXplKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNTdWJzZXRPZihvdGhlcik7Ci19Ci0KIFNw
ZWN1bGF0ZWRUeXBlIFN0cnVjdHVyZVNldDo6c3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzVGhpbigpKSB7Ci0gICAgICAgIGlmICghc2luZ2xlU3RydWN0dXJl
KCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY05vbmU7Ci0gICAgICAgIHJldHVybiBzcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmUoc2luZ2xlU3RydWN0dXJlKCkpOwotICAgIH0KLSAgICAKICAgICBT
cGVjdWxhdGVkVHlwZSByZXN1bHQgPSBTcGVjTm9uZTsKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0
ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5t
X2xlbmd0aDsgKytpKQotICAgICAgICBtZXJnZVNwZWN1bGF0aW9uKHJlc3VsdCwgc3BlY3VsYXRp
b25Gcm9tU3RydWN0dXJlKGxpc3QtPmxpc3QoKVtpXSkpOworICAgIGZvckVhY2goCisgICAgICAg
IFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIG1lcmdlU3BlY3VsYXRp
b24ocmVzdWx0LCBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CisgICAgICAg
IH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEFycmF5TW9kZXMgU3RydWN0dXJlU2V0Ojph
cnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKSBjb25zdAogewotICAgIGlmIChpc1RoaW4oKSkgewot
ICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoc2luZ2xlU3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKTsKLSAgICB9Ci0gICAgCiAgICAgQXJyYXlNb2RlcyByZXN1bHQgPSAwOwotICAgIE91dE9m
TGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpCi0gICAgICAgIG1lcmdlQXJyYXlNb2RlcyhyZXN1
bHQsIGFzQXJyYXlNb2RlcyhsaXN0LT5saXN0KClbaV0tPmluZGV4aW5nVHlwZSgpKSk7CisgICAg
Zm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAg
ICAgbWVyZ2VBcnJheU1vZGVzKHJlc3VsdCwgYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKTsKKyAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzI5
LDggKzg3LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTZXQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdAogewog
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKICAgICBvdXQucHJpbnQoIlsiKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIGlu
Q29udGV4dCgqYXQoaSksIGNvbnRleHQpKTsKKyAgICBmb3JFYWNoKFsmXSAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIHsgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoKnN0cnVjdHVyZSwgY29udGV4
dCkpOyB9KTsKICAgICBvdXQucHJpbnQoIl0iKTsKIH0KIApAQCAtMzM5LDU5ICs5Niw1IEBAIHZv
aWQgU3RydWN0dXJlU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQKICAgICBkdW1wSW5Db250ZXh0
KG91dCwgbnVsbHB0cik7CiB9CiAKLWJvb2wgU3RydWN0dXJlU2V0OjphZGRPdXRPZkxpbmUoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVy
ZUxpc3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsr
aSkgewotICAgICAgICBpZiAobGlzdC0+bGlzdCgpW2ldID09IHN0cnVjdHVyZSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGxpc3QtPm1fbGVuZ3RoIDwg
bGlzdC0+bV9jYXBhY2l0eSkgewotICAgICAgICBsaXN0LT5saXN0KClbbGlzdC0+bV9sZW5ndGgr
K10gPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBP
dXRPZkxpbmVMaXN0KiBuZXdMaXN0ID0gT3V0T2ZMaW5lTGlzdDo6Y3JlYXRlKGxpc3QtPm1fY2Fw
YWNpdHkgKiAyKTsKLSAgICBuZXdMaXN0LT5tX2xlbmd0aCA9IGxpc3QtPm1fbGVuZ3RoICsgMTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LT5tX2xlbmd0aDsgaS0tOykKLSAgICAgICAgbmV3
TGlzdC0+bGlzdCgpW2ldID0gbGlzdC0+bGlzdCgpW2ldOwotICAgIG5ld0xpc3QtPmxpc3QoKVts
aXN0LT5tX2xlbmd0aF0gPSBzdHJ1Y3R1cmU7Ci0gICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShs
aXN0KTsKLSAgICBzZXQobmV3TGlzdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3Ry
dWN0dXJlU2V0Ojpjb250YWluc091dE9mTGluZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QK
LXsKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChs
aXN0LT5saXN0KClbaV0gPT0gc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNvcHlGcm9t
T3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKCFvdGhl
ci5pc1RoaW4oKSAmJiBvdGhlci5tX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSk7Ci0gICAgT3V0
T2ZMaW5lTGlzdCogb3RoZXJMaXN0ID0gb3RoZXIuc3RydWN0dXJlTGlzdCgpOwotICAgIE91dE9m
TGluZUxpc3QqIG15TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZShvdGhlckxpc3QtPm1fbGVu
Z3RoKTsKLSAgICBteUxpc3QtPm1fbGVuZ3RoID0gb3RoZXJMaXN0LT5tX2xlbmd0aDsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvdGhlckxpc3QtPm1fbGVuZ3RoOyBpLS07KQotICAgICAgICBteUxp
c3QtPmxpc3QoKVtpXSA9IG90aGVyTGlzdC0+bGlzdCgpW2ldOwotICAgIHNldChteUxpc3QpOwot
fQotCi1TdHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3QqIFN0cnVjdHVyZVNldDo6T3V0T2ZMaW5l
TGlzdDo6Y3JlYXRlKHVuc2lnbmVkIGNhcGFjaXR5KQotewotICAgIHJldHVybiBuZXcgKE5vdE51
bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKE91dE9mTGluZUxpc3QpICsgY2FwYWNpdHkgKiBzaXplb2Yo
U3RydWN0dXJlKikpKSBPdXRPZkxpbmVMaXN0KDAsIGNhcGFjaXR5KTsKLX0KLQotdm9pZCBTdHJ1
Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3Q6OmRlc3Ryb3koT3V0T2ZMaW5lTGlzdCogbGlzdCkKLXsK
LSAgICBmYXN0RnJlZShsaXN0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9u
IDE4NTMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJE
dW1wQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9UaW55UHRyU2V0Lmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0zOCw2OCArMzksMTUgQEAgY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsK
IHN0cnVjdCBBYnN0cmFjdFZhbHVlOwogfQogCi1jbGFzcyBTdHJ1Y3R1cmVTZXQgeworY2xhc3Mg
U3RydWN0dXJlU2V0IDogcHVibGljIFRpbnlQdHJTZXQ8U3RydWN0dXJlKj4gewogcHVibGljOgot
ICAgIFN0cnVjdHVyZVNldCgpCi0gICAgICAgIDogbV9wb2ludGVyKDApCi0gICAgewotICAgICAg
ICBzZXRFbXB0eSgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVTZXQoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgICAgIDogbV9wb2ludGVyKDApCi0gICAgewotICAgICAgICBzZXQoc3Ry
dWN0dXJlKTsKLSAgICB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmVTZXQoY29u
c3QgU3RydWN0dXJlU2V0JiBvdGhlcikKLSAgICAgICAgOiBtX3BvaW50ZXIoMCkKLSAgICB7Ci0g
ICAgICAgIGNvcHlGcm9tKG90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBT
dHJ1Y3R1cmVTZXQmIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgICAgICBkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKLSAgICAgICAgY29weUZy
b20ob3RoZXIpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAotICAgIH5TdHJ1
Y3R1cmVTZXQoKQotICAgIHsKLSAgICAgICAgZGVsZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5
KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoKTsKKyAgICB1c2luZyBUaW55UHRyU2V0
OjpUaW55UHRyU2V0OwogICAgIAogICAgIFN0cnVjdHVyZSogb25seVN0cnVjdHVyZSgpIGNvbnN0
CiAgICAgewotICAgICAgICBpZiAoaXNUaGluKCkpCi0gICAgICAgICAgICByZXR1cm4gc2luZ2xl
U3RydWN0dXJlKCk7Ci0gICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVMaXN0
KCk7Ci0gICAgICAgIGlmIChsaXN0LT5tX2xlbmd0aCAhPSAxKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBsaXN0LT5saXN0KClbMF07CisgICAgICAgIHJldHVy
biBvbmx5RW50cnkoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVjdHVyZSgp
OwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgQVNTRVJUKG1fcG9pbnRlciAhPSBy
ZXNlcnZlZFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBhZGQoU3RydWN0dXJlKik7Ci0gICAgYm9vbCByZW1vdmUoU3RydWN0dXJlKik7Ci0gICAg
Ym9vbCBjb250YWlucyhTdHJ1Y3R1cmUqKSBjb25zdDsKLSAgICAKLSAgICBib29sIG1lcmdlKGNv
bnN0IFN0cnVjdHVyZVNldCYpOwotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYp
OwotICAgIHZvaWQgZXhjbHVkZShjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKLSAgICAKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICB2b2lkIGZpbHRlcihjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmKTsKICAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSk7CkBAIC0xMDcsMjEyICs1
NSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgREZHOjpBYnN0cmFjdFZhbHVl
Jik7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KLSAgICB2b2lkIGdlbmVyaWNGaWx0ZXIoRnVuY3RvciYgZnVuY3RvcikKLSAg
ICB7Ci0gICAgICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICAgICAgaWYgKCFzaW5nbGVTdHJ1
Y3R1cmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoZnVuY3Rv
cihzaW5nbGVTdHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChmdW5jdG9yKGxpc3QtPmxpc3QoKVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1f
bGVuZ3RoXTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3RoKQotICAgICAg
ICAgICAgY2xlYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0
cnVjdHVyZVNldCYpIGNvbnN0OwotICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRP
ZigqdGhpcyk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJl
U2V0JikgY29uc3Q7Ci0gICAgCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKGlzVGhpbigpKQotICAgICAgICAgICAgcmV0dXJuICEhc2luZ2xlU3RydWN0dXJlKCk7
Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVMaXN0KCktPm1fbGVuZ3RoOwotICAgIH0KLSAgICAK
LSAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlz
VGhpbigpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWkpOwotICAgICAgICAgICAgQVNTRVJUKHNp
bmdsZVN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBzaW5nbGVTdHJ1Y3R1cmUoKTsK
LSAgICAgICAgfQotICAgICAgICBBU1NFUlQoaSA8IHN0cnVjdHVyZUxpc3QoKS0+bV9sZW5ndGgp
OwotICAgICAgICByZXR1cm4gc3RydWN0dXJlTGlzdCgpLT5saXN0KClbaV07Ci0gICAgfQotICAg
IAotICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQo
aSk7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKGlzVGhpbigpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2luZ2xlU3RydWN0dXJlKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZVN0cnVjdHVyZSgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBzdHJ1Y3R1cmVMaXN0KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0KCktPm1fbGVuZ3Ro
IC0gMV07Ci0gICAgfQotICAgIAotICAgIGNsYXNzIGl0ZXJhdG9yIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIGl0ZXJhdG9yKCkKLSAgICAgICAgICAgIDogbV9zZXQobnVsbHB0cikKLSAgICAgICAg
ICAgICwgbV9pbmRleCgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGl0ZXJhdG9yKGNvbnN0IFN0cnVjdHVyZVNldCogc2V0LCBzaXplX3QgaW5kZXgpCi0gICAgICAg
ICAgICA6IG1fc2V0KHNldCkKLSAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuIG1fc2V0LT5hdChtX2luZGV4KTsgfQotICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faW5kZXgrKzsKLSAgICAgICAgICAg
IHJldHVybiAqdGhpczsKLSAgICAgICAgfQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7
IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgY29uc3QgU3RydWN0dXJlU2V0KiBtX3NldDsKLSAgICAgICAgc2l6ZV90IG1faW5kZXg7
Ci0gICAgfTsKLSAgICAKLSAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKHRoaXMsIDApOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IodGhpcywgc2l6ZSgpKTsgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1
Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKLSAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzRnJv
bVN0cnVjdHVyZXMoKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgREZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOwotICAgIAotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdGhpbkZsYWcg
PSAxOwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVzZXJ2ZWRGbGFnID0gMjsKLSAgICBz
dGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0gdGhpbkZsYWcgfCByZXNlcnZlZEZsYWc7Ci0g
ICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZhbHVlID0gNDsKLQotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXplID0gNDsKLSAgICAKLSAgICBib29s
IGFkZE91dE9mTGluZShTdHJ1Y3R1cmUqKTsKLSAgICBib29sIGNvbnRhaW5zT3V0T2ZMaW5lKFN0
cnVjdHVyZSopIGNvbnN0OwotICAgIAotICAgIGNsYXNzIENvbnRhaW5zT3V0T2ZMaW5lIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIENvbnRhaW5zT3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVyZVNldCYg
c2V0KQotICAgICAgICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFpbnNPdXRPZkxpbmUoc3RydWN0
dXJlKTsKLSAgICAgICAgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgbV9zZXQ7Ci0gICAgfTsKLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5RnJvbShjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKG90aGVyLmlzVGhpbigp
IHx8IG90aGVyLm1fcG9pbnRlciA9PSByZXNlcnZlZFZhbHVlKSB7Ci0gICAgICAgICAgICBib29s
IHZhbHVlID0gZ2V0UmVzZXJ2ZWRGbGFnKCk7Ci0gICAgICAgICAgICBtX3BvaW50ZXIgPSBvdGhl
ci5tX3BvaW50ZXI7Ci0gICAgICAgICAgICBzZXRSZXNlcnZlZEZsYWcodmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvcHlGcm9tT3V0T2ZMaW5lKG90aGVy
KTsKLSAgICB9Ci0gICAgdm9pZCBjb3B5RnJvbU91dE9mTGluZShjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKTsKLSAgICAKLSAgICBjbGFzcyBPdXRPZkxpbmVMaXN0IHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyBPdXRPZkxpbmVMaXN0KiBjcmVhdGUodW5zaWduZWQgY2FwYWNpdHkpOwot
ICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KE91dE9mTGluZUxpc3QqKTsKLSAgICAgICAgCi0g
ICAgICAgIFN0cnVjdHVyZSoqIGxpc3QoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RydWN0dXJl
Kio+KHRoaXMgKyAxKTsgfQotICAgICAgICAKLSAgICAgICAgT3V0T2ZMaW5lTGlzdCh1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIGNhcGFjaXR5KQotICAgICAgICAgICAgOiBtX2xlbmd0aChsZW5n
dGgpCi0gICAgICAgICAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgICAgICB1bnNpZ25lZCBtX2Nh
cGFjaXR5OwotICAgIH07Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRlbGV0ZVN0cnVj
dHVyZUxpc3RJZk5lY2Vzc2FyeSgpCi0gICAgewotICAgICAgICBpZiAoIWlzVGhpbigpICYmIG1f
cG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKQotICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVz
dHJveShzdHJ1Y3R1cmVMaXN0KCkpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzVGhpbigpIGNv
bnN0IHsgcmV0dXJuIG1fcG9pbnRlciAmIHRoaW5GbGFnOyB9Ci0gICAgCi0gICAgdm9pZCogcG9p
bnRlcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPiht
X3BvaW50ZXIgJiB+ZmxhZ3MpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHNpbmdsZVN0
cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNUaGluKCkpOwotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlKj4ocG9pbnRlcigpKTsKLSAgICB9Ci0gICAg
Ci0gICAgT3V0T2ZMaW5lTGlzdCogc3RydWN0dXJlTGlzdCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoIWlzVGhpbigpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE91dE9mTGlu
ZUxpc3QqPihwb2ludGVyKCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIHNldChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihz
dHJ1Y3R1cmUpLCB0cnVlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXQoT3V0T2ZMaW5lTGlzdCogc3Ry
dWN0dXJlcykKLSAgICB7Ci0gICAgICAgIHNldChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1
Y3R1cmVzKSwgZmFsc2UpOwotICAgIH0KLSAgICB2b2lkIHNldEVtcHR5KCkKLSAgICB7Ci0gICAg
ICAgIHNldCgwLCB0cnVlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXQodWludHB0cl90IHBvaW50ZXIs
IGJvb2wgc2luZ2xlU3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgbV9wb2ludGVyID0gcG9pbnRl
ciB8IChzaW5nbGVTdHJ1Y3R1cmUgPyB0aGluRmxhZyA6IDApIHwgKG1fcG9pbnRlciAmIHJlc2Vy
dmVkRmxhZyk7Ci0gICAgfQotICAgIGJvb2wgZ2V0UmVzZXJ2ZWRGbGFnKCkgY29uc3QgeyByZXR1
cm4gbV9wb2ludGVyICYgcmVzZXJ2ZWRGbGFnOyB9Ci0gICAgdm9pZCBzZXRSZXNlcnZlZEZsYWco
Ym9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1fcG9p
bnRlciB8PSByZXNlcnZlZEZsYWc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcG9pbnRl
ciAmPSB+cmVzZXJ2ZWRGbGFnOwotICAgIH0KLQotICAgIHVpbnRwdHJfdCBtX3BvaW50ZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTg1
MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsMTQgKzY0LDE0IEBAIHZvaWQgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6Y2xvYmJlcigpCiAgICAgc2V0Q2xvYmJlcmVkKHRydWUpOwogICAgICAgICAK
ICAgICBpZiAobV9zZXQuaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVTdHJ1
Y3R1cmUoKSkKKyAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVFbnRyeSgpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAoIW1fc2V0LnNpbmdsZVN0cnVjdHVyZSgpLT5kZmdTaG91bGRX
YXRjaCgpKQorICAgICAgICBpZiAoIW1fc2V0LnNpbmdsZUVudHJ5KCktPmRmZ1Nob3VsZFdhdGNo
KCkpCiAgICAgICAgICAgICBtYWtlVG9wV2hlblRoaW4oKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAgICAgCi0gICAgU3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0KiBsaXN0ID0gbV9z
ZXQuc3RydWN0dXJlTGlzdCgpOworICAgIAorICAgIFN0cnVjdHVyZVNldDo6T3V0T2ZMaW5lTGlz
dCogbGlzdCA9IG1fc2V0Lmxpc3QoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LT5tX2xl
bmd0aDsgaS0tOykgewogICAgICAgICBpZiAoIWxpc3QtPmxpc3QoKVtpXS0+ZGZnU2hvdWxkV2F0
Y2goKSkgewogICAgICAgICAgICAgbWFrZVRvcCgpOwpAQCAtMjY4LDI1ICsyNjgsNiBAQCB2b2lk
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcihjb25zCiAgICAgZmlsdGVyKG90aGVyLm1f
c2V0KTsKIH0KIAotbmFtZXNwYWNlIHsKLQotY2xhc3MgQ29uZm9ybXNUb1R5cGUgewotcHVibGlj
OgotICAgIENvbmZvcm1zVG9UeXBlKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCi0gICAgICAgIDogbV90
eXBlKHR5cGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9t
U3RydWN0dXJlKHN0cnVjdHVyZSkgJiBtX3R5cGUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgU3Bl
Y3VsYXRlZFR5cGUgbV90eXBlOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZv
aWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyU2xvdyhTcGVjdWxhdGVkVHlwZSB0eXBl
KQogewogICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBmaWx0ZXIgdHlwZSBzbG93
Iik7CkBAIC0yOTgsOCArMjc5LDEwIEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyU2xvdygKICAgICAKICAgICBBU1NFUlQoIWlzVG9wKCkpOwogICAgIAotICAgIENvbmZvcm1z
VG9UeXBlIGNvbmZvcm1zVG9UeXBlKHR5cGUpOwotICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIoY29u
Zm9ybXNUb1R5cGUpOworICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIoCisgICAgICAgIFsmXSAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZy
b21TdHJ1Y3R1cmUoc3RydWN0dXJlKSAmIHR5cGUpOworICAgICAgICB9KTsKIH0KIAogYm9vbCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29u
c3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxODUzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICBBTFdBWVNfSU5M
SU5FIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG9wZXJhdG9yPShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICB7Ci0gICAgICAgIG1fc2V0ID0gc3RydWN0dXJlOworICAgICAgICBtX3NldCA9IFN0
cnVjdHVyZVNldChzdHJ1Y3R1cmUpOwogICAgICAgICBzZXRDbG9iYmVyZWQoZmFsc2UpOwogICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBtYWtlVG9wKCkKICAgICB7Ci0gICAgICAgIG1fc2V0LmRlbGV0ZVN0cnVjdHVy
ZUxpc3RJZk5lY2Vzc2FyeSgpOworICAgICAgICBtX3NldC5kZWxldGVMaXN0SWZOZWNlc3Nhcnko
KTsKICAgICAgICAgbV9zZXQubV9wb2ludGVyID0gdG9wVmFsdWU7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE4NTMwOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTUtMDYtMDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBUaGUgdGlueSBzZXQgbWFnaWMgaW4gU3RydWN0dXJlU2V0IHNo
b3VsZCBiZSBhdmFpbGFibGUgaW4gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDU3MjIKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBH
YXJlbi4KKyAgICAgICAgCisgICAgICAgIEFzIHRoZSBtYW5hZ2VtZW50IG9mIHN0cnVjdHVyZSBz
ZXRzIGV2b2x2ZWQgaW4gSlNDLCB0aGUgU3RydWN0dXJlU2V0IGRhdGEgc3RydWN0dXJlIGdyZXcK
KyAgICAgICAgaW5jcmVhc2luZ2x5IHNtYXJ0LiBJdCdzIGdvdCBzb21lIHNtYXJ0IHN0dWZmIGZv
ciBtYW5hZ2luZyBzbWFsbCBzZXRzIG9mIHBvaW50ZXJzLiBJCisgICAgICAgIHdhbnRlZCB0byB0
YWtlIHRoZSBnZW5lcmljIGxvZ2ljIG91dCBvZiBKU0MgYW5kIHB1dCBpdCBpbnRvIGEgcmV1c2Fi
bGUgdGVtcGxhdGl6ZWQgY2xhc3MKKyAgICAgICAgaW4gV1RGLgorICAgICAgICAKKyAgICAgICAg
KiBXVEYudmN4cHJvai9XVEYudmN4cHJvajoKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3Rm
L1RpbnlQdHJTZXQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OlRpbnlQdHJT
ZXQpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RG
OjpUaW55UHRyU2V0Ojp+VGlueVB0clNldCk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmNs
ZWFyKToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6b25seUVudHJ5KToKKyAgICAgICAgKFdU
Rjo6VGlueVB0clNldDo6aXNFbXB0eSk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmFkZCk6
CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OnJlbW92ZSk6CisgICAgICAgIChXVEY6OlRpbnlQ
dHJTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6bWVyZ2UpOgorICAg
ICAgICAoV1RGOjpUaW55UHRyU2V0Ojpmb3JFYWNoKToKKyAgICAgICAgKFdURjo6VGlueVB0clNl
dDo6Z2VuZXJpY0ZpbHRlcik6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmZpbHRlcik6Cisg
ICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmV4Y2x1ZGUpOgorICAgICAgICAoV1RGOjpUaW55UHRy
U2V0Ojppc1N1YnNldE9mKToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6aXNTdXBlcnNldE9m
KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6b3ZlcmxhcHMpOgorICAgICAgICAoV1RGOjpU
aW55UHRyU2V0OjpzaXplKToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6YXQpOgorICAgICAg
ICAoV1RGOjpUaW55UHRyU2V0OjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6VGlueVB0clNl
dDo6bGFzdCk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoV1RGOjpUaW55UHRyU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6
OlRpbnlQdHJTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGlueVB0
clNldDo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0Ojpi
ZWdpbik6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmVuZCk6CisgICAgICAgIChXVEY6OlRp
bnlQdHJTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjphZGRPdXRP
ZkxpbmUpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0Ojpjb250YWluc091dE9mTGluZSk6Cisg
ICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmNvcHlGcm9tKToKKyAgICAgICAgKFdURjo6VGlueVB0
clNldDo6Y29weUZyb21PdXRPZkxpbmUpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpPdXRP
ZkxpbmVMaXN0OjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpPdXRPZkxpbmVM
aXN0OjpkZXN0cm95KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6T3V0T2ZMaW5lTGlzdDo6
bGlzdCk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6Ok91dE9mTGluZUxpc3Q6Ok91dE9mTGlu
ZUxpc3QpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpkZWxldGVMaXN0SWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0Ojppc1RoaW4pOgorICAgICAgICAoV1RGOjpUaW55
UHRyU2V0Ojpwb2ludGVyKToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6c2luZ2xlRW50cnkp
OgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpsaXN0KToKKyAgICAgICAgKFdURjo6VGlueVB0
clNldDo6c2V0KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6c2V0RW1wdHkpOgorICAgICAg
ICAoV1RGOjpUaW55UHRyU2V0OjpnZXRSZXNlcnZlZEZsYWcpOgorICAgICAgICAoV1RGOjpUaW55
UHRyU2V0OjpzZXRSZXNlcnZlZEZsYWcpOgorCiAyMDE1LTA2LTA1ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl1baU9TXSBMaW1pdCB0aGUgbnVtYmVyIG9m
IHZub2RlcyB1c2VkIGJ5IHRoZSBXZWJDb250ZW50IHByb2Nlc3NlcwpJbmRleDogU291cmNlL1dU
Ri9XVEYudmN4cHJvai9XVEYudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi52
Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lvbiAxODUzMDMpCisrKyBTb3VyY2UvV1RGL1dURi52
Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNiArMzAwLDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0Zlx0aHJlYWRzYWZlUmVmQ291bnRlZC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXHRocmVhZHNwZWNpZmljLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcdGhyZWFkc1xCaW5hcnlTZW1hcGhvcmUuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxUaW55UHRyU2V0LmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcdW5pY29kZVxDaGFyYWN0ZXJOYW1lcy5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXHVuaWNvZGVcQ29sbGF0b3IuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0Zlx1bmljb2RlXFVURjguaCIgLz4KSW5kZXg6IFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg1MzAzKQorKysg
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsNyBAQAogCQkwRkQ4MUFDNTE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZl
Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
ODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3Ry
aW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNw
cCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFt
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZB
NjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsgfTsKKwkJMEZFRDY3
QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55
UHRyU2V0LmggKi87IH07CiAJCTE0MDIyRjQxMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9j
LmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAy
MkY0MDE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hICovOyB9OwogCQkxNDNGNjExRjE1
NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5j
cHAgKi87IH07CiAJCTE0M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5
MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07
IH07CkBAIC0zMjAsNiArMzIxLDcgQEAKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0
cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
REJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSQU1TaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04NjIsNiArODY0LDcgQEAKIAkJCQlBOEE0NzMzNjE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkaW5nUHRocmVhZHMuY3BwICovLAogCQkJCUE4QTQ3MzNFMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oICovLAogCQkJCUE4QTQ3MzNGMTUxQTgyNUIwMDQx
MjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oICovLAorCQkJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0Ux
NSAvKiBUaW55UHRyU2V0LmggKi8sCiAJCQkJMTQ5RUYxNjIxNkJCRkUwRDAwMEE0MzMxIC8qIFRy
aVN0YXRlLmggKi8sCiAJCQkJODNGQkE5MzExOURGNDU5NzAwRjMwQURCIC8qIFR5cGVDYXN0cy5o
ICovLAogCQkJCUE4QTQ3MzVDMTUxQTgyNUIwMDQxMjNGRiAvKiBVbmlvbkZpbmQuaCAqLywKQEAg
LTEyMDEsNiArMTIwNCw3IEBACiAJCQkJQThBNDc0N0QxNTFBODI1QjAwNDEyM0ZGIC8qIFZhbHVl
Q2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDdFMTUxQTgyNUIwMDQxMjNGRiAvKiBW
ZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDdGMTUxQTgyNUIwMDQxMjNGRiAvKiBW
ZWN0b3JUcmFpdHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0Ux
NSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4MDE1MUE4MjVCMDA0
MTIzRkYgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzRDRkM4RTE2QTRGMzI3MDA2
RDU0MDQgLyogV2Vha1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRBMEFEM0ExQTk2MjQ1NTAw
NTM2REY2IC8qIFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTg1MzAzKQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVGhy
ZWFkU3BlY2lmaWMuaAogICAgIFRocmVhZGluZy5oCiAgICAgVGhyZWFkaW5nUHJpbWl0aXZlcy5o
CisgICAgVGlueVB0clNldC5oCiAgICAgVk1UYWdzLmgKICAgICBWYWx1ZUNoZWNrLmgKICAgICBW
ZWN0b3IuaApJbmRleDogU291cmNlL1dURi93dGYvVGlueVB0clNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1RpbnlQdHJTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYv
d3RmL1RpbnlQdHJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFRpbnlQdHJT
ZXRfaAorI2RlZmluZSBUaW55UHRyU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBv
bmx5IHdvcmtzIGZvciB0eXBlcyB0aGF0IGFyZSBwb2ludGVyLWxpa2U6IHRoZXkgc2hvdWxkIGhh
dmUgdGhlIHNpemUKKy8vIG9mIGEgcG9pbnRlciBhbmQgbGlrZSBhIHBvaW50ZXIgdGhleSBzaG91
bGQgbm90IGhhdmUgYXNzaWdubWVudCBvcGVyYXRvcnMsIGNvcHkgY29uc3RydWN0b3JzLAorLy8g
bm9uLXRyaXZpYWwgZGVmYXVsdCBjb25zdHJ1Y3RvcnMsIGFuZCBub24tdHJpdmlhbCBkZXN0cnVj
dG9ycy4gSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGxpZnQgYWxsCisvLyBvZiB0aGVzZSByZXN0cmlj
dGlvbnMuIElmIHdlIHN1Y2NlZWRlZCB0aGVuIHRoaXMgc2hvdWxkIGJlIHJlbmFtZWQgdG8ganVz
dCBUaW55U2V0LgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NTc0MQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVGlueVB0clNldCB7CitwdWJsaWM6
CisgICAgVGlueVB0clNldCgpCisgICAgICAgIDogbV9wb2ludGVyKDApCisgICAgeworICAgICAg
ICBzZXRFbXB0eSgpOworICAgIH0KKyAgICAKKyAgICBUaW55UHRyU2V0KFQgZWxlbWVudCkKKyAg
ICAgICAgOiBtX3BvaW50ZXIoMCkKKyAgICB7CisgICAgICAgIHNldChlbGVtZW50KTsKKyAgICB9
CisgICAgCisgICAgQUxXQVlTX0lOTElORSBUaW55UHRyU2V0KGNvbnN0IFRpbnlQdHJTZXQmIG90
aGVyKQorICAgICAgICA6IG1fcG9pbnRlcigwKQorICAgIHsKKyAgICAgICAgY29weUZyb20ob3Ro
ZXIpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIFRpbnlQdHJTZXQmIG9wZXJhdG9y
PShjb25zdCBUaW55UHRyU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZv
dGhlcikKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgZGVsZXRlTGlzdElmTmVj
ZXNzYXJ5KCk7CisgICAgICAgIGNvcHlGcm9tKG90aGVyKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKyAgICAKKyAgICB+VGlueVB0clNldCgpCisgICAgeworICAgICAgICBkZWxldGVM
aXN0SWZOZWNlc3NhcnkoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgewor
ICAgICAgICBkZWxldGVMaXN0SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgc2V0RW1wdHkoKTsKKyAg
ICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgb25seSBlbnRyeSBpZiB0aGUgYXJyYXkgaGFz
IGV4YWN0bHkgb25lIGVudHJ5LgorICAgIFQgb25seUVudHJ5KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpc1RoaW4oKSkKKyAgICAgICAgICAgIHJldHVybiBzaW5nbGVFbnRyeSgpOworICAg
ICAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gdGhpcy0+bGlzdCgpOworICAgICAgICBpZiAobGlz
dC0+bV9sZW5ndGggIT0gMSkKKyAgICAgICAgICAgIHJldHVybiBUKCk7CisgICAgICAgIHJldHVy
biBsaXN0LT5saXN0KClbMF07CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
CisgICAgeworICAgICAgICBib29sIHJlc3VsdCA9IGlzVGhpbigpICYmICFzaW5nbGVFbnRyeSgp
OworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgQVNTRVJUKG1fcG9vaW50ZXIgIT0g
cmVzZXJ2ZWRWYWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgYWRkKFQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAg
ICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmIChzaW5nbGVFbnRyeSgpID09IHZhbHVl
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghc2luZ2xl
RW50cnkoKSkgeworICAgICAgICAgICAgICAgIHNldCh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE91
dE9mTGluZUxpc3QqIGxpc3QgPSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUoZGVmYXVsdFN0YXJ0aW5n
U2l6ZSk7CisgICAgICAgICAgICBsaXN0LT5tX2xlbmd0aCA9IDI7CisgICAgICAgICAgICBsaXN0
LT5saXN0KClbMF0gPSBzaW5nbGVFbnRyeSgpOworICAgICAgICAgICAgbGlzdC0+bGlzdCgpWzFd
ID0gdmFsdWU7CisgICAgICAgICAgICBzZXQobGlzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGFkZE91dE9mTGluZSh2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVtb3ZlKFQgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmIChzaW5nbGVFbnRyeSgpID09IHZhbHVl
KSB7CisgICAgICAgICAgICAgICAgc2V0RW1wdHkoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHRoaXMtPmxpc3QoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0gIT0gdmFsdWUpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBsaXN0LT5saXN0KClbaV0gPSBsaXN0LT5saXN0KClb
LS1saXN0LT5tX2xlbmd0aF07CisgICAgICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShsaXN0KTsKKyAgICAgICAgICAg
ICAgICBzZXRFbXB0eSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29s
IGNvbnRhaW5zKFQgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUaGluKCkpCisg
ICAgICAgICAgICByZXR1cm4gc2luZ2xlRW50cnkoKSA9PSB2YWx1ZTsKKyAgICAgICAgcmV0dXJu
IGNvbnRhaW5zT3V0T2ZMaW5lKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtZXJnZShj
b25zdCBUaW55UHRyU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChvdGhlci5pc1RoaW4o
KSkgeworICAgICAgICAgICAgaWYgKG90aGVyLnNpbmdsZUVudHJ5KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGFkZChvdGhlci5zaW5nbGVFbnRyeSgpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9
IG90aGVyLmxpc3QoKTsKKyAgICAgICAgaWYgKGxpc3QtPm1fbGVuZ3RoID49IDIpIHsKKyAgICAg
ICAgICAgIGlmIChpc1RoaW4oKSkgeworICAgICAgICAgICAgICAgIE91dE9mTGluZUxpc3QqIG15
TmV3TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbGlz
dC0+bV9sZW5ndGggKyAhIXNpbmdsZUVudHJ5KCkpOworICAgICAgICAgICAgICAgIGlmIChzaW5n
bGVFbnRyeSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG15TmV3TGlzdC0+bV9sZW5ndGggPSAx
OworICAgICAgICAgICAgICAgICAgICBteU5ld0xpc3QtPmxpc3QoKVswXSA9IHNpbmdsZUVudHJ5
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldChteU5ld0xpc3QpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IGFkZE91dE9mTGluZShsaXN0LT5saXN0KClbaV0pOworICAg
ICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFT
U0VSVChsaXN0LT5tX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBhZGQobGlzdC0+bGlzdCgpWzBd
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFzaW5nbGVFbnRyeSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGZ1bmN0b3Ioc2luZ2xlRW50cnkoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxp
c3QqIGxpc3QgPSB0aGlzLT5saXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsaXN0LT5tX2xlbmd0aDsgKytpKQorICAgICAgICAgICAgZnVuY3RvcihsaXN0LT5saXN0KClb
aV0pOworICAgIH0KKyAgICAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGdlbmVyaWNGaWx0ZXIoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGlmIChpc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFzaW5nbGVFbnRyeSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmdW5jdG9yKHNpbmdsZUVudHJ5
KCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxp
c3QqIGxpc3QgPSB0aGlzLT5saXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3RvcihsaXN0LT5s
aXN0KClbaV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGlzdC0+
bGlzdCgpW2ktLV0gPSBsaXN0LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAg
fQorICAgICAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBUaW55UHRyU2V0JiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmIChvdGhlci5pc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFvdGhl
ci5zaW5nbGVFbnRyeSgpIHx8ICFjb250YWlucyhvdGhlci5zaW5nbGVFbnRyeSgpKSkKKyAgICAg
ICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICBzZXQob3RoZXIuc2luZ2xlRW50cnkoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGdlbmVyaWNGaWx0ZXIoWyZdIChUIHZhbHVlKSB7IHJldHVybiBvdGhlci5jb250YWluc091
dE9mTGluZSh2YWx1ZSk7IH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGV4Y2x1ZGUoY29uc3Qg
VGlueVB0clNldCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsK
KyAgICAgICAgICAgIGlmIChvdGhlci5zaW5nbGVFbnRyeSgpKQorICAgICAgICAgICAgICAgIHJl
bW92ZShvdGhlci5zaW5nbGVFbnRyeSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZ2VuZXJpY0ZpbHRlcihbJl0gKFQgdmFsdWUpIHsgcmV0dXJu
ICFvdGhlci5jb250YWluc091dE9mTGluZSh2YWx1ZSk7IH0pOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzU3Vic2V0T2YoY29uc3QgVGlueVB0clNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmICghc2luZ2xlRW50cnkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBvdGhlci5jb250
YWlucyhzaW5nbGVFbnRyeSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG90
aGVyLmlzVGhpbigpKSB7CisgICAgICAgICAgICBpZiAoIW90aGVyLnNpbmdsZUVudHJ5KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdCog
bGlzdCA9IHRoaXMtPmxpc3QoKTsKKyAgICAgICAgICAgIGlmIChsaXN0LT5tX2xlbmd0aCA+PSAy
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChsaXN0LT5s
aXN0KClbMF0gPT0gb3RoZXIuc2luZ2xlRW50cnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHRoaXMtPmxpc3QoKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICghb3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFRpbnlQdHJTZXQmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG90aGVyLmlzU3Vic2V0T2YoKnRoaXMpOworICAg
IH0KKyAgICAKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFRpbnlQdHJTZXQmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKGlzVGhpbigpKSB7CisgICAgICAgICAgICBpZiAoIXNpbmds
ZUVudHJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIG90aGVyLmNvbnRhaW5zKHNpbmdsZUVudHJ5KCkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmICghb3RoZXIuc2lu
Z2xlRW50cnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gY29udGFpbnNPdXRPZkxpbmUob3RoZXIuc2luZ2xlRW50cnkoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSB0aGlzLT5saXN0KCk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpc1RoaW4oKSkKKyAgICAgICAgICAgIHJldHVybiAhIXNpbmdsZUVudHJ5KCk7Cisg
ICAgICAgIHJldHVybiBsaXN0KCktPm1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBUIGF0KHNp
emVfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVGhpbigpKSB7CisgICAgICAgICAg
ICBBU1NFUlQoIWkpOworICAgICAgICAgICAgQVNTRVJUKHNpbmdsZUVudHJ5KCkpOworICAgICAg
ICAgICAgcmV0dXJuIHNpbmdsZUVudHJ5KCk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGkg
PCBsaXN0KCktPm1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGxpc3QoKS0+bGlzdCgpW2ldOwor
ICAgIH0KKyAgICAKKyAgICBUIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0
KGkpOyB9CisgICAgCisgICAgVCBsYXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1Ro
aW4oKSkgeworICAgICAgICAgICAgQVNTRVJUKHNpbmdsZUVudHJ5KCkpOworICAgICAgICAgICAg
cmV0dXJuIHNpbmdsZUVudHJ5KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpc3QoKS0+
bGlzdCgpW2xpc3QoKS0+bV9sZW5ndGggLSAxXTsKKyAgICB9CisgICAgCisgICAgY2xhc3MgaXRl
cmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBt
X3NldChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgVGlueVB0clNldCogc2V0LCBz
aXplX3QgaW5kZXgpCisgICAgICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgICAgICwgbV9p
bmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LT5hdChpbmRleCk7IH0KKyAgICAgICAgaXRl
cmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4Kys7Cisg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBvdGhl
ci5tX2luZGV4OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIGNvbnN0IFRpbnlQdHJTZXQqIG1fc2V0OworICAgICAgICBzaXplX3Qg
bV9pbmRleDsKKyAgICB9OworICAgIAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IodGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFRpbnlQdHJTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHNpemUoKSAh
PSBvdGhlci5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biBpc1N1YnNldE9mKG90aGVyKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsKKworICAgIHN0YXRpYyBjb25z
dCB1aW50cHRyX3QgdGhpbkZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVz
ZXJ2ZWRGbGFnID0gMjsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0gdGhpbkZs
YWcgfCByZXNlcnZlZEZsYWc7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZh
bHVlID0gNDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXpl
ID0gNDsKKyAgICAKKyAgICBib29sIGFkZE91dE9mTGluZShUIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHRoaXMtPmxpc3QoKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChs
aXN0LT5saXN0KClbaV0gPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGlzdC0+bV9sZW5ndGggPCBsaXN0LT5t
X2NhcGFjaXR5KSB7CisgICAgICAgICAgICBsaXN0LT5saXN0KClbbGlzdC0+bV9sZW5ndGgrK10g
PSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBPdXRPZkxpbmVMaXN0KiBuZXdMaXN0ID0gT3V0T2ZMaW5lTGlzdDo6Y3JlYXRlKGxp
c3QtPm1fY2FwYWNpdHkgKiAyKTsKKyAgICAgICAgbmV3TGlzdC0+bV9sZW5ndGggPSBsaXN0LT5t
X2xlbmd0aCArIDE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxpc3QtPm1fbGVuZ3RoOyBp
LS07KQorICAgICAgICAgICAgbmV3TGlzdC0+bGlzdCgpW2ldID0gbGlzdC0+bGlzdCgpW2ldOwor
ICAgICAgICBuZXdMaXN0LT5saXN0KClbbGlzdC0+bV9sZW5ndGhdID0gdmFsdWU7CisgICAgICAg
IE91dE9mTGluZUxpc3Q6OmRlc3Ryb3kobGlzdCk7CisgICAgICAgIHNldChuZXdMaXN0KTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnNPdXRPZkxp
bmUoVCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSB0
aGlzLT5saXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAobGlzdC0+bGlzdCgpW2ldID09IHZhbHVlKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlGcm9tKGNvbnN0
IFRpbnlQdHJTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzVGhpbigpIHx8
IG90aGVyLm1fcG9pbnRlciA9PSByZXNlcnZlZFZhbHVlKSB7CisgICAgICAgICAgICBib29sIHZh
bHVlID0gZ2V0UmVzZXJ2ZWRGbGFnKCk7CisgICAgICAgICAgICBtX3BvaW50ZXIgPSBvdGhlci5t
X3BvaW50ZXI7CisgICAgICAgICAgICBzZXRSZXNlcnZlZEZsYWcodmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNvcHlGcm9tT3V0T2ZMaW5lKG90aGVyKTsK
KyAgICB9CisgICAgCisgICAgTkVWRVJfSU5MSU5FIHZvaWQgY29weUZyb21PdXRPZkxpbmUoY29u
c3QgVGlueVB0clNldCYgb3RoZXIpCisgICAgeworICAgICAgICBBU1NFUlQoIW90aGVyLmlzVGhp
bigpICYmIG90aGVyLm1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKTsKKyAgICAgICAgT3V0T2ZM
aW5lTGlzdCogb3RoZXJMaXN0ID0gb3RoZXIubGlzdCgpOworICAgICAgICBPdXRPZkxpbmVMaXN0
KiBteUxpc3QgPSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUob3RoZXJMaXN0LT5tX2xlbmd0aCk7Cisg
ICAgICAgIG15TGlzdC0+bV9sZW5ndGggPSBvdGhlckxpc3QtPm1fbGVuZ3RoOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvdGhlckxpc3QtPm1fbGVuZ3RoOyBpLS07KQorICAgICAgICAgICAg
bXlMaXN0LT5saXN0KClbaV0gPSBvdGhlckxpc3QtPmxpc3QoKVtpXTsKKyAgICAgICAgc2V0KG15
TGlzdCk7CisgICAgfQorICAgIAorICAgIGNsYXNzIE91dE9mTGluZUxpc3QgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIE91dE9mTGluZUxpc3QqIGNyZWF0ZSh1bnNpZ25lZCBjYXBhY2l0
eSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoTm90TnVsbCwgZmFzdE1hbGxv
YyhzaXplb2YoT3V0T2ZMaW5lTGlzdCkgKyBjYXBhY2l0eSAqIHNpemVvZihUKSkpIE91dE9mTGlu
ZUxpc3QoMCwgY2FwYWNpdHkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KE91dE9mTGluZUxpc3QqIGxpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZhc3RGcmVlKGxpc3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUKiBsaXN0KCkg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFQqPih0aGlzICsgMSk7IH0KKyAgICAgICAgCisgICAgICAg
IE91dE9mTGluZUxpc3QodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBjYXBhY2l0eSkKKyAgICAg
ICAgICAgIDogbV9sZW5ndGgobGVuZ3RoKQorICAgICAgICAgICAgLCBtX2NhcGFjaXR5KGNhcGFj
aXR5KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsK
KyAgICAgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKKyAgICB9OworICAgIAorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBkZWxldGVMaXN0SWZOZWNlc3NhcnkoKQorICAgIHsKKyAgICAgICAgaWYgKCFp
c1RoaW4oKSAmJiBtX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSkKKyAgICAgICAgICAgIE91dE9m
TGluZUxpc3Q6OmRlc3Ryb3kobGlzdCgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1RoaW4o
KSBjb25zdCB7IHJldHVybiBtX3BvaW50ZXIgJiB0aGluRmxhZzsgfQorICAgIAorICAgIHZvaWQq
IHBvaW50ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lk
Kj4obV9wb2ludGVyICYgfmZsYWdzKTsKKyAgICB9CisgICAgCisgICAgVCBzaW5nbGVFbnRyeSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNUaGluKCkpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4ocG9pbnRlcigpKTsKKyAgICB9CisgICAgCisgICAgT3V0T2ZMaW5lTGlz
dCogbGlzdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVGhpbigpKTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE91dE9mTGluZUxpc3QqPihwb2ludGVyKCkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldChUIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0KGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHZhbHVlKSwgdHJ1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0KE91dE9m
TGluZUxpc3QqIGxpc3QpCisgICAgeworICAgICAgICBzZXQoYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obGlzdCksIGZhbHNlKTsKKyAgICB9CisgICAgdm9pZCBzZXRFbXB0eSgpCisgICAgeworICAg
ICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0KHVpbnRwdHJfdCBwb2ludGVy
LCBib29sIHNpbmdsZUVudHJ5KQorICAgIHsKKyAgICAgICAgbV9wb2ludGVyID0gcG9pbnRlciB8
IChzaW5nbGVFbnRyeSA/IHRoaW5GbGFnIDogMCkgfCAobV9wb2ludGVyICYgcmVzZXJ2ZWRGbGFn
KTsKKyAgICB9CisgICAgYm9vbCBnZXRSZXNlcnZlZEZsYWcoKSBjb25zdCB7IHJldHVybiBtX3Bv
aW50ZXIgJiByZXNlcnZlZEZsYWc7IH0KKyAgICB2b2lkIHNldFJlc2VydmVkRmxhZyhib29sIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbV9wb2ludGVyIHw9
IHJlc2VydmVkRmxhZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wb2ludGVyICY9IH5y
ZXNlcnZlZEZsYWc7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCBtX3BvaW50ZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpUaW55UHRyU2V0OworCisjZW5kaWYg
Ly8gVGlueVB0clNldF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254502</attachid>
            <date>2015-06-08 11:59:11 -0700</date>
            <delta_ts>2015-06-08 11:59:11 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48760</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1MzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDE1LTA2LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIHRpbnkgc2V0IG1hZ2ljIGluIFN0cnVjdHVyZVNldCBzaG91bGQgYmUgYXZhaWxhYmxlIGlu
IFdURgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1
NzIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisgICAgICAgIAorICAg
ICAgICBJIG1vdmVkIHRoZSBnZW5lcmljIGxvZ2ljIG9mIHNtYWxsIHNldHMgb2YgcG9pbnRlcnMg
YW5kIG1vdmVkIGl0IGludG8gV1RGLiBOb3csCisgICAgICAgIFN0cnVjdHVyZVNldCBpcyBhIHN1
YmNsYXNzIG9mIFRpbnlQdHJTZXQ8U3RydWN0dXJlKj4uIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkg
ZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuCisKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1
cmVTZXQuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmZpbHRlcik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVNldDo6ZmlsdGVyQXJyYXlNb2Rlcyk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNldDo6c3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNldDo6YXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU2V0OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpk
dW1wKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpjbGVhcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU2V0OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6
OmNvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjptZXJnZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6ZXhjbHVkZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6b3ZlcmxhcHMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTZXQ6OmFkZE91dE9mTGluZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVNldDo6Y29udGFpbnNPdXRPZkxpbmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTZXQ6OmNvcHlGcm9tT3V0T2ZMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjpPdXRPZkxpbmVMaXN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3Q6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Om9u
bHlTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OlN0cnVjdHVyZVNldCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6b3BlcmF0b3I9KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojp+U3RydWN0dXJlU2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojppc0VtcHR5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU2V0OjpnZW5lcmljRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU2V0Ojppc1N1cGVyc2V0T2YpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6
OmF0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpvcGVyYXRvcltdKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpsYXN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6aXRlcmF0b3IpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvciopOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXRlcmF0b3I6Om9wZXJhdG9y
IT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmJlZ2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjplbmQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpDb250YWluc091dE9mTGluZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Q29udGFpbnNPdXRPZkxpbmU6
Om9wZXJhdG9yKCkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmNvcHlG
cm9tKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0
OjpsaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpPdXRPZkxpbmVM
aXN0OjpPdXRPZkxpbmVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0
OjpkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTZXQ6OmlzVGhpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVNldDo6cG9pbnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6c2lu
Z2xlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpzdHJ1
Y3R1cmVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldEVtcHR5KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpnZXRSZXNlcnZlZEZsYWcpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldFJlc2VydmVkRmxhZyk6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyU2xvdyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y29udGFpbnMpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6bWFrZVRvcCk6CisKIDIwMTUtMDYtMDYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldHVybmVkIEV4Y2VwdGlvbiogdmFsdWVzIG5lZWQgdG8gYmUg
aW5pdGlhbGl6ZWQgdG8gbnVsbHB0ciB3aGVuIG5vIGV4Y2VwdGlvbnMgYXJlIHRocm93bi4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3Bw
CShyZXZpc2lvbiAxODUzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMjAzICszMSwyNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNsZWFyKCkKLXsKLSAgICBkZWxldGVTdHJ1
Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKLSAgICBzZXRFbXB0eSgpOwotfQotCi1ib29sIFN0cnVj
dHVyZVNldDo6YWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIEFTU0VSVChzdHJ1Y3R1
cmUpOwotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoc2luZ2xlU3RydWN0dXJlKCkg
PT0gc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXNp
bmdsZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICBzZXQoc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3Qg
PSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUoZGVmYXVsdFN0YXJ0aW5nU2l6ZSk7Ci0gICAgICAgIGxp
c3QtPm1fbGVuZ3RoID0gMjsKLSAgICAgICAgbGlzdC0+bGlzdCgpWzBdID0gc2luZ2xlU3RydWN0
dXJlKCk7Ci0gICAgICAgIGxpc3QtPmxpc3QoKVsxXSA9IHN0cnVjdHVyZTsKLSAgICAgICAgc2V0
KGxpc3QpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGFk
ZE91dE9mTGluZShzdHJ1Y3R1cmUpOwotfQotCi1ib29sIFN0cnVjdHVyZVNldDo6cmVtb3ZlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAo
c2luZ2xlU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBzZXRFbXB0eSgp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlz
dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0gIT0gc3RydWN0dXJlKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGxpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3QoKVstLWxpc3Qt
Pm1fbGVuZ3RoXTsKLSAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkgewotICAgICAgICAgICAg
T3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShsaXN0KTsKLSAgICAgICAgICAgIHNldEVtcHR5KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBTdHJ1Y3R1cmVTZXQ6OmNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBj
b25zdAotewotICAgIGlmIChpc1RoaW4oKSkKLSAgICAgICAgcmV0dXJuIHNpbmdsZVN0cnVjdHVy
ZSgpID09IHN0cnVjdHVyZTsKLQotICAgIHJldHVybiBjb250YWluc091dE9mTGluZShzdHJ1Y3R1
cmUpOwotfQotCi1ib29sIFN0cnVjdHVyZVNldDo6bWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikKLXsKLSAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKG90aGVyLnNp
bmdsZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZChvdGhlci5zaW5nbGVTdHJ1
Y3R1cmUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZM
aW5lTGlzdCogbGlzdCA9IG90aGVyLnN0cnVjdHVyZUxpc3QoKTsKLSAgICBpZiAobGlzdC0+bV9s
ZW5ndGggPj0gMikgewotICAgICAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgICAgIE91dE9m
TGluZUxpc3QqIG15TmV3TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZSgKLSAgICAgICAgICAg
ICAgICBsaXN0LT5tX2xlbmd0aCArICEhc2luZ2xlU3RydWN0dXJlKCkpOwotICAgICAgICAgICAg
aWYgKHNpbmdsZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgbXlOZXdMaXN0LT5tX2xl
bmd0aCA9IDE7Ci0gICAgICAgICAgICAgICAgbXlOZXdMaXN0LT5saXN0KClbMF0gPSBzaW5nbGVT
dHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldChteU5ld0xpc3QpOwot
ICAgICAgICB9Ci0gICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYWRkT3V0T2ZMaW5lKGxpc3QtPmxpc3QoKVtpXSk7Ci0gICAgICAgIHJldHVybiBjaGFu
Z2VkOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobGlzdC0+bV9sZW5ndGgpOwotICAgIHJldHVy
biBhZGQobGlzdC0+bGlzdCgpWzBdKTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotewotICAgIGlmIChvdGhlci5pc1RoaW4oKSkgewot
ICAgICAgICBpZiAoIW90aGVyLnNpbmdsZVN0cnVjdHVyZSgpIHx8ICFjb250YWlucyhvdGhlci5z
aW5nbGVTdHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICBjbGVhcigpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICBzZXQob3RoZXIuc2luZ2xlU3RydWN0
dXJlKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQ29u
dGFpbnNPdXRPZkxpbmUgY29udGFpbnNPdXRPZkxpbmUob3RoZXIpOwotICAgIGdlbmVyaWNGaWx0
ZXIoY29udGFpbnNPdXRPZkxpbmUpOwotfQotCi12b2lkIFN0cnVjdHVyZVNldDo6ZXhjbHVkZShj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotewotICAgIGlmIChvdGhlci5pc1RoaW4oKSkgewot
ICAgICAgICBpZiAob3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpCi0gICAgICAgICAgICByZW1vdmUo
b3RoZXIuc2luZ2xlU3RydWN0dXJlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuY29udGFpbnMoc2luZ2xlU3RydWN0
dXJlKCkpKQotICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICgh
b3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxpc3Qt
Pm1fbGVuZ3RoXTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKLSAgICAgICAgY2xl
YXIoKTsKLX0KLQogI2lmIEVOQUJMRShERkdfSklUKQogCi1uYW1lc3BhY2UgewotCi1jbGFzcyBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMgewotcHVibGljOgotICAgIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWVDb250YWlucyhjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHZh
bHVlKQotICAgICAgICA6IG1fdmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBi
b29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZS5jb250YWlucyhzdHJ1Y3R1cmUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgY29u
c3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBtX3ZhbHVlOwotfTsKLQotY2xhc3MgU3Bl
Y3VsYXRlZFR5cGVDb250YWlucyB7Ci1wdWJsaWM6Ci0gICAgU3BlY3VsYXRlZFR5cGVDb250YWlu
cyhTcGVjdWxhdGVkVHlwZSB0eXBlKQotICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAmIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1
Y3R1cmUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgU3BlY3VsYXRlZFR5cGUgbV90eXBlOwotfTsK
LQotY2xhc3MgQXJyYXlNb2Rlc0NvbnRhaW5zIHsKLXB1YmxpYzoKLSAgICBBcnJheU1vZGVzQ29u
dGFpbnMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQotICAgICAgICA6IG1fYXJyYXlNb2RlcyhhcnJh
eU1vZGVzKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJyYXlNb2RlcyAmIGFycmF5
TW9kZUZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICB9Ci1wcml2YXRlOgotICAgIEFycmF5
TW9kZXMgbV9hcnJheU1vZGVzOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZv
aWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcikKIHsKLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlQ29udGFpbnMgZnVuY3Rvcihv
dGhlcik7Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKFsm
XSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIC0+IGJvb2wgeyByZXR1cm4gb3RoZXIuY29udGFpbnMo
c3RydWN0dXJlKTsgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoU3BlY3VsYXRl
ZFR5cGUgdHlwZSkKIHsKLSAgICBTcGVjdWxhdGVkVHlwZUNvbnRhaW5zIGZ1bmN0b3IodHlwZSk7
Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKAorICAgICAg
ICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVy
biB0eXBlICYgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAgIH0p
OwogfQogCiB2b2lkIFN0cnVjdHVyZVNldDo6ZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVzIGFy
cmF5TW9kZXMpCiB7Ci0gICAgQXJyYXlNb2Rlc0NvbnRhaW5zIGZ1bmN0b3IoYXJyYXlNb2Rlcyk7
Ci0gICAgZ2VuZXJpY0ZpbHRlcihmdW5jdG9yKTsKKyAgICBnZW5lcmljRmlsdGVyKAorICAgICAg
ICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVy
biBhcnJheU1vZGVzICYgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgICAg
ICB9KTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmZpbHRlcihjb25zdCBERkc6OkFic3RyYWN0
VmFsdWUmIG90aGVyKQpAQCAtMjM5LDg5ICs2MywyMyBAQCB2b2lkIFN0cnVjdHVyZVNldDo6Zmls
dGVyKGNvbnN0IERGRzo6QWJzCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotYm9vbCBT
dHJ1Y3R1cmVTZXQ6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QK
LXsKLSAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1cmUoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gb3RoZXIuY29udGFpbnMo
c2luZ2xlU3RydWN0dXJlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAob3RoZXIuaXNUaGluKCkp
IHsKLSAgICAgICAgaWYgKCFvdGhlci5zaW5nbGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3Qo
KTsKLSAgICAgICAgaWYgKGxpc3QtPm1fbGVuZ3RoID49IDIpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChsaXN0LT5saXN0KClbMF0gPT0gb3RoZXIuc2luZ2xlU3RydWN0
dXJlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGlmICghb3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
U3RydWN0dXJlU2V0OjpvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAot
ewotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gb3RoZXIuY29udGFpbnMo
c2luZ2xlU3RydWN0dXJlKCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAob3RoZXIuaXNUaGluKCkp
IHsKLSAgICAgICAgaWYgKCFvdGhlci5zaW5nbGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGNvbnRhaW5zT3V0T2ZMaW5lKG90aGVyLnNpbmds
ZVN0cnVjdHVyZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0
cnVjdHVyZUxpc3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5n
dGg7ICsraSkgewotICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlz
dCgpW2ldKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgU3RydWN0dXJlU2V0OjpvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKHNpemUoKSAhPSBvdGhlci5zaXplKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNTdWJzZXRPZihvdGhlcik7Ci19Ci0KIFNw
ZWN1bGF0ZWRUeXBlIFN0cnVjdHVyZVNldDo6c3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzVGhpbigpKSB7Ci0gICAgICAgIGlmICghc2luZ2xlU3RydWN0dXJl
KCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY05vbmU7Ci0gICAgICAgIHJldHVybiBzcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmUoc2luZ2xlU3RydWN0dXJlKCkpOwotICAgIH0KLSAgICAKICAgICBT
cGVjdWxhdGVkVHlwZSByZXN1bHQgPSBTcGVjTm9uZTsKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0
ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5t
X2xlbmd0aDsgKytpKQotICAgICAgICBtZXJnZVNwZWN1bGF0aW9uKHJlc3VsdCwgc3BlY3VsYXRp
b25Gcm9tU3RydWN0dXJlKGxpc3QtPmxpc3QoKVtpXSkpOworICAgIGZvckVhY2goCisgICAgICAg
IFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIG1lcmdlU3BlY3VsYXRp
b24ocmVzdWx0LCBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSk7CisgICAgICAg
IH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEFycmF5TW9kZXMgU3RydWN0dXJlU2V0Ojph
cnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKSBjb25zdAogewotICAgIGlmIChpc1RoaW4oKSkgewot
ICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoc2luZ2xlU3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKTsKLSAgICB9Ci0gICAgCiAgICAgQXJyYXlNb2RlcyByZXN1bHQgPSAwOwotICAgIE91dE9m
TGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpCi0gICAgICAgIG1lcmdlQXJyYXlNb2RlcyhyZXN1
bHQsIGFzQXJyYXlNb2RlcyhsaXN0LT5saXN0KClbaV0tPmluZGV4aW5nVHlwZSgpKSk7CisgICAg
Zm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAg
ICAgbWVyZ2VBcnJheU1vZGVzKHJlc3VsdCwgYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKTsKKyAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzI5
LDggKzg3LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTZXQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdAogewog
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKICAgICBvdXQucHJpbnQoIlsiKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIGlu
Q29udGV4dCgqYXQoaSksIGNvbnRleHQpKTsKKyAgICBmb3JFYWNoKFsmXSAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIHsgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoKnN0cnVjdHVyZSwgY29udGV4
dCkpOyB9KTsKICAgICBvdXQucHJpbnQoIl0iKTsKIH0KIApAQCAtMzM5LDU5ICs5Niw1IEBAIHZv
aWQgU3RydWN0dXJlU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQKICAgICBkdW1wSW5Db250ZXh0
KG91dCwgbnVsbHB0cik7CiB9CiAKLWJvb2wgU3RydWN0dXJlU2V0OjphZGRPdXRPZkxpbmUoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVy
ZUxpc3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsr
aSkgewotICAgICAgICBpZiAobGlzdC0+bGlzdCgpW2ldID09IHN0cnVjdHVyZSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGxpc3QtPm1fbGVuZ3RoIDwg
bGlzdC0+bV9jYXBhY2l0eSkgewotICAgICAgICBsaXN0LT5saXN0KClbbGlzdC0+bV9sZW5ndGgr
K10gPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBP
dXRPZkxpbmVMaXN0KiBuZXdMaXN0ID0gT3V0T2ZMaW5lTGlzdDo6Y3JlYXRlKGxpc3QtPm1fY2Fw
YWNpdHkgKiAyKTsKLSAgICBuZXdMaXN0LT5tX2xlbmd0aCA9IGxpc3QtPm1fbGVuZ3RoICsgMTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LT5tX2xlbmd0aDsgaS0tOykKLSAgICAgICAgbmV3
TGlzdC0+bGlzdCgpW2ldID0gbGlzdC0+bGlzdCgpW2ldOwotICAgIG5ld0xpc3QtPmxpc3QoKVts
aXN0LT5tX2xlbmd0aF0gPSBzdHJ1Y3R1cmU7Ci0gICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShs
aXN0KTsKLSAgICBzZXQobmV3TGlzdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3Ry
dWN0dXJlU2V0Ojpjb250YWluc091dE9mTGluZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QK
LXsKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChs
aXN0LT5saXN0KClbaV0gPT0gc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNvcHlGcm9t
T3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKCFvdGhl
ci5pc1RoaW4oKSAmJiBvdGhlci5tX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSk7Ci0gICAgT3V0
T2ZMaW5lTGlzdCogb3RoZXJMaXN0ID0gb3RoZXIuc3RydWN0dXJlTGlzdCgpOwotICAgIE91dE9m
TGluZUxpc3QqIG15TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZShvdGhlckxpc3QtPm1fbGVu
Z3RoKTsKLSAgICBteUxpc3QtPm1fbGVuZ3RoID0gb3RoZXJMaXN0LT5tX2xlbmd0aDsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvdGhlckxpc3QtPm1fbGVuZ3RoOyBpLS07KQotICAgICAgICBteUxp
c3QtPmxpc3QoKVtpXSA9IG90aGVyTGlzdC0+bGlzdCgpW2ldOwotICAgIHNldChteUxpc3QpOwot
fQotCi1TdHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3QqIFN0cnVjdHVyZVNldDo6T3V0T2ZMaW5l
TGlzdDo6Y3JlYXRlKHVuc2lnbmVkIGNhcGFjaXR5KQotewotICAgIHJldHVybiBuZXcgKE5vdE51
bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKE91dE9mTGluZUxpc3QpICsgY2FwYWNpdHkgKiBzaXplb2Yo
U3RydWN0dXJlKikpKSBPdXRPZkxpbmVMaXN0KDAsIGNhcGFjaXR5KTsKLX0KLQotdm9pZCBTdHJ1
Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3Q6OmRlc3Ryb3koT3V0T2ZMaW5lTGlzdCogbGlzdCkKLXsK
LSAgICBmYXN0RnJlZShsaXN0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9u
IDE4NTMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJE
dW1wQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9UaW55UHRyU2V0Lmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0zOCw2OCArMzksMzIgQEAgY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsK
IHN0cnVjdCBBYnN0cmFjdFZhbHVlOwogfQogCi1jbGFzcyBTdHJ1Y3R1cmVTZXQgeworY2xhc3Mg
U3RydWN0dXJlU2V0IDogcHVibGljIFRpbnlQdHJTZXQ8U3RydWN0dXJlKj4gewogcHVibGljOgor
ICAgIC8vIEkgcmVhbGx5IHdhbnQgdG8gZG8gdGhpczoKKyAgICAvLyB1c2luZyBUaW55UHRyU2V0
OjpUaW55UHRyU2V0OworICAgIC8vCisgICAgLy8gQnV0IEkgY2FuJ3QgYmVjYXVzZSBXaW5kb3dz
LgorICAgIAogICAgIFN0cnVjdHVyZVNldCgpCi0gICAgICAgIDogbV9wb2ludGVyKDApCiAgICAg
ewotICAgICAgICBzZXRFbXB0eSgpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmVTZXQoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogbV9wb2ludGVyKDApCisgICAgICAgIDogVGlu
eVB0clNldChzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBzZXQoc3RydWN0dXJlKTsKICAgICB9
CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmVTZXQoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikKLSAgICAgICAgOiBtX3BvaW50ZXIoMCkKKyAgICAgICAgOiBUaW55UHRyU2V0KG90
aGVyKQogICAgIHsKLSAgICAgICAgY29weUZyb20ob3RoZXIpOwogICAgIH0KICAgICAKLSAgICBB
TFdBWVNfSU5MSU5FIFN0cnVjdHVyZVNldCYgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZVNldCYg
b3RoZXIpCi0gICAgewotICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgICAgIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOwot
ICAgICAgICBjb3B5RnJvbShvdGhlcik7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0g
ICAgCi0gICAgflN0cnVjdHVyZVNldCgpCi0gICAgewotICAgICAgICBkZWxldGVTdHJ1Y3R1cmVM
aXN0SWZOZWNlc3NhcnkoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcigpOwotICAgIAog
ICAgIFN0cnVjdHVyZSogb25seVN0cnVjdHVyZSgpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAo
aXNUaGluKCkpCi0gICAgICAgICAgICByZXR1cm4gc2luZ2xlU3RydWN0dXJlKCk7Ci0gICAgICAg
IE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgICAgIGlmIChsaXN0
LT5tX2xlbmd0aCAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybiBsaXN0LT5saXN0KClbMF07CisgICAgICAgIHJldHVybiBvbmx5RW50cnkoKTsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGJvb2wgcmVz
dWx0ID0gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVjdHVyZSgpOwotICAgICAgICBpZiAocmVzdWx0
KQotICAgICAgICAgICAgQVNTRVJUKG1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBhZGQoU3RydWN0dXJlKik7
Ci0gICAgYm9vbCByZW1vdmUoU3RydWN0dXJlKik7Ci0gICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1
cmUqKSBjb25zdDsKLSAgICAKLSAgICBib29sIG1lcmdlKGNvbnN0IFN0cnVjdHVyZVNldCYpOwot
ICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwotICAgIHZvaWQgZXhjbHVkZShj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKLSAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lk
IGZpbHRlcihjb25zdCBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUmKTsKICAgICB2b2lkIGZp
bHRlcihTcGVjdWxhdGVkVHlwZSk7CkBAIC0xMDcsMjEyICs3MiwxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBmaWx0ZXIoY29uc3QgREZHOjpBYnN0cmFjdFZhbHVlJik7CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lk
IGdlbmVyaWNGaWx0ZXIoRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIGlmIChpc1Ro
aW4oKSkgewotICAgICAgICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoZnVuY3RvcihzaW5nbGVTdHJ1Y3R1cmUoKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgT3V0T2ZMaW5lTGlzdCog
bGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChmdW5jdG9yKGxpc3QtPmxp
c3QoKVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBsaXN0LT5s
aXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3RoXTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3RoKQotICAgICAgICAgICAgY2xlYXIoKTsKLSAgICB9
Ci0gICAgCi0gICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYpIGNvbnN0Owot
ICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhpcyk7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JikgY29uc3Q7Ci0gICAgCi0g
ICAgc2l6ZV90IHNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVGhpbigpKQotICAg
ICAgICAgICAgcmV0dXJuICEhc2luZ2xlU3RydWN0dXJlKCk7Ci0gICAgICAgIHJldHVybiBzdHJ1
Y3R1cmVMaXN0KCktPm1fbGVuZ3RoOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIGF0KHNp
emVfdCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVGhpbigpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIWkpOwotICAgICAgICAgICAgQVNTRVJUKHNpbmdsZVN0cnVjdHVyZSgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBzaW5nbGVTdHJ1Y3R1cmUoKTsKLSAgICAgICAgfQotICAgICAgICBB
U1NFUlQoaSA8IHN0cnVjdHVyZUxpc3QoKS0+bV9sZW5ndGgpOwotICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlTGlzdCgpLT5saXN0KClbaV07Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogb3Bl
cmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLSAgICAKLSAgICBTdHJ1
Y3R1cmUqIGxhc3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVGhpbigpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoc2luZ2xlU3RydWN0dXJlKCkpOwotICAgICAgICAgICAgcmV0dXJuIHNp
bmdsZVN0cnVjdHVyZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVMaXN0
KCktPmxpc3QoKVtzdHJ1Y3R1cmVMaXN0KCktPm1fbGVuZ3RoIC0gMV07Ci0gICAgfQotICAgIAot
ICAgIGNsYXNzIGl0ZXJhdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGl0ZXJhdG9yKCkKLSAg
ICAgICAgICAgIDogbV9zZXQobnVsbHB0cikKLSAgICAgICAgICAgICwgbV9pbmRleCgwKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0cnVj
dHVyZVNldCogc2V0LCBzaXplX3QgaW5kZXgpCi0gICAgICAgICAgICA6IG1fc2V0KHNldCkKLSAg
ICAgICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LT5h
dChtX2luZGV4KTsgfQotICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1faW5kZXgrKzsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAg
ICAgfQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7IH0KLSAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7IH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3QgU3RydWN0dXJl
U2V0KiBtX3NldDsKLSAgICAgICAgc2l6ZV90IG1faW5kZXg7Ci0gICAgfTsKLSAgICAKLSAgICBp
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9Ci0gICAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSgpKTsgfQot
ICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25z
dDsKLSAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkg
Y29uc3Q7CiAgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKSBjb25zdDsK
ICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIAotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOwotICAgIAot
ICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdGhpbkZsYWcgPSAxOwotICAgIHN0YXRpYyBjb25z
dCB1aW50cHRyX3QgcmVzZXJ2ZWRGbGFnID0gMjsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90
IGZsYWdzID0gdGhpbkZsYWcgfCByZXNlcnZlZEZsYWc7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRw
dHJfdCByZXNlcnZlZFZhbHVlID0gNDsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZh
dWx0U3RhcnRpbmdTaXplID0gNDsKLSAgICAKLSAgICBib29sIGFkZE91dE9mTGluZShTdHJ1Y3R1
cmUqKTsKLSAgICBib29sIGNvbnRhaW5zT3V0T2ZMaW5lKFN0cnVjdHVyZSopIGNvbnN0OwotICAg
IAotICAgIGNsYXNzIENvbnRhaW5zT3V0T2ZMaW5lIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENv
bnRhaW5zT3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQotICAgICAgICAgICAgOiBt
X3NldChzZXQpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBv
cGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9zZXQuY29udGFpbnNPdXRPZkxpbmUoc3RydWN0dXJlKTsKLSAgICAgICAgfQotICAg
IHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgbV9zZXQ7Ci0gICAgfTsKLQot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5RnJvbShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVy
KQotICAgIHsKLSAgICAgICAgaWYgKG90aGVyLmlzVGhpbigpIHx8IG90aGVyLm1fcG9pbnRlciA9
PSByZXNlcnZlZFZhbHVlKSB7Ci0gICAgICAgICAgICBib29sIHZhbHVlID0gZ2V0UmVzZXJ2ZWRG
bGFnKCk7Ci0gICAgICAgICAgICBtX3BvaW50ZXIgPSBvdGhlci5tX3BvaW50ZXI7Ci0gICAgICAg
ICAgICBzZXRSZXNlcnZlZEZsYWcodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGNvcHlGcm9tT3V0T2ZMaW5lKG90aGVyKTsKLSAgICB9Ci0gICAgdm9pZCBj
b3B5RnJvbU91dE9mTGluZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKTsKLSAgICAKLSAgICBj
bGFzcyBPdXRPZkxpbmVMaXN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBPdXRPZkxp
bmVMaXN0KiBjcmVhdGUodW5zaWduZWQgY2FwYWNpdHkpOwotICAgICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KE91dE9mTGluZUxpc3QqKTsKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSoqIGxp
c3QoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RydWN0dXJlKio+KHRoaXMgKyAxKTsgfQotICAg
ICAgICAKLSAgICAgICAgT3V0T2ZMaW5lTGlzdCh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGNh
cGFjaXR5KQotICAgICAgICAgICAgOiBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICAgICAsIG1f
Y2FwYWNpdHkoY2FwYWNpdHkpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2ln
bmVkIG1fbGVuZ3RoOwotICAgICAgICB1bnNpZ25lZCBtX2NhcGFjaXR5OwotICAgIH07Ci0gICAg
Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgp
Ci0gICAgewotICAgICAgICBpZiAoIWlzVGhpbigpICYmIG1fcG9pbnRlciAhPSByZXNlcnZlZFZh
bHVlKQotICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShzdHJ1Y3R1cmVMaXN0KCkp
OwotICAgIH0KLSAgICAKLSAgICBib29sIGlzVGhpbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnRl
ciAmIHRoaW5GbGFnOyB9Ci0gICAgCi0gICAgdm9pZCogcG9pbnRlcigpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihtX3BvaW50ZXIgJiB+ZmxhZ3MpOwot
ICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHNpbmdsZVN0cnVjdHVyZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoaXNUaGluKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U3RydWN0dXJlKj4ocG9pbnRlcigpKTsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZMaW5lTGlzdCog
c3RydWN0dXJlTGlzdCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoIWlzVGhpbigpKTsK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE91dE9mTGluZUxpc3QqPihwb2ludGVyKCkpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0g
ICAgICAgIHNldChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpLCB0cnVlKTsKLSAg
ICB9Ci0gICAgdm9pZCBzZXQoT3V0T2ZMaW5lTGlzdCogc3RydWN0dXJlcykKLSAgICB7Ci0gICAg
ICAgIHNldChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmVzKSwgZmFsc2UpOwotICAg
IH0KLSAgICB2b2lkIHNldEVtcHR5KCkKLSAgICB7Ci0gICAgICAgIHNldCgwLCB0cnVlKTsKLSAg
ICB9Ci0gICAgdm9pZCBzZXQodWludHB0cl90IHBvaW50ZXIsIGJvb2wgc2luZ2xlU3RydWN0dXJl
KQotICAgIHsKLSAgICAgICAgbV9wb2ludGVyID0gcG9pbnRlciB8IChzaW5nbGVTdHJ1Y3R1cmUg
PyB0aGluRmxhZyA6IDApIHwgKG1fcG9pbnRlciAmIHJlc2VydmVkRmxhZyk7Ci0gICAgfQotICAg
IGJvb2wgZ2V0UmVzZXJ2ZWRGbGFnKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludGVyICYgcmVzZXJ2
ZWRGbGFnOyB9Ci0gICAgdm9pZCBzZXRSZXNlcnZlZEZsYWcoYm9vbCB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1fcG9pbnRlciB8PSByZXNlcnZlZEZsYWc7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcG9pbnRlciAmPSB+cmVzZXJ2ZWRGbGFnOwot
ICAgIH0KLQotICAgIHVpbnRwdHJfdCBtX3BvaW50ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTg1MzAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjQsMTQgKzY0LDE0IEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlcigp
CiAgICAgc2V0Q2xvYmJlcmVkKHRydWUpOwogICAgICAgICAKICAgICBpZiAobV9zZXQuaXNUaGlu
KCkpIHsKLSAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgaWYg
KCFtX3NldC5zaW5nbGVFbnRyeSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
IW1fc2V0LnNpbmdsZVN0cnVjdHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICBpZiAo
IW1fc2V0LnNpbmdsZUVudHJ5KCktPmRmZ1Nob3VsZFdhdGNoKCkpCiAgICAgICAgICAgICBtYWtl
VG9wV2hlblRoaW4oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAgICAgCi0gICAgU3Ry
dWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0KiBsaXN0ID0gbV9zZXQuc3RydWN0dXJlTGlzdCgpOwor
ICAgIAorICAgIFN0cnVjdHVyZVNldDo6T3V0T2ZMaW5lTGlzdCogbGlzdCA9IG1fc2V0Lmxpc3Qo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LT5tX2xlbmd0aDsgaS0tOykgewogICAgICAg
ICBpZiAoIWxpc3QtPmxpc3QoKVtpXS0+ZGZnU2hvdWxkV2F0Y2goKSkgewogICAgICAgICAgICAg
bWFrZVRvcCgpOwpAQCAtMjY4LDI1ICsyNjgsNiBAQCB2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OmZpbHRlcihjb25zCiAgICAgZmlsdGVyKG90aGVyLm1fc2V0KTsKIH0KIAotbmFtZXNwYWNl
IHsKLQotY2xhc3MgQ29uZm9ybXNUb1R5cGUgewotcHVibGljOgotICAgIENvbmZvcm1zVG9UeXBl
KFNwZWN1bGF0ZWRUeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAg
ewotICAgICAgICByZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkg
JiBtX3R5cGUpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgU3BlY3VsYXRlZFR5cGUgbV90eXBlOwot
fTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6ZmlsdGVyU2xvdyhTcGVjdWxhdGVkVHlwZSB0eXBlKQogewogICAgIFNBTVBMRSgiU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSBmaWx0ZXIgdHlwZSBzbG93Iik7CkBAIC0yOTgsOCArMjc5LDEw
IEBAIHZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyU2xvdygKICAgICAKICAgICBB
U1NFUlQoIWlzVG9wKCkpOwogICAgIAotICAgIENvbmZvcm1zVG9UeXBlIGNvbmZvcm1zVG9UeXBl
KHR5cGUpOwotICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIoY29uZm9ybXNUb1R5cGUpOworICAgIG1f
c2V0LmdlbmVyaWNGaWx0ZXIoCisgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsK
KyAgICAgICAgICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJl
KSAmIHR5cGUpOworICAgICAgICB9KTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojpjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCShy
ZXZpc2lvbiAxODUzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVy
ZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw3ICs0
MCw3IEBAIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgewogcHVibGljOgogICAgIFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUoKSB7IH0KICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKFN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IG1fc2V0KHN0cnVjdHVyZSkKKyAgICAgICAgOiBt
X3NldChTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkKICAgICB7CiAgICAgICAgIHNldENsb2JiZXJl
ZChmYWxzZSk7CiAgICAgfQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQUxX
QVlTX0lOTElORSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvcGVyYXRvcj0oU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBtX3NldCA9IHN0cnVjdHVyZTsKKyAgICAgICAgbV9z
ZXQgPSBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKTsKICAgICAgICAgc2V0Q2xvYmJlcmVkKGZhbHNl
KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTgyLDcgKzgyLDcgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgbWFrZVRvcCgpCiAgICAgewotICAgICAgICBtX3NldC5kZWxldGVT
dHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgbV9zZXQuZGVsZXRlTGlzdElmTmVj
ZXNzYXJ5KCk7CiAgICAgICAgIG1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOwogICAgIH0KICAg
ICAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxODUzMDkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE1LTA2LTA3ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIHRpbnkgc2V0IG1hZ2ljIGluIFN0cnVjdHVy
ZVNldCBzaG91bGQgYmUgYXZhaWxhYmxlIGluIFdURgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1NzIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2Vv
ZmZyZXkgR2FyZW4uCisgICAgICAgIAorICAgICAgICBBcyB0aGUgbWFuYWdlbWVudCBvZiBzdHJ1
Y3R1cmUgc2V0cyBldm9sdmVkIGluIEpTQywgdGhlIFN0cnVjdHVyZVNldCBkYXRhIHN0cnVjdHVy
ZSBncmV3CisgICAgICAgIGluY3JlYXNpbmdseSBzbWFydC4gSXQncyBnb3Qgc29tZSBzbWFydCBz
dHVmZiBmb3IgbWFuYWdpbmcgc21hbGwgc2V0cyBvZiBwb2ludGVycy4gSQorICAgICAgICB3YW50
ZWQgdG8gdGFrZSB0aGUgZ2VuZXJpYyBsb2dpYyBvdXQgb2YgSlNDIGFuZCBwdXQgaXQgaW50byBh
IHJldXNhYmxlIHRlbXBsYXRpemVkIGNsYXNzCisgICAgICAgIGluIFdURi4KKyAgICAgICAgCisg
ICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2o6CisgICAgICAgICogV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIHd0Zi9UaW55UHRyU2V0Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpU
aW55UHRyU2V0KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdURjo6VGlueVB0clNldDo6flRpbnlQdHJTZXQpOgorICAgICAgICAoV1RGOjpUaW55UHRy
U2V0OjpjbGVhcik6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6Om9ubHlFbnRyeSk6CisgICAg
ICAgIChXVEY6OlRpbnlQdHJTZXQ6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0
OjphZGQpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpyZW1vdmUpOgorICAgICAgICAoV1RG
OjpUaW55UHRyU2V0Ojpjb250YWlucyk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6Om1lcmdl
KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6Zm9yRWFjaCk6CisgICAgICAgIChXVEY6OlRp
bnlQdHJTZXQ6OmdlbmVyaWNGaWx0ZXIpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpmaWx0
ZXIpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpleGNsdWRlKToKKyAgICAgICAgKFdURjo6
VGlueVB0clNldDo6aXNTdWJzZXRPZik6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmlzU3Vw
ZXJzZXRPZik6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6Om92ZXJsYXBzKToKKyAgICAgICAg
KFdURjo6VGlueVB0clNldDo6c2l6ZSk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OmF0KToK
KyAgICAgICAgKFdURjo6VGlueVB0clNldDo6b3BlcmF0b3JbXSk6CisgICAgICAgIChXVEY6OlRp
bnlQdHJTZXQ6Omxhc3QpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjppdGVyYXRvcjo6aXRl
cmF0b3IpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKFdURjo6VGlueVB0clNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAg
ICAoV1RGOjpUaW55UHRyU2V0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6
OlRpbnlQdHJTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6VGlueVB0
clNldDo6YmVnaW4pOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjplbmQpOgorICAgICAgICAo
V1RGOjpUaW55UHRyU2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6
YWRkT3V0T2ZMaW5lKToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6Y29udGFpbnNPdXRPZkxp
bmUpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0Ojpjb3B5RnJvbSk6CisgICAgICAgIChXVEY6
OlRpbnlQdHJTZXQ6OmNvcHlGcm9tT3V0T2ZMaW5lKToKKyAgICAgICAgKFdURjo6VGlueVB0clNl
dDo6T3V0T2ZMaW5lTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6T3V0
T2ZMaW5lTGlzdDo6ZGVzdHJveSk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6Ok91dE9mTGlu
ZUxpc3Q6Omxpc3QpOgorICAgICAgICAoV1RGOjpUaW55UHRyU2V0OjpPdXRPZkxpbmVMaXN0OjpP
dXRPZkxpbmVMaXN0KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6ZGVsZXRlTGlzdElmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6aXNUaGluKToKKyAgICAgICAgKFdU
Rjo6VGlueVB0clNldDo6cG9pbnRlcik6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OnNpbmds
ZUVudHJ5KToKKyAgICAgICAgKFdURjo6VGlueVB0clNldDo6bGlzdCk6CisgICAgICAgIChXVEY6
OlRpbnlQdHJTZXQ6OnNldCk6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OnNldEVtcHR5KToK
KyAgICAgICAgKFdURjo6VGlueVB0clNldDo6Z2V0UmVzZXJ2ZWRGbGFnKToKKyAgICAgICAgKFdU
Rjo6VGlueVB0clNldDo6c2V0UmVzZXJ2ZWRGbGFnKToKKwogMjAxNS0wNi0wNSAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW2lPU10gTGltaXQgdGhlIG51
bWJlciBvZiB2bm9kZXMgdXNlZCBieSB0aGUgV2ViQ29udGVudCBwcm9jZXNzZXMKSW5kZXg6IFNv
dXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9XVEYudmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTg1MzAzKQorKysgU291cmNlL1dU
Ri9XVEYudmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzAwLDYgKzMwMCw3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcdGhyZWFkc2FmZVJlZkNvdW50ZWQu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0Zlx0aHJlYWRzcGVjaWZpYy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXHRocmVhZHNcQmluYXJ5U2VtYXBob3Jl
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcVGlueVB0clNldC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXHVuaWNvZGVcQ2hhcmFjdGVyTmFtZXMuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0Zlx1bmljb2RlXENvbGxhdG9yLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcdW5pY29kZVxVVEY4LmgiIC8+CkluZGV4
OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NTMw
MykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDYgKzQwLDcgQEAKIAkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8qIEZh
c3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVG
IC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0
cmVhbS5jcHAgKi87IH07CiAJCTBGRERCRkE4MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmlu
dFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi87IH07CisJ
CTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUg
LyogVGlueVB0clNldC5oICovOyB9OwogCQkxNDAyMkY0MTE4RjVDM0ZDMDA3RkYwRUIgLyogbGli
Ym1hbGxvYy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLzsgfTsKIAkJMTQz
RjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJB
TVNpemUuY3BwICovOyB9OwogCQkxNDNGNjEyMDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUUx
NTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
ICgpOyB9OyB9OwpAQCAtMzIwLDYgKzMyMSw3IEBACiAJCTBGRERCRkE1MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDM0VFNDE3MUI4MzQ3MDBGREFDOEQgLyogQnl0ZVNw
aW5Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVTcGluTG9jay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55UHRyU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0MDIyRjQwMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9j
LmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBhcmNo
aXZlLmFyOyBwYXRoID0gbGliYm1hbGxvYy5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwogCQkxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSQU1TaXplLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUkFNU2l6ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODYyLDYgKzg2NCw3IEBACiAJCQkJQThBNDczMzYxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZGluZ1B0aHJlYWRzLmNwcCAqLywKIAkJCQlBOEE0NzMzRTE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCAqLywKIAkJCQlBOEE0NzMzRjE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMuaCAqLywKKwkJCQkwRkVENjdCNTFCMjJENEQ4
MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovLAogCQkJCTE0OUVGMTYyMTZCQkZFMEQwMDBBNDMz
MSAvKiBUcmlTdGF0ZS5oICovLAogCQkJCTgzRkJBOTMxMTlERjQ1OTcwMEYzMEFEQiAvKiBUeXBl
Q2FzdHMuaCAqLywKIAkJCQlBOEE0NzM1QzE1MUE4MjVCMDA0MTIzRkYgLyogVW5pb25GaW5kLmgg
Ki8sCkBAIC0xMjAxLDYgKzEyMDQsNyBAQAogCQkJCUE4QTQ3NDdEMTUxQTgyNUIwMDQxMjNGRiAv
KiBWYWx1ZUNoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3RTE1MUE4MjVCMDA0MTIz
RkYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3RjE1MUE4MjVCMDA0MTIz
RkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVENjdCNjFCMjJENEQ4
MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0ODAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc0Q0ZDOEUxNkE0
RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QTBBRDNBMUE5
NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDE4NTMwMykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIHNldChXVEZfSEVBREVSUwog
ICAgIFRocmVhZFNwZWNpZmljLmgKICAgICBUaHJlYWRpbmcuaAogICAgIFRocmVhZGluZ1ByaW1p
dGl2ZXMuaAorICAgIFRpbnlQdHJTZXQuaAogICAgIFZNVGFncy5oCiAgICAgVmFsdWVDaGVjay5o
CiAgICAgVmVjdG9yLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RpbnlQdHJTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW55UHRyU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9UaW55UHRyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBU
aW55UHRyU2V0X2gKKyNkZWZpbmUgVGlueVB0clNldF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKK2NsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU7Cit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBGSVhNRTogVGhpcyBjdXJy
ZW50bHkgb25seSB3b3JrcyBmb3IgdHlwZXMgdGhhdCBhcmUgcG9pbnRlci1saWtlOiB0aGV5IHNo
b3VsZCBoYXZlIHRoZSBzaXplCisvLyBvZiBhIHBvaW50ZXIgYW5kIGxpa2UgYSBwb2ludGVyIHRo
ZXkgc2hvdWxkIG5vdCBoYXZlIGFzc2lnbm1lbnQgb3BlcmF0b3JzLCBjb3B5IGNvbnN0cnVjdG9y
cywKKy8vIG5vbi10cml2aWFsIGRlZmF1bHQgY29uc3RydWN0b3JzLCBhbmQgbm9uLXRyaXZpYWwg
ZGVzdHJ1Y3RvcnMuIEl0IG1heSBiZSBwb3NzaWJsZSB0byBsaWZ0IGFsbAorLy8gb2YgdGhlc2Ug
cmVzdHJpY3Rpb25zLiBJZiB3ZSBzdWNjZWVkZWQgdGhlbiB0aGlzIHNob3VsZCBiZSByZW5hbWVk
IHRvIGp1c3QgVGlueVNldC4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDU3NDEKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFRpbnlQdHJTZXQgewor
cHVibGljOgorICAgIFRpbnlQdHJTZXQoKQorICAgICAgICA6IG1fcG9pbnRlcigwKQorICAgIHsK
KyAgICAgICAgc2V0RW1wdHkoKTsKKyAgICB9CisgICAgCisgICAgVGlueVB0clNldChUIGVsZW1l
bnQpCisgICAgICAgIDogbV9wb2ludGVyKDApCisgICAgeworICAgICAgICBzZXQoZWxlbWVudCk7
CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgVGlueVB0clNldChjb25zdCBUaW55UHRy
U2V0JiBvdGhlcikKKyAgICAgICAgOiBtX3BvaW50ZXIoMCkKKyAgICB7CisgICAgICAgIGNvcHlG
cm9tKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSBUaW55UHRyU2V0JiBv
cGVyYXRvcj0oY29uc3QgVGlueVB0clNldCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodGhp
cyA9PSAmb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIGRlbGV0ZUxp
c3RJZk5lY2Vzc2FyeSgpOworICAgICAgICBjb3B5RnJvbShvdGhlcik7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisgICAgCisgICAgflRpbnlQdHJTZXQoKQorICAgIHsKKyAgICAgICAg
ZGVsZXRlTGlzdElmTmVjZXNzYXJ5KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQor
ICAgIHsKKyAgICAgICAgZGVsZXRlTGlzdElmTmVjZXNzYXJ5KCk7CisgICAgICAgIHNldEVtcHR5
KCk7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgdGhlIG9ubHkgZW50cnkgaWYgdGhlIGFy
cmF5IGhhcyBleGFjdGx5IG9uZSBlbnRyeS4KKyAgICBUIG9ubHlFbnRyeSgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXNUaGluKCkpCisgICAgICAgICAgICByZXR1cm4gc2luZ2xlRW50cnko
KTsKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHRoaXMtPmxpc3QoKTsKKyAgICAgICAg
aWYgKGxpc3QtPm1fbGVuZ3RoICE9IDEpCisgICAgICAgICAgICByZXR1cm4gVCgpOworICAgICAg
ICByZXR1cm4gbGlzdC0+bGlzdCgpWzBdOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdAorICAgIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBpc1RoaW4oKSAmJiAhc2luZ2xl
RW50cnkoKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIEFTU0VSVChtX3Bvb2lu
dGVyICE9IHJlc2VydmVkVmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBib29sIGFkZChUIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlKTsK
KyAgICAgICAgaWYgKGlzVGhpbigpKSB7CisgICAgICAgICAgICBpZiAoc2luZ2xlRW50cnkoKSA9
PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
IXNpbmdsZUVudHJ5KCkpIHsKKyAgICAgICAgICAgICAgICBzZXQodmFsdWUpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gT3V0T2ZMaW5lTGlzdDo6Y3JlYXRlKGRlZmF1bHRT
dGFydGluZ1NpemUpOworICAgICAgICAgICAgbGlzdC0+bV9sZW5ndGggPSAyOworICAgICAgICAg
ICAgbGlzdC0+bGlzdCgpWzBdID0gc2luZ2xlRW50cnkoKTsKKyAgICAgICAgICAgIGxpc3QtPmxp
c3QoKVsxXSA9IHZhbHVlOworICAgICAgICAgICAgc2V0KGxpc3QpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBhZGRPdXRPZkxp
bmUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIHJlbW92ZShUIHZhbHVlKQorICAgIHsK
KyAgICAgICAgaWYgKGlzVGhpbigpKSB7CisgICAgICAgICAgICBpZiAoc2luZ2xlRW50cnkoKSA9
PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHNldEVtcHR5KCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSB0aGlzLT5s
aXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBpZiAobGlzdC0+bGlzdCgpW2ldICE9IHZhbHVlKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGlzdC0+bGlzdCgpW2ldID0gbGlzdC0+
bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOworICAgICAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0
aCkgeworICAgICAgICAgICAgICAgIE91dE9mTGluZUxpc3Q6OmRlc3Ryb3kobGlzdCk7CisgICAg
ICAgICAgICAgICAgc2V0RW1wdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBjb250YWlucyhUIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVGhp
bigpKQorICAgICAgICAgICAgcmV0dXJuIHNpbmdsZUVudHJ5KCkgPT0gdmFsdWU7CisgICAgICAg
IHJldHVybiBjb250YWluc091dE9mTGluZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
bWVyZ2UoY29uc3QgVGlueVB0clNldCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAob3RoZXIu
aXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmIChvdGhlci5zaW5nbGVFbnRyeSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBhZGQob3RoZXIuc2luZ2xlRW50cnkoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxpc3Qq
IGxpc3QgPSBvdGhlci5saXN0KCk7CisgICAgICAgIGlmIChsaXN0LT5tX2xlbmd0aCA+PSAyKSB7
CisgICAgICAgICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgICAgICBPdXRPZkxpbmVM
aXN0KiBteU5ld0xpc3QgPSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUoCisgICAgICAgICAgICAgICAg
ICAgIGxpc3QtPm1fbGVuZ3RoICsgISFzaW5nbGVFbnRyeSgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc2luZ2xlRW50cnkoKSkgeworICAgICAgICAgICAgICAgICAgICBteU5ld0xpc3QtPm1fbGVu
Z3RoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgbXlOZXdMaXN0LT5saXN0KClbMF0gPSBzaW5n
bGVFbnRyeSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXQobXlOZXdM
aXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kp
CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBhZGRPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ld
KTsKKyAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQobGlzdC0+bV9sZW5ndGgpOworICAgICAgICByZXR1cm4gYWRkKGxpc3QtPmxp
c3QoKVswXSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmICghc2luZ2xlRW50cnkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBmdW5jdG9yKHNpbmdsZUVudHJ5KCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBPdXRP
ZkxpbmVMaXN0KiBsaXN0ID0gdGhpcy0+bGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGZ1bmN0b3IobGlzdC0+
bGlzdCgpW2ldKTsKKyAgICB9CisgICAgICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CisgICAgdm9pZCBnZW5lcmljRmlsdGVyKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlmICghc2luZ2xlRW50cnko
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZnVuY3RvcihzaW5n
bGVFbnRyeSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjbGVhcigp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBPdXRP
ZkxpbmVMaXN0KiBsaXN0ID0gdGhpcy0+bGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0b3Io
bGlzdC0+bGlzdCgpW2ldKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGxpc3QtPmxpc3QoKVtpLS1dID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOworICAg
ICAgICB9CisgICAgICAgIGlmICghbGlzdC0+bV9sZW5ndGgpCisgICAgICAgICAgICBjbGVhcigp
OworICAgIH0KKyAgICAgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgVGlueVB0clNldCYgb3Ro
ZXIpCisgICAgeworICAgICAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsKKyAgICAgICAgICAgIGlm
ICghb3RoZXIuc2luZ2xlRW50cnkoKSB8fCAhY29udGFpbnMob3RoZXIuc2luZ2xlRW50cnkoKSkp
CisgICAgICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICAgICAgc2V0KG90aGVyLnNpbmdsZUVudHJ5KCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBnZW5lcmljRmlsdGVyKFsmXSAoVCB2YWx1ZSkgeyByZXR1cm4gb3RoZXIuY29u
dGFpbnNPdXRPZkxpbmUodmFsdWUpOyB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBleGNsdWRl
KGNvbnN0IFRpbnlQdHJTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzVGhp
bigpKSB7CisgICAgICAgICAgICBpZiAob3RoZXIuc2luZ2xlRW50cnkoKSkKKyAgICAgICAgICAg
ICAgICByZW1vdmUob3RoZXIuc2luZ2xlRW50cnkoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGdlbmVyaWNGaWx0ZXIoWyZdIChUIHZhbHVlKSB7
IHJldHVybiAhb3RoZXIuY29udGFpbnNPdXRPZkxpbmUodmFsdWUpOyB9KTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFRpbnlQdHJTZXQmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGlzVGhpbigpKSB7CisgICAgICAgICAgICBpZiAoIXNpbmdsZUVudHJ5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gb3Ro
ZXIuY29udGFpbnMoc2luZ2xlRW50cnkoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChvdGhlci5pc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFvdGhlci5zaW5nbGVFbnRy
eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIE91dE9mTGlu
ZUxpc3QqIGxpc3QgPSB0aGlzLT5saXN0KCk7CisgICAgICAgICAgICBpZiAobGlzdC0+bV9sZW5n
dGggPj0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
bGlzdC0+bGlzdCgpWzBdID09IG90aGVyLnNpbmdsZUVudHJ5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSB0aGlzLT5saXN0KCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoIW90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKGxpc3QtPmxpc3QoKVtpXSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBUaW55UHRyU2V0JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNldE9mKCp0aGlz
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBUaW55UHRyU2V0JiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RoaW4oKSkgeworICAgICAgICAgICAgaWYg
KCFzaW5nbGVFbnRyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBvdGhlci5jb250YWlucyhzaW5nbGVFbnRyeSgpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKG90aGVyLmlzVGhpbigpKSB7CisgICAgICAgICAgICBpZiAoIW90
aGVyLnNpbmdsZUVudHJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIGNvbnRhaW5zT3V0T2ZMaW5lKG90aGVyLnNpbmdsZUVudHJ5KCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gdGhpcy0+bGlz
dCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKGxpc3QtPmxpc3Qo
KVtpXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXNUaGluKCkpCisgICAgICAgICAgICByZXR1cm4gISFzaW5nbGVFbnRy
eSgpOworICAgICAgICByZXR1cm4gbGlzdCgpLT5tX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAg
VCBhdChzaXplX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RoaW4oKSkgeworICAg
ICAgICAgICAgQVNTRVJUKCFpKTsKKyAgICAgICAgICAgIEFTU0VSVChzaW5nbGVFbnRyeSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBzaW5nbGVFbnRyeSgpOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVChpIDwgbGlzdCgpLT5tX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBsaXN0KCktPmxpc3Qo
KVtpXTsKKyAgICB9CisgICAgCisgICAgVCBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJl
dHVybiBhdChpKTsgfQorICAgIAorICAgIFQgbGFzdCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChzaW5nbGVFbnRyeSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBzaW5nbGVFbnRyeSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBs
aXN0KCktPmxpc3QoKVtsaXN0KCktPm1fbGVuZ3RoIC0gMV07CisgICAgfQorICAgIAorICAgIGNs
YXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAg
ICAgIDogbV9zZXQobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFRpbnlQdHJTZXQq
IHNldCwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgVCBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3NldC0+YXQoaW5kZXgpOyB9CisgICAg
ICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRl
eCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXgg
PT0gb3RoZXIubV9pbmRleDsgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBUaW55UHRyU2V0KiBtX3NldDsKKyAgICAgICAg
c2l6ZV90IG1faW5kZXg7CisgICAgfTsKKyAgICAKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSgpKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUaW55UHRyU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChz
aXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gaXNTdWJzZXRPZihvdGhlcik7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CisKKyAgICBzdGF0
aWMgY29uc3QgdWludHB0cl90IHRoaW5GbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0
cl90IHJlc2VydmVkRmxhZyA9IDI7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBmbGFncyA9
IHRoaW5GbGFnIHwgcmVzZXJ2ZWRGbGFnOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVz
ZXJ2ZWRWYWx1ZSA9IDQ7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdFN0YXJ0
aW5nU2l6ZSA9IDQ7CisgICAgCisgICAgYm9vbCBhZGRPdXRPZkxpbmUoVCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSB0aGlzLT5saXN0KCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICBpZiAobGlzdC0+bGlzdCgpW2ldID09IHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGxpc3QtPm1fbGVuZ3RoIDwg
bGlzdC0+bV9jYXBhY2l0eSkgeworICAgICAgICAgICAgbGlzdC0+bGlzdCgpW2xpc3QtPm1fbGVu
Z3RoKytdID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbmV3TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNy
ZWF0ZShsaXN0LT5tX2NhcGFjaXR5ICogMik7CisgICAgICAgIG5ld0xpc3QtPm1fbGVuZ3RoID0g
bGlzdC0+bV9sZW5ndGggKyAxOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LT5tX2xl
bmd0aDsgaS0tOykKKyAgICAgICAgICAgIG5ld0xpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3Qo
KVtpXTsKKyAgICAgICAgbmV3TGlzdC0+bGlzdCgpW2xpc3QtPm1fbGVuZ3RoXSA9IHZhbHVlOwor
ICAgICAgICBPdXRPZkxpbmVMaXN0OjpkZXN0cm95KGxpc3QpOworICAgICAgICBzZXQobmV3TGlz
dCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5z
T3V0T2ZMaW5lKFQgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBPdXRPZkxpbmVMaXN0KiBs
aXN0ID0gdGhpcy0+bGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlz
dC0+bV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGxpc3QtPmxpc3QoKVtpXSA9PSB2
YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5RnJv
bShjb25zdCBUaW55UHRyU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChvdGhlci5pc1Ro
aW4oKSB8fCBvdGhlci5tX3BvaW50ZXIgPT0gcmVzZXJ2ZWRWYWx1ZSkgeworICAgICAgICAgICAg
Ym9vbCB2YWx1ZSA9IGdldFJlc2VydmVkRmxhZygpOworICAgICAgICAgICAgbV9wb2ludGVyID0g
b3RoZXIubV9wb2ludGVyOworICAgICAgICAgICAgc2V0UmVzZXJ2ZWRGbGFnKHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb3B5RnJvbU91dE9mTGluZShv
dGhlcik7CisgICAgfQorICAgIAorICAgIE5FVkVSX0lOTElORSB2b2lkIGNvcHlGcm9tT3V0T2ZM
aW5lKGNvbnN0IFRpbnlQdHJTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFvdGhl
ci5pc1RoaW4oKSAmJiBvdGhlci5tX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSk7CisgICAgICAg
IE91dE9mTGluZUxpc3QqIG90aGVyTGlzdCA9IG90aGVyLmxpc3QoKTsKKyAgICAgICAgT3V0T2ZM
aW5lTGlzdCogbXlMaXN0ID0gT3V0T2ZMaW5lTGlzdDo6Y3JlYXRlKG90aGVyTGlzdC0+bV9sZW5n
dGgpOworICAgICAgICBteUxpc3QtPm1fbGVuZ3RoID0gb3RoZXJMaXN0LT5tX2xlbmd0aDsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gb3RoZXJMaXN0LT5tX2xlbmd0aDsgaS0tOykKKyAgICAg
ICAgICAgIG15TGlzdC0+bGlzdCgpW2ldID0gb3RoZXJMaXN0LT5saXN0KClbaV07CisgICAgICAg
IHNldChteUxpc3QpOworICAgIH0KKyAgICAKKyAgICBjbGFzcyBPdXRPZkxpbmVMaXN0IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBPdXRPZkxpbmVMaXN0KiBjcmVhdGUodW5zaWduZWQg
Y2FwYWNpdHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKE5vdE51bGwsIGZh
c3RNYWxsb2Moc2l6ZW9mKE91dE9mTGluZUxpc3QpICsgY2FwYWNpdHkgKiBzaXplb2YoVCkpKSBP
dXRPZkxpbmVMaXN0KDAsIGNhcGFjaXR5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShPdXRPZkxpbmVMaXN0KiBsaXN0KQorICAgICAgICB7CisgICAg
ICAgICAgICBmYXN0RnJlZShsaXN0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVCog
bGlzdCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4odGhpcyArIDEpOyB9CisgICAgICAgIAor
ICAgICAgICBPdXRPZkxpbmVMaXN0KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgY2FwYWNpdHkp
CisgICAgICAgICAgICA6IG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAgICAgICAgICwgbV9jYXBhY2l0
eShjYXBhY2l0eSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgbV9s
ZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAgfTsKKyAgICAKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgZGVsZXRlTGlzdElmTmVjZXNzYXJ5KCkKKyAgICB7CisgICAgICAg
IGlmICghaXNUaGluKCkgJiYgbV9wb2ludGVyICE9IHJlc2VydmVkVmFsdWUpCisgICAgICAgICAg
ICBPdXRPZkxpbmVMaXN0OjpkZXN0cm95KGxpc3QoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNUaGluKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludGVyICYgdGhpbkZsYWc7IH0KKyAgICAKKyAg
ICB2b2lkKiBwb2ludGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KG1fcG9pbnRlciAmIH5mbGFncyk7CisgICAgfQorICAgIAorICAgIFQgc2luZ2xl
RW50cnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVGhpbigpKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHBvaW50ZXIoKSk7CisgICAgfQorICAgIAorICAgIE91dE9m
TGluZUxpc3QqIGxpc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RoaW4oKSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxPdXRPZkxpbmVMaXN0Kj4ocG9pbnRlcigpKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldChi
aXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSksIHRydWUpOworICAgIH0KKyAgICB2b2lkIHNl
dChPdXRPZkxpbmVMaXN0KiBsaXN0KQorICAgIHsKKyAgICAgICAgc2V0KGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGxpc3QpLCBmYWxzZSk7CisgICAgfQorICAgIHZvaWQgc2V0RW1wdHkoKQorICAg
IHsKKyAgICAgICAgc2V0KDAsIHRydWUpOworICAgIH0KKyAgICB2b2lkIHNldCh1aW50cHRyX3Qg
cG9pbnRlciwgYm9vbCBzaW5nbGVFbnRyeSkKKyAgICB7CisgICAgICAgIG1fcG9pbnRlciA9IHBv
aW50ZXIgfCAoc2luZ2xlRW50cnkgPyB0aGluRmxhZyA6IDApIHwgKG1fcG9pbnRlciAmIHJlc2Vy
dmVkRmxhZyk7CisgICAgfQorICAgIGJvb2wgZ2V0UmVzZXJ2ZWRGbGFnKCkgY29uc3QgeyByZXR1
cm4gbV9wb2ludGVyICYgcmVzZXJ2ZWRGbGFnOyB9CisgICAgdm9pZCBzZXRSZXNlcnZlZEZsYWco
Ym9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIG1fcG9p
bnRlciB8PSByZXNlcnZlZEZsYWc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcG9pbnRl
ciAmPSB+cmVzZXJ2ZWRGbGFnOworICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QgbV9wb2ludGVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VGlueVB0clNldDsKKwor
I2VuZGlmIC8vIFRpbnlQdHJTZXRfaAorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>