<?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>72311</bug_id>
          
          <creation_ts>2011-11-14 14:26:40 -0800</creation_ts>
          <short_desc>Inline caches that refer to otherwise dead objects should be cleared</short_desc>
          <delta_ts>2011-11-21 01:04:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>72312</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>loki</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wingo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>502311</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-14 14:26:40 -0800</bug_when>
    <thetext>Currently if we perform inline cache optimization, this creates strong references from the CodeBlock to whatever objects the inline cache tests (structures, functions, prototypes, etc).  This means that even if those objects are otherwise dead but the CodeBlock is alive, the objects are kept alive, possibly much longer than they otherwise would be.

For now, this is an umbrella bug, since this will require a fair bit of work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502748</commentid>
    <comment_count>1</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-11-15 02:15:34 -0800</bug_when>
    <thetext>The simple thing to do would be to clear inline caches on a full GC.  Removing collected entries from IC entries would be better of course, but more complicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502750</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-15 02:24:39 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; The simple thing to do would be to clear inline caches on a full GC.  Removing collected entries from IC entries would be better of course, but more complicated.

That would be the simple thing, but see https://bugs.webkit.org/show_bug.cgi?id=72312.  The DFG will &quot;inline&quot; inline caches.  That is, if the old JIT had built up an IC for a monomorphic heap read, then the DFG will simplify the code to:

CheckStructure(OpInfo(the structure), base)
GetByOffset(OpInfo(some offset), base)

This leads to a number of profitable optimizations:

1) The slow case of the IC is omitted, leading to code size reduction.  This is by itself a large win.

2) Multiple CheckStructure&apos;s on the same base with no interleaved side-effecting ops can be CSE&apos;d, so that only the first one remains.

3) Information gleaned from a CheckStructure can be forward-propagated by the CFA, which can eliminate some type checks (say that a bit later the DFG emitted code that required that &apos;base&apos; is a JSFinalObject, and the structure corresponds to a strict subset of JSFinalObjects - then the JSFinalObject check can be elided).

4) The GetByOffset is now known to be a pure operation, so can be subject to CSE, and will not interfere with CSE of other operations.

But this also means that we can&apos;t just take the approach of blowing away inline caches on full GC, since this is no longer an inline cache, in the traditional sense - it&apos;s an intrinsic part of the code.  So we have to have a way of triggering OSR points on those &quot;inlined&quot; inline caches that are no longer valid if the structure in question is dead.  That&apos;s what I&apos;m working on now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502761</commentid>
    <comment_count>3</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-11-15 02:51:30 -0800</bug_when>
    <thetext>I see what you mean; I didn&apos;t understand what you had meant by &quot;inline cache optimization&quot;. Thanks for the explanation!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505438</commentid>
    <comment_count>4</comment_count>
      <attachid>115728</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 20:01:08 -0800</bug_when>
    <thetext>Created attachment 115728
the patch

This combines the patch on https://bugs.webkit.org/show_bug.cgi?id=72312 with full inline cache clearing support.  So far it looks like it works, and performance looks mostly fine, except something strange is happening in V8-regexp.



[pizlo@nitroflex bencher] ./bencher TipOfTree:/Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc WeakCaches:/Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc --remote oldmac,bigmac
Packaging VM builds for remote hosts...
Sending VM builds to oldmac...
Running on oldmac...
376/376                                                         
Generating benchmark report at TipOfTree_WeakCaches_SunSpiderV8Kraken_20111117_1949_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on oldmac.local (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100674)
&quot;WeakCaches&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r100674)

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

                                            TipOfTree               WeakCaches                                   
SunSpider:
   3d-cube                                9.0475+-0.0387          8.9664+-0.0477       
   3d-morph                              10.4450+-0.1721    ^    10.1015+-0.0355       ^ definitely 1.0340x faster
   3d-raytrace                            9.2003+-0.0617    ?     9.2515+-0.0654       ?
   access-binary-trees                    1.9097+-0.0069    ?     1.9349+-0.0326       ? might be 1.0132x slower
   access-fannkuch                        9.1217+-0.0200    ^     9.0871+-0.0084       ^ definitely 1.0038x faster
   access-nbody                           5.0345+-0.0044    ?     5.0679+-0.0381       ?
   access-nsieve                          3.7133+-0.0101          3.7111+-0.0060       
   bitops-3bit-bits-in-byte               1.4966+-0.0164          1.4959+-0.0184       
   bitops-bits-in-byte                    5.9275+-0.0180    ?     5.9298+-0.0159       ?
   bitops-bitwise-and                     3.9731+-0.0059    ?     3.9737+-0.0080       ?
   bitops-nsieve-bits                     6.7840+-0.0316    ?     6.8390+-0.0420       ?
   controlflow-recursive                  2.7644+-0.0177    ?     2.7921+-0.0369       ? might be 1.0100x slower
   crypto-aes                             8.8837+-0.3084          8.6743+-0.0546         might be 1.0241x faster
   crypto-md5                             3.0347+-0.0590          2.9922+-0.0132         might be 1.0142x faster
   crypto-sha1                            2.6152+-0.0334    ?     2.6323+-0.0314       ?
   date-format-tofte                     12.9762+-0.1771    ?    13.1488+-0.0922       ? might be 1.0133x slower
   date-format-xparb                     13.8699+-0.1296    !    14.2420+-0.1412       ! definitely 1.0268x slower
   math-cordic                            8.6768+-0.0372    ^     8.6144+-0.0209       ^ definitely 1.0073x faster
   math-partial-sums                     12.6416+-0.0401         12.6347+-0.0488       
   math-spectral-norm                     3.1685+-0.0557          3.1329+-0.0089         might be 1.0114x faster
   regexp-dna                            15.6974+-0.0541    ?    15.7449+-0.0606       ?
   string-base64                          4.7532+-0.0370    ?     4.7739+-0.0392       ?
   string-fasta                           8.9202+-0.0318    ?     9.0204+-0.0890       ? might be 1.0112x slower
   string-tagcloud                       15.9672+-0.1008         15.7997+-0.1061         might be 1.0106x faster
   string-unpack-code                    27.4349+-0.1522    ?    27.4398+-0.0469       ?
   string-validate-input                  6.9217+-0.1974          6.7428+-0.0794         might be 1.0265x faster

   &lt;arithmetic&gt; *                         8.2684+-0.0264          8.2594+-0.0244         might be 1.0011x faster
   &lt;geometric&gt;                            6.5486+-0.0233          6.5411+-0.0212         might be 1.0011x faster
   &lt;harmonic&gt;                             5.0696+-0.0217    ?     5.0700+-0.0222       ? might be 1.0001x slower

                                            TipOfTree               WeakCaches                                   
V8:
   crypto                                93.3679+-0.3252    ?    93.7752+-0.3924       ?
   deltablue                            205.0419+-0.7970    !   207.4518+-1.3348       ! definitely 1.0118x slower
   earley-boyer                         127.6397+-1.6513        125.9481+-1.5823         might be 1.0134x faster
   raytrace                              75.9334+-0.2453    ?    76.5853+-0.5557       ?
   regexp                               147.4395+-0.4611    !   148.2696+-0.2811       ! definitely 1.0056x slower
   richards                             166.2447+-0.2814        166.0438+-0.3616       
   splay                                107.5413+-1.4244        106.9378+-0.7132       

   &lt;arithmetic&gt;                         131.8869+-0.4721    ?   132.1445+-0.3777       ? might be 1.0020x slower
   &lt;geometric&gt; *                        125.4485+-0.5032    ?   125.6287+-0.3867       ? might be 1.0014x slower
   &lt;harmonic&gt;                           119.2648+-0.5089    ?   119.4452+-0.4084       ? might be 1.0015x slower

                                            TipOfTree               WeakCaches                                   
Kraken:
   ai-astar                             895.4246+-0.9915        895.1654+-0.4022       
   audio-beat-detection                 248.5174+-0.3483    !   250.5549+-0.8042       ! definitely 1.0082x slower
   audio-dft                            314.1673+-2.4462    ?   314.1825+-2.4322       ?
   audio-fft                            162.3186+-0.8125    ?   162.3518+-0.7823       ?
   audio-oscillator                     355.8777+-3.1971    ^   344.9823+-4.3299       ^ definitely 1.0316x faster
   imaging-darkroom                     404.1052+-5.4632    ?   405.4850+-6.1308       ?
   imaging-desaturate                   291.2879+-0.1209        291.1845+-0.0613       
   imaging-gaussian-blur                750.8557+-0.3035    ?   752.8046+-3.3790       ?
   json-parse-financial                  89.8248+-0.6193         89.5875+-0.1899       
   json-stringify-tinderbox             104.5581+-0.2745    ?   105.1705+-0.5748       ?
   stanford-crypto-aes                  143.2029+-1.6641        143.0827+-0.7456       
   stanford-crypto-ccm                  137.4856+-0.5693    !   140.4658+-1.0226       ! definitely 1.0217x slower
   stanford-crypto-pbkdf2               280.5099+-1.9514    ?   283.5715+-2.2643       ? might be 1.0109x slower
   stanford-crypto-sha256-iterative     112.9657+-0.2543        112.9229+-0.2411       

   &lt;arithmetic&gt; *                       306.5072+-0.4968    ?   306.5366+-0.6874       ? might be 1.0001x slower
   &lt;geometric&gt;                          239.8899+-0.4148    ?   240.1797+-0.5115       ? might be 1.0012x slower
   &lt;harmonic&gt;                           194.6864+-0.3307    ?   195.1378+-0.3639       ? might be 1.0023x slower

                                            TipOfTree               WeakCaches                                   
All benchmarks:
   &lt;arithmetic&gt;                         115.5168+-0.1711    ?   115.5589+-0.2314       ? might be 1.0004x slower
   &lt;geometric&gt;                           29.7140+-0.0748         29.7123+-0.0711         might be 1.0001x faster
   &lt;harmonic&gt;                             8.9367+-0.0377    ?     8.9378+-0.0384       ? might be 1.0001x slower

                                            TipOfTree               WeakCaches                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       68.2507+-0.1561    ?    68.2608+-0.1430       ? might be 1.0001x slower

Sending VM builds to bigmac...
Running on bigmac...
376/376                                                         
Generating benchmark report at TipOfTree_WeakCaches_SunSpiderV8Kraken_20111117_1951_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on bigmac.local (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100674)
&quot;WeakCaches&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r100674)

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

                                            TipOfTree               WeakCaches                                   
SunSpider:
   3d-cube                                7.5728+-0.1215          7.4300+-0.0254         might be 1.0192x faster
   3d-morph                               8.4423+-0.0879    ?     8.4828+-0.1291       ?
   3d-raytrace                            7.6856+-0.0513    ?     7.7025+-0.0624       ?
   access-binary-trees                    1.5943+-0.0069    ?     1.5977+-0.0082       ?
   access-fannkuch                        7.5383+-0.0104    ^     7.5180+-0.0082       ^ definitely 1.0027x faster
   access-nbody                           4.1663+-0.0092    !     4.1817+-0.0061       ! definitely 1.0037x slower
   access-nsieve                          3.1429+-0.0427          3.1428+-0.0375       
   bitops-3bit-bits-in-byte               1.2399+-0.0138          1.2390+-0.0095       
   bitops-bits-in-byte                    4.9107+-0.0055          4.8973+-0.0198       
   bitops-bitwise-and                     3.2831+-0.0045    ?     3.2890+-0.0055       ?
   bitops-nsieve-bits                     5.6333+-0.0338    ?     5.6556+-0.0387       ?
   controlflow-recursive                  2.2875+-0.0123    ?     2.2913+-0.0126       ?
   crypto-aes                             7.1496+-0.0385    ?     7.3631+-0.2183       ? might be 1.0299x slower
   crypto-md5                             2.4973+-0.0094          2.4956+-0.0086       
   crypto-sha1                            2.1853+-0.0329          2.1757+-0.0174       
   date-format-tofte                     10.6273+-0.0559    !    10.7725+-0.0539       ! definitely 1.0137x slower
   date-format-xparb                     11.4395+-0.2274    ?    11.4434+-0.0890       ?
   math-cordic                            7.1588+-0.0780    ?     7.1610+-0.0499       ?
   math-partial-sums                     10.4612+-0.0344    ?    10.4707+-0.0383       ?
   math-spectral-norm                     2.6258+-0.0326          2.6008+-0.0081       
   regexp-dna                            12.9697+-0.0534    ?    13.0062+-0.0585       ?
   string-base64                          3.9142+-0.0170    ?     3.9304+-0.0123       ?
   string-fasta                           7.3654+-0.0195    !     7.4126+-0.0144       ! definitely 1.0064x slower
   string-tagcloud                       13.0923+-0.0652    ^    12.9657+-0.0327       ^ definitely 1.0098x faster
   string-unpack-code                    22.2100+-0.1262         22.1619+-0.0837       
   string-validate-input                  5.5449+-0.0392    ?     5.6332+-0.0621       ? might be 1.0159x slower

   &lt;arithmetic&gt; *                         6.7976+-0.0218    ?     6.8085+-0.0208       ? might be 1.0016x slower
   &lt;geometric&gt;                            5.4030+-0.0185    ?     5.4117+-0.0177       ? might be 1.0016x slower
   &lt;harmonic&gt;                             4.1972+-0.0165    ?     4.2005+-0.0144       ? might be 1.0008x slower

                                            TipOfTree               WeakCaches                                   
V8:
   crypto                                77.3068+-0.2470    ?    78.5472+-1.0606       ? might be 1.0160x slower
   deltablue                            169.1565+-0.5722    ?   169.9061+-0.7509       ?
   earley-boyer                         105.8436+-1.2681    ?   106.1506+-1.8865       ?
   raytrace                              62.5844+-0.6697    ?    63.4609+-0.5217       ? might be 1.0140x slower
   regexp                               123.0489+-0.4275    !   124.9241+-0.9108       ! definitely 1.0152x slower
   richards                             138.1625+-0.3256    ?   138.3885+-0.7911       ?
   splay                                 90.0783+-0.9855    ?    90.5373+-1.2191       ?

   &lt;arithmetic&gt;                         109.4544+-0.2879    !   110.2735+-0.4132       ! definitely 1.0075x slower
   &lt;geometric&gt; *                        104.1137+-0.3218    !   104.9882+-0.4307       ! definitely 1.0084x slower
   &lt;harmonic&gt;                            98.9421+-0.3618    !    99.8732+-0.4189       ! definitely 1.0094x slower

                                            TipOfTree               WeakCaches                                   
Kraken:
   ai-astar                             817.2374+-11.1240   ?   827.1865+-0.5183       ? might be 1.0122x slower
   audio-beat-detection                 203.9402+-0.3269    !   206.1474+-0.6714       ! definitely 1.0108x slower
   audio-dft                            261.1492+-2.3054        259.6474+-2.6116       
   audio-fft                            132.7391+-0.0777    ?   132.8311+-0.1997       ?
   audio-oscillator                     294.2755+-1.5612    ^   283.3337+-4.9055       ^ definitely 1.0386x faster
   imaging-darkroom                     333.9641+-4.6759    ?   334.3031+-4.9627       ?
   imaging-desaturate                   240.7603+-0.1246    ?   240.8660+-0.3476       ?
   imaging-gaussian-blur                620.6148+-0.1868    ?   621.9812+-2.4208       ?
   json-parse-financial                  73.2566+-0.4176    !    74.1150+-0.3143       ! definitely 1.0117x slower
   json-stringify-tinderbox              86.3845+-0.2568    ?    86.7771+-0.2189       ?
   stanford-crypto-aes                  117.3842+-0.6165    ?   118.7492+-0.7655       ? might be 1.0116x slower
   stanford-crypto-ccm                  116.1933+-0.9027    ?   117.1747+-0.7135       ?
   stanford-crypto-pbkdf2               233.0368+-1.4568        232.9577+-0.2467       
   stanford-crypto-sha256-iterative      93.1566+-0.2464         93.0921+-0.3027       

   &lt;arithmetic&gt; *                       258.8638+-1.0708    ?   259.2259+-0.4904       ? might be 1.0014x slower
   &lt;geometric&gt;                          199.5603+-0.5626    ?   199.8244+-0.4281       ? might be 1.0013x slower
   &lt;harmonic&gt;                           160.8641+-0.4246    ?   161.4155+-0.3345       ? might be 1.0034x slower

                                            TipOfTree               WeakCaches                                   
All benchmarks:
   &lt;arithmetic&gt;                          97.1705+-0.3044    ?    97.4063+-0.1669       ? might be 1.0024x slower
   &lt;geometric&gt;                           24.5976+-0.0601    ?    24.6601+-0.0603       ? might be 1.0025x slower
   &lt;harmonic&gt;                             7.3988+-0.0285    ?     7.4055+-0.0250       ? might be 1.0009x slower

                                            TipOfTree               WeakCaches                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       56.7948+-0.1173    ?    57.0104+-0.1230       ? might be 1.0038x slower

[pizlo@nitroflex bencher]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505439</commentid>
    <comment_count>5</comment_count>
      <attachid>115728</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 20:01:49 -0800</bug_when>
    <thetext>Comment on attachment 115728
the patch

Clearing r? because I didn&apos;t meant to set it yet.  I have some more investigating to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505440</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-17 20:04:14 -0800</bug_when>
    <thetext>Attachment 115728 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/bytecode/CodeBlock.h:175:  The parameter name &quot;repatchBuffer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 15 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>505461</commentid>
    <comment_count>7</comment_count>
      <attachid>115728</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-17 21:07:33 -0800</bug_when>
    <thetext>Comment on attachment 115728
the patch

Attachment 115728 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10508505</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505466</commentid>
    <comment_count>8</comment_count>
      <attachid>115733</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 21:22:39 -0800</bug_when>
    <thetext>Created attachment 115733
page.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505468</commentid>
    <comment_count>9</comment_count>
      <attachid>115734</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 21:23:39 -0800</bug_when>
    <thetext>Created attachment 115734
page.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505469</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 21:24:57 -0800</bug_when>
    <thetext>I just posted a nifty test case that demos the effects of this patch.

Run the demo with DumpRenderTree, from your checkout (since the page.html code looks for LayoutTests/fast/js/resources/somethingorother.js).  Works best if you disable recompiling all JS functions on GCs.  Without the patch, the heap just keeps growing in size.  With the patch, the heap stays the same size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505510</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 22:24:48 -0800</bug_when>
    <thetext>Well, I can&apos;t get the 0.8% V8 slow-down to repro on any of my three machines.  I&apos;m going to say that this is perf-neutral.



[pizlo@nitroflex bencher] ./bencher TipOfTree:/Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc WeakCaches:/Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc --remote oldmac,bigmac --local
Packaging VM builds for remote hosts...
Sending VM builds to oldmac...
Running on oldmac...
376/376                                                         
Generating benchmark report at TipOfTree_WeakCaches_SunSpiderV8Kraken_20111117_2215_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on oldmac.local (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100674)
&quot;WeakCaches&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r100674)

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

                                            TipOfTree               WeakCaches                                   
SunSpider:
   3d-cube                                8.8947+-0.0400    ?     8.9120+-0.0378       ?
   3d-morph                              10.1878+-0.0429         10.1173+-0.0649       
   3d-raytrace                            9.1729+-0.0690    ?     9.2488+-0.0730       ?
   access-binary-trees                    1.9086+-0.0098    ?     1.9167+-0.0063       ?
   access-fannkuch                        9.0967+-0.0116    ?     9.1367+-0.0876       ?
   access-nbody                           5.0368+-0.0056    ?     5.0442+-0.0069       ?
   access-nsieve                          3.7415+-0.0431          3.7128+-0.0060       
   bitops-3bit-bits-in-byte               1.4913+-0.0132    ?     1.5021+-0.0167       ?
   bitops-bits-in-byte                    5.9335+-0.0079          5.9224+-0.0140       
   bitops-bitwise-and                     3.9795+-0.0087          3.9756+-0.0143       
   bitops-nsieve-bits                     6.8585+-0.0446          6.8020+-0.0472       
   controlflow-recursive                  2.7623+-0.0183    ?     2.7647+-0.0136       ?
   crypto-aes                             8.6855+-0.0931          8.6660+-0.0754       
   crypto-md5                             2.9867+-0.0080    ?     2.9877+-0.0124       ?
   crypto-sha1                            2.6099+-0.0191    ?     2.6214+-0.0294       ?
   date-format-tofte                     12.8921+-0.1053    ?    13.0743+-0.1502       ? might be 1.0141x slower
   date-format-xparb                     14.6301+-0.1444         14.4959+-0.1759       
   math-cordic                            8.6518+-0.0400          8.6261+-0.0172       
   math-partial-sums                     12.6500+-0.0440         12.6309+-0.0280       
   math-spectral-norm                     3.1304+-0.0155          3.1296+-0.0072       
   regexp-dna                            15.7034+-0.0536    ?    15.7611+-0.0604       ?
   string-base64                          4.7400+-0.0370    ?     4.7764+-0.0342       ?
   string-fasta                           8.9695+-0.0621    ?     8.9759+-0.0260       ?
   string-tagcloud                       15.8240+-0.0888         15.7925+-0.1060       
   string-unpack-code                    27.5915+-0.1673         27.5327+-0.0761       
   string-validate-input                  6.7825+-0.0632    ?     6.8006+-0.0838       ?

   &lt;arithmetic&gt; *                         8.2658+-0.0266    ?     8.2664+-0.0292       ? might be 1.0001x slower
   &lt;geometric&gt;                            6.5344+-0.0204    ?     6.5383+-0.0242       ? might be 1.0006x slower
   &lt;harmonic&gt;                             5.0544+-0.0154    ?     5.0626+-0.0211       ? might be 1.0016x slower

                                            TipOfTree               WeakCaches                                   
V8:
   crypto                                93.2477+-0.3185    ?    93.7770+-0.4298       ?
   deltablue                            204.1601+-1.0130    !   206.3418+-0.8906       ! definitely 1.0107x slower
   earley-boyer                         124.6204+-0.2962    ?   126.0559+-1.2859       ? might be 1.0115x slower
   raytrace                              77.2042+-0.9266         76.3591+-0.3855         might be 1.0111x faster
   regexp                               148.3235+-0.2242    ?   148.4812+-0.3107       ?
   richards                             166.8579+-1.5676    ?   167.0018+-0.8833       ?
   splay                                106.7798+-1.2362        106.2237+-0.8954       

   &lt;arithmetic&gt;                         131.5991+-0.3795    ?   132.0343+-0.3261       ? might be 1.0033x slower
   &lt;geometric&gt; *                        125.2613+-0.3946    ?   125.5044+-0.3336       ? might be 1.0019x slower
   &lt;harmonic&gt;                           119.2370+-0.4347    ?   119.2910+-0.3460       ? might be 1.0005x slower

                                            TipOfTree               WeakCaches                                   
Kraken:
   ai-astar                             895.2102+-0.5776    ?   895.3543+-0.8576       ?
   audio-beat-detection                 248.4783+-0.5454    !   251.2638+-1.9747       ! definitely 1.0112x slower
   audio-dft                            314.4556+-2.8743        313.9113+-2.8510       
   audio-fft                            161.9779+-0.2354    ?   162.3217+-0.8390       ?
   audio-oscillator                     355.3719+-2.8833        347.5008+-5.6341         might be 1.0227x faster
   imaging-darkroom                     407.3586+-6.4591        406.5261+-6.6644       
   imaging-desaturate                   291.1644+-0.0432    ?   291.1873+-0.0935       ?
   imaging-gaussian-blur                751.0524+-0.2825        750.7334+-0.1394       
   json-parse-financial                  88.8708+-0.4604    ?    89.3269+-0.3017       ?
   json-stringify-tinderbox             104.3903+-0.2122        104.2862+-0.3965       
   stanford-crypto-aes                  139.9116+-0.7371    !   145.5284+-3.5541       ! definitely 1.0401x slower
   stanford-crypto-ccm                  137.4390+-0.5954    !   140.8775+-1.1446       ! definitely 1.0250x slower
   stanford-crypto-pbkdf2               281.6578+-2.1680    ?   284.5136+-2.4063       ? might be 1.0101x slower
   stanford-crypto-sha256-iterative     113.8772+-0.7313    ^   112.6475+-0.3416       ^ definitely 1.0109x faster

   &lt;arithmetic&gt; *                       306.5154+-0.6597    ?   306.8556+-0.6732       ? might be 1.0011x slower
   &lt;geometric&gt;                          239.5670+-0.4735    ?   240.4821+-0.5706       ? might be 1.0038x slower
   &lt;harmonic&gt;                           194.1157+-0.2640    !   195.2375+-0.4884       ! definitely 1.0058x slower

                                            TipOfTree               WeakCaches                                   
All benchmarks:
   &lt;arithmetic&gt;                         115.4749+-0.1876    ?   115.6414+-0.2313       ? might be 1.0014x slower
   &lt;geometric&gt;                           29.6598+-0.0535    ?    29.7120+-0.0822       ? might be 1.0018x slower
   &lt;harmonic&gt;                             8.9102+-0.0264    ?     8.9250+-0.0367       ? might be 1.0017x slower

                                            TipOfTree               WeakCaches                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       68.2101+-0.1005    ?    68.2813+-0.1651       ? might be 1.0010x slower

Sending VM builds to bigmac...
Running on bigmac...
376/376                                                         
Generating benchmark report at TipOfTree_WeakCaches_SunSpiderV8Kraken_20111117_2217_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on bigmac.local (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100674)
&quot;WeakCaches&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r100674)

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

                                            TipOfTree               WeakCaches                                   
SunSpider:
   3d-cube                                7.4087+-0.0348    ?     7.4240+-0.0413       ?
   3d-morph                               8.4219+-0.0381          8.3901+-0.0348       
   3d-raytrace                            7.6843+-0.0588    ?     7.7228+-0.0446       ?
   access-binary-trees                    1.5952+-0.0034    ?     1.6041+-0.0109       ?
   access-fannkuch                        7.5366+-0.0133          7.5282+-0.0137       
   access-nbody                           4.1748+-0.0094    ?     4.1847+-0.0062       ?
   access-nsieve                          3.1552+-0.0510    ?     3.1602+-0.0537       ?
   bitops-3bit-bits-in-byte               1.2371+-0.0114    !     1.2710+-0.0135       ! definitely 1.0274x slower
   bitops-bits-in-byte                    4.9017+-0.0150    ?     4.9113+-0.0445       ?
   bitops-bitwise-and                     3.3292+-0.0417          3.2868+-0.0042         might be 1.0129x faster
   bitops-nsieve-bits                     5.6784+-0.0604          5.6720+-0.0439       
   controlflow-recursive                  2.3014+-0.0217          2.3001+-0.0263       
   crypto-aes                             7.2437+-0.1201          7.1714+-0.0298         might be 1.0101x faster
   crypto-md5                             2.5080+-0.0209    ?     2.5095+-0.0196       ?
   crypto-sha1                            2.1831+-0.0268          2.1817+-0.0189       
   date-format-tofte                     10.6713+-0.0589         10.6563+-0.0450       
   date-format-xparb                     11.6481+-0.1539         11.5045+-0.0940         might be 1.0125x faster
   math-cordic                            7.1305+-0.0232    ?     7.1495+-0.0339       ?
   math-partial-sums                     10.4843+-0.0197         10.4432+-0.0333       
   math-spectral-norm                     2.5910+-0.0039    !     2.5997+-0.0048       ! definitely 1.0033x slower
   regexp-dna                            12.9868+-0.0526    ?    13.0635+-0.0692       ?
   string-base64                          3.9365+-0.0268    ?     3.9666+-0.0297       ?
   string-fasta                           7.4048+-0.0224    ?     7.4262+-0.0165       ?
   string-tagcloud                       13.0262+-0.0455         13.0190+-0.0588       
   string-unpack-code                    22.2219+-0.0879    ?    22.3529+-0.0763       ?
   string-validate-input                  5.5902+-0.0317    ?     5.6688+-0.1341       ? might be 1.0141x slower

   &lt;arithmetic&gt; *                         6.8096+-0.0205    ?     6.8142+-0.0190       ? might be 1.0007x slower
   &lt;geometric&gt;                            5.4124+-0.0170    ?     5.4207+-0.0192       ? might be 1.0015x slower
   &lt;harmonic&gt;                             4.2025+-0.0160    ?     4.2207+-0.0199       ? might be 1.0043x slower

                                            TipOfTree               WeakCaches                                   
V8:
   crypto                                77.4580+-0.2994         77.2495+-0.2422       
   deltablue                            170.5089+-1.6666    ?   171.7374+-1.6703       ?
   earley-boyer                         103.7700+-0.3527    ?   105.3101+-1.2086       ? might be 1.0148x slower
   raytrace                              64.5108+-0.5795         63.6362+-0.6552         might be 1.0137x faster
   regexp                               124.3676+-0.2792    ?   124.6022+-0.4107       ?
   richards                             138.5908+-1.5768        137.8858+-0.2496       
   splay                                 90.4342+-1.0799         89.7729+-0.7036       

   &lt;arithmetic&gt;                         109.9486+-0.3112    ?   110.0277+-0.4246       ? might be 1.0007x slower
   &lt;geometric&gt; *                        104.6810+-0.2393        104.6085+-0.3968         might be 1.0007x faster
   &lt;harmonic&gt;                            99.6635+-0.2604         99.4283+-0.3943         might be 1.0024x faster

                                            TipOfTree               WeakCaches                                   
Kraken:
   ai-astar                             827.0655+-0.1641    ^   808.7910+-12.4758      ^ definitely 1.0226x faster
   audio-beat-detection                 204.6192+-0.9188    ?   205.8697+-0.5044       ?
   audio-dft                            261.1092+-2.7787    ?   261.6707+-2.5628       ?
   audio-fft                            132.9265+-0.1194    ?   133.3967+-0.7447       ?
   audio-oscillator                     294.3907+-1.3264    ^   283.8631+-4.8283       ^ definitely 1.0371x faster
   imaging-darkroom                     334.8023+-4.7179    ?   337.4471+-5.7008       ?
   imaging-desaturate                   240.9506+-0.2240    ?   240.9684+-0.1227       ?
   imaging-gaussian-blur                620.7693+-0.2246    ?   621.6854+-2.1459       ?
   json-parse-financial                  73.2406+-0.2254    ?    73.3942+-0.1276       ?
   json-stringify-tinderbox              86.7271+-0.3576    ?    87.4358+-0.7803       ?
   stanford-crypto-aes                  116.6774+-0.8003    !   119.6183+-1.5563       ! definitely 1.0252x slower
   stanford-crypto-ccm                  114.4313+-0.6022    !   117.6416+-0.8032       ! definitely 1.0281x slower
   stanford-crypto-pbkdf2               232.5902+-0.9980    ?   233.7615+-0.2435       ?
   stanford-crypto-sha256-iterative      93.1953+-0.4072         92.8300+-0.2839       

   &lt;arithmetic&gt; *                       259.5354+-0.3681        258.4553+-1.1468         might be 1.0042x faster
   &lt;geometric&gt;                          199.5816+-0.2810    ?   199.9460+-0.5338       ? might be 1.0018x slower
   &lt;harmonic&gt;                           160.6941+-0.2299    !   161.5873+-0.4243       ! definitely 1.0056x slower

                                            TipOfTree               WeakCaches                                   
All benchmarks:
   &lt;arithmetic&gt;                          97.4508+-0.1245         97.1433+-0.3842         might be 1.0032x faster
   &lt;geometric&gt;                           24.6421+-0.0479    ?    24.6739+-0.0627       ? might be 1.0013x slower
   &lt;harmonic&gt;                             7.4085+-0.0276    ?     7.4400+-0.0343       ? might be 1.0043x slower

                                            TipOfTree               WeakCaches                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       56.9807+-0.0741         56.9008+-0.1544         might be 1.0014x faster

Running locally...
376/376                                                         
Generating benchmark report at TipOfTree_WeakCaches_SunSpiderV8Kraken_20111117_2220_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on nitroflex.local (MacBookPro8,2).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100674)
&quot;WeakCaches&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r100674)

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

                                            TipOfTree               WeakCaches                                   
SunSpider:
   3d-cube                                6.8386+-0.1369    ?     6.8670+-0.1591       ?
   3d-morph                               7.6310+-0.1445    ?     7.6571+-0.1262       ?
   3d-raytrace                            7.1236+-0.2343    ?     7.1748+-0.2134       ?
   access-binary-trees                    1.5442+-0.0588    ?     1.5591+-0.0798       ?
   access-fannkuch                        6.0392+-0.0580    ?     6.0908+-0.0779       ?
   access-nbody                           3.4093+-0.0749    ?     3.4874+-0.0651       ? might be 1.0229x slower
   access-nsieve                          2.4843+-0.0658    ?     2.5331+-0.0456       ? might be 1.0196x slower
   bitops-3bit-bits-in-byte               1.2400+-0.0208    ?     1.2768+-0.0424       ? might be 1.0297x slower
   bitops-bits-in-byte                    2.3495+-0.0581    ?     2.3848+-0.0675       ? might be 1.0150x slower
   bitops-bitwise-and                     3.3964+-0.0650    ?     3.4162+-0.0689       ?
   bitops-nsieve-bits                     5.2170+-0.0571          5.2053+-0.0867       
   controlflow-recursive                  2.0306+-0.0478    ?     2.0796+-0.0331       ? might be 1.0242x slower
   crypto-aes                             6.8778+-0.1170    ?     7.0300+-0.2004       ? might be 1.0221x slower
   crypto-md5                             2.3851+-0.0759    ?     2.4297+-0.0920       ? might be 1.0187x slower
   crypto-sha1                            2.0545+-0.0494    ?     2.0873+-0.0506       ? might be 1.0159x slower
   date-format-tofte                      9.9825+-0.1603    ?    10.0566+-0.2186       ?
   date-format-xparb                     10.9696+-0.2362         10.8717+-0.1573       
   math-cordic                            6.2295+-0.1010    ?     6.4359+-0.1099       ? might be 1.0331x slower
   math-partial-sums                      7.4259+-0.2035          7.3829+-0.1104       
   math-spectral-norm                     2.3528+-0.0510    ?     2.3738+-0.0618       ?
   regexp-dna                            10.7878+-0.1746    ?    11.0114+-0.1540       ? might be 1.0207x slower
   string-base64                          3.9457+-0.1976          3.8035+-0.0783         might be 1.0374x faster
   string-fasta                           6.5032+-0.1164    ?     6.5834+-0.0730       ? might be 1.0123x slower
   string-tagcloud                       11.6524+-0.3080         11.5740+-0.3664       
   string-unpack-code                    19.9997+-0.4005         19.9907+-0.3590       
   string-validate-input                  5.1990+-0.0807    ?     5.3495+-0.1241       ? might be 1.0290x slower

   &lt;arithmetic&gt; *                         5.9873+-0.0255    ?     6.0274+-0.0266       ? might be 1.0067x slower
   &lt;geometric&gt;                            4.7571+-0.0258    ?     4.8038+-0.0274       ? might be 1.0098x slower
   &lt;harmonic&gt;                             3.7479+-0.0331    ?     3.7974+-0.0372       ? might be 1.0132x slower

                                            TipOfTree               WeakCaches                                   
V8:
   crypto                                69.7311+-0.5761         69.5905+-0.3407       
   deltablue                            149.6033+-1.6382    ?   149.9671+-0.7672       ?
   earley-boyer                          84.8068+-0.3751    ?    85.0753+-0.9961       ?
   raytrace                              56.2134+-1.2250    ?    56.3687+-0.4111       ?
   regexp                               102.2150+-0.5761    ?   102.4564+-0.4019       ?
   richards                             116.4703+-0.5039        116.3584+-0.3244       
   splay                                 71.1878+-0.5781    ?    71.5626+-1.1676       ?

   &lt;arithmetic&gt;                          92.8897+-0.3338    ?    93.0542+-0.2930       ? might be 1.0018x slower
   &lt;geometric&gt; *                         88.3791+-0.3757    ?    88.5463+-0.3139       ? might be 1.0019x slower
   &lt;harmonic&gt;                            84.2935+-0.4672    ?    84.4659+-0.3292       ? might be 1.0020x slower

                                            TipOfTree               WeakCaches                                   
Kraken:
   ai-astar                             481.0555+-1.9411    ?   485.7408+-2.9128       ?
   audio-beat-detection                 188.1320+-1.5393        187.1138+-0.5824       
   audio-dft                            261.1059+-1.8659    ?   261.7865+-3.1228       ?
   audio-fft                            122.5034+-0.6345        122.3092+-0.8059       
   audio-oscillator                     248.3586+-0.9176        245.8170+-1.7807         might be 1.0103x faster
   imaging-darkroom                     297.2359+-4.1428        296.1308+-3.6880       
   imaging-desaturate                   222.0842+-2.6411    ?   223.2395+-1.2428       ?
   imaging-gaussian-blur                543.6976+-2.9637    ?   543.7442+-1.7596       ?
   json-parse-financial                  57.2787+-0.3301         57.1892+-0.1696       
   json-stringify-tinderbox              73.8504+-0.9164         72.7696+-0.3363         might be 1.0149x faster
   stanford-crypto-aes                   96.0850+-1.2172         95.0746+-0.6106         might be 1.0106x faster
   stanford-crypto-ccm                   98.6912+-0.5641    ?    99.9238+-0.7357       ? might be 1.0125x slower
   stanford-crypto-pbkdf2               188.1711+-1.7414        187.2750+-3.1966       
   stanford-crypto-sha256-iterative      79.4168+-0.3274         79.3875+-0.9256       

   &lt;arithmetic&gt; *                       211.2619+-0.3660        211.2501+-0.5707         might be 1.0001x faster
   &lt;geometric&gt;                          168.9592+-0.3150        168.6816+-0.4400         might be 1.0016x faster
   &lt;harmonic&gt;                           136.4769+-0.2737        136.1003+-0.3651         might be 1.0028x faster

                                            TipOfTree               WeakCaches                                   
All benchmarks:
   &lt;arithmetic&gt;                          80.0758+-0.1373    ?    80.1190+-0.1897       ? might be 1.0005x slower
   &lt;geometric&gt;                           21.2897+-0.0651    ?    21.4006+-0.0718       ? might be 1.0052x slower
   &lt;harmonic&gt;                             6.5985+-0.0569    ?     6.6832+-0.0637       ? might be 1.0128x slower

                                            TipOfTree               WeakCaches                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       48.1720+-0.0816    ?    48.3091+-0.1069       ? might be 1.0028x slower

[pizlo@nitroflex bencher]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505531</commentid>
    <comment_count>12</comment_count>
      <attachid>115745</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 23:17:40 -0800</bug_when>
    <thetext>Created attachment 115745
the patch

Fixed 32-bit support.  Still need to add the ARMv7 equivalent to the Assembler hooks I needed for un-patching method call caches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505533</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-17 23:19:54 -0800</bug_when>
    <thetext>Attachment 115745 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/bytecode/CodeBlock.h:175:  The parameter name &quot;repatchBuffer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 18 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>505538</commentid>
    <comment_count>14</comment_count>
      <attachid>115746</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 23:37:42 -0800</bug_when>
    <thetext>Created attachment 115746
the patch

Fixed style, removed a spurious change to AbstractMacroAssembler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505539</commentid>
    <comment_count>15</comment_count>
      <attachid>115747</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 23:40:58 -0800</bug_when>
    <thetext>Created attachment 115747
the patch

Improved the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505596</commentid>
    <comment_count>16</comment_count>
      <attachid>115764</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-18 01:14:32 -0800</bug_when>
    <thetext>Created attachment 115764
the patch

Added ARMv7 support.  Fixed some comments as per Geoff&apos;s comments on https://bugs.webkit.org/show_bug.cgi?id=72312.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506112</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-18 15:15:09 -0800</bug_when>
    <thetext>The effect of this patch on SunSpider, when recompiling all JS functions is disabled.  Note that ToT (with recompiling all JS functions) achieves a score of ~180ms, so this is telling us that with this patch we don&apos;t need to always recompile all JS functions.

TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           1.049x as fast    188.2ms +/- 1.4%   179.4ms +/- 1.2%     significant

=============================================================================

  3d:                  1.051x as fast     24.7ms +/- 2.4%    23.5ms +/- 2.6%     significant
    cube:              1.079x as fast      8.2ms +/- 3.7%     7.6ms +/- 4.9%     significant
    morph:             -                   8.3ms +/- 4.2%     8.1ms +/- 2.8% 
    raytrace:          1.051x as fast      8.2ms +/- 3.7%     7.8ms +/- 3.9%     significant

  access:              1.055x as fast     17.4ms +/- 4.0%    16.5ms +/- 3.7%     significant
    binary-trees:      1.24x as fast       2.1ms +/- 10.8%     1.7ms +/- 20.3%     significant
    fannkuch:          -                   7.8ms +/- 3.9%     7.4ms +/- 5.0% 
    nbody:             -                   4.2ms +/- 7.2%     4.2ms +/- 7.2% 
    nsieve:            -                   3.3ms +/- 10.5%     3.2ms +/- 9.4% 

  bitops:              -                  15.5ms +/- 3.9%    15.2ms +/- 4.3% 
    3bit-bits-in-byte: -                   1.2ms +/- 25.1%     1.2ms +/- 25.1% 
    bits-in-byte:      -                   5.1ms +/- 4.4%     5.1ms +/- 4.4% 
    bitwise-and:       -                   3.5ms +/- 10.8%     3.2ms +/- 9.4% 
    nsieve-bits:       -                   5.7ms +/- 6.1%     5.7ms +/- 6.1% 

  controlflow:         -                   2.2ms +/- 13.7%     2.1ms +/- 10.8% 
    recursive:         -                   2.2ms +/- 13.7%     2.1ms +/- 10.8% 

  crypto:              -                  12.3ms +/- 4.8%    11.7ms +/- 4.1% 
    aes:               -                   7.9ms +/- 2.9%     7.5ms +/- 5.0% 
    md5:               -                   2.2ms +/- 13.7%     2.1ms +/- 10.8% 
    sha1:              -                   2.2ms +/- 13.7%     2.1ms +/- 10.8% 

  date:                -                  26.2ms +/- 5.3%    24.9ms +/- 4.4% 
    format-tofte:      -                  13.1ms +/- 4.8%    12.5ms +/- 3.0% 
    format-xparb:      -                  13.1ms +/- 6.0%    12.4ms +/- 6.8% 

  math:                -                  20.3ms +/- 2.4%    20.0ms +/- 2.4% 
    cordic:            1.057x as fast      7.4ms +/- 5.0%     7.0ms +/- 0.0%     significant
    partial-sums:      -                  10.5ms +/- 3.6%    10.3ms +/- 3.4% 
    spectral-norm:     ??                  2.4ms +/- 15.4%     2.7ms +/- 12.8%     not conclusive: might be *1.125x as slow*

  regexp:              1.048x as fast     13.0ms +/- 2.6%    12.4ms +/- 3.0%     significant
    dna:               1.048x as fast     13.0ms +/- 2.6%    12.4ms +/- 3.0%     significant

  string:              1.066x as fast     56.6ms +/- 2.7%    53.1ms +/- 1.5%     significant
    base64:            1.163x as fast      5.0ms +/- 9.5%     4.3ms +/- 8.0%     significant
    fasta:             -                   7.9ms +/- 2.9%     7.7ms +/- 4.5% 
    tagcloud:          1.063x as fast     13.4ms +/- 2.8%    12.6ms +/- 2.9%     significant
    unpack-code:       1.044x as fast     23.7ms +/- 2.9%    22.7ms +/- 2.1%     significant
    validate-input:    1.138x as fast      6.6ms +/- 5.6%     5.8ms +/- 5.2%     significant</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506126</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-18 15:26:30 -0800</bug_when>
    <thetext>In-browser V8 scores are neutral.


ToT:

Score: 6851
Richards: 8787
DeltaBlue: 6427
Crypto: 14447
RayTrace: 8362
EarleyBoyer: 8076
RegExp: 1933
Splay: 6650

Not recompiling all JS functions:

Score: 6947
Richards: 9020
DeltaBlue: 6341
Crypto: 14435
RayTrace: 8524
EarleyBoyer: 8257
RegExp: 1970
Splay: 6821

This patch, and not recompiling all JS functions:

Score: 6873
Richards: 9203
DeltaBlue: 6420
Crypto: 14353
RayTrace: 7724
EarleyBoyer: 8355
RegExp: 1960
Splay: 6756</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506134</commentid>
    <comment_count>19</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-18 15:31:24 -0800</bug_when>
    <thetext>*** Bug 72312 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506135</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-18 15:32:27 -0800</bug_when>
    <thetext>For Kraken, we see a similar effect to SunSpider: Not recompiling all JS functions is a regression, but then throwing this patch in brings us back to sanity.

Here&apos;s this patch, and not recompiling, against ToT;

TEST                         COMPARISON            FROM                 TO               DETAILS

====================================================================================

** TOTAL **:                 ??                3694.7ms +/- 0.5%   3733.9ms +/- 1.7%     might be *1.011x as slow*

====================================================================================

  ai:                        ??                 830.9ms +/- 1.5%    839.7ms +/- 0.3%     might be *1.011x as slow*
    astar:                   ??                 830.9ms +/- 1.5%    839.7ms +/- 0.3%     might be *1.011x as slow*

  audio:                     ??                 908.1ms +/- 0.4%    939.9ms +/- 7.0%     might be *1.035x as slow*
    beat-detection:          -                  218.0ms +/- 0.5%    215.9ms +/- 1.2% 
    dft:                     ??                 261.9ms +/- 0.4%    262.8ms +/- 0.7%     might be *1.003x as slow*
    fft:                     ??                 136.9ms +/- 1.0%    138.5ms +/- 1.7%     might be *1.012x as slow*
    oscillator:              ??                 291.3ms +/- 0.7%    322.7ms +/- 20.8%     might be *1.108x as slow*

  imaging:                   1.004x as fast    1187.6ms +/- 0.3%   1183.1ms +/- 0.2%     significant
    gaussian-blur:           -                  613.6ms +/- 0.7%    609.4ms +/- 0.2% 
    darkroom:                -                  333.8ms +/- 0.3%    332.3ms +/- 0.6% 
    desaturate:              ??                 240.2ms +/- 0.4%    241.4ms +/- 0.5%     might be *1.005x as slow*

  json:                      1.010x as fast     174.3ms +/- 0.4%    172.5ms +/- 0.3%     significant
    parse-financial:         1.012x as fast      85.3ms +/- 0.6%     84.3ms +/- 0.7%     significant
    stringify-tinderbox:     1.009x as fast      89.0ms +/- 0.7%     88.2ms +/- 0.3%     significant

  stanford:                  ??                 593.8ms +/- 0.5%    598.7ms +/- 0.8%     might be *1.008x as slow*
    crypto-aes:              ??                 127.5ms +/- 1.5%    128.1ms +/- 1.7%     might be *1.005x as slow*
    crypto-ccm:              ??                 130.3ms +/- 1.4%    131.0ms +/- 1.3%     might be *1.005x as slow*
    crypto-pbkdf2:           ??                 237.8ms +/- 0.8%    241.0ms +/- 1.3%     might be *1.013x as slow*
    crypto-sha256-iterative: ??                  98.2ms +/- 0.5%     98.6ms +/- 1.4%     might be *1.004x as slow*


And here&apos;s just not recompiling all JS functions versus ToT:

TEST                         COMPARISON            FROM                 TO               DETAILS

====================================================================================

** TOTAL **:                 *1.036x as slow*  3694.7ms +/- 0.5%   3826.6ms +/- 1.1%     significant

====================================================================================

  ai:                        -                  830.9ms +/- 1.5%    823.5ms +/- 1.9% 
    astar:                   -                  830.9ms +/- 1.5%    823.5ms +/- 1.9% 

  audio:                     *1.088x as slow*   908.1ms +/- 0.4%    988.0ms +/- 1.9%     significant
    beat-detection:          *1.082x as slow*   218.0ms +/- 0.5%    235.8ms +/- 2.3%     significant
    dft:                     *1.050x as slow*   261.9ms +/- 0.4%    275.1ms +/- 1.4%     significant
    fft:                     *1.150x as slow*   136.9ms +/- 1.0%    157.4ms +/- 3.3%     significant
    oscillator:              *1.097x as slow*   291.3ms +/- 0.7%    319.7ms +/- 2.0%     significant

  imaging:                   ??                1187.6ms +/- 0.3%   1189.5ms +/- 0.4%     might be *1.002x as slow*
    gaussian-blur:           -                  613.6ms +/- 0.7%    609.6ms +/- 0.2% 
    darkroom:                ??                 333.8ms +/- 0.3%    335.2ms +/- 1.0%     might be *1.004x as slow*
    desaturate:              *1.019x as slow*   240.2ms +/- 0.4%    244.7ms +/- 0.9%     significant

  json:                      *1.111x as slow*   174.3ms +/- 0.4%    193.7ms +/- 4.6%     significant
    parse-financial:         *1.138x as slow*    85.3ms +/- 0.6%     97.1ms +/- 5.9%     significant
    stringify-tinderbox:     *1.085x as slow*    89.0ms +/- 0.7%     96.6ms +/- 3.9%     significant

  stanford:                  *1.064x as slow*   593.8ms +/- 0.5%    631.9ms +/- 1.9%     significant
    crypto-aes:              *1.075x as slow*   127.5ms +/- 1.5%    137.1ms +/- 2.8%     significant
    crypto-ccm:              *1.085x as slow*   130.3ms +/- 1.4%    141.4ms +/- 4.2%     significant
    crypto-pbkdf2:           *1.068x as slow*   237.8ms +/- 0.8%    254.0ms +/- 2.4%     significant
    crypto-sha256-iterative: ??                  98.2ms +/- 0.5%     99.4ms +/- 1.7%     might be *1.012x as slow*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506198</commentid>
    <comment_count>21</comment_count>
      <attachid>115764</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-18 16:33:47 -0800</bug_when>
    <thetext>Comment on attachment 115764
the patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1597
&gt; +    visitor.addUnconditionalFinalizer(this);

Neat improvement over your prior patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506201</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-18 16:40:28 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 115764 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115764&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1597
&gt; &gt; +    visitor.addUnconditionalFinalizer(this);
&gt; 
&gt; Neat improvement over your prior patch.

Thanks, I&apos;ll let this patch simmer for a short bit while I test it some more, and probably land in the next couple of days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506661</commentid>
    <comment_count>23</comment_count>
      <attachid>116022</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-20 19:20:40 -0800</bug_when>
    <thetext>Created attachment 116022
the patch

Trying to fix windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506674</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-20 20:45:58 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/100880</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506675</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-20 20:46:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/10476338&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506739</commentid>
    <comment_count>26</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-11-20 23:48:29 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Landed in http://trac.webkit.org/changeset/100880

It broke Qt-ARM, Qt-Windows, Qt-MIPS and Qt-SH4 build:

In file included from ../../../../Source/JavaScriptCore/dfg/DFGRepatch.cpp:27:
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:53: error: variable or field &apos;dfgResetGetByID&apos; declared void
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:53: error: &apos;RepatchBuffer&apos; was not declared in this scope
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:53: error: expected primary-expression before &apos;,&apos; token
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:53: error: &apos;StructureStubInfo&apos; was not declared in this scope
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:53: error: expected primary-expression before &apos;)&apos; token
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:54: error: variable or field &apos;dfgResetPutByID&apos; declared void
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:54: error: &apos;RepatchBuffer&apos; was not declared in this scope
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:54: error: expected primary-expression before &apos;,&apos; token
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:54: error: &apos;StructureStubInfo&apos; was not declared in this scope
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:54: error: expected primary-expression before &apos;)&apos; token</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506764</commentid>
    <comment_count>27</comment_count>
      <attachid>116043</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-21 00:26:37 -0800</bug_when>
    <thetext>Created attachment 116043
build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506782</commentid>
    <comment_count>28</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-11-21 01:04:47 -0800</bug_when>
    <thetext>&gt; Created an attachment (id=116043) [details]

Build fix landed in http://trac.webkit.org/changeset/100888</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115728</attachid>
            <date>2011-11-17 20:01:08 -0800</date>
            <delta_ts>2011-11-17 23:17:40 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>weakcaches_patch_1.diff</filename>
            <type>text/plain</type>
            <size>42971</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDExLTExLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5saW5lIGNhY2hlcyB0aGF0IHJlZmVyIHRvIG90aGVyd2lzZSBkZWFkIG9iamVjdHMgc2hvdWxk
IGJlIGNsZWFyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyMzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgREZHIGNvZGUgYmxvY2tzIG5vdyBwYXJ0aWNpcGF0ZSBpbiB0aGUgd2VhayByZWZlcmVuY2Ug
aGFydmVzdGVyIGZpeHBvaW50CisgICAgICAgIHNvIHRoYXQgdGhleSBvbmx5IGNvbnNpZGVyIHRo
ZW1zZWx2ZXMgdG8gYmUgbGl2ZSBpZiBlaXRoZXIgdGhleSBhcmUKKyAgICAgICAgY3VycmVudGx5
IGV4ZWN1dGluZywgb3IgdGhlaXIgb3duZXIgaXMgbGl2ZSBhbmQgYWxsIG9mIHRoZWlyIHdlYWsg
cmVmZXJlbmNlcworICAgICAgICBhcmUgbGl2ZS4gSWYgbm90LCB0aGUgcmVsZXZhbnQgY29kZSBi
bG9ja3MgYXJlIGpldHRpc29uZWQuCisKKyAgICAgICAgSW5saW5lIGNhY2hlcyBpbiBib3RoIHRo
ZSBvbGQgSklUIGFuZCB0aGUgREZHIGFyZSBub3cgY2xlYXJlZCBpZiBhbnkgb2YKKyAgICAgICAg
dGhlaXIgcmVmZXJlbmNlcyBhcmUgbm90IG1hcmtlZCBhdCB0aGUgZW5kIG9mIGEgR0MuCisKKyAg
ICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsIG9uIGNvbW1hbmQtbGluZTsgc3RpbGwg
dGVzdGluZyB0byBzZWUgd2hhdCB0aGUKKyAgICAgICAgYnJvYWRlciBlZmZlY3RzIGFyZS4gICAg
ICAgIAorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwZXJmb3JtVHJhY2lu
Z0ZpeHBvaW50SXRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdFdlYWtS
ZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
ZW5jZXMpOgorICAgICAgICAoSlNDOjpNZXRob2RDYWxsTGlua0luZm86OnJlc2V0KToKKyAgICAg
ICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlNDOjpFdmFs
Q29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpq
ZXR0aXNvbik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cmVvcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxk
SW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4pOgorICAgICAgICAqIGJ5dGVjb2Rl
L0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdDo6dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2Vz
KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAoSlND
Ojppc0dldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjppc1B1dEJ5SWRBY2Nlc3MpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUmVwYXRj
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVwYXRjaEJ5SWRTZWxmQWNjZXNzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpkZmdSZXNldEdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OmRm
Z1Jlc2V0UHV0QnlJRCk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpkZmdSZXNldEdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OmRmZ1Jlc2V0UHV0
QnlJRCk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRQYXRjaEdldEJ5SWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMu
Y3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogaml0
L0pJVFdyaXRlQmFycmllci5oOgorICAgICAgICAoSlNDOjpKSVRXcml0ZUJhcnJpZXJCYXNlOjpj
bGVhclRvTWF4VW5zaWduZWQpOgorCiAyMDExLTExLTE3ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBh
cm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDTWFrZV0gTW92ZSBGQVNUX01BTExPQyBzcGVj
aWZpYyBsaW5lcyBmcm9tIFBsYXRmb3JtKi5jbWFrZSB0byBDTWFrZUxpc3RzLnR4dApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw4ICszNywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTGlua0J1ZmZlcjsKIGNsYXNz
IFJlcGF0Y2hCdWZmZXI7CitzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CiBuYW1lc3BhY2UgREZH
IHsKIGNsYXNzIENvcnJlY3RhYmxlSnVtcFBvaW50Owordm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVw
YXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBB
c3NlbWJsZXJUeXBlPgpAQCAtNTQ3LDYgKzU0OSw3IEBAIHByb3RlY3RlZDoKIAogICAgIGZyaWVu
ZCBjbGFzcyBMaW5rQnVmZmVyOwogICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOworICAg
IGZyaWVuZCB2b2lkIERGRzo6ZGZnUmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwogCiAgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSnVt
cCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEwMDY3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw5ICszMywxMSBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2lu
Y2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCisjaW5jbHVkZSAiSklUU3R1YnMuaCIKICNp
bmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNTdGF0aWNTY29wZU9iamVjdC5oIgpAQCAtMTU4Nyw2ICsxNTg5LDIwOSBAQCB2b2lkIENv
ZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiB7CiAgICAgaWYgKCEhbV9hbHRlcm5h
dGl2ZSkKICAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisK
KyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgdGhpbmdzIHRoYXQgbWF5IHVzZSB1bmNvbmRpdGlvbmFs
IGZpbmFsaXplcnM6IGxhenkgYnl0ZWNvZGUgZnJlZWluZywKKyAgICAvLyBpbmxpbmUgY2FjaGUg
Y2xlYXJpbmcsIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcg
dG8gZG8gYXQKKyAgICAvLyBsZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdzIGlzIHByb2JhYmx5IHF1
aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQKKyAgICAvLyBhbmQg
d2hlbiBpdCBydW5zLCBpdCBmaWd1cmVzIG91dCB3aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0byBk
by4KKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIodGhpcyk7CisgICAgCisg
ICAgaWYgKHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkpIHsKKyAg
ICAgICAgLy8gVGhpcyBjb2RlIGJsb2NrIGlzIGxpdmUsIHNvIHNjYW4gYWxsIHJlZmVyZW5jZXMg
c3Ryb25nbHkgYW5kIHJldHVybi4KKyAgICAgICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5j
ZXModmlzaXRvcik7CisgICAgICAgIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAg
ICAvLyBXZSBnZXQgaGVyZSBpZiB3ZSdyZSBsaXZlIGluIHRoZSBzZW5zZSB0aGF0IG91ciBvd25l
ciBleGVjdXRhYmxlIGlzIGxpdmUsCisgICAgLy8gYnV0IHdlJ3JlIG5vdCB5ZXQgbGl2ZSBmb3Ig
c3VyZSBpbiBhbm90aGVyIHNlbnNlOiB3ZSBtYXkgeWV0IGRlY2lkZSB0aGF0IHRoaXMKKyAgICAv
LyBjb2RlIGJsb2NrIHNob3VsZCBiZSBqZXR0aXNvbmVkIGJhc2VkIG9uIGl0cyBvdXRnb2luZyB3
ZWFrIHJlZmVyZW5jZXMgYmVpbmcKKyAgICAvLyBzdGFsZS4gU2V0IGEgZmxhZyB0byBpbmRpY2F0
ZSB0aGF0IHdlJ3JlIHN0aWxsIGFzc3VtaW5nIHRoYXQgd2UncmUgZGVhZCwgYW5kCisgICAgLy8g
cGVyZm9ybSBvbmUgcm91bmQgb2YgZGV0ZXJtaW5pbmcgaWYgd2UncmUgbGl2ZS4gVGhlIEdDIG1h
eSBkZXRlcm1pbmUsIGJhc2VkIG9uCisgICAgLy8gZWl0aGVyIHVzIG1hcmtpbmcgYWRkaXRpb25h
bCBvYmplY3RzLCBvciBieSBvdGhlciBvYmplY3RzIGJlaW5nIG1hcmtlZCBmb3IKKyAgICAvLyBv
dGhlciByZWFzb25zLCB0aGF0IHRoaXMgaXRlcmF0aW9uIHNob3VsZCBydW4gYWdhaW47IGl0IHdp
bGwgbm90aWZ5IHVzIG9mIHRoaXMKKyAgICAvLyBkZWNpc2lvbiBieSBjYWxsaW5nIGhhcnZlc3RX
ZWFrUmVmZXJlbmNlcygpLgorICAgIAorICAgIG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVuUHJv
dmVkID0gZmFsc2U7CisgICAgbV9kZmdEYXRhLT5hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2Vk
ID0gZmFsc2U7CisgICAgCisgICAgcGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJhdGlvbih2aXNp
dG9yKTsKKworICAgIC8vIEFkZCBhIHdlYWsgcmVmZXJlbmNlIGhhcnZlc3RlciBpZiB3ZSBoYXZl
IG5vdCByZWFjaGVkIGZpeHBvaW50IGFuZCBuZWVkIHRvCisgICAgLy8gcnVuIGFnYWluLgorICAg
IGlmICghKG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkICYmIG1fZGZnRGF0YS0+YWxs
VHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCkpCisgICAgICAgIHZpc2l0b3IuYWRkV2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlcih0aGlzKTsKKyAgICAKKyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQorCit2
b2lkIENvZGVCbG9jazo6cGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJhdGlvbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgCisjaWYgRU5B
QkxFKERGR19KSVQpCisgICAgLy8gRXZhbHVhdGUgb3VyIHdlYWsgcmVmZXJlbmNlIHRyYW5zaXRp
b25zLCBpZiB0aGVyZSBhcmUgc3RpbGwgc29tZSB0byBldmFsdWF0ZS4KKyAgICBpZiAoIW1fZGZn
RGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCkgeworICAgICAgICBib29sIGFsbEFy
ZU1hcmtlZFNvRmFyID0gdHJ1ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
ZGZnRGF0YS0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgoIW1f
ZGZnRGF0YS0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luCisgICAgICAgICAgICAgICAgIHx8
IEhlYXA6OmlzTWFya2VkKG1fZGZnRGF0YS0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luLmdl
dCgpKSkKKyAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChtX2RmZ0RhdGEtPnRyYW5z
aXRpb25zW2ldLm1fZnJvbS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZm9s
bG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhlbiB0aGUgdGFyZ2V0IG9mIHRoZQorICAg
ICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxzbyBsaXZlOgorICAgICAgICAgICAgICAg
IC8vIC0gVGhpcyBjb2RlIGJsb2NrLiBXZSBrbm93IGl0J3MgbGl2ZSBhbHJlYWR5IGJlY2F1c2Ug
b3RoZXJ3aXNlCisgICAgICAgICAgICAgICAgLy8gICB3ZSB3b3VsZG4ndCBiZSBzY2FubmluZyBv
dXJzZWx2ZXMuCisgICAgICAgICAgICAgICAgLy8gLSBUaGUgY29kZSBvcmlnaW4gb2YgdGhlIHRy
YW5zaXRpb24uIFRyYW5zaXRpb25zIG1heSBhcmlzZSBmcm9tCisgICAgICAgICAgICAgICAgLy8g
ICBjb2RlIHRoYXQgd2FzIGlubGluZWQuIFRoZXkgYXJlIG5vdCByZWxldmFudCBpZiB0aGUgdXNl
cidzCisgICAgICAgICAgICAgICAgLy8gICBvYmplY3QgdGhhdCBpcyByZXF1aXJlZCBmb3IgdGhl
IGlubGluZWUgdG8gcnVuIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgIC8vICAgbGl2ZS4K
KyAgICAgICAgICAgICAgICAvLyAtIFRoZSBzb3VyY2Ugb2YgdGhlIHRyYW5zaXRpb24uIFRoZSB0
cmFuc2l0aW9uIGNoZWNrcyBpZiBzb21lCisgICAgICAgICAgICAgICAgLy8gICBoZWFwIGxvY2F0
aW9uIGhvbGRzIHRoZSBzb3VyY2UsIGFuZCBpZiBzbywgc3RvcmVzIHRoZSB0YXJnZXQuCisgICAg
ICAgICAgICAgICAgLy8gICBIZW5jZSB0aGUgc291cmNlIG11c3QgYmUgbGl2ZSBmb3IgdGhlIHRy
YW5zaXRpb24gdG8gYmUgbGl2ZS4KKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9k
ZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChhbGxBcmVNYXJrZWRTb0ZhcikKKyAgICAgICAgICAgIG1fZGZnRGF0YS0+
YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIC8v
IENoZWNrIGlmIHdlIGhhdmUgYW55IHJlbWFpbmluZyB3b3JrIHRvIGRvLgorICAgIGlmIChtX2Rm
Z0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IC8vIE5vdyBjaGVjayBhbGwgb2Ygb3VyIHdlYWsgcmVmZXJlbmNlcy4gSWYgYWxsIG9mIHRoZW0g
YXJlIGxpdmUsIHRoZW4gd2UKKyAgICAvLyBoYXZlIHByb3ZlZCBsaXZlbmVzcyBhbmQgc28gd2Ug
c2NhbiBvdXIgc3Ryb25nIHJlZmVyZW5jZXMuIElmIGF0IGVuZCBvZgorICAgIC8vIEdDIHdlIHN0
aWxsIGhhdmUgbm90IHByb3ZlZCBsaXZlbmVzcywgdGhlbiB0aGlzIGNvZGUgYmxvY2sgaXMgdG9h
c3QuCisgICAgYm9vbCBhbGxBcmVMaXZlU29GYXIgPSB0cnVlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQo
KSkpIHsKKyAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gSWYgc29tZSB3ZWFrIHJlZmVy
ZW5jZXMgYXJlIGRlYWQsIHRoZW4gdGhpcyBmaXhwb2ludCBpdGVyYXRpb24gd2FzCisgICAgLy8g
dW5zdWNjZXNzZnVsLgorICAgIGlmICghYWxsQXJlTGl2ZVNvRmFyKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgLy8gQWxsIHdlYWsgcmVmZXJlbmNlcyBhcmUgbGl2ZS4gUmVjb3JkIHRoaXMg
aW5mb3JtYXRpb24gc28gd2UgZG9uJ3QKKyAgICAvLyBjb21lIGJhY2sgaGVyZSBhZ2FpbiwgYW5k
IHNjYW4gdGhlIHN0cm9uZyByZWZlcmVuY2VzLgorICAgIG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNC
ZWVuUHJvdmVkID0gdHJ1ZTsKKyAgICBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNp
dG9yKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6OnZp
c2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgcGVyZm9ybVRy
YWNpbmdGaXhwb2ludEl0ZXJhdGlvbih2aXNpdG9yKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQor
ICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSB0cnVlOworI2Vsc2UKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlVW5saW5raW5nID0gZmFsc2U7CisjZW5kaWYKKyAg
ICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBDaGVjayBpZiB3ZSdyZSBub3QgbGl2ZS4g
SWYgd2UgYXJlLCB0aGVuIGpldHRpc29uLgorICAgIGlmICghKHNob3VsZEltbWVkaWF0ZWx5QXNz
dW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkgfHwgbV9kZmdEYXRhLT5saXZlbmVzc0hhc0JlZW5Qcm92
ZWQpKSB7CisgICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICAgICAgcHJpbnRm
KCJDb2RlIGJsb2NrICVwIGhhcyBkZWFkIHdlYWsgcmVmZXJlbmNlcywgamV0dGlzb25pbmcgZHVy
aW5nIEdDLlxuIiwgdGhpcyk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJhc2Vs
aW5lIEpJVCBrbm93cyB0aGF0IGl0IHNob3VsZCByZS13YXJtLXVwIGJlZm9yZQorICAgICAgICAv
LyBvcHRpbWl6aW5nLgorICAgICAgICBhbHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVw
KCk7CisgICAgICAgIAorICAgICAgICBqZXR0aXNvbigpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAg
Ly8gSGFuZGxlIGlubGluZSBjYWNoZXMuCisgICAgaWYgKCEhZ2V0SklUQ29kZSgpKSB7CisgICAg
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChjYWxsTGlua0luZm8oaSkuaXNMaW5rZWQoKSAmJiAhSGVhcDo6aXNNYXJrZWQoY2Fs
bExpbmtJbmZvKGkpLmNhbGxlZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZVVubGlua2luZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDbGVhcmluZyBjYWxsIGZy
b20gJXAuXG4iLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8oaSkudW5saW5r
KCptX2dsb2JhbERhdGEsIHJlcGF0Y2hCdWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCEhY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlCisgICAgICAgICAgICAgICAg
JiYgIUhlYXA6OmlzTWFya2VkKGNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZS5nZXQoKSkp
CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlLmNsZWFyKCk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fZ2xvYmFsUmVzb2x2ZUlu
Zm9zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX2ds
b2JhbFJlc29sdmVJbmZvc1tpXS5zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fZ2xvYmFs
UmVzb2x2ZUluZm9zW2ldLnN0cnVjdHVyZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDbGVhcmluZyBy
ZXNvbHZlIGluZm8gaW4gJXAuXG4iLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2dsb2JhbFJl
c29sdmVJbmZvc1tpXS5zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXpl
KCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSBtX3N0cnVjdHVyZVN0dWJJbmZvc1tpXTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8uYWNjZXNzVHlwZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHVi
SW5mby52aXNpdFdlYWtSZWZlcmVuY2VzKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICAg
ICAgICAgIHByaW50ZigiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICVkKSBpbiAlcC5c
biIsIHN0dWJJbmZvLmFjY2Vzc1R5cGUsIHRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoaXNHZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAgICAg
ICAgICAgICBERkc6OmRmZ1Jlc2V0R2V0QnlJRChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBKSVQ6OnJlc2V0UGF0Y2hH
ZXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHViSW5mbyk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIEFTU0VSVChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpOworICAg
ICAgICAgICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJ
VCkKKyAgICAgICAgICAgICAgICAgICAgREZHOjpkZmdSZXNldFB1dEJ5SUQocmVwYXRjaEJ1ZmZl
ciwgc3R1YkluZm8pOworICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgICAg
IEpJVDo6cmVzZXRQYXRjaFB1dEJ5SWQocmVwYXRjaEJ1ZmZlciwgJnN0dWJJbmZvKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkluZm8ucmVzZXQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX21ldGhvZENhbGxMaW5rSW5m
b3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgaWYgKCFtX21l
dGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkU3RydWN0dXJlKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQobV9tZXRob2RDYWxsTGlu
a0luZm9zW2ldLnNlZW5PbmNlKCkpOworICAgICAgICAgICAgQVNTRVJUKCEhbV9tZXRob2RDYWxs
TGlua0luZm9zW2ldLmNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQobV9tZXRob2RDYWxsTGlua0luZm9zW2ldLmNhY2hlZFN0cnVjdHVy
ZS5nZXQoKSkKKyAgICAgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQobV9tZXRob2RDYWxs
TGlua0luZm9zW2ldLmNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAg
ICAgICB8fCAhSGVhcDo6aXNNYXJrZWQobV9tZXRob2RDYWxsTGlua0luZm9zW2ldLmNhY2hlZEZ1
bmN0aW9uLmdldCgpKQorICAgICAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZChtX21ldGhv
ZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90eXBlLmdldCgpKSkgeworICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNs
ZWFyaW5nIG1ldGhvZCBjYWxsIGluICVwLlxuIiwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9t
ZXRob2RDYWxsTGlua0luZm9zW2ldLnJlc2V0KHJlcGF0Y2hCdWZmZXIsIGdldEpJVFR5cGUoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIC8vIEhhbmRs
ZSB0aGUgYnl0ZWNvZGUgZGlzY2FyZGluZyBjaG9yZS4KKyAgICBpZiAobV9zaG91bGREaXNjYXJk
Qnl0ZWNvZGUpIHsKKyAgICAgICAgZGlzY2FyZEJ5dGVjb2RlKCk7CisgICAgICAgIG1fc2hvdWxk
RGlzY2FyZEJ5dGVjb2RlID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIENvZGVCbG9jazo6c3Ry
b25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CiAgICAg
dmlzaXRvci5hcHBlbmQoJm1fZ2xvYmFsT2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9v
d25lckV4ZWN1dGFibGUpOwogICAgIGlmIChtX3JhcmVEYXRhKSB7CkBAIC0xNjAxLDQyICsxODA2
LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAgICAgICAg
dmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rpb25FeHByc1tpXSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZtX2Z1bmN0aW9uRGVjbHNbaV0pOwotI2lmIEVOQUJMRShKSVQpCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKLSAgICAgICAg
aWYgKGNhbGxMaW5rSW5mbyhpKS5pc0xpbmtlZCgpKQotICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoJmNhbGxMaW5rSW5mbyhpKS5jYWxsZWUpOwotICAgICAgICBpZiAoISFjYWxsTGlua0luZm8o
aSkubGFzdFNlZW5DYWxsZWUpCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmY2FsbExpbmtJ
bmZvKGkpLmxhc3RTZWVuQ2FsbGVlKTsKLSAgICB9Ci0jZW5kaWYKICNpZiBFTkFCTEUoSU5URVJQ
UkVURVIpCiAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgdmlzaXRTdHJ1Y3R1cmVz
KHZpc2l0b3IsICZpbnN0cnVjdGlvbnMoKVttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ld
XSk7CiAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9ucy5z
aXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICB2aXNpdFN0cnVjdHVyZXModmlz
aXRvciwgJmluc3RydWN0aW9ucygpW21fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uc1tpXV0pOwog
I2VuZGlmCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBmb3IgKHNpemVfdCBzaXplID0gbV9nbG9iYWxS
ZXNvbHZlSW5mb3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAo
bV9nbG9iYWxSZXNvbHZlSW5mb3NbaV0uc3RydWN0dXJlKQotICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmQoJm1fZ2xvYmFsUmVzb2x2ZUluZm9zW2ldLnN0cnVjdHVyZSk7Ci0gICAgfQotCi0gICAg
Zm9yIChzaXplX3Qgc2l6ZSA9IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSwgaSA9IDA7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgIG1fc3RydWN0dXJlU3R1YkluZm9zW2ldLnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwotCi0gICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fbWV0aG9kQ2FsbExpbmtJ
bmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChtX21ldGhv
ZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkU3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAvLyBUaGVz
ZSBtZW1iZXJzIG11c3QgYmUgZmlsbGVkIGF0IHRoZSBzYW1lIHRpbWUsIGFuZCBvbmx5IGFmdGVy
Ci0gICAgICAgICAgICAvLyB0aGUgTWV0aG9kQ2FsbExpbmtJbmZvIGlzIHNldCBhcyBzZWVuLgot
ICAgICAgICAgICAgQVNTRVJUKG1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5zZWVuT25jZSgpKTsK
LSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2Fj
aGVkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIEFTU0VSVCghIW1fbWV0aG9kQ2FsbExpbmtJbmZv
c1tpXS5jYWNoZWRQcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoJm1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRQcm90b3R5cGVTdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNo
ZWRGdW5jdGlvbik7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9tZXRob2RDYWxsTGlu
a0luZm9zW2ldLmNhY2hlZFByb3RvdHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKIAog
I2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChoYXNDb2RlT3JpZ2lucygpKSB7CkBAIC0xNjUz
LDE1ICsxODI4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAog
ICAgIGZvciAodW5zaWduZWQgcHJvZmlsZUluZGV4ID0gMDsgcHJvZmlsZUluZGV4IDwgbnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCk7ICsrcHJvZmlsZUluZGV4KQogICAgICAgICB2YWx1ZVByb2ZpbGUo
cHJvZmlsZUluZGV4KS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CiAjZW5kaWYKLSAgICAK
LSNpZiBFTkFCTEUoSklUKSAmJiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICAvLyBLaWxs
IG9mZiBzb21lIGJ5dGVjb2RlLiBXZSBjYW4ndCBkbyBpdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qg
d2FudCB0byBhY2NpZGVudGFsbHkKLSAgICAvLyBjYWxsIGludG8gbWFsbG9jIHdoaWxlIGluIHN0
b3AtdGhlLXdvcmxkIEdDIG1vZGUuCi0gICAgaWYgKGhhc0luc3RydWN0aW9ucygpICYmIG1fc2hv
dWxkRGlzY2FyZEJ5dGVjb2RlKQotICAgICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIodGhpcyk7Ci0jZW5kaWYKLSAgICAKLSAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5j
ZXModmlzaXRvcik7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODY3LDYgKzIwMzMsMjEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnVubGluayhKU0dsb2JhbERhdGEmIAogICAgICAgICByZW1vdmUoKTsKIH0K
IAordm9pZCBNZXRob2RDYWxsTGlua0luZm86OnJlc2V0KFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKK3sKKyAgICBjYWNoZWRTdHJ1Y3R1cmUu
Y2xlYXJUb01heFVuc2lnbmVkKCk7CisgICAgY2FjaGVkUHJvdG90eXBlLmNsZWFyKCk7CisgICAg
Y2FjaGVkUHJvdG90eXBlU3RydWN0dXJlLmNsZWFyVG9NYXhVbnNpZ25lZCgpOworICAgIGNhY2hl
ZEZ1bmN0aW9uLmNsZWFyKCk7CisgICAgCisgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZH
SklUKQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldE1ldGhvZE9wdGltaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGpp
dFR5cGUgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGN0aV9vcF9nZXRfYnlfaWRfbWV0aG9kX2NoZWNrKTsK
KyAgICB9Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxscygpCiB7CiAgICAgaWYgKCEh
bV9hbHRlcm5hdGl2ZSkKQEAgLTE5ODIsMzcgKzIxNjMsMjggQEAgYm9vbCBGdW5jdGlvbkNvZGVC
bG9jazo6Y2FuQ29tcGlsZVdpdGhERgogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlv
bkZvckNhbGwodGhpcyk7CiB9CiAKLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbigp
CiB7CiAgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiAg
ICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8UHJvZ3Jh
bUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZShn
bG9iYWxEYXRhKTsKKyAgICBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhl
Y3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCpnbG9iYWxEYXRhKCkpOwogfQogCi12
b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3Zv
aWQgRXZhbENvZGVCbG9jazo6amV0dGlzb24oKQogewogICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
IT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50
KCkpOwotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7CisgICAgc3RhdGljX2Nhc3Q8RXZh
bEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZSgq
Z2xvYmFsRGF0YSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24o
KQogewogICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwog
ICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwotICAgIHN0YXRpY19jYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2Rl
Rm9yKGdsb2JhbERhdGEsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2Rl
Rm9yQ2FsbCk7CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVj
dXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKmdsb2JhbERhdGEoKSwgbV9pc0Nv
bnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKIH0KICNlbmRpZgog
Ci12b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQotewotI2lmIEVOQUJM
RShPUENPREVfU0FNUExJTkcpIHx8ICFFTkFCTEUoSklUKQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotI2VuZGlmCi0gICAgQVNTRVJUKG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlKTsKLSAgICBk
aXNjYXJkQnl0ZWNvZGUoKTsKLX0KLQogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKIGJvb2wg
Q29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
MSw2ICsxNzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgc2Vl
biA9IHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVzZXQoUmVwYXRj
aEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgSklUQ29kZTo6SklUVHlwZSk7CiAKICAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleDsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJu
TG9jYXRpb247CkBAIC0yNTAsNyArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXpl
ciB7CisgICAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIs
IHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgcHVibGljOgpAQCAtMjk0
LDEwICsyOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjYW5Qcm9kdWNlQ29w
eVdpdGhCeXRlY29kZSgpIHsgcmV0dXJuIGhhc0luc3RydWN0aW9ucygpOyB9CiAKICAgICAgICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgICAgICAKLSAgICAgICAgLy8g
Q2FsbCB0aGlzIGlmIHlvdSBhcmUgbm90IGpldHRpc29uaW5nIGEgY29kZSBibG9jaywgYW5kIHRo
dXMKLSAgICAgICAgLy8gaGF2ZSBubyBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgaXQgd2lsbCBu
ZXZlciBiZSBjYWxsZWQgaW50byBhZ2Fpbi4KLSAgICAgICAgdm9pZCBzdHJvbmdseVZpc2l0V2Vh
a1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkdW1wU3Rh
dGlzdGljcygpOwogCkBAIC01MzcsNyArNTM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJuIG1faml0Q29kZS5qaXRUeXBl
KCk7IH0KICAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0YWJsZU1lbW9yeSgp
IHsgcmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlTWVtb3J5KCk7IH0KICAgICAgICAg
dmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWlu
Tm9kZSopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYp
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCkgPSAwOwogICAgICAgICB2aXJ0
dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBj
YW5Db21waWxlV2l0aERGRygpID0gMDsKICAgICAgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpCkBAIC0xMDYwLDEwICsxMDU4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAg
ICAgICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZvaWQgcmVvcHRpbWl6ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHZvaWQgcmVvcHRpbWl6ZSgpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudCgpICE9IHRoaXMpOwotICAgICAgICAgICAg
cmVwbGFjZW1lbnQoKS0+amV0dGlzb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXBsYWNl
bWVudCgpLT5qZXR0aXNvbigpOwogICAgICAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigpOwog
ICAgICAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgICAgICB9CkBAIC0xMDg1LDYg
KzEwODMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX3Nob3VsZERpc2NhcmRC
eXRlY29kZTsKIAogICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vh
a1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CkBAIC0xMTAxLDYgKzEx
MDAsMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoRXhl
Y1N0YXRlKiwgaW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRv
ciYsIGNvbnN0IGNoYXIqIG9wKSBjb25zdDsKICNlbmRpZgogICAgICAgICB2b2lkIHZpc2l0U3Ry
dWN0dXJlcyhTbG90VmlzaXRvciYsIEluc3RydWN0aW9uKiB2UEMpIGNvbnN0OworICAgICAgICAK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3Vt
ZUxpdmVuZXNzRHVyaW5nU2NhbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEFtIEkgYSBE
RkcgY29kZSBibG9jaz8gSWYgbm90LCB0aGVuIEknbSBsaXZlIGlmIEkgYW0gYmVpbmcgc2Nhbm5l
ZC4KKyAgICAgICAgICAgIGlmICghbV9kZmdEYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiBJIGFtIGEgREZHIGNvZGUgYmxv
Y2ssIHRoZW4gYW0gSSBjdXJyZW50bHkgZXhlY3V0aW5nPyBJZiBzbywKKyAgICAgICAgICAgIC8v
IHRoZW4gSSdtIGRlZmluaXRlbHkgbGl2ZS4KKyAgICAgICAgICAgIGlmIChtX2RmZ0RhdGEtPm1h
eUJlRXhlY3V0aW5nKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGJv
b2wgc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB7IHJldHVybiB0
cnVlOyB9CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgcGVyZm9ybVRyYWNpbmdGaXhw
b2ludEl0ZXJhdGlvbihTbG90VmlzaXRvciYpOworICAgICAgICAKKyAgICAgICAgdm9pZCBzdHJv
bmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgICAgICB2b2lkIHN0
cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogCiAgICAgICAgIHZvaWQg
Y3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpCiAgICAgICAgIHsKQEAgLTExNzcsNiArMTE5OSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Nl
bGw+ID4gd2Vha1JlZmVyZW5jZXM7CiAgICAgICAgICAgICBib29sIG1heUJlRXhlY3V0aW5nOwog
ICAgICAgICAgICAgYm9vbCBpc0pldHRpc29uZWQ7CisgICAgICAgICAgICBib29sIGxpdmVuZXNz
SGFzQmVlblByb3ZlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCisgICAg
ICAgICAgICBib29sIGFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVk
IGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgICAgICB9OwogICAgICAgICAKICAgICAgICAgT3du
UHRyPERGR0RhdGE+IG1fZGZnRGF0YTsKQEAgLTEyNzgsNyArMTMwMiw3IEBAIG5hbWVzcGFjZSBK
U0MgewogI2lmIEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNl
bWVudCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRp
ZgpAQCAtMTMxMiw3ICsxMzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkK
ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6
ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpl
dHRpc29uKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsK
ICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlmCkBAIC0xMzQ5LDcgKzEzNzMsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVC
bG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRo
REZHKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0YSwgb3du
ZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0Q2hhaW4sIGlzRGlyZWN0KTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGludCBjb3VudCkKKyAgICAgICAgYm9vbCB2aXNpdFdlYWsoaW50IGNvdW50KQogICAgICAgICB7
CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAg
ICAgICAgICBQb2x5bW9ycGhpY1N0dWJJbmZvJiBpbmZvID0gbGlzdFtpXTsKQEAgLTEyNCwxMiAr
MTI0LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoJmluZm8uYmFzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm8udS5wcm90
byAmJiAhaW5mby5pc0NoYWluKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
aW5mby51LnByb3RvKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby51LmNoYWluICYmIGluZm8u
aXNDaGFpbikKLSAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmluZm8udS5jaGFp
bik7CisgICAgICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChpbmZvLmJhc2UuZ2V0KCkp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYg
KGluZm8udS5wcm90byAmJiAhaW5mby5pc0NoYWluCisgICAgICAgICAgICAgICAgICAgICYmICFI
ZWFwOjppc01hcmtlZChpbmZvLnUucHJvdG8uZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGluZm8udS5jaGFpbiAmJiBpbmZvLmlz
Q2hhaW4KKyAgICAgICAgICAgICAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKGluZm8udS5jaGFp
bi5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDQ4ICs2Miw1NSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgfQog
fQogCi12b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoKQog
ewogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9z
ZWxmOgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUu
Z2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90
bzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1
Y3R1cmUpOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5nZXRCeUlkUHJvdG8ucHJvdG90eXBl
U3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KHUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICB8
fCAhSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5nZXRCeUlk
Q2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1Lmdl
dEJ5SWRDaGFpbi5jaGFpbik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFIZWFwOjpp
c01hcmtlZCh1LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKQorICAgICAg
ICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGZfbGlzdDogewogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVy
ZUxpc3Q7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRBZ2dyZWdhdGUodmlz
aXRvciwgdS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmICghcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT52aXNpdFdlYWsodS5nZXRCeUlkU2VsZkxp
c3QubGlzdFNpemUpKSB7CisgICAgICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDogewogICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUu
Z2V0QnlJZFByb3RvTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZXMtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IsIHUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6
ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVjdHVyZXMt
PnZpc2l0V2Vhayh1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpIHsKKyAgICAgICAgICAgIGRl
bGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF90cmFuc2l0aW9uOgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5wdXRCeUlkVHJhbnNpdGlv
bi5wcmV2aW91c1N0cnVjdHVyZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIUhlYXA6Omlz
TWFya2VkKHUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCkpCisgICAg
ICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUu
Z2V0KCkpCisgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlv
bi5jaGFpbi5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgICAgICB2aXNpdG9yLmFw
cGVuZCgmdS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9n
ZW5lcmljOgotICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9nZW5lcmljOgotICAgIGNhc2UgYWNj
ZXNzX2dldF9hcnJheV9sZW5ndGg6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X3N0cmluZ19sZW5ndGg6
Ci0gICAgICAgIC8vIFRoZXNlIGluc3RydWN0aW9ucyBkb24ndCBuZWVkIHRvIG1hcmsgYW55dGhp
bmcKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJ
ZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGRvbid0
IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworICAgICAgICAvLyBk
byBhbnl0aGluZy4KKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIHJldHVybiB0cnVlOwogfQog
I2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGFjY2Vzc19nZXRfc3RyaW5nX2xl
bmd0aCwKICAgICB9OwogCisgICAgaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAg
ICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0
X2J5X2lkX3Byb3RvOgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CisgICAg
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3Q6CisgICAgICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9wcm90b19saXN0OgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfZ2Vu
ZXJpYzoKKyAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICAgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X3N0cmluZ19sZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBpbmxpbmUgYm9vbCBpc1B1dEJ5SWRBY2Nlc3MoQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uOgorICAgICAgICBjYXNlIGFjY2Vzc19wdXRf
YnlfaWRfcmVwbGFjZToKKyAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2dlbmVyaWM6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHN0cnVjdCBTdHJ1Y3R1cmVTdHVi
SW5mbyB7CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkKICAgICAgICAgICAgIDogYWNjZXNz
VHlwZShhY2Nlc3NfdW5zZXQpCkBAIC0xMTMsMTAgKzE0MiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAKICAgICAgICAgICAgIHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5z
ZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIHJlc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IGFjY2Vzc191bnNldDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YlJv
dXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgfQogCiAgICAgICAgIHZv
aWQgZGVyZWYoKTsKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwog
CisgICAgICAgIGJvb2wgdmlzaXRXZWFrUmVmZXJlbmNlcygpOworICAgICAgICAKICAgICAgICAg
Ym9vbCBzZWVuT25jZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBzZWVuOwpAQCAt
MTQyLDE3ICsxNzksMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludDE2X3QgZGVsdGFD
YWxsVG9Eb25lOwogICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2s7CiAgICAg
ICAgIGludDE2X3QgZGVsdGFDYWxsVG9TbG93Q2FzZTsKKyAgICAgICAgaW50MTZfdCBkZWx0YUNo
ZWNrSW1tVG9DYWxsOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGludDE2X3QgZGVsdGFD
YWxsVG9Mb2FkT3JTdG9yZTsKKyNlbHNlCisgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9UYWdM
b2FkT3JTdG9yZTsKKyAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9y
ZTsKICNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgICAgIHVuaW9uIHsK
ICAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNoZWNr
SW1tVG9DYWxsOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgaW50MTZfdCBk
ZWx0YUNhbGxUb0xvYWRPclN0b3JlOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
ICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmU7Ci0gICAgICAgICAgICAg
ICAgaW50MTZfdCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZTsKLSNlbmRpZgorICAgICAg
ICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIHVud2lzZSB0byBwdXQgYW55dGhpbmcgaGVyZSwgYXMg
aXQgd2lsbCBzdXJlbHkgYmUgb3ZlcndyaXR0ZW4uCiAgICAgICAgICAgICB9IHVuc2V0OwogICAg
ICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3
LDEzICsxNTcsMTMgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgog
ICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVT
dHViSW5mbyhpKTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZnVuY3Rpb25D
YWxsKTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRp
b247Ci0gICAgICAgIGluZm8udS51bnNldC5kZWx0YUNoZWNrSW1tVG9DYWxsID0gZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNb
aV0ubV9kZWx0YUNoZWNrSW1tVG9DYWxsKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKKyAgICAgICAg
aW5mby5kZWx0YUNoZWNrSW1tVG9DYWxsID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNoZWNrSW1tVG9D
YWxsKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKICAgICAgICAgaW5mby5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpbmZvLnUudW5zZXQuZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9k
ZWx0YUNhbGxUb0xvYWRPclN0b3JlKSk7CisgICAgICAgIGluZm8uZGVsdGFDYWxsVG9Mb2FkT3JT
dG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0xvYWRP
clN0b3JlKSk7CiAjZWxzZQotICAgICAgICBpbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9UYWdMb2Fk
T3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxp
bmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlKSk7Ci0gICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb1BheWxvYWRM
b2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24s
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxU
b1BheWxvYWRMb2FkT3JTdG9yZSkpOworICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvVGFnTG9hZE9y
U3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9UYWdM
b2FkT3JTdG9yZSkpOworICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3Jl
ID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvUGF5bG9hZExv
YWRPclN0b3JlKSk7CiAjZW5kaWYKICAgICAgICAgaW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlID0g
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsK
ICAgICAgICAgaW5mby5kZWx0YUNhbGxUb0RvbmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vz
c2VzW2ldLm1fZGVsdGFDYWxsVG9Eb25lKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNSw4
ICszMjUsOSBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAg
SlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFt
ZSwgc2xvdCk7Ci0KLSAgICBNZXRob2RDYWxsTGlua0luZm8mIG1ldGhvZEluZm8gPSBleGVjLT5j
b2RlQmxvY2soKS0+Z2V0TWV0aG9kQ2FsbExpbmtJbmZvKHJldHVybkFkZHJlc3MpOworICAgIAor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgTWV0aG9k
Q2FsbExpbmtJbmZvJiBtZXRob2RJbmZvID0gY29kZUJsb2NrLT5nZXRNZXRob2RDYWxsTGlua0lu
Zm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgaWYgKG1ldGhvZEluZm8uc2Vlbk9uY2UoKSkKICAgICAg
ICAgZGZnUmVwYXRjaEdldE1ldGhvZChleGVjLCBiYXNlVmFsdWUsICpwcm9wZXJ0eU5hbWUsIHNs
b3QsIG1ldGhvZEluZm8pOwogICAgIGVsc2UKQEAgLTM2Nyw3ICszNjgsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFz
ZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFtZSwgc2xvdCk7Ci0KKyAgICAKICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1
YkluZm8ocmV0dXJuQWRkcmVzcyk7CiAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCiAgICAgICAgIGRm
Z1JlcGF0Y2hHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1
YkluZm8pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShy
ZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMiArNDksMTIgQEAgc3RhdGljIHZvaWQgZGZnUmVw
YXRjaEJ5SWRTZWxmQWNjZXNzKENvZAogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAvLyBQYXRjaCB0
aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KLSAgICByZXBhdGNo
QnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8udS51bnNldC5kZWx0YUNoZWNrSW1tVG9DYWxsKSwg
c3RydWN0dXJlKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8uZGVsdGFD
aGVja0ltbVRvQ2FsbCksIHN0cnVjdHVyZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAo
Y29tcGFjdCkKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0KTsKKyAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVv
ZihKU1ZhbHVlKSAqIG9mZnNldCk7CiAgICAgZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1
YkluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICog
b2Zmc2V0KTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvTG9hZE9y
U3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICBpZiAoY29tcGFjdCkgewogICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5m
by51LnVuc2V0LmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkgKiBv
ZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpOwpAQCAtNjUxLDYgKzY1MSwzNCBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVj
LCBDYWxsTGluCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxs
TGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7
CiB9CiAKK3ZvaWQgZGZnUmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWxQdHJBdE9mZnNldCgtKHVpbnRwdHJfdClzdHViSW5mby5kZWx0YUNoZWNrSW1tVG9D
YWxsKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChzdHViSW5mby5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQorCit2b2lkIGRm
Z1Jlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgVl9ERkdPcGVyYXRpb25fRUpDSSB1bm9wdGltaXplZEZ1
bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfREZHT3BlcmF0aW9uX0VKQ0k+KE1hY3JvQXNzZW1ibGVy
OjpyZWFkUG9pbnRlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uKSkpOworICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkRnVuY3Rpb247
CisgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCkK
KyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emU7CisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0KQorICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRO
b25TdHJpY3RPcHRpbWl6ZTsKKyAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgIGVsc2UgeworICAgICAg
ICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0KTsKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgfQorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOworICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRy
QXRPZmZzZXQoLSh1aW50cHRyX3Qpc3R1YkluZm8uZGVsdGFDaGVja0ltbVRvQ2FsbCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAko
cmV2aXNpb24gMTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDIxIEBAIHZvaWQgZGZnQnVpbGRHZXRCeUlE
TGlzdChFeGVjU3RhdGUqLCBKU1YKIHZvaWQgZGZnQnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBK
U1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0
dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqLCBDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Cit2b2lkIGRmZ1Jlc2V0R2V0QnlJRChS
ZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgZGZnUmVzZXRQdXRCeUlE
KFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKLSNlbmRpZgotI2VuZGlmCisjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKwordm9pZCBkZmdSZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0
dWJJbmZvJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQordm9pZCBkZmdSZXNldFB1dEJ5SUQo
UmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKyNlbmRpZiAvLyBERkdSZXBhdGNoX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwg
ZnVuYyk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdm9pZCByZXNldFBhdGNoR2V0QnlJ
ZChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8qKTsKKyAgICAgICAgc3RhdGljIHZv
aWQgcmVzZXRQYXRjaFB1dEJ5SWQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvKik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlYmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKICAgICAgICAgc3RhdGljIHZvaWQgcGF0
Y2hQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqIGNvZGVibG9jaywgU3RydWN0dXJlU3R1YkluZm8q
LCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIGJvb2wgZGlyZWN0KTsKICAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hNZXRob2RD
YWxsUHJvdG8oSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiBjb2RlYmxvY2ssIE1ldGhvZENhbGxM
aW5rSW5mbyYsIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqLCBSZXR1cm5BZGRyZXNz
UHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0Niw2ICsxMDQ2LDIx
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKEluc3RydWMKIAogI2VuZGlmIC8v
IFVTRShKU1ZBTFVFNjQpCiAKK3ZvaWQgSklUOjpyZXNldFBhdGNoR2V0QnlJZChSZXBhdGNoQnVm
ZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCit7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY3RpX29w
X2dldF9ieV9pZCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uZGF0YUxhYmVsUHRyQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKSwgc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpKTsKK30KKwordm9pZCBKSVQ6OnJl
c2V0UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3BfcHV0X2J5X2lkKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChwYXRj
aE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJl
bENvbXBhY3RBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCksIDAp
OworfQorCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBSZWdp
c3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFJlZ2lzdGVySUQgc2NyYXRjaDIsIFdy
aXRlQmFycmllck1vZGUgbW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kKQogewogICAg
IFVOVVNFRF9QQVJBTShvd25lcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MzgsNyArMTkzOCw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQogICAgICAgICAgICAgcHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVw
KCVwKSAoaW4gbG9vcCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7
CiAjZW5kaWYKLSAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0yMDA4LDcgKzIwMDgs
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgcHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0
aW9uIG9mICVwKCVwKSAoaW4gbG9vcCBhZnRlciBPU1IgZmFpbCkuXG4iLCBjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CiAjZW5kaWYKLSAgICAgICAgY29kZUJsb2NrLT5yZW9w
dGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgY29kZUJsb2NrLT5yZW9w
dGltaXplKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIwNDAsMTIgKzIwNDAsMTAg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogI2lmIEVOQUJMRShK
SVRfVkVSQk9TRV9PU1IpCiAgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6
YXRpb24gb2YgJXAoJXApIChpbiByZXR1cm4pLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCkpOwogI2VuZGlmCi0gICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGlt
aXplKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVT
b29uKCk7Ci0KLSAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3Jp
dGVCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRX
cml0ZUJhcnJpZXIuaAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXcml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBw
dWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKSB7IGNsZWFyKDApOyB9CisgICAg
dm9pZCBjbGVhclRvTWF4VW5zaWduZWQoKSB7IGNsZWFyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KC0xKSk7IH0KIAogcHJvdGVjdGVkOgogICAgIEpJVFdyaXRlQmFycmllckJhc2UoKQo=
</data>
<flag name="commit-queue"
          id="114717"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>115733</attachid>
            <date>2011-11-17 21:22:39 -0800</date>
            <delta_ts>2011-11-17 21:22:39 -0800</delta_ts>
            <desc>page.js</desc>
            <filename>page.js</filename>
            <type>text/plain</type>
            <size>1133</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">ZGVzY3JpcHRpb24oCiJUaGlzIHRlc3RzIHdoZXRoZXIgd2UgbGVhayBtZW1vcnkgZHVlIHRvIHBv
bHltb3JwaGljIGlubGluZSBjYWNoaW5nLiIKKTsKCmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCiAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CgpmdW5jdGlv
biBmb28obykgewogICAgdmFyIHJlc3VsdCA9IDA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDsgKytpKQogICAgICAgIHJlc3VsdCArPSBvLmY7CiAgICBjb25zb2xlLmxvZygiZm9vKCkgY2Fs
bGVkIHdpdGggby5mICogMTAwID0gIiArIHJlc3VsdCArICIhIik7Cn0KCmZ1bmN0aW9uIGRvTmV4
dCgpIHsKICAgIHdpbmRvdy5zZXRUaW1lb3V0KGRvaXQsIDEwKTsKfQoKZnVuY3Rpb24gZG9pdCgp
IHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmcmFtZXBhcmVudCIpLmlubmVySFRNTCA9
ICIiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lcGFyZW50IikuaW5uZXJIVE1M
ID0gIjxpZnJhbWUgaWQ9J3Rlc3RmcmFtZSc+IjsKICAgIHZhciB0ZXN0RnJhbWUgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgidGVzdGZyYW1lIik7CiAgICB0ZXN0RnJhbWUuY29udGVudERvY3Vt
ZW50Lm9wZW4oKTsKICAgIAogICAgY29kZSAgPSAiPCFET0NUWVBFIGh0bWw+XG48aGVhZD48L2hl
YWQ+PGJvZHk+PHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+XG4iOwogICAgY29kZSAr
PSAidmFyIGFycmF5ID0gW107XG4iOwogICAgY29kZSArPSAiXG4iOwogICAgY29kZSArPSAiZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwMDsgKytpKVxuIjsKICAgIGNvZGUgKz0gIiAgICBhcnJh
eS5wdXNoKGkpO1xuIjsKICAgIGNvZGUgKz0gIlxuIjsKICAgIGNvZGUgKz0gIndpbmRvdy5wYXJl
bnQuZm9vKHtmOjQyfSk7XG4iOwogICAgY29kZSArPSAid2luZG93LnBhcmVudC5kb05leHQoKTtc
biI7CiAgICBjb2RlICs9ICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CiAgICAKICAgIHRlc3RG
cmFtZS5jb250ZW50RG9jdW1lbnQud3JpdGUoY29kZSk7CiAgICB0ZXN0RnJhbWUuY29udGVudERv
Y3VtZW50LmNsb3NlKCk7Cn0KCndpbmRvdy5zZXRUaW1lb3V0KGRvaXQsIDEwKTsKCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>115734</attachid>
            <date>2011-11-17 21:23:39 -0800</date>
            <delta_ts>2011-11-17 21:23:39 -0800</delta_ts>
            <desc>page.html</desc>
            <filename>page.html</filename>
            <type>text/plain</type>
            <size>222</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgo8aHRtbD4KPGhl
YWQ+CjxzY3JpcHQgc3JjPSJMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9ImZyYW1lcGFyZW50Ij48L2Rp
dj4KPHNjcmlwdCBzcmM9InBhZ2UuanMiPjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115745</attachid>
            <date>2011-11-17 23:17:40 -0800</date>
            <delta_ts>2011-11-17 23:37:42 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>weakcaches_patch_2.diff</filename>
            <type>text/plain</type>
            <size>48367</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNzI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDExLTExLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5saW5lIGNhY2hlcyB0aGF0IHJlZmVyIHRvIG90aGVyd2lzZSBkZWFkIG9iamVjdHMgc2hvdWxk
IGJlIGNsZWFyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyMzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgREZHIGNvZGUgYmxvY2tzIG5vdyBwYXJ0aWNpcGF0ZSBpbiB0aGUgd2VhayByZWZlcmVuY2Ug
aGFydmVzdGVyIGZpeHBvaW50CisgICAgICAgIHNvIHRoYXQgdGhleSBvbmx5IGNvbnNpZGVyIHRo
ZW1zZWx2ZXMgdG8gYmUgbGl2ZSBpZiBlaXRoZXIgdGhleSBhcmUKKyAgICAgICAgY3VycmVudGx5
IGV4ZWN1dGluZywgb3IgdGhlaXIgb3duZXIgaXMgbGl2ZSBhbmQgYWxsIG9mIHRoZWlyIHdlYWsg
cmVmZXJlbmNlcworICAgICAgICBhcmUgbGl2ZS4gSWYgbm90LCB0aGUgcmVsZXZhbnQgY29kZSBi
bG9ja3MgYXJlIGpldHRpc29uZWQuCisKKyAgICAgICAgSW5saW5lIGNhY2hlcyBpbiBib3RoIHRo
ZSBvbGQgSklUIGFuZCB0aGUgREZHIGFyZSBub3cgY2xlYXJlZCBpZiBhbnkgb2YKKyAgICAgICAg
dGhlaXIgcmVmZXJlbmNlcyBhcmUgbm90IG1hcmtlZCBhdCB0aGUgZW5kIG9mIGEgR0MuCisKKyAg
ICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsIG9uIGNvbW1hbmQtbGluZTsgc3RpbGwg
dGVzdGluZyB0byBzZWUgd2hhdCB0aGUKKyAgICAgICAgYnJvYWRlciBlZmZlY3RzIGFyZS4gICAg
ICAgIAorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODY6OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6
OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3Ry
b25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpNZXRob2RDYWxsTGlu
a0luZm86OnJlc2V0KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24p
OgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6
OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVvcHRpbWl6ZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6c2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4p
OgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDo6dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oOgorICAgICAgICAoSlNDOjppc0dldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpp
c1B1dEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQp
OgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVwYXRj
aEJ5SWRTZWxmQWNjZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXNldEdldEJ5SUQpOgor
ICAgICAgICAoSlNDOjpERkc6OmRmZ1Jlc2V0UHV0QnlJRCk6CisgICAgICAgICogZGZnL0RGR1Jl
cGF0Y2guaDoKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXNldEdldEJ5SUQpOgorICAgICAgICAo
SlNDOjpERkc6OmRmZ1Jlc2V0UHV0QnlJRCk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRQ
YXRjaEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKToKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cmVzZXRQYXRjaEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0UGF0Y2hQdXRC
eUlkKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVf
U1RVQl9GVU5DVElPTik6CisgICAgICAgICogaml0L0pJVFdyaXRlQmFycmllci5oOgorICAgICAg
ICAoSlNDOjpKSVRXcml0ZUJhcnJpZXJCYXNlOjpjbGVhclRvTWF4VW5zaWduZWQpOgorCiAyMDEx
LTExLTE3ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFtDTWFrZV0gTW92ZSBGQVNUX01BTExPQyBzcGVjaWZpYyBsaW5lcyBmcm9tIFBsYXRmb3JtKi5j
bWFrZSB0byBDTWFrZUxpc3RzLnR4dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEw
MDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBMaW5rQnVmZmVyOwogY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKK3N0cnVjdCBTdHJ1
Y3R1cmVTdHViSW5mbzsKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgQ29ycmVjdGFibGVKdW1wUG9p
bnQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Ni5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
NSw2ICsyMDUsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQ
b2ludFRydW5jYXRlKCkgeyByZXR1cm4gaXNTU0UyUHJlc2VudCgpOyB9CiAgICAgc3RhdGljIGJv
b2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpIHsgcmV0dXJuIGlzU1NFMlByZXNlbnQoKTsg
fQogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludEFicygpIHsgcmV0dXJuIGlz
U1NFMlByZXNlbnQoKTsgfQorICAgIAorICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRh
cmdldChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCisgICAgeworICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSByZWludGVycHJldF9jYXN0PGludDMyX3QqPihjYWxsLmRhdGFMb2NhdGlvbigpKVstMV07
CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2FsbC5kYXRhTG9jYXRpb24oKSkgKyBvZmZzZXQpKTsK
KyAgICB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Nl82NC5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Nyw2ICs0
OTcsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRy
dW5jYXRlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRp
bmdQb2ludFNxcnQoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNG
bG9hdGluZ1BvaW50QWJzKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHN0YXRpYyBGdW5j
dGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCisgICAgeworICAg
ICAgICByZXR1cm4gRnVuY3Rpb25QdHIoWDg2QXNzZW1ibGVyOjpyZWFkUG9pbnRlcihjYWxsLmRh
dGFMYWJlbFB0ckF0T2Zmc2V0KC1SRVBUQUNIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9u
KCkpKTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDExIEBACiAjaW5jbHVkZSAiQnl0ZWNv
ZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJE
RkdOb2RlLmgiCisjaW5jbHVkZSAiREZHUmVwYXRjaC5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgi
CiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKKyNpbmNsdWRlICJK
SVRTdHVicy5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCkBAIC0xNTg3LDYgKzE1ODks
MjA5IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKIHsKICAgICBp
ZiAoISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVybmF0aXZlLT52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKKworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSB0aGluZ3MgdGhhdCBtYXkgdXNl
IHVuY29uZGl0aW9uYWwgZmluYWxpemVyczogbGF6eSBieXRlY29kZSBmcmVlaW5nLAorICAgIC8v
IGlubGluZSBjYWNoZSBjbGVhcmluZywgYW5kIGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkg
b2YgdXMgd2FudGluZyB0byBkbyBhdAorICAgIC8vIGxlYXN0IG9uZSBvZiB0aG9zZSB0aGluZ3Mg
aXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hh
dAorICAgIC8vIGFuZCB3aGVuIGl0IHJ1bnMsIGl0IGZpZ3VyZXMgb3V0IHdoZXRoZXIgaXQgaGFz
IGFueSB3b3JrIHRvIGRvLgorICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0
aGlzKTsKKyAgICAKKyAgICBpZiAoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmlu
Z1NjYW4oKSkgeworICAgICAgICAvLyBUaGlzIGNvZGUgYmxvY2sgaXMgbGl2ZSwgc28gc2NhbiBh
bGwgcmVmZXJlbmNlcyBzdHJvbmdseSBhbmQgcmV0dXJuLgorICAgICAgICBzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKKyAgICAgICAgc3Ryb25nbHlWaXNpdFdlYWtSZWZl
cmVuY2VzKHZpc2l0b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorI2lmIEVOQUJM
RShERkdfSklUKQorICAgIC8vIFdlIGdldCBoZXJlIGlmIHdlJ3JlIGxpdmUgaW4gdGhlIHNlbnNl
IHRoYXQgb3VyIG93bmVyIGV4ZWN1dGFibGUgaXMgbGl2ZSwKKyAgICAvLyBidXQgd2UncmUgbm90
IHlldCBsaXZlIGZvciBzdXJlIGluIGFub3RoZXIgc2Vuc2U6IHdlIG1heSB5ZXQgZGVjaWRlIHRo
YXQgdGhpcworICAgIC8vIGNvZGUgYmxvY2sgc2hvdWxkIGJlIGpldHRpc29uZWQgYmFzZWQgb24g
aXRzIG91dGdvaW5nIHdlYWsgcmVmZXJlbmNlcyBiZWluZworICAgIC8vIHN0YWxlLiBTZXQgYSBm
bGFnIHRvIGluZGljYXRlIHRoYXQgd2UncmUgc3RpbGwgYXNzdW1pbmcgdGhhdCB3ZSdyZSBkZWFk
LCBhbmQKKyAgICAvLyBwZXJmb3JtIG9uZSByb3VuZCBvZiBkZXRlcm1pbmluZyBpZiB3ZSdyZSBs
aXZlLiBUaGUgR0MgbWF5IGRldGVybWluZSwgYmFzZWQgb24KKyAgICAvLyBlaXRoZXIgdXMgbWFy
a2luZyBhZGRpdGlvbmFsIG9iamVjdHMsIG9yIGJ5IG90aGVyIG9iamVjdHMgYmVpbmcgbWFya2Vk
IGZvcgorICAgIC8vIG90aGVyIHJlYXNvbnMsIHRoYXQgdGhpcyBpdGVyYXRpb24gc2hvdWxkIHJ1
biBhZ2FpbjsgaXQgd2lsbCBub3RpZnkgdXMgb2YgdGhpcworICAgIC8vIGRlY2lzaW9uIGJ5IGNh
bGxpbmcgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCkuCisgICAgCisgICAgbV9kZmdEYXRhLT5saXZl
bmVzc0hhc0JlZW5Qcm92ZWQgPSBmYWxzZTsKKyAgICBtX2RmZ0RhdGEtPmFsbFRyYW5zaXRpb25z
SGF2ZUJlZW5NYXJrZWQgPSBmYWxzZTsKKyAgICAKKyAgICBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50
SXRlcmF0aW9uKHZpc2l0b3IpOworCisgICAgLy8gQWRkIGEgd2VhayByZWZlcmVuY2UgaGFydmVz
dGVyIGlmIHdlIGhhdmUgbm90IHJlYWNoZWQgZml4cG9pbnQgYW5kIG5lZWQgdG8KKyAgICAvLyBy
dW4gYWdhaW4uCisgICAgaWYgKCEobV9kZmdEYXRhLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQgJiYg
bV9kZmdEYXRhLT5hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkKSkKKyAgICAgICAgdmlzaXRv
ci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKHRoaXMpOworICAgIAorI2Vsc2UgLy8gRU5BQkxF
KERGR19KSVQpCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0
aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsK
KyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBFdmFsdWF0ZSBvdXIgd2VhayByZWZl
cmVuY2UgdHJhbnNpdGlvbnMsIGlmIHRoZXJlIGFyZSBzdGlsbCBzb21lIHRvIGV2YWx1YXRlLgor
ICAgIGlmICghbV9kZmdEYXRhLT5hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkKSB7CisgICAg
ICAgIGJvb2wgYWxsQXJlTWFya2VkU29GYXIgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9kZmdEYXRhLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaWYgKCghbV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4KKyAgICAg
ICAgICAgICAgICAgfHwgSGVhcDo6aXNNYXJrZWQobV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5t
X2NvZGVPcmlnaW4uZ2V0KCkpKQorICAgICAgICAgICAgICAgICYmIEhlYXA6OmlzTWFya2VkKG1f
ZGZnRGF0YS0+dHJhbnNpdGlvbnNbaV0ubV9mcm9tLmdldCgpKSkgeworICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJn
ZXQgb2YgdGhlCisgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6Cisg
ICAgICAgICAgICAgICAgLy8gLSBUaGlzIGNvZGUgYmxvY2suIFdlIGtub3cgaXQncyBsaXZlIGFs
cmVhZHkgYmVjYXVzZSBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICAvLyAgIHdlIHdvdWxkbid0
IGJlIHNjYW5uaW5nIG91cnNlbHZlcy4KKyAgICAgICAgICAgICAgICAvLyAtIFRoZSBjb2RlIG9y
aWdpbiBvZiB0aGUgdHJhbnNpdGlvbi4gVHJhbnNpdGlvbnMgbWF5IGFyaXNlIGZyb20KKyAgICAg
ICAgICAgICAgICAvLyAgIGNvZGUgdGhhdCB3YXMgaW5saW5lZC4gVGhleSBhcmUgbm90IHJlbGV2
YW50IGlmIHRoZSB1c2VyJ3MKKyAgICAgICAgICAgICAgICAvLyAgIG9iamVjdCB0aGF0IGlzIHJl
cXVpcmVkIGZvciB0aGUgaW5saW5lZSB0byBydW4gaXMgbm8gbG9uZ2VyCisgICAgICAgICAgICAg
ICAgLy8gICBsaXZlLgorICAgICAgICAgICAgICAgIC8vIC0gVGhlIHNvdXJjZSBvZiB0aGUgdHJh
bnNpdGlvbi4gVGhlIHRyYW5zaXRpb24gY2hlY2tzIGlmIHNvbWUKKyAgICAgICAgICAgICAgICAv
LyAgIGhlYXAgbG9jYXRpb24gaG9sZHMgdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCBzdG9yZXMgdGhl
IHRhcmdldC4KKyAgICAgICAgICAgICAgICAvLyAgIEhlbmNlIHRoZSBzb3VyY2UgbXVzdCBiZSBs
aXZlIGZvciB0aGUgdHJhbnNpdGlvbiB0byBiZSBsaXZlLgorICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZtX2RmZ0RhdGEtPnRyYW5zaXRpb25zW2ldLm1fdG8pOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGFsbEFyZU1hcmtlZFNvRmFyKQorICAgICAgICAg
ICAgbV9kZmdEYXRhLT5hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkID0gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgcmVtYWluaW5nIHdvcmsgdG8gZG8u
CisgICAgaWYgKG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLy8gTm93IGNoZWNrIGFsbCBvZiBvdXIgd2VhayByZWZlcmVuY2VzLiBJ
ZiBhbGwgb2YgdGhlbSBhcmUgbGl2ZSwgdGhlbiB3ZQorICAgIC8vIGhhdmUgcHJvdmVkIGxpdmVu
ZXNzIGFuZCBzbyB3ZSBzY2FuIG91ciBzdHJvbmcgcmVmZXJlbmNlcy4gSWYgYXQgZW5kIG9mCisg
ICAgLy8gR0Mgd2Ugc3RpbGwgaGF2ZSBub3QgcHJvdmVkIGxpdmVuZXNzLCB0aGVuIHRoaXMgY29k
ZSBibG9jayBpcyB0b2FzdC4KKyAgICBib29sIGFsbEFyZUxpdmVTb0ZhciA9IHRydWU7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX2RmZ0RhdGEtPndlYWtSZWZl
cmVuY2VzW2ldLmdldCgpKSkgeworICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBJZiBz
b21lIHdlYWsgcmVmZXJlbmNlcyBhcmUgZGVhZCwgdGhlbiB0aGlzIGZpeHBvaW50IGl0ZXJhdGlv
biB3YXMKKyAgICAvLyB1bnN1Y2Nlc3NmdWwuCisgICAgaWYgKCFhbGxBcmVMaXZlU29GYXIpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBBbGwgd2VhayByZWZlcmVuY2VzIGFyZSBsaXZl
LiBSZWNvcmQgdGhpcyBpbmZvcm1hdGlvbiBzbyB3ZSBkb24ndAorICAgIC8vIGNvbWUgYmFjayBo
ZXJlIGFnYWluLCBhbmQgc2NhbiB0aGUgc3Ryb25nIHJlZmVyZW5jZXMuCisgICAgbV9kZmdEYXRh
LT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQgPSB0cnVlOworICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdS
ZWZlcmVuY2VzKHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQorCit2b2lk
IENvZGVCbG9jazo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKHZpc2l0b3IpOworfQorCit2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZVVubGlua2luZyA9IHRy
dWU7CisjZWxzZQorICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSBmYWxz
ZTsKKyNlbmRpZgorICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIENoZWNrIGlmIHdl
J3JlIG5vdCBsaXZlLiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlzb24uCisgICAgaWYgKCEoc2hvdWxk
SW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB8fCBtX2RmZ0RhdGEtPmxpdmVu
ZXNzSGFzQmVlblByb3ZlZCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAg
ICAgICAgICBwcmludGYoIkNvZGUgYmxvY2sgJXAgaGFzIGRlYWQgd2VhayByZWZlcmVuY2VzLCBq
ZXR0aXNvbmluZyBkdXJpbmcgR0MuXG4iLCB0aGlzKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgYmFzZWxpbmUgSklUIGtub3dzIHRoYXQgaXQgc2hvdWxkIHJlLXdhcm0tdXAgYmVm
b3JlCisgICAgICAgIC8vIG9wdGltaXppbmcuCisgICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgCisgICAgICAgIGpldHRpc29uKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisgICAgCisjaWYgRU5B
QkxFKEpJVCkKKyAgICAvLyBIYW5kbGUgaW5saW5lIGNhY2hlcy4KKyAgICBpZiAoISFnZXRKSVRD
b2RlKCkpIHsKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKHRoaXMpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mbyhpKS5pc0xpbmtlZCgpICYmICFIZWFw
Ojppc01hcmtlZChjYWxsTGlua0luZm8oaSkuY2FsbGVlLmdldCgpKSkgeworICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNs
ZWFyaW5nIGNhbGwgZnJvbSAlcC5cbiIsIHRoaXMpOworICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mbyhpKS51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoISFjYWxsTGlua0luZm8oaSkubGFzdFNlZW5DYWxsZWUKKyAg
ICAgICAgICAgICAgICAmJiAhSGVhcDo6aXNNYXJrZWQoY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVu
Q2FsbGVlLmdldCgpKSkKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8oaSkubGFzdFNlZW5D
YWxsZWUuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9n
bG9iYWxSZXNvbHZlSW5mb3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICAgICAgaWYgKG1fZ2xvYmFsUmVzb2x2ZUluZm9zW2ldLnN0cnVjdHVyZSAmJiAhSGVhcDo6aXNN
YXJrZWQobV9nbG9iYWxSZXNvbHZlSW5mb3NbaV0uc3RydWN0dXJlLmdldCgpKSkgeworICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICAgICAgICAgICAgICBwcmlu
dGYoIkNsZWFyaW5nIHJlc29sdmUgaW5mbyBpbiAlcC5cbiIsIHRoaXMpOworICAgICAgICAgICAg
ICAgIG1fZ2xvYmFsUmVzb2x2ZUluZm9zW2ldLnN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fc3RydWN0dXJl
U3R1YkluZm9zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IG1fc3RydWN0dXJlU3R1YkluZm9zW2ldOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2Fz
dDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLnZpc2l0V2Vha1JlZmVyZW5jZXMoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtp
bmcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJDbGVhcmluZyBzdHJ1Y3R1cmUgY2FjaGUgKGtp
bmQgJWQpIGluICVwLlxuIiwgc3R1YkluZm8uYWNjZXNzVHlwZSwgdGhpcyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZ2V0SklUQ29kZSgpLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQp
CisgICAgICAgICAgICAgICAgICAgIERGRzo6ZGZnUmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIs
IHN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEpJ
VDo6cmVzZXRQYXRjaEdldEJ5SWQocmVwYXRjaEJ1ZmZlciwgJnN0dWJJbmZvKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzUHV0QnlJZEFjY2VzcyhhY2Nl
c3NUeXBlKSk7CisgICAgICAgICAgICAgICAgaWYgKGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0g
SklUQ29kZTo6REZHSklUKQorICAgICAgICAgICAgICAgICAgICBERkc6OmRmZ1Jlc2V0UHV0QnlJ
RChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAg
ICAgICAgICAgICAgICAgSklUOjpyZXNldFBhdGNoUHV0QnlJZChyZXBhdGNoQnVmZmVyLCAmc3R1
YkluZm8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdHViSW5m
by5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fbWV0
aG9kQ2FsbExpbmtJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoIW1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRTdHJ1Y3R1cmUpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVCht
X21ldGhvZENhbGxMaW5rSW5mb3NbaV0uc2Vlbk9uY2UoKSk7CisgICAgICAgICAgICBBU1NFUlQo
ISFtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlKTsKKwor
ICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0u
Y2FjaGVkU3RydWN0dXJlLmdldCgpKQorICAgICAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtl
ZChtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlLmdldCgp
KQorICAgICAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZChtX21ldGhvZENhbGxMaW5rSW5m
b3NbaV0uY2FjaGVkRnVuY3Rpb24uZ2V0KCkpCisgICAgICAgICAgICAgICAgfHwgIUhlYXA6Omlz
TWFya2VkKG1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRQcm90b3R5cGUuZ2V0KCkpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAgICAgICAgICAgICAg
ICAgIHByaW50ZigiQ2xlYXJpbmcgbWV0aG9kIGNhbGwgaW4gJXAuXG4iLCB0aGlzKTsKKyAgICAg
ICAgICAgICAgICBtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0ucmVzZXQocmVwYXRjaEJ1ZmZlciwg
Z2V0SklUVHlwZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgor
CisgICAgLy8gSGFuZGxlIHRoZSBieXRlY29kZSBkaXNjYXJkaW5nIGNob3JlLgorICAgIGlmICht
X3Nob3VsZERpc2NhcmRCeXRlY29kZSkgeworICAgICAgICBkaXNjYXJkQnl0ZWNvZGUoKTsKKyAg
ICAgICAgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQg
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxPYmplY3QpOwogICAgIHZpc2l0
b3IuYXBwZW5kKCZtX293bmVyRXhlY3V0YWJsZSk7CiAgICAgaWYgKG1fcmFyZURhdGEpIHsKQEAg
LTE2MDEsNDIgKzE4MDYsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdAogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9mdW5jdGlvbkV4cHJzW2ldKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7ICsraSkKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rpb25EZWNsc1tpXSk7Ci0jaWYgRU5BQkxFKEpJVCkK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsr
aSkgewotICAgICAgICBpZiAoY2FsbExpbmtJbmZvKGkpLmlzTGlua2VkKCkpCi0gICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmY2FsbExpbmtJbmZvKGkpLmNhbGxlZSk7Ci0gICAgICAgIGlmICgh
IWNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZSkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZjYWxsTGlua0luZm8oaSkubGFzdFNlZW5DYWxsZWUpOwotICAgIH0KLSNlbmRpZgogI2lm
IEVOQUJMRShJTlRFUlBSRVRFUikKICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICB2
aXNpdFN0cnVjdHVyZXModmlzaXRvciwgJmluc3RydWN0aW9ucygpW21fcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbnNbaV1dKTsKICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9nbG9iYWxSZXNvbHZl
SW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHZpc2l0
U3RydWN0dXJlcyh2aXNpdG9yLCAmaW5zdHJ1Y3Rpb25zKClbbV9nbG9iYWxSZXNvbHZlSW5zdHJ1
Y3Rpb25zW2ldXSk7CiAjZW5kaWYKLSNpZiBFTkFCTEUoSklUKQotICAgIGZvciAoc2l6ZV90IHNp
emUgPSBtX2dsb2JhbFJlc29sdmVJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX2dsb2JhbFJlc29sdmVJbmZvc1tpXS5zdHJ1Y3R1cmUpCi0gICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxSZXNvbHZlSW5mb3NbaV0uc3RydWN0dXJlKTsK
LSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBzaXplID0gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6
ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9zdHJ1Y3R1cmVTdHViSW5mb3Nb
aV0udmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0KLSAgICBmb3IgKHNpemVfdCBzaXplID0gbV9t
ZXRob2RDYWxsTGlua0luZm9zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRTdHJ1Y3R1cmUpIHsKLSAgICAg
ICAgICAgIC8vIFRoZXNlIG1lbWJlcnMgbXVzdCBiZSBmaWxsZWQgYXQgdGhlIHNhbWUgdGltZSwg
YW5kIG9ubHkgYWZ0ZXIKLSAgICAgICAgICAgIC8vIHRoZSBNZXRob2RDYWxsTGlua0luZm8gaXMg
c2V0IGFzIHNlZW4uCi0gICAgICAgICAgICBBU1NFUlQobV9tZXRob2RDYWxsTGlua0luZm9zW2ld
LnNlZW5PbmNlKCkpOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fbWV0aG9kQ2FsbExp
bmtJbmZvc1tpXS5jYWNoZWRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgQVNTRVJUKCEhbV9tZXRo
b2RDYWxsTGlua0luZm9zW2ldLmNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmbV9tZXRob2RDYWxsTGlua0luZm9zW2ldLmNhY2hlZFByb3RvdHlw
ZVN0cnVjdHVyZSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9tZXRob2RDYWxsTGlu
a0luZm9zW2ldLmNhY2hlZEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZt
X21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90eXBlKTsKLSAgICAgICAgfQotICAg
IH0KLSNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKGhhc0NvZGVPcmlnaW5z
KCkpIHsKQEAgLTE2NTMsMTUgKzE4MjgsNiBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0CiAgICAgZm9yICh1bnNpZ25lZCBwcm9maWxlSW5kZXggPSAwOyBwcm9maWxl
SW5kZXggPCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytwcm9maWxlSW5kZXgpCiAgICAgICAg
IHZhbHVlUHJvZmlsZShwcm9maWxlSW5kZXgpLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsK
ICNlbmRpZgotICAgIAotI2lmIEVOQUJMRShKSVQpICYmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5H
KQotICAgIC8vIEtpbGwgb2ZmIHNvbWUgYnl0ZWNvZGUuIFdlIGNhbid0IGRvIGl0IGhlcmUgYmVj
YXVzZSB3ZSBkb24ndCB3YW50IHRvIGFjY2lkZW50YWxseQotICAgIC8vIGNhbGwgaW50byBtYWxs
b2Mgd2hpbGUgaW4gc3RvcC10aGUtd29ybGQgR0MgbW9kZS4KLSAgICBpZiAoaGFzSW5zdHJ1Y3Rp
b25zKCkgJiYgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUpCi0gICAgICAgIHZpc2l0b3IuYWRkVW5j
b25kaXRpb25hbEZpbmFsaXplcih0aGlzKTsKLSNlbmRpZgotICAgIAotICAgIHN0cm9uZ2x5Vmlz
aXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5
VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4NjcsNiArMjAz
MywyMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKEpTR2xvYmFsRGF0YSYgCiAgICAgICAg
IHJlbW92ZSgpOwogfQogCit2b2lkIE1ldGhvZENhbGxMaW5rSW5mbzo6cmVzZXQoUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlciwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQoreworICAgIGNh
Y2hlZFN0cnVjdHVyZS5jbGVhclRvTWF4VW5zaWduZWQoKTsKKyAgICBjYWNoZWRQcm90b3R5cGUu
Y2xlYXIoKTsKKyAgICBjYWNoZWRQcm90b3R5cGVTdHJ1Y3R1cmUuY2xlYXJUb01heFVuc2lnbmVk
KCk7CisgICAgY2FjaGVkRnVuY3Rpb24uY2xlYXIoKTsKKyAgICAKKyAgICBpZiAoaml0VHlwZSA9
PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0TWV0aG9kT3B0aW1pemUpOworICAgIGVsc2UgeworICAg
ICAgICBBU1NFUlQoaml0VHlwZSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY3RpX29wX2dldF9ieV9pZF9t
ZXRob2RfY2hlY2spOworICAgIH0KK30KKwogdm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxzKCkK
IHsKICAgICBpZiAoISFtX2FsdGVybmF0aXZlKQpAQCAtMTk4MiwzNyArMjE2MywyOCBAQCBib29s
IEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGCiAgICAgcmV0dXJuIERGRzo6Y2Fu
Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbCh0aGlzKTsKIH0KIAotdm9pZCBQcm9ncmFtQ29kZUJsb2Nr
OjpqZXR0aXNvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIFByb2dyYW1Db2RlQmxv
Y2s6OmpldHRpc29uKCkKIHsKICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJh
c2VsaW5lSklUKTsKICAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKLSAgICBzdGF0
aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25P
cHRpbWl6ZWRDb2RlKGdsb2JhbERhdGEpOworICAgIHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKmdsb2JhbERh
dGEoKSk7CiB9CiAKLXZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQordm9pZCBFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbigpCiB7CiAgICAgQVNTRVJU
KGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiAgICAgQVNTRVJUKHRoaXMg
PT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZShnbG9iYWxEYXRhKTsKKyAgICBz
dGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25P
cHRpbWl6ZWRDb2RlKCpnbG9iYWxEYXRhKCkpOwogfQogCi12b2lkIEZ1bmN0aW9uQ29kZUJsb2Nr
OjpqZXR0aXNvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEZ1bmN0aW9uQ29kZUJs
b2NrOjpqZXR0aXNvbigpCiB7CiAgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpC
YXNlbGluZUpJVCk7CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNv
bk9wdGltaXplZENvZGVGb3IoZ2xvYmFsRGF0YSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNv
bnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZUZvcigqZ2xvYmFs
RGF0YSgpLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwp
OwogfQogI2VuZGlmCiAKLXZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgp
Ci17Ci0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykgfHwgIUVOQUJMRShKSVQpCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICBBU1NFUlQobV9zaG91bGREaXNjYXJkQnl0
ZWNvZGUpOwotICAgIGRpc2NhcmRCeXRlY29kZSgpOwotfQotCiAjaWYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQogYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwMDY3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAg
ICAgICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9p
ZCByZXNldChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBKSVRDb2RlOjpKSVRUeXBlKTsK
IAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogICAgICAgICBDb2RlTG9jYXRpb25D
YWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKQEAgLTI1MCw3ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB9CiAjZW5kaWYKIAotICAgIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBVbmNvbmRp
dGlvbmFsRmluYWxpemVyIHsKKyAgICBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVW5jb25kaXRp
b25hbEZpbmFsaXplciwgcHVibGljIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgewogICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBw
dWJsaWM6CkBAIC0yOTQsMTAgKzI5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkgeyByZXR1cm4gaGFzSW5zdHJ1Y3Rpb25zKCk7
IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgICAg
IAotICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGFyZSBub3QgamV0dGlzb25pbmcgYSBjb2Rl
IGJsb2NrLCBhbmQgdGh1cwotICAgICAgICAvLyBoYXZlIG5vIGV2aWRlbmNlIHRvIHN1Z2dlc3Qg
dGhhdCBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZCBpbnRvIGFnYWluLgotICAgICAgICB2b2lkIHN0
cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogCiAgICAgICAgIHN0YXRp
YyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CiAKQEAgLTUzNyw3ICs1MzUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gbV9q
aXRDb2RlLmppdFR5cGUoKTsgfQogICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVj
dXRhYmxlTWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVNZW1vcnko
KTsgfQogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0
ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24o
SlNHbG9iYWxEYXRhJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKSA9IDA7
CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0gMDsKICAgICAgICAg
dmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAwOwogICAgICAgICBib29sIGhhc09w
dGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTEwNjAsMTAgKzEwNTgsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgdm9pZCByZW9w
dGltaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgdm9pZCByZW9wdGltaXpl
KCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50KCkgIT0gdGhpcyk7
Ci0gICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbihnbG9iYWxEYXRhKTsKKyAgICAg
ICAgICAgIHJlcGxhY2VtZW50KCktPmpldHRpc29uKCk7CiAgICAgICAgICAgICBjb3VudFJlb3B0
aW1pemF0aW9uKCk7CiAgICAgICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgICAg
IH0KQEAgLTEwODUsNiArMTA4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1f
c2hvdWxkRGlzY2FyZEJ5dGVjb2RlOwogCiAgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToK
QEAgLTExMDEsNiArMTEwMCwyOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcmlu
dFB1dEJ5SWRPcChFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46
OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgY2hhciogb3ApIGNvbnN0OwogI2VuZGlmCiAgICAgICAg
IHZvaWQgdmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiwgSW5zdHJ1Y3Rpb24qIHZQQykgY29u
c3Q7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBib29sIHNob3VsZElt
bWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gQW0gSSBhIERGRyBjb2RlIGJsb2NrPyBJZiBub3QsIHRoZW4gSSdtIGxpdmUgaWYgSSBh
bSBiZWluZyBzY2FubmVkLgorICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIEkgYW0g
YSBERkcgY29kZSBibG9jaywgdGhlbiBhbSBJIGN1cnJlbnRseSBleGVjdXRpbmc/IElmIHNvLAor
ICAgICAgICAgICAgLy8gdGhlbiBJJ20gZGVmaW5pdGVseSBsaXZlLgorICAgICAgICAgICAgaWYg
KG1fZGZnRGF0YS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorI2Vs
c2UKKyAgICAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2Nh
bigpIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCBwZXJm
b3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKFNsb3RWaXNpdG9yJik7CisgICAgICAgIAorICAg
ICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7Cisg
ICAgICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CiAK
ICAgICAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKICAgICAgICAgewpAQCAt
MTE3Nyw2ICsxMTk5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBWZWN0b3I8V3Jp
dGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsKICAgICAgICAgICAgIGJvb2wgbWF5
QmVFeGVjdXRpbmc7CiAgICAgICAgICAgICBib29sIGlzSmV0dGlzb25lZDsKKyAgICAgICAgICAg
IGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBl
dmVyeSBHQy4KKyAgICAgICAgICAgIGJvb2wgYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZDsg
Ly8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCiAgICAgICAgIH07CiAgICAgICAg
IAogICAgICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOwpAQCAtMTI3OCw3ICsxMzAyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVD
aGFpbk5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBDb2Rl
QmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0
aERGRygpOwogI2VuZGlmCkBAIC0xMzEyLDcgKzEzMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNp
ZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsK
ICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCk7CiAjZW5kaWYKQEAgLTEz
NDksNyArMTM3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihK
U0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAg
IHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
Y2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTQsNyArMTE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBsaXN0WzBdLnNldChn
bG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFpbiwgaXNE
aXJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvciwgaW50IGNvdW50KQorICAgICAgICBib29sIHZpc2l0V2VhayhpbnQgY291
bnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewogICAgICAgICAgICAgICAgIFBvbHltb3JwaGljU3R1YkluZm8mIGluZm8gPSBsaXN0W2ld
OwpAQCAtMTI0LDEyICsxMjQsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5mby5iYXNlKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaW5mby51LnByb3RvICYmICFpbmZvLmlzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZpbmZvLnUucHJvdG8pOwotICAgICAgICAgICAgICAgIGlmIChpbmZvLnUu
Y2hhaW4gJiYgaW5mby5pc0NoYWluKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmaW5mby51LmNoYWluKTsKKyAgICAgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGlu
Zm8uYmFzZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5mby51LnByb3RvICYmICFpbmZvLmlzQ2hhaW4KKyAgICAgICAgICAg
ICAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKGluZm8udS5wcm90by5nZXQoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby51LmNo
YWluICYmIGluZm8uaXNDaGFpbgorICAgICAgICAgICAgICAgICAgICAmJiAhSGVhcDo6aXNNYXJr
ZWQoaW5mby51LmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTAwNjc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNDggKzYyLDU1IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRl
cmVmKCkKICAgICB9CiB9CiAKLXZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFr
UmVmZXJlbmNlcygpCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LmdldEJ5SWRTZWxm
LmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghSGVh
cDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3Byb3RvOgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5nZXRCeUlkUHJvdG8u
YmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LmdldEJ5SWRQ
cm90by5wcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgh
SGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkK
KyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LmdldEJ5SWRQcm90by5wcm90b3R5cGVT
dHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVh
azsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZ1LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJnUuZ2V0QnlJZENoYWluLmNoYWluKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCkpCisgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkQ2hhaW4uY2hh
aW4uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKICAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7CiAgICAgICAgIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5nZXRCeUlkU2Vs
Zkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yLCB1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSk7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0V2Vhayh1
LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwb2x5bW9y
cGhpY1N0cnVjdHVyZXM7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0
OiB7CiAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNT
dHJ1Y3R1cmVzID0gdS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvciwgdS5nZXRCeUlkUHJv
dG9MaXN0Lmxpc3RTaXplKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXBvbHltb3Jw
aGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKSkgewor
ICAgICAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb246Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LnB1
dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAgdmlzaXRvci5hcHBl
bmQoJnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgdmlzaXRvci5hcHBl
bmQoJnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOwotICAgICAgICByZXR1cm47CisgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVy
ZS5nZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0
aW9uLnN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1
dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6Ci0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZ1LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2dlbmVyaWM6
Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICBjYXNlIGFjY2Vzc19nZXRf
c3RyaW5nX2xlbmd0aDoKLSAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IG5lZWQg
dG8gbWFyayBhbnl0aGluZwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghSGVhcDo6aXNN
YXJrZWQodS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBpbnN0
cnVjdGlvbnMgZG9uJ3QgcmVxdWlyZSByZWZlcmVuY2VzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRv
CisgICAgICAgIC8vIGRvIGFueXRoaW5nLgorICAgICAgICBicmVhazsKICAgICB9CisgICAgcmV0
dXJuIHRydWU7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw2ICs1MCwzNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYWNjZXNz
X2dldF9zdHJpbmdfbGVuZ3RoLAogICAgIH07CiAKKyAgICBpbmxpbmUgYm9vbCBpc0dldEJ5SWRB
Y2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhY2Nl
c3NUeXBlKSB7CisgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAgICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CisgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9jaGFpbjoKKyAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDoKKyAgICAg
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CisgICAgICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9nZW5lcmljOgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYXJyYXlfbGVuZ3Ro
OgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlubGluZSBib29sIGlzUHV0QnlJZEFjY2VzcyhB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUp
IHsKKyAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb246CisgICAgICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlf
aWRfZ2VuZXJpYzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCiAgICAgc3RydWN0
IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8oKQogICAgICAg
ICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191bnNldCkKQEAgLTExMywxMCArMTQyLDE4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIAogICAgICAgICAgICAgdS5wdXRCeUlkUmVwbGFjZS5iYXNlT2Jq
ZWN0U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7
CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVzZXQoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0OworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBkZXJlZigpOwotICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CiAKKyAgICAgICAgYm9vbCB2aXNpdFdlYWtSZWZlcmVuY2VzKCk7CisgICAg
ICAgIAogICAgICAgICBib29sIHNlZW5PbmNlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIHNlZW47CkBAIC0xNDIsMTcgKzE3OSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
aW50MTZfdCBkZWx0YUNhbGxUb0RvbmU7CiAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjazsKICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlOworICAgICAgICBp
bnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
aW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOworI2Vsc2UKKyAgICAgICAgaW50MTZfdCBk
ZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlOworICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvUGF5
bG9hZExvYWRPclN0b3JlOwogI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAg
ICAgICAgdW5pb24gewogICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICBpbnQx
Nl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAg
ICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7Ci0jZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZTsK
LSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlOwot
I2VuZGlmCisgICAgICAgICAgICAgICAgLy8gSXQgd291bGQgYmUgdW53aXNlIHRvIHB1dCBhbnl0
aGluZyBoZXJlLCBhcyBpdCB3aWxsIHN1cmVseSBiZSBvdmVyd3JpdHRlbi4KICAgICAgICAgICAg
IH0gdW5zZXQ7CiAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgIFdyaXRlQmFy
cmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDEwMDY3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTcsMTMgKzE1NywxMyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxv
Y2stPnN0cnVjdHVyZVN0dWJJbmZvKGkpOwogICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNb
aV0ubV9mdW5jdGlvbkNhbGwpOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNh
bGxSZXR1cm5Mb2NhdGlvbjsKLSAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2hlY2tJbW1Ub0Nh
bGwgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBjYWxsUmV0dXJuTG9jYXRp
b24pOworICAgICAgICBpbmZvLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Rl
bHRhQ2hlY2tJbW1Ub0NhbGwpLCBjYWxsUmV0dXJuTG9jYXRpb24pOwogICAgICAgICBpbmZvLmRl
bHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVy
bkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1f
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaykpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGlu
Zm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlB
Y2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKKyAgICAgICAgaW5mby5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5M
b2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Rl
bHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKICNlbHNlCi0gICAgICAgIGluZm8udS51bnNldC5kZWx0
YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1
cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5t
X2RlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpKTsKLSAgICAgICAgaW5mby51LnVuc2V0LmRlbHRh
Q2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSk7CisgICAgICAgIGluZm8uZGVsdGFD
YWxsVG9UYWdMb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJu
TG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9k
ZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSk7CisgICAgICAgIGluZm8uZGVsdGFDYWxsVG9QYXls
b2FkTG9hZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0
aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFD
YWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpKTsKICNlbmRpZgogICAgICAgICBpbmZvLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9u
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxs
VG9TbG93Q2FzZSkpOwogICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvRG9uZSA9IGRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0RvbmUpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTAwNjc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzI1LDggKzMyNSw5IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uR2UKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVj
LCAqcHJvcGVydHlOYW1lLCBzbG90KTsKLQotICAgIE1ldGhvZENhbGxMaW5rSW5mbyYgbWV0aG9k
SW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRNZXRob2RDYWxsTGlua0luZm8ocmV0dXJuQWRk
cmVzcyk7CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKKyAgICBNZXRob2RDYWxsTGlua0luZm8mIG1ldGhvZEluZm8gPSBjb2RlQmxvY2stPmdldE1l
dGhvZENhbGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBpZiAobWV0aG9kSW5mby5zZWVu
T25jZSgpKQogICAgICAgICBkZmdSZXBhdGNoR2V0TWV0aG9kKGV4ZWMsIGJhc2VWYWx1ZSwgKnBy
b3BlcnR5TmFtZSwgc2xvdCwgbWV0aG9kSW5mbyk7CiAgICAgZWxzZQpAQCAtMzY3LDcgKzM2OCw3
IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBKU1ZhbHVl
IGJhc2VWYWx1ZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCAqcHJvcGVydHlOYW1lLCBzbG90
KTsKLQorICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBpZiAoc3R1YkluZm8uc2Vl
bikKICAgICAgICAgZGZnUmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCAqcHJvcGVydHlO
YW1lLCBzbG90LCBzdHViSW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5jcHAJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE5ICs0OSwxOSBAQCBzdGF0
aWMgdm9pZCBkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kCiAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aEZ1bmN0aW9uKTsKIAog
ICAgIC8vIFBhdGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUgb2Zmc2V0IG9mIHRoZSBsb2Fk
LgotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby51LnVuc2V0LmRlbHRhQ2hl
Y2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClz
dHViSW5mby5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgc3RydWN0dXJlKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGlmIChjb21wYWN0KQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5m
by51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZz
ZXQpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0xvYWRP
clN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0KTsKICAgICBlbHNlCi0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
MzJBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBzaXpl
b2YoSlNWYWx1ZSkgKiBvZmZzZXQpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8uZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCk7CiAjZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChjb21wYWN0KSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0
T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIHNpemVv
ZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnUu
dW5zZXQuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkgKiBv
ZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9U
YWdMb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFj
dEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgc2l6ZW9m
KEpTVmFsdWUpICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0
KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIHNpemVvZihKU1Zh
bHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRh
Q2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0ICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Cisg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwg
c2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0ICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7
CiAgICAgfQogI2VuZGlmCiB9CkBAIC02NTEsNiArNjUxLDQ0IEBAIHZvaWQgZGZnTGlua0ZvcihF
eGVjU3RhdGUqIGV4ZWMsIENhbGxMaW4KICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9j
YXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLCBvcGVyYXRpb25WaXJ0
dWFsQ29uc3RydWN0KTsKIH0KIAordm9pZCBkZmdSZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0odWludHB0cl90KXN0dWJJbmZvLmRl
bHRhQ2hlY2tJbW1Ub0NhbGwpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5k
ZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNo
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1
YkluZm8uZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgorICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZz
ZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30K
Kwordm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0RGR09wZXJhdGlvbl9FSkNJPihNYWNy
b0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZEZ1
bmN0aW9uOworICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dE9wdGltaXplOworICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICBlbHNlIHsK
KyAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdCk7CisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIH0KKyAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbFB0ckF0T2Zmc2V0KC0odWludHB0cl90KXN0dWJJbmZvLmRlbHRhQ2hlY2tJbW1Ub0NhbGwp
LCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNl
CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCAw
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3Rv
cmUpLCAwKTsKKyNlbmRpZgorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVj
ayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lv
biAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29y
a2luZyBjb3B5KQpAQCAtMzksOCArMzksMjEgQEAgdm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4
ZWNTdGF0ZSosIEpTVgogdm9pZCBkZmdCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIFB1dEtpbmQpOwogdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5m
byYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKK3ZvaWQgZGZnUmVzZXRHZXRCeUlEKFJlcGF0Y2hC
dWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRj
aEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAotI2VuZGlmCi0jZW5kaWYKKyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
Cit2b2lkIGRmZ1Jlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8m
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cit2b2lkIGRmZ1Jlc2V0UHV0QnlJRChSZXBhdGNo
QnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
I2VuZGlmIC8vIERGR1JlcGF0Y2hfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZp
c2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTQsNiArMjU0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBy
ZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jKTsK
ICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB2b2lkIHJlc2V0UGF0Y2hHZXRCeUlkKFJlcGF0
Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyopOworICAgICAgICBzdGF0aWMgdm9pZCByZXNl
dFBhdGNoUHV0QnlJZChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8qKTsKICAgICAg
ICAgc3RhdGljIHZvaWQgcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVibG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaFB1dEJ5
SWRSZXBsYWNlKENvZGVCbG9jayogY29kZWJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVj
dHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgYm9vbCBkaXJlY3QpOwogICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaE1ldGhvZENhbGxQcm90
byhKU0dsb2JhbERhdGEmLCBDb2RlQmxvY2sqIGNvZGVibG9jaywgTWV0aG9kQ2FsbExpbmtJbmZv
JiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCosIFJldHVybkFkZHJlc3NQdHIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTA3LDYg
KzExMDcsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1YwogICAg
IG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9wdXRfZ2xvYmFsX3Zhciks
IHZhbHVlLCByZWdUMSwgcmVnVDApOwogfQogCit2b2lkIEpJVDo6cmVzZXRQYXRjaEdldEJ5SWQo
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
KQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24sIGN0aV9vcF9nZXRfYnlfaWQpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5m
by0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFN0
cnVjdHVyZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7CisgICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0
KHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSksIDApOworICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIpLCAwKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRj
aE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKSwgc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpKTsKK30K
Kwordm9pZCBKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZm
ZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3BfcHV0X2J5X2lkKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQ
dHJBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigtMSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0
aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0
eU1hcE9mZnNldDEpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZzZXRQdXRCeUlkUHJv
cGVydHlNYXBPZmZzZXQyKSwgMCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA0NCw2ICsxMDQ0LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKEluc3Ry
dWMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91
bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiB9CiAK
K3ZvaWQgSklUOjpyZXNldFBhdGNoR2V0QnlJZChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVy
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY3RpX29wX2dldF9ieV9pZCk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsUHRy
QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oLTEpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlN
YXBPZmZzZXQpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+aG90UGF0
aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKSwg
c3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdl
dEJ5SWRTbG93Q2FzZUNhbGwpKTsKK30KKwordm9pZCBKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykK
K3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
LCBjdGlfb3BfcHV0X2J5X2lkKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1
Y3R1cmUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChw
YXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCksIDApOworfQorCiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0ZXJJRCBv
d25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBSZWdpc3RlcklEIHNj
cmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2lu
ZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAx
MDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkzOCw3ICsxOTM4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3B0aW1pemVfZnJvbQogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgICAgICBw
cmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChpbiBsb29wKS5cbiIs
IGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKICNlbmRpZgotICAgICAgICAg
ICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTIwMDgsNyArMjAwOCw3IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQog
ICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChpbiBs
b29wIGFmdGVyIE9TUiBmYWlsKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpKTsKICNlbmRpZgotICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCkpOworICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMjA0MCwxMiArMjA0MCwxMCBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAg
ICAgICAgICAgIHByaW50ZigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAlcCglcCkgKGlu
IHJldHVybikuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CiAjZW5k
aWYKLSAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKLQotICAgICAgICBj
b2RlQmxvY2stPm9wdGltaXplU29vbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCShyZXZp
c2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjbGVhcigpIHsgY2xlYXIoMCk7IH0KKyAgICB2b2lkIGNsZWFyVG9NYXhVbnNp
Z25lZCgpIHsgY2xlYXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsgfQogCiBwcm90ZWN0
ZWQ6CiAgICAgSklUV3JpdGVCYXJyaWVyQmFzZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115746</attachid>
            <date>2011-11-17 23:37:42 -0800</date>
            <delta_ts>2011-11-17 23:40:58 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>weakcaches_patch_3.diff</filename>
            <type>text/plain</type>
            <size>47866</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNzI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDExLTExLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5saW5lIGNhY2hlcyB0aGF0IHJlZmVyIHRvIG90aGVyd2lzZSBkZWFkIG9iamVjdHMgc2hvdWxk
IGJlIGNsZWFyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyMzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgREZHIGNvZGUgYmxvY2tzIG5vdyBwYXJ0aWNpcGF0ZSBpbiB0aGUgd2VhayByZWZlcmVuY2Ug
aGFydmVzdGVyIGZpeHBvaW50CisgICAgICAgIHNvIHRoYXQgdGhleSBvbmx5IGNvbnNpZGVyIHRo
ZW1zZWx2ZXMgdG8gYmUgbGl2ZSBpZiBlaXRoZXIgdGhleSBhcmUKKyAgICAgICAgY3VycmVudGx5
IGV4ZWN1dGluZywgb3IgdGhlaXIgb3duZXIgaXMgbGl2ZSBhbmQgYWxsIG9mIHRoZWlyIHdlYWsg
cmVmZXJlbmNlcworICAgICAgICBhcmUgbGl2ZS4gSWYgbm90LCB0aGUgcmVsZXZhbnQgY29kZSBi
bG9ja3MgYXJlIGpldHRpc29uZWQuCisKKyAgICAgICAgSW5saW5lIGNhY2hlcyBpbiBib3RoIHRo
ZSBvbGQgSklUIGFuZCB0aGUgREZHIGFyZSBub3cgY2xlYXJlZCBpZiBhbnkgb2YKKyAgICAgICAg
dGhlaXIgcmVmZXJlbmNlcyBhcmUgbm90IG1hcmtlZCBhdCB0aGUgZW5kIG9mIGEgR0MuCisKKyAg
ICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsIG9uIGNvbW1hbmQtbGluZTsgc3RpbGwg
dGVzdGluZyB0byBzZWUgd2hhdCB0aGUKKyAgICAgICAgYnJvYWRlciBlZmZlY3RzIGFyZS4gICAg
ICAgIAorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Lmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyWDg2XzY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJhdGlvbik6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6TWV0
aG9kQ2FsbExpbmtJbmZvOjpyZXNldCk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6
OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6amV0dGlzb24pOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlb3B0aW1pemUpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NE
dXJpbmdTY2FuKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAo
SlNDOjpQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OnZpc2l0V2Vhayk6CisgICAgICAg
ICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6aXNHZXRCeUlkQWNjZXNzKToKKyAgICAg
ICAgKEpTQzo6aXNQdXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVzZXRH
ZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXNldFB1dEJ5SUQpOgorICAgICAgICAq
IGRmZy9ERkdSZXBhdGNoLmg6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVzZXRHZXRCeUlEKToK
KyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXNldFB1dEJ5SUQpOgorICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6SklUOjpyZXNldFBhdGNoUHV0
QnlJZCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6SklUOjpyZXNl
dFBhdGNoUHV0QnlJZCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIu
aDoKKyAgICAgICAgKEpTQzo6SklUV3JpdGVCYXJyaWVyQmFzZTo6Y2xlYXJUb01heFVuc2lnbmVk
KToKKwogMjAxMS0xMS0xNyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBbQ01ha2VdIE1vdmUgRkFTVF9NQUxMT0Mgc3BlY2lmaWMgbGluZXMgZnJvbSBQ
bGF0Zm9ybSouY21ha2UgdG8gQ01ha2VMaXN0cy50eHQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDEw
MDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODYuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDYgKzIwNSwxMiBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSB7IHJldHVybiBpc1NTRTJQ
cmVzZW50KCk7IH0KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkg
eyByZXR1cm4gaXNTU0UyUHJlc2VudCgpOyB9CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9h
dGluZ1BvaW50QWJzKCkgeyByZXR1cm4gaXNTU0UyUHJlc2VudCgpOyB9CisgICAgCisgICAgc3Rh
dGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGwgY2FsbCkKKyAg
ICB7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+
KGNhbGwuZGF0YUxvY2F0aW9uKCkpWy0xXTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYWxsLmRh
dGFMb2NhdGlvbigpKSArIG9mZnNldCkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTGlua0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDEwMDY3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDk3LDYgKzQ5NywxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpIHsgcmV0dXJuIHRydWU7IH0K
ICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSB7IHJldHVybiB0cnVl
OyB9CisgICAgCisgICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVMb2Nh
dGlvbkNhbGwgY2FsbCkKKyAgICB7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cihYODZBc3Nl
bWJsZXI6OnJlYWRQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUFRBQ0hfT0ZG
U0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSAr
MzMsMTEgQEAKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR0Nh
cGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdSZXBhdGNo
LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgIkpJVC5oIgorI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0
aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTU3RhdGljU2NvcGVP
YmplY3QuaCIKQEAgLTE1ODcsNiArMTU4OSwyMDkgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdAogewogICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCiAgICAgICAgIG1f
YWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworCisgICAgLy8gVGhlcmUgYXJl
IHRocmVlIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzOiBsYXp5
IGJ5dGVjb2RlIGZyZWVpbmcsCisgICAgLy8gaW5saW5lIGNhY2hlIGNsZWFyaW5nLCBhbmQgamV0
dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0CisgICAgLy8g
bGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBT
byB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0CisgICAgLy8gYW5kIHdoZW4gaXQgcnVucywgaXQg
ZmlndXJlcyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCisgICAgdmlzaXRvci5h
ZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXMpOworICAgIAorICAgIGlmIChzaG91bGRJbW1l
ZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpKSB7CisgICAgICAgIC8vIFRoaXMgY29k
ZSBibG9jayBpcyBsaXZlLCBzbyBzY2FuIGFsbCByZWZlcmVuY2VzIHN0cm9uZ2x5IGFuZCByZXR1
cm4uCisgICAgICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOworICAg
ICAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gV2UgZ2V0IGhlcmUg
aWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0YWJsZSBpcyBs
aXZlLAorICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxpdmUgZm9yIHN1cmUgaW4gYW5vdGhlciBz
ZW5zZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlzCisgICAgLy8gY29kZSBibG9jayBzaG91
bGQgYmUgamV0dGlzb25lZCBiYXNlZCBvbiBpdHMgb3V0Z29pbmcgd2VhayByZWZlcmVuY2VzIGJl
aW5nCisgICAgLy8gc3RhbGUuIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSdyZSBzdGls
bCBhc3N1bWluZyB0aGF0IHdlJ3JlIGRlYWQsIGFuZAorICAgIC8vIHBlcmZvcm0gb25lIHJvdW5k
IG9mIGRldGVybWluaW5nIGlmIHdlJ3JlIGxpdmUuIFRoZSBHQyBtYXkgZGV0ZXJtaW5lLCBiYXNl
ZCBvbgorICAgIC8vIGVpdGhlciB1cyBtYXJraW5nIGFkZGl0aW9uYWwgb2JqZWN0cywgb3IgYnkg
b3RoZXIgb2JqZWN0cyBiZWluZyBtYXJrZWQgZm9yCisgICAgLy8gb3RoZXIgcmVhc29ucywgdGhh
dCB0aGlzIGl0ZXJhdGlvbiBzaG91bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlmeSB1cyBvZiB0
aGlzCisgICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKS4K
KyAgICAKKyAgICBtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IGZhbHNlOworICAg
IG1fZGZnRGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOworICAgIAor
ICAgIHBlcmZvcm1UcmFjaW5nRml4cG9pbnRJdGVyYXRpb24odmlzaXRvcik7CisKKyAgICAvLyBB
ZGQgYSB3ZWFrIHJlZmVyZW5jZSBoYXJ2ZXN0ZXIgaWYgd2UgaGF2ZSBub3QgcmVhY2hlZCBmaXhw
b2ludCBhbmQgbmVlZCB0bworICAgIC8vIHJ1biBhZ2Fpbi4KKyAgICBpZiAoIShtX2RmZ0RhdGEt
PmxpdmVuZXNzSGFzQmVlblByb3ZlZCAmJiBtX2RmZ0RhdGEtPmFsbFRyYW5zaXRpb25zSGF2ZUJl
ZW5NYXJrZWQpKQorICAgICAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIodGhp
cyk7CisgICAgCisjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6OnBl
cmZvcm1UcmFjaW5nRml4cG9pbnRJdGVyYXRpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAg
IC8vIEV2YWx1YXRlIG91ciB3ZWFrIHJlZmVyZW5jZSB0cmFuc2l0aW9ucywgaWYgdGhlcmUgYXJl
IHN0aWxsIHNvbWUgdG8gZXZhbHVhdGUuCisgICAgaWYgKCFtX2RmZ0RhdGEtPmFsbFRyYW5zaXRp
b25zSGF2ZUJlZW5NYXJrZWQpIHsKKyAgICAgICAgYm9vbCBhbGxBcmVNYXJrZWRTb0ZhciA9IHRy
dWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RmZ0RhdGEtPnRyYW5zaXRp
b25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoKCFtX2RmZ0RhdGEtPnRyYW5zaXRp
b25zW2ldLm1fY29kZU9yaWdpbgorICAgICAgICAgICAgICAgICB8fCBIZWFwOjppc01hcmtlZCht
X2RmZ0RhdGEtPnRyYW5zaXRpb25zW2ldLm1fY29kZU9yaWdpbi5nZXQoKSkpCisgICAgICAgICAg
ICAgICAgJiYgSGVhcDo6aXNNYXJrZWQobV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX2Zyb20u
Z2V0KCkpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyB0aHJlZSB0aGlu
Z3MgYXJlIGxpdmUsIHRoZW4gdGhlIHRhcmdldCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyB0
cmFuc2l0aW9uIGlzIGFsc28gbGl2ZToKKyAgICAgICAgICAgICAgICAvLyAtIFRoaXMgY29kZSBi
bG9jay4gV2Uga25vdyBpdCdzIGxpdmUgYWxyZWFkeSBiZWNhdXNlIG90aGVyd2lzZQorICAgICAg
ICAgICAgICAgIC8vICAgd2Ugd291bGRuJ3QgYmUgc2Nhbm5pbmcgb3Vyc2VsdmVzLgorICAgICAg
ICAgICAgICAgIC8vIC0gVGhlIGNvZGUgb3JpZ2luIG9mIHRoZSB0cmFuc2l0aW9uLiBUcmFuc2l0
aW9ucyBtYXkgYXJpc2UgZnJvbQorICAgICAgICAgICAgICAgIC8vICAgY29kZSB0aGF0IHdhcyBp
bmxpbmVkLiBUaGV5IGFyZSBub3QgcmVsZXZhbnQgaWYgdGhlIHVzZXIncworICAgICAgICAgICAg
ICAgIC8vICAgb2JqZWN0IHRoYXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBpbmxpbmVlIHRvIHJ1biBp
cyBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAvLyAgIGxpdmUuCisgICAgICAgICAgICAgICAg
Ly8gLSBUaGUgc291cmNlIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgdHJhbnNpdGlvbiBjaGVja3Mg
aWYgc29tZQorICAgICAgICAgICAgICAgIC8vICAgaGVhcCBsb2NhdGlvbiBob2xkcyB0aGUgc291
cmNlLCBhbmQgaWYgc28sIHN0b3JlcyB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIC8vICAg
SGVuY2UgdGhlIHNvdXJjZSBtdXN0IGJlIGxpdmUgZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGJlIGxp
dmUuCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZGZnRGF0YS0+dHJhbnNpdGlv
bnNbaV0ubV90byk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhbGxBcmVN
YXJrZWRTb0ZhciA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYWxs
QXJlTWFya2VkU29GYXIpCisgICAgICAgICAgICBtX2RmZ0RhdGEtPmFsbFRyYW5zaXRpb25zSGF2
ZUJlZW5NYXJrZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBDaGVjayBpZiB3ZSBoYXZl
IGFueSByZW1haW5pbmcgd29yayB0byBkby4KKyAgICBpZiAobV9kZmdEYXRhLT5saXZlbmVzc0hh
c0JlZW5Qcm92ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBOb3cgY2hlY2sgYWxs
IG9mIG91ciB3ZWFrIHJlZmVyZW5jZXMuIElmIGFsbCBvZiB0aGVtIGFyZSBsaXZlLCB0aGVuIHdl
CisgICAgLy8gaGF2ZSBwcm92ZWQgbGl2ZW5lc3MgYW5kIHNvIHdlIHNjYW4gb3VyIHN0cm9uZyBy
ZWZlcmVuY2VzLiBJZiBhdCBlbmQgb2YKKyAgICAvLyBHQyB3ZSBzdGlsbCBoYXZlIG5vdCBwcm92
ZWQgbGl2ZW5lc3MsIHRoZW4gdGhpcyBjb2RlIGJsb2NrIGlzIHRvYXN0LgorICAgIGJvb2wgYWxs
QXJlTGl2ZVNvRmFyID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kZmdE
YXRhLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIUhlYXA6Omlz
TWFya2VkKG1fZGZnRGF0YS0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAg
ICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIElmIHNvbWUgd2VhayByZWZlcmVuY2VzIGFyZSBkZWFkLCB0
aGVuIHRoaXMgZml4cG9pbnQgaXRlcmF0aW9uIHdhcworICAgIC8vIHVuc3VjY2Vzc2Z1bC4KKyAg
ICBpZiAoIWFsbEFyZUxpdmVTb0ZhcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEFs
bCB3ZWFrIHJlZmVyZW5jZXMgYXJlIGxpdmUuIFJlY29yZCB0aGlzIGluZm9ybWF0aW9uIHNvIHdl
IGRvbid0CisgICAgLy8gY29tZSBiYWNrIGhlcmUgYWdhaW4sIGFuZCBzY2FuIHRoZSBzdHJvbmcg
cmVmZXJlbmNlcy4KKyAgICBtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IHRydWU7
CisgICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCit9CisKK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHBlcmZvcm1UcmFjaW5nRml4cG9pbnRJdGVy
YXRpb24odmlzaXRvcik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpCit7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlVW5saW5raW5nID0gdHJ1ZTsKKyNlbHNlCisgICAgc3RhdGljIGNvbnN0IGJv
b2wgdmVyYm9zZVVubGlua2luZyA9IGZhbHNlOworI2VuZGlmCisgICAgCisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgbm90IGxpdmUuIElmIHdlIGFyZSwgdGhlbiBq
ZXR0aXNvbi4KKyAgICBpZiAoIShzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5n
U2NhbigpIHx8IG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkKSkgeworICAgICAgICBp
ZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgIHByaW50ZigiQ29kZSBibG9jayAlcCBo
YXMgZGVhZCB3ZWFrIHJlZmVyZW5jZXMsIGpldHRpc29uaW5nIGR1cmluZyBHQy5cbiIsIHRoaXMp
OworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBiYXNlbGluZSBKSVQga25vd3MgdGhh
dCBpdCBzaG91bGQgcmUtd2FybS11cCBiZWZvcmUKKyAgICAgICAgLy8gb3B0aW1pemluZy4KKyAg
ICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICAKKyAg
ICAgICAgamV0dGlzb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKyAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIC8vIEhhbmRsZSBpbmxpbmUg
Y2FjaGVzLgorICAgIGlmICghIWdldEpJVENvZGUoKSkgeworICAgICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIodGhpcyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoY2FsbExpbmtJ
bmZvKGkpLmlzTGlua2VkKCkgJiYgIUhlYXA6OmlzTWFya2VkKGNhbGxMaW5rSW5mbyhpKS5jYWxs
ZWUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAg
ICAgICAgICAgICAgICAgIHByaW50ZigiQ2xlYXJpbmcgY2FsbCBmcm9tICVwLlxuIiwgdGhpcyk7
CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLnVubGluaygqbV9nbG9iYWxEYXRhLCBy
ZXBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghIWNhbGxMaW5r
SW5mbyhpKS5sYXN0U2VlbkNhbGxlZQorICAgICAgICAgICAgICAgICYmICFIZWFwOjppc01hcmtl
ZChjYWxsTGlua0luZm8oaSkubGFzdFNlZW5DYWxsZWUuZ2V0KCkpKQorICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZS5jbGVhcigpOworICAgICAgICB9CisgICAg
ICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX2dsb2JhbFJlc29sdmVJbmZvcy5zaXplKCksIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9nbG9iYWxSZXNvbHZlSW5mb3Nb
aV0uc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX2dsb2JhbFJlc29sdmVJbmZvc1tpXS5z
dHJ1Y3R1cmUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcp
CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ2xlYXJpbmcgcmVzb2x2ZSBpbmZvIGluICVw
LlxuIiwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9nbG9iYWxSZXNvbHZlSW5mb3NbaV0uc3Ry
dWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KHNpemVfdCBzaXplID0gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gbV9z
dHJ1Y3R1cmVTdHViSW5mb3NbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5
cGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc3R1YkluZm8udmlzaXRXZWFrUmVm
ZXJlbmNlcygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgICAgICBwcmludGYoIkNs
ZWFyaW5nIHN0cnVjdHVyZSBjYWNoZSAoa2luZCAlZCkgaW4gJXAuXG4iLCBzdHViSW5mby5hY2Nl
c3NUeXBlLCB0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlzR2V0QnlJZEFj
Y2VzcyhhY2Nlc3NUeXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgICAgICAgICAgREZHOjpkZmdS
ZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgSklUOjpyZXNldFBhdGNoR2V0QnlJZChyZXBhdGNoQnVm
ZmVyLCAmc3R1YkluZm8pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoaXNQdXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKTsKKyAgICAgICAgICAgICAgICBpZiAo
Z2V0SklUQ29kZSgpLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgICAgICAg
ICAgICAgIERGRzo6ZGZnUmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAg
ICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgICAgICBKSVQ6OnJlc2V0UGF0Y2hQ
dXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHViSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0KCk7CisgICAgICAgIH0KKworICAgICAg
ICBmb3IgKHNpemVfdCBzaXplID0gbV9tZXRob2RDYWxsTGlua0luZm9zLnNpemUoKSwgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbV9tZXRob2RDYWxsTGlua0luZm9z
W2ldLmNhY2hlZFN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgQVNTRVJUKG1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5zZWVuT25j
ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghIW1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNo
ZWRQcm90b3R5cGVTdHJ1Y3R1cmUpOworCisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KG1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAg
ICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKG1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNo
ZWRQcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICAgICAgfHwgIUhlYXA6Omlz
TWFya2VkKG1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRGdW5jdGlvbi5nZXQoKSkKKyAg
ICAgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQobV9tZXRob2RDYWxsTGlua0luZm9zW2ld
LmNhY2hlZFByb3RvdHlwZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZVVu
bGlua2luZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDbGVhcmluZyBtZXRob2QgY2Fs
bCBpbiAlcC5cbiIsIHRoaXMpOworICAgICAgICAgICAgICAgIG1fbWV0aG9kQ2FsbExpbmtJbmZv
c1tpXS5yZXNldChyZXBhdGNoQnVmZmVyLCBnZXRKSVRUeXBlKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBIYW5kbGUgdGhlIGJ5dGVjb2RlIGRp
c2NhcmRpbmcgY2hvcmUuCisgICAgaWYgKG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlKSB7CisgICAg
ICAgIGRpc2NhcmRCeXRlY29kZSgpOworICAgICAgICBtX3Nob3VsZERpc2NhcmRCeXRlY29kZSA9
IGZhbHNlOworICAgIH0KK30KKwordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdS
ZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewogICAgIHZpc2l0b3IuYXBwZW5kKCZt
X2dsb2JhbE9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsK
ICAgICBpZiAobV9yYXJlRGF0YSkgewpAQCAtMTYwMSw0MiArMTgwNiwxMiBAQCB2b2lkIENvZGVC
bG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZt
X2Z1bmN0aW9uRXhwcnNbaV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlv
bkRlY2xzLnNpemUoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9mdW5jdGlvbkRl
Y2xzW2ldKTsKLSNpZiBFTkFCTEUoSklUKQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7Ci0gICAgICAgIGlmIChjYWxsTGlua0luZm8o
aSkuaXNMaW5rZWQoKSkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZjYWxsTGlua0luZm8o
aSkuY2FsbGVlKTsKLSAgICAgICAgaWYgKCEhY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVl
KQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNh
bGxlZSk7Ci0gICAgfQotI2VuZGlmCiAjaWYgRU5BQkxFKElOVEVSUFJFVEVSKQogICAgIGZvciAo
c2l6ZV90IHNpemUgPSBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7
IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHZpc2l0U3RydWN0dXJlcyh2aXNpdG9yLCAmaW5zdHJ1
Y3Rpb25zKClbbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV0pOwogICAgIGZvciAoc2l6
ZV90IHNpemUgPSBtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8
IHNpemU7ICsraSkKICAgICAgICAgdmlzaXRTdHJ1Y3R1cmVzKHZpc2l0b3IsICZpbnN0cnVjdGlv
bnMoKVttX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnNbaV1dKTsKICNlbmRpZgotI2lmIEVOQUJM
RShKSVQpCi0gICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fZ2xvYmFsUmVzb2x2ZUluZm9zLnNpemUo
KSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZ2xvYmFsUmVzb2x2ZUlu
Zm9zW2ldLnN0cnVjdHVyZSkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbFJl
c29sdmVJbmZvc1tpXS5zdHJ1Y3R1cmUpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IHNpemUg
PSBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAg
ICAgICBtX3N0cnVjdHVyZVN0dWJJbmZvc1tpXS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLQot
ICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX21ldGhvZENhbGxMaW5rSW5mb3Muc2l6ZSgpLCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAobV9tZXRob2RDYWxsTGlua0luZm9zW2ld
LmNhY2hlZFN0cnVjdHVyZSkgewotICAgICAgICAgICAgLy8gVGhlc2UgbWVtYmVycyBtdXN0IGJl
IGZpbGxlZCBhdCB0aGUgc2FtZSB0aW1lLCBhbmQgb25seSBhZnRlcgotICAgICAgICAgICAgLy8g
dGhlIE1ldGhvZENhbGxMaW5rSW5mbyBpcyBzZXQgYXMgc2Vlbi4KLSAgICAgICAgICAgIEFTU0VS
VChtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uc2Vlbk9uY2UoKSk7Ci0gICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmbV9tZXRob2RDYWxsTGlua0luZm9zW2ldLmNhY2hlZFN0cnVjdHVyZSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoISFtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90
eXBlU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX21ldGhvZENhbGxM
aW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkRnVuY3Rpb24pOwotICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRQ
cm90b3R5cGUpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBpZiAoaGFzQ29kZU9yaWdpbnMoKSkgewpAQCAtMTY1MywxNSArMTgyOCw2IEBAIHZv
aWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAgICBmb3IgKHVuc2lnbmVk
IHByb2ZpbGVJbmRleCA9IDA7IHByb2ZpbGVJbmRleCA8IG51bWJlck9mVmFsdWVQcm9maWxlcygp
OyArK3Byb2ZpbGVJbmRleCkKICAgICAgICAgdmFsdWVQcm9maWxlKHByb2ZpbGVJbmRleCktPmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwogI2VuZGlmCi0gICAgCi0jaWYgRU5BQkxFKEpJVCkg
JiYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgLy8gS2lsbCBvZmYgc29tZSBieXRlY29k
ZS4gV2UgY2FuJ3QgZG8gaXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYWNjaWRlbnRh
bGx5Ci0gICAgLy8gY2FsbCBpbnRvIG1hbGxvYyB3aGlsZSBpbiBzdG9wLXRoZS13b3JsZCBHQyBt
b2RlLgotICAgIGlmIChoYXNJbnN0cnVjdGlvbnMoKSAmJiBtX3Nob3VsZERpc2NhcmRCeXRlY29k
ZSkKLSAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXMpOwotI2Vu
ZGlmCi0gICAgCi0gICAgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOwogfQog
CiB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpAQCAtMTg2Nyw2ICsyMDMzLDIxIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxp
bmsoSlNHbG9iYWxEYXRhJiAKICAgICAgICAgcmVtb3ZlKCk7CiB9CiAKK3ZvaWQgTWV0aG9kQ2Fs
bExpbmtJbmZvOjpyZXNldChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBKSVRDb2RlOjpK
SVRUeXBlIGppdFR5cGUpCit7CisgICAgY2FjaGVkU3RydWN0dXJlLmNsZWFyVG9NYXhVbnNpZ25l
ZCgpOworICAgIGNhY2hlZFByb3RvdHlwZS5jbGVhcigpOworICAgIGNhY2hlZFByb3RvdHlwZVN0
cnVjdHVyZS5jbGVhclRvTWF4VW5zaWduZWQoKTsKKyAgICBjYWNoZWRGdW5jdGlvbi5jbGVhcigp
OworICAgIAorICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRNZXRob2RP
cHRpbWl6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChqaXRUeXBlID09IEpJVENvZGU6
OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxv
Y2F0aW9uLCBjdGlfb3BfZ2V0X2J5X2lkX21ldGhvZF9jaGVjayk7CisgICAgfQorfQorCiB2b2lk
IENvZGVCbG9jazo6dW5saW5rQ2FsbHMoKQogewogICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCkBA
IC0xOTgyLDM3ICsyMTYzLDI4IEBAIGJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNvbXBpbGVX
aXRoREYKICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDYWxsKHRoaXMpOwog
fQogCi12b2lkIFByb2dyYW1Db2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3ZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24oKQogewogICAgIEFTU0VSVChn
ZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIEFTU0VSVCh0aGlzID09
IHJlcGxhY2VtZW50KCkpOwotICAgIHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3du
ZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7CisgICAg
c3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRp
c29uT3B0aW1pemVkQ29kZSgqZ2xvYmFsRGF0YSgpKTsKIH0KIAotdm9pZCBFdmFsQ29kZUJsb2Nr
OjpqZXR0aXNvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEV2YWxDb2RlQmxvY2s6
OmpldHRpc29uKCkKIHsKICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKICAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKLSAgICBzdGF0aWNf
Y2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6
ZWRDb2RlKGdsb2JhbERhdGEpOworICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3du
ZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKmdsb2JhbERhdGEoKSk7CiB9
CiAKLXZvaWQgRnVuY3Rpb25Db2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3ZvaWQgRnVuY3Rpb25Db2RlQmxvY2s6OmpldHRpc29uKCkKIHsKICAgICBBU1NFUlQo
Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICBBU1NFUlQodGhpcyA9
PSByZXBsYWNlbWVudCgpKTsKLSAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZUZvcihnbG9iYWxEYXRhLCBt
X2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworICAgIHN0
YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlz
b25PcHRpbWl6ZWRDb2RlRm9yKCpnbG9iYWxEYXRhKCksIG1faXNDb25zdHJ1Y3RvciA/IENvZGVG
b3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiB9CiAjZW5kaWYKIAotdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKLXsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5H
KSB8fCAhRU5BQkxFKEpJVCkKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAg
IEFTU0VSVChtX3Nob3VsZERpc2NhcmRCeXRlY29kZSk7Ci0gICAgZGlzY2FyZEJ5dGVjb2RlKCk7
Ci19Ci0KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiBib29sIENvZGVCbG9jazo6c2hvdWxk
T3B0aW1pemVOb3coKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHJlc2V0KFJlcGF0Y2hCdWZmZXImLCBKSVRDb2Rl
OjpKSVRUeXBlKTsKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogICAgICAgICBD
b2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKQEAgLTI1MCw3ICsyNTIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAgIGNsYXNzIENvZGVCbG9jayA6IHB1
YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBjbGFzcyBDb2RlQmxvY2sgOiBwdWJs
aWMgVW5jb25kaXRpb25hbEZpbmFsaXplciwgcHVibGljIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIg
ewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVDsKICAgICBwdWJsaWM6CkBAIC0yOTQsMTAgKzI5Niw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIGNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkgeyByZXR1cm4gaGFzSW5z
dHJ1Y3Rpb25zKCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7Ci0gICAgICAgIAotICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGFyZSBub3QgamV0dGlz
b25pbmcgYSBjb2RlIGJsb2NrLCBhbmQgdGh1cwotICAgICAgICAvLyBoYXZlIG5vIGV2aWRlbmNl
IHRvIHN1Z2dlc3QgdGhhdCBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZCBpbnRvIGFnYWluLgotICAg
ICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CiAKQEAgLTUzNyw3ICs1MzUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkg
eyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsgfQogICAgICAgICBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1
dGFibGVNZW1vcnkoKTsgfQogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1p
emVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0
dGlzb24oKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0g
MDsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAwOwogICAgICAg
ICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTEwNjAsMTAgKzEwNTgsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAg
ICAgdm9pZCByZW9wdGltaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgdm9p
ZCByZW9wdGltaXplKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50
KCkgIT0gdGhpcyk7Ci0gICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbihnbG9iYWxE
YXRhKTsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50KCktPmpldHRpc29uKCk7CiAgICAgICAgICAg
ICBjb3VudFJlb3B0aW1pemF0aW9uKCk7CiAgICAgICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVw
KCk7CiAgICAgICAgIH0KQEAgLTEwODUsNiArMTA4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBib29sIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlOwogCiAgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKICAgICAgICAgCiAg
ICAgcHJpdmF0ZToKQEAgLTExMDEsNiArMTEwMCwyOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBwcmludFB1dEJ5SWRPcChFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJ
bnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgY2hhciogb3ApIGNvbnN0OwogI2Vu
ZGlmCiAgICAgICAgIHZvaWQgdmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiwgSW5zdHJ1Y3Rp
b24qIHZQQykgY29uc3Q7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBi
b29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gQW0gSSBhIERGRyBjb2RlIGJsb2NrPyBJZiBub3QsIHRoZW4gSSdt
IGxpdmUgaWYgSSBhbSBiZWluZyBzY2FubmVkLgorICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIElmIEkgYW0gYSBERkcgY29kZSBibG9jaywgdGhlbiBhbSBJIGN1cnJlbnRseSBleGVjdXRp
bmc/IElmIHNvLAorICAgICAgICAgICAgLy8gdGhlbiBJJ20gZGVmaW5pdGVseSBsaXZlLgorICAg
ICAgICAgICAgaWYgKG1fZGZnRGF0YS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorI2Vsc2UKKyAgICAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVu
ZXNzRHVyaW5nU2NhbigpIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorICAgICAgICAKKyAgICAg
ICAgdm9pZCBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKFNsb3RWaXNpdG9yJik7Cisg
ICAgICAgIAorICAgICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RW
aXNpdG9yJik7CisgICAgICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RW
aXNpdG9yJik7CiAKICAgICAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKICAg
ICAgICAgewpAQCAtMTE3Nyw2ICsxMTk5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsKICAgICAgICAg
ICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7CiAgICAgICAgICAgICBib29sIGlzSmV0dGlzb25lZDsK
KyAgICAgICAgICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBh
bmQgdXNlZCBvbiBldmVyeSBHQy4KKyAgICAgICAgICAgIGJvb2wgYWxsVHJhbnNpdGlvbnNIYXZl
QmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCiAgICAgICAg
IH07CiAgICAgICAgIAogICAgICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOwpAQCAtMTI3
OCw3ICsxMzAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKEpT
R2xvYmFsRGF0YSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBj
YW5Db21waWxlV2l0aERGRygpOwogI2VuZGlmCkBAIC0xMzEyLDcgKzEzMzYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVh
bCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSop
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVw
bGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCk7CiAj
ZW5kaWYKQEAgLTEzNDksNyArMTM3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShK
SVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29u
KCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAgICAgICB2
aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDEwMDY3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBs
aXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmly
c3RDaGFpbiwgaXNEaXJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgaW50IGNvdW50KQorICAgICAgICBib29sIHZpc2l0
V2VhayhpbnQgY291bnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgIFBvbHltb3JwaGljU3R1YkluZm8mIGlu
Zm8gPSBsaXN0W2ldOwpAQCAtMTI0LDEyICsxMjQsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5mby5iYXNlKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaW5mby51LnByb3RvICYmICFpbmZvLmlzQ2hhaW4pCi0gICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpbmZvLnUucHJvdG8pOwotICAgICAgICAgICAgICAg
IGlmIChpbmZvLnUuY2hhaW4gJiYgaW5mby5pc0NoYWluKQotICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmaW5mby51LmNoYWluKTsKKyAgICAgICAgICAgICAgICBpZiAoIUhlYXA6
OmlzTWFya2VkKGluZm8uYmFzZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby51LnByb3RvICYmICFpbmZvLmlzQ2hhaW4K
KyAgICAgICAgICAgICAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKGluZm8udS5wcm90by5nZXQo
KSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
ZiAoaW5mby51LmNoYWluICYmIGluZm8uaXNDaGFpbgorICAgICAgICAgICAgICAgICAgICAmJiAh
SGVhcDo6aXNNYXJrZWQoaW5mby51LmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24g
MTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNDggKzYyLDU1IEBAIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OmRlcmVmKCkKICAgICB9CiB9CiAKLXZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBTdHJ1Y3R1cmVTdHViSW5m
bzo6dmlzaXRXZWFrUmVmZXJlbmNlcygpCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAg
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1
LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5n
ZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZ1LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LmdldEJ5SWRQcm90
by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZ1LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJnUuZ2V0QnlJZENoYWluLmNoYWluKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5nZXRC
eUlkQ2hhaW4uY2hhaW4uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7CiAgICAgICAg
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0g
dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVzLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yLCB1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6
ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVjdHVyZXMt
PnZpc2l0V2Vhayh1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpIHsKKyAgICAgICAgICAgIGRl
bGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9wcm90b19saXN0OiB7CiAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCog
cG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7
Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvciwg
dS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAoIXBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuZ2V0QnlJZFNlbGZMaXN0Lmxp
c3RTaXplKSkgeworICAgICAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb246Ci0gICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZ1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQoJnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQoJnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOwotICAgICAgICByZXR1
cm47CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1
dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjpp
c01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3Jl
cGxhY2U6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0g
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICBjYXNl
IGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aDoKLSAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25z
IGRvbid0IG5lZWQgdG8gbWFyayBhbnl0aGluZwotICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLmdl
dCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIC8vIFRoZSByZXN0
IG9mIHRoZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVxdWlyZSByZWZlcmVuY2VzLCBzbyB0aGVyZSBp
cyBubyBuZWVkIHRvCisgICAgICAgIC8vIGRvIGFueXRoaW5nLgorICAgICAgICBicmVhazsKICAg
ICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDEw
MDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwzNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYWNjZXNzX2dldF9zdHJpbmdfbGVuZ3RoLAogICAgIH07CiAKKyAgICBpbmxpbmUgYm9v
bCBpc0dldEJ5SWRBY2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxm
OgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CisgICAgICAgIGNhc2UgYWNj
ZXNzX2dldF9ieV9pZF9jaGFpbjoKKyAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZf
bGlzdDoKKyAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CisgICAgICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9nZW5lcmljOgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRf
YXJyYXlfbGVuZ3RoOgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlubGluZSBib29sIGlzUHV0
QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGFjY2Vzc1R5cGUpIHsKKyAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb246
CisgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgICAgICBjYXNlIGFj
Y2Vzc19wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CiAgICAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8oKQogICAgICAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191bnNldCkKQEAgLTExMywxMCAr
MTQyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgICAgICAgICAgdS5wdXRCeUlkUmVw
bGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgYmFzZU9iamVj
dFN0cnVjdHVyZSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVzZXQoKQor
ICAgICAgICB7CisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0OworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigp
OworICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkZXJlZigpOwotICAgICAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKKyAgICAgICAgYm9vbCB2aXNpdFdlYWtSZWZlcmVu
Y2VzKCk7CisgICAgICAgIAogICAgICAgICBib29sIHNlZW5PbmNlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIHNlZW47CkBAIC0xNDIsMTcgKzE3OSwxOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmU7CiAgICAgICAgIGludDE2X3QgZGVs
dGFDYWxsVG9TdHJ1Y3RDaGVjazsKICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1Nsb3dDYXNl
OworICAgICAgICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOworI2Vsc2UKKyAgICAg
ICAgaW50MTZfdCBkZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlOworICAgICAgICBpbnQxNl90IGRl
bHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlOwogI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgICAgICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7Ci0jZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9UYWdM
b2FkT3JTdG9yZTsKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvUGF5bG9hZExv
YWRPclN0b3JlOwotI2VuZGlmCisgICAgICAgICAgICAgICAgLy8gSXQgd291bGQgYmUgdW53aXNl
IHRvIHB1dCBhbnl0aGluZyBoZXJlLCBhcyBpdCB3aWxsIHN1cmVseSBiZSBvdmVyd3JpdHRlbi4K
ICAgICAgICAgICAgIH0gdW5zZXQ7CiAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlz
aW9uIDEwMDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsMTMgKzE1NywxMyBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZv
ID0gbV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKGkpOwogICAgICAgICBDb2RlTG9jYXRp
b25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3Bl
cnR5QWNjZXNzZXNbaV0ubV9mdW5jdGlvbkNhbGwpOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICAgICAgaW5mby51LnVuc2V0LmRlbHRh
Q2hlY2tJbW1Ub0NhbGwgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBjYWxs
UmV0dXJuTG9jYXRpb24pOworICAgICAgICBpbmZvLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nl
c3Nlc1tpXS5tX2RlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBjYWxsUmV0dXJuTG9jYXRpb24pOwogICAg
ICAgICBpbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaykpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKKyAgICAg
ICAgaW5mby5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nl
c3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKICNlbHNlCi0gICAgICAgIGluZm8u
dS51bnNldC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlB
Y2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpKTsKLSAgICAgICAgaW5mby51
LnVuc2V0LmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVy
dHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSk7CisgICAgICAg
IGluZm8uZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0
cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSk7CisgICAgICAgIGluZm8uZGVs
dGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2Fs
bFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpKTsKICNlbmRpZgogICAgICAgICBp
bmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJl
dHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ld
Lm1fZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvRG9uZSA9
IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0RvbmUpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzI1LDggKzMyNSw5IEBAIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZh
bHVlLmdldChleGVjLCAqcHJvcGVydHlOYW1lLCBzbG90KTsKLQotICAgIE1ldGhvZENhbGxMaW5r
SW5mbyYgbWV0aG9kSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRNZXRob2RDYWxsTGlua0lu
Zm8ocmV0dXJuQWRkcmVzcyk7CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKKyAgICBNZXRob2RDYWxsTGlua0luZm8mIG1ldGhvZEluZm8gPSBjb2Rl
QmxvY2stPmdldE1ldGhvZENhbGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBpZiAobWV0
aG9kSW5mby5zZWVuT25jZSgpKQogICAgICAgICBkZmdSZXBhdGNoR2V0TWV0aG9kKGV4ZWMsIGJh
c2VWYWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgbWV0aG9kSW5mbyk7CiAgICAgZWxzZQpAQCAt
MzY3LDcgKzM2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UK
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
VmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCAqcHJvcGVy
dHlOYW1lLCBzbG90KTsKLQorICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBpZiAo
c3R1YkluZm8uc2VlbikKICAgICAgICAgZGZnUmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVl
LCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE5ICs0
OSwxOSBAQCBzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kCiAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aEZ1
bmN0aW9uKTsKIAogICAgIC8vIFBhdGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUgb2Zmc2V0
IG9mIHRoZSBsb2FkLgotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby51LnVu
c2V0LmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQo
LShpbnRwdHJfdClzdHViSW5mby5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgc3RydWN0dXJlKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChjb21wYWN0KQotICAgICAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBzaXplb2YoSlNW
YWx1ZSkgKiBvZmZzZXQpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0KTsKICAgICBlbHNl
Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9y
U3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQpOworICAgICAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQo
c3R1YkluZm8uZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNl
dCk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChjb21wYWN0KSB7Ci0gICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxh
YmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9UYWdMb2FkT3JT
dG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVw
YXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0
KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8u
ZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0
b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFi
ZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSks
IHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby51
LnVuc2V0LmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICog
b2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1RhZ0xv
YWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUp
ICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC02NTEsNiArNjUxLDQ0IEBAIHZvaWQg
ZGZnTGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW4KICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLCBv
cGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKIH0KIAordm9pZCBkZmdSZXNldEdldEJ5SUQoUmVw
YXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
eworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0odWludHB0cl90
KXN0dWJJbmZvLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigt
MSkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8u
ZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNl
dChzdHViSW5mby5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0
QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNl
bmRpZgorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpKTsKK30KKwordm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRj
aEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZfREZHT3BlcmF0
aW9uX0VKQ0kgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0RGR09wZXJhdGlv
bl9FSkNJPihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBWX0RGR09wZXJhdGlvbl9FSkNJ
IG9wdGltaXplZEZ1bmN0aW9uOworICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplOworICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsK
KyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCk7CisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIH0KKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1
bmN0aW9uKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0odWludHB0cl90KXN0dWJJbmZvLmRlbHRhQ2hl
Y2tJbW1Ub0NhbGwpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUp
LCAwKTsKKyNlbHNlCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvVGFnTG9h
ZE9yU3RvcmUpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9QYXls
b2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRj
aC5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
cGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksMjEgQEAgdm9pZCBkZmdCdWlsZEdl
dEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVgogdm9pZCBkZmdCdWlsZEdldEJ5SURQcm90b0xpc3Qo
RXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0
ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSos
IENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKK3ZvaWQgZGZnUmVzZXRHZXRC
eUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBkZmdSZXNldFB1
dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAotI2VuZGlmCi0jZW5kaWYKKyNlbHNlIC8vIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit2b2lkIGRmZ1Jlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0
dXJlU3R1YkluZm8mKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cit2b2lkIGRmZ1Jlc2V0UHV0
QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorI2VuZGlmIC8vIERGR1JlcGF0Y2hfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxE
YXRhLCBmdW5jKTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB2b2lkIHJlc2V0UGF0Y2hH
ZXRCeUlkKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyopOworICAgICAgICBzdGF0
aWMgdm9pZCByZXNldFBhdGNoUHV0QnlJZChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1Yklu
Zm8qKTsKICAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNv
ZGVibG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zm
c2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogICAgICAgICBzdGF0aWMgdm9p
ZCBwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZWJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpOwogICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaE1l
dGhvZENhbGxQcm90byhKU0dsb2JhbERhdGEmLCBDb2RlQmxvY2sqIGNvZGVibG9jaywgTWV0aG9k
Q2FsbExpbmtJbmZvJiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCosIFJldHVybkFk
ZHJlc3NQdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTA3LDYgKzExMDcsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXIo
SW5zdHJ1YwogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9wdXRf
Z2xvYmFsX3ZhciksIHZhbHVlLCByZWdUMSwgcmVnVDApOwogfQogCit2b2lkIEpJVDo6cmVzZXRQ
YXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5jYWxs
UmV0dXJuTG9jYXRpb24sIGN0aV9vcF9nZXRfYnlfaWQpOworICAgIHJlcGF0Y2hCdWZmZXIucmVw
YXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHBhdGNoT2Zm
c2V0R2V0QnlJZFN0cnVjdHVyZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSksIDApOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJl
bENvbXBhY3RBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIpLCAw
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBB
dE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKSwgc3R1YkluZm8tPmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGwpKTsKK30KKwordm9pZCBKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZXIm
IHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3BfcHV0
X2J5X2lkKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5kYXRhTGFiZWxQdHJBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChwYXRjaE9mZnNldFB1
dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZz
ZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQyKSwgMCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMDA2NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0NCw2ICsxMDQ0LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nbG9i
YWxfdmFyKEluc3RydWMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDAs
IHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFj
Y2Vzcyk7CiB9CiAKK3ZvaWQgSklUOjpyZXNldFBhdGNoR2V0QnlJZChSZXBhdGNoQnVmZmVyJiBy
ZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCit7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY3RpX29wX2dldF9i
eV9pZCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4u
ZGF0YUxhYmVsUHRyQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oLTEpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRC
eUlkUHJvcGVydHlNYXBPZmZzZXQpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hU
b1Nsb3dDYXNlKSwgc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1w
YXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpKTsKK30KKwordm9pZCBKSVQ6OnJlc2V0UGF0
Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLCBjdGlfb3BfcHV0X2J5X2lkKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChwYXRjaE9mZnNl
dFB1dEJ5SWRTdHJ1Y3R1cmUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBh
Y3RBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCksIDApOworfQor
CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIo
UmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBS
ZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIFdyaXRlQmFycmllclVz
ZUtpbmQgdXNlS2luZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
CShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzOCw3ICsxOTM4LDcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAg
ICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChp
biBsb29wKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKICNlbmRp
ZgotICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTIwMDgsNyArMjAwOCw3IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQogICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2Yg
JXAoJXApIChpbiBsb29wIGFmdGVyIE9TUiBmYWlsKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpKTsKICNlbmRpZgotICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjA0MCwxMiArMjA0MCwxMCBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAjaWYgRU5BQkxFKEpJVF9WRVJC
T1NFX09TUikKICAgICAgICAgICAgIHByaW50ZigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBv
ZiAlcCglcCkgKGluIHJldHVybikuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsK
LQotICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJp
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFy
cmllci5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFdyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjbGVhcigpIHsgY2xlYXIoMCk7IH0KKyAgICB2b2lkIGNs
ZWFyVG9NYXhVbnNpZ25lZCgpIHsgY2xlYXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsg
fQogCiBwcm90ZWN0ZWQ6CiAgICAgSklUV3JpdGVCYXJyaWVyQmFzZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115747</attachid>
            <date>2011-11-17 23:40:58 -0800</date>
            <delta_ts>2011-11-18 01:14:32 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>weakcaches_patch_4.diff</filename>
            <type>text/plain</type>
            <size>48173</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNzI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDExLTExLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5saW5lIGNhY2hlcyB0aGF0IHJlZmVyIHRvIG90aGVyd2lzZSBkZWFkIG9iamVjdHMgc2hvdWxk
IGJlIGNsZWFyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyMzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgREZHIGNvZGUgYmxvY2tzIG5vdyBwYXJ0aWNpcGF0ZSBpbiB0aGUgd2VhayByZWZlcmVuY2Ug
aGFydmVzdGVyIGZpeHBvaW50CisgICAgICAgIHNvIHRoYXQgdGhleSBvbmx5IGNvbnNpZGVyIHRo
ZW1zZWx2ZXMgdG8gYmUgbGl2ZSBpZiBlaXRoZXIgdGhleSBhcmUKKyAgICAgICAgY3VycmVudGx5
IGV4ZWN1dGluZywgb3IgdGhlaXIgb3duZXIgaXMgbGl2ZSBhbmQgYWxsIG9mIHRoZWlyIHdlYWsg
cmVmZXJlbmNlcworICAgICAgICBhcmUgbGl2ZS4gSWYgbm90LCB0aGUgcmVsZXZhbnQgY29kZSBi
bG9ja3MgYXJlIGpldHRpc29uZWQuCisKKyAgICAgICAgSW5saW5lIGNhY2hlcyBpbiBib3RoIHRo
ZSBvbGQgSklUIGFuZCB0aGUgREZHIGFyZSBub3cgY2xlYXJlZCBpZiBhbnkgb2YKKyAgICAgICAg
dGhlaXIgcmVmZXJlbmNlcyBhcmUgbm90IG1hcmtlZCBhdCB0aGUgZW5kIG9mIGEgR0MuCisKKyAg
ICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsIG9uIFN1blNwaWRlciwgVjgsIGFuZCBL
cmFrZW4uIFdpdGggdGhlIGNsZWFyLQorICAgICAgICBhbGwtY29kZS1vbi1HQyBwb2xpY3kgdGhh
dCB3ZSBjdXJyZW50bHkgaGF2ZSwgaXQgc2hvd3MgYSBzbGlnaHQgcmVkdWN0aW9uCisgICAgICAg
IGluIG1lbW9yeSB1c2FnZS4gSWYgd2UgdHVybiB0aGF0IHBvbGljeSBvZmYsIGl0J3MgcHJldHR5
IGVhc3kgdG8gY29tZSB1cAorICAgICAgICB3aXRoIGFuIGV4YW1wbGUgcHJvZ3JhbSB0aGF0IHdp
bGwgY2F1c2UgVG9UIHRvIGV4cGVyaWVuY2UgbGluZWFyIGhlYXAKKyAgICAgICAgZ3Jvd3RoLCB3
aGlsZSB3aXRoIHRoaXMgcGF0Y2gsIHRoZSBoZWFwIHN0YXlzIHNtYWxsIGFuZCByZW1haW5zIGF0
IGEKKyAgICAgICAgY29uc3RhbnQgc2l6ZS4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Ni5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6cmVhZENhbGxU
YXJnZXQpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cmVhZENhbGxUYXJnZXQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlz
aXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnBlcmZvcm1UcmFjaW5nRml4
cG9pbnRJdGVyYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVy
ZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNl
cyk6CisgICAgICAgIChKU0M6Ok1ldGhvZENhbGxMaW5rSW5mbzo6cmVzZXQpOgorICAgICAgICAo
SlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkV2YWxDb2Rl
QmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmpldHRp
c29uKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpyZW9wdGltaXplKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1l
ZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2Nhbik6CisgICAgICAgICogYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
Ojp2aXNpdFdlYWspOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgor
ICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6Omlz
R2V0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OmlzUHV0QnlJZEFjY2Vzcyk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAgICogZGZnL0RGR0pJVENv
bXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3MpOgorICAgICAg
ICAoSlNDOjpERkc6OmRmZ1Jlc2V0R2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVz
ZXRQdXRCeUlEKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmRmZ1Jlc2V0R2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVzZXRQdXRCeUlE
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpyZXNldFBhdGNoR2V0QnlJZCk6CisgICAgICAgIChK
U0M6OkpJVDo6cmVzZXRQYXRjaFB1dEJ5SWQpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpyZXNldFBhdGNoR2V0QnlJZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cmVzZXRQYXRjaFB1dEJ5SWQpOgorICAgICAgICAqIGppdC9KSVRT
dHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAg
KiBqaXQvSklUV3JpdGVCYXJyaWVyLmg6CisgICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllckJh
c2U6OmNsZWFyVG9NYXhVbnNpZ25lZCk6CisKIDIwMTEtMTEtMTcgIFBhdHJpY2sgR2Fuc3RlcmVy
ICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0NNYWtlXSBNb3ZlIEZBU1RfTUFMTE9D
IHNwZWNpZmljIGxpbmVzIGZyb20gUGxhdGZvcm0qLmNtYWtlIHRvIENNYWtlTGlzdHMudHh0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Ni5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNSw2ICsyMDUs
MTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5j
YXRlKCkgeyByZXR1cm4gaXNTU0UyUHJlc2VudCgpOyB9CiAgICAgc3RhdGljIGJvb2wgc3VwcG9y
dHNGbG9hdGluZ1BvaW50U3FydCgpIHsgcmV0dXJuIGlzU1NFMlByZXNlbnQoKTsgfQogICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludEFicygpIHsgcmV0dXJuIGlzU1NFMlByZXNl
bnQoKTsgfQorICAgIAorICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2Rl
TG9jYXRpb25DYWxsIGNhbGwpCisgICAgeworICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByZWlu
dGVycHJldF9jYXN0PGludDMyX3QqPihjYWxsLmRhdGFMb2NhdGlvbigpKVstMV07CisgICAgICAg
IHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oY2FsbC5kYXRhTG9jYXRpb24oKSkgKyBvZmZzZXQpKTsKKyAgICB9CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
CShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Nyw2ICs0OTcsMTEgQEAg
cHVibGljOgogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFNx
cnQoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1Bv
aW50QWJzKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHN0YXRpYyBGdW5jdGlvblB0ciBy
ZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCisgICAgeworICAgICAgICByZXR1
cm4gRnVuY3Rpb25QdHIoWDg2QXNzZW1ibGVyOjpyZWFkUG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0
ckF0T2Zmc2V0KC1SRVBUQUNIX09GRlNFVF9DQUxMX1IxMSkuZGF0YUxvY2F0aW9uKCkpKTsKKyAg
ICB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTAw
Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDExIEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJERkdOb2RlLmgi
CisjaW5jbHVkZSAiREZHUmVwYXRjaC5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKKyNpbmNsdWRlICJKSVRTdHVicy5o
IgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCkBAIC0xNTg3LDYgKzE1ODksMjA5IEBAIHZv
aWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKIHsKICAgICBpZiAoISFtX2Fs
dGVybmF0aXZlKQogICAgICAgICBtX2FsdGVybmF0aXZlLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKKworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0
aW9uYWwgZmluYWxpemVyczogbGF6eSBieXRlY29kZSBmcmVlaW5nLAorICAgIC8vIGlubGluZSBj
YWNoZSBjbGVhcmluZywgYW5kIGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2Fu
dGluZyB0byBkbyBhdAorICAgIC8vIGxlYXN0IG9uZSBvZiB0aG9zZSB0aGluZ3MgaXMgcHJvYmFi
bHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdAorICAgIC8v
IGFuZCB3aGVuIGl0IHJ1bnMsIGl0IGZpZ3VyZXMgb3V0IHdoZXRoZXIgaXQgaGFzIGFueSB3b3Jr
IHRvIGRvLgorICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzKTsKKyAg
ICAKKyAgICBpZiAoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSkg
eworICAgICAgICAvLyBUaGlzIGNvZGUgYmxvY2sgaXMgbGl2ZSwgc28gc2NhbiBhbGwgcmVmZXJl
bmNlcyBzdHJvbmdseSBhbmQgcmV0dXJuLgorICAgICAgICBzdHJvbmdseVZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyh2aXNpdG9yKTsKKyAgICAgICAgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKHZp
c2l0b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorI2lmIEVOQUJMRShERkdfSklU
KQorICAgIC8vIFdlIGdldCBoZXJlIGlmIHdlJ3JlIGxpdmUgaW4gdGhlIHNlbnNlIHRoYXQgb3Vy
IG93bmVyIGV4ZWN1dGFibGUgaXMgbGl2ZSwKKyAgICAvLyBidXQgd2UncmUgbm90IHlldCBsaXZl
IGZvciBzdXJlIGluIGFub3RoZXIgc2Vuc2U6IHdlIG1heSB5ZXQgZGVjaWRlIHRoYXQgdGhpcwor
ICAgIC8vIGNvZGUgYmxvY2sgc2hvdWxkIGJlIGpldHRpc29uZWQgYmFzZWQgb24gaXRzIG91dGdv
aW5nIHdlYWsgcmVmZXJlbmNlcyBiZWluZworICAgIC8vIHN0YWxlLiBTZXQgYSBmbGFnIHRvIGlu
ZGljYXRlIHRoYXQgd2UncmUgc3RpbGwgYXNzdW1pbmcgdGhhdCB3ZSdyZSBkZWFkLCBhbmQKKyAg
ICAvLyBwZXJmb3JtIG9uZSByb3VuZCBvZiBkZXRlcm1pbmluZyBpZiB3ZSdyZSBsaXZlLiBUaGUg
R0MgbWF5IGRldGVybWluZSwgYmFzZWQgb24KKyAgICAvLyBlaXRoZXIgdXMgbWFya2luZyBhZGRp
dGlvbmFsIG9iamVjdHMsIG9yIGJ5IG90aGVyIG9iamVjdHMgYmVpbmcgbWFya2VkIGZvcgorICAg
IC8vIG90aGVyIHJlYXNvbnMsIHRoYXQgdGhpcyBpdGVyYXRpb24gc2hvdWxkIHJ1biBhZ2Fpbjsg
aXQgd2lsbCBub3RpZnkgdXMgb2YgdGhpcworICAgIC8vIGRlY2lzaW9uIGJ5IGNhbGxpbmcgaGFy
dmVzdFdlYWtSZWZlcmVuY2VzKCkuCisgICAgCisgICAgbV9kZmdEYXRhLT5saXZlbmVzc0hhc0Jl
ZW5Qcm92ZWQgPSBmYWxzZTsKKyAgICBtX2RmZ0RhdGEtPmFsbFRyYW5zaXRpb25zSGF2ZUJlZW5N
YXJrZWQgPSBmYWxzZTsKKyAgICAKKyAgICBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9u
KHZpc2l0b3IpOworCisgICAgLy8gQWRkIGEgd2VhayByZWZlcmVuY2UgaGFydmVzdGVyIGlmIHdl
IGhhdmUgbm90IHJlYWNoZWQgZml4cG9pbnQgYW5kIG5lZWQgdG8KKyAgICAvLyBydW4gYWdhaW4u
CisgICAgaWYgKCEobV9kZmdEYXRhLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQgJiYgbV9kZmdEYXRh
LT5hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkKSkKKyAgICAgICAgdmlzaXRvci5hZGRXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKHRoaXMpOworICAgIAorI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQp
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICAKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBFdmFsdWF0ZSBvdXIgd2VhayByZWZlcmVuY2UgdHJh
bnNpdGlvbnMsIGlmIHRoZXJlIGFyZSBzdGlsbCBzb21lIHRvIGV2YWx1YXRlLgorICAgIGlmICgh
bV9kZmdEYXRhLT5hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkKSB7CisgICAgICAgIGJvb2wg
YWxsQXJlTWFya2VkU29GYXIgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9kZmdEYXRhLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYg
KCghbV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4KKyAgICAgICAgICAgICAg
ICAgfHwgSGVhcDo6aXNNYXJrZWQobV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmln
aW4uZ2V0KCkpKQorICAgICAgICAgICAgICAgICYmIEhlYXA6OmlzTWFya2VkKG1fZGZnRGF0YS0+
dHJhbnNpdGlvbnNbaV0ubV9mcm9tLmdldCgpKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJnZXQgb2YgdGhl
CisgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6CisgICAgICAgICAg
ICAgICAgLy8gLSBUaGlzIGNvZGUgYmxvY2suIFdlIGtub3cgaXQncyBsaXZlIGFscmVhZHkgYmVj
YXVzZSBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICAvLyAgIHdlIHdvdWxkbid0IGJlIHNjYW5u
aW5nIG91cnNlbHZlcy4KKyAgICAgICAgICAgICAgICAvLyAtIFRoZSBjb2RlIG9yaWdpbiBvZiB0
aGUgdHJhbnNpdGlvbi4gVHJhbnNpdGlvbnMgbWF5IGFyaXNlIGZyb20KKyAgICAgICAgICAgICAg
ICAvLyAgIGNvZGUgdGhhdCB3YXMgaW5saW5lZC4gVGhleSBhcmUgbm90IHJlbGV2YW50IGlmIHRo
ZSB1c2VyJ3MKKyAgICAgICAgICAgICAgICAvLyAgIG9iamVjdCB0aGF0IGlzIHJlcXVpcmVkIGZv
ciB0aGUgaW5saW5lZSB0byBydW4gaXMgbm8gbG9uZ2VyCisgICAgICAgICAgICAgICAgLy8gICBs
aXZlLgorICAgICAgICAgICAgICAgIC8vIC0gVGhlIHNvdXJjZSBvZiB0aGUgdHJhbnNpdGlvbi4g
VGhlIHRyYW5zaXRpb24gY2hlY2tzIGlmIHNvbWUKKyAgICAgICAgICAgICAgICAvLyAgIGhlYXAg
bG9jYXRpb24gaG9sZHMgdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCBzdG9yZXMgdGhlIHRhcmdldC4K
KyAgICAgICAgICAgICAgICAvLyAgIEhlbmNlIHRoZSBzb3VyY2UgbXVzdCBiZSBsaXZlIGZvciB0
aGUgdHJhbnNpdGlvbiB0byBiZSBsaXZlLgorICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZtX2RmZ0RhdGEtPnRyYW5zaXRpb25zW2ldLm1fdG8pOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGFsbEFyZU1hcmtlZFNvRmFyKQorICAgICAgICAgICAgbV9kZmdE
YXRhLT5hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgcmVtYWluaW5nIHdvcmsgdG8gZG8uCisgICAgaWYg
KG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gTm93IGNoZWNrIGFsbCBvZiBvdXIgd2VhayByZWZlcmVuY2VzLiBJZiBhbGwgb2Yg
dGhlbSBhcmUgbGl2ZSwgdGhlbiB3ZQorICAgIC8vIGhhdmUgcHJvdmVkIGxpdmVuZXNzIGFuZCBz
byB3ZSBzY2FuIG91ciBzdHJvbmcgcmVmZXJlbmNlcy4gSWYgYXQgZW5kIG9mCisgICAgLy8gR0Mg
d2Ugc3RpbGwgaGF2ZSBub3QgcHJvdmVkIGxpdmVuZXNzLCB0aGVuIHRoaXMgY29kZSBibG9jayBp
cyB0b2FzdC4KKyAgICBib29sIGFsbEFyZUxpdmVTb0ZhciA9IHRydWU7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzW2ld
LmdldCgpKSkgeworICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBJZiBzb21lIHdlYWsg
cmVmZXJlbmNlcyBhcmUgZGVhZCwgdGhlbiB0aGlzIGZpeHBvaW50IGl0ZXJhdGlvbiB3YXMKKyAg
ICAvLyB1bnN1Y2Nlc3NmdWwuCisgICAgaWYgKCFhbGxBcmVMaXZlU29GYXIpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAvLyBBbGwgd2VhayByZWZlcmVuY2VzIGFyZSBsaXZlLiBSZWNvcmQg
dGhpcyBpbmZvcm1hdGlvbiBzbyB3ZSBkb24ndAorICAgIC8vIGNvbWUgYmFjayBoZXJlIGFnYWlu
LCBhbmQgc2NhbiB0aGUgc3Ryb25nIHJlZmVyZW5jZXMuCisgICAgbV9kZmdEYXRhLT5saXZlbmVz
c0hhc0JlZW5Qcm92ZWQgPSB0cnVlOworICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQorCit2b2lkIENvZGVCbG9j
azo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBwZXJm
b3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKHZpc2l0b3IpOworfQorCit2b2lkIENvZGVCbG9j
azo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZVVubGlua2luZyA9IHRydWU7CisjZWxz
ZQorICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSBmYWxzZTsKKyNlbmRp
ZgorICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBs
aXZlLiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlzb24uCisgICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRl
bHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB8fCBtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVl
blByb3ZlZCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAgICAgICAgICBw
cmludGYoIkNvZGUgYmxvY2sgJXAgaGFzIGRlYWQgd2VhayByZWZlcmVuY2VzLCBqZXR0aXNvbmlu
ZyBkdXJpbmcgR0MuXG4iLCB0aGlzKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
YmFzZWxpbmUgSklUIGtub3dzIHRoYXQgaXQgc2hvdWxkIHJlLXdhcm0tdXAgYmVmb3JlCisgICAg
ICAgIC8vIG9wdGltaXppbmcuCisgICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKKyAgICAgICAgCisgICAgICAgIGpldHRpc29uKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisgICAgCisjaWYgRU5BQkxFKEpJVCkK
KyAgICAvLyBIYW5kbGUgaW5saW5lIGNhY2hlcy4KKyAgICBpZiAoISFnZXRKSVRDb2RlKCkpIHsK
KyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKHRoaXMpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKGNhbGxMaW5rSW5mbyhpKS5pc0xpbmtlZCgpICYmICFIZWFwOjppc01hcmtl
ZChjYWxsTGlua0luZm8oaSkuY2FsbGVlLmdldCgpKSkgeworICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlVW5saW5raW5nKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNsZWFyaW5nIGNh
bGwgZnJvbSAlcC5cbiIsIHRoaXMpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhpKS51
bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoISFjYWxsTGlua0luZm8oaSkubGFzdFNlZW5DYWxsZWUKKyAgICAgICAgICAg
ICAgICAmJiAhSGVhcDo6aXNNYXJrZWQoY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlLmdl
dCgpKSkKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8oaSkubGFzdFNlZW5DYWxsZWUuY2xl
YXIoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9nbG9iYWxSZXNv
bHZlSW5mb3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgaWYg
KG1fZ2xvYmFsUmVzb2x2ZUluZm9zW2ldLnN0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9n
bG9iYWxSZXNvbHZlSW5mb3NbaV0uc3RydWN0dXJlLmdldCgpKSkgeworICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNsZWFy
aW5nIHJlc29sdmUgaW5mbyBpbiAlcC5cbiIsIHRoaXMpOworICAgICAgICAgICAgICAgIG1fZ2xv
YmFsUmVzb2x2ZUluZm9zW2ldLnN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fc3RydWN0dXJlU3R1YkluZm9z
LnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbyA9IG1fc3RydWN0dXJlU3R1YkluZm9zW2ldOworICAgICAgICAgICAg
CisgICAgICAgICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NU
eXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLnZpc2l0V2Vha1JlZmVyZW5jZXMoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAg
ICAgICAgICAgICAgcHJpbnRmKCJDbGVhcmluZyBzdHJ1Y3R1cmUgY2FjaGUgKGtpbmQgJWQpIGlu
ICVwLlxuIiwgc3R1YkluZm8uYWNjZXNzVHlwZSwgdGhpcyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZ2V0SklUQ29kZSgpLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAg
ICAgICAgICAgICAgIERGRzo6ZGZnUmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZv
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEpJVDo6cmVzZXRQ
YXRjaEdldEJ5SWQocmVwYXRjaEJ1ZmZlciwgJnN0dWJJbmZvKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzUHV0QnlJZEFjY2VzcyhhY2Nlc3NUeXBlKSk7
CisgICAgICAgICAgICAgICAgaWYgKGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0gSklUQ29kZTo6
REZHSklUKQorICAgICAgICAgICAgICAgICAgICBERkc6OmRmZ1Jlc2V0UHV0QnlJRChyZXBhdGNo
QnVmZmVyLCBzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAg
ICAgICAgSklUOjpyZXNldFBhdGNoUHV0QnlJZChyZXBhdGNoQnVmZmVyLCAmc3R1YkluZm8pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdHViSW5mby5yZXNldCgp
OworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fbWV0aG9kQ2FsbExp
bmtJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
IW1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRTdHJ1Y3R1cmUpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChtX21ldGhvZENh
bGxMaW5rSW5mb3NbaV0uc2Vlbk9uY2UoKSk7CisgICAgICAgICAgICBBU1NFUlQoISFtX21ldGhv
ZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlKTsKKworICAgICAgICAg
ICAgaWYgKCFIZWFwOjppc01hcmtlZChtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkU3Ry
dWN0dXJlLmdldCgpKQorICAgICAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZChtX21ldGhv
ZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlLmdldCgpKQorICAgICAg
ICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZChtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2Fj
aGVkRnVuY3Rpb24uZ2V0KCkpCisgICAgICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKG1f
bWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRQcm90b3R5cGUuZ2V0KCkpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAgICAgICAgICAgICAgICAgIHByaW50
ZigiQ2xlYXJpbmcgbWV0aG9kIGNhbGwgaW4gJXAuXG4iLCB0aGlzKTsKKyAgICAgICAgICAgICAg
ICBtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0ucmVzZXQocmVwYXRjaEJ1ZmZlciwgZ2V0SklUVHlw
ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgLy8g
SGFuZGxlIHRoZSBieXRlY29kZSBkaXNjYXJkaW5nIGNob3JlLgorICAgIGlmIChtX3Nob3VsZERp
c2NhcmRCeXRlY29kZSkgeworICAgICAgICBkaXNjYXJkQnl0ZWNvZGUoKTsKKyAgICAgICAgbV9z
aG91bGREaXNjYXJkQnl0ZWNvZGUgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2Nr
OjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
ICAgICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxPYmplY3QpOwogICAgIHZpc2l0b3IuYXBwZW5k
KCZtX293bmVyRXhlY3V0YWJsZSk7CiAgICAgaWYgKG1fcmFyZURhdGEpIHsKQEAgLTE2MDEsNDIg
KzE4MDYsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAogICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmbV9mdW5jdGlvbkV4cHJzW2ldKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7ICsraSkKICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJm1fZnVuY3Rpb25EZWNsc1tpXSk7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkgewotICAg
ICAgICBpZiAoY2FsbExpbmtJbmZvKGkpLmlzTGlua2VkKCkpCi0gICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmY2FsbExpbmtJbmZvKGkpLmNhbGxlZSk7Ci0gICAgICAgIGlmICghIWNhbGxMaW5r
SW5mbyhpKS5sYXN0U2VlbkNhbGxlZSkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZjYWxs
TGlua0luZm8oaSkubGFzdFNlZW5DYWxsZWUpOwotICAgIH0KLSNlbmRpZgogI2lmIEVOQUJMRShJ
TlRFUlBSRVRFUikKICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9wcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICB2aXNpdFN0cnVj
dHVyZXModmlzaXRvciwgJmluc3RydWN0aW9ucygpW21fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bnNbaV1dKTsKICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rp
b25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHZpc2l0U3RydWN0dXJl
cyh2aXNpdG9yLCAmaW5zdHJ1Y3Rpb25zKClbbV9nbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25zW2ld
XSk7CiAjZW5kaWYKLSNpZiBFTkFCTEUoSklUKQotICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX2ds
b2JhbFJlc29sdmVJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IGlmIChtX2dsb2JhbFJlc29sdmVJbmZvc1tpXS5zdHJ1Y3R1cmUpCi0gICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmbV9nbG9iYWxSZXNvbHZlSW5mb3NbaV0uc3RydWN0dXJlKTsKLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBzaXplID0gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpLCBpID0g
MDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9zdHJ1Y3R1cmVTdHViSW5mb3NbaV0udmlzaXRB
Z2dyZWdhdGUodmlzaXRvcik7Ci0KLSAgICBmb3IgKHNpemVfdCBzaXplID0gbV9tZXRob2RDYWxs
TGlua0luZm9zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
bWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRTdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIC8v
IFRoZXNlIG1lbWJlcnMgbXVzdCBiZSBmaWxsZWQgYXQgdGhlIHNhbWUgdGltZSwgYW5kIG9ubHkg
YWZ0ZXIKLSAgICAgICAgICAgIC8vIHRoZSBNZXRob2RDYWxsTGlua0luZm8gaXMgc2V0IGFzIHNl
ZW4uCi0gICAgICAgICAgICBBU1NFUlQobV9tZXRob2RDYWxsTGlua0luZm9zW2ldLnNlZW5PbmNl
KCkpOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fbWV0aG9kQ2FsbExpbmtJbmZvc1tp
XS5jYWNoZWRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgQVNTRVJUKCEhbV9tZXRob2RDYWxsTGlu
a0luZm9zW2ldLmNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmbV9tZXRob2RDYWxsTGlua0luZm9zW2ldLmNhY2hlZFByb3RvdHlwZVN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9tZXRob2RDYWxsTGlua0luZm9zW2ld
LmNhY2hlZEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX21ldGhvZENh
bGxMaW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90eXBlKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp
ZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKGhhc0NvZGVPcmlnaW5zKCkpIHsKQEAg
LTE2NTMsMTUgKzE4MjgsNiBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0CiAgICAgZm9yICh1bnNpZ25lZCBwcm9maWxlSW5kZXggPSAwOyBwcm9maWxlSW5kZXggPCBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytwcm9maWxlSW5kZXgpCiAgICAgICAgIHZhbHVlUHJv
ZmlsZShwcm9maWxlSW5kZXgpLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKICNlbmRpZgot
ICAgIAotI2lmIEVOQUJMRShKSVQpICYmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIC8v
IEtpbGwgb2ZmIHNvbWUgYnl0ZWNvZGUuIFdlIGNhbid0IGRvIGl0IGhlcmUgYmVjYXVzZSB3ZSBk
b24ndCB3YW50IHRvIGFjY2lkZW50YWxseQotICAgIC8vIGNhbGwgaW50byBtYWxsb2Mgd2hpbGUg
aW4gc3RvcC10aGUtd29ybGQgR0MgbW9kZS4KLSAgICBpZiAoaGFzSW5zdHJ1Y3Rpb25zKCkgJiYg
bV9zaG91bGREaXNjYXJkQnl0ZWNvZGUpCi0gICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25h
bEZpbmFsaXplcih0aGlzKTsKLSNlbmRpZgotICAgIAotICAgIHN0cm9uZ2x5VmlzaXRXZWFrUmVm
ZXJlbmNlcyh2aXNpdG9yKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFr
UmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE4NjcsNiArMjAzMywyMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKEpTR2xvYmFsRGF0YSYgCiAgICAgICAgIHJlbW92ZSgp
OwogfQogCit2b2lkIE1ldGhvZENhbGxMaW5rSW5mbzo6cmVzZXQoUmVwYXRjaEJ1ZmZlciYgcmVw
YXRjaEJ1ZmZlciwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQoreworICAgIGNhY2hlZFN0cnVj
dHVyZS5jbGVhclRvTWF4VW5zaWduZWQoKTsKKyAgICBjYWNoZWRQcm90b3R5cGUuY2xlYXIoKTsK
KyAgICBjYWNoZWRQcm90b3R5cGVTdHJ1Y3R1cmUuY2xlYXJUb01heFVuc2lnbmVkKCk7CisgICAg
Y2FjaGVkRnVuY3Rpb24uY2xlYXIoKTsKKyAgICAKKyAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2Rl
OjpERkdKSVQpCisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlv
biwgb3BlcmF0aW9uR2V0TWV0aG9kT3B0aW1pemUpOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQoaml0VHlwZSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY3RpX29wX2dldF9ieV9pZF9tZXRob2RfY2hl
Y2spOworICAgIH0KK30KKwogdm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxzKCkKIHsKICAgICBp
ZiAoISFtX2FsdGVybmF0aXZlKQpAQCAtMTk4MiwzNyArMjE2MywyOCBAQCBib29sIEZ1bmN0aW9u
Q29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGCiAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1
bmN0aW9uRm9yQ2FsbCh0aGlzKTsKIH0KIAotdm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIFByb2dyYW1Db2RlQmxvY2s6OmpldHRp
c29uKCkKIHsKICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKICAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKLSAgICBzdGF0aWNfY2FzdDxQ
cm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRD
b2RlKGdsb2JhbERhdGEpOworICAgIHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3du
ZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKmdsb2JhbERhdGEoKSk7CiB9
CiAKLXZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQordm9pZCBFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbigpCiB7CiAgICAgQVNTRVJUKGdldEpJVFR5
cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFj
ZW1lbnQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZShnbG9iYWxEYXRhKTsKKyAgICBzdGF0aWNfY2Fz
dDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRD
b2RlKCpnbG9iYWxEYXRhKCkpOwogfQogCi12b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit2b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0
aXNvbigpCiB7CiAgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJ
VCk7CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXpl
ZENvZGVGb3IoZ2xvYmFsRGF0YSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6
IENvZGVGb3JDYWxsKTsKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZUZvcigqZ2xvYmFsRGF0YSgpLCBt
X2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogfQogI2Vu
ZGlmCiAKLXZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCi17Ci0jaWYg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykgfHwgIUVOQUJMRShKSVQpCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0jZW5kaWYKLSAgICBBU1NFUlQobV9zaG91bGREaXNjYXJkQnl0ZWNvZGUpOwot
ICAgIGRpc2NhcmRCeXRlY29kZSgpOwotfQotCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQog
Ym9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMTcxLDYgKzE3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAg
ICBzZWVuID0gdHJ1ZTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCByZXNldChS
ZXBhdGNoQnVmZmVyJiwgSklUQ29kZTo6SklUVHlwZSk7CiAKICAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleDsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247
CkBAIC0yNTAsNyArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAg
ICBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciB7CisgICAg
Y2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIsIHB1YmxpYyBX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgcHVibGljOgpAQCAtMjk0LDEwICsyOTYs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjYW5Qcm9kdWNlQ29weVdpdGhCeXRl
Y29kZSgpIHsgcmV0dXJuIGhhc0luc3RydWN0aW9ucygpOyB9CiAKICAgICAgICAgdm9pZCB2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwotICAgICAgICAKLSAgICAgICAgLy8gQ2FsbCB0aGlz
IGlmIHlvdSBhcmUgbm90IGpldHRpc29uaW5nIGEgY29kZSBibG9jaywgYW5kIHRodXMKLSAgICAg
ICAgLy8gaGF2ZSBubyBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgaXQgd2lsbCBuZXZlciBiZSBj
YWxsZWQgaW50byBhZ2Fpbi4KLSAgICAgICAgdm9pZCBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5j
ZXMoU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljcygp
OwogCkBAIC01MzcsNyArNTM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpJVENvZGU6
OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJuIG1faml0Q29kZS5qaXRUeXBlKCk7IH0KICAg
ICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0YWJsZU1lbW9yeSgpIHsgcmV0dXJu
IGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlTWVtb3J5KCk7IH0KICAgICAgICAgdmlydHVhbCBK
U09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYpID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIENvZGVC
bG9jayogcmVwbGFjZW1lbnQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxl
V2l0aERGRygpID0gMDsKICAgICAgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCkBA
IC0xMDYwLDEwICsxMDU4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHZvaWQgcmVvcHRpbWl6ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCisgICAgICAgIHZvaWQgcmVvcHRpbWl6ZSgpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChyZXBsYWNlbWVudCgpICE9IHRoaXMpOwotICAgICAgICAgICAgcmVwbGFjZW1l
bnQoKS0+amV0dGlzb24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT5q
ZXR0aXNvbigpOwogICAgICAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigpOwogICAgICAgICAg
ICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgICAgICB9CkBAIC0xMDg1LDYgKzEwODMsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX3Nob3VsZERpc2NhcmRCeXRlY29kZTsK
IAogICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5j
ZXMoU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRp
b25hbGx5KCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CkBAIC0xMTAxLDYgKzExMDAsMjkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoRXhlY1N0YXRlKiwg
aW50IGxvY2F0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYsIGNvbnN0
IGNoYXIqIG9wKSBjb25zdDsKICNlbmRpZgogICAgICAgICB2b2lkIHZpc2l0U3RydWN0dXJlcyhT
bG90VmlzaXRvciYsIEluc3RydWN0aW9uKiB2UEMpIGNvbnN0OworICAgICAgICAKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKyAgICAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNz
RHVyaW5nU2NhbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEFtIEkgYSBERkcgY29kZSBi
bG9jaz8gSWYgbm90LCB0aGVuIEknbSBsaXZlIGlmIEkgYW0gYmVpbmcgc2Nhbm5lZC4KKyAgICAg
ICAgICAgIGlmICghbV9kZmdEYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiBJIGFtIGEgREZHIGNvZGUgYmxvY2ssIHRoZW4g
YW0gSSBjdXJyZW50bHkgZXhlY3V0aW5nPyBJZiBzbywKKyAgICAgICAgICAgIC8vIHRoZW4gSSdt
IGRlZmluaXRlbHkgbGl2ZS4KKyAgICAgICAgICAgIGlmIChtX2RmZ0RhdGEtPm1heUJlRXhlY3V0
aW5nKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGJvb2wgc2hvdWxk
SW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB7IHJldHVybiB0cnVlOyB9Cisj
ZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgcGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJh
dGlvbihTbG90VmlzaXRvciYpOworICAgICAgICAKKyAgICAgICAgdm9pZCBzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgICAgICB2b2lkIHN0cm9uZ2x5Vmlz
aXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogCiAgICAgICAgIHZvaWQgY3JlYXRlUmFy
ZURhdGFJZk5lY2Vzc2FyeSgpCiAgICAgICAgIHsKQEAgLTExNzcsNiArMTE5OSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+ID4gd2Vh
a1JlZmVyZW5jZXM7CiAgICAgICAgICAgICBib29sIG1heUJlRXhlY3V0aW5nOwogICAgICAgICAg
ICAgYm9vbCBpc0pldHRpc29uZWQ7CisgICAgICAgICAgICBib29sIGxpdmVuZXNzSGFzQmVlblBy
b3ZlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCisgICAgICAgICAgICBi
b29sIGFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2Vk
IG9uIGV2ZXJ5IEdDLgogICAgICAgICB9OwogICAgICAgICAKICAgICAgICAgT3duUHRyPERGR0Rh
dGE+IG1fZGZnRGF0YTsKQEAgLTEyNzgsNyArMTMwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lm
IEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpAQCAtMTMx
Miw3ICsxMzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKEpT
R2xvYmFsRGF0YSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBj
YW5Db21waWxlV2l0aERGRygpOwogI2VuZGlmCkBAIC0xMzQ5LDcgKzEzNzMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVh
bCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSop
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVw
bGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCk7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlv
bi5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJS
b3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0Q2hhaW4sIGlzRGlyZWN0KTsKICAgICAgICAgfQogCi0g
ICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGludCBjb3Vu
dCkKKyAgICAgICAgYm9vbCB2aXNpdFdlYWsoaW50IGNvdW50KQogICAgICAgICB7CiAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICBQ
b2x5bW9ycGhpY1N0dWJJbmZvJiBpbmZvID0gbGlzdFtpXTsKQEAgLTEyNCwxMiArMTI0LDE3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoJmluZm8uYmFzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm8udS5wcm90byAmJiAhaW5m
by5pc0NoYWluKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5mby51LnBy
b3RvKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby51LmNoYWluICYmIGluZm8uaXNDaGFpbikK
LSAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmluZm8udS5jaGFpbik7CisgICAg
ICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChpbmZvLmJhc2UuZ2V0KCkpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGluZm8udS5w
cm90byAmJiAhaW5mby5pc0NoYWluCisgICAgICAgICAgICAgICAgICAgICYmICFIZWFwOjppc01h
cmtlZChpbmZvLnUucHJvdG8uZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgaWYgKGluZm8udS5jaGFpbiAmJiBpbmZvLmlzQ2hhaW4KKyAg
ICAgICAgICAgICAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKGluZm8udS5jaGFpbi5nZXQoKSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDQ4ICs2
Miw1NSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgfQogfQogCi12b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikK
K2Jvb2wgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMoKQogewogICAgIHN3
aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90bzoKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJl
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJ
ZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICB8fCAhSGVhcDo6
aXNNYXJrZWQodS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgpKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0
X2J5X2lkX2NoYWluOgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5nZXRCeUlkQ2hhaW4uYmFz
ZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LmdldEJ5SWRDaGFp
bi5jaGFpbik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh1
LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKQorICAgICAgICAgICAgfHwg
IUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGZfbGlzdDogewogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBv
bHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7Ci0g
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvciwgdS5n
ZXRCeUlkU2VsZkxpc3QubGlzdFNpemUpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgh
cG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT52aXNpdFdlYWsodS5nZXRCeUlkU2VsZkxpc3QubGlzdFNp
emUpKSB7CisgICAgICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDogewogICAgICAgICBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJZFBy
b3RvTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IsIHUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0V2Vh
ayh1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwb2x5
bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uOgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91
c1N0cnVjdHVyZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LnB1dEJ5SWRUcmFuc2l0aW9u
LnN0cnVjdHVyZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LnB1dEJ5SWRUcmFuc2l0aW9u
LmNoYWluKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUu
cHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICB8
fCAhSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCkpCisg
ICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5n
ZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5w
dXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgYWNjZXNzX3Vuc2V0OgotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9nZW5lcmljOgot
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9nZW5lcmljOgotICAgIGNhc2UgYWNjZXNzX2dldF9h
cnJheV9sZW5ndGg6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X3N0cmluZ19sZW5ndGg6Ci0gICAgICAg
IC8vIFRoZXNlIGluc3RydWN0aW9ucyBkb24ndCBuZWVkIHRvIG1hcmsgYW55dGhpbmcKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFJlcGxhY2Uu
YmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGRvbid0IHJlcXVpcmUg
cmVmZXJlbmNlcywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworICAgICAgICAvLyBkbyBhbnl0aGlu
Zy4KKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMzUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aCwKICAg
ICB9OwogCisgICAgaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgICAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3By
b3RvOgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CisgICAgICAgIGNhc2Ug
YWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3Q6CisgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9p
ZF9wcm90b19saXN0OgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfZ2VuZXJpYzoKKyAg
ICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X3N0cmluZ19sZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBpbmxpbmUgYm9vbCBpc1B1dEJ5SWRBY2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF90cmFuc2l0aW9uOgorICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVw
bGFjZToKKyAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2dlbmVyaWM6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAg
ICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKCkKICAgICAgICAgICAgIDogYWNjZXNzVHlwZShhY2Nl
c3NfdW5zZXQpCkBAIC0xMTMsMTAgKzE0MiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAKICAg
ICAgICAgICAgIHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5zZXQoZ2xvYmFs
RGF0YSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkIHJlc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IGFjY2Vzc191bnNldDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZGVyZWYo
KTsKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogCisgICAgICAg
IGJvb2wgdmlzaXRXZWFrUmVmZXJlbmNlcygpOworICAgICAgICAKICAgICAgICAgYm9vbCBzZWVu
T25jZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBzZWVuOwpAQCAtMTQyLDE3ICsx
NzksMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9Eb25l
OwogICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvU3RydWN0Q2hlY2s7CiAgICAgICAgIGludDE2
X3QgZGVsdGFDYWxsVG9TbG93Q2FzZTsKKyAgICAgICAgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9D
YWxsOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9Mb2Fk
T3JTdG9yZTsKKyNlbHNlCisgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9y
ZTsKKyAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZTsKICNlbmRp
ZgorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgICAgIHVuaW9uIHsKICAgICAgICAg
ICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9DYWxs
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxU
b0xvYWRPclN0b3JlOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgICAgICBp
bnQxNl90IGRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmU7Ci0gICAgICAgICAgICAgICAgaW50MTZf
dCBkZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZTsKLSNlbmRpZgorICAgICAgICAgICAgICAg
IC8vIEl0IHdvdWxkIGJlIHVud2lzZSB0byBwdXQgYW55dGhpbmcgaGVyZSwgYXMgaXQgd2lsbCBz
dXJlbHkgYmUgb3ZlcndyaXR0ZW4uCiAgICAgICAgICAgICB9IHVuc2V0OwogICAgICAgICAgICAg
c3RydWN0IHsKICAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFz
ZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDEzICsxNTcs
MTMgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhp
KTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZnVuY3Rpb25DYWxsKTsKICAg
ICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAg
ICAgIGluZm8udS51bnNldC5kZWx0YUNoZWNrSW1tVG9DYWxsID0gZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0
YUNoZWNrSW1tVG9DYWxsKSwgY2FsbFJldHVybkxvY2F0aW9uKTsKKyAgICAgICAgaW5mby5kZWx0
YUNoZWNrSW1tVG9DYWxsID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNoZWNrSW1tVG9DYWxsKSwgY2Fs
bFJldHVybkxvY2F0aW9uKTsKICAgICAgICAgaW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrID0g
ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvU3RydWN0Q2hlY2sp
KTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9M
b2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24s
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxU
b0xvYWRPclN0b3JlKSk7CisgICAgICAgIGluZm8uZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IGRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSk7
CiAjZWxzZQotICAgICAgICBpbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9
IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1RhZ0xvYWRPclN0
b3JlKSk7Ci0gICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9y
ZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1BheWxvYWRM
b2FkT3JTdG9yZSkpOworICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUgPSBk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9y
ZSkpOworICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gZGlmZmVy
ZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3Jl
KSk7CiAjZW5kaWYKICAgICAgICAgaW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKICAgICAgICAg
aW5mby5kZWx0YUNhbGxUb0RvbmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVy
bkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1f
ZGVsdGFDYWxsVG9Eb25lKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNSw4ICszMjUsOSBA
QCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgSlNWYWx1ZSBi
YXNlVmFsdWUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFtZSwgc2xvdCk7
Ci0KLSAgICBNZXRob2RDYWxsTGlua0luZm8mIG1ldGhvZEluZm8gPSBleGVjLT5jb2RlQmxvY2so
KS0+Z2V0TWV0aG9kQ2FsbExpbmtJbmZvKHJldHVybkFkZHJlc3MpOworICAgIAorICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgTWV0aG9kQ2FsbExpbmtJ
bmZvJiBtZXRob2RJbmZvID0gY29kZUJsb2NrLT5nZXRNZXRob2RDYWxsTGlua0luZm8ocmV0dXJu
QWRkcmVzcyk7CiAgICAgaWYgKG1ldGhvZEluZm8uc2Vlbk9uY2UoKSkKICAgICAgICAgZGZnUmVw
YXRjaEdldE1ldGhvZChleGVjLCBiYXNlVmFsdWUsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIG1ldGhv
ZEluZm8pOwogICAgIGVsc2UKQEAgLTM2Nyw3ICszNjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUoYmFzZSk7CiAgICAg
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VW
YWx1ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFtZSwgc2xvdCk7Ci0KKyAgICAKICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0
dXJuQWRkcmVzcyk7CiAgICAgaWYgKHN0dWJJbmZvLnNlZW4pCiAgICAgICAgIGRmZ1JlcGF0Y2hH
ZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAx
MDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSwxOSArNDksMTkgQEAgc3RhdGljIHZvaWQgZGZnUmVwYXRjaEJ5SWRT
ZWxmQWNjZXNzKENvZAogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAvLyBQYXRjaCB0aGUgc3RydWN0
dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KLSAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0o
aW50cHRyX3Qpc3R1YkluZm8udS51bnNldC5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgc3RydWN0dXJl
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8uZGVsdGFDaGVja0ltbVRv
Q2FsbCksIHN0cnVjdHVyZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoY29tcGFjdCkK
LSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxUb0xv
YWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0KTsKKyAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0
QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVl
KSAqIG9mZnNldCk7CiAgICAgZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8udS51
bnNldC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0KTsK
KyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBz
aXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBp
ZiAoY29tcGFjdCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby51LnVuc2V0
LmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRh
dGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5kZWx0
YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRh
Q2FsbFRvVGFnTG9hZE9yU3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bDMyQXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JTdG9y
ZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1
YkluZm8uZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNl
dCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7
CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1BheWxvYWRMb2FkT3JT
dG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwogICAgIH0KICNlbmRpZgogfQpAQCAt
NjUxLDYgKzY1MSw0NCBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlu
CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uKSwgb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7CiB9CiAKK3Zv
aWQgZGZnUmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQ
dHJBdE9mZnNldCgtKHVpbnRwdHJfdClzdHViSW5mby5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKKyNlbHNl
CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9y
ZSksIDApOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlKSwgMCk7CisjZW5kaWYKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisKK3ZvaWQgZGZnUmVzZXRQdXRCeUlE
KFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3sKKyAgICBWX0RGR09wZXJhdGlvbl9FSkNJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3
aXNlX2Nhc3Q8Vl9ERkdPcGVyYXRpb25fRUpDST4oTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFy
Z2V0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KQorICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QpCisgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
OworICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QpOworICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICB9CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNo
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKHVpbnRw
dHJfdClzdHViSW5mby5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oLTEpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5k
ZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CisjZWxzZQorICAgIHJlcGF0Y2hCdWZmZXIucmVw
YXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHVi
SW5mby5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0
dWJJbmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgMCk7CisjZW5kaWYKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5
LDIxIEBAIHZvaWQgZGZnQnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqLCBKU1YKIHZvaWQgZGZn
QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdS
ZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQg
ZGZnTGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0
aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7Cit2b2lkIGRmZ1Jlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKK3ZvaWQgZGZnUmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKLSNlbmRpZgotI2VuZGlmCisj
ZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBkZmdSZXNldEdldEJ5SUQo
UmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQordm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJ
bmZvJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKyNlbmRpZiAvLyBERkdSZXBhdGNoX2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGls
ZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuYyk7CiAgICAgICAgIH0KIAorICAgICAgICBz
dGF0aWMgdm9pZCByZXNldFBhdGNoR2V0QnlJZChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1
YkluZm8qKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVzZXRQYXRjaFB1dEJ5SWQoUmVwYXRjaEJ1
ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvKik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoR2V0
QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0
dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KTsKICAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hQdXRCeUlkUmVwbGFjZShDb2RlQmxvY2sqIGNv
ZGVibG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zm
c2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KTsKICAgICAg
ICAgc3RhdGljIHZvaWQgcGF0Y2hNZXRob2RDYWxsUHJvdG8oSlNHbG9iYWxEYXRhJiwgQ29kZUJs
b2NrKiBjb2RlYmxvY2ssIE1ldGhvZENhbGxMaW5rSW5mbyYsIEpTT2JqZWN0KiwgU3RydWN0dXJl
KiwgSlNPYmplY3QqLCBSZXR1cm5BZGRyZXNzUHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24g
MTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwNyw2ICsxMTA3LDIzIEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nbG9iYWxfdmFyKEluc3RydWMKICAgICBtYXAobV9ieXRlY29kZU9mZnNldCAr
IE9QQ09ERV9MRU5HVEgob3BfcHV0X2dsb2JhbF92YXIpLCB2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsK
IH0KIAordm9pZCBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3BfZ2V0X2J5X2lkKTsK
KyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFi
ZWxQdHJBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUpLCByZWludGVycHJldF9j
YXN0PHZvaWQqPigtMSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90
UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQcm9w
ZXJ0eU1hcE9mZnNldDEpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlk
UHJvcGVydHlNYXBPZmZzZXQyKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSksIHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0
Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKSk7Cit9CisKK3ZvaWQgSklUOjpyZXNldFBhdGNo
UHV0QnlJZChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8pCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbiwgY3RpX29wX3B1dF9ieV9pZCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNo
KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsUHRyQXRPZmZzZXQocGF0Y2hPZmZzZXRQ
dXRCeUlkU3RydWN0dXJlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0
QXRPZmZzZXQocGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQxKSwgMCk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiksIDApOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDQsNiArMTA0NCwyMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3ZhcihJbnN0cnVjCiAgICAgZW1pdFdyaXRlQmFycmll
cihnbG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3Jp
dGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogfQogCit2b2lkIEpJVDo6cmVzZXRQYXRjaEdl
dEJ5SWQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24sIGN0aV9vcF9nZXRfYnlfaWQpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZFN0cnVjdHVyZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0
T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0KSwgMCk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0
Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSksIHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKSk7Cit9
CisKK3ZvaWQgSklUOjpyZXNldFBhdGNoUHV0QnlJZChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVm
ZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCit7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY3RpX29wX3B1dF9ieV9pZCk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVs
UHRyQXRPZmZzZXQocGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oLTEpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVy
dHlNYXBPZmZzZXQpLCAwKTsKK30KKwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUs
IFJlZ2lzdGVySUQgc2NyYXRjaCwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MzgsNyArMTkz
OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICNpZiBFTkFC
TEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0
aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+
cmVwbGFjZW1lbnQoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6
ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0
aW1pemUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBA
IC0yMDA4LDcgKzIwMDgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9m
cm9tCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgcHJpbnRmKCJUcmlnZ2Vy
aW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCBhZnRlciBPU1IgZmFpbCkuXG4i
LCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CiAjZW5kaWYKLSAgICAgICAg
Y29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
Y29kZUJsb2NrLT5yZW9wdGltaXplKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIw
NDAsMTIgKzIwNDAsMTAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJv
bQogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgICAgICBwcmludGYoIlRyaWdn
ZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChpbiByZXR1cm4pLlxuIiwgY29kZUJsb2Nr
LCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpOwogI2VuZGlmCi0gICAgICAgICAgICBjb2RlQmxv
Y2stPnJlb3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgY29k
ZUJsb2NrLT5yZW9wdGltaXplKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNvZGVC
bG9jay0+b3B0aW1pemVTb29uKCk7Ci0KLSAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24o
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NjksNiArNjksNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKSB7IGNs
ZWFyKDApOyB9CisgICAgdm9pZCBjbGVhclRvTWF4VW5zaWduZWQoKSB7IGNsZWFyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KC0xKSk7IH0KIAogcHJvdGVjdGVkOgogICAgIEpJVFdyaXRlQmFycmll
ckJhc2UoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115764</attachid>
            <date>2011-11-18 01:14:32 -0800</date>
            <delta_ts>2011-11-20 19:20:40 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>weakcaches_patch_5.diff</filename>
            <type>text/plain</type>
            <size>49912</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNzMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDExLTExLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5saW5lIGNhY2hlcyB0aGF0IHJlZmVyIHRvIG90aGVyd2lzZSBkZWFkIG9iamVjdHMgc2hvdWxk
IGJlIGNsZWFyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyMzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgREZHIGNvZGUgYmxvY2tzIG5vdyBwYXJ0aWNpcGF0ZSBpbiB0aGUgd2VhayByZWZlcmVuY2Ug
aGFydmVzdGVyIGZpeHBvaW50CisgICAgICAgIHNvIHRoYXQgdGhleSBvbmx5IGNvbnNpZGVyIHRo
ZW1zZWx2ZXMgdG8gYmUgbGl2ZSBpZiBlaXRoZXIgdGhleSBhcmUKKyAgICAgICAgY3VycmVudGx5
IGV4ZWN1dGluZywgb3IgdGhlaXIgb3duZXIgaXMgbGl2ZSBhbmQgYWxsIG9mIHRoZWlyIHdlYWsg
cmVmZXJlbmNlcworICAgICAgICBhcmUgbGl2ZS4gSWYgbm90LCB0aGUgcmVsZXZhbnQgY29kZSBi
bG9ja3MgYXJlIGpldHRpc29uZWQuCisKKyAgICAgICAgSW5saW5lIGNhY2hlcyBpbiBib3RoIHRo
ZSBvbGQgSklUIGFuZCB0aGUgREZHIGFyZSBub3cgY2xlYXJlZCBpZiBhbnkgb2YKKyAgICAgICAg
dGhlaXIgcmVmZXJlbmNlcyBhcmUgbm90IG1hcmtlZCBhdCB0aGUgZW5kIG9mIGEgR0MuCisKKyAg
ICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsIG9uIFN1blNwaWRlciwgVjgsIGFuZCBL
cmFrZW4uIFdpdGggdGhlIGNsZWFyLQorICAgICAgICBhbGwtY29kZS1vbi1HQyBwb2xpY3kgdGhh
dCB3ZSBjdXJyZW50bHkgaGF2ZSwgaXQgc2hvd3MgYSBzbGlnaHQgcmVkdWN0aW9uCisgICAgICAg
IGluIG1lbW9yeSB1c2FnZS4gSWYgd2UgdHVybiB0aGF0IHBvbGljeSBvZmYsIGl0J3MgcHJldHR5
IGVhc3kgdG8gY29tZSB1cAorICAgICAgICB3aXRoIGFuIGV4YW1wbGUgcHJvZ3JhbSB0aGF0IHdp
bGwgY2F1c2UgVG9UIHRvIGV4cGVyaWVuY2UgbGluZWFyIGhlYXAKKyAgICAgICAgZ3Jvd3RoLCB3
aGlsZSB3aXRoIHRoaXMgcGF0Y2gsIHRoZSBoZWFwIHN0YXlzIHNtYWxsIGFuZCByZW1haW5zIGF0
IGEKKyAgICAgICAgY29uc3RhbnQgc2l6ZS4KKworICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQp
OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODY6OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJlYWRDYWxsVGFy
Z2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwZXJm
b3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2
aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0
cm9uZ1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpNZXRob2RDYWxsTGlua0luZm86OnJlc2V0
KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAo
SlNDOjpFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29k
ZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6cmVvcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4pOgorICAgICAgICAq
IGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdDo6dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtS
ZWZlcmVuY2VzKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAg
ICAgICAoSlNDOjppc0dldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjppc1B1dEJ5SWRBY2Nl
c3MpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVwYXRjaEJ5SWRTZWxmQWNj
ZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXNldEdldEJ5SUQpOgorICAgICAgICAoSlND
OjpERkc6OmRmZ1Jlc2V0UHV0QnlJRCk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkZmdSZXNldEdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OmRm
Z1Jlc2V0UHV0QnlJRCk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRQYXRjaEdldEJ5SWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKToKKyAgICAgICAgKiBqaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRQYXRj
aEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKToKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElP
Tik6CisgICAgICAgICogaml0L0pJVFdyaXRlQmFycmllci5oOgorICAgICAgICAoSlNDOjpKSVRX
cml0ZUJhcnJpZXJCYXNlOjpjbGVhclRvTWF4VW5zaWduZWQpOgorCiAyMDExLTExLTE3ICBNaWNo
YWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFtRdF0gUkVHUkVTU0lP
TihyMTAwNTEwKTogRW5hYmxlIDggQml0IFN0cmluZ3MgaW4gSmF2YVNjcmlwdENvcmUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgJ
KHJldmlzaW9uIDEwMDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJN
djdBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5NCw2ICsxODk0LDExIEBAIHB1Ymxp
YzoKIAogICAgICAgICBzZXRQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9t
KSAtIDEsIHRvKTsKICAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQqIHJlYWRDYWxsVGFyZ2V0
KHZvaWQqIGZyb20pCisgICAgeworICAgICAgICByZXR1cm4gcmVhZFBvaW50ZXIocmVpbnRlcnBy
ZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pIC0gMSk7CisgICAgfQogCiAgICAgc3RhdGljIHZvaWQg
cmVwYXRjaEludDMyKHZvaWQqIHdoZXJlLCBpbnQzMl90IHZhbHVlKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2MSw2ICsxNTYx
LDExIEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBUk12
N0Fzc2VtYmxlcjo6Q29uZGl0aW9uPihjb25kKTsKICAgICB9CisgICAgCisgICAgc3RhdGljIEZ1
bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGwgY2FsbCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBBUk12N0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRhTG9j
YXRpb24oKSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVy
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Ni5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODYuaAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsNiAr
MjA1LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRU
cnVuY2F0ZSgpIHsgcmV0dXJuIGlzU1NFMlByZXNlbnQoKTsgfQogICAgIHN0YXRpYyBib29sIHN1
cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSB7IHJldHVybiBpc1NTRTJQcmVzZW50KCk7IH0KICAg
ICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSB7IHJldHVybiBpc1NTRTJQ
cmVzZW50KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxUYXJnZXQo
Q29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorICAgIHsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0g
cmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4oY2FsbC5kYXRhTG9jYXRpb24oKSlbLTFdOworICAg
ICAgICByZXR1cm4gRnVuY3Rpb25QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGNhbGwuZGF0YUxvY2F0aW9uKCkpICsgb2Zmc2V0KSk7CisgICAg
fQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAkocmV2aXNpb24gMTAwNjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsNiArNDk3LDEx
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0
ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9p
bnRTcXJ0KCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmxvYXRp
bmdQb2ludEFicygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICBzdGF0aWMgRnVuY3Rpb25Q
dHIgcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uUHRyKFg4NkFzc2VtYmxlcjo6cmVhZFBvaW50ZXIoY2FsbC5kYXRhTGFi
ZWxQdHJBdE9mZnNldCgtUkVQVEFDSF9PRkZTRVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpKSk7
CisgICAgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDEwMDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMywxMSBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiREZHTm9k
ZS5oIgorI2luY2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCisjaW5jbHVkZSAiSklUU3R1
YnMuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiSlNTdGF0aWNTY29wZU9iamVjdC5oIgpAQCAtMTU4Nyw2ICsxNTg5LDIxMCBA
QCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiB7CiAgICAgaWYgKCEh
bV9hbHRlcm5hdGl2ZSkKICAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7CisKKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgdGhpbmdzIHRoYXQgbWF5IHVzZSB1bmNv
bmRpdGlvbmFsIGZpbmFsaXplcnM6IGxhenkgYnl0ZWNvZGUgZnJlZWluZywKKyAgICAvLyBpbmxp
bmUgY2FjaGUgY2xlYXJpbmcsIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVz
IHdhbnRpbmcgdG8gZG8gYXQKKyAgICAvLyBsZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdzIGlzIHBy
b2JhYmx5IHF1aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQKKyAg
ICAvLyBhbmQgd2hlbiBpdCBydW5zLCBpdCBmaWd1cmVzIG91dCB3aGV0aGVyIGl0IGhhcyBhbnkg
d29yayB0byBkby4KKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIodGhpcyk7
CisgICAgCisgICAgaWYgKHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2Fu
KCkpIHsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGJsb2NrIGlzIGxpdmUsIHNvIHNjYW4gYWxsIHJl
ZmVyZW5jZXMgc3Ryb25nbHkgYW5kIHJldHVybi4KKyAgICAgICAgc3Ryb25nbHlWaXNpdFN0cm9u
Z1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgICAgIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNl
cyh2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKyAgICAvLyBXZSBnZXQgaGVyZSBpZiB3ZSdyZSBsaXZlIGluIHRoZSBzZW5zZSB0aGF0
IG91ciBvd25lciBleGVjdXRhYmxlIGlzIGxpdmUsCisgICAgLy8gYnV0IHdlJ3JlIG5vdCB5ZXQg
bGl2ZSBmb3Igc3VyZSBpbiBhbm90aGVyIHNlbnNlOiB3ZSBtYXkgeWV0IGRlY2lkZSB0aGF0IHRo
aXMKKyAgICAvLyBjb2RlIGJsb2NrIHNob3VsZCBiZSBqZXR0aXNvbmVkIGJhc2VkIG9uIGl0cyBv
dXRnb2luZyB3ZWFrIHJlZmVyZW5jZXMgYmVpbmcKKyAgICAvLyBzdGFsZS4gU2V0IGEgZmxhZyB0
byBpbmRpY2F0ZSB0aGF0IHdlJ3JlIHN0aWxsIGFzc3VtaW5nIHRoYXQgd2UncmUgZGVhZCwgYW5k
CisgICAgLy8gcGVyZm9ybSBvbmUgcm91bmQgb2YgZGV0ZXJtaW5pbmcgaWYgd2UncmUgbGl2ZS4g
VGhlIEdDIG1heSBkZXRlcm1pbmUsIGJhc2VkIG9uCisgICAgLy8gZWl0aGVyIHVzIG1hcmtpbmcg
YWRkaXRpb25hbCBvYmplY3RzLCBvciBieSBvdGhlciBvYmplY3RzIGJlaW5nIG1hcmtlZCBmb3IK
KyAgICAvLyBvdGhlciByZWFzb25zLCB0aGF0IHRoaXMgaXRlcmF0aW9uIHNob3VsZCBydW4gYWdh
aW47IGl0IHdpbGwgbm90aWZ5IHVzIG9mIHRoaXMKKyAgICAvLyBkZWNpc2lvbiBieSBjYWxsaW5n
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpLgorICAgIAorICAgIG1fZGZnRGF0YS0+bGl2ZW5lc3NI
YXNCZWVuUHJvdmVkID0gZmFsc2U7CisgICAgbV9kZmdEYXRhLT5hbGxUcmFuc2l0aW9uc0hhdmVC
ZWVuTWFya2VkID0gZmFsc2U7CisgICAgCisgICAgcGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJh
dGlvbih2aXNpdG9yKTsKKworICAgIC8vIEdDIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRp
b24geWV0IGZvciB1cyB0byBkZWNpZGUgd2hldGhlciB0byBrZWVwIG91ciBERkcKKyAgICAvLyBk
YXRhLCBzbyB3ZSBuZWVkIHRvIHJlZ2lzdGVyIGEgaGFuZGxlciB0byBydW4gYWdhaW4gYXQgdGhl
IGVuZCBvZiBHQywgd2hlbiBtb3JlCisgICAgLy8gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgor
ICAgIGlmICghKG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkICYmIG1fZGZnRGF0YS0+
YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCkpCisgICAgICAgIHZpc2l0b3IuYWRkV2Vha1Jl
ZmVyZW5jZUhhcnZlc3Rlcih0aGlzKTsKKyAgICAKKyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQor
Cit2b2lkIENvZGVCbG9jazo6cGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJhdGlvbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgCisjaWYg
RU5BQkxFKERGR19KSVQpCisgICAgLy8gRXZhbHVhdGUgb3VyIHdlYWsgcmVmZXJlbmNlIHRyYW5z
aXRpb25zLCBpZiB0aGVyZSBhcmUgc3RpbGwgc29tZSB0byBldmFsdWF0ZS4KKyAgICBpZiAoIW1f
ZGZnRGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCkgeworICAgICAgICBib29sIGFs
bEFyZU1hcmtlZFNvRmFyID0gdHJ1ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZGZnRGF0YS0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgo
IW1fZGZnRGF0YS0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luCisgICAgICAgICAgICAgICAg
IHx8IEhlYXA6OmlzTWFya2VkKG1fZGZnRGF0YS0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2lu
LmdldCgpKSkKKyAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChtX2RmZ0RhdGEtPnRy
YW5zaXRpb25zW2ldLm1fZnJvbS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
Zm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhlbiB0aGUgdGFyZ2V0IG9mIHRoZQor
ICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxzbyBsaXZlOgorICAgICAgICAgICAg
ICAgIC8vIC0gVGhpcyBjb2RlIGJsb2NrLiBXZSBrbm93IGl0J3MgbGl2ZSBhbHJlYWR5IGJlY2F1
c2Ugb3RoZXJ3aXNlCisgICAgICAgICAgICAgICAgLy8gICB3ZSB3b3VsZG4ndCBiZSBzY2Fubmlu
ZyBvdXJzZWx2ZXMuCisgICAgICAgICAgICAgICAgLy8gLSBUaGUgY29kZSBvcmlnaW4gb2YgdGhl
IHRyYW5zaXRpb24uIFRyYW5zaXRpb25zIG1heSBhcmlzZSBmcm9tCisgICAgICAgICAgICAgICAg
Ly8gICBjb2RlIHRoYXQgd2FzIGlubGluZWQuIFRoZXkgYXJlIG5vdCByZWxldmFudCBpZiB0aGUg
dXNlcidzCisgICAgICAgICAgICAgICAgLy8gICBvYmplY3QgdGhhdCBpcyByZXF1aXJlZCBmb3Ig
dGhlIGlubGluZWUgdG8gcnVuIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgIC8vICAgbGl2
ZS4KKyAgICAgICAgICAgICAgICAvLyAtIFRoZSBzb3VyY2Ugb2YgdGhlIHRyYW5zaXRpb24uIFRo
ZSB0cmFuc2l0aW9uIGNoZWNrcyBpZiBzb21lCisgICAgICAgICAgICAgICAgLy8gICBoZWFwIGxv
Y2F0aW9uIGhvbGRzIHRoZSBzb3VyY2UsIGFuZCBpZiBzbywgc3RvcmVzIHRoZSB0YXJnZXQuCisg
ICAgICAgICAgICAgICAgLy8gICBIZW5jZSB0aGUgc291cmNlIG11c3QgYmUgbGl2ZSBmb3IgdGhl
IHRyYW5zaXRpb24gdG8gYmUgbGl2ZS4KKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
bV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChhbGxBcmVNYXJrZWRTb0ZhcikKKyAgICAgICAgICAgIG1fZGZnRGF0
YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IHRydWU7CisgICAgfQorICAgIAorICAg
IC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IHJlbWFpbmluZyB3b3JrIHRvIGRvLgorICAgIGlmICht
X2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIC8vIE5vdyBjaGVjayBhbGwgb2Ygb3VyIHdlYWsgcmVmZXJlbmNlcy4gSWYgYWxsIG9mIHRo
ZW0gYXJlIGxpdmUsIHRoZW4gd2UKKyAgICAvLyBoYXZlIHByb3ZlZCBsaXZlbmVzcyBhbmQgc28g
d2Ugc2NhbiBvdXIgc3Ryb25nIHJlZmVyZW5jZXMuIElmIGF0IGVuZCBvZgorICAgIC8vIEdDIHdl
IHN0aWxsIGhhdmUgbm90IHByb3ZlZCBsaXZlbmVzcywgdGhlbiB0aGlzIGNvZGUgYmxvY2sgaXMg
dG9hc3QuCisgICAgYm9vbCBhbGxBcmVMaXZlU29GYXIgPSB0cnVlOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlc1tpXS5n
ZXQoKSkpIHsKKyAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gSWYgc29tZSB3ZWFrIHJl
ZmVyZW5jZXMgYXJlIGRlYWQsIHRoZW4gdGhpcyBmaXhwb2ludCBpdGVyYXRpb24gd2FzCisgICAg
Ly8gdW5zdWNjZXNzZnVsLgorICAgIGlmICghYWxsQXJlTGl2ZVNvRmFyKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLy8gQWxsIHdlYWsgcmVmZXJlbmNlcyBhcmUgbGl2ZS4gUmVjb3JkIHRo
aXMgaW5mb3JtYXRpb24gc28gd2UgZG9uJ3QKKyAgICAvLyBjb21lIGJhY2sgaGVyZSBhZ2Fpbiwg
YW5kIHNjYW4gdGhlIHN0cm9uZyByZWZlcmVuY2VzLgorICAgIG1fZGZnRGF0YS0+bGl2ZW5lc3NI
YXNCZWVuUHJvdmVkID0gdHJ1ZTsKKyAgICBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2
aXNpdG9yKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6
OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgcGVyZm9y
bVRyYWNpbmdGaXhwb2ludEl0ZXJhdGlvbih2aXNpdG9yKTsKK30KKwordm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NS
KQorICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSB0cnVlOworI2Vsc2UK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlVW5saW5raW5nID0gZmFsc2U7CisjZW5kaWYK
KyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBDaGVjayBpZiB3ZSdyZSBub3QgbGl2
ZS4gSWYgd2UgYXJlLCB0aGVuIGpldHRpc29uLgorICAgIGlmICghKHNob3VsZEltbWVkaWF0ZWx5
QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkgfHwgbV9kZmdEYXRhLT5saXZlbmVzc0hhc0JlZW5Q
cm92ZWQpKSB7CisgICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICAgICAgcHJp
bnRmKCJDb2RlIGJsb2NrICVwIGhhcyBkZWFkIHdlYWsgcmVmZXJlbmNlcywgamV0dGlzb25pbmcg
ZHVyaW5nIEdDLlxuIiwgdGhpcyk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJh
c2VsaW5lIEpJVCBrbm93cyB0aGF0IGl0IHNob3VsZCByZS13YXJtLXVwIGJlZm9yZQorICAgICAg
ICAvLyBvcHRpbWl6aW5nLgorICAgICAgICBhbHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2Fy
bVVwKCk7CisgICAgICAgIAorICAgICAgICBqZXR0aXNvbigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorICAgIAorI2lmIEVOQUJMRShKSVQpCisg
ICAgLy8gSGFuZGxlIGlubGluZSBjYWNoZXMuCisgICAgaWYgKCEhZ2V0SklUQ29kZSgpKSB7Cisg
ICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChjYWxsTGlua0luZm8oaSkuaXNMaW5rZWQoKSAmJiAhSGVhcDo6aXNNYXJrZWQo
Y2FsbExpbmtJbmZvKGkpLmNhbGxlZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZVVubGlua2luZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDbGVhcmluZyBjYWxs
IGZyb20gJXAuXG4iLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8oaSkudW5s
aW5rKCptX2dsb2JhbERhdGEsIHJlcGF0Y2hCdWZmZXIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCEhY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlCisgICAgICAgICAgICAg
ICAgJiYgIUhlYXA6OmlzTWFya2VkKGNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZS5nZXQo
KSkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlLmNsZWFy
KCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fZ2xvYmFsUmVzb2x2
ZUluZm9zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmICht
X2dsb2JhbFJlc29sdmVJbmZvc1tpXS5zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fZ2xv
YmFsUmVzb2x2ZUluZm9zW2ldLnN0cnVjdHVyZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDbGVhcmlu
ZyByZXNvbHZlIGluZm8gaW4gJXAuXG4iLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2dsb2Jh
bFJlc29sdmVJbmZvc1tpXS5zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX3N0cnVjdHVyZVN0dWJJbmZvcy5z
aXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8gPSBtX3N0cnVjdHVyZVN0dWJJbmZvc1tpXTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlw
ZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChz
dHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2VzKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAg
ICAgICAgICAgIHByaW50ZigiQ2xlYXJpbmcgc3RydWN0dXJlIGNhY2hlIChraW5kICVkKSBpbiAl
cC5cbiIsIHN0dWJJbmZvLmFjY2Vzc1R5cGUsIHRoaXMpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAg
ICAgICAgICAgICBERkc6OmRmZ1Jlc2V0R2V0QnlJRChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBKSVQ6OnJlc2V0UGF0
Y2hHZXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHViSW5mbyk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIEFTU0VSVChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpOwor
ICAgICAgICAgICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRG
R0pJVCkKKyAgICAgICAgICAgICAgICAgICAgREZHOjpkZmdSZXNldFB1dEJ5SUQocmVwYXRjaEJ1
ZmZlciwgc3R1YkluZm8pOworICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAg
ICAgIEpJVDo6cmVzZXRQYXRjaFB1dEJ5SWQocmVwYXRjaEJ1ZmZlciwgJnN0dWJJbmZvKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3R1YkluZm8ucmVzZXQoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX21ldGhvZENhbGxMaW5r
SW5mb3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgaWYgKCFt
X21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkU3RydWN0dXJlKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQobV9tZXRob2RDYWxs
TGlua0luZm9zW2ldLnNlZW5PbmNlKCkpOworICAgICAgICAgICAgQVNTRVJUKCEhbV9tZXRob2RD
YWxsTGlua0luZm9zW2ldLmNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZSk7CisKKyAgICAgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQobV9tZXRob2RDYWxsTGlua0luZm9zW2ldLmNhY2hlZFN0cnVj
dHVyZS5nZXQoKSkKKyAgICAgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQobV9tZXRob2RD
YWxsTGlua0luZm9zW2ldLmNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAg
ICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQobV9tZXRob2RDYWxsTGlua0luZm9zW2ldLmNhY2hl
ZEZ1bmN0aW9uLmdldCgpKQorICAgICAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZChtX21l
dGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90eXBlLmdldCgpKSkgeworICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlVW5saW5raW5nKQorICAgICAgICAgICAgICAgICAgICBwcmludGYo
IkNsZWFyaW5nIG1ldGhvZCBjYWxsIGluICVwLlxuIiwgdGhpcyk7CisgICAgICAgICAgICAgICAg
bV9tZXRob2RDYWxsTGlua0luZm9zW2ldLnJlc2V0KHJlcGF0Y2hCdWZmZXIsIGdldEpJVFR5cGUo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIC8vIEhh
bmRsZSB0aGUgYnl0ZWNvZGUgZGlzY2FyZGluZyBjaG9yZS4KKyAgICBpZiAobV9zaG91bGREaXNj
YXJkQnl0ZWNvZGUpIHsKKyAgICAgICAgZGlzY2FyZEJ5dGVjb2RlKCk7CisgICAgICAgIG1fc2hv
dWxkRGlzY2FyZEJ5dGVjb2RlID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIENvZGVCbG9jazo6
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CiAg
ICAgdmlzaXRvci5hcHBlbmQoJm1fZ2xvYmFsT2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgm
bV9vd25lckV4ZWN1dGFibGUpOwogICAgIGlmIChtX3JhcmVEYXRhKSB7CkBAIC0xNjAxLDQyICsx
ODA3LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rpb25FeHByc1tpXSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZtX2Z1bmN0aW9uRGVjbHNbaV0pOwotI2lmIEVOQUJMRShKSVQpCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKLSAgICAg
ICAgaWYgKGNhbGxMaW5rSW5mbyhpKS5pc0xpbmtlZCgpKQotICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmQoJmNhbGxMaW5rSW5mbyhpKS5jYWxsZWUpOwotICAgICAgICBpZiAoISFjYWxsTGlua0lu
Zm8oaSkubGFzdFNlZW5DYWxsZWUpCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmY2FsbExp
bmtJbmZvKGkpLmxhc3RTZWVuQ2FsbGVlKTsKLSAgICB9Ci0jZW5kaWYKICNpZiBFTkFCTEUoSU5U
RVJQUkVURVIpCiAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgdmlzaXRTdHJ1Y3R1
cmVzKHZpc2l0b3IsICZpbnN0cnVjdGlvbnMoKVttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
W2ldXSk7CiAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9u
cy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICB2aXNpdFN0cnVjdHVyZXMo
dmlzaXRvciwgJmluc3RydWN0aW9ucygpW21fZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uc1tpXV0p
OwogI2VuZGlmCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBmb3IgKHNpemVfdCBzaXplID0gbV9nbG9i
YWxSZXNvbHZlSW5mb3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBp
ZiAobV9nbG9iYWxSZXNvbHZlSW5mb3NbaV0uc3RydWN0dXJlKQotICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJm1fZ2xvYmFsUmVzb2x2ZUluZm9zW2ldLnN0cnVjdHVyZSk7Ci0gICAgfQotCi0g
ICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSwgaSA9IDA7
IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1fc3RydWN0dXJlU3R1YkluZm9zW2ldLnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOwotCi0gICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fbWV0aG9kQ2FsbExp
bmtJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChtX21l
dGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkU3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAvLyBU
aGVzZSBtZW1iZXJzIG11c3QgYmUgZmlsbGVkIGF0IHRoZSBzYW1lIHRpbWUsIGFuZCBvbmx5IGFm
dGVyCi0gICAgICAgICAgICAvLyB0aGUgTWV0aG9kQ2FsbExpbmtJbmZvIGlzIHNldCBhcyBzZWVu
LgotICAgICAgICAgICAgQVNTRVJUKG1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5zZWVuT25jZSgp
KTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0u
Y2FjaGVkU3RydWN0dXJlKTsKLSAgICAgICAgICAgIEFTU0VSVCghIW1fbWV0aG9kQ2FsbExpbmtJ
bmZvc1tpXS5jYWNoZWRQcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmQoJm1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRQcm90b3R5cGVTdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5j
YWNoZWRGdW5jdGlvbik7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9tZXRob2RDYWxs
TGlua0luZm9zW2ldLmNhY2hlZFByb3RvdHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYK
IAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChoYXNDb2RlT3JpZ2lucygpKSB7CkBAIC0x
NjUzLDE1ICsxODI5LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dAogICAgIGZvciAodW5zaWduZWQgcHJvZmlsZUluZGV4ID0gMDsgcHJvZmlsZUluZGV4IDwgbnVt
YmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsrcHJvZmlsZUluZGV4KQogICAgICAgICB2YWx1ZVByb2Zp
bGUocHJvZmlsZUluZGV4KS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CiAjZW5kaWYKLSAg
ICAKLSNpZiBFTkFCTEUoSklUKSAmJiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICAvLyBL
aWxsIG9mZiBzb21lIGJ5dGVjb2RlLiBXZSBjYW4ndCBkbyBpdCBoZXJlIGJlY2F1c2Ugd2UgZG9u
J3Qgd2FudCB0byBhY2NpZGVudGFsbHkKLSAgICAvLyBjYWxsIGludG8gbWFsbG9jIHdoaWxlIGlu
IHN0b3AtdGhlLXdvcmxkIEdDIG1vZGUuCi0gICAgaWYgKGhhc0luc3RydWN0aW9ucygpICYmIG1f
c2hvdWxkRGlzY2FyZEJ5dGVjb2RlKQotICAgICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIodGhpcyk7Ci0jZW5kaWYKLSAgICAKLSAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVy
ZW5jZXModmlzaXRvcik7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1Jl
ZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xODY3LDYgKzIwMzQsMjEgQEAgdm9p
ZCBDYWxsTGlua0luZm86OnVubGluayhKU0dsb2JhbERhdGEmIAogICAgICAgICByZW1vdmUoKTsK
IH0KIAordm9pZCBNZXRob2RDYWxsTGlua0luZm86OnJlc2V0KFJlcGF0Y2hCdWZmZXImIHJlcGF0
Y2hCdWZmZXIsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKK3sKKyAgICBjYWNoZWRTdHJ1Y3R1
cmUuY2xlYXJUb01heFVuc2lnbmVkKCk7CisgICAgY2FjaGVkUHJvdG90eXBlLmNsZWFyKCk7Cisg
ICAgY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlLmNsZWFyVG9NYXhVbnNpZ25lZCgpOworICAgIGNh
Y2hlZEZ1bmN0aW9uLmNsZWFyKCk7CisgICAgCisgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6
REZHSklUKQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24s
IG9wZXJhdGlvbkdldE1ldGhvZE9wdGltaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KGppdFR5cGUgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGN0aV9vcF9nZXRfYnlfaWRfbWV0aG9kX2NoZWNr
KTsKKyAgICB9Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxscygpCiB7CiAgICAgaWYg
KCEhbV9hbHRlcm5hdGl2ZSkKQEAgLTE5ODIsMzcgKzIxNjQsMjggQEAgYm9vbCBGdW5jdGlvbkNv
ZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERgogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5j
dGlvbkZvckNhbGwodGhpcyk7CiB9CiAKLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24o
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNv
bigpCiB7CiAgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7
CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8UHJv
Z3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29k
ZShnbG9iYWxEYXRhKTsKKyAgICBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCpnbG9iYWxEYXRhKCkpOwogfQog
Ci12b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
K3ZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlzb24oKQogewogICAgIEFTU0VSVChnZXRKSVRUeXBl
KCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2Vt
ZW50KCkpOwotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7CisgICAgc3RhdGljX2Nhc3Q8
RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29k
ZSgqZ2xvYmFsRGF0YSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24o
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlz
b24oKQogewogICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwotICAgIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRD
b2RlRm9yKGdsb2JhbERhdGEsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBD
b2RlRm9yQ2FsbCk7CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJF
eGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKmdsb2JhbERhdGEoKSwgbV9p
c0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKIH0KICNlbmRp
ZgogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQotewotI2lmIEVO
QUJMRShPUENPREVfU0FNUExJTkcpIHx8ICFFTkFCTEUoSklUKQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI2VuZGlmCi0gICAgQVNTRVJUKG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlKTsKLSAg
ICBkaXNjYXJkQnl0ZWNvZGUoKTsKLX0KLQogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKIGJv
b2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3MSw2ICsxNzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAg
c2VlbiA9IHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVzZXQoUmVw
YXRjaEJ1ZmZlciYsIEpJVENvZGU6OkpJVFR5cGUpOwogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXg7CiAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwpA
QCAtMjUwLDcgKzI1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KICNlbmRpZgogCi0gICAg
Y2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIGNs
YXNzIENvZGVCbG9jayA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyLCBwdWJsaWMgV2Vh
a1JlZmVyZW5jZUhhcnZlc3RlciB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHB1YmxpYzoKQEAgLTI5NCwxMCArMjk2LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY2FuUHJvZHVjZUNvcHlXaXRoQnl0ZWNv
ZGUoKSB7IHJldHVybiBoYXNJbnN0cnVjdGlvbnMoKTsgfQogCiAgICAgICAgIHZvaWQgdmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICAgICAgCi0gICAgICAgIC8vIENhbGwgdGhpcyBp
ZiB5b3UgYXJlIG5vdCBqZXR0aXNvbmluZyBhIGNvZGUgYmxvY2ssIGFuZCB0aHVzCi0gICAgICAg
IC8vIGhhdmUgbm8gZXZpZGVuY2UgdG8gc3VnZ2VzdCB0aGF0IGl0IHdpbGwgbmV2ZXIgYmUgY2Fs
bGVkIGludG8gYWdhaW4uCi0gICAgICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRpc3RpY3MoKTsK
IApAQCAtNTM3LDcgKzUzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKSVRDb2RlOjpK
SVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgpOyB9CiAgICAg
ICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSB7IHJldHVybiBn
ZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9CiAgICAgICAgIHZpcnR1YWwgSlNP
YmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKSA9IDA7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpID0gMDsKICAgICAgICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdp
dGhERkcoKSA9IDA7CiAgICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQpAQCAt
MTA2MCwxMCArMTA1OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICAKICNp
ZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIHJlb3B0aW1pemUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQorICAgICAgICB2b2lkIHJlb3B0aW1pemUoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBBU1NFUlQocmVwbGFjZW1lbnQoKSAhPSB0aGlzKTsKLSAgICAgICAgICAgIHJlcGxhY2VtZW50
KCktPmpldHRpc29uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgcmVwbGFjZW1lbnQoKS0+amV0
dGlzb24oKTsKICAgICAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKICAgICAgICAgICAg
IG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICAgICAgfQpAQCAtMTA4NSw2ICsxMDgzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGU7CiAK
ICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpOwogICAgICAgICAKICAgICBwcml2YXRlOgpAQCAtMTEwMSw2ICsxMTAwLDMzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaW50UHV0QnlJZE9wKEV4ZWNTdGF0ZSosIGlu
dCBsb2NhdGlvbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImLCBjb25zdCBj
aGFyKiBvcCkgY29uc3Q7CiAjZW5kaWYKICAgICAgICAgdm9pZCB2aXNpdFN0cnVjdHVyZXMoU2xv
dFZpc2l0b3ImLCBJbnN0cnVjdGlvbiogdlBDKSBjb25zdDsKKyAgICAgICAgCisjaWYgRU5BQkxF
KERGR19KSVQpCisgICAgICAgIGJvb2wgc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1
cmluZ1NjYW4oKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBOdWxsIG1fZGZnRGF0YSBtZWFu
cyB0aGF0IHRoaXMgaXMgYSBiYXNlbGluZSBKSVQgQ29kZUJsb2NrLiBCYXNlbGluZSBKSVQKKyAg
ICAgICAgICAgIC8vIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4g
dGhlaXIgd2VhayByZWZlcmVuY2VzIGdvCisgICAgICAgICAgICAvLyBzdGFsZS4gU28gaWYgYSBi
YXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQKKyAg
ICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCisgICAgICAgICAgICBpZiAo
IW1fZGZnRGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHdlIGRvbid0IGF0dGVtcHQgdG8gamV0dGlz
b24gY29kZSBibG9ja3MgZHVyaW5nIEdDIGlmCisgICAgICAgICAgICAvLyB0aGV5IGFyZSBleGVj
dXRpbmcuIEluc3RlYWQgd2Ugc3Ryb25nbHkgbWFyayB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgdG8K
KyAgICAgICAgICAgIC8vIGFsbG93IHRoZW0gdG8gY29udGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5
LgorICAgICAgICAgICAgaWYgKG1fZGZnRGF0YS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorI2Vsc2UKKyAgICAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVy
aW5nU2NhbigpIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9p
ZCBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKFNsb3RWaXNpdG9yJik7CisgICAgICAg
IAorICAgICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9y
Jik7CisgICAgICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9y
Jik7CiAKICAgICAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKICAgICAgICAg
ewpAQCAtMTE3Nyw2ICsxMjAzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsKICAgICAgICAgICAgIGJv
b2wgbWF5QmVFeGVjdXRpbmc7CiAgICAgICAgICAgICBib29sIGlzSmV0dGlzb25lZDsKKyAgICAg
ICAgICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNl
ZCBvbiBldmVyeSBHQy4KKyAgICAgICAgICAgIGJvb2wgYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1h
cmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCiAgICAgICAgIH07CiAg
ICAgICAgIAogICAgICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOwpAQCAtMTI3OCw3ICsx
MzA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwg
U2NvcGVDaGFpbk5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFs
RGF0YSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVh
bCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21w
aWxlV2l0aERGRygpOwogI2VuZGlmCkBAIC0xMzEyLDcgKzEzNDAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09i
amVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1l
bnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCk7CiAjZW5kaWYK
QEAgLTEzNDksNyArMTM3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAg
ICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAgICAgICB2aXJ0dWFs
IGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTQsNyArMTE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBsaXN0WzBd
LnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFp
biwgaXNEaXJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShT
bG90VmlzaXRvciYgdmlzaXRvciwgaW50IGNvdW50KQorICAgICAgICBib29sIHZpc2l0V2Vhayhp
bnQgY291bnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewogICAgICAgICAgICAgICAgIFBvbHltb3JwaGljU3R1YkluZm8mIGluZm8gPSBs
aXN0W2ldOwpAQCAtMTI0LDEyICsxMjQsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5mby5iYXNlKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaW5mby51LnByb3RvICYmICFpbmZvLmlzQ2hhaW4pCi0gICAgICAgICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZpbmZvLnUucHJvdG8pOwotICAgICAgICAgICAgICAgIGlmIChp
bmZvLnUuY2hhaW4gJiYgaW5mby5pc0NoYWluKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmaW5mby51LmNoYWluKTsKKyAgICAgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkKGluZm8uYmFzZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpZiAoaW5mby51LnByb3RvICYmICFpbmZvLmlzQ2hhaW4KKyAgICAg
ICAgICAgICAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKGluZm8udS5wcm90by5nZXQoKSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoaW5m
by51LmNoYWluICYmIGluZm8uaXNDaGFpbgorICAgICAgICAgICAgICAgICAgICAmJiAhSGVhcDo6
aXNNYXJrZWQoaW5mby51LmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTAwNjc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIsNDggKzYyLDU1IEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmRlcmVmKCkKICAgICB9CiB9CiAKLXZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlz
aXRXZWFrUmVmZXJlbmNlcygpCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CiAgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LmdldEJ5
SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICghSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdS5nZXRCeUlk
UHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1Lmdl
dEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LmdldEJ5SWRQcm90by5wcm90
b3R5cGVTdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZ1LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQoJnUuZ2V0QnlJZENoYWluLmNoYWluKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkQ2hh
aW4uY2hhaW4uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVh
azsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7CiAgICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5nZXRC
eUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yLCB1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0
V2Vhayh1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBw
b2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90
b19saXN0OiB7CiAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1v
cnBoaWNTdHJ1Y3R1cmVzID0gdS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAg
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvciwgdS5nZXRC
eUlkUHJvdG9MaXN0Lmxpc3RTaXplKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXBv
bHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXpl
KSkgeworICAgICAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb246Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZ1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0
cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtl
ZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6
Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1
Y3R1cmUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2dl
bmVyaWM6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICBjYXNlIGFjY2Vz
c19nZXRfc3RyaW5nX2xlbmd0aDoKLSAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0
IG5lZWQgdG8gbWFyayBhbnl0aGluZwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghSGVh
cDo6aXNNYXJrZWQodS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIC8vIFRoZSByZXN0IG9mIHRo
ZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVxdWlyZSByZWZlcmVuY2VzLCBzbyB0aGVyZSBpcyBubyBu
ZWVkIHRvCisgICAgICAgIC8vIGRvIGFueXRoaW5nLgorICAgICAgICBicmVhazsKICAgICB9Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDEwMDY3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwzNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
YWNjZXNzX2dldF9zdHJpbmdfbGVuZ3RoLAogICAgIH07CiAKKyAgICBpbmxpbmUgYm9vbCBpc0dl
dEJ5SWRBY2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChhY2Nlc3NUeXBlKSB7CisgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgorICAg
ICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CisgICAgICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9jaGFpbjoKKyAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGZfbGlzdDoK
KyAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CisgICAgICAgIGNhc2Ug
YWNjZXNzX2dldF9ieV9pZF9nZW5lcmljOgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYXJyYXlf
bGVuZ3RoOgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aDoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlubGluZSBib29sIGlzUHV0QnlJZEFj
Y2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFjY2Vz
c1R5cGUpIHsKKyAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb246CisgICAg
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgICAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCiAgICAg
c3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8oKQog
ICAgICAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191bnNldCkKQEAgLTExMywxMCArMTQyLDE4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgICAgICAgICAgdS5wdXRCeUlkUmVwbGFjZS5i
YXNlT2JqZWN0U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgYmFzZU9iamVjdFN0cnVj
dHVyZSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVzZXQoKQorICAgICAg
ICB7CisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0OworICAgICAgICAgICAg
CisgICAgICAgICAgICBzdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAg
ICAgICB9CiAKICAgICAgICAgdm9pZCBkZXJlZigpOwotICAgICAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJik7CiAKKyAgICAgICAgYm9vbCB2aXNpdFdlYWtSZWZlcmVuY2VzKCk7
CisgICAgICAgIAogICAgICAgICBib29sIHNlZW5PbmNlKCkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIHNlZW47CkBAIC0xNDIsMTcgKzE3OSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmU7CiAgICAgICAgIGludDE2X3QgZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjazsKICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1Nsb3dDYXNlOworICAg
ICAgICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOworI2Vsc2UKKyAgICAgICAgaW50
MTZfdCBkZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlOworICAgICAgICBpbnQxNl90IGRlbHRhQ2Fs
bFRvUGF5bG9hZExvYWRPclN0b3JlOwogI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAg
ICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7Ci0jZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9UYWdMb2FkT3JT
dG9yZTsKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0
b3JlOwotI2VuZGlmCisgICAgICAgICAgICAgICAgLy8gSXQgd291bGQgYmUgdW53aXNlIHRvIHB1
dCBhbnl0aGluZyBoZXJlLCBhcyBpdCB3aWxsIHN1cmVseSBiZSBvdmVyd3JpdHRlbi4KICAgICAg
ICAgICAgIH0gdW5zZXQ7CiAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgIFdy
aXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDEw
MDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTcsMTMgKzE1NywxMyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
KExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9j
b2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKGkpOwogICAgICAgICBDb2RlTG9jYXRpb25DYWxs
IGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV9mdW5jdGlvbkNhbGwpOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2hlY2tJ
bW1Ub0NhbGwgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBjYWxsUmV0dXJu
TG9jYXRpb24pOworICAgICAgICBpbmZvLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBkaWZmZXJlbmNl
QmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX2RlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBjYWxsUmV0dXJuTG9jYXRpb24pOwogICAgICAgICBp
bmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2Fs
bFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaykpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKKyAgICAgICAgaW5m
by5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKICNlbHNlCi0gICAgICAgIGluZm8udS51bnNl
dC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNh
bGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nl
c1tpXS5tX2RlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpKTsKLSAgICAgICAgaW5mby51LnVuc2V0
LmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nl
c3Nlc1tpXS5tX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSk7CisgICAgICAgIGluZm8u
ZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxs
UmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNb
aV0ubV9kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSk7CisgICAgICAgIGluZm8uZGVsdGFDYWxs
VG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVy
bkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1f
ZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpKTsKICNlbmRpZgogICAgICAgICBpbmZvLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxv
Y2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVs
dGFDYWxsVG9TbG93Q2FzZSkpOwogICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvRG9uZSA9IGRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRp
b25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0RvbmUpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTAw
Njc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzI1LDggKzMyNSw5IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uR2UKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdl
dChleGVjLCAqcHJvcGVydHlOYW1lLCBzbG90KTsKLQotICAgIE1ldGhvZENhbGxMaW5rSW5mbyYg
bWV0aG9kSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRNZXRob2RDYWxsTGlua0luZm8ocmV0
dXJuQWRkcmVzcyk7CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKKyAgICBNZXRob2RDYWxsTGlua0luZm8mIG1ldGhvZEluZm8gPSBjb2RlQmxvY2st
PmdldE1ldGhvZENhbGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBpZiAobWV0aG9kSW5m
by5zZWVuT25jZSgpKQogICAgICAgICBkZmdSZXBhdGNoR2V0TWV0aG9kKGV4ZWMsIGJhc2VWYWx1
ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgbWV0aG9kSW5mbyk7CiAgICAgZWxzZQpAQCAtMzY3LDcg
KzM2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBK
U1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCAqcHJvcGVydHlOYW1l
LCBzbG90KTsKLQorICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBpZiAoc3R1Yklu
Zm8uc2VlbikKICAgICAgICAgZGZnUmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCAqcHJv
cGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEwMDY3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE5ICs0OSwxOSBA
QCBzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kCiAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aEZ1bmN0aW9u
KTsKIAogICAgIC8vIFBhdGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUgb2Zmc2V0IG9mIHRo
ZSBsb2FkLgotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby51LnVuc2V0LmRl
bHRhQ2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRw
dHJfdClzdHViSW5mby5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgc3RydWN0dXJlKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIGlmIChjb21wYWN0KQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChz
dHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkg
KiBvZmZzZXQpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxU
b0xvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0KTsKICAgICBlbHNlCi0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUp
LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCk7CiAj
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChjb21wYWN0KSB7Ci0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29t
cGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSks
IHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJ
bmZvLnUudW5zZXQuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBzaXplb2YoSlNWYWx1
ZSkgKiBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFD
YWxsVG9UYWdMb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
Q29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwg
c2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0
T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIHNpemVv
ZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby51LnVuc2V0
LmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0
b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBh
dGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zm
c2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC02NTEsNiArNjUxLDQ0IEBAIHZvaWQgZGZnTGlu
a0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW4KICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhD
b2RlTG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLCBvcGVyYXRp
b25WaXJ0dWFsQ29uc3RydWN0KTsKIH0KIAordm9pZCBkZmdSZXNldEdldEJ5SUQoUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0odWludHB0cl90KXN0dWJJ
bmZvLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFD
YWxsVG9Mb2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHVi
SW5mby5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZz
ZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
KTsKK30KKwordm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZl
ciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZfREZHT3BlcmF0aW9uX0VK
Q0kgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0RGR09wZXJhdGlvbl9FSkNJ
PihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGlt
aXplZEZ1bmN0aW9uOworICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOworICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdCk7CisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIH0KKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXplZEZ1bmN0aW9u
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0odWludHB0cl90KXN0dWJJbmZvLmRlbHRhQ2hlY2tJbW1U
b0NhbGwpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5k
YXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsK
KyNlbHNlCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvVGFnTG9hZE9yU3Rv
cmUpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9QYXlsb2FkTG9h
ZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCShy
ZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksMjEgQEAgdm9pZCBkZmdCdWlsZEdldEJ5SURM
aXN0KEV4ZWNTdGF0ZSosIEpTVgogdm9pZCBkZmdCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0
YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0
cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpT
VmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxM
aW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKK3ZvaWQgZGZnUmVzZXRHZXRCeUlEKFJl
cGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBkZmdSZXNldFB1dEJ5SUQo
UmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAotI2VuZGlmCi0jZW5kaWYKKyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCit2b2lkIGRmZ1Jlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1
YkluZm8mKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cit2b2lkIGRmZ1Jlc2V0UHV0QnlJRChS
ZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorI2VuZGlmIC8vIERGR1JlcGF0Y2hfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBm
dW5jKTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB2b2lkIHJlc2V0UGF0Y2hHZXRCeUlk
KFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyopOworICAgICAgICBzdGF0aWMgdm9p
ZCByZXNldFBhdGNoUHV0QnlJZChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8qKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVibG9j
aywgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogICAgICAgICBzdGF0aWMgdm9pZCBwYXRj
aFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZWJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgYm9vbCBkaXJlY3QpOwogICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaE1ldGhvZENh
bGxQcm90byhKU0dsb2JhbERhdGEmLCBDb2RlQmxvY2sqIGNvZGVibG9jaywgTWV0aG9kQ2FsbExp
bmtJbmZvJiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCosIFJldHVybkFkZHJlc3NQ
dHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTA3LDYgKzExMDcsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1
YwogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9wdXRfZ2xvYmFs
X3ZhciksIHZhbHVlLCByZWdUMSwgcmVnVDApOwogfQogCit2b2lkIEpJVDo6cmVzZXRQYXRjaEdl
dEJ5SWQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24sIGN0aV9vcF9nZXRfYnlfaWQpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZFN0cnVjdHVyZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVsQ29tcGFjdEF0
T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSksIDApOworICAgIHJl
cGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBh
Y3RBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIpLCAwKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNl
dChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKSwgc3R1YkluZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwp
KTsKK30KKwordm9pZCBKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0
Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3BfcHV0X2J5X2lk
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRh
TGFiZWxQdHJBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPigtMSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+
aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRQ
cm9wZXJ0eU1hcE9mZnNldDEpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZzZXRQdXRC
eUlkUHJvcGVydHlNYXBPZmZzZXQyKSwgMCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA0NCw2ICsxMDQ0LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFy
KEluc3RydWMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1Qy
LCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7
CiB9CiAKK3ZvaWQgSklUOjpyZXNldFBhdGNoR2V0QnlJZChSZXBhdGNoQnVmZmVyJiByZXBhdGNo
QnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCit7CisgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY3RpX29wX2dldF9ieV9pZCk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxh
YmVsUHRyQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oLTEpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHJv
cGVydHlNYXBPZmZzZXQpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+
aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dD
YXNlKSwgc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9m
ZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpKTsKK30KKwordm9pZCBKSVQ6OnJlc2V0UGF0Y2hQdXRC
eUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLCBjdGlfb3BfcHV0X2J5X2lkKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5
SWRTdHJ1Y3R1cmUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCksIDApOworfQorCiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoUmVnaXN0
ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBSZWdpc3Rl
cklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQg
dXNlS2luZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZp
c2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkzOCw3ICsxOTM4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCwgb3B0aW1pemVfZnJvbQogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAg
ICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChpbiBsb29w
KS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKICNlbmRpZgotICAg
ICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTIwMDgsNyArMjAwOCw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQogICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXAp
IChpbiBsb29wIGFmdGVyIE9TUiBmYWlsKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBs
YWNlbWVudCgpKTsKICNlbmRpZgotICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjA0MCwxMiArMjA0MCwxMCBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKICAgICAgICAgICAgIHByaW50ZigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAlcCgl
cCkgKGluIHJldHVybikuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7
CiAjZW5kaWYKLSAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmds
b2JhbERhdGEoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKLQotICAg
ICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5o
CShyZXZpc2lvbiAxMDA2NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRl
QmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjbGVhcigpIHsgY2xlYXIoMCk7IH0KKyAgICB2b2lkIGNsZWFyVG9N
YXhVbnNpZ25lZCgpIHsgY2xlYXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsgfQogCiBw
cm90ZWN0ZWQ6CiAgICAgSklUV3JpdGVCYXJyaWVyQmFzZSgpCg==
</data>
<flag name="review"
          id="114760"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116022</attachid>
            <date>2011-11-20 19:20:40 -0800</date>
            <delta_ts>2011-11-20 19:20:40 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>weakcaches_patch_6.diff</filename>
            <type>text/plain</type>
            <size>49978</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwODc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDExLTExLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5saW5lIGNhY2hlcyB0aGF0IHJlZmVyIHRvIG90aGVyd2lzZSBkZWFkIG9iamVjdHMgc2hvdWxk
IGJlIGNsZWFyZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyMzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCisKKyAgICAgICAg
REZHIGNvZGUgYmxvY2tzIG5vdyBwYXJ0aWNpcGF0ZSBpbiB0aGUgd2VhayByZWZlcmVuY2UgaGFy
dmVzdGVyIGZpeHBvaW50CisgICAgICAgIHNvIHRoYXQgdGhleSBvbmx5IGNvbnNpZGVyIHRoZW1z
ZWx2ZXMgdG8gYmUgbGl2ZSBpZiBlaXRoZXIgdGhleSBhcmUKKyAgICAgICAgY3VycmVudGx5IGV4
ZWN1dGluZywgb3IgdGhlaXIgb3duZXIgaXMgbGl2ZSBhbmQgYWxsIG9mIHRoZWlyIHdlYWsgcmVm
ZXJlbmNlcworICAgICAgICBhcmUgbGl2ZS4gSWYgbm90LCB0aGUgcmVsZXZhbnQgY29kZSBibG9j
a3MgYXJlIGpldHRpc29uZWQuCisKKyAgICAgICAgSW5saW5lIGNhY2hlcyBpbiBib3RoIHRoZSBv
bGQgSklUIGFuZCB0aGUgREZHIGFyZSBub3cgY2xlYXJlZCBpZiBhbnkgb2YKKyAgICAgICAgdGhl
aXIgcmVmZXJlbmNlcyBhcmUgbm90IG1hcmtlZCBhdCB0aGUgZW5kIG9mIGEgR0MuCisKKyAgICAg
ICAgVGhpcyBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsIG9uIFN1blNwaWRlciwgVjgsIGFuZCBLcmFr
ZW4uIFdpdGggdGhlIGNsZWFyLQorICAgICAgICBhbGwtY29kZS1vbi1HQyBwb2xpY3kgdGhhdCB3
ZSBjdXJyZW50bHkgaGF2ZSwgaXQgc2hvd3MgYSBzbGlnaHQgcmVkdWN0aW9uCisgICAgICAgIGlu
IG1lbW9yeSB1c2FnZS4gSWYgd2UgdHVybiB0aGF0IHBvbGljeSBvZmYsIGl0J3MgcHJldHR5IGVh
c3kgdG8gY29tZSB1cAorICAgICAgICB3aXRoIGFuIGV4YW1wbGUgcHJvZ3JhbSB0aGF0IHdpbGwg
Y2F1c2UgVG9UIHRvIGV4cGVyaWVuY2UgbGluZWFyIGhlYXAKKyAgICAgICAgZ3Jvd3RoLCB3aGls
ZSB3aXRoIHRoaXMgcGF0Y2gsIHRoZSBoZWFwIHN0YXlzIHNtYWxsIGFuZCByZW1haW5zIGF0IGEK
KyAgICAgICAgY29uc3RhbnQgc2l6ZS4KKworICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2Vt
Ymxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6
OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJlYWRDYWxsVGFyZ2V0
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwZXJmb3Jt
VHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNp
dFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9u
Z1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpNZXRob2RDYWxsTGlua0luZm86OnJlc2V0KToK
KyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlND
OjpFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJs
b2NrOjpqZXR0aXNvbik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cmVvcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
c2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4pOgorICAgICAgICAqIGJ5
dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdDo6dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZl
cmVuY2VzKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAoSlNDOjppc0dldEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjppc1B1dEJ5SWRBY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
UmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVwYXRjaEJ5SWRTZWxmQWNjZXNz
KToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXNldEdldEJ5SUQpOgorICAgICAgICAoSlNDOjpE
Rkc6OmRmZ1Jlc2V0UHV0QnlJRCk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpkZmdSZXNldEdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OmRmZ1Jl
c2V0UHV0QnlJRCk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRQYXRjaEdldEJ5SWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKToKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRQYXRjaEdl
dEJ5SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKToKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6
CisgICAgICAgICogaml0L0pJVFdyaXRlQmFycmllci5oOgorICAgICAgICAoSlNDOjpKSVRXcml0
ZUJhcnJpZXJCYXNlOjpjbGVhclRvTWF4VW5zaWduZWQpOgorCiAyMDExLTExLTIwICBOb2VsIEdv
cmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFJlbW92
ZSBERkc6OkpJVENvZGVHZW5lcmF0b3IgZnJvbSB0aGUgZ3lwIHByb2plY3RzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCShyZXZp
c2lvbiAxMDA4NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OTQsNiArMTg5NCwxMSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgc2V0UG9pbnRlcihyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSkgLSAx
LCB0byk7CiAgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkKiByZWFkQ2FsbFRhcmdldCh2b2lk
KiBmcm9tKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlYWRQb2ludGVyKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDE2X3QqPihmcm9tKSAtIDEpOworICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hJbnQzMih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcu
aAkocmV2aXNpb24gMTAwODc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTXY3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NjEsNiArMTU2MSwxMSBA
QCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QVJNdjdBc3Nl
bWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQorICAgIAorICAgIHN0YXRpYyBGdW5jdGlv
blB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCisgICAgeworICAgICAg
ICByZXR1cm4gQVJNdjdBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9u
KCkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2LmgJKHJldmlzaW9uIDEwMDg3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDYgKzIwNSwx
MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNh
dGUoKSB7IHJldHVybiBpc1NTRTJQcmVzZW50KCk7IH0KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0
c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgeyByZXR1cm4gaXNTU0UyUHJlc2VudCgpOyB9CiAgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50QWJzKCkgeyByZXR1cm4gaXNTU0UyUHJlc2Vu
dCgpOyB9CisgICAgCisgICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVM
b2NhdGlvbkNhbGwgY2FsbCkKKyAgICB7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KGNhbGwuZGF0YUxvY2F0aW9uKCkpWy0xXTsKKyAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihjYWxsLmRhdGFMb2NhdGlvbigpKSArIG9mZnNldCkpOworICAgIH0KIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJ
KHJldmlzaW9uIDEwMDg3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtNDk3LDYgKzQ5NywxMSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSB7
IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50U3Fy
dCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9p
bnRBYnMoKSB7IHJldHVybiB0cnVlOyB9CisgICAgCisgICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJl
YWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGwgY2FsbCkKKyAgICB7CisgICAgICAgIHJldHVy
biBGdW5jdGlvblB0cihYODZBc3NlbWJsZXI6OnJlYWRQb2ludGVyKGNhbGwuZGF0YUxhYmVsUHRy
QXRPZmZzZXQoLVJFUFRBQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSkpOworICAg
IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDA4
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTEgQEAKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIK
KyNpbmNsdWRlICJERkdSZXBhdGNoLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRl
ICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgorI2luY2x1ZGUgIkpJVFN0dWJzLmgi
CiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKQEAgLTE1ODcsNiArMTU4OSwyMTAgQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAogewogICAgIGlmICghIW1fYWx0
ZXJuYXRpdmUpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OworCisgICAgLy8gVGhlcmUgYXJlIHRocmVlIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRp
b25hbCBmaW5hbGl6ZXJzOiBsYXp5IGJ5dGVjb2RlIGZyZWVpbmcsCisgICAgLy8gaW5saW5lIGNh
Y2hlIGNsZWFyaW5nLCBhbmQgamV0dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50
aW5nIHRvIGRvIGF0CisgICAgLy8gbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncyBpcyBwcm9iYWJs
eSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0CisgICAgLy8g
YW5kIHdoZW4gaXQgcnVucywgaXQgZmlndXJlcyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsg
dG8gZG8uCisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXMpOworICAg
IAorICAgIGlmIChzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpKSB7
CisgICAgICAgIC8vIFRoaXMgY29kZSBibG9jayBpcyBsaXZlLCBzbyBzY2FuIGFsbCByZWZlcmVu
Y2VzIHN0cm9uZ2x5IGFuZCByZXR1cm4uCisgICAgICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZl
cmVuY2VzKHZpc2l0b3IpOworICAgICAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXModmlz
aXRvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgLy8gV2UgZ2V0IGhlcmUgaWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIg
b3duZXIgZXhlY3V0YWJsZSBpcyBsaXZlLAorICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxpdmUg
Zm9yIHN1cmUgaW4gYW5vdGhlciBzZW5zZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlzCisg
ICAgLy8gY29kZSBibG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBiYXNlZCBvbiBpdHMgb3V0Z29p
bmcgd2VhayByZWZlcmVuY2VzIGJlaW5nCisgICAgLy8gc3RhbGUuIFNldCBhIGZsYWcgdG8gaW5k
aWNhdGUgdGhhdCB3ZSdyZSBzdGlsbCBhc3N1bWluZyB0aGF0IHdlJ3JlIGRlYWQsIGFuZAorICAg
IC8vIHBlcmZvcm0gb25lIHJvdW5kIG9mIGRldGVybWluaW5nIGlmIHdlJ3JlIGxpdmUuIFRoZSBH
QyBtYXkgZGV0ZXJtaW5lLCBiYXNlZCBvbgorICAgIC8vIGVpdGhlciB1cyBtYXJraW5nIGFkZGl0
aW9uYWwgb2JqZWN0cywgb3IgYnkgb3RoZXIgb2JqZWN0cyBiZWluZyBtYXJrZWQgZm9yCisgICAg
Ly8gb3RoZXIgcmVhc29ucywgdGhhdCB0aGlzIGl0ZXJhdGlvbiBzaG91bGQgcnVuIGFnYWluOyBp
dCB3aWxsIG5vdGlmeSB1cyBvZiB0aGlzCisgICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2
ZXN0V2Vha1JlZmVyZW5jZXMoKS4KKyAgICAKKyAgICBtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVl
blByb3ZlZCA9IGZhbHNlOworICAgIG1fZGZnRGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1h
cmtlZCA9IGZhbHNlOworICAgIAorICAgIHBlcmZvcm1UcmFjaW5nRml4cG9pbnRJdGVyYXRpb24o
dmlzaXRvcik7CisKKyAgICAvLyBHQyBkb2Vzbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHll
dCBmb3IgdXMgdG8gZGVjaWRlIHdoZXRoZXIgdG8ga2VlcCBvdXIgREZHCisgICAgLy8gZGF0YSwg
c28gd2UgbmVlZCB0byByZWdpc3RlciBhIGhhbmRsZXIgdG8gcnVuIGFnYWluIGF0IHRoZSBlbmQg
b2YgR0MsIHdoZW4gbW9yZQorICAgIC8vIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KKyAgICBp
ZiAoIShtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3ZlZCAmJiBtX2RmZ0RhdGEtPmFsbFRy
YW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQpKQorICAgICAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIodGhpcyk7CisgICAgCisjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKK30KKwordm9p
ZCBDb2RlQmxvY2s6OnBlcmZvcm1UcmFjaW5nRml4cG9pbnRJdGVyYXRpb24oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIAorI2lmIEVOQUJM
RShERkdfSklUKQorICAgIC8vIEV2YWx1YXRlIG91ciB3ZWFrIHJlZmVyZW5jZSB0cmFuc2l0aW9u
cywgaWYgdGhlcmUgYXJlIHN0aWxsIHNvbWUgdG8gZXZhbHVhdGUuCisgICAgaWYgKCFtX2RmZ0Rh
dGEtPmFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQpIHsKKyAgICAgICAgYm9vbCBhbGxBcmVN
YXJrZWRTb0ZhciA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Rm
Z0RhdGEtPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoKCFtX2Rm
Z0RhdGEtPnRyYW5zaXRpb25zW2ldLm1fY29kZU9yaWdpbgorICAgICAgICAgICAgICAgICB8fCBI
ZWFwOjppc01hcmtlZChtX2RmZ0RhdGEtPnRyYW5zaXRpb25zW2ldLm1fY29kZU9yaWdpbi5nZXQo
KSkpCisgICAgICAgICAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQobV9kZmdEYXRhLT50cmFuc2l0
aW9uc1tpXS5tX2Zyb20uZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZvbGxv
d2luZyB0aHJlZSB0aGluZ3MgYXJlIGxpdmUsIHRoZW4gdGhlIHRhcmdldCBvZiB0aGUKKyAgICAg
ICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGlzIGFsc28gbGl2ZToKKyAgICAgICAgICAgICAgICAv
LyAtIFRoaXMgY29kZSBibG9jay4gV2Uga25vdyBpdCdzIGxpdmUgYWxyZWFkeSBiZWNhdXNlIG90
aGVyd2lzZQorICAgICAgICAgICAgICAgIC8vICAgd2Ugd291bGRuJ3QgYmUgc2Nhbm5pbmcgb3Vy
c2VsdmVzLgorICAgICAgICAgICAgICAgIC8vIC0gVGhlIGNvZGUgb3JpZ2luIG9mIHRoZSB0cmFu
c2l0aW9uLiBUcmFuc2l0aW9ucyBtYXkgYXJpc2UgZnJvbQorICAgICAgICAgICAgICAgIC8vICAg
Y29kZSB0aGF0IHdhcyBpbmxpbmVkLiBUaGV5IGFyZSBub3QgcmVsZXZhbnQgaWYgdGhlIHVzZXIn
cworICAgICAgICAgICAgICAgIC8vICAgb2JqZWN0IHRoYXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBp
bmxpbmVlIHRvIHJ1biBpcyBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAvLyAgIGxpdmUuCisg
ICAgICAgICAgICAgICAgLy8gLSBUaGUgc291cmNlIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgdHJh
bnNpdGlvbiBjaGVja3MgaWYgc29tZQorICAgICAgICAgICAgICAgIC8vICAgaGVhcCBsb2NhdGlv
biBob2xkcyB0aGUgc291cmNlLCBhbmQgaWYgc28sIHN0b3JlcyB0aGUgdGFyZ2V0LgorICAgICAg
ICAgICAgICAgIC8vICAgSGVuY2UgdGhlIHNvdXJjZSBtdXN0IGJlIGxpdmUgZm9yIHRoZSB0cmFu
c2l0aW9uIHRvIGJlIGxpdmUuCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZGZn
RGF0YS0+dHJhbnNpdGlvbnNbaV0ubV90byk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoYWxsQXJlTWFya2VkU29GYXIpCisgICAgICAgICAgICBtX2RmZ0RhdGEtPmFs
bFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBD
aGVjayBpZiB3ZSBoYXZlIGFueSByZW1haW5pbmcgd29yayB0byBkby4KKyAgICBpZiAobV9kZmdE
YXRhLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAv
LyBOb3cgY2hlY2sgYWxsIG9mIG91ciB3ZWFrIHJlZmVyZW5jZXMuIElmIGFsbCBvZiB0aGVtIGFy
ZSBsaXZlLCB0aGVuIHdlCisgICAgLy8gaGF2ZSBwcm92ZWQgbGl2ZW5lc3MgYW5kIHNvIHdlIHNj
YW4gb3VyIHN0cm9uZyByZWZlcmVuY2VzLiBJZiBhdCBlbmQgb2YKKyAgICAvLyBHQyB3ZSBzdGls
bCBoYXZlIG5vdCBwcm92ZWQgbGl2ZW5lc3MsIHRoZW4gdGhpcyBjb2RlIGJsb2NrIGlzIHRvYXN0
LgorICAgIGJvb2wgYWxsQXJlTGl2ZVNvRmFyID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fZGZnRGF0YS0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCkp
KSB7CisgICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIElmIHNvbWUgd2VhayByZWZlcmVu
Y2VzIGFyZSBkZWFkLCB0aGVuIHRoaXMgZml4cG9pbnQgaXRlcmF0aW9uIHdhcworICAgIC8vIHVu
c3VjY2Vzc2Z1bC4KKyAgICBpZiAoIWFsbEFyZUxpdmVTb0ZhcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIC8vIEFsbCB3ZWFrIHJlZmVyZW5jZXMgYXJlIGxpdmUuIFJlY29yZCB0aGlzIGlu
Zm9ybWF0aW9uIHNvIHdlIGRvbid0CisgICAgLy8gY29tZSBiYWNrIGhlcmUgYWdhaW4sIGFuZCBz
Y2FuIHRoZSBzdHJvbmcgcmVmZXJlbmNlcy4KKyAgICBtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVl
blByb3ZlZCA9IHRydWU7CisgICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRv
cik7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCit9CisKK3ZvaWQgQ29kZUJsb2NrOjp2aXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHBlcmZvcm1UcmFj
aW5nRml4cG9pbnRJdGVyYXRpb24odmlzaXRvcik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpmaW5h
bGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlVW5saW5raW5nID0gdHJ1ZTsKKyNlbHNlCisgICAg
c3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZVVubGlua2luZyA9IGZhbHNlOworI2VuZGlmCisgICAg
CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgbm90IGxpdmUuIElm
IHdlIGFyZSwgdGhlbiBqZXR0aXNvbi4KKyAgICBpZiAoIShzaG91bGRJbW1lZGlhdGVseUFzc3Vt
ZUxpdmVuZXNzRHVyaW5nU2NhbigpIHx8IG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVk
KSkgeworICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgIHByaW50Zigi
Q29kZSBibG9jayAlcCBoYXMgZGVhZCB3ZWFrIHJlZmVyZW5jZXMsIGpldHRpc29uaW5nIGR1cmlu
ZyBHQy5cbiIsIHRoaXMpOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBiYXNlbGlu
ZSBKSVQga25vd3MgdGhhdCBpdCBzaG91bGQgcmUtd2FybS11cCBiZWZvcmUKKyAgICAgICAgLy8g
b3B0aW1pemluZy4KKyAgICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgp
OworICAgICAgICAKKyAgICAgICAgamV0dGlzb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKyAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIC8v
IEhhbmRsZSBpbmxpbmUgY2FjaGVzLgorICAgIGlmICghIWdldEpJVENvZGUoKSkgeworICAgICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7CisgICAgICAgICAg
ICBpZiAoY2FsbExpbmtJbmZvKGkpLmlzTGlua2VkKCkgJiYgIUhlYXA6OmlzTWFya2VkKGNhbGxM
aW5rSW5mbyhpKS5jYWxsZWUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VV
bmxpbmtpbmcpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ2xlYXJpbmcgY2FsbCBmcm9t
ICVwLlxuIiwgdGhpcyk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvKGkpLnVubGluaygq
bV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICghIWNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZQorICAgICAgICAgICAgICAgICYm
ICFIZWFwOjppc01hcmtlZChjYWxsTGlua0luZm8oaSkubGFzdFNlZW5DYWxsZWUuZ2V0KCkpKQor
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyhpKS5sYXN0U2VlbkNhbGxlZS5jbGVhcigpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX2dsb2JhbFJlc29sdmVJbmZv
cy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9nbG9i
YWxSZXNvbHZlSW5mb3NbaV0uc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX2dsb2JhbFJl
c29sdmVJbmZvc1tpXS5zdHJ1Y3R1cmUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2VVbmxpbmtpbmcpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ2xlYXJpbmcgcmVz
b2x2ZSBpbmZvIGluICVwLlxuIiwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9nbG9iYWxSZXNv
bHZlSW5mb3NbaV0uc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgp
LCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvID0gbV9zdHJ1Y3R1cmVTdHViSW5mb3NbaV07CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0
dWJJbmZvLmFjY2Vzc1R5cGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8udmlzaXRXZWFrUmVmZXJlbmNlcygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAg
ICAgICBwcmludGYoIkNsZWFyaW5nIHN0cnVjdHVyZSBjYWNoZSAoa2luZCAlZCkgaW4gJXAuXG4i
LCBzdHViSW5mby5hY2Nlc3NUeXBlLCB0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGlzR2V0QnlJZEFjY2VzcyhhY2Nlc3NUeXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChn
ZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgICAg
ICAgICAgREZHOjpkZmdSZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgSklUOjpyZXNldFBhdGNoR2V0
QnlJZChyZXBhdGNoQnVmZmVyLCAmc3R1YkluZm8pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaXNQdXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZ2V0SklUQ29kZSgpLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQp
CisgICAgICAgICAgICAgICAgICAgIERGRzo6ZGZnUmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIs
IHN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgICAgICBK
SVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHViSW5mbyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0KCk7CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9tZXRob2RDYWxsTGlua0luZm9z
LnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbV9tZXRo
b2RDYWxsTGlua0luZm9zW2ldLmNhY2hlZFN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKG1fbWV0aG9kQ2FsbExpbmtJ
bmZvc1tpXS5zZWVuT25jZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghIW1fbWV0aG9kQ2FsbExp
bmtJbmZvc1tpXS5jYWNoZWRQcm90b3R5cGVTdHJ1Y3R1cmUpOworCisgICAgICAgICAgICBpZiAo
IUhlYXA6OmlzTWFya2VkKG1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRTdHJ1Y3R1cmUu
Z2V0KCkpCisgICAgICAgICAgICAgICAgfHwgIUhlYXA6OmlzTWFya2VkKG1fbWV0aG9kQ2FsbExp
bmtJbmZvc1tpXS5jYWNoZWRQcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICAg
ICAgfHwgIUhlYXA6OmlzTWFya2VkKG1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNoZWRGdW5j
dGlvbi5nZXQoKSkKKyAgICAgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQobV9tZXRob2RD
YWxsTGlua0luZm9zW2ldLmNhY2hlZFByb3RvdHlwZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZVVubGlua2luZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDbGVh
cmluZyBtZXRob2QgY2FsbCBpbiAlcC5cbiIsIHRoaXMpOworICAgICAgICAgICAgICAgIG1fbWV0
aG9kQ2FsbExpbmtJbmZvc1tpXS5yZXNldChyZXBhdGNoQnVmZmVyLCBnZXRKSVRUeXBlKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBIYW5kbGUg
dGhlIGJ5dGVjb2RlIGRpc2NhcmRpbmcgY2hvcmUuCisgICAgaWYgKG1fc2hvdWxkRGlzY2FyZEJ5
dGVjb2RlKSB7CisgICAgICAgIGRpc2NhcmRCeXRlY29kZSgpOworICAgICAgICBtX3Nob3VsZERp
c2NhcmRCeXRlY29kZSA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBDb2RlQmxvY2s6OnN0cm9u
Z2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewogICAgIHZp
c2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fb3du
ZXJFeGVjdXRhYmxlKTsKICAgICBpZiAobV9yYXJlRGF0YSkgewpAQCAtMTYwMSw0MiArMTgwNywx
MiBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZtX2Z1bmN0aW9uRXhwcnNbaV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmbV9mdW5jdGlvbkRlY2xzW2ldKTsKLSNpZiBFTkFCTEUoSklUKQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChjYWxsTGlua0luZm8oaSkuaXNMaW5rZWQoKSkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZjYWxsTGlua0luZm8oaSkuY2FsbGVlKTsKLSAgICAgICAgaWYgKCEhY2FsbExpbmtJbmZvKGkp
Lmxhc3RTZWVuQ2FsbGVlKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmNhbGxMaW5rSW5m
byhpKS5sYXN0U2VlbkNhbGxlZSk7Ci0gICAgfQotI2VuZGlmCiAjaWYgRU5BQkxFKElOVEVSUFJF
VEVSKQogICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
LnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHZpc2l0U3RydWN0dXJlcyh2
aXNpdG9yLCAmaW5zdHJ1Y3Rpb25zKClbbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV0p
OwogICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnMuc2l6
ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgdmlzaXRTdHJ1Y3R1cmVzKHZpc2l0
b3IsICZpbnN0cnVjdGlvbnMoKVttX2dsb2JhbFJlc29sdmVJbnN0cnVjdGlvbnNbaV1dKTsKICNl
bmRpZgotI2lmIEVOQUJMRShKSVQpCi0gICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fZ2xvYmFsUmVz
b2x2ZUluZm9zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
Z2xvYmFsUmVzb2x2ZUluZm9zW2ldLnN0cnVjdHVyZSkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZtX2dsb2JhbFJlc29sdmVJbmZvc1tpXS5zdHJ1Y3R1cmUpOwotICAgIH0KLQotICAgIGZv
ciAoc2l6ZV90IHNpemUgPSBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBtX3N0cnVjdHVyZVN0dWJJbmZvc1tpXS52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKLQotICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX21ldGhvZENhbGxMaW5rSW5m
b3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAobV9tZXRob2RD
YWxsTGlua0luZm9zW2ldLmNhY2hlZFN0cnVjdHVyZSkgewotICAgICAgICAgICAgLy8gVGhlc2Ug
bWVtYmVycyBtdXN0IGJlIGZpbGxlZCBhdCB0aGUgc2FtZSB0aW1lLCBhbmQgb25seSBhZnRlcgot
ICAgICAgICAgICAgLy8gdGhlIE1ldGhvZENhbGxMaW5rSW5mbyBpcyBzZXQgYXMgc2Vlbi4KLSAg
ICAgICAgICAgIEFTU0VSVChtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uc2Vlbk9uY2UoKSk7Ci0g
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9tZXRob2RDYWxsTGlua0luZm9zW2ldLmNhY2hl
ZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBBU1NFUlQoISFtX21ldGhvZENhbGxMaW5rSW5mb3Nb
aV0uY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlKTsKLSAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX21ldGhvZENhbGxMaW5rSW5mb3NbaV0uY2FjaGVk
RnVuY3Rpb24pOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fbWV0aG9kQ2FsbExpbmtJ
bmZvc1tpXS5jYWNoZWRQcm90b3R5cGUpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoaGFzQ29kZU9yaWdpbnMoKSkgewpAQCAtMTY1Mywx
NSArMTgyOSw2IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAg
ICBmb3IgKHVuc2lnbmVkIHByb2ZpbGVJbmRleCA9IDA7IHByb2ZpbGVJbmRleCA8IG51bWJlck9m
VmFsdWVQcm9maWxlcygpOyArK3Byb2ZpbGVJbmRleCkKICAgICAgICAgdmFsdWVQcm9maWxlKHBy
b2ZpbGVJbmRleCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwogI2VuZGlmCi0gICAgCi0j
aWYgRU5BQkxFKEpJVCkgJiYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgLy8gS2lsbCBv
ZmYgc29tZSBieXRlY29kZS4gV2UgY2FuJ3QgZG8gaXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdh
bnQgdG8gYWNjaWRlbnRhbGx5Ci0gICAgLy8gY2FsbCBpbnRvIG1hbGxvYyB3aGlsZSBpbiBzdG9w
LXRoZS13b3JsZCBHQyBtb2RlLgotICAgIGlmIChoYXNJbnN0cnVjdGlvbnMoKSAmJiBtX3Nob3Vs
ZERpc2NhcmRCeXRlY29kZSkKLSAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxp
emVyKHRoaXMpOwotI2VuZGlmCi0gICAgCi0gICAgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2Vz
KHZpc2l0b3IpOwogfQogCiB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTg2Nyw2ICsyMDM0LDI1IEBAIHZvaWQgQ2Fs
bExpbmtJbmZvOjp1bmxpbmsoSlNHbG9iYWxEYXRhJiAKICAgICAgICAgcmVtb3ZlKCk7CiB9CiAK
K3ZvaWQgTWV0aG9kQ2FsbExpbmtJbmZvOjpyZXNldChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVm
ZmVyLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCit7CisgICAgY2FjaGVkU3RydWN0dXJlLmNs
ZWFyVG9NYXhVbnNpZ25lZCgpOworICAgIGNhY2hlZFByb3RvdHlwZS5jbGVhcigpOworICAgIGNh
Y2hlZFByb3RvdHlwZVN0cnVjdHVyZS5jbGVhclRvTWF4VW5zaWduZWQoKTsKKyAgICBjYWNoZWRG
dW5jdGlvbi5jbGVhcigpOworICAgIAorICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJ
VCkgeworI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldE1ldGhvZE9wdGltaXplKTsKKyNlbHNlCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgQVNTRVJUKGppdFR5cGUgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGN0aV9vcF9nZXRfYnlfaWRfbWV0
aG9kX2NoZWNrKTsKKyAgICB9Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxscygpCiB7
CiAgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKQEAgLTE5ODIsMzcgKzIxNjgsMjggQEAgYm9vbCBG
dW5jdGlvbkNvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERgogICAgIHJldHVybiBERkc6OmNhbkNv
bXBpbGVGdW5jdGlvbkZvckNhbGwodGhpcyk7CiB9CiAKLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6
amV0dGlzb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBQcm9ncmFtQ29kZUJsb2Nr
OjpqZXR0aXNvbigpCiB7CiAgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgc3RhdGlj
X2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0
aW1pemVkQ29kZShnbG9iYWxEYXRhKTsKKyAgICBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJs
ZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCpnbG9iYWxEYXRh
KCkpOwogfQogCi12b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK3ZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlzb24oKQogewogICAgIEFTU0VSVChn
ZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIEFTU0VSVCh0aGlzID09
IHJlcGxhY2VtZW50KCkpOwotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJF
eGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7CisgICAgc3Rh
dGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0
aW1pemVkQ29kZSgqZ2xvYmFsRGF0YSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6
amV0dGlzb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBGdW5jdGlvbkNvZGVCbG9j
azo6amV0dGlzb24oKQogewogICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwotICAgIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25P
cHRpbWl6ZWRDb2RlRm9yKGdsb2JhbERhdGEsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25z
dHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKmdsb2JhbERh
dGEoKSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsK
IH0KICNlbmRpZgogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQot
ewotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpIHx8ICFFTkFCTEUoSklUKQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgQVNTRVJUKG1fc2hvdWxkRGlzY2FyZEJ5dGVj
b2RlKTsKLSAgICBkaXNjYXJkQnl0ZWNvZGUoKTsKLX0KLQogI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDA4Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MSw2ICsxNzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAg
ICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQg
cmVzZXQoUmVwYXRjaEJ1ZmZlciYsIEpJVENvZGU6OkpJVFR5cGUpOwogCiAgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxv
Y2F0aW9uOwpAQCAtMjUwLDcgKzI1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KICNlbmRp
ZgogCi0gICAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIg
eworICAgIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyLCBw
dWJsaWMgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHB1YmxpYzoKQEAgLTI5NCwx
MCArMjk2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY2FuUHJvZHVjZUNvcHlX
aXRoQnl0ZWNvZGUoKSB7IHJldHVybiBoYXNJbnN0cnVjdGlvbnMoKTsgfQogCiAgICAgICAgIHZv
aWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICAgICAgCi0gICAgICAgIC8vIENh
bGwgdGhpcyBpZiB5b3UgYXJlIG5vdCBqZXR0aXNvbmluZyBhIGNvZGUgYmxvY2ssIGFuZCB0aHVz
Ci0gICAgICAgIC8vIGhhdmUgbm8gZXZpZGVuY2UgdG8gc3VnZ2VzdCB0aGF0IGl0IHdpbGwgbmV2
ZXIgYmUgY2FsbGVkIGludG8gYWdhaW4uCi0gICAgICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtS
ZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRp
c3RpY3MoKTsKIApAQCAtNTM3LDcgKzUzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
SVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgp
OyB9CiAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSB7
IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpID0gMDsKICAgICAgICAgdmlydHVh
bCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Q29tcGlsZVdpdGhERkcoKSA9IDA7CiAgICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1l
bnQoKQpAQCAtMTA2MCwxMCArMTA1OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAg
ICAgICAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICB2b2lkIHJlb3B0aW1pemUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB2b2lkIHJlb3B0aW1pemUoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSAhPSB0aGlzKTsKLSAgICAgICAgICAgIHJl
cGxhY2VtZW50KCktPmpldHRpc29uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgcmVwbGFjZW1l
bnQoKS0+amV0dGlzb24oKTsKICAgICAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKICAg
ICAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICAgICAgfQpAQCAtMTA4NSw2ICsx
MDgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9zaG91bGREaXNjYXJkQnl0
ZWNvZGU7CiAKICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtS
ZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpOwogICAgICAgICAKICAgICBwcml2YXRlOgpAQCAtMTEwMSw2ICsxMTAw
LDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaW50UHV0QnlJZE9wKEV4ZWNT
dGF0ZSosIGludCBsb2NhdGlvbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3Im
LCBjb25zdCBjaGFyKiBvcCkgY29uc3Q7CiAjZW5kaWYKICAgICAgICAgdm9pZCB2aXNpdFN0cnVj
dHVyZXMoU2xvdFZpc2l0b3ImLCBJbnN0cnVjdGlvbiogdlBDKSBjb25zdDsKKyAgICAgICAgCisj
aWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIGJvb2wgc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVM
aXZlbmVzc0R1cmluZ1NjYW4oKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBOdWxsIG1fZGZn
RGF0YSBtZWFucyB0aGF0IHRoaXMgaXMgYSBiYXNlbGluZSBKSVQgQ29kZUJsb2NrLiBCYXNlbGlu
ZSBKSVQKKyAgICAgICAgICAgIC8vIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNv
bmVkIHdoZW4gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdvCisgICAgICAgICAgICAvLyBzdGFsZS4g
U28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1l
IHRoYXQKKyAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCisgICAgICAg
ICAgICBpZiAoIW1fZGZnRGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHdlIGRvbid0IGF0dGVtcHQg
dG8gamV0dGlzb24gY29kZSBibG9ja3MgZHVyaW5nIEdDIGlmCisgICAgICAgICAgICAvLyB0aGV5
IGFyZSBleGVjdXRpbmcuIEluc3RlYWQgd2Ugc3Ryb25nbHkgbWFyayB0aGVpciB3ZWFrIHJlZmVy
ZW5jZXMgdG8KKyAgICAgICAgICAgIC8vIGFsbG93IHRoZW0gdG8gY29udGludWUgdG8gZXhlY3V0
ZSBzb3VuZGx5LgorICAgICAgICAgICAgaWYgKG1fZGZnRGF0YS0+bWF5QmVFeGVjdXRpbmcpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxp
dmVuZXNzRHVyaW5nU2NhbigpIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorICAgICAgICAKKyAg
ICAgICAgdm9pZCBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKFNsb3RWaXNpdG9yJik7
CisgICAgICAgIAorICAgICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNs
b3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNs
b3RWaXNpdG9yJik7CiAKICAgICAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkK
ICAgICAgICAgewpAQCAtMTE3Nyw2ICsxMjAzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsKICAgICAg
ICAgICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7CiAgICAgICAgICAgICBib29sIGlzSmV0dGlzb25l
ZDsKKyAgICAgICAgICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXpl
ZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KKyAgICAgICAgICAgIGJvb2wgYWxsVHJhbnNpdGlvbnNI
YXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCiAgICAg
ICAgIH07CiAgICAgICAgIAogICAgICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOwpAQCAt
MTI3OCw3ICsxMzA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29u
KEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAg
ICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlmCkBAIC0xMzEyLDcgKzEzNDAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9k
ZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayog
cmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCk7
CiAjZW5kaWYKQEAgLTEzNDksNyArMTM3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJM
RShKSVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxl
T3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGpldHRp
c29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDEwMDg3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwg
Zmlyc3RDaGFpbiwgaXNEaXJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgaW50IGNvdW50KQorICAgICAgICBib29sIHZp
c2l0V2VhayhpbnQgY291bnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgIFBvbHltb3JwaGljU3R1YkluZm8m
IGluZm8gPSBsaXN0W2ldOwpAQCAtMTI0LDEyICsxMjQsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5mby5iYXNlKTsKLSAg
ICAgICAgICAgICAgICBpZiAoaW5mby51LnByb3RvICYmICFpbmZvLmlzQ2hhaW4pCi0gICAgICAg
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpbmZvLnUucHJvdG8pOwotICAgICAgICAgICAg
ICAgIGlmIChpbmZvLnUuY2hhaW4gJiYgaW5mby5pc0NoYWluKQotICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmaW5mby51LmNoYWluKTsKKyAgICAgICAgICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKGluZm8uYmFzZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby51LnByb3RvICYmICFpbmZvLmlzQ2hh
aW4KKyAgICAgICAgICAgICAgICAgICAgJiYgIUhlYXA6OmlzTWFya2VkKGluZm8udS5wcm90by5n
ZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBpZiAoaW5mby51LmNoYWluICYmIGluZm8uaXNDaGFpbgorICAgICAgICAgICAgICAgICAgICAm
JiAhSGVhcDo6aXNNYXJrZWQoaW5mby51LmNoYWluLmdldCgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMTAwODc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNDggKzYyLDU1IEBAIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmRlcmVmKCkKICAgICB9CiB9CiAKLXZvaWQgU3RydWN0dXJlU3R1YkluZm86
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorYm9vbCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcygpCiB7CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7
CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZ1LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
dS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZ1LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47
CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0
cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1LmdldEJ5SWRQ
cm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZ1LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlKTsK
LSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnUuZ2V0QnlJZENoYWluLmNoYWluKTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5n
ZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7CiAgICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
ID0gdS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVzLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yLCB1LmdldEJ5SWRTZWxmTGlzdC5saXN0
U2l6ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVjdHVy
ZXMtPnZpc2l0V2Vhayh1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpIHsKKyAgICAgICAgICAg
IGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgYWNjZXNzX2dldF9i
eV9pZF9wcm90b19saXN0OiB7CiAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxp
c3Q7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
ciwgdS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAoIXBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuZ2V0QnlJZFNlbGZMaXN0
Lmxpc3RTaXplKSkgeworICAgICAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb246Ci0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZ1LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlKTsKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkVHJhbnNpdGlvbi5w
cmV2aW91c1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFwOjppc01hcmtlZCh1
LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgIHx8ICFIZWFw
Ojppc01hcmtlZCh1LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3JlcGxhY2U6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ1LnB1dEJ5SWRSZXBsYWNlLmJhc2VP
YmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBhY2Nlc3NfdW5zZXQ6
Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBhY2Nlc3NfcHV0
X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICBj
YXNlIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aDoKLSAgICAgICAgLy8gVGhlc2UgaW5zdHJ1Y3Rp
b25zIGRvbid0IG5lZWQgdG8gbWFyayBhbnl0aGluZwotICAgICAgICByZXR1cm47CisgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQodS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIC8vIFRoZSBy
ZXN0IG9mIHRoZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVxdWlyZSByZWZlcmVuY2VzLCBzbyB0aGVy
ZSBpcyBubyBuZWVkIHRvCisgICAgICAgIC8vIGRvIGFueXRoaW5nLgorICAgICAgICBicmVhazsK
ICAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9u
IDEwMDg3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwzNSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYWNjZXNzX2dldF9zdHJpbmdfbGVuZ3RoLAogICAgIH07CiAKKyAgICBpbmxpbmUg
Ym9vbCBpc0dldEJ5SWRBY2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9z
ZWxmOgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CisgICAgICAgIGNhc2Ug
YWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKKyAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGZfbGlzdDoKKyAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CisgICAg
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9nZW5lcmljOgorICAgICAgICBjYXNlIGFjY2Vzc19n
ZXRfYXJyYXlfbGVuZ3RoOgorICAgICAgICBjYXNlIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aDoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlubGluZSBib29sIGlz
UHV0QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRp
b246CisgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgICAgICBjYXNl
IGFjY2Vzc19wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCiAgICAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgU3RydWN0dXJlU3R1
YkluZm8oKQogICAgICAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191bnNldCkKQEAgLTExMywx
MCArMTQyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgICAgICAgICAgdS5wdXRCeUlk
UmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgYmFzZU9i
amVjdFN0cnVjdHVyZSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVzZXQo
KQorICAgICAgICB7CisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0OworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZigpOworICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkZXJlZigpOwotICAgICAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKKyAgICAgICAgYm9vbCB2aXNpdFdlYWtSZWZl
cmVuY2VzKCk7CisgICAgICAgIAogICAgICAgICBib29sIHNlZW5PbmNlKCkKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIHNlZW47CkBAIC0xNDIsMTcgKzE3OSwxOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmU7CiAgICAgICAgIGludDE2X3Qg
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKICAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1Nsb3dD
YXNlOworICAgICAgICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOworI2Vsc2UKKyAg
ICAgICAgaW50MTZfdCBkZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlOworICAgICAgICBpbnQxNl90
IGRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlOwogI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgc3RydWN0IHsKLSAgICAg
ICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7Ci0jZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgICAgIGludDE2X3QgZGVsdGFDYWxsVG9U
YWdMb2FkT3JTdG9yZTsKLSAgICAgICAgICAgICAgICBpbnQxNl90IGRlbHRhQ2FsbFRvUGF5bG9h
ZExvYWRPclN0b3JlOwotI2VuZGlmCisgICAgICAgICAgICAgICAgLy8gSXQgd291bGQgYmUgdW53
aXNlIHRvIHB1dCBhbnl0aGluZyBoZXJlLCBhcyBpdCB3aWxsIHN1cmVseSBiZSBvdmVyd3JpdHRl
bi4KICAgICAgICAgICAgIH0gdW5zZXQ7CiAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNlT2JqZWN0U3RydWN0dXJlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJl
dmlzaW9uIDEwMDg3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsMTMgKzE1NywxMyBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBp
bmZvID0gbV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKGkpOwogICAgICAgICBDb2RlTG9j
YXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3By
b3BlcnR5QWNjZXNzZXNbaV0ubV9mdW5jdGlvbkNhbGwpOwogICAgICAgICBpbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKLSAgICAgICAgaW5mby51LnVuc2V0LmRl
bHRhQ2hlY2tJbW1Ub0NhbGwgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBj
YWxsUmV0dXJuTG9jYXRpb24pOworICAgICAgICBpbmZvLmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBk
aWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIobGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlB
Y2Nlc3Nlc1tpXS5tX2RlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBjYWxsUmV0dXJuTG9jYXRpb24pOwog
ICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0
eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaykpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVy
ZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKKyAg
ICAgICAgaW5mby5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlB
Y2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpKTsKICNlbHNlCi0gICAgICAgIGlu
Zm8udS51bnNldC5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVy
dHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvVGFnTG9hZE9yU3RvcmUpKTsKLSAgICAgICAgaW5m
by51LnVuc2V0LmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlID0gZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSk7CisgICAg
ICAgIGluZm8uZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5
QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSk7CisgICAgICAgIGluZm8u
ZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
Y2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vz
c2VzW2ldLm1fZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpKTsKICNlbmRpZgogICAgICAg
ICBpbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2Fs
bFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvRG9u
ZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb0RvbmUpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTAwODc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI1LDggKzMyNSw5IEBAIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFz
ZVZhbHVlLmdldChleGVjLCAqcHJvcGVydHlOYW1lLCBzbG90KTsKLQotICAgIE1ldGhvZENhbGxM
aW5rSW5mbyYgbWV0aG9kSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRNZXRob2RDYWxsTGlu
a0luZm8ocmV0dXJuQWRkcmVzcyk7CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKKyAgICBNZXRob2RDYWxsTGlua0luZm8mIG1ldGhvZEluZm8gPSBj
b2RlQmxvY2stPmdldE1ldGhvZENhbGxMaW5rSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBpZiAo
bWV0aG9kSW5mby5zZWVuT25jZSgpKQogICAgICAgICBkZmdSZXBhdGNoR2V0TWV0aG9kKGV4ZWMs
IGJhc2VWYWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgbWV0aG9kSW5mbyk7CiAgICAgZWxzZQpA
QCAtMzY3LDcgKzM2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
R2UKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlVmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCAqcHJv
cGVydHlOYW1lLCBzbG90KTsKLQorICAgIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
byA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKICAgICBp
ZiAoc3R1YkluZm8uc2VlbikKICAgICAgICAgZGZnUmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZh
bHVlLCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEwMDg3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE5
ICs0OSwxOSBAQCBzdGF0aWMgdm9pZCBkZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kCiAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0
aEZ1bmN0aW9uKTsKIAogICAgIC8vIFBhdGNoIHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUgb2Zm
c2V0IG9mIHRoZSBsb2FkLgotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby51
LnVuc2V0LmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCBzdHJ1Y3R1cmUpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZz
ZXQoLShpbnRwdHJfdClzdHViSW5mby5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgc3RydWN0dXJlKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChjb21wYWN0KQotICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RB
dE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvZmZzZXQpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChzdHViSW5mby5k
ZWx0YUNhbGxUb0xvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0KTsKICAgICBl
bHNlCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvTG9h
ZE9yU3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQpOworICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZz
ZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9m
ZnNldCk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChjb21wYWN0KSB7Ci0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0
YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9UYWdMb2Fk
T3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zm
c2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCBzaXpl
b2YoSlNWYWx1ZSkgKiBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9yZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Cisg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRP
clN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9UYWdMb2FkT3JTdG9y
ZSksIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5m
by51LnVuc2V0LmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUp
ICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Rh
Z0xvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zm
c2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvUGF5bG9hZExvYWRPclN0b3JlKSwgc2l6ZW9mKEpTVmFs
dWUpICogb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC02NTEsNiArNjUxLDQ0IEBAIHZv
aWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW4KICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24p
LCBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKIH0KIAordm9pZCBkZmdSZXNldEdldEJ5SUQo
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2go
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0odWludHB0
cl90KXN0dWJJbmZvLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PigtMSkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIDApOworI2Vsc2UKKyAgICByZXBhdGNoQnVmZmVy
LnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbENvbXBhY3RBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1RhZ0xvYWRPclN0b3JlKSwgMCk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxDb21w
YWN0QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9QYXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsK
KyNlbmRpZgorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UpKTsKK30KKwordm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVw
YXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZfREZHT3Bl
cmF0aW9uX0VKQ0kgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0RGR09wZXJh
dGlvbl9FSkNJPihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBWX0RGR09wZXJhdGlvbl9F
SkNJIG9wdGltaXplZEZ1bmN0aW9uOworICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3QpCisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCkKKyAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KQorICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6
ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCk7CisgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgIH0KKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wdGltaXpl
ZEZ1bmN0aW9uKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0odWludHB0cl90KXN0dWJJbmZvLmRlbHRh
Q2hlY2tJbW1Ub0NhbGwpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvTG9hZE9yU3Rv
cmUpLCAwKTsKKyNlbHNlCisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvVGFn
TG9hZE9yU3RvcmUpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Q
YXlsb2FkTG9hZE9yU3RvcmUpLCAwKTsKKyNlbmRpZgorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5oCShyZXZpc2lvbiAxMDA4NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksMjEgQEAgdm9pZCBkZmdCdWls
ZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVgogdm9pZCBkZmdCdWlsZEdldEJ5SURQcm90b0xp
c3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKK3ZvaWQgZGZnUmVzZXRH
ZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBkZmdSZXNl
dFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAotI2VuZGlmCi0jZW5kaWYKKyNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit2b2lkIGRmZ1Jlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3Ry
dWN0dXJlU3R1YkluZm8mKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cit2b2lkIGRmZ1Jlc2V0
UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorI2VuZGlmIC8vIERGR1JlcGF0Y2hfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCShyZXZpc2lvbiAxMDA4NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9i
YWxEYXRhLCBmdW5jKTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB2b2lkIHJlc2V0UGF0
Y2hHZXRCeUlkKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyopOworICAgICAgICBz
dGF0aWMgdm9pZCByZXNldFBhdGNoUHV0QnlJZChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1
YkluZm8qKTsKICAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sq
IGNvZGVibG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVk
T2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogICAgICAgICBzdGF0aWMg
dm9pZCBwYXRjaFB1dEJ5SWRSZXBsYWNlKENvZGVCbG9jayogY29kZWJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpOwogICAgICAgICBzdGF0aWMgdm9pZCBwYXRj
aE1ldGhvZENhbGxQcm90byhKU0dsb2JhbERhdGEmLCBDb2RlQmxvY2sqIGNvZGVibG9jaywgTWV0
aG9kQ2FsbExpbmtJbmZvJiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCosIFJldHVy
bkFkZHJlc3NQdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMDA4NzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTA3LDYgKzExMDcsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92
YXIoSW5zdHJ1YwogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9w
dXRfZ2xvYmFsX3ZhciksIHZhbHVlLCByZWdUMSwgcmVnVDApOwogfQogCit2b2lkIEpJVDo6cmVz
ZXRQYXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24sIGN0aV9vcF9nZXRfYnlfaWQpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KHBhdGNo
T2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uZGF0YUxhYmVs
Q29tcGFjdEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSksIDAp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFM
YWJlbENvbXBhY3RBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIp
LCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKSwgc3R1YkluZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93
Q2FzZUNhbGwpKTsKK30KKwordm9pZCBKSVQ6OnJlc2V0UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjdGlfb3Bf
cHV0X2J5X2lkKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChz
dHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENvbXBhY3RBdE9mZnNldChwYXRjaE9mZnNl
dFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0
Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hP
ZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQyKSwgMCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMDA4Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA0NCw2ICsxMDQ0LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
bG9iYWxfdmFyKEluc3RydWMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVn
VDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJs
ZUFjY2Vzcyk7CiB9CiAKK3ZvaWQgSklUOjpyZXNldFBhdGNoR2V0QnlJZChSZXBhdGNoQnVmZmVy
JiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCit7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY3RpX29wX2dl
dF9ieV9pZCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4uZGF0YUxhYmVsUHRyQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxDb21wYWN0QXRPZmZzZXQocGF0Y2hPZmZzZXRH
ZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpLCAwKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFu
Y2hUb1Nsb3dDYXNlKSwgc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpKTsKK30KKwordm9pZCBKSVQ6OnJlc2V0
UGF0Y2hQdXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLCBjdGlfb3BfcHV0X2J5X2lkKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5kYXRhTGFiZWxQdHJBdE9mZnNldChwYXRjaE9m
ZnNldFB1dEJ5SWRTdHJ1Y3R1cmUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0aEJlZ2luLmRhdGFMYWJlbENv
bXBhY3RBdE9mZnNldChwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCksIDApOwor
fQorCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNo
LCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUsIFdyaXRlQmFycmll
clVzZUtpbmQgdXNlS2luZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiAxMDA4NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzOCw3ICsxOTM4LDcgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CiAgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXAp
IChpbiBsb29wKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKICNl
bmRpZgotICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTIwMDgsNyArMjAwOCw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICNpZiBFTkFCTEUoSklU
X1ZFUkJPU0VfT1NSKQogICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24g
b2YgJXAoJXApIChpbiBsb29wIGFmdGVyIE9TUiBmYWlsKS5cbiIsIGNvZGVCbG9jaywgY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpKTsKICNlbmRpZgotICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1p
emUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1p
emUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjA0MCwxMiArMjA0MCwxMCBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAjaWYgRU5BQkxFKEpJVF9W
RVJCT1NFX09TUikKICAgICAgICAgICAgIHByaW50ZigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlv
biBvZiAlcCglcCkgKGluIHJldHVybikuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFj
ZW1lbnQoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUo
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24o
KTsKLQotICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJh
cnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRl
QmFycmllci5oCShyZXZpc2lvbiAxMDA4NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFdyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBjbGVhcigpIHsgY2xlYXIoMCk7IH0KKyAgICB2b2lk
IGNsZWFyVG9NYXhVbnNpZ25lZCgpIHsgY2xlYXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEp
KTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgSklUV3JpdGVCYXJyaWVyQmFzZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116043</attachid>
            <date>2011-11-21 00:26:37 -0800</date>
            <delta_ts>2011-11-21 00:26:37 -0800</delta_ts>
            <desc>build fix</desc>
            <filename>buildfix_patch_1.diff</filename>
            <type>text/plain</type>
            <size>2048</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwODg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExIEBA
CisyMDExLTExLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisgICAgICAgIAor
ICAgICAgICBBbm90aGVyIGF0dGVtcHQgYXQgYSBidWlsZCBmaXguCisKKyAgICAgICAgKiBkZmcv
REZHUmVwYXRjaC5oOgorICAgICAgICAoSlNDOjpERkc6OmRmZ1Jlc2V0R2V0QnlJRCk6CisgICAg
ICAgIChKU0M6OkRGRzo6ZGZnUmVzZXRQdXRCeUlEKToKKwogMjAxMS0xMS0yMCAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgaW50ZXJwcmV0ZXIg
YnVpbGQgZml4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHJl
dmlzaW9uIDEwMDg4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNCArNDQsMTkgQEAgdm9pZCBkZmdSZXNldFB1dEJ5SUQo
UmVwYXRjaEJ1ZmZlciYsIFN0cgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKLSNlbGlm
IEVOQUJMRShKSVQpIC8vIEVOQUJMRShERkdfSklUKQorI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQp
CiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CituYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBkZmdSZXNldEdldEJ5SUQoUmVwYXRj
aEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQot
dm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKK2NsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvOworCituYW1lc3BhY2UgREZHIHsKKworaW5saW5lIE5PX1JFVFVSTl9E
VUVfVE9fQVNTRVJUIHZvaWQgZGZnUmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KK2lubGluZSBOT19SRVRVUk5f
RFVFX1RPX0FTU0VSVCB2b2lkIGRmZ1Jlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0
dXJlU3R1YkluZm8mKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2
aXNpb24gMTAwODgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAvKiBJbmNsdWRlIGNvbXBpbGVyIHNwZWNp
ZmljIG1hY3JvcyAqLwogI2luY2x1ZGUgIkNvbXBpbGVyLmgiCiAKKyNkZWZpbmUgRU5BQkxFX0pJ
VCAwCisKIC8qID09PT0gUExBVEZPUk0gaGFuZGxlcyBPUywgb3BlcmF0aW5nIGVudmlyb25tZW50
LCBncmFwaGljcyBBUEksIGFuZAogICAgQ1BVLiBUaGlzIG1hY3JvIHdpbGwgYmUgcGhhc2VkIG91
dCBpbiBmYXZvciBvZiBwbGF0Zm9ybSBhZGFwdGF0aW9uCiAgICBtYWNyb3MsIHBvbGljeSBkZWNp
c2lvbiBtYWNyb3MsIGFuZCB0b3AtbGV2ZWwgcG9ydCBkZWZpbml0aW9ucy4gPT09PSAqLwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>