<?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>71522</bug_id>
          
          <creation_ts>2011-11-03 17:04:16 -0700</creation_ts>
          <short_desc>JSC should be able to sample itself in a more flexible way than just sampling flags</short_desc>
          <delta_ts>2011-11-06 16:35:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>495893</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-03 17:04:16 -0700</bug_when>
    <thetext>Sampling flags are one of our most precise ways of measuring system overheads.  But they are painfully low-level.  Numbers from a narrow range need to be ascribed to each region of code being sampled.  Hierarchical views of the data are not possible.  JSC should have a more general way of doing sampling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495898</commentid>
    <comment_count>1</comment_count>
      <attachid>113586</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-03 17:08:30 -0700</bug_when>
    <thetext>Created attachment 113586
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495901</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-03 17:12:27 -0700</bug_when>
    <thetext>Attachment 113586 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/SamplingTool.cpp:116:  Semicolon defining empty statement for this loop. Use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 14 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>495919</commentid>
    <comment_count>3</comment_count>
      <attachid>113586</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-11-03 17:29:36 -0700</bug_when>
    <thetext>Comment on attachment 113586
the patch

One would hope that the SamplingRegion constructors would compile out to no code when the tool isn&apos;t enabled, I&apos;m slightly concerned that C compilers might disappoint us yet again and we may need to hide these behind a macro.  But if this isn&apos;t showing a regression right now then we can cross this bridge when we come to it.  Please make the style bot happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495944</commentid>
    <comment_count>4</comment_count>
      <attachid>113586</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-03 17:41:25 -0700</bug_when>
    <thetext>Comment on attachment 113586
the patch

Attachment 113586 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10301023</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495955</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-03 18:01:44 -0700</bug_when>
    <thetext>Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;SamplerDisabled&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc

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            SamplerDisabled                                 
SunSpider:
   3d-cube                                7.3373+-0.1676    ?     7.5402+-0.2023       ? might be 1.0276x slower
   3d-morph                               7.8858+-0.4350          7.6701+-0.1214         might be 1.0281x faster
   3d-raytrace                            7.7052+-0.2236    ?     7.7302+-0.2359       ?
   access-binary-trees                    1.6188+-0.0617    ?     1.8235+-0.2556       ? might be 1.1264x slower
   access-fannkuch                        6.6048+-0.1505          6.4360+-0.0666         might be 1.0262x faster
   access-nbody                           3.8754+-0.1280          3.8720+-0.2675       
   access-nsieve                          2.6285+-0.0651    ?     2.6426+-0.0746       ?
   bitops-3bit-bits-in-byte               1.4582+-0.2108          1.2898+-0.0299         might be 1.1306x faster
   bitops-bits-in-byte                    2.5890+-0.3265          2.4182+-0.0688         might be 1.0706x faster
   bitops-bitwise-and                     3.3750+-0.0774          3.2964+-0.0848         might be 1.0238x faster
   bitops-nsieve-bits                     5.5588+-0.1732          5.4807+-0.1309         might be 1.0143x faster
   controlflow-recursive                  2.0926+-0.0466    ?     2.1527+-0.0411       ? might be 1.0287x slower
   crypto-aes                             7.4639+-0.2539          7.4333+-0.2846       
   crypto-md5                             2.8924+-0.3005          2.7691+-0.0627         might be 1.0445x faster
   crypto-sha1                            2.6081+-0.3149          2.4773+-0.0523         might be 1.0528x faster
   date-format-tofte                     10.3030+-0.1220    ?    10.4140+-0.2368       ? might be 1.0108x slower
   date-format-xparb                      9.6536+-0.4447          9.5533+-0.2313         might be 1.0105x faster
   math-cordic                            6.4035+-0.1177    ?     6.6007+-0.1513       ? might be 1.0308x slower
   math-partial-sums                      7.5209+-0.1620          7.4152+-0.1120         might be 1.0142x faster
   math-spectral-norm                     2.6075+-0.0651    ?     2.8063+-0.2938       ? might be 1.0762x slower
   regexp-dna                            11.7749+-0.2294         11.6692+-0.2506       
   string-base64                          4.1195+-0.0678          4.0859+-0.0793       
   string-fasta                           6.3778+-0.1200    ?     6.4210+-0.1934       ?
   string-tagcloud                       11.8547+-0.3299         11.7013+-0.3115         might be 1.0131x faster
   string-unpack-code                    20.3228+-0.2529    ?    20.4651+-0.3966       ?
   string-validate-input                  5.4633+-0.2045    ?     5.4975+-0.6334       ?

   &lt;arithmetic&gt; *                         6.2344+-0.0549          6.2178+-0.0483       
   &lt;geometric&gt;                            5.0487+-0.0630          5.0283+-0.0426       
   &lt;harmonic&gt;                             4.0517+-0.0769          4.0282+-0.0483       

                                            TipOfTree            SamplerDisabled                                 
V8:
   crypto                                74.3128+-0.9020         73.8788+-0.7729       
   deltablue                            166.0901+-1.0659    ?   168.2366+-1.2831       ? might be 1.0129x slower
   earley-boyer                          92.4573+-1.1578    ?    92.8215+-1.5808       ?
   raytrace                              64.6803+-0.5825    ^    63.0305+-0.8967       ^ definitely 1.0262x faster
   regexp                               106.0170+-0.7636    ?   106.8364+-0.5769       ?
   richards                             125.3932+-1.1442    ?   125.5596+-1.5507       ?
   splay                                 74.6375+-1.6237         72.6300+-0.9738         might be 1.0276x faster

   &lt;arithmetic&gt;                         100.5126+-0.3520        100.4276+-0.4048       
   &lt;geometric&gt; *                         95.6339+-0.4187         95.1824+-0.4341       
   &lt;harmonic&gt;                            91.4038+-0.4953         90.6343+-0.4844       

                                            TipOfTree            SamplerDisabled                                 
Kraken:
   ai-astar                             494.8765+-1.8803    ?   495.2137+-5.7539       ?
   audio-beat-detection                 191.7268+-2.5698        190.7898+-2.2471       
   audio-dft                            274.6128+-5.5424    ?   278.7253+-3.5057       ? might be 1.0150x slower
   audio-fft                            124.4653+-1.3180    ?   125.6619+-1.5880       ?
   audio-oscillator                     254.8377+-2.5350    ?   254.9064+-1.9106       ?
   imaging-darkroom                     303.6497+-4.9306        301.3957+-4.1004       
   imaging-desaturate                   224.8186+-1.2112    ?   225.2390+-1.1122       ?
   imaging-gaussian-blur                560.7655+-3.1460        560.2771+-2.8576       
   json-parse-financial                  58.3449+-0.2732    ^    57.0138+-0.5403       ^ definitely 1.0233x faster
   json-stringify-tinderbox              68.8436+-1.0897    ?    70.7401+-0.9181       ? might be 1.0275x slower
   stanford-crypto-aes                   96.7287+-0.8454         95.9089+-1.0740       
   stanford-crypto-ccm                   99.9313+-0.6191    ?   100.8474+-1.3751       ?
   stanford-crypto-pbkdf2               195.4920+-1.9655        194.3583+-1.3438       
   stanford-crypto-sha256-iterative      81.1426+-0.6117         80.9516+-0.5244       

   &lt;arithmetic&gt; *                       216.4454+-0.4332    ?   216.5735+-0.6804       ?
   &lt;geometric&gt;                          171.7595+-0.2554    ?   171.8916+-0.3637       ?
   &lt;harmonic&gt;                           137.4784+-0.3473    ?   137.5056+-0.2421       ?

                                            TipOfTree            SamplerDisabled                                 
All benchmarks:
   &lt;arithmetic&gt;                          82.8919+-0.1415    ?    82.9082+-0.2179       ?
   &lt;geometric&gt;                           22.3708+-0.1629         22.3104+-0.1008       
   &lt;harmonic&gt;                             7.1259+-0.1318          7.0850+-0.0822       

                                            TipOfTree            SamplerDisabled                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                       50.5332+-0.1966         50.4183+-0.1507</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495961</commentid>
    <comment_count>6</comment_count>
      <attachid>113586</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-03 18:10:42 -0700</bug_when>
    <thetext>Comment on attachment 113586
the patch

Attachment 113586 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10285181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495977</commentid>
    <comment_count>7</comment_count>
      <attachid>113604</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-03 18:33:53 -0700</bug_when>
    <thetext>Created attachment 113604
the patch

Attempting to fix build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495979</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-03 18:35:40 -0700</bug_when>
    <thetext>Attachment 113604 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/wtf/Spectrum.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 21 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>495984</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-03 18:43:42 -0700</bug_when>
    <thetext>Overhead of having the profiler enabled...



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;SamplerEnabled&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc

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             SamplerEnabled                                 
SunSpider:
   3d-cube                                7.3679+-0.1703    ?     7.4590+-0.2383       ? might be 1.0124x slower
   3d-morph                               7.4725+-0.1504    ?     7.5925+-0.0576       ? might be 1.0160x slower
   3d-raytrace                            7.6587+-0.2328          7.6429+-0.3016       
   access-binary-trees                    1.6238+-0.0567          1.5740+-0.0470         might be 1.0316x faster
   access-fannkuch                        6.3700+-0.1068    ?     6.5848+-0.1303       ? might be 1.0337x slower
   access-nbody                           3.7424+-0.1104    ?     3.8870+-0.2522       ? might be 1.0386x slower
   access-nsieve                          2.5210+-0.0519    ?     2.8163+-0.3102       ? might be 1.1171x slower
   bitops-3bit-bits-in-byte               1.5631+-0.2876          1.3068+-0.0208         might be 1.1961x faster
   bitops-bits-in-byte                    2.6240+-0.3249          2.3986+-0.0573         might be 1.0940x faster
   bitops-bitwise-and                     3.4415+-0.2594    ?     3.8915+-0.8106       ? might be 1.1308x slower
   bitops-nsieve-bits                     5.2864+-0.0886    !     5.5972+-0.1628       ! definitely 1.0588x slower
   controlflow-recursive                  2.1253+-0.0662    ?     2.1445+-0.0524       ?
   crypto-aes                             7.3671+-0.2485    ?     7.6204+-0.2110       ? might be 1.0344x slower
   crypto-md5                             2.9912+-0.4327          2.7142+-0.0623         might be 1.1021x faster
   crypto-sha1                            2.4407+-0.0638    ?     2.4656+-0.0732       ? might be 1.0102x slower
   date-format-tofte                      9.8041+-0.2285    !    10.7834+-0.6929       ! definitely 1.0999x slower
   date-format-xparb                      9.6657+-0.3719          9.1994+-0.3476         might be 1.0507x faster
   math-cordic                            6.3703+-0.0942    ?     7.2613+-0.7985       ? might be 1.1399x slower
   math-partial-sums                      7.3831+-0.1383    !     7.7335+-0.1846       ! definitely 1.0475x slower
   math-spectral-norm                     2.5657+-0.0528    ?     2.5755+-0.0565       ?
   regexp-dna                            11.4304+-0.2376    ?    11.6031+-0.2032       ? might be 1.0151x slower
   string-base64                          4.0302+-0.0719    !     4.1909+-0.0839       ! definitely 1.0399x slower
   string-fasta                           6.4095+-0.2201          6.3538+-0.1296       
   string-tagcloud                       11.6069+-0.2982    ?    12.0571+-0.7107       ? might be 1.0388x slower
   string-unpack-code                    20.1409+-0.4080    ?    20.5831+-0.3285       ? might be 1.0220x slower
   string-validate-input                  5.1423+-0.0660    ?     5.3008+-0.1041       ? might be 1.0308x slower

   &lt;arithmetic&gt; *                         6.1210+-0.0359    !     6.2822+-0.0626       ! definitely 1.0263x slower
   &lt;geometric&gt;                            4.9754+-0.0425    ?     5.0541+-0.0524       ? might be 1.0158x slower
   &lt;harmonic&gt;                             4.0231+-0.0608          4.0126+-0.0465       

                                            TipOfTree             SamplerEnabled                                 
V8:
   crypto                                72.4939+-0.5818    !    74.2267+-0.5432       ! definitely 1.0239x slower
   deltablue                            163.5958+-0.9325    !   167.2956+-1.2395       ! definitely 1.0226x slower
   earley-boyer                          90.1187+-1.0230    ?    91.7711+-1.4188       ? might be 1.0183x slower
   raytrace                              62.2410+-0.7072    ?    64.4008+-1.5194       ? might be 1.0347x slower
   regexp                               103.7200+-0.5577    !   108.1050+-1.2934       ! definitely 1.0423x slower
   richards                             122.8026+-0.4318    !   126.3099+-0.4679       ! definitely 1.0286x slower
   splay                                 72.7751+-1.6500         72.2254+-0.6783       

   &lt;arithmetic&gt;                          98.2496+-0.3347    !   100.6192+-0.4565       ! definitely 1.0241x slower
   &lt;geometric&gt; *                         93.3145+-0.4245    !    95.4732+-0.5345       ! definitely 1.0231x slower
   &lt;harmonic&gt;                            89.0397+-0.5060    !    91.0135+-0.6146       ! definitely 1.0222x slower

                                            TipOfTree             SamplerEnabled                                 
Kraken:
   ai-astar                             480.6611+-1.1364    !   502.6007+-2.7464       ! definitely 1.0456x slower
   audio-beat-detection                 187.1347+-2.3611    !   193.3259+-1.8803       ! definitely 1.0331x slower
   audio-dft                            270.5607+-14.2197       266.6992+-2.0169         might be 1.0145x faster
   audio-fft                            121.7067+-0.4497    !   125.2352+-0.6440       ! definitely 1.0290x slower
   audio-oscillator                     247.5017+-0.9247    !   254.6660+-1.8414       ! definitely 1.0289x slower
   imaging-darkroom                     295.8450+-3.8644    !   304.1592+-3.6218       ! definitely 1.0281x slower
   imaging-desaturate                   220.5671+-0.4008    !   228.1312+-1.4477       ! definitely 1.0343x slower
   imaging-gaussian-blur                542.6252+-1.5325    !   559.4707+-1.6266       ! definitely 1.0310x slower
   json-parse-financial                  56.9105+-0.3260    !    58.8739+-0.8441       ! definitely 1.0345x slower
   json-stringify-tinderbox              68.2445+-1.3047    !    69.8170+-0.2335       ! definitely 1.0230x slower
   stanford-crypto-aes                   95.0018+-0.6463    !    97.2163+-1.1808       ! definitely 1.0233x slower
   stanford-crypto-ccm                   98.5258+-0.5849    !   100.7550+-0.6774       ! definitely 1.0226x slower
   stanford-crypto-pbkdf2               190.7435+-0.5386    !   195.8103+-1.6467       ! definitely 1.0266x slower
   stanford-crypto-sha256-iterative      78.8713+-0.3829    !    81.0958+-0.3606       ! definitely 1.0282x slower

   &lt;arithmetic&gt; *                       211.0643+-0.8571    !   216.9898+-0.3769       ! definitely 1.0281x slower
   &lt;geometric&gt;                          167.8954+-0.4237    !   172.4017+-0.3524       ! definitely 1.0268x slower
   &lt;harmonic&gt;                           134.6227+-0.3187    !   138.2633+-0.4525       ! definitely 1.0270x slower

                                            TipOfTree             SamplerEnabled                                 
All benchmarks:
   &lt;arithmetic&gt;                          80.8892+-0.2487    !    83.0963+-0.1063       ! definitely 1.0273x slower
   &lt;geometric&gt;                           21.9607+-0.1091    !    22.4033+-0.1296       ! definitely 1.0202x slower
   &lt;harmonic&gt;                             7.0725+-0.1040          7.0594+-0.0798       

                                            TipOfTree             SamplerEnabled                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                       49.3991+-0.1261    !    50.6752+-0.1888       ! definitely 1.0258x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495987</commentid>
    <comment_count>10</comment_count>
      <attachid>113606</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-03 18:49:02 -0700</bug_when>
    <thetext>Created attachment 113606
attempting to make stylebot happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496000</commentid>
    <comment_count>11</comment_count>
      <attachid>113606</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-03 19:12:20 -0700</bug_when>
    <thetext>Comment on attachment 113606
attempting to make stylebot happy

Attachment 113606 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10318004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496041</commentid>
    <comment_count>12</comment_count>
      <attachid>113620</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-03 21:39:58 -0700</bug_when>
    <thetext>Created attachment 113620
the patch

More build goodness...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496043</commentid>
    <comment_count>13</comment_count>
      <attachid>113620</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-03 21:52:43 -0700</bug_when>
    <thetext>Comment on attachment 113620
the patch

Attachment 113620 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10318041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496045</commentid>
    <comment_count>14</comment_count>
      <attachid>113621</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-03 22:07:10 -0700</bug_when>
    <thetext>Created attachment 113621
the patch

Another build fix attempt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496733</commentid>
    <comment_count>15</comment_count>
      <attachid>113768</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-05 17:06:33 -0700</bug_when>
    <thetext>Created attachment 113768
the patch

Trying to fix Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496797</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-06 03:39:49 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/99374</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496809</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-06 09:33:59 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Landed in http://trac.webkit.org/changeset/99374

this commit seems to be causing a ton of assertion failures in the GTK+ debug bot during JSC regression tests: http://build.webkit.org/builders/GTK%20Linux%2064-bit%20Debug/builds/27434/steps/jscore-test/logs/actual.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496810</commentid>
    <comment_count>18</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-06 09:45:50 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; Landed in http://trac.webkit.org/changeset/99374
&gt; 
&gt; this commit seems to be causing a ton of assertion failures in the GTK+ debug bot during JSC regression tests: http://build.webkit.org/builders/GTK%20Linux%2064-bit%20Debug/builds/27434/steps/jscore-test/logs/actual.html

Here is the stack trace, if it&apos;s useful: 

Program terminated with signal 11, Segmentation fault.
#0  0x00002aae598553dd in WTF::ThreadIdentifierData::identifier () at ../../Source/JavaScriptCore/wtf/ThreadIdentifierDataPthreads.cpp:65
65	    ASSERT(m_key != PTHREAD_KEYS_MAX);

Thread 1 (Thread 0x2aae5c66b720 (LWP 10183)):
#0  0x00002aae598553dd in WTF::ThreadIdentifierData::identifier () at ../../Source/JavaScriptCore/wtf/ThreadIdentifierDataPthreads.cpp:65
#1  0x00002aae59855e4f in WTF::currentThread () at ../../Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:212
#2  0x00002aae5983846f in WTF::initializeMainThread () at ../../Source/JavaScriptCore/wtf/MainThread.cpp:100
#3  0x000000000040f5ea in main (argc=6, argv=0x7fff35896bb8) at ../../Source/JavaScriptCore/jsc.cpp:408</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496916</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-06 16:35:58 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; Landed in http://trac.webkit.org/changeset/99374
&gt; &gt; 
&gt; &gt; this commit seems to be causing a ton of assertion failures in the GTK+ debug bot during JSC regression tests: http://build.webkit.org/builders/GTK%20Linux%2064-bit%20Debug/builds/27434/steps/jscore-test/logs/actual.html
&gt; 
&gt; Here is the stack trace, if it&apos;s useful: 
&gt; 
&gt; Program terminated with signal 11, Segmentation fault.
&gt; #0  0x00002aae598553dd in WTF::ThreadIdentifierData::identifier () at ../../Source/JavaScriptCore/wtf/ThreadIdentifierDataPthreads.cpp:65
&gt; 65        ASSERT(m_key != PTHREAD_KEYS_MAX);
&gt; 
&gt; Thread 1 (Thread 0x2aae5c66b720 (LWP 10183)):
&gt; #0  0x00002aae598553dd in WTF::ThreadIdentifierData::identifier () at ../../Source/JavaScriptCore/wtf/ThreadIdentifierDataPthreads.cpp:65
&gt; #1  0x00002aae59855e4f in WTF::currentThread () at ../../Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:212
&gt; #2  0x00002aae5983846f in WTF::initializeMainThread () at ../../Source/JavaScriptCore/wtf/MainThread.cpp:100
&gt; #3  0x000000000040f5ea in main (argc=6, argv=0x7fff35896bb8) at ../../Source/JavaScriptCore/jsc.cpp:408

Well that&apos;s unfortunate. :-(  Tracking this here: https://bugs.webkit.org/show_bug.cgi?id=71643</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113586</attachid>
            <date>2011-11-03 17:08:30 -0700</date>
            <delta_ts>2011-11-03 18:33:53 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>samplingregion_patch_1.diff</filename>
            <type>text/plain</type>
            <size>23089</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyNDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAK
KzIwMTEtMTEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0Mgc2hvdWxkIGJlIGFibGUgdG8gc2FtcGxlIGl0c2VsZiBpbiBhIG1vcmUgZmxleGlibGUgd2F5
IHRoYW4ganVzdCBzYW1wbGluZyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgY29uc3RydWN0IHRoYXQgbG9va3MgbGlr
ZSBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigibmFtZSIpLgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6TG9ja2VyKToKKyAgICAgICAgKEpTQzo6
U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5n
UmVnaW9uOjpzYW1wbGUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1JlZ2lvbjo6ZHVtcCk6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpkdW1wSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpTYW1wbGluZ1RocmVhZDo6dGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKiBieXRlY29kZS9T
YW1wbGluZ1Rvb2wuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OlNhbXBsaW5nUmVn
aW9uKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246On5TYW1wbGluZ1JlZ2lvbik6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpleGNoYW5nZUN1cnJlbnQpOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVj
dCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHA6CisgICAgICAgIChKU0M6OlZU
YWJsZVNwZWN0cnVtOjpjb3VudFZQdHIpOgorICAgICAgICAoSlNDOjpWVGFibGVTcGVjdHJ1bTo6
ZHVtcCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5oOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAgICAgICAg
KiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAgKiBydW50
aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNv
bnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RG
Ojp3ZWFrQ29tcGFyZUFuZFN3YXApOgorCiAyMDExLTExLTAzICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgcmVtYWluaW5nIGNhbGxlcnMgb2YgcmVsZWFz
ZVJlZiB0byBjYWxsIGxlYWtSZWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDcgQEAgX19aTjNK
U0MxNEpTR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdEQyRXYK
IF9fWk4zSlNDMTRNYWNoaW5lVGhyZWFkczE2YWRkQ3VycmVudFRocmVhZEV2CiBfX1pOM0pTQzE0
TWFya1N0YWNrQXJyYXk2ZXhwYW5kRXYKK19fWk4zSlNDMTRTYW1wbGluZ1JlZ2lvbjRkdW1wRXYK
IF9fWk4zSlNDMTRTYW1wbGluZ1RocmVhZDRzdG9wRXYKIF9fWk4zSlNDMTRTYW1wbGluZ1RocmVh
ZDVzdGFydEVqCiBfX1pOM0pTQzE0U2NvcGVDaGFpbk5vZGU2c19pbmZvRQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0
aW9uLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNs
dWRlICJNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSA8
bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC00MDQsNiArNDA1LDcgQEAgaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogI2VuZGlmCiAKICAgICAvLyBJbml0aWFsaXplIEpTQyBi
ZWZvcmUgZ2V0dGluZyBKU0dsb2JhbERhdGEuCisgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVh
ZCgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogCiAgICAgLy8gV2UgY2FuJ3Qg
dXNlIGRlc3RydWN0b3JzIGluIHRoZSBmb2xsb3dpbmcgY29kZSBiZWNhdXNlIGl0IHVzZXMgV2lu
ZG93cwpAQCAtNDcyLDYgKzQ3NCw5IEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2Jh
bE9iamVjdCoKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCiAgICAgU2FtcGxpbmdGbGFnczo6
c3RvcCgpOwogI2VuZGlmCisjaWYgRU5BQkxFKFNBTVBMSU5HX1JFR0lPTlMpCisgICAgU2FtcGxp
bmdSZWdpb246OmR1bXAoKTsKKyNlbmRpZgogICAgIGdsb2JhbERhdGEuZHVtcFNhbXBsZURhdGEo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVS
UykKICAgICBBYnN0cmFjdFNhbXBsaW5nQ291bnRlcjo6ZHVtcCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEJGMjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVM
aW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovOyB9OwogCQkwRjE2
RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBC
aXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjI0MkRBNzEzRjNCMUU4MDA3QURENEMgLyogV2Vha1Jl
ZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJFNUJGNzE0NjM1N0Q1MDAzRUIyRUIgLyogU3BlY3RydW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkU1QkY1MTQ2MzU3RDIwMDNFQjJFQiAvKiBT
cGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAx
MzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVn
aXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0QjE0NjBDRDZFMDAx
MzFGOEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODEzLDYgKzgx
NCw3IEBACiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVj
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0
QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyRTVCRjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdp
c3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhG
IC8qIERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZv
cm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg1NSw2ICsxODU3LDcgQEAK
IAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYyRTVCRjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNw
ZWN0cnVtLmggKi8sCiAJCQkJMEZENTJBQUMxNDMwMzU5RDAwMjZEQzlGIC8qIFVuaW9uRmluZC5o
ICovLAogCQkJCTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAq
LywKIAkJCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLywKQEAg
LTI4OTcsNiArMjkwMCw3IEBACiAJCQkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAv
KiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUw
MDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJFNUJGNzE0NjM1
N0Q1MDAzRUIyRUIgLyogU3BlY3RydW0uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAJKHJldmlzaW9uIDk5
MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDkzIEBAIHZvaWQgU2FtcGxpbmdGbGFnczo6c3Rh
cnQoKSB7fQogdm9pZCBTYW1wbGluZ0ZsYWdzOjpzdG9wKCkge30KICNlbmRpZgogCisjaWYgRU5B
QkxFKFNBTVBMSU5HX1JFR0lPTlMpCit2b2xhdGlsZSB1aW50cHRyX3QgU2FtcGxpbmdSZWdpb246
OnNfY3VycmVudE9yUmVzZXJ2ZWQ7CitTcGVjdHJ1bTxjb25zdCBjaGFyKj4qIFNhbXBsaW5nUmVn
aW9uOjpzX3NwZWN0cnVtOwordW5zaWduZWQgbG9uZyBTYW1wbGluZ1JlZ2lvbjo6c19ub25lT2ZU
aGVBYm92ZTsKK3Vuc2lnbmVkIFNhbXBsaW5nUmVnaW9uOjpzX251bWJlck9mU2FtcGxlc1NpbmNl
RHVtcDsKKworU2FtcGxpbmdSZWdpb246OkxvY2tlcjo6TG9ja2VyKCkKK3sKKyAgICB1aW50cHRy
X3QgcHJldmlvdXM7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgcHJldmlvdXMgPSBzX2N1
cnJlbnRPclJlc2VydmVkOworICAgICAgICBpZiAocHJldmlvdXMgJiAxKSB7CisjaWYgT1MoVU5J
WCkKKyAgICAgICAgICAgIHNjaGVkX3lpZWxkKCk7CisjZW5kaWYKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmc19j
dXJyZW50T3JSZXNlcnZlZCwgcHJldmlvdXMsIHByZXZpb3VzIHwgMSkpCisgICAgICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK1NhbXBsaW5nUmVnaW9uOjpMb2NrZXI6On5Mb2NrZXIoKQorewor
ICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIENBUywgYnV0IHdlIGRvIGl0IG91dCBvZiBhbgorICAg
IC8vIGFidW5kYW5jZSBvZiBjYXV0aW9uIChhbmQgYmVjYXVzZSBpdCBnaXZlcyB1cyBhIG1lbW9y
eSBmZW5jZSwgd2hpY2ggaXMKKyAgICAvLyBuZXZlciBiYWQpLgorICAgIHVpbnRwdHJfdCBwcmV2
aW91czsKKyAgICBkbworICAgICAgICBwcmV2aW91cyA9IHNfY3VycmVudE9yUmVzZXJ2ZWQ7Cisg
ICAgd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmc19jdXJyZW50T3JSZXNlcnZlZCwg
cHJldmlvdXMsIHByZXZpb3VzICYgfjEpKTsKK30KKwordm9pZCBTYW1wbGluZ1JlZ2lvbjo6c2Ft
cGxlKCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgd2UgbG9jayBzX2N1cnJlbnQuCisgICAgTG9ja2Vy
IGxvY2tlcjsKKyAgICAKKyAgICAvLyBDcmVhdGUgYSBzcGVjdHJ1bSBpZiB3ZSBkb24ndCBoYXZl
IG9uZSBhbHJlYWR5LgorICAgIGlmICghc19zcGVjdHJ1bSkKKyAgICAgICAgc19zcGVjdHJ1bSA9
IG5ldyBTcGVjdHJ1bTxjb25zdCBjaGFyKj4oKTsKKyAgICAKKyAgICBBU1NFUlQoc19jdXJyZW50
T3JSZXNlcnZlZCAmIDEpOworICAgIAorICAgIC8vIFdhbGsgdGhlIHJlZ2lvbiBzdGFjaywgYW5k
IHJlY29yZCBlYWNoIHJlZ2lvbiB3ZSBzZWUuCisgICAgU2FtcGxpbmdSZWdpb24qIHJlZ2lvbiA9
IGJpdHdpc2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQgJiB+MSk7
CisgICAgaWYgKHJlZ2lvbikgeworICAgICAgICBmb3IgKDsgcmVnaW9uOyByZWdpb24gPSByZWdp
b24tPm1fcHJldmlvdXMpCisgICAgICAgICAgICBzX3NwZWN0cnVtLT5hZGQocmVnaW9uLT5tX25h
bWUpOworICAgIH0gZWxzZQorICAgICAgICBzX25vbmVPZlRoZUFib3ZlKys7CisgICAgCisgICAg
aWYgKHNfbnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1wKysgPT0gU2FtcGxpbmdUaHJlYWQ6OnNfaGVy
dHopIHsKKyAgICAgICAgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1bXAgPSAwOworICAgICAgICBk
dW1wSW50ZXJuYWwoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2FtcGxpbmdSZWdpb246OmR1bXAoKQor
eworICAgIExvY2tlciBsb2NrZXI7CisgICAgCisgICAgZHVtcEludGVybmFsKCk7Cit9CisKK3Zv
aWQgU2FtcGxpbmdSZWdpb246OmR1bXBJbnRlcm5hbCgpCit7CisgICAgaWYgKCFzX3NwZWN0cnVt
KSB7CisgICAgICAgIHByaW50ZigiXG5TYW1wbGluZ1JlZ2lvbjogd2FzIG5ldmVyIHNhbXBsZWQu
XG5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFZlY3RvcjxTcGVjdHJ1
bTxjb25zdCBjaGFyKj46OktleUFuZENvdW50PiBsaXN0ID0gc19zcGVjdHJ1bS0+YnVpbGRMaXN0
KCk7CisgICAgCisgICAgdW5zaWduZWQgbG9uZyB0b3RhbCA9IHNfbm9uZU9mVGhlQWJvdmU7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC5zaXplKCk7IGktLTspCisgICAgICAgIHRvdGFsICs9
IGxpc3RbaV0uY291bnQ7CisgICAgCisgICAgcHJpbnRmKCJcblNhbXBsaW5nUmVnaW9uOiBzYW1w
bGUgY291bnRzIGZvciByZWdpb25zOiAoJWx1IHNhbXBsZXMpXG4iLCB0b3RhbCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBsaXN0LnNpemUoKTsgaS0tOykKKyAgICAgICAgcHJpbnRmKCIgICAg
JTMuMmxmJSUgICVzXG4iLCAoMTAwLjAgKiBsaXN0W2ldLmNvdW50KSAvIHRvdGFsLCBsaXN0W2ld
LmtleSk7Cit9CisjZWxzZSAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKK3ZvaWQgU2FtcGxp
bmdSZWdpb246OmR1bXAoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykK
KwogLyoKICAgU3RhcnQgd2l0aCBmbGFnIDE2IHNldC4KICAgQnkgZG9pbmcgdGhpcyB0aGUgbW9u
aXRvcmluZyBvZiBsb3dlciB2YWx1ZWQgZmxhZ3Mgd2lsbCBiZSBtYXNrZWQgb3V0CkBAIC0xMzEs
NiArMjE4LDkgQEAgdm9pZCogU2FtcGxpbmdUaHJlYWQ6OnRocmVhZFN0YXJ0RnVuYyh2bwogI2lm
IEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICAgICAgU2FtcGxpbmdGbGFnczo6c2FtcGxlKCk7
CiAjZW5kaWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICAgICAgU2FtcGxpbmdS
ZWdpb246OnNhbXBsZSgpOworI2VuZGlmCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAg
ICAgICAgU2FtcGxpbmdUb29sOjpzYW1wbGUoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gOTkyMjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJT
YW1wbGluZ0NvdW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC05Myw2ICs5NSw4OSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH07CiAK
KyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBjbGFzcyBTYW1wbGluZ1JlZ2lvbiB7
CisgICAgcHVibGljOgorICAgICAgICAvLyBDcmVhdGUgYSBzY29wZWQgc2FtcGxpbmcgcmVnaW9u
IHVzaW5nIGEgQyBzdHJpbmcgY29uc3RhbnQgbmFtZSB0aGF0IGRlc2NyaWJlcworICAgICAgICAv
LyB3aGF0IHlvdSBhcmUgZG9pbmcuIFRoaXMgbXVzdCBiZSBhIHN0cmluZyBjb25zdGFudCB0aGF0
IHBlcnNpc3RzIGZvciB0aGUKKyAgICAgICAgLy8gbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MgYW5k
IGlzIGltbXV0YWJsZS4KKyAgICAgICAgU2FtcGxpbmdSZWdpb24oY29uc3QgY2hhciogbmFtZSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICAg
ICAgICAgIG1fbmFtZSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX25hbWUgPSBuYW1lOworICAgICAgICAgICAg
ZXhjaGFuZ2VDdXJyZW50KHRoaXMsICZtX3ByZXZpb3VzKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
bV9wcmV2aW91cyB8fCBtX3ByZXZpb3VzID4gdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIH5TYW1wbGluZ1JlZ2lvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9u
YW1lKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QVNTRVJUKGJpdHdpc2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQg
JiB+MSkgPT0gdGhpcyk7CisgICAgICAgICAgICBleGNoYW5nZUN1cnJlbnQobV9wcmV2aW91cyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHNhbXBsZSgpOworICAg
ICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZHVtcCgpOworICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKiBt
X3ByZXZpb3VzOworCisgICAgICAgIHN0YXRpYyB2b2lkIGV4Y2hhbmdlQ3VycmVudChTYW1wbGlu
Z1JlZ2lvbiogY3VycmVudCwgU2FtcGxpbmdSZWdpb24qKiBwcmV2aW91c1B0ciA9IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBwcmV2aW91czsKKyAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVk
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgcmVzZXJ2ZWQg
KGkuZS4gc2FtcGxpbmcgdGhyZWFkIGlzIHJlYWRpbmcgaXQpLCBsb29wIGFyb3VuZC4KKyAgICAg
ICAgICAgICAgICBpZiAocHJldmlvdXMgJiAxKSB7CisjaWYgT1MoVU5JWCkKKyAgICAgICAgICAg
ICAgICAgICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gSWYgd2UncmUgZ29pbmcgdG8gQ0FTLCB0aGVuIG1ha2Ugc3VyZSBwcmV2aW91cyBpcyBz
ZXQuCisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUHRyKQorICAgICAgICAgICAgICAgICAg
ICAqcHJldmlvdXNQdHIgPSBiaXR3aXNlX2Nhc3Q8U2FtcGxpbmdSZWdpb24qPihwcmV2aW91cyk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVB
bmRTd2FwKCZzX2N1cnJlbnRPclJlc2VydmVkLCBwcmV2aW91cywgYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oY3VycmVudCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZHVtcEludGVybmFs
KCk7CisKKyAgICAgICAgY2xhc3MgTG9ja2VyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgTG9ja2VyKCk7CisgICAgICAgICAgICB+TG9ja2VyKCk7CisgICAgICAgIH07CisKKyAgICAg
ICAgc3RhdGljIHZvbGF0aWxlIHVpbnRwdHJfdCBzX2N1cnJlbnRPclJlc2VydmVkOworICAgICAg
ICAKKyAgICAgICAgLy8gcmVseSBvbiBpZGVudGl0eSBoYXNoaW5nIG9mIHN0cmluZyBjb25zdGFu
dHMKKyAgICAgICAgc3RhdGljIFNwZWN0cnVtPGNvbnN0IGNoYXIqPiogc19zcGVjdHJ1bTsKKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNfbm9uZU9mVGhlQWJvdmU7Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1
bXA7CisgICAgfTsKKyNlbHNlIC8vIEVOQUJMRShTQU1QTElOR19SRUdJT05TKQorICAgIGNsYXNz
IFNhbXBsaW5nUmVnaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKGNv
bnN0IGNoYXIqKSB7IH0KKyAgICAgICAgdm9pZCBkdW1wKCk7CisgICAgfTsKKyNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFz
cyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw4IEBA
IGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ28KIAogSlNPYmplY3QqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkJ5dGVjb2RlIEdlbmVyYXRpb24iKTsKKyAgICAKICAgICBtX2NvZGVCbG9jay0+
c2V0VGhpc1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpOwogCiAgICAgbV9zY29wZU5v
ZGUtPmVtaXRCeXRlY29kZSgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0
aW9uLCBDb21waWxlT3RoZXIgfTsKIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29t
cGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUm
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQog
eworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERy
aXZlcikiKTsKKyAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwogICAgIEdyYXBoIGRmZzsKICAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0
YSwgY29kZUJsb2NrKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NTMsNiArNTUzLDggQEAgdm9pZCBIZWFwOjpnZXRDb25zZXJ2YXRpdmVS
ZWdpc3RlclJvb3RzKAogCiB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKIHsKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBUcmFj
aW5nIik7CisKICAgICBDT05EX0dDUEhBU0UoZnVsbEdDLCBNYXJrRnVsbFJvb3RzLCBNYXJrWW91
bmdSb290cyk7CiAgICAgVU5VU0VEX1BBUkFNKGZ1bGxHQyk7CiAgICAgQVNTRVJUKGlzVmFsaWRU
aHJlYWRTdGF0ZShtX2dsb2JhbERhdGEpKTsKQEAgLTc1OSw2ICs3NjEsOCBAQCB2b2lkIEhlYXA6
OmNvbGxlY3RBbGxHYXJiYWdlKCkKIAogdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3
ZWVwVG9nZ2xlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdl
IENvbGxlY3Rpb24iKTsKKyAgICAKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogICAgIEFTU0VSVChn
bG9iYWxEYXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElk
ZW50aWZpZXJUYWJsZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwpAQCAtNzky
LDYgKzc5Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAg
ICB9CiAKICAgICBpZiAoc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCkgeworICAgICAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBTd2VlcGluZyIpOwog
ICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nKTsKICAgICAgICAgc3dlZXAoKTsKICAgICAgICAgc2hy
aW5rKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3Ry
dW0uY3BwCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZU
YWJsZVNwZWN0cnVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksNyBAQCBWVGFibGVT
cGVjdHJ1bTo6flZUYWJsZVNwZWN0cnVtKCkKIAogdm9pZCBWVGFibGVTcGVjdHJ1bTo6Y291bnRW
UHRyKHZvaWQqIHZUYWJsZVBvaW50ZXIpCiB7Ci0gICAgc3RkOjpwYWlyPEhhc2hNYXA8dm9pZCos
IHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9tYXAuYWRkKHZUYWJs
ZVBvaW50ZXIsIDEpOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkKLSAgICAgICAgcmVzdWx0LmZp
cnN0LT5zZWNvbmQrKzsKKyAgICBhZGQodlRhYmxlUG9pbnRlcik7CiB9CiAKIHZvaWQgVlRhYmxl
U3BlY3RydW06OmNvdW50KEpTQ2VsbCogY2VsbCkKQEAgLTU5LDQ1ICs1NywxNyBAQCB2b2lkIFZU
YWJsZVNwZWN0cnVtOjpjb3VudChKU0NlbGwqIGNlbGwpCiAgICAgY291bnRWUHRyKGNlbGwtPnZw
dHIoKSk7CiB9CiAKLXN0cnVjdCBWVGFibGVBbmRDb3VudCB7Ci0gICAgdm9pZCogdnRhYmxlOwot
ICAgIHVuc2lnbmVkIGxvbmcgY291bnQ7Ci0gICAgCi0gICAgVlRhYmxlQW5kQ291bnQoKSB7IH0K
LSAgICAKLSAgICBWVGFibGVBbmRDb3VudCh2b2lkKiB2dGFibGUsIHVuc2lnbmVkIGxvbmcgY291
bnQpCi0gICAgICAgIDogdnRhYmxlKHZ0YWJsZSkKLSAgICAgICAgLCBjb3VudChjb3VudCkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZUYWJsZUFuZENvdW50
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCAhPSBvdGhlci5jb3VudCkK
LSAgICAgICAgICAgIHJldHVybiBjb3VudCA8IG90aGVyLmNvdW50OwotICAgICAgICByZXR1cm4g
dnRhYmxlID4gb3RoZXIudnRhYmxlOyAvLyB0aGlzIHJlc3VsdHMgaW4gbG93ZXItYWRkcmVzc2Vk
IHZ0YWJsZXMgYmVpbmcgcHJpbnRlZCBmaXJzdAotICAgIH0KLX07Ci0KIHZvaWQgVlRhYmxlU3Bl
Y3RydW06OmR1bXAoRklMRSogb3V0cHV0LCBjb25zdCBjaGFyKiBjb21tZW50KQogewogICAgIGZw
cmludGYob3V0cHV0LCAiJXM6XG4iLCBjb21tZW50KTsKICAgICAKLSAgICBIYXNoTWFwPHZvaWQq
LCB1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwotICAgIEhh
c2hNYXA8dm9pZCosIHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsK
LSAgICAKLSAgICBWZWN0b3I8VlRhYmxlQW5kQ291bnQsIDA+IGxpc3Q7Ci0gICAgCi0gICAgZm9y
IChIYXNoTWFwPHZvaWQqLCB1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBp
dGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBsaXN0LmFwcGVuZChWVGFibGVBbmRDb3VudChp
dGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKSk7Ci0gICAgCi0gICAgc3RkOjpzb3J0KGxpc3QuYmVn
aW4oKSwgbGlzdC5lbmQoKSk7CisgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0ID0gYnVpbGRM
aXN0KCk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSBsaXN0LnNpemUoKTsgaW5kZXgt
LSA+IDA7KSB7Ci0gICAgICAgIFZUYWJsZUFuZENvdW50IGl0ZW0gPSBsaXN0LmF0KGluZGV4KTsK
KyAgICAgICAgS2V5QW5kQ291bnQgaXRlbSA9IGxpc3QuYXQoaW5kZXgpOwogI2lmIFBMQVRGT1JN
KE1BQykKICAgICAgICAgRGxfaW5mbyBpbmZvOwotICAgICAgICBpZiAoZGxhZGRyKGl0ZW0udnRh
YmxlLCAmaW5mbykpIHsKKyAgICAgICAgaWYgKGRsYWRkcihpdGVtLmtleSwgJmluZm8pKSB7CiAg
ICAgICAgICAgICBjaGFyKiBmaW5kUmVzdWx0ID0gc3RycmNocihpbmZvLmRsaV9mbmFtZSwgJy8n
KTsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0cmlwcGVkRmlsZU5hbWU7CiAgICAgICAgICAg
ICAKQEAgLTEwNiwxMSArNzYsMTEgQEAgdm9pZCBWVGFibGVTcGVjdHJ1bTo6ZHVtcChGSUxFKiBv
dXRwdXQsIAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0cmlwcGVkRmlsZU5h
bWUgPSBpbmZvLmRsaV9mbmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZnByaW50Zihv
dXRwdXQsICIgICAgJXM6JXMoJXApOiAlbHVcbiIsIHN0cmlwcGVkRmlsZU5hbWUsIGluZm8uZGxp
X3NuYW1lLCBpdGVtLnZ0YWJsZSwgaXRlbS5jb3VudCk7CisgICAgICAgICAgICBmcHJpbnRmKG91
dHB1dCwgIiAgICAlczolcyglcCk6ICVsdVxuIiwgc3RyaXBwZWRGaWxlTmFtZSwgaW5mby5kbGlf
c25hbWUsIGl0ZW0ua2V5LCBpdGVtLmNvdW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAjZW5kaWYKLSAgICAgICAgZnByaW50ZihvdXRwdXQsICIgICAgJXA6ICVsdVxuIiwg
aXRlbS52dGFibGUsIGl0ZW0uY291bnQpOworICAgICAgICBmcHJpbnRmKG91dHB1dCwgIiAgICAl
cDogJWx1XG4iLCBpdGVtLmtleSwgaXRlbS5jb3VudCk7CiAgICAgfQogICAgIAogICAgIGZmbHVz
aChvdXRwdXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3Ry
dW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVj
dHJ1bS5oCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZU
YWJsZVNwZWN0cnVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxMyBAQAogI2RlZmlu
ZSBWVGFibGVTcGVjdHJ1bV9oCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0cnVtLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBKU0NlbGw7CiAKLWNsYXNzIFZUYWJsZVNwZWN0cnVtIHsKK2NsYXNzIFZUYWJsZVNw
ZWN0cnVtOiBTcGVjdHJ1bTx2b2lkKj4gewogcHVibGljOgogICAgIFZUYWJsZVNwZWN0cnVtKCk7
CiAgICAgflZUYWJsZVNwZWN0cnVtKCk7CkBAIC00Miw5ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNvdW50KEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZHVtcChGSUxFKiBvdXRwdXQsIGNv
bnN0IGNoYXIqIGNvbW1lbnQpOwotICAgIAotcHJpdmF0ZToKLSAgICBIYXNoTWFwPHZvaWQqLCB1
bnNpZ25lZCBsb25nPiBtX21hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjks
NiArMTAyOSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyOjpwYXJzZShKU0cKIHRl
bXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgogUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1l
dGVycywgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZXhlY1N0YXRlLCBKU09iamVjdCoq
IGV4Y2VwdGlvbikKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiUGFyc2lu
ZyIpOwogICAgIFBhcnNlciBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBz
dHJpY3RuZXNzLCBwYXJzZXJNb2RlKTsKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlPFBhcnNlZE5v
ZGU+KGxleGljYWxHbG9iYWxPYmplY3QsIGRlYnVnZ2VyLCBleGVjU3RhdGUsIGV4Y2VwdGlvbik7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw4IEBAIEpTT2JqZWN0KiBF
dmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXoKIAogSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6OkJhc2VsaW5lSklUID8gIkJhc2Vs
aW5lIENvbXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21waWxhdGlvbiAoVE9UQUwpIik7Cisg
ICAgCiAjaWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogI2VuZGlm
CkBAIC0yODAsNiArMjgyLDggQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxl
T3B0aQogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVj
U3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5
cGUgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFM
KSIgOiAiREZHIENvbXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkK
ICAgICBVTlVTRURfUEFSQU0oaml0VHlwZSk7CiAjZW5kaWYKQEAgLTQ1NSw2ICs0NTksOCBAQCBQ
YXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiAKIEpTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkK
IHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6
OkJhc2VsaW5lSklUID8gIkJhc2VsaW5lIENvbXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21w
aWxhdGlvbiAoVE9UQUwpIik7CisgICAgCiAjaWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKQEAgLTUxNSw2ICs1MjEsOCBA
QCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKIEpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5cGUgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFMKSIgOiAi
REZHIENvbXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkKICAgICBV
TlVTRURfUEFSQU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAs
MzggQEAgaW5saW5lIGJvb2wgd2Vha0NvbXBhcmVBbmRTd2FwKHVuc2lnbmVkKgogI2VuZGlmCiB9
CiAKK2lubGluZSBib29sIHdlYWtDb21wYXJlQW5kU3dhcCh2b2lkKnZvbGF0aWxlKiBsb2NhdGlv
biwgdm9pZCogZXhwZWN0ZWQsIHZvaWQqIG5ld1ZhbHVlKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgQ09NUEFSRV9BTkRfU1dBUCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIGFuZCBjb21waWxl
cnMuIEN1cnJlbnRseQorICAgIC8vIGl0IG9ubHkgd29ya3Mgb24gWDg2IG9yIFg4Nl82NCB3aXRo
IGEgR0NDLXN0eWxlIGNvbXBpbGVyLgorI2lmIEVOQUJMRShDT01QQVJFX0FORF9TV0FQKQorICAg
IGJvb2wgcmVzdWx0OworICAgIGFzbSB2b2xhdGlsZSgKKyNpZiBDUFUoWDg2XzY0KQorICAgICAg
ICAibG9jazsgY21weGNoZ3EgJTMsICUyXG5cdCIKKyNlbHNlCisgICAgICAgICJsb2NrOyBjbXB4
Y2hnbCAlMywgJTJcblx0IgorI2VuZGlmCisgICAgICAgICJzZXRlICUxIgorICAgICAgICA6ICIr
YSIoZXhwZWN0ZWQpLCAiPXIiKHJlc3VsdCksICIrbSIoKmxvY2F0aW9uKQorICAgICAgICA6ICJy
IihuZXdWYWx1ZSkKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZSAvLyBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKKyAgICBVTlVTRURfUEFS
QU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShleHBlY3RlZCk7CisgICAgVU5VU0VEX1BB
UkFNKG5ld1ZhbHVlKTsKKyAgICBDUkFTSCgpOworICAgIHJldHVybiAwOworI2VuZGlmIC8vIEVO
QUJMRShDT01QQVJFX0FORF9TV0FQKQorfQorCitpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3
YXAodm9sYXRpbGUgdWludHB0cl90KiBsb2NhdGlvbiwgdWludHB0cl90IGV4cGVjdGVkLCB1aW50
cHRyX3QgbmV3VmFsdWUpCit7CisgICAgcmV0dXJuIHdlYWtDb21wYXJlQW5kU3dhcChyZWludGVy
cHJldF9jYXN0PHZvaWQqdm9sYXRpbGUqPihsb2NhdGlvbiksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGV4cGVjdGVkKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmV3VmFsdWUpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKICNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVJFRkNPVU5U
RUQpCg==
</data>
<flag name="review"
          id="112003"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="112013"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113604</attachid>
            <date>2011-11-03 18:33:53 -0700</date>
            <delta_ts>2011-11-03 18:49:02 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>samplingregion_patch_3.diff</filename>
            <type>text/plain</type>
            <size>30387</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAK
KzIwMTEtMTEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0Mgc2hvdWxkIGJlIGFibGUgdG8gc2FtcGxlIGl0c2VsZiBpbiBhIG1vcmUgZmxleGlibGUgd2F5
IHRoYW4ganVzdCBzYW1wbGluZyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJy
YWNsb3VnaC4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgY29uc3RydWN0IHRoYXQgbG9va3Mg
bGlrZSBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigibmFtZSIpLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6TG9ja2VyKToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcik6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUmVnaW9uOjpzYW1wbGUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1JlZ2lvbjo6ZHVtcCk6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpkdW1wSW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1RocmVhZDo6dGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKiBieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OlNhbXBsaW5n
UmVnaW9uKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246On5TYW1wbGluZ1JlZ2lvbik6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpleGNoYW5nZUN1cnJlbnQpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29s
bGVjdCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHA6CisgICAgICAgIChKU0M6
OlZUYWJsZVNwZWN0cnVtOjpjb3VudFZQdHIpOgorICAgICAgICAoSlNDOjpWVGFibGVTcGVjdHJ1
bTo6ZHVtcCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5oOgorICAgICAgICAqIGpz
Yy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAgICAg
ICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNh
bGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
ckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAo
V1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXApOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAg
ICAgICAqIHd0Zi9TcGVjdHJ1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3BlY3RydW06OlNw
ZWN0cnVtKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmFkZCk6CisgICAgICAgIChXVEY6OlNw
ZWN0cnVtOjpnZXQpOgorICAgICAgICAoV1RGOjpTcGVjdHJ1bTo6YmVnaW4pOgorICAgICAgICAo
V1RGOjpTcGVjdHJ1bTo6ZW5kKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OktleUFuZENvdW50
OjpLZXlBbmRDb3VudCk6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjpLZXlBbmRDb3VudDo6b3Bl
cmF0b3I8KToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmJ1aWxkTGlzdCk6CisgICAgICAgICog
d3RmL3d0Zi5wcmk6CisKIDIwMTEtMTEtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIENoYW5nZSByZW1haW5pbmcgY2FsbGVycyBvZiByZWxlYXNlUmVmIHRvIGNh
bGwgbGVha1JlZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksNyBAQCBfX1pOM0pTQzE0SlNHbG9i
YWxPYmplY3Q2c19pbmZvRQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgogX19aTjNKU0Mx
NE1hY2hpbmVUaHJlYWRzMTZhZGRDdXJyZW50VGhyZWFkRXYKIF9fWk4zSlNDMTRNYXJrU3RhY2tB
cnJheTZleHBhbmRFdgorX19aTjNKU0MxNFNhbXBsaW5nUmVnaW9uNGR1bXBFdgogX19aTjNKU0Mx
NFNhbXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNXN0YXJ0RWoK
IF9fWk4zSlNDMTRTY29wZUNoYWluTm9kZTZzX2luZm9FCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIk1haW5U
aHJlYWQuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAj
aW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQwNCw2ICs0MDUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAjZW5kaWYKIAogICAgIC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0
aW5nIEpTR2xvYmFsRGF0YS4KKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAg
SlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKICAgICAvLyBXZSBjYW4ndCB1c2UgZGVzdHJ1
Y3RvcnMgaW4gdGhlIGZvbGxvd2luZyBjb2RlIGJlY2F1c2UgaXQgdXNlcyBXaW5kb3dzCkBAIC00
NzIsNiArNDc0LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
I2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICBTYW1wbGluZ0ZsYWdzOjpzdG9wKCk7CiAj
ZW5kaWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBTYW1wbGluZ1JlZ2lvbjo6
ZHVtcCgpOworI2VuZGlmCiAgICAgZ2xvYmFsRGF0YS5kdW1wU2FtcGxlRGF0YShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIEFi
c3RyYWN0U2FtcGxpbmdDb3VudGVyOjpkdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsNyBAQAogCQkwQkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODEx
QTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMTZENzI2MTQyQzM5
QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5j
cHAgKi87IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkU1QkY3MTQ2
MzU3RDUwMDNFQjJFQiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyRTVCRjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZB
NDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBW
YWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBE
YXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MTMsNiArODE0LDcgQEAKIAkJ
MEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJF
NUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3RydW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3BlY3RydW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZv
cm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODU1LDYgKzE4NTcsNyBAQAogCQk2NTE2MkVG
MTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkwRjJFNUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3RydW0uaCAq
LywKIAkJCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8sCiAJCQkJ
MEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAogCQkJCTBG
MTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovLApAQCAtMjg5Nyw2ICsy
OTAwLDcgQEAKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxS
ZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8q
IERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkU1QkY3MTQ2MzU3RDUwMDNFQjJF
QiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkocmV2aXNpb24gOTkyMjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsOTMgQEAgdm9pZCBTYW1wbGluZ0ZsYWdzOjpzdGFydCgpIHt9CiB2
b2lkIFNhbXBsaW5nRmxhZ3M6OnN0b3AoKSB7fQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0FNUExJ
TkdfUkVHSU9OUykKK3ZvbGF0aWxlIHVpbnRwdHJfdCBTYW1wbGluZ1JlZ2lvbjo6c19jdXJyZW50
T3JSZXNlcnZlZDsKK1NwZWN0cnVtPGNvbnN0IGNoYXIqPiogU2FtcGxpbmdSZWdpb246OnNfc3Bl
Y3RydW07Cit1bnNpZ25lZCBsb25nIFNhbXBsaW5nUmVnaW9uOjpzX25vbmVPZlRoZUFib3ZlOwor
dW5zaWduZWQgU2FtcGxpbmdSZWdpb246OnNfbnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1wOworCitT
YW1wbGluZ1JlZ2lvbjo6TG9ja2VyOjpMb2NrZXIoKQoreworICAgIHVpbnRwdHJfdCBwcmV2aW91
czsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBwcmV2aW91cyA9IHNfY3VycmVudE9yUmVz
ZXJ2ZWQ7CisgICAgICAgIGlmIChwcmV2aW91cyAmIDEpIHsKKyNpZiBPUyhVTklYKQorICAgICAg
ICAgICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZzX2N1cnJlbnRPclJl
c2VydmVkLCBwcmV2aW91cywgcHJldmlvdXMgfCAxKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworU2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcigpCit7CisgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0aGUgQ0FTLCBidXQgd2UgZG8gaXQgb3V0IG9mIGFuCisgICAgLy8gYWJ1bmRh
bmNlIG9mIGNhdXRpb24gKGFuZCBiZWNhdXNlIGl0IGdpdmVzIHVzIGEgbWVtb3J5IGZlbmNlLCB3
aGljaCBpcworICAgIC8vIG5ldmVyIGJhZCkuCisgICAgdWludHB0cl90IHByZXZpb3VzOworICAg
IGRvIHsKKyAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVkOworICAgIH0gd2hp
bGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmc19jdXJyZW50T3JSZXNlcnZlZCwgcHJldmlv
dXMsIHByZXZpb3VzICYgfjEpKTsKK30KKwordm9pZCBTYW1wbGluZ1JlZ2lvbjo6c2FtcGxlKCkK
K3sKKyAgICAvLyBNYWtlIHN1cmUgd2UgbG9jayBzX2N1cnJlbnQuCisgICAgTG9ja2VyIGxvY2tl
cjsKKyAgICAKKyAgICAvLyBDcmVhdGUgYSBzcGVjdHJ1bSBpZiB3ZSBkb24ndCBoYXZlIG9uZSBh
bHJlYWR5LgorICAgIGlmICghc19zcGVjdHJ1bSkKKyAgICAgICAgc19zcGVjdHJ1bSA9IG5ldyBT
cGVjdHJ1bTxjb25zdCBjaGFyKj4oKTsKKyAgICAKKyAgICBBU1NFUlQoc19jdXJyZW50T3JSZXNl
cnZlZCAmIDEpOworICAgIAorICAgIC8vIFdhbGsgdGhlIHJlZ2lvbiBzdGFjaywgYW5kIHJlY29y
ZCBlYWNoIHJlZ2lvbiB3ZSBzZWUuCisgICAgU2FtcGxpbmdSZWdpb24qIHJlZ2lvbiA9IGJpdHdp
c2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQgJiB+MSk7CisgICAg
aWYgKHJlZ2lvbikgeworICAgICAgICBmb3IgKDsgcmVnaW9uOyByZWdpb24gPSByZWdpb24tPm1f
cHJldmlvdXMpCisgICAgICAgICAgICBzX3NwZWN0cnVtLT5hZGQocmVnaW9uLT5tX25hbWUpOwor
ICAgIH0gZWxzZQorICAgICAgICBzX25vbmVPZlRoZUFib3ZlKys7CisgICAgCisgICAgaWYgKHNf
bnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1wKysgPT0gU2FtcGxpbmdUaHJlYWQ6OnNfaGVydHopIHsK
KyAgICAgICAgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1bXAgPSAwOworICAgICAgICBkdW1wSW50
ZXJuYWwoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2FtcGxpbmdSZWdpb246OmR1bXAoKQoreworICAg
IExvY2tlciBsb2NrZXI7CisgICAgCisgICAgZHVtcEludGVybmFsKCk7Cit9CisKK3ZvaWQgU2Ft
cGxpbmdSZWdpb246OmR1bXBJbnRlcm5hbCgpCit7CisgICAgaWYgKCFzX3NwZWN0cnVtKSB7Cisg
ICAgICAgIHByaW50ZigiXG5TYW1wbGluZ1JlZ2lvbjogd2FzIG5ldmVyIHNhbXBsZWQuXG5cbiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFZlY3RvcjxTcGVjdHJ1bTxjb25z
dCBjaGFyKj46OktleUFuZENvdW50PiBsaXN0ID0gc19zcGVjdHJ1bS0+YnVpbGRMaXN0KCk7Cisg
ICAgCisgICAgdW5zaWduZWQgbG9uZyB0b3RhbCA9IHNfbm9uZU9mVGhlQWJvdmU7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbGlzdC5zaXplKCk7IGktLTspCisgICAgICAgIHRvdGFsICs9IGxpc3Rb
aV0uY291bnQ7CisgICAgCisgICAgcHJpbnRmKCJcblNhbXBsaW5nUmVnaW9uOiBzYW1wbGUgY291
bnRzIGZvciByZWdpb25zOiAoJWx1IHNhbXBsZXMpXG4iLCB0b3RhbCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsaXN0LnNpemUoKTsgaS0tOykKKyAgICAgICAgcHJpbnRmKCIgICAgJTMuMmxm
JSUgICVzXG4iLCAoMTAwLjAgKiBsaXN0W2ldLmNvdW50KSAvIHRvdGFsLCBsaXN0W2ldLmtleSk7
Cit9CisjZWxzZSAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKK3ZvaWQgU2FtcGxpbmdSZWdp
b246OmR1bXAoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKwogLyoK
ICAgU3RhcnQgd2l0aCBmbGFnIDE2IHNldC4KICAgQnkgZG9pbmcgdGhpcyB0aGUgbW9uaXRvcmlu
ZyBvZiBsb3dlciB2YWx1ZWQgZmxhZ3Mgd2lsbCBiZSBtYXNrZWQgb3V0CkBAIC0xMzEsNiArMjE4
LDkgQEAgdm9pZCogU2FtcGxpbmdUaHJlYWQ6OnRocmVhZFN0YXJ0RnVuYyh2bwogI2lmIEVOQUJM
RShTQU1QTElOR19GTEFHUykKICAgICAgICAgU2FtcGxpbmdGbGFnczo6c2FtcGxlKCk7CiAjZW5k
aWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICAgICAgU2FtcGxpbmdSZWdpb246
OnNhbXBsZSgpOworI2VuZGlmCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAg
U2FtcGxpbmdUb29sOjpzYW1wbGUoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJTYW1wbGlu
Z0NvdW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9B
dG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC05Myw2ICs5NSw4OSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH07CiAKKyNpZiBF
TkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBjbGFzcyBTYW1wbGluZ1JlZ2lvbiB7CisgICAg
cHVibGljOgorICAgICAgICAvLyBDcmVhdGUgYSBzY29wZWQgc2FtcGxpbmcgcmVnaW9uIHVzaW5n
IGEgQyBzdHJpbmcgY29uc3RhbnQgbmFtZSB0aGF0IGRlc2NyaWJlcworICAgICAgICAvLyB3aGF0
IHlvdSBhcmUgZG9pbmcuIFRoaXMgbXVzdCBiZSBhIHN0cmluZyBjb25zdGFudCB0aGF0IHBlcnNp
c3RzIGZvciB0aGUKKyAgICAgICAgLy8gbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MgYW5kIGlzIGlt
bXV0YWJsZS4KKyAgICAgICAgU2FtcGxpbmdSZWdpb24oY29uc3QgY2hhciogbmFtZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICAgICAgICAg
IG1fbmFtZSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX25hbWUgPSBuYW1lOworICAgICAgICAgICAgZXhjaGFu
Z2VDdXJyZW50KHRoaXMsICZtX3ByZXZpb3VzKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wcmV2
aW91cyB8fCBtX3ByZXZpb3VzID4gdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IH5TYW1wbGluZ1JlZ2lvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9uYW1lKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJU
KGJpdHdpc2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQgJiB+MSkg
PT0gdGhpcyk7CisgICAgICAgICAgICBleGNoYW5nZUN1cnJlbnQobV9wcmV2aW91cyk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHNhbXBsZSgpOworICAgICAgICAK
KyAgICAgICAgc3RhdGljIHZvaWQgZHVtcCgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKiBtX3ByZXZp
b3VzOworCisgICAgICAgIHN0YXRpYyB2b2lkIGV4Y2hhbmdlQ3VycmVudChTYW1wbGluZ1JlZ2lv
biogY3VycmVudCwgU2FtcGxpbmdSZWdpb24qKiBwcmV2aW91c1B0ciA9IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHVpbnRwdHJfdCBwcmV2aW91czsKKyAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVkOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgcmVzZXJ2ZWQgKGkuZS4g
c2FtcGxpbmcgdGhyZWFkIGlzIHJlYWRpbmcgaXQpLCBsb29wIGFyb3VuZC4KKyAgICAgICAgICAg
ICAgICBpZiAocHJldmlvdXMgJiAxKSB7CisjaWYgT1MoVU5JWCkKKyAgICAgICAgICAgICAgICAg
ICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
SWYgd2UncmUgZ29pbmcgdG8gQ0FTLCB0aGVuIG1ha2Ugc3VyZSBwcmV2aW91cyBpcyBzZXQuCisg
ICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUHRyKQorICAgICAgICAgICAgICAgICAgICAqcHJl
dmlvdXNQdHIgPSBiaXR3aXNlX2Nhc3Q8U2FtcGxpbmdSZWdpb24qPihwcmV2aW91cyk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2Fw
KCZzX2N1cnJlbnRPclJlc2VydmVkLCBwcmV2aW91cywgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
Y3VycmVudCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZHVtcEludGVybmFsKCk7CisK
KyAgICAgICAgY2xhc3MgTG9ja2VyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTG9j
a2VyKCk7CisgICAgICAgICAgICB+TG9ja2VyKCk7CisgICAgICAgIH07CisKKyAgICAgICAgc3Rh
dGljIHZvbGF0aWxlIHVpbnRwdHJfdCBzX2N1cnJlbnRPclJlc2VydmVkOworICAgICAgICAKKyAg
ICAgICAgLy8gcmVseSBvbiBpZGVudGl0eSBoYXNoaW5nIG9mIHN0cmluZyBjb25zdGFudHMKKyAg
ICAgICAgc3RhdGljIFNwZWN0cnVtPGNvbnN0IGNoYXIqPiogc19zcGVjdHJ1bTsKKyAgICAgICAg
CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNfbm9uZU9mVGhlQWJvdmU7CisgICAgICAg
IAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1bXA7Cisg
ICAgfTsKKyNlbHNlIC8vIEVOQUJMRShTQU1QTElOR19SRUdJT05TKQorICAgIGNsYXNzIFNhbXBs
aW5nUmVnaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKGNvbnN0IGNo
YXIqKSB7IH0KKyAgICAgICAgdm9pZCBkdW1wKCk7CisgICAgfTsKKyNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUkVHSU9OUykKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBFeGVj
U3RhdGU7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw4IEBAIGJvb2wg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ28KIAogSlNPYmplY3QqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdp
b24oIkJ5dGVjb2RlIEdlbmVyYXRpb24iKTsKKyAgICAKICAgICBtX2NvZGVCbG9jay0+c2V0VGhp
c1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpOwogCiAgICAgbV9zY29wZU5vZGUtPmVt
aXRCeXRlY29kZSgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiBlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBD
b21waWxlT3RoZXIgfTsKIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1v
ZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENv
ZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQogeworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlciki
KTsKKyAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwogICAgIEdyYXBoIGRmZzsKICAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiA5
OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NTMsNiArNTUzLDggQEAgdm9pZCBIZWFwOjpnZXRDb25zZXJ2YXRpdmVSZWdpc3Rl
clJvb3RzKAogCiB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKIHsKKyAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBUcmFjaW5nIik7
CisKICAgICBDT05EX0dDUEhBU0UoZnVsbEdDLCBNYXJrRnVsbFJvb3RzLCBNYXJrWW91bmdSb290
cyk7CiAgICAgVU5VU0VEX1BBUkFNKGZ1bGxHQyk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaHJlYWRT
dGF0ZShtX2dsb2JhbERhdGEpKTsKQEAgLTc1OSw2ICs3NjEsOCBAQCB2b2lkIEhlYXA6OmNvbGxl
Y3RBbGxHYXJiYWdlKCkKIAogdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9n
Z2xlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdlIENvbGxl
Y3Rpb24iKTsKKyAgICAKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogICAgIEFTU0VSVChnbG9iYWxE
YXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZp
ZXJUYWJsZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwpAQCAtNzkyLDYgKzc5
Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICB9CiAK
ICAgICBpZiAoc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCkgeworICAgICAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBTd2VlcGluZyIpOwogICAgICAg
ICBHQ1BIQVNFKFN3ZWVwaW5nKTsKICAgICAgICAgc3dlZXAoKTsKICAgICAgICAgc2hyaW5rKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3Bw
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZUYWJsZVNw
ZWN0cnVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksNyBAQCBWVGFibGVTcGVjdHJ1
bTo6flZUYWJsZVNwZWN0cnVtKCkKIAogdm9pZCBWVGFibGVTcGVjdHJ1bTo6Y291bnRWUHRyKHZv
aWQqIHZUYWJsZVBvaW50ZXIpCiB7Ci0gICAgc3RkOjpwYWlyPEhhc2hNYXA8dm9pZCosIHVuc2ln
bmVkIGxvbmc+OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9tYXAuYWRkKHZUYWJsZVBvaW50
ZXIsIDEpOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkKLSAgICAgICAgcmVzdWx0LmZpcnN0LT5z
ZWNvbmQrKzsKKyAgICBhZGQodlRhYmxlUG9pbnRlcik7CiB9CiAKIHZvaWQgVlRhYmxlU3BlY3Ry
dW06OmNvdW50KEpTQ2VsbCogY2VsbCkKQEAgLTU5LDQ1ICs1NywxNyBAQCB2b2lkIFZUYWJsZVNw
ZWN0cnVtOjpjb3VudChKU0NlbGwqIGNlbGwpCiAgICAgY291bnRWUHRyKGNlbGwtPnZwdHIoKSk7
CiB9CiAKLXN0cnVjdCBWVGFibGVBbmRDb3VudCB7Ci0gICAgdm9pZCogdnRhYmxlOwotICAgIHVu
c2lnbmVkIGxvbmcgY291bnQ7Ci0gICAgCi0gICAgVlRhYmxlQW5kQ291bnQoKSB7IH0KLSAgICAK
LSAgICBWVGFibGVBbmRDb3VudCh2b2lkKiB2dGFibGUsIHVuc2lnbmVkIGxvbmcgY291bnQpCi0g
ICAgICAgIDogdnRhYmxlKHZ0YWJsZSkKLSAgICAgICAgLCBjb3VudChjb3VudCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZUYWJsZUFuZENvdW50JiBvdGhl
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCAhPSBvdGhlci5jb3VudCkKLSAgICAg
ICAgICAgIHJldHVybiBjb3VudCA8IG90aGVyLmNvdW50OwotICAgICAgICByZXR1cm4gdnRhYmxl
ID4gb3RoZXIudnRhYmxlOyAvLyB0aGlzIHJlc3VsdHMgaW4gbG93ZXItYWRkcmVzc2VkIHZ0YWJs
ZXMgYmVpbmcgcHJpbnRlZCBmaXJzdAotICAgIH0KLX07Ci0KIHZvaWQgVlRhYmxlU3BlY3RydW06
OmR1bXAoRklMRSogb3V0cHV0LCBjb25zdCBjaGFyKiBjb21tZW50KQogewogICAgIGZwcmludGYo
b3V0cHV0LCAiJXM6XG4iLCBjb21tZW50KTsKICAgICAKLSAgICBIYXNoTWFwPHZvaWQqLCB1bnNp
Z25lZCBsb25nPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwotICAgIEhhc2hNYXA8
dm9pZCosIHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKLSAgICAK
LSAgICBWZWN0b3I8VlRhYmxlQW5kQ291bnQsIDA+IGxpc3Q7Ci0gICAgCi0gICAgZm9yIChIYXNo
TWFwPHZvaWQqLCB1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9
IGVuZDsgKytpdGVyKQotICAgICAgICBsaXN0LmFwcGVuZChWVGFibGVBbmRDb3VudChpdGVyLT5m
aXJzdCwgaXRlci0+c2Vjb25kKSk7Ci0gICAgCi0gICAgc3RkOjpzb3J0KGxpc3QuYmVnaW4oKSwg
bGlzdC5lbmQoKSk7CisgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0ID0gYnVpbGRMaXN0KCk7
CiAgICAgCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSBsaXN0LnNpemUoKTsgaW5kZXgtLSA+IDA7
KSB7Ci0gICAgICAgIFZUYWJsZUFuZENvdW50IGl0ZW0gPSBsaXN0LmF0KGluZGV4KTsKKyAgICAg
ICAgS2V5QW5kQ291bnQgaXRlbSA9IGxpc3QuYXQoaW5kZXgpOwogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICAgICAgRGxfaW5mbyBpbmZvOwotICAgICAgICBpZiAoZGxhZGRyKGl0ZW0udnRhYmxlLCAm
aW5mbykpIHsKKyAgICAgICAgaWYgKGRsYWRkcihpdGVtLmtleSwgJmluZm8pKSB7CiAgICAgICAg
ICAgICBjaGFyKiBmaW5kUmVzdWx0ID0gc3RycmNocihpbmZvLmRsaV9mbmFtZSwgJy8nKTsKICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHN0cmlwcGVkRmlsZU5hbWU7CiAgICAgICAgICAgICAKQEAg
LTEwNiwxMSArNzYsMTEgQEAgdm9pZCBWVGFibGVTcGVjdHJ1bTo6ZHVtcChGSUxFKiBvdXRwdXQs
IAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0cmlwcGVkRmlsZU5hbWUgPSBp
bmZvLmRsaV9mbmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZnByaW50ZihvdXRwdXQs
ICIgICAgJXM6JXMoJXApOiAlbHVcbiIsIHN0cmlwcGVkRmlsZU5hbWUsIGluZm8uZGxpX3NuYW1l
LCBpdGVtLnZ0YWJsZSwgaXRlbS5jb3VudCk7CisgICAgICAgICAgICBmcHJpbnRmKG91dHB1dCwg
IiAgICAlczolcyglcCk6ICVsdVxuIiwgc3RyaXBwZWRGaWxlTmFtZSwgaW5mby5kbGlfc25hbWUs
IGl0ZW0ua2V5LCBpdGVtLmNvdW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAjZW5kaWYKLSAgICAgICAgZnByaW50ZihvdXRwdXQsICIgICAgJXA6ICVsdVxuIiwgaXRlbS52
dGFibGUsIGl0ZW0uY291bnQpOworICAgICAgICBmcHJpbnRmKG91dHB1dCwgIiAgICAlcDogJWx1
XG4iLCBpdGVtLmtleSwgaXRlbS5jb3VudCk7CiAgICAgfQogICAgIAogICAgIGZmbHVzaChvdXRw
dXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5o
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZUYWJsZVNw
ZWN0cnVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxMyBAQAogI2RlZmluZSBWVGFi
bGVTcGVjdHJ1bV9oCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0cnVtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBKU0NlbGw7CiAKLWNsYXNzIFZUYWJsZVNwZWN0cnVtIHsKK2NsYXNzIFZUYWJsZVNwZWN0cnVt
OiBTcGVjdHJ1bTx2b2lkKj4gewogcHVibGljOgogICAgIFZUYWJsZVNwZWN0cnVtKCk7CiAgICAg
flZUYWJsZVNwZWN0cnVtKCk7CkBAIC00Miw5ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
dW50KEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZHVtcChGSUxFKiBvdXRwdXQsIGNvbnN0IGNo
YXIqIGNvbW1lbnQpOwotICAgIAotcHJpdmF0ZToKLSAgICBIYXNoTWFwPHZvaWQqLCB1bnNpZ25l
ZCBsb25nPiBtX21hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjksNiArMTAy
OSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyOjpwYXJzZShKU0cKIHRlbXBsYXRl
IDxjbGFzcyBQYXJzZWROb2RlPgogUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywg
SlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBE
ZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZXhlY1N0YXRlLCBKU09iamVjdCoqIGV4Y2Vw
dGlvbikKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiUGFyc2luZyIpOwog
ICAgIFBhcnNlciBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBzdHJpY3Ru
ZXNzLCBwYXJzZXJNb2RlKTsKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGxl
eGljYWxHbG9iYWxPYmplY3QsIGRlYnVnZ2VyLCBleGVjU3RhdGUsIGV4Y2VwdGlvbik7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw4IEBAIEpTT2JqZWN0KiBFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXoKIAogSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21w
aWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5v
ZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6OkJhc2VsaW5lSklUID8gIkJhc2VsaW5lIENv
bXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21waWxhdGlvbiAoVE9UQUwpIik7CisgICAgCiAj
aWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogI2VuZGlmCkBAIC0y
ODAsNiArMjgyLDggQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aQog
CiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5cGUgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFMKSIgOiAi
REZHIENvbXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkKICAgICBV
TlVTRURfUEFSQU0oaml0VHlwZSk7CiAjZW5kaWYKQEAgLTQ1NSw2ICs0NTksOCBAQCBQYXNzT3du
UHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiAKIEpTT2JqZWN0KiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUID8gIkJhc2VsaW5lIENvbXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21waWxhdGlv
biAoVE9UQUwpIik7CisgICAgCiAjaWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOwogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKQEAgLTUxNSw2ICs1MjEsOCBAQCBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKIEpTT2JqZWN0KiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBl
KQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5cGUgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFMKSIgOiAiREZHIENv
bXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkKICAgICBVTlVTRURf
UEFSQU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsMzggQEAg
aW5saW5lIGJvb2wgd2Vha0NvbXBhcmVBbmRTd2FwKHVuc2lnbmVkKgogI2VuZGlmCiB9CiAKK2lu
bGluZSBib29sIHdlYWtDb21wYXJlQW5kU3dhcCh2b2lkKnZvbGF0aWxlKiBsb2NhdGlvbiwgdm9p
ZCogZXhwZWN0ZWQsIHZvaWQqIG5ld1ZhbHVlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
Q09NUEFSRV9BTkRfU1dBUCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIGFuZCBjb21waWxlcnMuIEN1
cnJlbnRseQorICAgIC8vIGl0IG9ubHkgd29ya3Mgb24gWDg2IG9yIFg4Nl82NCB3aXRoIGEgR0ND
LXN0eWxlIGNvbXBpbGVyLgorI2lmIEVOQUJMRShDT01QQVJFX0FORF9TV0FQKQorICAgIGJvb2wg
cmVzdWx0OworICAgIGFzbSB2b2xhdGlsZSgKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICAibG9j
azsgY21weGNoZ3EgJTMsICUyXG5cdCIKKyNlbHNlCisgICAgICAgICJsb2NrOyBjbXB4Y2hnbCAl
MywgJTJcblx0IgorI2VuZGlmCisgICAgICAgICJzZXRlICUxIgorICAgICAgICA6ICIrYSIoZXhw
ZWN0ZWQpLCAiPXIiKHJlc3VsdCksICIrbSIoKmxvY2F0aW9uKQorICAgICAgICA6ICJyIihuZXdW
YWx1ZSkKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZSAvLyBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKKyAgICBVTlVTRURfUEFSQU0obG9j
YXRpb24pOworICAgIFVOVVNFRF9QQVJBTShleHBlY3RlZCk7CisgICAgVU5VU0VEX1BBUkFNKG5l
d1ZhbHVlKTsKKyAgICBDUkFTSCgpOworICAgIHJldHVybiAwOworI2VuZGlmIC8vIEVOQUJMRShD
T01QQVJFX0FORF9TV0FQKQorfQorCitpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3YXAodm9s
YXRpbGUgdWludHB0cl90KiBsb2NhdGlvbiwgdWludHB0cl90IGV4cGVjdGVkLCB1aW50cHRyX3Qg
bmV3VmFsdWUpCit7CisgICAgcmV0dXJuIHdlYWtDb21wYXJlQW5kU3dhcChyZWludGVycHJldF9j
YXN0PHZvaWQqdm9sYXRpbGUqPihsb2NhdGlvbiksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGV4
cGVjdGVkKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmV3VmFsdWUpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKICNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVJFRkNPVU5URUQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5OTIyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAt
ODA4LDEyICs4MDgsMTMgQEAKICNkZWZpbmUgRU5BQkxFX0RFQlVHX1dJVEhfQlJFQUtQT0lOVCAw
CiAjZGVmaW5lIEVOQUJMRV9TQU1QTElOR19DT1VOVEVSUyAwCiAjZGVmaW5lIEVOQUJMRV9TQU1Q
TElOR19GTEFHUyAwCisjZGVmaW5lIEVOQUJMRV9TQU1QTElOR19SRUdJT05TIDAKICNkZWZpbmUg
RU5BQkxFX09QQ09ERV9TQU1QTElORyAwCiAjZGVmaW5lIEVOQUJMRV9DT0RFQkxPQ0tfU0FNUExJ
TkcgMAogI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpICYmICFFTkFCTEUoT1BDT0RFX1NB
TVBMSU5HKQogI2Vycm9yICJDT0RFQkxPQ0tfU0FNUExJTkcgcmVxdWlyZXMgT1BDT0RFX1NBTVBM
SU5HIgogI2VuZGlmCi0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykgfHwgRU5BQkxFKFNBTVBM
SU5HX0ZMQUdTKQorI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpIHx8IEVOQUJMRShTQU1QTElO
R19GTEFHUykgfHwgRU5BQkxFKFNBTVBMSU5HX1JFR0lPTlMpCiAjZGVmaW5lIEVOQUJMRV9TQU1Q
TElOR19USFJFQUQgMQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
U3BlY3RydW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NwZWN0
cnVtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NwZWN0cnVt
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BlY3RydW1faAorI2RlZmluZSBTcGVj
dHJ1bV9oCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSAiSGFzaE1hcC5oIgorI2lu
Y2x1ZGUgIlZlY3Rvci5oIgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIFNwZWN0cnVtIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hN
YXA8VCwgdW5zaWduZWQgbG9uZz46Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgSGFzaE1hcDxULCB1bnNpZ25lZCBsb25nPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRl
cmF0b3I7CisgICAgCisgICAgU3BlY3RydW0oKSB7IH0KKyAgICAKKyAgICB2b2lkIGFkZChjb25z
dCBUJiBrZXksIHVuc2lnbmVkIGxvbmcgY291bnQgPSAxKQorICAgIHsKKyAgICAgICAgc3RkOjpw
YWlyPGl0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBjb3VudCk7CisgICAg
ICAgIGlmICghcmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25k
ICs9IGNvdW50OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsb25nIGdldChjb25zdCBUJiBr
ZXkpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRvciBpdGVyID0gbV9tYXAuZmlu
ZChrZXkpOworICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgIH0KKyAgICAKKyAgICBp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBpdGVyYXRvciBl
bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgCisgICAgc3RydWN0IEtleUFuZENv
dW50IHsKKyAgICAgICAgS2V5QW5kQ291bnQoKSB7IH0KKyAgICAgICAgCisgICAgICAgIEtleUFu
ZENvdW50KGNvbnN0IFQmIGtleSwgdW5zaWduZWQgbG9uZyBjb3VudCkKKyAgICAgICAgICAgIDog
a2V5KGtleSkKKyAgICAgICAgICAgICwgY291bnQoY291bnQpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgS2V5QW5kQ291bnQmIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY291bnQgIT0gb3RoZXIuY291
bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50IDwgb3RoZXIuY291bnQ7CisgICAgICAg
ICAgICAvLyBUaGlzIGNhdXNlcyBsb3dlci1vcmRlcmVkIGtleXMgYmVpbmcgcmV0dXJuZWQgZmly
c3Q7IHRoaXMgaXMgcmVhbGx5IGp1c3QKKyAgICAgICAgICAgIC8vIGhlcmUgdG8gbWFrZSBzdXJl
IHRoYXQgdGhlIG9yZGVyIGlzIHNvbWV3aGF0IGRldGVybWluaXN0aWMgcmF0aGVyIHRoYW4gYmVp
bmcKKyAgICAgICAgICAgIC8vIGRldGVybWluZWQgYnkgaGFzaGluZy4KKyAgICAgICAgICAgIHJl
dHVybiBrZXkgPiBvdGhlci5rZXk7CisgICAgICAgIH0KKworICAgICAgICBUIGtleTsKKyAgICAg
ICAgdW5zaWduZWQgbG9uZyBjb3VudDsKKyAgICB9OworICAgIAorICAgIC8vIFJldHVybnMgYSBs
aXN0IG9yZGVyZWQgZnJvbSBsb3dlc3QtY291bnQgdG8gaGlnaGVzdC1jb3VudC4KKyAgICBWZWN0
b3I8S2V5QW5kQ291bnQ+IGJ1aWxkTGlzdCgpIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8
S2V5QW5kQ291bnQ+IGxpc3Q7CisgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IGJl
Z2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKEtl
eUFuZENvdW50KGl0ZXItPmZpcnN0LCBpdGVyLT5zZWNvbmQpKTsKKyAgICAgICAgCisgICAgICAg
IHN0ZDo6c29ydChsaXN0LmJlZ2luKCksIGxpc3QuZW5kKCkpOworICAgICAgICByZXR1cm4gbGlz
dDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9uZz4g
bV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTcGVjdHJ1bTsK
KworI2VuZGlmIC8vIFNwZWN0cnVtX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
d3RmLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkJ
KHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIHd0Zi9SZWZQ
dHJIYXNoTWFwLmggXAogICAgIHd0Zi9SZXRhaW5QdHIuaCBcCiAgICAgd3RmL1NIQTEuaCBcCisg
ICAgd3RmL1NwZWN0cnVtLmgKICAgICB3dGYvU3RhY2tCb3VuZHMuaCBcCiAgICAgd3RmL1N0YXRp
Y0NvbnN0cnVjdG9ycy5oIFwKICAgICB3dGYvU3RkTGliRXh0cmFzLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5OTI1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0xMS0wMyAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpTQyBzaG91bGQgYmUg
YWJsZSB0byBzYW1wbGUgaXRzZWxmIGluIGEgbW9yZSBmbGV4aWJsZSB3YXkgdGhhbiBqdXN0IHNh
bXBsaW5nIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MTUyMgorCisgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoLgorICAg
ICAgICAKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvU3BlY3RydW0uaDogQWRkZWQu
CisKIDIwMTEtMTEtMDMgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4K
IAogICAgICAgICBEZS12aXJ0dWFsaXplIEpTT2JqZWN0OjpjbGFzc05hbWUKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3BlY3RydW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0
cnVtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hl
YWRlcnMvd3RmL1NwZWN0cnVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TcGVjdHJ1bS5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTky
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNCBAQAorMjAxMS0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIEpTQyBzaG91bGQgYmUgYWJsZSB0byBzYW1wbGUgaXRzZWxmIGluIGEgbW9yZSBmbGV4
aWJsZSB3YXkgdGhhbiBqdXN0IHNhbXBsaW5nIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUyMgorCisgICAgICAgIFJldmlld2VkIGJ5IEdh
dmluIEJhcnJhY2xvdWdoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgc2luY2Ugbm8gZnVuY3Rp
b25hbGl0eSBjaGFuZ2VkLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0
cnVtLmg6IEFkZGVkLgorCiAyMDExLTExLTAyICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBFbmFibGUgY3RybC1hcnJvdyBtb3ZlIGN1cnNvciBieSB3b3JkIGluIHZp
c3VhbCBvcmRlciBpbiBjci13aW4gYnkgY29tbWFuZCBsaW5lIGZsYWcuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3BlY3RydW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3BlY3RydW0uaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TcGVjdHJ1bS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3BlY3Ry
dW0uaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113606</attachid>
            <date>2011-11-03 18:49:02 -0700</date>
            <delta_ts>2011-11-03 21:39:58 -0700</delta_ts>
            <desc>attempting to make stylebot happy</desc>
            <filename>samplingregion_patch_4.diff</filename>
            <type>text/plain</type>
            <size>30387</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAK
KzIwMTEtMTEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0Mgc2hvdWxkIGJlIGFibGUgdG8gc2FtcGxlIGl0c2VsZiBpbiBhIG1vcmUgZmxleGlibGUgd2F5
IHRoYW4ganVzdCBzYW1wbGluZyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJy
YWNsb3VnaC4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgY29uc3RydWN0IHRoYXQgbG9va3Mg
bGlrZSBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigibmFtZSIpLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6TG9ja2VyKToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcik6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUmVnaW9uOjpzYW1wbGUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1JlZ2lvbjo6ZHVtcCk6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpkdW1wSW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1RocmVhZDo6dGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKiBieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OlNhbXBsaW5n
UmVnaW9uKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246On5TYW1wbGluZ1JlZ2lvbik6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpleGNoYW5nZUN1cnJlbnQpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29s
bGVjdCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHA6CisgICAgICAgIChKU0M6
OlZUYWJsZVNwZWN0cnVtOjpjb3VudFZQdHIpOgorICAgICAgICAoSlNDOjpWVGFibGVTcGVjdHJ1
bTo6ZHVtcCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5oOgorICAgICAgICAqIGpz
Yy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAgICAg
ICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNh
bGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
ckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAo
V1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXApOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAg
ICAgICAqIHd0Zi9TcGVjdHJ1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3BlY3RydW06OlNw
ZWN0cnVtKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmFkZCk6CisgICAgICAgIChXVEY6OlNw
ZWN0cnVtOjpnZXQpOgorICAgICAgICAoV1RGOjpTcGVjdHJ1bTo6YmVnaW4pOgorICAgICAgICAo
V1RGOjpTcGVjdHJ1bTo6ZW5kKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OktleUFuZENvdW50
OjpLZXlBbmRDb3VudCk6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjpLZXlBbmRDb3VudDo6b3Bl
cmF0b3I8KToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmJ1aWxkTGlzdCk6CisgICAgICAgICog
d3RmL3d0Zi5wcmk6CisKIDIwMTEtMTEtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIENoYW5nZSByZW1haW5pbmcgY2FsbGVycyBvZiByZWxlYXNlUmVmIHRvIGNh
bGwgbGVha1JlZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksNyBAQCBfX1pOM0pTQzE0SlNHbG9i
YWxPYmplY3Q2c19pbmZvRQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgogX19aTjNKU0Mx
NE1hY2hpbmVUaHJlYWRzMTZhZGRDdXJyZW50VGhyZWFkRXYKIF9fWk4zSlNDMTRNYXJrU3RhY2tB
cnJheTZleHBhbmRFdgorX19aTjNKU0MxNFNhbXBsaW5nUmVnaW9uNGR1bXBFdgogX19aTjNKU0Mx
NFNhbXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNXN0YXJ0RWoK
IF9fWk4zSlNDMTRTY29wZUNoYWluTm9kZTZzX2luZm9FCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIk1haW5U
aHJlYWQuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAj
aW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQwNCw2ICs0MDUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAjZW5kaWYKIAogICAgIC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0
aW5nIEpTR2xvYmFsRGF0YS4KKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAg
SlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKICAgICAvLyBXZSBjYW4ndCB1c2UgZGVzdHJ1
Y3RvcnMgaW4gdGhlIGZvbGxvd2luZyBjb2RlIGJlY2F1c2UgaXQgdXNlcyBXaW5kb3dzCkBAIC00
NzIsNiArNDc0LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
I2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICBTYW1wbGluZ0ZsYWdzOjpzdG9wKCk7CiAj
ZW5kaWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBTYW1wbGluZ1JlZ2lvbjo6
ZHVtcCgpOworI2VuZGlmCiAgICAgZ2xvYmFsRGF0YS5kdW1wU2FtcGxlRGF0YShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIEFi
c3RyYWN0U2FtcGxpbmdDb3VudGVyOjpkdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsNyBAQAogCQkwQkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODEx
QTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMTZENzI2MTQyQzM5
QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5j
cHAgKi87IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkU1QkY3MTQ2
MzU3RDUwMDNFQjJFQiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyRTVCRjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZB
NDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBW
YWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBE
YXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MTMsNiArODE0LDcgQEAKIAkJ
MEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJF
NUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3RydW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3BlY3RydW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZv
cm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODU1LDYgKzE4NTcsNyBAQAogCQk2NTE2MkVG
MTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkwRjJFNUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3RydW0uaCAq
LywKIAkJCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8sCiAJCQkJ
MEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAogCQkJCTBG
MTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovLApAQCAtMjg5Nyw2ICsy
OTAwLDcgQEAKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxS
ZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8q
IERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkU1QkY3MTQ2MzU3RDUwMDNFQjJF
QiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkocmV2aXNpb24gOTkyMjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsOTMgQEAgdm9pZCBTYW1wbGluZ0ZsYWdzOjpzdGFydCgpIHt9CiB2
b2lkIFNhbXBsaW5nRmxhZ3M6OnN0b3AoKSB7fQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0FNUExJ
TkdfUkVHSU9OUykKK3ZvbGF0aWxlIHVpbnRwdHJfdCBTYW1wbGluZ1JlZ2lvbjo6c19jdXJyZW50
T3JSZXNlcnZlZDsKK1NwZWN0cnVtPGNvbnN0IGNoYXIqPiogU2FtcGxpbmdSZWdpb246OnNfc3Bl
Y3RydW07Cit1bnNpZ25lZCBsb25nIFNhbXBsaW5nUmVnaW9uOjpzX25vbmVPZlRoZUFib3ZlOwor
dW5zaWduZWQgU2FtcGxpbmdSZWdpb246OnNfbnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1wOworCitT
YW1wbGluZ1JlZ2lvbjo6TG9ja2VyOjpMb2NrZXIoKQoreworICAgIHVpbnRwdHJfdCBwcmV2aW91
czsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBwcmV2aW91cyA9IHNfY3VycmVudE9yUmVz
ZXJ2ZWQ7CisgICAgICAgIGlmIChwcmV2aW91cyAmIDEpIHsKKyNpZiBPUyhVTklYKQorICAgICAg
ICAgICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZzX2N1cnJlbnRPclJl
c2VydmVkLCBwcmV2aW91cywgcHJldmlvdXMgfCAxKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworU2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcigpCit7CisgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0aGUgQ0FTLCBidXQgd2UgZG8gaXQgb3V0IG9mIGFuCisgICAgLy8gYWJ1bmRh
bmNlIG9mIGNhdXRpb24gKGFuZCBiZWNhdXNlIGl0IGdpdmVzIHVzIGEgbWVtb3J5IGZlbmNlLCB3
aGljaCBpcworICAgIC8vIG5ldmVyIGJhZCkuCisgICAgdWludHB0cl90IHByZXZpb3VzOworICAg
IGRvIHsKKyAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVkOworICAgIH0gd2hp
bGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmc19jdXJyZW50T3JSZXNlcnZlZCwgcHJldmlv
dXMsIHByZXZpb3VzICYgfjEpKTsKK30KKwordm9pZCBTYW1wbGluZ1JlZ2lvbjo6c2FtcGxlKCkK
K3sKKyAgICAvLyBNYWtlIHN1cmUgd2UgbG9jayBzX2N1cnJlbnQuCisgICAgTG9ja2VyIGxvY2tl
cjsKKyAgICAKKyAgICAvLyBDcmVhdGUgYSBzcGVjdHJ1bSBpZiB3ZSBkb24ndCBoYXZlIG9uZSBh
bHJlYWR5LgorICAgIGlmICghc19zcGVjdHJ1bSkKKyAgICAgICAgc19zcGVjdHJ1bSA9IG5ldyBT
cGVjdHJ1bTxjb25zdCBjaGFyKj4oKTsKKyAgICAKKyAgICBBU1NFUlQoc19jdXJyZW50T3JSZXNl
cnZlZCAmIDEpOworICAgIAorICAgIC8vIFdhbGsgdGhlIHJlZ2lvbiBzdGFjaywgYW5kIHJlY29y
ZCBlYWNoIHJlZ2lvbiB3ZSBzZWUuCisgICAgU2FtcGxpbmdSZWdpb24qIHJlZ2lvbiA9IGJpdHdp
c2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQgJiB+MSk7CisgICAg
aWYgKHJlZ2lvbikgeworICAgICAgICBmb3IgKDsgcmVnaW9uOyByZWdpb24gPSByZWdpb24tPm1f
cHJldmlvdXMpCisgICAgICAgICAgICBzX3NwZWN0cnVtLT5hZGQocmVnaW9uLT5tX25hbWUpOwor
ICAgIH0gZWxzZQorICAgICAgICBzX25vbmVPZlRoZUFib3ZlKys7CisgICAgCisgICAgaWYgKHNf
bnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1wKysgPT0gU2FtcGxpbmdUaHJlYWQ6OnNfaGVydHopIHsK
KyAgICAgICAgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1bXAgPSAwOworICAgICAgICBkdW1wSW50
ZXJuYWwoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2FtcGxpbmdSZWdpb246OmR1bXAoKQoreworICAg
IExvY2tlciBsb2NrZXI7CisgICAgCisgICAgZHVtcEludGVybmFsKCk7Cit9CisKK3ZvaWQgU2Ft
cGxpbmdSZWdpb246OmR1bXBJbnRlcm5hbCgpCit7CisgICAgaWYgKCFzX3NwZWN0cnVtKSB7Cisg
ICAgICAgIHByaW50ZigiXG5TYW1wbGluZ1JlZ2lvbjogd2FzIG5ldmVyIHNhbXBsZWQuXG5cbiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFZlY3RvcjxTcGVjdHJ1bTxjb25z
dCBjaGFyKj46OktleUFuZENvdW50PiBsaXN0ID0gc19zcGVjdHJ1bS0+YnVpbGRMaXN0KCk7Cisg
ICAgCisgICAgdW5zaWduZWQgbG9uZyB0b3RhbCA9IHNfbm9uZU9mVGhlQWJvdmU7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbGlzdC5zaXplKCk7IGktLTspCisgICAgICAgIHRvdGFsICs9IGxpc3Rb
aV0uY291bnQ7CisgICAgCisgICAgcHJpbnRmKCJcblNhbXBsaW5nUmVnaW9uOiBzYW1wbGUgY291
bnRzIGZvciByZWdpb25zOiAoJWx1IHNhbXBsZXMpXG4iLCB0b3RhbCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsaXN0LnNpemUoKTsgaS0tOykKKyAgICAgICAgcHJpbnRmKCIgICAgJTMuMmxm
JSUgICVzXG4iLCAoMTAwLjAgKiBsaXN0W2ldLmNvdW50KSAvIHRvdGFsLCBsaXN0W2ldLmtleSk7
Cit9CisjZWxzZSAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKK3ZvaWQgU2FtcGxpbmdSZWdp
b246OmR1bXAoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKwogLyoK
ICAgU3RhcnQgd2l0aCBmbGFnIDE2IHNldC4KICAgQnkgZG9pbmcgdGhpcyB0aGUgbW9uaXRvcmlu
ZyBvZiBsb3dlciB2YWx1ZWQgZmxhZ3Mgd2lsbCBiZSBtYXNrZWQgb3V0CkBAIC0xMzEsNiArMjE4
LDkgQEAgdm9pZCogU2FtcGxpbmdUaHJlYWQ6OnRocmVhZFN0YXJ0RnVuYyh2bwogI2lmIEVOQUJM
RShTQU1QTElOR19GTEFHUykKICAgICAgICAgU2FtcGxpbmdGbGFnczo6c2FtcGxlKCk7CiAjZW5k
aWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICAgICAgU2FtcGxpbmdSZWdpb246
OnNhbXBsZSgpOworI2VuZGlmCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAg
U2FtcGxpbmdUb29sOjpzYW1wbGUoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJTYW1wbGlu
Z0NvdW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9B
dG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC05Myw2ICs5NSw4OSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH07CiAKKyNpZiBF
TkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBjbGFzcyBTYW1wbGluZ1JlZ2lvbiB7CisgICAg
cHVibGljOgorICAgICAgICAvLyBDcmVhdGUgYSBzY29wZWQgc2FtcGxpbmcgcmVnaW9uIHVzaW5n
IGEgQyBzdHJpbmcgY29uc3RhbnQgbmFtZSB0aGF0IGRlc2NyaWJlcworICAgICAgICAvLyB3aGF0
IHlvdSBhcmUgZG9pbmcuIFRoaXMgbXVzdCBiZSBhIHN0cmluZyBjb25zdGFudCB0aGF0IHBlcnNp
c3RzIGZvciB0aGUKKyAgICAgICAgLy8gbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MgYW5kIGlzIGlt
bXV0YWJsZS4KKyAgICAgICAgU2FtcGxpbmdSZWdpb24oY29uc3QgY2hhciogbmFtZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICAgICAgICAg
IG1fbmFtZSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX25hbWUgPSBuYW1lOworICAgICAgICAgICAgZXhjaGFu
Z2VDdXJyZW50KHRoaXMsICZtX3ByZXZpb3VzKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wcmV2
aW91cyB8fCBtX3ByZXZpb3VzID4gdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IH5TYW1wbGluZ1JlZ2lvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9uYW1lKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJU
KGJpdHdpc2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQgJiB+MSkg
PT0gdGhpcyk7CisgICAgICAgICAgICBleGNoYW5nZUN1cnJlbnQobV9wcmV2aW91cyk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHNhbXBsZSgpOworICAgICAgICAK
KyAgICAgICAgc3RhdGljIHZvaWQgZHVtcCgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKiBtX3ByZXZp
b3VzOworCisgICAgICAgIHN0YXRpYyB2b2lkIGV4Y2hhbmdlQ3VycmVudChTYW1wbGluZ1JlZ2lv
biogY3VycmVudCwgU2FtcGxpbmdSZWdpb24qKiBwcmV2aW91c1B0ciA9IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHVpbnRwdHJfdCBwcmV2aW91czsKKyAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVkOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgcmVzZXJ2ZWQgKGkuZS4g
c2FtcGxpbmcgdGhyZWFkIGlzIHJlYWRpbmcgaXQpLCBsb29wIGFyb3VuZC4KKyAgICAgICAgICAg
ICAgICBpZiAocHJldmlvdXMgJiAxKSB7CisjaWYgT1MoVU5JWCkKKyAgICAgICAgICAgICAgICAg
ICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
SWYgd2UncmUgZ29pbmcgdG8gQ0FTLCB0aGVuIG1ha2Ugc3VyZSBwcmV2aW91cyBpcyBzZXQuCisg
ICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUHRyKQorICAgICAgICAgICAgICAgICAgICAqcHJl
dmlvdXNQdHIgPSBiaXR3aXNlX2Nhc3Q8U2FtcGxpbmdSZWdpb24qPihwcmV2aW91cyk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2Fw
KCZzX2N1cnJlbnRPclJlc2VydmVkLCBwcmV2aW91cywgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
Y3VycmVudCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZHVtcEludGVybmFsKCk7CisK
KyAgICAgICAgY2xhc3MgTG9ja2VyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTG9j
a2VyKCk7CisgICAgICAgICAgICB+TG9ja2VyKCk7CisgICAgICAgIH07CisKKyAgICAgICAgc3Rh
dGljIHZvbGF0aWxlIHVpbnRwdHJfdCBzX2N1cnJlbnRPclJlc2VydmVkOworICAgICAgICAKKyAg
ICAgICAgLy8gcmVseSBvbiBpZGVudGl0eSBoYXNoaW5nIG9mIHN0cmluZyBjb25zdGFudHMKKyAg
ICAgICAgc3RhdGljIFNwZWN0cnVtPGNvbnN0IGNoYXIqPiogc19zcGVjdHJ1bTsKKyAgICAgICAg
CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNfbm9uZU9mVGhlQWJvdmU7CisgICAgICAg
IAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1bXA7Cisg
ICAgfTsKKyNlbHNlIC8vIEVOQUJMRShTQU1QTElOR19SRUdJT05TKQorICAgIGNsYXNzIFNhbXBs
aW5nUmVnaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKGNvbnN0IGNo
YXIqKSB7IH0KKyAgICAgICAgdm9pZCBkdW1wKCk7CisgICAgfTsKKyNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUkVHSU9OUykKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBFeGVj
U3RhdGU7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw4IEBAIGJvb2wg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ28KIAogSlNPYmplY3QqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdp
b24oIkJ5dGVjb2RlIEdlbmVyYXRpb24iKTsKKyAgICAKICAgICBtX2NvZGVCbG9jay0+c2V0VGhp
c1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpOwogCiAgICAgbV9zY29wZU5vZGUtPmVt
aXRCeXRlY29kZSgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiBlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBD
b21waWxlT3RoZXIgfTsKIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1v
ZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENv
ZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQogeworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlciki
KTsKKyAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwogICAgIEdyYXBoIGRmZzsKICAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiA5
OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NTMsNiArNTUzLDggQEAgdm9pZCBIZWFwOjpnZXRDb25zZXJ2YXRpdmVSZWdpc3Rl
clJvb3RzKAogCiB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKIHsKKyAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBUcmFjaW5nIik7
CisKICAgICBDT05EX0dDUEhBU0UoZnVsbEdDLCBNYXJrRnVsbFJvb3RzLCBNYXJrWW91bmdSb290
cyk7CiAgICAgVU5VU0VEX1BBUkFNKGZ1bGxHQyk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaHJlYWRT
dGF0ZShtX2dsb2JhbERhdGEpKTsKQEAgLTc1OSw2ICs3NjEsOCBAQCB2b2lkIEhlYXA6OmNvbGxl
Y3RBbGxHYXJiYWdlKCkKIAogdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9n
Z2xlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdlIENvbGxl
Y3Rpb24iKTsKKyAgICAKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogICAgIEFTU0VSVChnbG9iYWxE
YXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZp
ZXJUYWJsZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwpAQCAtNzkyLDYgKzc5
Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICB9CiAK
ICAgICBpZiAoc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCkgeworICAgICAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBTd2VlcGluZyIpOwogICAgICAg
ICBHQ1BIQVNFKFN3ZWVwaW5nKTsKICAgICAgICAgc3dlZXAoKTsKICAgICAgICAgc2hyaW5rKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3Bw
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZUYWJsZVNw
ZWN0cnVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksNyBAQCBWVGFibGVTcGVjdHJ1
bTo6flZUYWJsZVNwZWN0cnVtKCkKIAogdm9pZCBWVGFibGVTcGVjdHJ1bTo6Y291bnRWUHRyKHZv
aWQqIHZUYWJsZVBvaW50ZXIpCiB7Ci0gICAgc3RkOjpwYWlyPEhhc2hNYXA8dm9pZCosIHVuc2ln
bmVkIGxvbmc+OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9tYXAuYWRkKHZUYWJsZVBvaW50
ZXIsIDEpOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkKLSAgICAgICAgcmVzdWx0LmZpcnN0LT5z
ZWNvbmQrKzsKKyAgICBhZGQodlRhYmxlUG9pbnRlcik7CiB9CiAKIHZvaWQgVlRhYmxlU3BlY3Ry
dW06OmNvdW50KEpTQ2VsbCogY2VsbCkKQEAgLTU5LDQ1ICs1NywxNyBAQCB2b2lkIFZUYWJsZVNw
ZWN0cnVtOjpjb3VudChKU0NlbGwqIGNlbGwpCiAgICAgY291bnRWUHRyKGNlbGwtPnZwdHIoKSk7
CiB9CiAKLXN0cnVjdCBWVGFibGVBbmRDb3VudCB7Ci0gICAgdm9pZCogdnRhYmxlOwotICAgIHVu
c2lnbmVkIGxvbmcgY291bnQ7Ci0gICAgCi0gICAgVlRhYmxlQW5kQ291bnQoKSB7IH0KLSAgICAK
LSAgICBWVGFibGVBbmRDb3VudCh2b2lkKiB2dGFibGUsIHVuc2lnbmVkIGxvbmcgY291bnQpCi0g
ICAgICAgIDogdnRhYmxlKHZ0YWJsZSkKLSAgICAgICAgLCBjb3VudChjb3VudCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZUYWJsZUFuZENvdW50JiBvdGhl
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCAhPSBvdGhlci5jb3VudCkKLSAgICAg
ICAgICAgIHJldHVybiBjb3VudCA8IG90aGVyLmNvdW50OwotICAgICAgICByZXR1cm4gdnRhYmxl
ID4gb3RoZXIudnRhYmxlOyAvLyB0aGlzIHJlc3VsdHMgaW4gbG93ZXItYWRkcmVzc2VkIHZ0YWJs
ZXMgYmVpbmcgcHJpbnRlZCBmaXJzdAotICAgIH0KLX07Ci0KIHZvaWQgVlRhYmxlU3BlY3RydW06
OmR1bXAoRklMRSogb3V0cHV0LCBjb25zdCBjaGFyKiBjb21tZW50KQogewogICAgIGZwcmludGYo
b3V0cHV0LCAiJXM6XG4iLCBjb21tZW50KTsKICAgICAKLSAgICBIYXNoTWFwPHZvaWQqLCB1bnNp
Z25lZCBsb25nPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwotICAgIEhhc2hNYXA8
dm9pZCosIHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKLSAgICAK
LSAgICBWZWN0b3I8VlRhYmxlQW5kQ291bnQsIDA+IGxpc3Q7Ci0gICAgCi0gICAgZm9yIChIYXNo
TWFwPHZvaWQqLCB1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9
IGVuZDsgKytpdGVyKQotICAgICAgICBsaXN0LmFwcGVuZChWVGFibGVBbmRDb3VudChpdGVyLT5m
aXJzdCwgaXRlci0+c2Vjb25kKSk7Ci0gICAgCi0gICAgc3RkOjpzb3J0KGxpc3QuYmVnaW4oKSwg
bGlzdC5lbmQoKSk7CisgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0ID0gYnVpbGRMaXN0KCk7
CiAgICAgCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSBsaXN0LnNpemUoKTsgaW5kZXgtLSA+IDA7
KSB7Ci0gICAgICAgIFZUYWJsZUFuZENvdW50IGl0ZW0gPSBsaXN0LmF0KGluZGV4KTsKKyAgICAg
ICAgS2V5QW5kQ291bnQgaXRlbSA9IGxpc3QuYXQoaW5kZXgpOwogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICAgICAgRGxfaW5mbyBpbmZvOwotICAgICAgICBpZiAoZGxhZGRyKGl0ZW0udnRhYmxlLCAm
aW5mbykpIHsKKyAgICAgICAgaWYgKGRsYWRkcihpdGVtLmtleSwgJmluZm8pKSB7CiAgICAgICAg
ICAgICBjaGFyKiBmaW5kUmVzdWx0ID0gc3RycmNocihpbmZvLmRsaV9mbmFtZSwgJy8nKTsKICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHN0cmlwcGVkRmlsZU5hbWU7CiAgICAgICAgICAgICAKQEAg
LTEwNiwxMSArNzYsMTEgQEAgdm9pZCBWVGFibGVTcGVjdHJ1bTo6ZHVtcChGSUxFKiBvdXRwdXQs
IAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0cmlwcGVkRmlsZU5hbWUgPSBp
bmZvLmRsaV9mbmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZnByaW50ZihvdXRwdXQs
ICIgICAgJXM6JXMoJXApOiAlbHVcbiIsIHN0cmlwcGVkRmlsZU5hbWUsIGluZm8uZGxpX3NuYW1l
LCBpdGVtLnZ0YWJsZSwgaXRlbS5jb3VudCk7CisgICAgICAgICAgICBmcHJpbnRmKG91dHB1dCwg
IiAgICAlczolcyglcCk6ICVsdVxuIiwgc3RyaXBwZWRGaWxlTmFtZSwgaW5mby5kbGlfc25hbWUs
IGl0ZW0ua2V5LCBpdGVtLmNvdW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAjZW5kaWYKLSAgICAgICAgZnByaW50ZihvdXRwdXQsICIgICAgJXA6ICVsdVxuIiwgaXRlbS52
dGFibGUsIGl0ZW0uY291bnQpOworICAgICAgICBmcHJpbnRmKG91dHB1dCwgIiAgICAlcDogJWx1
XG4iLCBpdGVtLmtleSwgaXRlbS5jb3VudCk7CiAgICAgfQogICAgIAogICAgIGZmbHVzaChvdXRw
dXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5o
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZUYWJsZVNw
ZWN0cnVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxMyBAQAogI2RlZmluZSBWVGFi
bGVTcGVjdHJ1bV9oCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0cnVtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBKU0NlbGw7CiAKLWNsYXNzIFZUYWJsZVNwZWN0cnVtIHsKK2NsYXNzIFZUYWJsZVNwZWN0cnVt
OiBTcGVjdHJ1bTx2b2lkKj4gewogcHVibGljOgogICAgIFZUYWJsZVNwZWN0cnVtKCk7CiAgICAg
flZUYWJsZVNwZWN0cnVtKCk7CkBAIC00Miw5ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
dW50KEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZHVtcChGSUxFKiBvdXRwdXQsIGNvbnN0IGNo
YXIqIGNvbW1lbnQpOwotICAgIAotcHJpdmF0ZToKLSAgICBIYXNoTWFwPHZvaWQqLCB1bnNpZ25l
ZCBsb25nPiBtX21hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjksNiArMTAy
OSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyOjpwYXJzZShKU0cKIHRlbXBsYXRl
IDxjbGFzcyBQYXJzZWROb2RlPgogUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywg
SlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBE
ZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZXhlY1N0YXRlLCBKU09iamVjdCoqIGV4Y2Vw
dGlvbikKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiUGFyc2luZyIpOwog
ICAgIFBhcnNlciBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBzdHJpY3Ru
ZXNzLCBwYXJzZXJNb2RlKTsKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGxl
eGljYWxHbG9iYWxPYmplY3QsIGRlYnVnZ2VyLCBleGVjU3RhdGUsIGV4Y2VwdGlvbik7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw4IEBAIEpTT2JqZWN0KiBFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXoKIAogSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21w
aWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5v
ZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6OkJhc2VsaW5lSklUID8gIkJhc2VsaW5lIENv
bXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21waWxhdGlvbiAoVE9UQUwpIik7CisgICAgCiAj
aWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogI2VuZGlmCkBAIC0y
ODAsNiArMjgyLDggQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aQog
CiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5cGUgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFMKSIgOiAi
REZHIENvbXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkKICAgICBV
TlVTRURfUEFSQU0oaml0VHlwZSk7CiAjZW5kaWYKQEAgLTQ1NSw2ICs0NTksOCBAQCBQYXNzT3du
UHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiAKIEpTT2JqZWN0KiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUID8gIkJhc2VsaW5lIENvbXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21waWxhdGlv
biAoVE9UQUwpIik7CisgICAgCiAjaWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOwogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKQEAgLTUxNSw2ICs1MjEsOCBAQCBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKIEpTT2JqZWN0KiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBl
KQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5cGUgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFMKSIgOiAiREZHIENv
bXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkKICAgICBVTlVTRURf
UEFSQU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsMzggQEAg
aW5saW5lIGJvb2wgd2Vha0NvbXBhcmVBbmRTd2FwKHVuc2lnbmVkKgogI2VuZGlmCiB9CiAKK2lu
bGluZSBib29sIHdlYWtDb21wYXJlQW5kU3dhcCh2b2lkKnZvbGF0aWxlKiBsb2NhdGlvbiwgdm9p
ZCogZXhwZWN0ZWQsIHZvaWQqIG5ld1ZhbHVlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
Q09NUEFSRV9BTkRfU1dBUCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIGFuZCBjb21waWxlcnMuIEN1
cnJlbnRseQorICAgIC8vIGl0IG9ubHkgd29ya3Mgb24gWDg2IG9yIFg4Nl82NCB3aXRoIGEgR0ND
LXN0eWxlIGNvbXBpbGVyLgorI2lmIEVOQUJMRShDT01QQVJFX0FORF9TV0FQKQorICAgIGJvb2wg
cmVzdWx0OworICAgIGFzbSB2b2xhdGlsZSgKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICAibG9j
azsgY21weGNoZ3EgJTMsICUyXG5cdCIKKyNlbHNlCisgICAgICAgICJsb2NrOyBjbXB4Y2hnbCAl
MywgJTJcblx0IgorI2VuZGlmCisgICAgICAgICJzZXRlICUxIgorICAgICAgICA6ICIrYSIoZXhw
ZWN0ZWQpLCAiPXIiKHJlc3VsdCksICIrbSIoKmxvY2F0aW9uKQorICAgICAgICA6ICJyIihuZXdW
YWx1ZSkKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZSAvLyBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKKyAgICBVTlVTRURfUEFSQU0obG9j
YXRpb24pOworICAgIFVOVVNFRF9QQVJBTShleHBlY3RlZCk7CisgICAgVU5VU0VEX1BBUkFNKG5l
d1ZhbHVlKTsKKyAgICBDUkFTSCgpOworICAgIHJldHVybiAwOworI2VuZGlmIC8vIEVOQUJMRShD
T01QQVJFX0FORF9TV0FQKQorfQorCitpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3YXAodm9s
YXRpbGUgdWludHB0cl90KiBsb2NhdGlvbiwgdWludHB0cl90IGV4cGVjdGVkLCB1aW50cHRyX3Qg
bmV3VmFsdWUpCit7CisgICAgcmV0dXJuIHdlYWtDb21wYXJlQW5kU3dhcChyZWludGVycHJldF9j
YXN0PHZvaWQqdm9sYXRpbGUqPihsb2NhdGlvbiksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGV4
cGVjdGVkKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmV3VmFsdWUpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKICNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVJFRkNPVU5URUQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5OTIyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAt
ODA4LDEyICs4MDgsMTMgQEAKICNkZWZpbmUgRU5BQkxFX0RFQlVHX1dJVEhfQlJFQUtQT0lOVCAw
CiAjZGVmaW5lIEVOQUJMRV9TQU1QTElOR19DT1VOVEVSUyAwCiAjZGVmaW5lIEVOQUJMRV9TQU1Q
TElOR19GTEFHUyAwCisjZGVmaW5lIEVOQUJMRV9TQU1QTElOR19SRUdJT05TIDEKICNkZWZpbmUg
RU5BQkxFX09QQ09ERV9TQU1QTElORyAwCiAjZGVmaW5lIEVOQUJMRV9DT0RFQkxPQ0tfU0FNUExJ
TkcgMAogI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpICYmICFFTkFCTEUoT1BDT0RFX1NB
TVBMSU5HKQogI2Vycm9yICJDT0RFQkxPQ0tfU0FNUExJTkcgcmVxdWlyZXMgT1BDT0RFX1NBTVBM
SU5HIgogI2VuZGlmCi0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykgfHwgRU5BQkxFKFNBTVBM
SU5HX0ZMQUdTKQorI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpIHx8IEVOQUJMRShTQU1QTElO
R19GTEFHUykgfHwgRU5BQkxFKFNBTVBMSU5HX1JFR0lPTlMpCiAjZGVmaW5lIEVOQUJMRV9TQU1Q
TElOR19USFJFQUQgMQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
U3BlY3RydW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NwZWN0
cnVtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NwZWN0cnVt
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BlY3RydW1faAorI2RlZmluZSBTcGVj
dHJ1bV9oCisKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIFNwZWN0cnVtIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hN
YXA8VCwgdW5zaWduZWQgbG9uZz46Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgSGFzaE1hcDxULCB1bnNpZ25lZCBsb25nPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRl
cmF0b3I7CisgICAgCisgICAgU3BlY3RydW0oKSB7IH0KKyAgICAKKyAgICB2b2lkIGFkZChjb25z
dCBUJiBrZXksIHVuc2lnbmVkIGxvbmcgY291bnQgPSAxKQorICAgIHsKKyAgICAgICAgc3RkOjpw
YWlyPGl0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBjb3VudCk7CisgICAg
ICAgIGlmICghcmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25k
ICs9IGNvdW50OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsb25nIGdldChjb25zdCBUJiBr
ZXkpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRvciBpdGVyID0gbV9tYXAuZmlu
ZChrZXkpOworICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgIH0KKyAgICAKKyAgICBp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBpdGVyYXRvciBl
bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgCisgICAgc3RydWN0IEtleUFuZENv
dW50IHsKKyAgICAgICAgS2V5QW5kQ291bnQoKSB7IH0KKyAgICAgICAgCisgICAgICAgIEtleUFu
ZENvdW50KGNvbnN0IFQmIGtleSwgdW5zaWduZWQgbG9uZyBjb3VudCkKKyAgICAgICAgICAgIDog
a2V5KGtleSkKKyAgICAgICAgICAgICwgY291bnQoY291bnQpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgS2V5QW5kQ291bnQmIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY291bnQgIT0gb3RoZXIuY291
bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50IDwgb3RoZXIuY291bnQ7CisgICAgICAg
ICAgICAvLyBUaGlzIGNhdXNlcyBsb3dlci1vcmRlcmVkIGtleXMgYmVpbmcgcmV0dXJuZWQgZmly
c3Q7IHRoaXMgaXMgcmVhbGx5IGp1c3QKKyAgICAgICAgICAgIC8vIGhlcmUgdG8gbWFrZSBzdXJl
IHRoYXQgdGhlIG9yZGVyIGlzIHNvbWV3aGF0IGRldGVybWluaXN0aWMgcmF0aGVyIHRoYW4gYmVp
bmcKKyAgICAgICAgICAgIC8vIGRldGVybWluZWQgYnkgaGFzaGluZy4KKyAgICAgICAgICAgIHJl
dHVybiBrZXkgPiBvdGhlci5rZXk7CisgICAgICAgIH0KKworICAgICAgICBUIGtleTsKKyAgICAg
ICAgdW5zaWduZWQgbG9uZyBjb3VudDsKKyAgICB9OworICAgIAorICAgIC8vIFJldHVybnMgYSBs
aXN0IG9yZGVyZWQgZnJvbSBsb3dlc3QtY291bnQgdG8gaGlnaGVzdC1jb3VudC4KKyAgICBWZWN0
b3I8S2V5QW5kQ291bnQ+IGJ1aWxkTGlzdCgpIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8
S2V5QW5kQ291bnQ+IGxpc3Q7CisgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IGJl
Z2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKEtl
eUFuZENvdW50KGl0ZXItPmZpcnN0LCBpdGVyLT5zZWNvbmQpKTsKKyAgICAgICAgCisgICAgICAg
IHN0ZDo6c29ydChsaXN0LmJlZ2luKCksIGxpc3QuZW5kKCkpOworICAgICAgICByZXR1cm4gbGlz
dDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9uZz4g
bV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTcGVjdHJ1bTsK
KworI2VuZGlmIC8vIFNwZWN0cnVtX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
d3RmLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkJ
KHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIHd0Zi9SZWZQ
dHJIYXNoTWFwLmggXAogICAgIHd0Zi9SZXRhaW5QdHIuaCBcCiAgICAgd3RmL1NIQTEuaCBcCisg
ICAgd3RmL1NwZWN0cnVtLmgKICAgICB3dGYvU3RhY2tCb3VuZHMuaCBcCiAgICAgd3RmL1N0YXRp
Y0NvbnN0cnVjdG9ycy5oIFwKICAgICB3dGYvU3RkTGliRXh0cmFzLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5OTI1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0xMS0wMyAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpTQyBzaG91bGQgYmUg
YWJsZSB0byBzYW1wbGUgaXRzZWxmIGluIGEgbW9yZSBmbGV4aWJsZSB3YXkgdGhhbiBqdXN0IHNh
bXBsaW5nIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MTUyMgorCisgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoLgorICAg
ICAgICAKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvU3BlY3RydW0uaDogQWRkZWQu
CisKIDIwMTEtMTEtMDMgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4K
IAogICAgICAgICBEZS12aXJ0dWFsaXplIEpTT2JqZWN0OjpjbGFzc05hbWUKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3BlY3RydW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0
cnVtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hl
YWRlcnMvd3RmL1NwZWN0cnVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TcGVjdHJ1bS5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTky
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNCBAQAorMjAxMS0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIEpTQyBzaG91bGQgYmUgYWJsZSB0byBzYW1wbGUgaXRzZWxmIGluIGEgbW9yZSBmbGV4
aWJsZSB3YXkgdGhhbiBqdXN0IHNhbXBsaW5nIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUyMgorCisgICAgICAgIFJldmlld2VkIGJ5IEdh
dmluIEJhcnJhY2xvdWdoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgc2luY2Ugbm8gZnVuY3Rp
b25hbGl0eSBjaGFuZ2VkLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0
cnVtLmg6IEFkZGVkLgorCiAyMDExLTExLTAyICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBFbmFibGUgY3RybC1hcnJvdyBtb3ZlIGN1cnNvciBieSB3b3JkIGluIHZp
c3VhbCBvcmRlciBpbiBjci13aW4gYnkgY29tbWFuZCBsaW5lIGZsYWcuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3BlY3RydW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3BlY3RydW0uaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TcGVjdHJ1bS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3BlY3Ry
dW0uaD4K
</data>
<flag name="commit-queue"
          id="112026"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113620</attachid>
            <date>2011-11-03 21:39:58 -0700</date>
            <delta_ts>2011-11-03 22:07:10 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>samplingregion_patch_5.diff</filename>
            <type>text/plain</type>
            <size>31079</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAK
KzIwMTEtMTEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0Mgc2hvdWxkIGJlIGFibGUgdG8gc2FtcGxlIGl0c2VsZiBpbiBhIG1vcmUgZmxleGlibGUgd2F5
IHRoYW4ganVzdCBzYW1wbGluZyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJy
YWNsb3VnaC4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgY29uc3RydWN0IHRoYXQgbG9va3Mg
bGlrZSBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigibmFtZSIpLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6TG9ja2VyKToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcik6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUmVnaW9uOjpzYW1wbGUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1JlZ2lvbjo6ZHVtcCk6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpkdW1wSW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1RocmVhZDo6dGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKiBieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OlNhbXBsaW5n
UmVnaW9uKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246On5TYW1wbGluZ1JlZ2lvbik6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpleGNoYW5nZUN1cnJlbnQpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29s
bGVjdCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHA6CisgICAgICAgIChKU0M6
OlZUYWJsZVNwZWN0cnVtOjpjb3VudFZQdHIpOgorICAgICAgICAoSlNDOjpWVGFibGVTcGVjdHJ1
bTo6ZHVtcCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5oOgorICAgICAgICAqIGpz
Yy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAgICAg
ICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNh
bGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
ckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAo
V1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXApOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAg
ICAgICAqIHd0Zi9TcGVjdHJ1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3BlY3RydW06OlNw
ZWN0cnVtKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmFkZCk6CisgICAgICAgIChXVEY6OlNw
ZWN0cnVtOjpnZXQpOgorICAgICAgICAoV1RGOjpTcGVjdHJ1bTo6YmVnaW4pOgorICAgICAgICAo
V1RGOjpTcGVjdHJ1bTo6ZW5kKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OktleUFuZENvdW50
OjpLZXlBbmRDb3VudCk6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjpLZXlBbmRDb3VudDo6b3Bl
cmF0b3I8KToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmJ1aWxkTGlzdCk6CisgICAgICAgICog
d3RmL3d0Zi5wcmk6CisKIDIwMTEtMTEtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIENoYW5nZSByZW1haW5pbmcgY2FsbGVycyBvZiByZWxlYXNlUmVmIHRvIGNh
bGwgbGVha1JlZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksNyBAQCBfX1pOM0pTQzE0SlNHbG9i
YWxPYmplY3Q2c19pbmZvRQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgogX19aTjNKU0Mx
NE1hY2hpbmVUaHJlYWRzMTZhZGRDdXJyZW50VGhyZWFkRXYKIF9fWk4zSlNDMTRNYXJrU3RhY2tB
cnJheTZleHBhbmRFdgorX19aTjNKU0MxNFNhbXBsaW5nUmVnaW9uNGR1bXBFdgogX19aTjNKU0Mx
NFNhbXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNXN0YXJ0RWoK
IF9fWk4zSlNDMTRTY29wZUNoYWluTm9kZTZzX2luZm9FCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIk1haW5U
aHJlYWQuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAj
aW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQwNCw2ICs0MDUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAjZW5kaWYKIAogICAgIC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0
aW5nIEpTR2xvYmFsRGF0YS4KKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAg
SlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKICAgICAvLyBXZSBjYW4ndCB1c2UgZGVzdHJ1
Y3RvcnMgaW4gdGhlIGZvbGxvd2luZyBjb2RlIGJlY2F1c2UgaXQgdXNlcyBXaW5kb3dzCkBAIC00
NzIsNiArNDc0LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
I2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICBTYW1wbGluZ0ZsYWdzOjpzdG9wKCk7CiAj
ZW5kaWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBTYW1wbGluZ1JlZ2lvbjo6
ZHVtcCgpOworI2VuZGlmCiAgICAgZ2xvYmFsRGF0YS5kdW1wU2FtcGxlRGF0YShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIEFi
c3RyYWN0U2FtcGxpbmdDb3VudGVyOjpkdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
Zgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gOTkyMjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSw3IEBA
IEVYUE9SVFMKICAgICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYSUBaCiAgICAgP2RpZFRpbWVPdXRA
VGltZW91dENoZWNrZXJASlNDQEBRQUVfTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP2R0b2FAV1RG
QEBZQVhRQUROQUFfTkFBSEFBSUBaCisgICAgP2R1bXBAU2FtcGxpbmdSZWdpb25ASlNDQEBTQVhY
WgogICAgID9kdW1wU2FtcGxlRGF0YUBKU0dsb2JhbERhdGFASlNDQEBRQUVYUEFWRXhlY1N0YXRl
QDJAQFoKICAgICA/ZW1wdHlAU3RyaW5nSW1wbEBXVEZAQFNBUEFWMTJAWFoKICAgICA/ZW51bWVy
YWJsZUBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQkVfTlhaCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQAogCQkwQkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYy
OEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMTZENzI2
MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZl
Y3Rvci5jcHAgKi87IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkU1
QkY3MTQ2MzU3RDUwMDNFQjJFQiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRTVCRjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0
cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4
RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZB
NDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4
RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MTMsNiArODE0LDcg
QEAKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8q
IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJFNUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3RydW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3BlY3RydW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyog
RGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODU1LDYgKzE4NTcsNyBAQAogCQk2
NTE2MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjJFNUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3Ry
dW0uaCAqLywKIAkJCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8s
CiAJCQkJMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAog
CQkJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovLApAQCAtMjg5
Nyw2ICsyOTAwLDcgQEAKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNv
dmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZp
cnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMx
RjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkU1QkY3MTQ2MzU3RDUw
MDNFQjJFQiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkocmV2aXNpb24gOTkyMjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODMsNiArODMsOTMgQEAgdm9pZCBTYW1wbGluZ0ZsYWdzOjpzdGFydCgp
IHt9CiB2b2lkIFNhbXBsaW5nRmxhZ3M6OnN0b3AoKSB7fQogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
U0FNUExJTkdfUkVHSU9OUykKK3ZvbGF0aWxlIHVpbnRwdHJfdCBTYW1wbGluZ1JlZ2lvbjo6c19j
dXJyZW50T3JSZXNlcnZlZDsKK1NwZWN0cnVtPGNvbnN0IGNoYXIqPiogU2FtcGxpbmdSZWdpb246
OnNfc3BlY3RydW07Cit1bnNpZ25lZCBsb25nIFNhbXBsaW5nUmVnaW9uOjpzX25vbmVPZlRoZUFi
b3ZlOwordW5zaWduZWQgU2FtcGxpbmdSZWdpb246OnNfbnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1w
OworCitTYW1wbGluZ1JlZ2lvbjo6TG9ja2VyOjpMb2NrZXIoKQoreworICAgIHVpbnRwdHJfdCBw
cmV2aW91czsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBwcmV2aW91cyA9IHNfY3VycmVu
dE9yUmVzZXJ2ZWQ7CisgICAgICAgIGlmIChwcmV2aW91cyAmIDEpIHsKKyNpZiBPUyhVTklYKQor
ICAgICAgICAgICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZzX2N1cnJl
bnRPclJlc2VydmVkLCBwcmV2aW91cywgcHJldmlvdXMgfCAxKSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworU2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcigpCit7CisgICAg
Ly8gV2UgZG9uJ3QgbmVlZCB0aGUgQ0FTLCBidXQgd2UgZG8gaXQgb3V0IG9mIGFuCisgICAgLy8g
YWJ1bmRhbmNlIG9mIGNhdXRpb24gKGFuZCBiZWNhdXNlIGl0IGdpdmVzIHVzIGEgbWVtb3J5IGZl
bmNlLCB3aGljaCBpcworICAgIC8vIG5ldmVyIGJhZCkuCisgICAgdWludHB0cl90IHByZXZpb3Vz
OworICAgIGRvIHsKKyAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVkOworICAg
IH0gd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmc19jdXJyZW50T3JSZXNlcnZlZCwg
cHJldmlvdXMsIHByZXZpb3VzICYgfjEpKTsKK30KKwordm9pZCBTYW1wbGluZ1JlZ2lvbjo6c2Ft
cGxlKCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgd2UgbG9jayBzX2N1cnJlbnQuCisgICAgTG9ja2Vy
IGxvY2tlcjsKKyAgICAKKyAgICAvLyBDcmVhdGUgYSBzcGVjdHJ1bSBpZiB3ZSBkb24ndCBoYXZl
IG9uZSBhbHJlYWR5LgorICAgIGlmICghc19zcGVjdHJ1bSkKKyAgICAgICAgc19zcGVjdHJ1bSA9
IG5ldyBTcGVjdHJ1bTxjb25zdCBjaGFyKj4oKTsKKyAgICAKKyAgICBBU1NFUlQoc19jdXJyZW50
T3JSZXNlcnZlZCAmIDEpOworICAgIAorICAgIC8vIFdhbGsgdGhlIHJlZ2lvbiBzdGFjaywgYW5k
IHJlY29yZCBlYWNoIHJlZ2lvbiB3ZSBzZWUuCisgICAgU2FtcGxpbmdSZWdpb24qIHJlZ2lvbiA9
IGJpdHdpc2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQgJiB+MSk7
CisgICAgaWYgKHJlZ2lvbikgeworICAgICAgICBmb3IgKDsgcmVnaW9uOyByZWdpb24gPSByZWdp
b24tPm1fcHJldmlvdXMpCisgICAgICAgICAgICBzX3NwZWN0cnVtLT5hZGQocmVnaW9uLT5tX25h
bWUpOworICAgIH0gZWxzZQorICAgICAgICBzX25vbmVPZlRoZUFib3ZlKys7CisgICAgCisgICAg
aWYgKHNfbnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1wKysgPT0gU2FtcGxpbmdUaHJlYWQ6OnNfaGVy
dHopIHsKKyAgICAgICAgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1bXAgPSAwOworICAgICAgICBk
dW1wSW50ZXJuYWwoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2FtcGxpbmdSZWdpb246OmR1bXAoKQor
eworICAgIExvY2tlciBsb2NrZXI7CisgICAgCisgICAgZHVtcEludGVybmFsKCk7Cit9CisKK3Zv
aWQgU2FtcGxpbmdSZWdpb246OmR1bXBJbnRlcm5hbCgpCit7CisgICAgaWYgKCFzX3NwZWN0cnVt
KSB7CisgICAgICAgIHByaW50ZigiXG5TYW1wbGluZ1JlZ2lvbjogd2FzIG5ldmVyIHNhbXBsZWQu
XG5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFZlY3RvcjxTcGVjdHJ1
bTxjb25zdCBjaGFyKj46OktleUFuZENvdW50PiBsaXN0ID0gc19zcGVjdHJ1bS0+YnVpbGRMaXN0
KCk7CisgICAgCisgICAgdW5zaWduZWQgbG9uZyB0b3RhbCA9IHNfbm9uZU9mVGhlQWJvdmU7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC5zaXplKCk7IGktLTspCisgICAgICAgIHRvdGFsICs9
IGxpc3RbaV0uY291bnQ7CisgICAgCisgICAgcHJpbnRmKCJcblNhbXBsaW5nUmVnaW9uOiBzYW1w
bGUgY291bnRzIGZvciByZWdpb25zOiAoJWx1IHNhbXBsZXMpXG4iLCB0b3RhbCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBsaXN0LnNpemUoKTsgaS0tOykKKyAgICAgICAgcHJpbnRmKCIgICAg
JTMuMmxmJSUgICVzXG4iLCAoMTAwLjAgKiBsaXN0W2ldLmNvdW50KSAvIHRvdGFsLCBsaXN0W2ld
LmtleSk7Cit9CisjZWxzZSAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKK3ZvaWQgU2FtcGxp
bmdSZWdpb246OmR1bXAoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykK
KwogLyoKICAgU3RhcnQgd2l0aCBmbGFnIDE2IHNldC4KICAgQnkgZG9pbmcgdGhpcyB0aGUgbW9u
aXRvcmluZyBvZiBsb3dlciB2YWx1ZWQgZmxhZ3Mgd2lsbCBiZSBtYXNrZWQgb3V0CkBAIC0xMzEs
NiArMjE4LDkgQEAgdm9pZCogU2FtcGxpbmdUaHJlYWQ6OnRocmVhZFN0YXJ0RnVuYyh2bwogI2lm
IEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICAgICAgU2FtcGxpbmdGbGFnczo6c2FtcGxlKCk7
CiAjZW5kaWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICAgICAgU2FtcGxpbmdS
ZWdpb246OnNhbXBsZSgpOworI2VuZGlmCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAg
ICAgICAgU2FtcGxpbmdUb29sOjpzYW1wbGUoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gOTkyMjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJT
YW1wbGluZ0NvdW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC05Myw2ICs5NSw4OSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH07CiAK
KyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBjbGFzcyBTYW1wbGluZ1JlZ2lvbiB7
CisgICAgcHVibGljOgorICAgICAgICAvLyBDcmVhdGUgYSBzY29wZWQgc2FtcGxpbmcgcmVnaW9u
IHVzaW5nIGEgQyBzdHJpbmcgY29uc3RhbnQgbmFtZSB0aGF0IGRlc2NyaWJlcworICAgICAgICAv
LyB3aGF0IHlvdSBhcmUgZG9pbmcuIFRoaXMgbXVzdCBiZSBhIHN0cmluZyBjb25zdGFudCB0aGF0
IHBlcnNpc3RzIGZvciB0aGUKKyAgICAgICAgLy8gbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MgYW5k
IGlzIGltbXV0YWJsZS4KKyAgICAgICAgU2FtcGxpbmdSZWdpb24oY29uc3QgY2hhciogbmFtZSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICAg
ICAgICAgIG1fbmFtZSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX25hbWUgPSBuYW1lOworICAgICAgICAgICAg
ZXhjaGFuZ2VDdXJyZW50KHRoaXMsICZtX3ByZXZpb3VzKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
bV9wcmV2aW91cyB8fCBtX3ByZXZpb3VzID4gdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIH5TYW1wbGluZ1JlZ2lvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9u
YW1lKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QVNTRVJUKGJpdHdpc2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQg
JiB+MSkgPT0gdGhpcyk7CisgICAgICAgICAgICBleGNoYW5nZUN1cnJlbnQobV9wcmV2aW91cyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHNhbXBsZSgpOworICAg
ICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZHVtcCgpOworICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKiBt
X3ByZXZpb3VzOworCisgICAgICAgIHN0YXRpYyB2b2lkIGV4Y2hhbmdlQ3VycmVudChTYW1wbGlu
Z1JlZ2lvbiogY3VycmVudCwgU2FtcGxpbmdSZWdpb24qKiBwcmV2aW91c1B0ciA9IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBwcmV2aW91czsKKyAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVk
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgcmVzZXJ2ZWQg
KGkuZS4gc2FtcGxpbmcgdGhyZWFkIGlzIHJlYWRpbmcgaXQpLCBsb29wIGFyb3VuZC4KKyAgICAg
ICAgICAgICAgICBpZiAocHJldmlvdXMgJiAxKSB7CisjaWYgT1MoVU5JWCkKKyAgICAgICAgICAg
ICAgICAgICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gSWYgd2UncmUgZ29pbmcgdG8gQ0FTLCB0aGVuIG1ha2Ugc3VyZSBwcmV2aW91cyBpcyBz
ZXQuCisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUHRyKQorICAgICAgICAgICAgICAgICAg
ICAqcHJldmlvdXNQdHIgPSBiaXR3aXNlX2Nhc3Q8U2FtcGxpbmdSZWdpb24qPihwcmV2aW91cyk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVB
bmRTd2FwKCZzX2N1cnJlbnRPclJlc2VydmVkLCBwcmV2aW91cywgYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oY3VycmVudCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZHVtcEludGVybmFs
KCk7CisKKyAgICAgICAgY2xhc3MgTG9ja2VyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgTG9ja2VyKCk7CisgICAgICAgICAgICB+TG9ja2VyKCk7CisgICAgICAgIH07CisKKyAgICAg
ICAgc3RhdGljIHZvbGF0aWxlIHVpbnRwdHJfdCBzX2N1cnJlbnRPclJlc2VydmVkOworICAgICAg
ICAKKyAgICAgICAgLy8gcmVseSBvbiBpZGVudGl0eSBoYXNoaW5nIG9mIHN0cmluZyBjb25zdGFu
dHMKKyAgICAgICAgc3RhdGljIFNwZWN0cnVtPGNvbnN0IGNoYXIqPiogc19zcGVjdHJ1bTsKKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNfbm9uZU9mVGhlQWJvdmU7Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1
bXA7CisgICAgfTsKKyNlbHNlIC8vIEVOQUJMRShTQU1QTElOR19SRUdJT05TKQorICAgIGNsYXNz
IFNhbXBsaW5nUmVnaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKGNv
bnN0IGNoYXIqKSB7IH0KKyAgICAgICAgdm9pZCBkdW1wKCk7CisgICAgfTsKKyNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFz
cyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw4IEBA
IGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ28KIAogSlNPYmplY3QqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkJ5dGVjb2RlIEdlbmVyYXRpb24iKTsKKyAgICAKICAgICBtX2NvZGVCbG9jay0+
c2V0VGhpc1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpOwogCiAgICAgbV9zY29wZU5v
ZGUtPmVtaXRCeXRlY29kZSgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0
aW9uLCBDb21waWxlT3RoZXIgfTsKIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29t
cGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUm
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQog
eworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERy
aXZlcikiKTsKKyAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwogICAgIEdyYXBoIGRmZzsKICAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0
YSwgY29kZUJsb2NrKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NTMsNiArNTUzLDggQEAgdm9pZCBIZWFwOjpnZXRDb25zZXJ2YXRpdmVS
ZWdpc3RlclJvb3RzKAogCiB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKIHsKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBUcmFj
aW5nIik7CisKICAgICBDT05EX0dDUEhBU0UoZnVsbEdDLCBNYXJrRnVsbFJvb3RzLCBNYXJrWW91
bmdSb290cyk7CiAgICAgVU5VU0VEX1BBUkFNKGZ1bGxHQyk7CiAgICAgQVNTRVJUKGlzVmFsaWRU
aHJlYWRTdGF0ZShtX2dsb2JhbERhdGEpKTsKQEAgLTc1OSw2ICs3NjEsOCBAQCB2b2lkIEhlYXA6
OmNvbGxlY3RBbGxHYXJiYWdlKCkKIAogdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3
ZWVwVG9nZ2xlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdl
IENvbGxlY3Rpb24iKTsKKyAgICAKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogICAgIEFTU0VSVChn
bG9iYWxEYXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElk
ZW50aWZpZXJUYWJsZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwpAQCAtNzky
LDYgKzc5Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAg
ICB9CiAKICAgICBpZiAoc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCkgeworICAgICAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBTd2VlcGluZyIpOwog
ICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nKTsKICAgICAgICAgc3dlZXAoKTsKICAgICAgICAgc2hy
aW5rKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3Ry
dW0uY3BwCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZU
YWJsZVNwZWN0cnVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksNyBAQCBWVGFibGVT
cGVjdHJ1bTo6flZUYWJsZVNwZWN0cnVtKCkKIAogdm9pZCBWVGFibGVTcGVjdHJ1bTo6Y291bnRW
UHRyKHZvaWQqIHZUYWJsZVBvaW50ZXIpCiB7Ci0gICAgc3RkOjpwYWlyPEhhc2hNYXA8dm9pZCos
IHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9tYXAuYWRkKHZUYWJs
ZVBvaW50ZXIsIDEpOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkKLSAgICAgICAgcmVzdWx0LmZp
cnN0LT5zZWNvbmQrKzsKKyAgICBhZGQodlRhYmxlUG9pbnRlcik7CiB9CiAKIHZvaWQgVlRhYmxl
U3BlY3RydW06OmNvdW50KEpTQ2VsbCogY2VsbCkKQEAgLTU5LDQ1ICs1NywxNyBAQCB2b2lkIFZU
YWJsZVNwZWN0cnVtOjpjb3VudChKU0NlbGwqIGNlbGwpCiAgICAgY291bnRWUHRyKGNlbGwtPnZw
dHIoKSk7CiB9CiAKLXN0cnVjdCBWVGFibGVBbmRDb3VudCB7Ci0gICAgdm9pZCogdnRhYmxlOwot
ICAgIHVuc2lnbmVkIGxvbmcgY291bnQ7Ci0gICAgCi0gICAgVlRhYmxlQW5kQ291bnQoKSB7IH0K
LSAgICAKLSAgICBWVGFibGVBbmRDb3VudCh2b2lkKiB2dGFibGUsIHVuc2lnbmVkIGxvbmcgY291
bnQpCi0gICAgICAgIDogdnRhYmxlKHZ0YWJsZSkKLSAgICAgICAgLCBjb3VudChjb3VudCkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZUYWJsZUFuZENvdW50
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCAhPSBvdGhlci5jb3VudCkK
LSAgICAgICAgICAgIHJldHVybiBjb3VudCA8IG90aGVyLmNvdW50OwotICAgICAgICByZXR1cm4g
dnRhYmxlID4gb3RoZXIudnRhYmxlOyAvLyB0aGlzIHJlc3VsdHMgaW4gbG93ZXItYWRkcmVzc2Vk
IHZ0YWJsZXMgYmVpbmcgcHJpbnRlZCBmaXJzdAotICAgIH0KLX07Ci0KIHZvaWQgVlRhYmxlU3Bl
Y3RydW06OmR1bXAoRklMRSogb3V0cHV0LCBjb25zdCBjaGFyKiBjb21tZW50KQogewogICAgIGZw
cmludGYob3V0cHV0LCAiJXM6XG4iLCBjb21tZW50KTsKICAgICAKLSAgICBIYXNoTWFwPHZvaWQq
LCB1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwotICAgIEhh
c2hNYXA8dm9pZCosIHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsK
LSAgICAKLSAgICBWZWN0b3I8VlRhYmxlQW5kQ291bnQsIDA+IGxpc3Q7Ci0gICAgCi0gICAgZm9y
IChIYXNoTWFwPHZvaWQqLCB1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBp
dGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBsaXN0LmFwcGVuZChWVGFibGVBbmRDb3VudChp
dGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKSk7Ci0gICAgCi0gICAgc3RkOjpzb3J0KGxpc3QuYmVn
aW4oKSwgbGlzdC5lbmQoKSk7CisgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0ID0gYnVpbGRM
aXN0KCk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSBsaXN0LnNpemUoKTsgaW5kZXgt
LSA+IDA7KSB7Ci0gICAgICAgIFZUYWJsZUFuZENvdW50IGl0ZW0gPSBsaXN0LmF0KGluZGV4KTsK
KyAgICAgICAgS2V5QW5kQ291bnQgaXRlbSA9IGxpc3QuYXQoaW5kZXgpOwogI2lmIFBMQVRGT1JN
KE1BQykKICAgICAgICAgRGxfaW5mbyBpbmZvOwotICAgICAgICBpZiAoZGxhZGRyKGl0ZW0udnRh
YmxlLCAmaW5mbykpIHsKKyAgICAgICAgaWYgKGRsYWRkcihpdGVtLmtleSwgJmluZm8pKSB7CiAg
ICAgICAgICAgICBjaGFyKiBmaW5kUmVzdWx0ID0gc3RycmNocihpbmZvLmRsaV9mbmFtZSwgJy8n
KTsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0cmlwcGVkRmlsZU5hbWU7CiAgICAgICAgICAg
ICAKQEAgLTEwNiwxMSArNzYsMTEgQEAgdm9pZCBWVGFibGVTcGVjdHJ1bTo6ZHVtcChGSUxFKiBv
dXRwdXQsIAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0cmlwcGVkRmlsZU5h
bWUgPSBpbmZvLmRsaV9mbmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZnByaW50Zihv
dXRwdXQsICIgICAgJXM6JXMoJXApOiAlbHVcbiIsIHN0cmlwcGVkRmlsZU5hbWUsIGluZm8uZGxp
X3NuYW1lLCBpdGVtLnZ0YWJsZSwgaXRlbS5jb3VudCk7CisgICAgICAgICAgICBmcHJpbnRmKG91
dHB1dCwgIiAgICAlczolcyglcCk6ICVsdVxuIiwgc3RyaXBwZWRGaWxlTmFtZSwgaW5mby5kbGlf
c25hbWUsIGl0ZW0ua2V5LCBpdGVtLmNvdW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAjZW5kaWYKLSAgICAgICAgZnByaW50ZihvdXRwdXQsICIgICAgJXA6ICVsdVxuIiwg
aXRlbS52dGFibGUsIGl0ZW0uY291bnQpOworICAgICAgICBmcHJpbnRmKG91dHB1dCwgIiAgICAl
cDogJWx1XG4iLCBpdGVtLmtleSwgaXRlbS5jb3VudCk7CiAgICAgfQogICAgIAogICAgIGZmbHVz
aChvdXRwdXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3Ry
dW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVj
dHJ1bS5oCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZU
YWJsZVNwZWN0cnVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxMyBAQAogI2RlZmlu
ZSBWVGFibGVTcGVjdHJ1bV9oCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0cnVtLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBKU0NlbGw7CiAKLWNsYXNzIFZUYWJsZVNwZWN0cnVtIHsKK2NsYXNzIFZUYWJsZVNw
ZWN0cnVtOiBTcGVjdHJ1bTx2b2lkKj4gewogcHVibGljOgogICAgIFZUYWJsZVNwZWN0cnVtKCk7
CiAgICAgflZUYWJsZVNwZWN0cnVtKCk7CkBAIC00Miw5ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNvdW50KEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZHVtcChGSUxFKiBvdXRwdXQsIGNv
bnN0IGNoYXIqIGNvbW1lbnQpOwotICAgIAotcHJpdmF0ZToKLSAgICBIYXNoTWFwPHZvaWQqLCB1
bnNpZ25lZCBsb25nPiBtX21hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjks
NiArMTAyOSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyOjpwYXJzZShKU0cKIHRl
bXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgogUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1l
dGVycywgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZXhlY1N0YXRlLCBKU09iamVjdCoq
IGV4Y2VwdGlvbikKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiUGFyc2lu
ZyIpOwogICAgIFBhcnNlciBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBz
dHJpY3RuZXNzLCBwYXJzZXJNb2RlKTsKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlPFBhcnNlZE5v
ZGU+KGxleGljYWxHbG9iYWxPYmplY3QsIGRlYnVnZ2VyLCBleGVjU3RhdGUsIGV4Y2VwdGlvbik7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw4IEBAIEpTT2JqZWN0KiBF
dmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXoKIAogSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6OkJhc2VsaW5lSklUID8gIkJhc2Vs
aW5lIENvbXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21waWxhdGlvbiAoVE9UQUwpIik7Cisg
ICAgCiAjaWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogI2VuZGlm
CkBAIC0yODAsNiArMjgyLDggQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxl
T3B0aQogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVj
U3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5
cGUgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFM
KSIgOiAiREZHIENvbXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkK
ICAgICBVTlVTRURfUEFSQU0oaml0VHlwZSk7CiAjZW5kaWYKQEAgLTQ1NSw2ICs0NTksOCBAQCBQ
YXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiAKIEpTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkK
IHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6
OkJhc2VsaW5lSklUID8gIkJhc2VsaW5lIENvbXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21w
aWxhdGlvbiAoVE9UQUwpIik7CisgICAgCiAjaWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKQEAgLTUxNSw2ICs1MjEsOCBA
QCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKIEpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5cGUgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFMKSIgOiAi
REZHIENvbXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkKICAgICBV
TlVTRURfUEFSQU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAs
MzggQEAgaW5saW5lIGJvb2wgd2Vha0NvbXBhcmVBbmRTd2FwKHVuc2lnbmVkKgogI2VuZGlmCiB9
CiAKK2lubGluZSBib29sIHdlYWtDb21wYXJlQW5kU3dhcCh2b2lkKnZvbGF0aWxlKiBsb2NhdGlv
biwgdm9pZCogZXhwZWN0ZWQsIHZvaWQqIG5ld1ZhbHVlKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgQ09NUEFSRV9BTkRfU1dBUCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIGFuZCBjb21waWxl
cnMuIEN1cnJlbnRseQorICAgIC8vIGl0IG9ubHkgd29ya3Mgb24gWDg2IG9yIFg4Nl82NCB3aXRo
IGEgR0NDLXN0eWxlIGNvbXBpbGVyLgorI2lmIEVOQUJMRShDT01QQVJFX0FORF9TV0FQKQorICAg
IGJvb2wgcmVzdWx0OworICAgIGFzbSB2b2xhdGlsZSgKKyNpZiBDUFUoWDg2XzY0KQorICAgICAg
ICAibG9jazsgY21weGNoZ3EgJTMsICUyXG5cdCIKKyNlbHNlCisgICAgICAgICJsb2NrOyBjbXB4
Y2hnbCAlMywgJTJcblx0IgorI2VuZGlmCisgICAgICAgICJzZXRlICUxIgorICAgICAgICA6ICIr
YSIoZXhwZWN0ZWQpLCAiPXIiKHJlc3VsdCksICIrbSIoKmxvY2F0aW9uKQorICAgICAgICA6ICJy
IihuZXdWYWx1ZSkKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZSAvLyBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKKyAgICBVTlVTRURfUEFS
QU0obG9jYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShleHBlY3RlZCk7CisgICAgVU5VU0VEX1BB
UkFNKG5ld1ZhbHVlKTsKKyAgICBDUkFTSCgpOworICAgIHJldHVybiAwOworI2VuZGlmIC8vIEVO
QUJMRShDT01QQVJFX0FORF9TV0FQKQorfQorCitpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3
YXAodm9sYXRpbGUgdWludHB0cl90KiBsb2NhdGlvbiwgdWludHB0cl90IGV4cGVjdGVkLCB1aW50
cHRyX3QgbmV3VmFsdWUpCit7CisgICAgcmV0dXJuIHdlYWtDb21wYXJlQW5kU3dhcChyZWludGVy
cHJldF9jYXN0PHZvaWQqdm9sYXRpbGUqPihsb2NhdGlvbiksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGV4cGVjdGVkKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmV3VmFsdWUpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKICNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FGRVJFRkNPVU5U
RUQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5OTIy
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5
KQpAQCAtODA4LDEyICs4MDgsMTMgQEAKICNkZWZpbmUgRU5BQkxFX0RFQlVHX1dJVEhfQlJFQUtQ
T0lOVCAwCiAjZGVmaW5lIEVOQUJMRV9TQU1QTElOR19DT1VOVEVSUyAwCiAjZGVmaW5lIEVOQUJM
RV9TQU1QTElOR19GTEFHUyAwCisjZGVmaW5lIEVOQUJMRV9TQU1QTElOR19SRUdJT05TIDEKICNk
ZWZpbmUgRU5BQkxFX09QQ09ERV9TQU1QTElORyAwCiAjZGVmaW5lIEVOQUJMRV9DT0RFQkxPQ0tf
U0FNUExJTkcgMAogI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpICYmICFFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQogI2Vycm9yICJDT0RFQkxPQ0tfU0FNUExJTkcgcmVxdWlyZXMgT1BDT0RF
X1NBTVBMSU5HIgogI2VuZGlmCi0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykgfHwgRU5BQkxF
KFNBTVBMSU5HX0ZMQUdTKQorI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpIHx8IEVOQUJMRShT
QU1QTElOR19GTEFHUykgfHwgRU5BQkxFKFNBTVBMSU5HX1JFR0lPTlMpCiAjZGVmaW5lIEVOQUJM
RV9TQU1QTElOR19USFJFQUQgMQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvU3BlY3RydW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1NwZWN0cnVtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Nw
ZWN0cnVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BlY3RydW1faAorI2RlZmlu
ZSBTcGVjdHJ1bV9oCisKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgi
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NsYXNzIFNwZWN0cnVtIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1l
IEhhc2hNYXA8VCwgdW5zaWduZWQgbG9uZz46Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVk
ZWYgdHlwZW5hbWUgSGFzaE1hcDxULCB1bnNpZ25lZCBsb25nPjo6Y29uc3RfaXRlcmF0b3IgY29u
c3RfaXRlcmF0b3I7CisgICAgCisgICAgU3BlY3RydW0oKSB7IH0KKyAgICAKKyAgICB2b2lkIGFk
ZChjb25zdCBUJiBrZXksIHVuc2lnbmVkIGxvbmcgY291bnQgPSAxKQorICAgIHsKKyAgICAgICAg
c3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBjb3VudCk7
CisgICAgICAgIGlmICghcmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgIHJlc3VsdC5maXJzdC0+
c2Vjb25kICs9IGNvdW50OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsb25nIGdldChjb25z
dCBUJiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRvciBpdGVyID0gbV9t
YXAuZmluZChrZXkpOworICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgIH0KKyAgICAK
KyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBpdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgCisgICAgc3RydWN0IEtl
eUFuZENvdW50IHsKKyAgICAgICAgS2V5QW5kQ291bnQoKSB7IH0KKyAgICAgICAgCisgICAgICAg
IEtleUFuZENvdW50KGNvbnN0IFQmIGtleSwgdW5zaWduZWQgbG9uZyBjb3VudCkKKyAgICAgICAg
ICAgIDoga2V5KGtleSkKKyAgICAgICAgICAgICwgY291bnQoY291bnQpCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgS2V5QW5kQ291
bnQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY291bnQgIT0gb3Ro
ZXIuY291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50IDwgb3RoZXIuY291bnQ7Cisg
ICAgICAgICAgICAvLyBUaGlzIGNhdXNlcyBsb3dlci1vcmRlcmVkIGtleXMgYmVpbmcgcmV0dXJu
ZWQgZmlyc3Q7IHRoaXMgaXMgcmVhbGx5IGp1c3QKKyAgICAgICAgICAgIC8vIGhlcmUgdG8gbWFr
ZSBzdXJlIHRoYXQgdGhlIG9yZGVyIGlzIHNvbWV3aGF0IGRldGVybWluaXN0aWMgcmF0aGVyIHRo
YW4gYmVpbmcKKyAgICAgICAgICAgIC8vIGRldGVybWluZWQgYnkgaGFzaGluZy4KKyAgICAgICAg
ICAgIHJldHVybiBrZXkgPiBvdGhlci5rZXk7CisgICAgICAgIH0KKworICAgICAgICBUIGtleTsK
KyAgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudDsKKyAgICB9OworICAgIAorICAgIC8vIFJldHVy
bnMgYSBsaXN0IG9yZGVyZWQgZnJvbSBsb3dlc3QtY291bnQgdG8gaGlnaGVzdC1jb3VudC4KKyAg
ICBWZWN0b3I8S2V5QW5kQ291bnQ+IGJ1aWxkTGlzdCgpIGNvbnN0CisgICAgeworICAgICAgICBW
ZWN0b3I8S2V5QW5kQ291bnQ+IGxpc3Q7CisgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRl
ciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIGxpc3QuYXBw
ZW5kKEtleUFuZENvdW50KGl0ZXItPmZpcnN0LCBpdGVyLT5zZWNvbmQpKTsKKyAgICAgICAgCisg
ICAgICAgIHN0ZDo6c29ydChsaXN0LmJlZ2luKCksIGxpc3QuZW5kKCkpOworICAgICAgICByZXR1
cm4gbGlzdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhhc2hNYXA8VCwgdW5zaWduZWQg
bG9uZz4gbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTcGVj
dHJ1bTsKKworI2VuZGlmIC8vIFNwZWN0cnVtX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvd3RmLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0
Zi5wcmkJKHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYu
cHJpCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIHd0
Zi9SZWZQdHJIYXNoTWFwLmggXAogICAgIHd0Zi9SZXRhaW5QdHIuaCBcCiAgICAgd3RmL1NIQTEu
aCBcCisgICAgd3RmL1NwZWN0cnVtLmggXAogICAgIHd0Zi9TdGFja0JvdW5kcy5oIFwKICAgICB3
dGYvU3RhdGljQ29uc3RydWN0b3JzLmggXAogICAgIHd0Zi9TdGRMaWJFeHRyYXMuaCBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5MjU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEx
LTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNDIHNo
b3VsZCBiZSBhYmxlIHRvIHNhbXBsZSBpdHNlbGYgaW4gYSBtb3JlIGZsZXhpYmxlIHdheSB0aGFu
IGp1c3Qgc2FtcGxpbmcgZmxhZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcxNTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91
Z2guCisgICAgICAgIAorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TcGVjdHJ1bS5o
OiBBZGRlZC4KKwogMjAxMS0xMS0wMyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCiAgICAgICAgIERlLXZpcnR1YWxpemUgSlNPYmplY3Q6OmNsYXNzTmFtZQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TcGVjdHJ1bS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvU3BlY3RydW0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvU3BlY3RydW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NwZWN0cnVtLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiA5OTI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDExLTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgSlNDIHNob3VsZCBiZSBhYmxlIHRvIHNhbXBsZSBpdHNlbGYgaW4gYSBt
b3JlIGZsZXhpYmxlIHdheSB0aGFuIGp1c3Qgc2FtcGxpbmcgZmxhZ3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNTIyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSBu
byBmdW5jdGlvbmFsaXR5IGNoYW5nZWQuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93
dGYvU3BlY3RydW0uaDogQWRkZWQuCisKIDIwMTEtMTEtMDIgIFhpYW9tZWkgSmkgIDx4amlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEVuYWJsZSBjdHJsLWFycm93IG1vdmUgY3Vyc29yIGJ5IHdv
cmQgaW4gdmlzdWFsIG9yZGVyIGluIGNyLXdpbiBieSBjb21tYW5kIGxpbmUgZmxhZy4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TcGVjdHJ1bS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TcGVjdHJ1bS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0
cnVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9TcGVjdHJ1bS5oPgo=
</data>
<flag name="commit-queue"
          id="112040"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113621</attachid>
            <date>2011-11-03 22:07:10 -0700</date>
            <delta_ts>2011-11-05 17:06:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>samplingregion_patch_6.diff</filename>
            <type>text/plain</type>
            <size>31386</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAK
KzIwMTEtMTEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0Mgc2hvdWxkIGJlIGFibGUgdG8gc2FtcGxlIGl0c2VsZiBpbiBhIG1vcmUgZmxleGlibGUgd2F5
IHRoYW4ganVzdCBzYW1wbGluZyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJy
YWNsb3VnaC4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgY29uc3RydWN0IHRoYXQgbG9va3Mg
bGlrZSBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigibmFtZSIpLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6TG9ja2VyKToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcik6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUmVnaW9uOjpzYW1wbGUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1JlZ2lvbjo6ZHVtcCk6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpkdW1wSW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1RocmVhZDo6dGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKiBieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OlNhbXBsaW5n
UmVnaW9uKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246On5TYW1wbGluZ1JlZ2lvbik6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpleGNoYW5nZUN1cnJlbnQpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29s
bGVjdCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHA6CisgICAgICAgIChKU0M6
OlZUYWJsZVNwZWN0cnVtOjpjb3VudFZQdHIpOgorICAgICAgICAoSlNDOjpWVGFibGVTcGVjdHJ1
bTo6ZHVtcCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5oOgorICAgICAgICAqIGpz
Yy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAgICAg
ICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNh
bGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
ckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAo
V1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXApOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAg
ICAgICAqIHd0Zi9TcGVjdHJ1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3BlY3RydW06OlNw
ZWN0cnVtKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmFkZCk6CisgICAgICAgIChXVEY6OlNw
ZWN0cnVtOjpnZXQpOgorICAgICAgICAoV1RGOjpTcGVjdHJ1bTo6YmVnaW4pOgorICAgICAgICAo
V1RGOjpTcGVjdHJ1bTo6ZW5kKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OktleUFuZENvdW50
OjpLZXlBbmRDb3VudCk6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjpLZXlBbmRDb3VudDo6b3Bl
cmF0b3I8KToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmJ1aWxkTGlzdCk6CisgICAgICAgICog
d3RmL3d0Zi5wcmk6CisKIDIwMTEtMTEtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIENoYW5nZSByZW1haW5pbmcgY2FsbGVycyBvZiByZWxlYXNlUmVmIHRvIGNh
bGwgbGVha1JlZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksNyBAQCBfX1pOM0pTQzE0SlNHbG9i
YWxPYmplY3Q2c19pbmZvRQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgogX19aTjNKU0Mx
NE1hY2hpbmVUaHJlYWRzMTZhZGRDdXJyZW50VGhyZWFkRXYKIF9fWk4zSlNDMTRNYXJrU3RhY2tB
cnJheTZleHBhbmRFdgorX19aTjNKU0MxNFNhbXBsaW5nUmVnaW9uNGR1bXBFdgogX19aTjNKU0Mx
NFNhbXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNXN0YXJ0RWoK
IF9fWk4zSlNDMTRTY29wZUNoYWluTm9kZTZzX2luZm9FCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIk1haW5U
aHJlYWQuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAj
aW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQwNCw2ICs0MDUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAjZW5kaWYKIAogICAgIC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0
aW5nIEpTR2xvYmFsRGF0YS4KKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAg
SlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKICAgICAvLyBXZSBjYW4ndCB1c2UgZGVzdHJ1
Y3RvcnMgaW4gdGhlIGZvbGxvd2luZyBjb2RlIGJlY2F1c2UgaXQgdXNlcyBXaW5kb3dzCkBAIC00
NzIsNiArNDc0LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
I2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICBTYW1wbGluZ0ZsYWdzOjpzdG9wKCk7CiAj
ZW5kaWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBTYW1wbGluZ1JlZ2lvbjo6
ZHVtcCgpOworI2VuZGlmCiAgICAgZ2xvYmFsRGF0YS5kdW1wU2FtcGxlRGF0YShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIEFi
c3RyYWN0U2FtcGxpbmdDb3VudGVyOjpkdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
Zgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gOTkyMjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSw3IEBA
IEVYUE9SVFMKICAgICA/ZGV0YWNoVGhyZWFkQFdURkBAWUFYSUBaCiAgICAgP2RpZFRpbWVPdXRA
VGltZW91dENoZWNrZXJASlNDQEBRQUVfTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP2R0b2FAV1RG
QEBZQVhRQUROQUFfTkFBSEFBSUBaCisgICAgP2R1bXBAU2FtcGxpbmdSZWdpb25ASlNDQEBTQVhY
WgogICAgID9kdW1wU2FtcGxlRGF0YUBKU0dsb2JhbERhdGFASlNDQEBRQUVYUEFWRXhlY1N0YXRl
QDJAQFoKICAgICA/ZW1wdHlAU3RyaW5nSW1wbEBXVEZAQFNBUEFWMTJAWFoKICAgICA/ZW51bWVy
YWJsZUBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQkVfTlhaCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQAogCQkwQkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYy
OEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMTZENzI2
MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZl
Y3Rvci5jcHAgKi87IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkU1
QkY3MTQ2MzU3RDUwMDNFQjJFQiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRTVCRjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0
cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4
RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZB
NDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4
RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MTMsNiArODE0LDcg
QEAKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8q
IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJFNUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3RydW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3BlY3RydW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyog
RGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODU1LDYgKzE4NTcsNyBAQAogCQk2
NTE2MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjJFNUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3Ry
dW0uaCAqLywKIAkJCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8s
CiAJCQkJMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAog
CQkJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovLApAQCAtMjg5
Nyw2ICsyOTAwLDcgQEAKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNv
dmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZp
cnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMx
RjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkU1QkY3MTQ2MzU3RDUw
MDNFQjJFQiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkocmV2aXNpb24gOTkyMjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODMsNiArODMsOTMgQEAgdm9pZCBTYW1wbGluZ0ZsYWdzOjpzdGFydCgp
IHt9CiB2b2lkIFNhbXBsaW5nRmxhZ3M6OnN0b3AoKSB7fQogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
U0FNUExJTkdfUkVHSU9OUykKK3ZvbGF0aWxlIHVpbnRwdHJfdCBTYW1wbGluZ1JlZ2lvbjo6c19j
dXJyZW50T3JSZXNlcnZlZDsKK1NwZWN0cnVtPGNvbnN0IGNoYXIqPiogU2FtcGxpbmdSZWdpb246
OnNfc3BlY3RydW07Cit1bnNpZ25lZCBsb25nIFNhbXBsaW5nUmVnaW9uOjpzX25vbmVPZlRoZUFi
b3ZlOwordW5zaWduZWQgU2FtcGxpbmdSZWdpb246OnNfbnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1w
OworCitTYW1wbGluZ1JlZ2lvbjo6TG9ja2VyOjpMb2NrZXIoKQoreworICAgIHVpbnRwdHJfdCBw
cmV2aW91czsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBwcmV2aW91cyA9IHNfY3VycmVu
dE9yUmVzZXJ2ZWQ7CisgICAgICAgIGlmIChwcmV2aW91cyAmIDEpIHsKKyNpZiBPUyhVTklYKQor
ICAgICAgICAgICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZzX2N1cnJl
bnRPclJlc2VydmVkLCBwcmV2aW91cywgcHJldmlvdXMgfCAxKSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworU2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcigpCit7CisgICAg
Ly8gV2UgZG9uJ3QgbmVlZCB0aGUgQ0FTLCBidXQgd2UgZG8gaXQgb3V0IG9mIGFuCisgICAgLy8g
YWJ1bmRhbmNlIG9mIGNhdXRpb24gKGFuZCBiZWNhdXNlIGl0IGdpdmVzIHVzIGEgbWVtb3J5IGZl
bmNlLCB3aGljaCBpcworICAgIC8vIG5ldmVyIGJhZCkuCisgICAgdWludHB0cl90IHByZXZpb3Vz
OworICAgIGRvIHsKKyAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVkOworICAg
IH0gd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmc19jdXJyZW50T3JSZXNlcnZlZCwg
cHJldmlvdXMsIHByZXZpb3VzICYgfjEpKTsKK30KKwordm9pZCBTYW1wbGluZ1JlZ2lvbjo6c2Ft
cGxlKCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgd2UgbG9jayBzX2N1cnJlbnQuCisgICAgTG9ja2Vy
IGxvY2tlcjsKKyAgICAKKyAgICAvLyBDcmVhdGUgYSBzcGVjdHJ1bSBpZiB3ZSBkb24ndCBoYXZl
IG9uZSBhbHJlYWR5LgorICAgIGlmICghc19zcGVjdHJ1bSkKKyAgICAgICAgc19zcGVjdHJ1bSA9
IG5ldyBTcGVjdHJ1bTxjb25zdCBjaGFyKj4oKTsKKyAgICAKKyAgICBBU1NFUlQoc19jdXJyZW50
T3JSZXNlcnZlZCAmIDEpOworICAgIAorICAgIC8vIFdhbGsgdGhlIHJlZ2lvbiBzdGFjaywgYW5k
IHJlY29yZCBlYWNoIHJlZ2lvbiB3ZSBzZWUuCisgICAgU2FtcGxpbmdSZWdpb24qIHJlZ2lvbiA9
IGJpdHdpc2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQgJiB+MSk7
CisgICAgaWYgKHJlZ2lvbikgeworICAgICAgICBmb3IgKDsgcmVnaW9uOyByZWdpb24gPSByZWdp
b24tPm1fcHJldmlvdXMpCisgICAgICAgICAgICBzX3NwZWN0cnVtLT5hZGQocmVnaW9uLT5tX25h
bWUpOworICAgIH0gZWxzZQorICAgICAgICBzX25vbmVPZlRoZUFib3ZlKys7CisgICAgCisgICAg
aWYgKHNfbnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1wKysgPT0gU2FtcGxpbmdUaHJlYWQ6OnNfaGVy
dHopIHsKKyAgICAgICAgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1bXAgPSAwOworICAgICAgICBk
dW1wSW50ZXJuYWwoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2FtcGxpbmdSZWdpb246OmR1bXAoKQor
eworICAgIExvY2tlciBsb2NrZXI7CisgICAgCisgICAgZHVtcEludGVybmFsKCk7Cit9CisKK3Zv
aWQgU2FtcGxpbmdSZWdpb246OmR1bXBJbnRlcm5hbCgpCit7CisgICAgaWYgKCFzX3NwZWN0cnVt
KSB7CisgICAgICAgIHByaW50ZigiXG5TYW1wbGluZ1JlZ2lvbjogd2FzIG5ldmVyIHNhbXBsZWQu
XG5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFZlY3RvcjxTcGVjdHJ1
bTxjb25zdCBjaGFyKj46OktleUFuZENvdW50PiBsaXN0ID0gc19zcGVjdHJ1bS0+YnVpbGRMaXN0
KCk7CisgICAgCisgICAgdW5zaWduZWQgbG9uZyB0b3RhbCA9IHNfbm9uZU9mVGhlQWJvdmU7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC5zaXplKCk7IGktLTspCisgICAgICAgIHRvdGFsICs9
IGxpc3RbaV0uY291bnQ7CisgICAgCisgICAgcHJpbnRmKCJcblNhbXBsaW5nUmVnaW9uOiBzYW1w
bGUgY291bnRzIGZvciByZWdpb25zOiAoJWx1IHNhbXBsZXMpXG4iLCB0b3RhbCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBsaXN0LnNpemUoKTsgaS0tOykKKyAgICAgICAgcHJpbnRmKCIgICAg
JTMuMmxmJSUgICVzXG4iLCAoMTAwLjAgKiBsaXN0W2ldLmNvdW50KSAvIHRvdGFsLCBsaXN0W2ld
LmtleSk7Cit9CisjZWxzZSAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKK3ZvaWQgU2FtcGxp
bmdSZWdpb246OmR1bXAoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykK
KwogLyoKICAgU3RhcnQgd2l0aCBmbGFnIDE2IHNldC4KICAgQnkgZG9pbmcgdGhpcyB0aGUgbW9u
aXRvcmluZyBvZiBsb3dlciB2YWx1ZWQgZmxhZ3Mgd2lsbCBiZSBtYXNrZWQgb3V0CkBAIC0xMzEs
NiArMjE4LDkgQEAgdm9pZCogU2FtcGxpbmdUaHJlYWQ6OnRocmVhZFN0YXJ0RnVuYyh2bwogI2lm
IEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICAgICAgU2FtcGxpbmdGbGFnczo6c2FtcGxlKCk7
CiAjZW5kaWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICAgICAgU2FtcGxpbmdS
ZWdpb246OnNhbXBsZSgpOworI2VuZGlmCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAg
ICAgICAgU2FtcGxpbmdUb29sOjpzYW1wbGUoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gOTkyMjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJT
YW1wbGluZ0NvdW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC05Myw2ICs5NSw4OSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH07CiAK
KyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBjbGFzcyBTYW1wbGluZ1JlZ2lvbiB7
CisgICAgcHVibGljOgorICAgICAgICAvLyBDcmVhdGUgYSBzY29wZWQgc2FtcGxpbmcgcmVnaW9u
IHVzaW5nIGEgQyBzdHJpbmcgY29uc3RhbnQgbmFtZSB0aGF0IGRlc2NyaWJlcworICAgICAgICAv
LyB3aGF0IHlvdSBhcmUgZG9pbmcuIFRoaXMgbXVzdCBiZSBhIHN0cmluZyBjb25zdGFudCB0aGF0
IHBlcnNpc3RzIGZvciB0aGUKKyAgICAgICAgLy8gbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MgYW5k
IGlzIGltbXV0YWJsZS4KKyAgICAgICAgU2FtcGxpbmdSZWdpb24oY29uc3QgY2hhciogbmFtZSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICAg
ICAgICAgIG1fbmFtZSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX25hbWUgPSBuYW1lOworICAgICAgICAgICAg
ZXhjaGFuZ2VDdXJyZW50KHRoaXMsICZtX3ByZXZpb3VzKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
bV9wcmV2aW91cyB8fCBtX3ByZXZpb3VzID4gdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIH5TYW1wbGluZ1JlZ2lvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9u
YW1lKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QVNTRVJUKGJpdHdpc2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQg
JiB+MSkgPT0gdGhpcyk7CisgICAgICAgICAgICBleGNoYW5nZUN1cnJlbnQobV9wcmV2aW91cyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHNhbXBsZSgpOworICAg
ICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZHVtcCgpOworICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKiBt
X3ByZXZpb3VzOworCisgICAgICAgIHN0YXRpYyB2b2lkIGV4Y2hhbmdlQ3VycmVudChTYW1wbGlu
Z1JlZ2lvbiogY3VycmVudCwgU2FtcGxpbmdSZWdpb24qKiBwcmV2aW91c1B0ciA9IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBwcmV2aW91czsKKyAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVk
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgcmVzZXJ2ZWQg
KGkuZS4gc2FtcGxpbmcgdGhyZWFkIGlzIHJlYWRpbmcgaXQpLCBsb29wIGFyb3VuZC4KKyAgICAg
ICAgICAgICAgICBpZiAocHJldmlvdXMgJiAxKSB7CisjaWYgT1MoVU5JWCkKKyAgICAgICAgICAg
ICAgICAgICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gSWYgd2UncmUgZ29pbmcgdG8gQ0FTLCB0aGVuIG1ha2Ugc3VyZSBwcmV2aW91cyBpcyBz
ZXQuCisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUHRyKQorICAgICAgICAgICAgICAgICAg
ICAqcHJldmlvdXNQdHIgPSBiaXR3aXNlX2Nhc3Q8U2FtcGxpbmdSZWdpb24qPihwcmV2aW91cyk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVB
bmRTd2FwKCZzX2N1cnJlbnRPclJlc2VydmVkLCBwcmV2aW91cywgYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oY3VycmVudCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZHVtcEludGVybmFs
KCk7CisKKyAgICAgICAgY2xhc3MgTG9ja2VyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgTG9ja2VyKCk7CisgICAgICAgICAgICB+TG9ja2VyKCk7CisgICAgICAgIH07CisKKyAgICAg
ICAgc3RhdGljIHZvbGF0aWxlIHVpbnRwdHJfdCBzX2N1cnJlbnRPclJlc2VydmVkOworICAgICAg
ICAKKyAgICAgICAgLy8gcmVseSBvbiBpZGVudGl0eSBoYXNoaW5nIG9mIHN0cmluZyBjb25zdGFu
dHMKKyAgICAgICAgc3RhdGljIFNwZWN0cnVtPGNvbnN0IGNoYXIqPiogc19zcGVjdHJ1bTsKKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNfbm9uZU9mVGhlQWJvdmU7Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1
bXA7CisgICAgfTsKKyNlbHNlIC8vIEVOQUJMRShTQU1QTElOR19SRUdJT05TKQorICAgIGNsYXNz
IFNhbXBsaW5nUmVnaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKGNv
bnN0IGNoYXIqKSB7IH0KKyAgICAgICAgdm9pZCBkdW1wKCk7CisgICAgfTsKKyNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFz
cyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw4IEBA
IGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ28KIAogSlNPYmplY3QqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkJ5dGVjb2RlIEdlbmVyYXRpb24iKTsKKyAgICAKICAgICBtX2NvZGVCbG9jay0+
c2V0VGhpc1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpOwogCiAgICAgbV9zY29wZU5v
ZGUtPmVtaXRCeXRlY29kZSgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0
aW9uLCBDb21waWxlT3RoZXIgfTsKIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29t
cGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUm
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQog
eworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERy
aXZlcikiKTsKKyAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwogICAgIEdyYXBoIGRmZzsKICAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0
YSwgY29kZUJsb2NrKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NTMsNiArNTUzLDggQEAgdm9pZCBIZWFwOjpnZXRDb25zZXJ2YXRpdmVS
ZWdpc3RlclJvb3RzKAogCiB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKIHsKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBUcmFj
aW5nIik7CisKICAgICBDT05EX0dDUEhBU0UoZnVsbEdDLCBNYXJrRnVsbFJvb3RzLCBNYXJrWW91
bmdSb290cyk7CiAgICAgVU5VU0VEX1BBUkFNKGZ1bGxHQyk7CiAgICAgQVNTRVJUKGlzVmFsaWRU
aHJlYWRTdGF0ZShtX2dsb2JhbERhdGEpKTsKQEAgLTc1OSw2ICs3NjEsOCBAQCB2b2lkIEhlYXA6
OmNvbGxlY3RBbGxHYXJiYWdlKCkKIAogdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3
ZWVwVG9nZ2xlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdl
IENvbGxlY3Rpb24iKTsKKyAgICAKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogICAgIEFTU0VSVChn
bG9iYWxEYXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElk
ZW50aWZpZXJUYWJsZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwpAQCAtNzky
LDYgKzc5Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAg
ICB9CiAKICAgICBpZiAoc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCkgeworICAgICAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBTd2VlcGluZyIpOwog
ICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nKTsKICAgICAgICAgc3dlZXAoKTsKICAgICAgICAgc2hy
aW5rKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3Ry
dW0uY3BwCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZU
YWJsZVNwZWN0cnVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksNyBAQCBWVGFibGVT
cGVjdHJ1bTo6flZUYWJsZVNwZWN0cnVtKCkKIAogdm9pZCBWVGFibGVTcGVjdHJ1bTo6Y291bnRW
UHRyKHZvaWQqIHZUYWJsZVBvaW50ZXIpCiB7Ci0gICAgc3RkOjpwYWlyPEhhc2hNYXA8dm9pZCos
IHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9tYXAuYWRkKHZUYWJs
ZVBvaW50ZXIsIDEpOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkKLSAgICAgICAgcmVzdWx0LmZp
cnN0LT5zZWNvbmQrKzsKKyAgICBhZGQodlRhYmxlUG9pbnRlcik7CiB9CiAKIHZvaWQgVlRhYmxl
U3BlY3RydW06OmNvdW50KEpTQ2VsbCogY2VsbCkKQEAgLTU5LDQ1ICs1NywxNyBAQCB2b2lkIFZU
YWJsZVNwZWN0cnVtOjpjb3VudChKU0NlbGwqIGNlbGwpCiAgICAgY291bnRWUHRyKGNlbGwtPnZw
dHIoKSk7CiB9CiAKLXN0cnVjdCBWVGFibGVBbmRDb3VudCB7Ci0gICAgdm9pZCogdnRhYmxlOwot
ICAgIHVuc2lnbmVkIGxvbmcgY291bnQ7Ci0gICAgCi0gICAgVlRhYmxlQW5kQ291bnQoKSB7IH0K
LSAgICAKLSAgICBWVGFibGVBbmRDb3VudCh2b2lkKiB2dGFibGUsIHVuc2lnbmVkIGxvbmcgY291
bnQpCi0gICAgICAgIDogdnRhYmxlKHZ0YWJsZSkKLSAgICAgICAgLCBjb3VudChjb3VudCkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZUYWJsZUFuZENvdW50
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCAhPSBvdGhlci5jb3VudCkK
LSAgICAgICAgICAgIHJldHVybiBjb3VudCA8IG90aGVyLmNvdW50OwotICAgICAgICByZXR1cm4g
dnRhYmxlID4gb3RoZXIudnRhYmxlOyAvLyB0aGlzIHJlc3VsdHMgaW4gbG93ZXItYWRkcmVzc2Vk
IHZ0YWJsZXMgYmVpbmcgcHJpbnRlZCBmaXJzdAotICAgIH0KLX07Ci0KIHZvaWQgVlRhYmxlU3Bl
Y3RydW06OmR1bXAoRklMRSogb3V0cHV0LCBjb25zdCBjaGFyKiBjb21tZW50KQogewogICAgIGZw
cmludGYob3V0cHV0LCAiJXM6XG4iLCBjb21tZW50KTsKICAgICAKLSAgICBIYXNoTWFwPHZvaWQq
LCB1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwotICAgIEhh
c2hNYXA8dm9pZCosIHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsK
LSAgICAKLSAgICBWZWN0b3I8VlRhYmxlQW5kQ291bnQsIDA+IGxpc3Q7Ci0gICAgCi0gICAgZm9y
IChIYXNoTWFwPHZvaWQqLCB1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBp
dGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBsaXN0LmFwcGVuZChWVGFibGVBbmRDb3VudChp
dGVyLT5maXJzdCwgaXRlci0+c2Vjb25kKSk7Ci0gICAgCi0gICAgc3RkOjpzb3J0KGxpc3QuYmVn
aW4oKSwgbGlzdC5lbmQoKSk7CisgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0ID0gYnVpbGRM
aXN0KCk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSBsaXN0LnNpemUoKTsgaW5kZXgt
LSA+IDA7KSB7Ci0gICAgICAgIFZUYWJsZUFuZENvdW50IGl0ZW0gPSBsaXN0LmF0KGluZGV4KTsK
KyAgICAgICAgS2V5QW5kQ291bnQgaXRlbSA9IGxpc3QuYXQoaW5kZXgpOwogI2lmIFBMQVRGT1JN
KE1BQykKICAgICAgICAgRGxfaW5mbyBpbmZvOwotICAgICAgICBpZiAoZGxhZGRyKGl0ZW0udnRh
YmxlLCAmaW5mbykpIHsKKyAgICAgICAgaWYgKGRsYWRkcihpdGVtLmtleSwgJmluZm8pKSB7CiAg
ICAgICAgICAgICBjaGFyKiBmaW5kUmVzdWx0ID0gc3RycmNocihpbmZvLmRsaV9mbmFtZSwgJy8n
KTsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0cmlwcGVkRmlsZU5hbWU7CiAgICAgICAgICAg
ICAKQEAgLTEwNiwxMSArNzYsMTEgQEAgdm9pZCBWVGFibGVTcGVjdHJ1bTo6ZHVtcChGSUxFKiBv
dXRwdXQsIAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0cmlwcGVkRmlsZU5h
bWUgPSBpbmZvLmRsaV9mbmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZnByaW50Zihv
dXRwdXQsICIgICAgJXM6JXMoJXApOiAlbHVcbiIsIHN0cmlwcGVkRmlsZU5hbWUsIGluZm8uZGxp
X3NuYW1lLCBpdGVtLnZ0YWJsZSwgaXRlbS5jb3VudCk7CisgICAgICAgICAgICBmcHJpbnRmKG91
dHB1dCwgIiAgICAlczolcyglcCk6ICVsdVxuIiwgc3RyaXBwZWRGaWxlTmFtZSwgaW5mby5kbGlf
c25hbWUsIGl0ZW0ua2V5LCBpdGVtLmNvdW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAjZW5kaWYKLSAgICAgICAgZnByaW50ZihvdXRwdXQsICIgICAgJXA6ICVsdVxuIiwg
aXRlbS52dGFibGUsIGl0ZW0uY291bnQpOworICAgICAgICBmcHJpbnRmKG91dHB1dCwgIiAgICAl
cDogJWx1XG4iLCBpdGVtLmtleSwgaXRlbS5jb3VudCk7CiAgICAgfQogICAgIAogICAgIGZmbHVz
aChvdXRwdXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3Ry
dW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVj
dHJ1bS5oCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZU
YWJsZVNwZWN0cnVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxMyBAQAogI2RlZmlu
ZSBWVGFibGVTcGVjdHJ1bV9oCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0cnVtLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBKU0NlbGw7CiAKLWNsYXNzIFZUYWJsZVNwZWN0cnVtIHsKK2NsYXNzIFZUYWJsZVNw
ZWN0cnVtOiBTcGVjdHJ1bTx2b2lkKj4gewogcHVibGljOgogICAgIFZUYWJsZVNwZWN0cnVtKCk7
CiAgICAgflZUYWJsZVNwZWN0cnVtKCk7CkBAIC00Miw5ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNvdW50KEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZHVtcChGSUxFKiBvdXRwdXQsIGNv
bnN0IGNoYXIqIGNvbW1lbnQpOwotICAgIAotcHJpdmF0ZToKLSAgICBIYXNoTWFwPHZvaWQqLCB1
bnNpZ25lZCBsb25nPiBtX21hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjks
NiArMTAyOSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyOjpwYXJzZShKU0cKIHRl
bXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgogUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1l
dGVycywgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBEZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZXhlY1N0YXRlLCBKU09iamVjdCoq
IGV4Y2VwdGlvbikKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiUGFyc2lu
ZyIpOwogICAgIFBhcnNlciBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBz
dHJpY3RuZXNzLCBwYXJzZXJNb2RlKTsKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlPFBhcnNlZE5v
ZGU+KGxleGljYWxHbG9iYWxPYmplY3QsIGRlYnVnZ2VyLCBleGVjU3RhdGUsIGV4Y2VwdGlvbik7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw4IEBAIEpTT2JqZWN0KiBF
dmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXoKIAogSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6OkJhc2VsaW5lSklUID8gIkJhc2Vs
aW5lIENvbXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21waWxhdGlvbiAoVE9UQUwpIik7Cisg
ICAgCiAjaWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogI2VuZGlm
CkBAIC0yODAsNiArMjgyLDggQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxl
T3B0aQogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVj
U3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5
cGUgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFM
KSIgOiAiREZHIENvbXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkK
ICAgICBVTlVTRURfUEFSQU0oaml0VHlwZSk7CiAjZW5kaWYKQEAgLTQ1NSw2ICs0NTksOCBAQCBQ
YXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiAKIEpTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkK
IHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6
OkJhc2VsaW5lSklUID8gIkJhc2VsaW5lIENvbXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21w
aWxhdGlvbiAoVE9UQUwpIik7CisgICAgCiAjaWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKQEAgLTUxNSw2ICs1MjEsOCBA
QCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKIEpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5cGUgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFMKSIgOiAi
REZHIENvbXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkKICAgICBV
TlVTRURfUEFSQU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYs
NyBAQCBpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3YXAodW5zaWduZWQqCiAgICAgYXNtIHZv
bGF0aWxlKAogICAgICAgICAibG9jazsgY21weGNoZ2wgJTMsICUyXG5cdCIKICAgICAgICAgInNl
dGUgJTEiCi0gICAgICAgIDogIithIihleHBlY3RlZCksICI9ciIocmVzdWx0KSwgIittIigqbG9j
YXRpb24pCisgICAgICAgIDogIithIihleHBlY3RlZCksICI9cSIocmVzdWx0KSwgIittIigqbG9j
YXRpb24pCiAgICAgICAgIDogInIiKG5ld1ZhbHVlKQogICAgICAgICA6ICJtZW1vcnkiCiAgICAg
ICAgICk7CkBAIC0xNDAsNiArMTQwLDM4IEBAIGlubGluZSBib29sIHdlYWtDb21wYXJlQW5kU3dh
cCh1bnNpZ25lZCoKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3YXAo
dm9pZCp2b2xhdGlsZSogbG9jYXRpb24sIHZvaWQqIGV4cGVjdGVkLCB2b2lkKiBuZXdWYWx1ZSkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IENPTVBBUkVfQU5EX1NXQVAgb24gb3RoZXIgYXJj
aGl0ZWN0dXJlcyBhbmQgY29tcGlsZXJzLiBDdXJyZW50bHkKKyAgICAvLyBpdCBvbmx5IHdvcmtz
IG9uIFg4NiBvciBYODZfNjQgd2l0aCBhIEdDQy1zdHlsZSBjb21waWxlci4KKyNpZiBFTkFCTEUo
Q09NUEFSRV9BTkRfU1dBUCkKKyAgICBib29sIHJlc3VsdDsKKyAgICBhc20gdm9sYXRpbGUoCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgImxvY2s7IGNtcHhjaGdxICUzLCAlMlxuXHQiCisjZWxz
ZQorICAgICAgICAibG9jazsgY21weGNoZ2wgJTMsICUyXG5cdCIKKyNlbmRpZgorICAgICAgICAi
c2V0ZSAlMSIKKyAgICAgICAgOiAiK2EiKGV4cGVjdGVkKSwgIj1xIihyZXN1bHQpLCAiK20iKCps
b2NhdGlvbikKKyAgICAgICAgOiAiciIobmV3VmFsdWUpCisgICAgICAgIDogIm1lbW9yeSIKKyAg
ICAgICAgKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UgLy8gRU5BQkxFKENPTVBBUkVfQU5E
X1NXQVApCisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZXhw
ZWN0ZWQpOworICAgIFVOVVNFRF9QQVJBTShuZXdWYWx1ZSk7CisgICAgQ1JBU0goKTsKKyAgICBy
ZXR1cm4gMDsKKyNlbmRpZiAvLyBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKK30KKworaW5saW5l
IGJvb2wgd2Vha0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIHVpbnRwdHJfdCogbG9jYXRpb24sIHVp
bnRwdHJfdCBleHBlY3RlZCwgdWludHB0cl90IG5ld1ZhbHVlKQoreworICAgIHJldHVybiB3ZWFr
Q29tcGFyZUFuZFN3YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKnZvbGF0aWxlKj4obG9jYXRpb24p
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihleHBlY3RlZCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG5ld1ZhbHVlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjaWYgVVNFKExPQ0tG
UkVFX1RIUkVBRFNBRkVSRUZDT1VOVEVEKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxh
dGZvcm0uaAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwOCwxMiArODA4LDEzIEBACiAjZGVmaW5lIEVO
QUJMRV9ERUJVR19XSVRIX0JSRUFLUE9JTlQgMAogI2RlZmluZSBFTkFCTEVfU0FNUExJTkdfQ09V
TlRFUlMgMAogI2RlZmluZSBFTkFCTEVfU0FNUExJTkdfRkxBR1MgMAorI2RlZmluZSBFTkFCTEVf
U0FNUExJTkdfUkVHSU9OUyAwCiAjZGVmaW5lIEVOQUJMRV9PUENPREVfU0FNUExJTkcgMAogI2Rl
ZmluZSBFTkFCTEVfQ09ERUJMT0NLX1NBTVBMSU5HIDAKICNpZiBFTkFCTEUoQ09ERUJMT0NLX1NB
TVBMSU5HKSAmJiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICNlcnJvciAiQ09ERUJMT0NLX1NB
TVBMSU5HIHJlcXVpcmVzIE9QQ09ERV9TQU1QTElORyIKICNlbmRpZgotI2lmIEVOQUJMRShPUENP
REVfU0FNUExJTkcpIHx8IEVOQUJMRShTQU1QTElOR19GTEFHUykKKyNpZiBFTkFCTEUoT1BDT0RF
X1NBTVBMSU5HKSB8fCBFTkFCTEUoU0FNUExJTkdfRkxBR1MpIHx8IEVOQUJMRShTQU1QTElOR19S
RUdJT05TKQogI2RlZmluZSBFTkFCTEVfU0FNUExJTkdfVEhSRUFEIDEKICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NwZWN0cnVtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TcGVjdHJ1bS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9TcGVjdHJ1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFNwZWN0cnVtX2gKKyNkZWZpbmUgU3BlY3RydW1faAorCisjaW5jbHVkZSAiSGFzaE1hcC5o
IgorI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBTcGVjdHJ1bSB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIHVuc2lnbmVkIGxvbmc+OjppdGVyYXRv
ciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9u
Zz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIAorICAgIFNwZWN0cnVtKCkg
eyB9CisgICAgCisgICAgdm9pZCBhZGQoY29uc3QgVCYga2V5LCB1bnNpZ25lZCBsb25nIGNvdW50
ID0gMSkKKyAgICB7CisgICAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0g
bV9tYXAuYWRkKGtleSwgY291bnQpOworICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCisgICAg
ICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCArPSBjb3VudDsKKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgbG9uZyBnZXQoY29uc3QgVCYga2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgY29u
c3RfaXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ZXIgPT0g
bV9tYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGl0ZXIt
PnNlY29uZDsKKyAgICB9CisgICAgCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21h
cC5iZWdpbigpOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0K
KyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7
IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsg
fQorICAgIAorICAgIHN0cnVjdCBLZXlBbmRDb3VudCB7CisgICAgICAgIEtleUFuZENvdW50KCkg
eyB9CisgICAgICAgIAorICAgICAgICBLZXlBbmRDb3VudChjb25zdCBUJiBrZXksIHVuc2lnbmVk
IGxvbmcgY291bnQpCisgICAgICAgICAgICA6IGtleShrZXkpCisgICAgICAgICAgICAsIGNvdW50
KGNvdW50KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IEtleUFuZENvdW50JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvdW50ICE9IG90aGVyLmNvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiBj
b3VudCA8IG90aGVyLmNvdW50OworICAgICAgICAgICAgLy8gVGhpcyBjYXVzZXMgbG93ZXItb3Jk
ZXJlZCBrZXlzIGJlaW5nIHJldHVybmVkIGZpcnN0OyB0aGlzIGlzIHJlYWxseSBqdXN0CisgICAg
ICAgICAgICAvLyBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBvcmRlciBpcyBzb21ld2hhdCBk
ZXRlcm1pbmlzdGljIHJhdGhlciB0aGFuIGJlaW5nCisgICAgICAgICAgICAvLyBkZXRlcm1pbmVk
IGJ5IGhhc2hpbmcuCisgICAgICAgICAgICByZXR1cm4ga2V5ID4gb3RoZXIua2V5OworICAgICAg
ICB9CisKKyAgICAgICAgVCBrZXk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQ7CisgICAg
fTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIGEgbGlzdCBvcmRlcmVkIGZyb20gbG93ZXN0LWNvdW50
IHRvIGhpZ2hlc3QtY291bnQuCisgICAgVmVjdG9yPEtleUFuZENvdW50PiBidWlsZExpc3QoKSBj
b25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0OworICAgICAgICBm
b3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIp
CisgICAgICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3VudChpdGVyLT5maXJzdCwgaXRlci0+
c2Vjb25kKSk7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQobGlzdC5iZWdpbigpLCBsaXN0
LmVuZCgpKTsKKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBIYXNoTWFwPFQsIHVuc2lnbmVkIGxvbmc+IG1fbWFwOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6U3BlY3RydW07CisKKyNlbmRpZiAvLyBTcGVjdHJ1bV9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBA
QCBIRUFERVJTICs9IFwKICAgICB3dGYvUmVmUHRySGFzaE1hcC5oIFwKICAgICB3dGYvUmV0YWlu
UHRyLmggXAogICAgIHd0Zi9TSEExLmggXAorICAgIHd0Zi9TcGVjdHJ1bS5oIFwKICAgICB3dGYv
U3RhY2tCb3VuZHMuaCBcCiAgICAgd3RmL1N0YXRpY0NvbnN0cnVjdG9ycy5oIFwKICAgICB3dGYv
U3RkTGliRXh0cmFzLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5
OTI1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMiBAQAorMjAxMS0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIEpTQyBzaG91bGQgYmUgYWJsZSB0byBzYW1wbGUgaXRzZWxmIGluIGEg
bW9yZSBmbGV4aWJsZSB3YXkgdGhhbiBqdXN0IHNhbXBsaW5nIGZsYWdzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUyMgorCisgICAgICAgIFJldmll
d2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoLgorICAgICAgICAKKyAgICAgICAgKiBGb3J3YXJkaW5n
SGVhZGVycy93dGYvU3BlY3RydW0uaDogQWRkZWQuCisKIDIwMTEtMTEtMDMgIE1hcmsgSGFobmVu
YmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBEZS12aXJ0dWFsaXplIEpT
T2JqZWN0OjpjbGFzc05hbWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5n
SGVhZGVycy93dGYvU3BlY3RydW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEds
dWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0cnVtLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0cnVtLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TcGVjdHJ1bS5o
PgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0xMS0wMyAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpTQyBzaG91bGQgYmUgYWJsZSB0
byBzYW1wbGUgaXRzZWxmIGluIGEgbW9yZSBmbGV4aWJsZSB3YXkgdGhhbiBqdXN0IHNhbXBsaW5n
IGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MTUyMgorCisgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgc2luY2Ugbm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2VkLgorCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0cnVtLmg6IEFkZGVkLgorCiAyMDExLTExLTAy
ICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9yZz4KIAogICAgICAgICBFbmFibGUgY3RybC1h
cnJvdyBtb3ZlIGN1cnNvciBieSB3b3JkIGluIHZpc3VhbCBvcmRlciBpbiBjci13aW4gYnkgY29t
bWFuZCBsaW5lIGZsYWcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvU3BlY3RydW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93dGYvU3BlY3RydW0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3d0Zi9TcGVjdHJ1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3BlY3RydW0uaD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113768</attachid>
            <date>2011-11-05 17:06:33 -0700</date>
            <delta_ts>2011-11-05 17:06:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>samplingregion_patch_7.diff</filename>
            <type>text/plain</type>
            <size>30696</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTkyNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAK
KzIwMTEtMTEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0Mgc2hvdWxkIGJlIGFibGUgdG8gc2FtcGxlIGl0c2VsZiBpbiBhIG1vcmUgZmxleGlibGUgd2F5
IHRoYW4ganVzdCBzYW1wbGluZyBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJy
YWNsb3VnaC4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgY29uc3RydWN0IHRoYXQgbG9va3Mg
bGlrZSBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigibmFtZSIpLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6TG9ja2VyKToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcik6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUmVnaW9uOjpzYW1wbGUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1JlZ2lvbjo6ZHVtcCk6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpkdW1wSW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1RocmVhZDo6dGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKiBieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246OlNhbXBsaW5n
UmVnaW9uKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdSZWdpb246On5TYW1wbGluZ1JlZ2lvbik6
CisgICAgICAgIChKU0M6OlNhbXBsaW5nUmVnaW9uOjpleGNoYW5nZUN1cnJlbnQpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29s
bGVjdCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHA6CisgICAgICAgIChKU0M6
OlZUYWJsZVNwZWN0cnVtOjpjb3VudFZQdHIpOgorICAgICAgICAoSlNDOjpWVGFibGVTcGVjdHJ1
bTo6ZHVtcCk6CisgICAgICAgICogaGVhcC9WVGFibGVTcGVjdHJ1bS5oOgorICAgICAgICAqIGpz
Yy5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAgICAg
ICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNh
bGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
ckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAo
V1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXApOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAg
ICAgICAqIHd0Zi9TcGVjdHJ1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U3BlY3RydW06OlNw
ZWN0cnVtKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmFkZCk6CisgICAgICAgIChXVEY6OlNw
ZWN0cnVtOjpnZXQpOgorICAgICAgICAoV1RGOjpTcGVjdHJ1bTo6YmVnaW4pOgorICAgICAgICAo
V1RGOjpTcGVjdHJ1bTo6ZW5kKToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OktleUFuZENvdW50
OjpLZXlBbmRDb3VudCk6CisgICAgICAgIChXVEY6OlNwZWN0cnVtOjpLZXlBbmRDb3VudDo6b3Bl
cmF0b3I8KToKKyAgICAgICAgKFdURjo6U3BlY3RydW06OmJ1aWxkTGlzdCk6CisgICAgICAgICog
d3RmL3d0Zi5wcmk6CisKIDIwMTEtMTEtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIENoYW5nZSByZW1haW5pbmcgY2FsbGVycyBvZiByZWxlYXNlUmVmIHRvIGNh
bGwgbGVha1JlZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksNyBAQCBfX1pOM0pTQzE0SlNHbG9i
YWxPYmplY3Q2c19pbmZvRQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0RDJFdgogX19aTjNKU0Mx
NE1hY2hpbmVUaHJlYWRzMTZhZGRDdXJyZW50VGhyZWFkRXYKIF9fWk4zSlNDMTRNYXJrU3RhY2tB
cnJheTZleHBhbmRFdgorX19aTjNKU0MxNFNhbXBsaW5nUmVnaW9uNGR1bXBFdgogX19aTjNKU0Mx
NFNhbXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNXN0YXJ0RWoK
IF9fWk4zSlNDMTRTY29wZUNoYWluTm9kZTZzX2luZm9FCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIk1haW5U
aHJlYWQuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAj
aW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQwNCw2ICs0MDUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAjZW5kaWYKIAogICAgIC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0
aW5nIEpTR2xvYmFsRGF0YS4KKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAg
SlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKICAgICAvLyBXZSBjYW4ndCB1c2UgZGVzdHJ1
Y3RvcnMgaW4gdGhlIGZvbGxvd2luZyBjb2RlIGJlY2F1c2UgaXQgdXNlcyBXaW5kb3dzCkBAIC00
NzIsNiArNDc0LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
I2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICBTYW1wbGluZ0ZsYWdzOjpzdG9wKCk7CiAj
ZW5kaWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBTYW1wbGluZ1JlZ2lvbjo6
ZHVtcCgpOworI2VuZGlmCiAgICAgZ2xvYmFsRGF0YS5kdW1wU2FtcGxlRGF0YShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSk7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIEFi
c3RyYWN0U2FtcGxpbmdDb3VudGVyOjpkdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsNyBAQAogCQkwQkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODEx
QTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMTZENzI2MTQyQzM5
QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5j
cHAgKi87IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkU1QkY3MTQ2
MzU3RDUwMDNFQjJFQiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyRTVCRjUxNDYzNTdEMjAwM0VCMkVCIC8qIFNwZWN0cnVtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZB
NDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBW
YWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBE
YXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MTMsNiArODE0LDcgQEAKIAkJ
MEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJF
NUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3RydW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3BlY3RydW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZv
cm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODU1LDYgKzE4NTcsNyBAQAogCQk2NTE2MkVG
MTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkwRjJFNUJGNTE0NjM1N0QyMDAzRUIyRUIgLyogU3BlY3RydW0uaCAq
LywKIAkJCQkwRkQ1MkFBQzE0MzAzNTlEMDAyNkRDOUYgLyogVW5pb25GaW5kLmggKi8sCiAJCQkJ
MEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovLAogCQkJCTBG
MTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovLApAQCAtMjg5Nyw2ICsy
OTAwLDcgQEAKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxS
ZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8q
IERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkU1QkY3MTQ2MzU3RDUwMDNFQjJF
QiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkocmV2aXNpb24gOTkyMjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsOTMgQEAgdm9pZCBTYW1wbGluZ0ZsYWdzOjpzdGFydCgpIHt9CiB2
b2lkIFNhbXBsaW5nRmxhZ3M6OnN0b3AoKSB7fQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0FNUExJ
TkdfUkVHSU9OUykKK3ZvbGF0aWxlIHVpbnRwdHJfdCBTYW1wbGluZ1JlZ2lvbjo6c19jdXJyZW50
T3JSZXNlcnZlZDsKK1NwZWN0cnVtPGNvbnN0IGNoYXIqPiogU2FtcGxpbmdSZWdpb246OnNfc3Bl
Y3RydW07Cit1bnNpZ25lZCBsb25nIFNhbXBsaW5nUmVnaW9uOjpzX25vbmVPZlRoZUFib3ZlOwor
dW5zaWduZWQgU2FtcGxpbmdSZWdpb246OnNfbnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1wOworCitT
YW1wbGluZ1JlZ2lvbjo6TG9ja2VyOjpMb2NrZXIoKQoreworICAgIHVpbnRwdHJfdCBwcmV2aW91
czsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBwcmV2aW91cyA9IHNfY3VycmVudE9yUmVz
ZXJ2ZWQ7CisgICAgICAgIGlmIChwcmV2aW91cyAmIDEpIHsKKyNpZiBPUyhVTklYKQorICAgICAg
ICAgICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZzX2N1cnJlbnRPclJl
c2VydmVkLCBwcmV2aW91cywgcHJldmlvdXMgfCAxKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworU2FtcGxpbmdSZWdpb246OkxvY2tlcjo6fkxvY2tlcigpCit7CisgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0aGUgQ0FTLCBidXQgd2UgZG8gaXQgb3V0IG9mIGFuCisgICAgLy8gYWJ1bmRh
bmNlIG9mIGNhdXRpb24gKGFuZCBiZWNhdXNlIGl0IGdpdmVzIHVzIGEgbWVtb3J5IGZlbmNlLCB3
aGljaCBpcworICAgIC8vIG5ldmVyIGJhZCkuCisgICAgdWludHB0cl90IHByZXZpb3VzOworICAg
IGRvIHsKKyAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVkOworICAgIH0gd2hp
bGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmc19jdXJyZW50T3JSZXNlcnZlZCwgcHJldmlv
dXMsIHByZXZpb3VzICYgfjEpKTsKK30KKwordm9pZCBTYW1wbGluZ1JlZ2lvbjo6c2FtcGxlKCkK
K3sKKyAgICAvLyBNYWtlIHN1cmUgd2UgbG9jayBzX2N1cnJlbnQuCisgICAgTG9ja2VyIGxvY2tl
cjsKKyAgICAKKyAgICAvLyBDcmVhdGUgYSBzcGVjdHJ1bSBpZiB3ZSBkb24ndCBoYXZlIG9uZSBh
bHJlYWR5LgorICAgIGlmICghc19zcGVjdHJ1bSkKKyAgICAgICAgc19zcGVjdHJ1bSA9IG5ldyBT
cGVjdHJ1bTxjb25zdCBjaGFyKj4oKTsKKyAgICAKKyAgICBBU1NFUlQoc19jdXJyZW50T3JSZXNl
cnZlZCAmIDEpOworICAgIAorICAgIC8vIFdhbGsgdGhlIHJlZ2lvbiBzdGFjaywgYW5kIHJlY29y
ZCBlYWNoIHJlZ2lvbiB3ZSBzZWUuCisgICAgU2FtcGxpbmdSZWdpb24qIHJlZ2lvbiA9IGJpdHdp
c2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQgJiB+MSk7CisgICAg
aWYgKHJlZ2lvbikgeworICAgICAgICBmb3IgKDsgcmVnaW9uOyByZWdpb24gPSByZWdpb24tPm1f
cHJldmlvdXMpCisgICAgICAgICAgICBzX3NwZWN0cnVtLT5hZGQocmVnaW9uLT5tX25hbWUpOwor
ICAgIH0gZWxzZQorICAgICAgICBzX25vbmVPZlRoZUFib3ZlKys7CisgICAgCisgICAgaWYgKHNf
bnVtYmVyT2ZTYW1wbGVzU2luY2VEdW1wKysgPT0gU2FtcGxpbmdUaHJlYWQ6OnNfaGVydHopIHsK
KyAgICAgICAgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1bXAgPSAwOworICAgICAgICBkdW1wSW50
ZXJuYWwoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2FtcGxpbmdSZWdpb246OmR1bXAoKQoreworICAg
IExvY2tlciBsb2NrZXI7CisgICAgCisgICAgZHVtcEludGVybmFsKCk7Cit9CisKK3ZvaWQgU2Ft
cGxpbmdSZWdpb246OmR1bXBJbnRlcm5hbCgpCit7CisgICAgaWYgKCFzX3NwZWN0cnVtKSB7Cisg
ICAgICAgIHByaW50ZigiXG5TYW1wbGluZ1JlZ2lvbjogd2FzIG5ldmVyIHNhbXBsZWQuXG5cbiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFZlY3RvcjxTcGVjdHJ1bTxjb25z
dCBjaGFyKj46OktleUFuZENvdW50PiBsaXN0ID0gc19zcGVjdHJ1bS0+YnVpbGRMaXN0KCk7Cisg
ICAgCisgICAgdW5zaWduZWQgbG9uZyB0b3RhbCA9IHNfbm9uZU9mVGhlQWJvdmU7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbGlzdC5zaXplKCk7IGktLTspCisgICAgICAgIHRvdGFsICs9IGxpc3Rb
aV0uY291bnQ7CisgICAgCisgICAgcHJpbnRmKCJcblNhbXBsaW5nUmVnaW9uOiBzYW1wbGUgY291
bnRzIGZvciByZWdpb25zOiAoJWx1IHNhbXBsZXMpXG4iLCB0b3RhbCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBsaXN0LnNpemUoKTsgaS0tOykKKyAgICAgICAgcHJpbnRmKCIgICAgJTMuMmxm
JSUgICVzXG4iLCAoMTAwLjAgKiBsaXN0W2ldLmNvdW50KSAvIHRvdGFsLCBsaXN0W2ldLmtleSk7
Cit9CisjZWxzZSAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKK3ZvaWQgU2FtcGxpbmdSZWdp
b246OmR1bXAoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKwogLyoK
ICAgU3RhcnQgd2l0aCBmbGFnIDE2IHNldC4KICAgQnkgZG9pbmcgdGhpcyB0aGUgbW9uaXRvcmlu
ZyBvZiBsb3dlciB2YWx1ZWQgZmxhZ3Mgd2lsbCBiZSBtYXNrZWQgb3V0CkBAIC0xMzEsNiArMjE4
LDkgQEAgdm9pZCogU2FtcGxpbmdUaHJlYWQ6OnRocmVhZFN0YXJ0RnVuYyh2bwogI2lmIEVOQUJM
RShTQU1QTElOR19GTEFHUykKICAgICAgICAgU2FtcGxpbmdGbGFnczo6c2FtcGxlKCk7CiAjZW5k
aWYKKyNpZiBFTkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICAgICAgU2FtcGxpbmdSZWdpb246
OnNhbXBsZSgpOworI2VuZGlmCiAjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAg
U2FtcGxpbmdUb29sOjpzYW1wbGUoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJTYW1wbGlu
Z0NvdW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9B
dG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC05Myw2ICs5NSw4OSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH07CiAKKyNpZiBF
TkFCTEUoU0FNUExJTkdfUkVHSU9OUykKKyAgICBjbGFzcyBTYW1wbGluZ1JlZ2lvbiB7CisgICAg
cHVibGljOgorICAgICAgICAvLyBDcmVhdGUgYSBzY29wZWQgc2FtcGxpbmcgcmVnaW9uIHVzaW5n
IGEgQyBzdHJpbmcgY29uc3RhbnQgbmFtZSB0aGF0IGRlc2NyaWJlcworICAgICAgICAvLyB3aGF0
IHlvdSBhcmUgZG9pbmcuIFRoaXMgbXVzdCBiZSBhIHN0cmluZyBjb25zdGFudCB0aGF0IHBlcnNp
c3RzIGZvciB0aGUKKyAgICAgICAgLy8gbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MgYW5kIGlzIGlt
bXV0YWJsZS4KKyAgICAgICAgU2FtcGxpbmdSZWdpb24oY29uc3QgY2hhciogbmFtZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICAgICAgICAg
IG1fbmFtZSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX25hbWUgPSBuYW1lOworICAgICAgICAgICAgZXhjaGFu
Z2VDdXJyZW50KHRoaXMsICZtX3ByZXZpb3VzKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wcmV2
aW91cyB8fCBtX3ByZXZpb3VzID4gdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IH5TYW1wbGluZ1JlZ2lvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9uYW1lKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJU
KGJpdHdpc2VfY2FzdDxTYW1wbGluZ1JlZ2lvbio+KHNfY3VycmVudE9yUmVzZXJ2ZWQgJiB+MSkg
PT0gdGhpcyk7CisgICAgICAgICAgICBleGNoYW5nZUN1cnJlbnQobV9wcmV2aW91cyk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHNhbXBsZSgpOworICAgICAgICAK
KyAgICAgICAgc3RhdGljIHZvaWQgZHVtcCgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKiBtX3ByZXZp
b3VzOworCisgICAgICAgIHN0YXRpYyB2b2lkIGV4Y2hhbmdlQ3VycmVudChTYW1wbGluZ1JlZ2lv
biogY3VycmVudCwgU2FtcGxpbmdSZWdpb24qKiBwcmV2aW91c1B0ciA9IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHVpbnRwdHJfdCBwcmV2aW91czsKKyAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBzX2N1cnJlbnRPclJlc2VydmVkOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgcmVzZXJ2ZWQgKGkuZS4g
c2FtcGxpbmcgdGhyZWFkIGlzIHJlYWRpbmcgaXQpLCBsb29wIGFyb3VuZC4KKyAgICAgICAgICAg
ICAgICBpZiAocHJldmlvdXMgJiAxKSB7CisjaWYgT1MoVU5JWCkKKyAgICAgICAgICAgICAgICAg
ICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
SWYgd2UncmUgZ29pbmcgdG8gQ0FTLCB0aGVuIG1ha2Ugc3VyZSBwcmV2aW91cyBpcyBzZXQuCisg
ICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUHRyKQorICAgICAgICAgICAgICAgICAgICAqcHJl
dmlvdXNQdHIgPSBiaXR3aXNlX2Nhc3Q8U2FtcGxpbmdSZWdpb24qPihwcmV2aW91cyk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2Fw
KCZzX2N1cnJlbnRPclJlc2VydmVkLCBwcmV2aW91cywgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
Y3VycmVudCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZHVtcEludGVybmFsKCk7CisK
KyAgICAgICAgY2xhc3MgTG9ja2VyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTG9j
a2VyKCk7CisgICAgICAgICAgICB+TG9ja2VyKCk7CisgICAgICAgIH07CisKKyAgICAgICAgc3Rh
dGljIHZvbGF0aWxlIHVpbnRwdHJfdCBzX2N1cnJlbnRPclJlc2VydmVkOworICAgICAgICAKKyAg
ICAgICAgLy8gcmVseSBvbiBpZGVudGl0eSBoYXNoaW5nIG9mIHN0cmluZyBjb25zdGFudHMKKyAg
ICAgICAgc3RhdGljIFNwZWN0cnVtPGNvbnN0IGNoYXIqPiogc19zcGVjdHJ1bTsKKyAgICAgICAg
CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNfbm9uZU9mVGhlQWJvdmU7CisgICAgICAg
IAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgc19udW1iZXJPZlNhbXBsZXNTaW5jZUR1bXA7Cisg
ICAgfTsKKyNlbHNlIC8vIEVOQUJMRShTQU1QTElOR19SRUdJT05TKQorICAgIGNsYXNzIFNhbXBs
aW5nUmVnaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNhbXBsaW5nUmVnaW9uKGNvbnN0IGNo
YXIqKSB7IH0KKyAgICAgICAgdm9pZCBkdW1wKCk7CisgICAgfTsKKyNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUkVHSU9OUykKKwogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBFeGVj
U3RhdGU7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw4IEBAIGJvb2wg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ28KIAogSlNPYmplY3QqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdp
b24oIkJ5dGVjb2RlIEdlbmVyYXRpb24iKTsKKyAgICAKICAgICBtX2NvZGVCbG9jay0+c2V0VGhp
c1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpOwogCiAgICAgbV9zY29wZU5vZGUtPmVt
aXRCeXRlY29kZSgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiBlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBD
b21waWxlT3RoZXIgfTsKIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1v
ZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENv
ZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQogeworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlciki
KTsKKyAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwogICAgIEdyYXBoIGRmZzsKICAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiA5
OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NTMsNiArNTUzLDggQEAgdm9pZCBIZWFwOjpnZXRDb25zZXJ2YXRpdmVSZWdpc3Rl
clJvb3RzKAogCiB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKIHsKKyAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBUcmFjaW5nIik7
CisKICAgICBDT05EX0dDUEhBU0UoZnVsbEdDLCBNYXJrRnVsbFJvb3RzLCBNYXJrWW91bmdSb290
cyk7CiAgICAgVU5VU0VEX1BBUkFNKGZ1bGxHQyk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaHJlYWRT
dGF0ZShtX2dsb2JhbERhdGEpKTsKQEAgLTc1OSw2ICs3NjEsOCBAQCB2b2lkIEhlYXA6OmNvbGxl
Y3RBbGxHYXJiYWdlKCkKIAogdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9n
Z2xlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdlIENvbGxl
Y3Rpb24iKTsKKyAgICAKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogICAgIEFTU0VSVChnbG9iYWxE
YXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZp
ZXJUYWJsZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwpAQCAtNzkyLDYgKzc5
Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICB9CiAK
ICAgICBpZiAoc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCkgeworICAgICAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uOiBTd2VlcGluZyIpOwogICAgICAg
ICBHQ1BIQVNFKFN3ZWVwaW5nKTsKICAgICAgICAgc3dlZXAoKTsKICAgICAgICAgc2hyaW5rKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uY3Bw
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZUYWJsZVNw
ZWN0cnVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksNyBAQCBWVGFibGVTcGVjdHJ1
bTo6flZUYWJsZVNwZWN0cnVtKCkKIAogdm9pZCBWVGFibGVTcGVjdHJ1bTo6Y291bnRWUHRyKHZv
aWQqIHZUYWJsZVBvaW50ZXIpCiB7Ci0gICAgc3RkOjpwYWlyPEhhc2hNYXA8dm9pZCosIHVuc2ln
bmVkIGxvbmc+OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9tYXAuYWRkKHZUYWJsZVBvaW50
ZXIsIDEpOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkKLSAgICAgICAgcmVzdWx0LmZpcnN0LT5z
ZWNvbmQrKzsKKyAgICBhZGQodlRhYmxlUG9pbnRlcik7CiB9CiAKIHZvaWQgVlRhYmxlU3BlY3Ry
dW06OmNvdW50KEpTQ2VsbCogY2VsbCkKQEAgLTU5LDQ1ICs1NywxNyBAQCB2b2lkIFZUYWJsZVNw
ZWN0cnVtOjpjb3VudChKU0NlbGwqIGNlbGwpCiAgICAgY291bnRWUHRyKGNlbGwtPnZwdHIoKSk7
CiB9CiAKLXN0cnVjdCBWVGFibGVBbmRDb3VudCB7Ci0gICAgdm9pZCogdnRhYmxlOwotICAgIHVu
c2lnbmVkIGxvbmcgY291bnQ7Ci0gICAgCi0gICAgVlRhYmxlQW5kQ291bnQoKSB7IH0KLSAgICAK
LSAgICBWVGFibGVBbmRDb3VudCh2b2lkKiB2dGFibGUsIHVuc2lnbmVkIGxvbmcgY291bnQpCi0g
ICAgICAgIDogdnRhYmxlKHZ0YWJsZSkKLSAgICAgICAgLCBjb3VudChjb3VudCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZUYWJsZUFuZENvdW50JiBvdGhl
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCAhPSBvdGhlci5jb3VudCkKLSAgICAg
ICAgICAgIHJldHVybiBjb3VudCA8IG90aGVyLmNvdW50OwotICAgICAgICByZXR1cm4gdnRhYmxl
ID4gb3RoZXIudnRhYmxlOyAvLyB0aGlzIHJlc3VsdHMgaW4gbG93ZXItYWRkcmVzc2VkIHZ0YWJs
ZXMgYmVpbmcgcHJpbnRlZCBmaXJzdAotICAgIH0KLX07Ci0KIHZvaWQgVlRhYmxlU3BlY3RydW06
OmR1bXAoRklMRSogb3V0cHV0LCBjb25zdCBjaGFyKiBjb21tZW50KQogewogICAgIGZwcmludGYo
b3V0cHV0LCAiJXM6XG4iLCBjb21tZW50KTsKICAgICAKLSAgICBIYXNoTWFwPHZvaWQqLCB1bnNp
Z25lZCBsb25nPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwotICAgIEhhc2hNYXA8
dm9pZCosIHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKLSAgICAK
LSAgICBWZWN0b3I8VlRhYmxlQW5kQ291bnQsIDA+IGxpc3Q7Ci0gICAgCi0gICAgZm9yIChIYXNo
TWFwPHZvaWQqLCB1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9
IGVuZDsgKytpdGVyKQotICAgICAgICBsaXN0LmFwcGVuZChWVGFibGVBbmRDb3VudChpdGVyLT5m
aXJzdCwgaXRlci0+c2Vjb25kKSk7Ci0gICAgCi0gICAgc3RkOjpzb3J0KGxpc3QuYmVnaW4oKSwg
bGlzdC5lbmQoKSk7CisgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0ID0gYnVpbGRMaXN0KCk7
CiAgICAgCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSBsaXN0LnNpemUoKTsgaW5kZXgtLSA+IDA7
KSB7Ci0gICAgICAgIFZUYWJsZUFuZENvdW50IGl0ZW0gPSBsaXN0LmF0KGluZGV4KTsKKyAgICAg
ICAgS2V5QW5kQ291bnQgaXRlbSA9IGxpc3QuYXQoaW5kZXgpOwogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICAgICAgRGxfaW5mbyBpbmZvOwotICAgICAgICBpZiAoZGxhZGRyKGl0ZW0udnRhYmxlLCAm
aW5mbykpIHsKKyAgICAgICAgaWYgKGRsYWRkcihpdGVtLmtleSwgJmluZm8pKSB7CiAgICAgICAg
ICAgICBjaGFyKiBmaW5kUmVzdWx0ID0gc3RycmNocihpbmZvLmRsaV9mbmFtZSwgJy8nKTsKICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHN0cmlwcGVkRmlsZU5hbWU7CiAgICAgICAgICAgICAKQEAg
LTEwNiwxMSArNzYsMTEgQEAgdm9pZCBWVGFibGVTcGVjdHJ1bTo6ZHVtcChGSUxFKiBvdXRwdXQs
IAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0cmlwcGVkRmlsZU5hbWUgPSBp
bmZvLmRsaV9mbmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZnByaW50ZihvdXRwdXQs
ICIgICAgJXM6JXMoJXApOiAlbHVcbiIsIHN0cmlwcGVkRmlsZU5hbWUsIGluZm8uZGxpX3NuYW1l
LCBpdGVtLnZ0YWJsZSwgaXRlbS5jb3VudCk7CisgICAgICAgICAgICBmcHJpbnRmKG91dHB1dCwg
IiAgICAlczolcyglcCk6ICVsdVxuIiwgc3RyaXBwZWRGaWxlTmFtZSwgaW5mby5kbGlfc25hbWUs
IGl0ZW0ua2V5LCBpdGVtLmNvdW50KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAjZW5kaWYKLSAgICAgICAgZnByaW50ZihvdXRwdXQsICIgICAgJXA6ICVsdVxuIiwgaXRlbS52
dGFibGUsIGl0ZW0uY291bnQpOworICAgICAgICBmcHJpbnRmKG91dHB1dCwgIiAgICAlcDogJWx1
XG4iLCBpdGVtLmtleSwgaXRlbS5jb3VudCk7CiAgICAgfQogICAgIAogICAgIGZmbHVzaChvdXRw
dXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVlRhYmxlU3BlY3RydW0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9WVGFibGVTcGVjdHJ1bS5o
CShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ZUYWJsZVNw
ZWN0cnVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxMyBAQAogI2RlZmluZSBWVGFi
bGVTcGVjdHJ1bV9oCiAKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0cnVtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBKU0NlbGw7CiAKLWNsYXNzIFZUYWJsZVNwZWN0cnVtIHsKK2NsYXNzIFZUYWJsZVNwZWN0cnVt
OiBTcGVjdHJ1bTx2b2lkKj4gewogcHVibGljOgogICAgIFZUYWJsZVNwZWN0cnVtKCk7CiAgICAg
flZUYWJsZVNwZWN0cnVtKCk7CkBAIC00Miw5ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
dW50KEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZHVtcChGSUxFKiBvdXRwdXQsIGNvbnN0IGNo
YXIqIGNvbW1lbnQpOwotICAgIAotcHJpdmF0ZToKLSAgICBIYXNoTWFwPHZvaWQqLCB1bnNpZ25l
ZCBsb25nPiBtX21hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjksNiArMTAy
OSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyOjpwYXJzZShKU0cKIHRlbXBsYXRl
IDxjbGFzcyBQYXJzZWROb2RlPgogUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywg
SlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBE
ZWJ1Z2dlciogZGVidWdnZXIsIEV4ZWNTdGF0ZSogZXhlY1N0YXRlLCBKU09iamVjdCoqIGV4Y2Vw
dGlvbikKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiUGFyc2luZyIpOwog
ICAgIFBhcnNlciBwYXJzZXIoZ2xvYmFsRGF0YSwgc291cmNlLCBwYXJhbWV0ZXJzLCBzdHJpY3Ru
ZXNzLCBwYXJzZXJNb2RlKTsKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGxl
eGljYWxHbG9iYWxPYmplY3QsIGRlYnVnZ2VyLCBleGVjU3RhdGUsIGV4Y2VwdGlvbik7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw4IEBAIEpTT2JqZWN0KiBFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXoKIAogSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21w
aWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5v
ZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6OkJhc2VsaW5lSklUID8gIkJhc2VsaW5lIENv
bXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21waWxhdGlvbiAoVE9UQUwpIik7CisgICAgCiAj
aWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOwogI2VuZGlmCkBAIC0y
ODAsNiArMjgyLDggQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aQog
CiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5cGUgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFMKSIgOiAi
REZHIENvbXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkKICAgICBV
TlVTRURfUEFSQU0oaml0VHlwZSk7CiAjZW5kaWYKQEAgLTQ1NSw2ICs0NTksOCBAQCBQYXNzT3du
UHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiAKIEpTT2JqZWN0KiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihqaXRUeXBlID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUID8gIkJhc2VsaW5lIENvbXBpbGF0aW9uIChUT1RBTCkiIDogIkRGRyBDb21waWxhdGlv
biAoVE9UQUwpIik7CisgICAgCiAjaWYgIUVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOwogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKQEAgLTUxNSw2ICs1MjEsOCBAQCBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKIEpTT2JqZWN0KiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBl
KQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKGppdFR5cGUgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQgPyAiQmFzZWxpbmUgQ29tcGlsYXRpb24gKFRPVEFMKSIgOiAiREZHIENv
bXBpbGF0aW9uIChUT1RBTCkiKTsKKyAgICAKICNpZiAhRU5BQkxFKEpJVCkKICAgICBVTlVTRURf
UEFSQU0oaml0VHlwZSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDk5MjI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBp
bmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3YXAodW5zaWduZWQqCiAgICAgYXNtIHZvbGF0aWxl
KAogICAgICAgICAibG9jazsgY21weGNoZ2wgJTMsICUyXG5cdCIKICAgICAgICAgInNldGUgJTEi
Ci0gICAgICAgIDogIithIihleHBlY3RlZCksICI9ciIocmVzdWx0KSwgIittIigqbG9jYXRpb24p
CisgICAgICAgIDogIithIihleHBlY3RlZCksICI9cSIocmVzdWx0KSwgIittIigqbG9jYXRpb24p
CiAgICAgICAgIDogInIiKG5ld1ZhbHVlKQogICAgICAgICA6ICJtZW1vcnkiCiAgICAgICAgICk7
CkBAIC0xNDAsNiArMTQwLDM4IEBAIGlubGluZSBib29sIHdlYWtDb21wYXJlQW5kU3dhcCh1bnNp
Z25lZCoKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCB3ZWFrQ29tcGFyZUFuZFN3YXAodm9pZCp2
b2xhdGlsZSogbG9jYXRpb24sIHZvaWQqIGV4cGVjdGVkLCB2b2lkKiBuZXdWYWx1ZSkKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IENPTVBBUkVfQU5EX1NXQVAgb24gb3RoZXIgYXJjaGl0ZWN0
dXJlcyBhbmQgY29tcGlsZXJzLiBDdXJyZW50bHkKKyAgICAvLyBpdCBvbmx5IHdvcmtzIG9uIFg4
NiBvciBYODZfNjQgd2l0aCBhIEdDQy1zdHlsZSBjb21waWxlci4KKyNpZiBFTkFCTEUoQ09NUEFS
RV9BTkRfU1dBUCkKKyAgICBib29sIHJlc3VsdDsKKyAgICBhc20gdm9sYXRpbGUoCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICAgICAgImxvY2s7IGNtcHhjaGdxICUzLCAlMlxuXHQiCisjZWxzZQorICAg
ICAgICAibG9jazsgY21weGNoZ2wgJTMsICUyXG5cdCIKKyNlbmRpZgorICAgICAgICAic2V0ZSAl
MSIKKyAgICAgICAgOiAiK2EiKGV4cGVjdGVkKSwgIj1xIihyZXN1bHQpLCAiK20iKCpsb2NhdGlv
bikKKyAgICAgICAgOiAiciIobmV3VmFsdWUpCisgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAg
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UgLy8gRU5BQkxFKENPTVBBUkVfQU5EX1NXQVAp
CisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZXhwZWN0ZWQp
OworICAgIFVOVVNFRF9QQVJBTShuZXdWYWx1ZSk7CisgICAgQ1JBU0goKTsKKyAgICByZXR1cm4g
MDsKKyNlbmRpZiAvLyBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKK30KKworaW5saW5lIGJvb2wg
d2Vha0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIHVpbnRwdHJfdCogbG9jYXRpb24sIHVpbnRwdHJf
dCBleHBlY3RlZCwgdWludHB0cl90IG5ld1ZhbHVlKQoreworICAgIHJldHVybiB3ZWFrQ29tcGFy
ZUFuZFN3YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKnZvbGF0aWxlKj4obG9jYXRpb24pLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihleHBlY3RlZCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5l
d1ZhbHVlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjaWYgVVNFKExPQ0tGUkVFX1RI
UkVBRFNBRkVSRUZDT1VOVEVEKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0
Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAkocmV2aXNpb24gOTkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3Jt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwOCwxMiArODA4LDEzIEBACiAjZGVmaW5lIEVOQUJMRV9E
RUJVR19XSVRIX0JSRUFLUE9JTlQgMAogI2RlZmluZSBFTkFCTEVfU0FNUExJTkdfQ09VTlRFUlMg
MAogI2RlZmluZSBFTkFCTEVfU0FNUExJTkdfRkxBR1MgMAorI2RlZmluZSBFTkFCTEVfU0FNUExJ
TkdfUkVHSU9OUyAwCiAjZGVmaW5lIEVOQUJMRV9PUENPREVfU0FNUExJTkcgMAogI2RlZmluZSBF
TkFCTEVfQ09ERUJMT0NLX1NBTVBMSU5HIDAKICNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5H
KSAmJiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICNlcnJvciAiQ09ERUJMT0NLX1NBTVBMSU5H
IHJlcXVpcmVzIE9QQ09ERV9TQU1QTElORyIKICNlbmRpZgotI2lmIEVOQUJMRShPUENPREVfU0FN
UExJTkcpIHx8IEVOQUJMRShTQU1QTElOR19GTEFHUykKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBM
SU5HKSB8fCBFTkFCTEUoU0FNUExJTkdfRkxBR1MpIHx8IEVOQUJMRShTQU1QTElOR19SRUdJT05T
KQogI2RlZmluZSBFTkFCTEVfU0FNUExJTkdfVEhSRUFEIDEKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1NwZWN0cnVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9TcGVjdHJ1bS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9TcGVjdHJ1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNw
ZWN0cnVtX2gKKyNkZWZpbmUgU3BlY3RydW1faAorCisjaW5jbHVkZSAiSGFzaE1hcC5oIgorI2lu
Y2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBTcGVjdHJ1bSB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIHVuc2lnbmVkIGxvbmc+OjppdGVyYXRvciBpdGVy
YXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgdW5zaWduZWQgbG9uZz46OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIAorICAgIFNwZWN0cnVtKCkgeyB9Cisg
ICAgCisgICAgdm9pZCBhZGQoY29uc3QgVCYga2V5LCB1bnNpZ25lZCBsb25nIGNvdW50ID0gMSkK
KyAgICB7CisgICAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9tYXAu
YWRkKGtleSwgY291bnQpOworICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCisgICAgICAgICAg
ICByZXN1bHQuZmlyc3QtPnNlY29uZCArPSBjb3VudDsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgbG9uZyBnZXQoY29uc3QgVCYga2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAu
ZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29u
ZDsKKyAgICB9CisgICAgCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdp
bigpOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAg
ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAg
IAorICAgIHN0cnVjdCBLZXlBbmRDb3VudCB7CisgICAgICAgIEtleUFuZENvdW50KCkgeyB9Cisg
ICAgICAgIAorICAgICAgICBLZXlBbmRDb3VudChjb25zdCBUJiBrZXksIHVuc2lnbmVkIGxvbmcg
Y291bnQpCisgICAgICAgICAgICA6IGtleShrZXkpCisgICAgICAgICAgICAsIGNvdW50KGNvdW50
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IEtleUFuZENvdW50JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvdW50ICE9IG90aGVyLmNvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiBjb3VudCA8
IG90aGVyLmNvdW50OworICAgICAgICAgICAgLy8gVGhpcyBjYXVzZXMgbG93ZXItb3JkZXJlZCBr
ZXlzIGJlaW5nIHJldHVybmVkIGZpcnN0OyB0aGlzIGlzIHJlYWxseSBqdXN0CisgICAgICAgICAg
ICAvLyBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBvcmRlciBpcyBzb21ld2hhdCBkZXRlcm1p
bmlzdGljIHJhdGhlciB0aGFuIGJlaW5nCisgICAgICAgICAgICAvLyBkZXRlcm1pbmVkIGJ5IGhh
c2hpbmcuCisgICAgICAgICAgICByZXR1cm4ga2V5ID4gb3RoZXIua2V5OworICAgICAgICB9CisK
KyAgICAgICAgVCBrZXk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQ7CisgICAgfTsKKyAg
ICAKKyAgICAvLyBSZXR1cm5zIGEgbGlzdCBvcmRlcmVkIGZyb20gbG93ZXN0LWNvdW50IHRvIGhp
Z2hlc3QtY291bnQuCisgICAgVmVjdG9yPEtleUFuZENvdW50PiBidWlsZExpc3QoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgVmVjdG9yPEtleUFuZENvdW50PiBsaXN0OworICAgICAgICBmb3IgKGNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpCisgICAg
ICAgICAgICBsaXN0LmFwcGVuZChLZXlBbmRDb3VudChpdGVyLT5maXJzdCwgaXRlci0+c2Vjb25k
KSk7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQobGlzdC5iZWdpbigpLCBsaXN0LmVuZCgp
KTsKKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBIYXNo
TWFwPFQsIHVuc2lnbmVkIGxvbmc+IG1fbWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6U3BlY3RydW07CisKKyNlbmRpZiAvLyBTcGVjdHJ1bV9oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi93dGYucHJpCShyZXZpc2lvbiA5OTIyOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvd3RmLnByaQkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQCBIRUFE
RVJTICs9IFwKICAgICB3dGYvUmVmUHRySGFzaE1hcC5oIFwKICAgICB3dGYvUmV0YWluUHRyLmgg
XAogICAgIHd0Zi9TSEExLmggXAorICAgIHd0Zi9TcGVjdHJ1bS5oIFwKICAgICB3dGYvU3RhY2tC
b3VuZHMuaCBcCiAgICAgd3RmL1N0YXRpY0NvbnN0cnVjdG9ycy5oIFwKICAgICB3dGYvU3RkTGli
RXh0cmFzLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5OTI1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMiBAQAorMjAxMS0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEpTQyBzaG91bGQgYmUgYWJsZSB0byBzYW1wbGUgaXRzZWxmIGluIGEgbW9yZSBm
bGV4aWJsZSB3YXkgdGhhbiBqdXN0IHNhbXBsaW5nIGZsYWdzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IEdhdmluIEJhcnJhY2xvdWdoLgorICAgICAgICAKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVy
cy93dGYvU3BlY3RydW0uaDogQWRkZWQuCisKIDIwMTEtMTEtMDMgIE1hcmsgSGFobmVuYmVyZyAg
PG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBEZS12aXJ0dWFsaXplIEpTT2JqZWN0
OjpjbGFzc05hbWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvU3BlY3RydW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0cnVtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0cnVtLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TcGVjdHJ1bS5oPgpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gOTkyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0xMS0wMyAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpTQyBzaG91bGQgYmUgYWJsZSB0byBzYW1w
bGUgaXRzZWxmIGluIGEgbW9yZSBmbGV4aWJsZSB3YXkgdGhhbiBqdXN0IHNhbXBsaW5nIGZsYWdz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUyMgor
CisgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgc2luY2Ugbm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2VkLgorCisgICAgICAgICogRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL1NwZWN0cnVtLmg6IEFkZGVkLgorCiAyMDExLTExLTAyICBYaWFv
bWVpIEppICA8eGppQGNocm9taXVtLm9yZz4KIAogICAgICAgICBFbmFibGUgY3RybC1hcnJvdyBt
b3ZlIGN1cnNvciBieSB3b3JkIGluIHZpc3VhbCBvcmRlciBpbiBjci13aW4gYnkgY29tbWFuZCBs
aW5lIGZsYWcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3Bl
Y3RydW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvU3BlY3RydW0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9TcGVjdHJ1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU3BlY3RydW0uaD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>