<?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>43903</bug_id>
          
          <creation_ts>2010-08-12 02:46:50 -0700</creation_ts>
          <short_desc>Speeding up SVG filters with multicore (SMP) support</short_desc>
          <delta_ts>2011-04-26 10:47:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zoltan Herczeg">zherczeg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dimich</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>kbalazs</cc>
    
    <cc>krit</cc>
    
    <cc>levin</cc>
    
    <cc>loki</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>pandras</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>263681</commentid>
    <comment_count>0</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-08-12 02:46:50 -0700</bug_when>
    <thetext>This patch is just show new ways of exploiting multicore cpus in WebKit. Filters usually requires a huge amount of CPU work, especially for animated SVGs. Any feedback would be welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263682</commentid>
    <comment_count>1</comment_count>
      <attachid>64198</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-08-12 02:49:59 -0700</bug_when>
    <thetext>Created attachment 64198
parallel svg light filter

Light filter is easy to split up for multiple CPUs. The initial plan is to add one helper thread, and two functions (execute / waitForCompletition) to the Filter base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314958</commentid>
    <comment_count>2</comment_count>
      <attachid>75125</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-30 05:07:48 -0800</bug_when>
    <thetext>Created attachment 75125
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314972</commentid>
    <comment_count>3</comment_count>
      <attachid>75125</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-30 05:48:36 -0800</bug_when>
    <thetext>Comment on attachment 75125
updated patch

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

The idea looks great, the video you showed is also very convincing! :-)
Some early review comments:

&gt; WebCore/platform/graphics/filters/FELighting.cpp:240
&gt; +            data.interior(offset, normalVector);

Hm, not related to this patch, but &apos;interior&apos; is a bad name, what does it do?

&gt; WebCore/platform/graphics/filters/FELighting.cpp:246
&gt; +#ifdef FILTER_THREAD

This should use the USE(FILTER_THREADS) or ENABLE(FILTER_THREADS) logic. (not sure which one to use, need to read Maciejs mail again regarding that topic, when to use USE or ENABLE, but I guess USE is approriate here).

&gt; WebCore/platform/graphics/filters/FELighting.cpp:249
&gt; +    PaintThreadData&amp; data = *reinterpret_cast&lt;PaintThreadData*&gt;(parameter);

How about adding ASSERT(parameter) as first argument.

&gt; WebCore/platform/graphics/filters/FELighting.cpp:280
&gt; +    if (width &gt;= 3 &amp;&amp; height &gt;= 10 &amp;&amp; width * height &gt; 4000) {

I&apos;d like a comment here, that this is emperical data.

&gt; WebCore/platform/graphics/filters/FELighting.h:79
&gt; +        {

An ASSERT(filter) can&apos;t hurt.
It looks awkward to use filter(filter) and lightingData(lightingData) - is that guarenteed to work? I was not aware that this is possible!

&gt; WebCore/platform/graphics/filters/FETurbulence.cpp:335
&gt; +#ifdef FILTER_THREAD

Use USE(FILTER_THREADS).

&gt; WebCore/platform/graphics/filters/FETurbulence.cpp:338
&gt; +    PaintThreadData&amp; data = *reinterpret_cast&lt;PaintThreadData*&gt;(parameter);

Maybe ASSERT(parameter) first.

&gt; WebCore/platform/graphics/filters/FETurbulence.cpp:360
&gt; +#ifdef FILTER_THREAD

Same comment, use USE(FILTER_THREADS), won&apos;t repeat it for the other occourences.

&gt; WebCore/platform/graphics/filters/FETurbulence.cpp:362
&gt; +    if (imageRect.height() &gt;= 6 &amp;&amp; imageRect.width() * imageRect.height() &gt; 4000) {

Emperical data comment...

&gt; WebCore/platform/graphics/filters/FETurbulence.h:95
&gt; +        {

ASSERT(filter)

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:33
&gt; +#ifdef FILTER_THREAD
&gt; +ThreadIdentifier FilterEffect::s_threadID;
&gt; +FilterEffect::ThreadShared* FilterEffect::s_threadShared;
&gt; +bool FilterEffect::s_stopThread;
&gt; +#endif

We generally disallow globals, so how about putting these in functions?
static ThreadIdentifier threadIdentifier()
{
    static ThreadIdentifier s_threadID;
    return s_threadID;
}

Are you avoiding the use of DEFINE_STATIC_LOCAL on purpose?
I have never used threads in WebCore so far, forgive my ignorance if I&apos;m overlooking something obvious.

&gt; WebCore/platform/graphics/filters/FilterEffect.cpp:141
&gt; +        s_threadShared-&gt;m_cond.wait(s_threadShared-&gt;m_mutex);

Is this prefereedd style when using threads? Are shall we expose accesors for m_cond, m_start, m_finish, m_function, m_mutex etc.?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355239</commentid>
    <comment_count>4</comment_count>
      <attachid>83307</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-02-22 07:06:48 -0800</bug_when>
    <thetext>Created attachment 83307
Speeding up FETurbulence with SMP

I have redesigned the previous concept of threading from Zoltan&apos;s suggestion and introduced a framework for parallel tasks/jobs.

The ParallelJobs framework is based on WebKit&apos;s threading infrastructure and/or OpenMP&apos;s API.

The usage of ParallelJobs is the following:
1.- Create ParallelJobs object - which allocates the worker threads and necessary objects.
2.- Fill the parameter array - allocated by ParallelJobs, assign different sub-tasks for the workers
3.- Execute the workers
4.- Combine the necessary information [optional]

This patch contains:
1.- ParallelJobs framework
2.- SMP version of FETurbulence

One more note:
I have measured 60%-80% performance progression on dual-core systems on ARM and x86 as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355255</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-22 07:34:42 -0800</bug_when>
    <thetext>May I suggest to add benchmarks (even if only Qt benchmarks) to see how does that fly?

I am also not a fan of OpenMP for having had some strange performance numbers out of it (like x1.1 boost where direct threading with pthread gave me x1.9). If we want to use more SMP inside WebKit, I would really prefer something more like TBB, because you have a lot more control over the way things are parallelized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355267</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-22 07:49:08 -0800</bug_when>
    <thetext>Attachment 83307 did not build on win:
Build output: http://queues.webkit.org/results/7946220</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355295</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-22 08:36:41 -0800</bug_when>
    <thetext>Attachment 83307 did not build on mac:
Build output: http://queues.webkit.org/results/7946234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355301</commentid>
    <comment_count>8</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-02-22 08:42:56 -0800</bug_when>
    <thetext>&gt; May I suggest to add benchmarks (even if only Qt benchmarks) to see how does that fly?

Where to add benchmarks? If you send me some pointers I will happily measure the effect of this patch, but I have to mention that in general the benchmarks mainly give an overall insight about the performance. So, if you really would like to measure the effect of this kind of parallelization, you should create a basic svg with turbulence filter. For example: you can use the Source/WebCore/manual-tests/svg-filter-animation.svg as a simple benchmark after all non-related filters are removed from the SVG.


&gt; I would really prefer something more like TBB, because you have a lot more control over the way things are parallelized.

Good idea, but I feel this could be another patch where we will introduce TBB for another threading model of the WebKit&apos;s threading interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355316</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-22 08:58:43 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; May I suggest to add benchmarks (even if only Qt benchmarks) to see how does that fly?
&gt; 
&gt; Where to add benchmarks? If you send me some pointers I will happily measure the effect of this patch, but I have to mention that in general the benchmarks mainly give an overall insight about the performance. So, if you really would like to measure the effect of this kind of parallelization, you should create a basic svg with turbulence filter. For example: you can use the Source/WebCore/manual-tests/svg-filter-animation.svg as a simple benchmark after all non-related filters are removed from the SVG.

The benchmarks for Qt are in Source/WebKit/qt/tests/benchmarks/

This is really a performance optimization. You don&apos;t need SMP to make the code cleaner/simpler, quite the contrary. So I think the performance gain is very relevant for this task.

If I understant correctly, you are doing research. So getting accurate numbers is probably interesting for your papers as well.
When we considered parallelization for Qt&apos;s CPU rasterization, we looked for the boundaries of input for which SMP is helpful VS is harmful. I think this kind of analysis in both interesting for the WebKit project, and for research. (and note that we ended up not using parallelization for most primitives of Qt because it was more harmful than helpful for general rendering).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356722</commentid>
    <comment_count>10</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-02-24 00:19:50 -0800</bug_when>
    <thetext>&gt; If I understant correctly, you are doing research. So getting accurate numbers is probably interesting for your papers as well.

I would be the most happiest people if this topic was a research.

&gt; When we considered parallelization for Qt&apos;s CPU rasterization, we looked for the boundaries of input for which SMP is helpful VS is harmful. I think this kind of analysis in both interesting for the WebKit project, and for research. (and note that we ended up not using parallelization for most primitives of Qt because it was more harmful than helpful for general rendering).

I agree with you about the importance of boundaries. That&apos;s why I left the s_minimalRectDimension for platforms. All other code depends on the number of requested threads. So, if the platform/OS/architecture is able to decide its boundaries this will be an easy task to implement their needs. Of course lots of benchmarking are needed to achieve this, but for introducing this parallelization approach the current limit is fine. Fine tuning of parallel turbulence filter should be done later with the help of benchmarks.

Anyway I will check Qt&apos;s benchmark environment. Is the time measuring method of this environment based on clock_t or wall-time (for example: clock_gettime)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356776</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-24 02:07:14 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Anyway I will check Qt&apos;s benchmark environment. Is the time measuring method of this environment based on clock_t or wall-time (for example: clock_gettime)?

You choose the kind of timing with a parameter when running the benchmark: http://doc.qt.nokia.com/latest/qtestlib-manual.html#creating-a-benchmark</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356779</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-24 02:20:48 -0800</bug_when>
    <thetext>crazy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356780</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-24 02:21:43 -0800</bug_when>
    <thetext>If we&apos;re going to use this parallel jobs thing widely, it&apos;s eventually going to need a GCG implementation:
http://developer.apple.com/technologies/mac/snowleopard/gcd.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357697</commentid>
    <comment_count>14</comment_count>
      <attachid>83307</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-02-24 22:17:21 -0800</bug_when>
    <thetext>Comment on attachment 83307
Speeding up FETurbulence with SMP

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        too complex. Using the power of Simmetric Multi Processing (SMP) we

symmetric</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357698</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-02-24 22:17:55 -0800</bug_when>
    <thetext>I think it would be better to try to speed things up with SSE before we go to multithreading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357720</commentid>
    <comment_count>16</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-02-24 23:13:07 -0800</bug_when>
    <thetext>I think some template magic could make this more user frendly. We could remove some static_casts and sizeof operations in that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357721</commentid>
    <comment_count>17</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-02-24 23:15:19 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; I think it would be better to try to speed things up with SSE before we go to multithreading.

See https://bugs.webkit.org/show_bug.cgi?id=54456 (ARM Neon is similar to x86 SSE). Could you help me reviewing that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357769</commentid>
    <comment_count>18</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-02-25 01:06:18 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; I think it would be better to try to speed things up with SSE before we go to multithreading.

The SSE and NEON are very cool features which should be used in WebKit directly or indirectly, but they are architecture dependent features. We can use them to speed up something directly, like Zoltan&apos;s patch for FELighting, or design a common framework (something like JSC&apos;s macro assembler) which drops many performance opportunities because of the high level abstraction - like in JSC. Anyhow, we should consider SIMD extensions, but the scope of SIMD and SMP are different. Any of them can live without the other, and can work with the other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359747</commentid>
    <comment_count>19</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-03-01 01:27:07 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Anyway I will check Qt&apos;s benchmark environment. Is the time measuring method of this environment based on clock_t or wall-time (for example: clock_gettime)?
&gt; 
&gt; You choose the kind of timing with a parameter when running the benchmark: http://doc.qt.nokia.com/latest/qtestlib-manual.html#creating-a-benchmark

You can find another version of the benchmarks on gitorious: http://gitorious.org/qtwebkit/performance.
In this repo the benchmarks based on wall-time with higher accuracy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360649</commentid>
    <comment_count>20</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-03-02 00:55:30 -0800</bug_when>
    <thetext>&gt; You can find another version of the benchmarks on gitorious: http://gitorious.org/qtwebkit/performance.

It looks like this performance tool has some issue running as a benchmark. I used several tools from this project, but they provided strange values to me.

I create a simple svg with only one filter (on a BIG area). It takes about 5 sec to compute the filter with QtWebKit. And here is a sample result of cycler test:

********* Start testing of tst_Cycler *********
Config: Using QTest library 4.7.0, Qt 4.7.0
PASS   : tst_Cycler::initTestCase()
PASS   : tst_Cycler::load()
PASS   : tst_Cycler::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped
********* Finished testing of tst_Cycler *********
Printing result for: total
	benchmark: cycler::load	http://127.0.0.1/~smp/svg/turbulence.svg
		mean: 3 msecs +/- 3239 msecs, +/- 107967 %
		avg:  1685 msecs
			5741 3 3 3 2 2 2 5464 5636 3 
Total mean: 3 msecs per test, avg: 1685


And another one:
		mean: 3 msecs +/- 3850 msecs, +/- 128333 %
		avg:  2312 msecs
			5875 5682 5875 5679 3 2 2 2 2 2 

Btw, using WebKit&apos;s threading, the results:
		mean: 2 msecs +/- 1588 msecs, +/- 79400 %
		avg:  676 msecs
			3408 3336 3 3 2 2 2 2 2 2 

I think there is some kind of caching issue. I feel this environment cannot be used as a benchmark now.

Benjamin, do you have any idea what is happening here? Why did the environment produce this strange numbers?

Btw, the derivation of the valid numbers are also too high.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360689</commentid>
    <comment_count>21</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-03-02 03:00:57 -0800</bug_when>
    <thetext>&gt; Benjamin, do you have any idea what is happening here? Why did the environment produce this strange numbers?

Nope, I have no idea what is going on here. The deviation is just insane, it is usually around 1%.

But I would not use that particular benchmark. I would use tst_Painting::fullPagePaint(). Because what you really care about is the rendering speed. The cycler will also take into account loading and layout time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360705</commentid>
    <comment_count>22</comment_count>
      <attachid>84394</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-03-02 03:44:45 -0800</bug_when>
    <thetext>Created attachment 84394
A big SVG to test turbulence filter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360710</commentid>
    <comment_count>23</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-03-02 03:47:12 -0800</bug_when>
    <thetext>&gt; I would use tst_Painting::fullPagePaint(). Because what you really care about is the rendering speed.

In this test the calculation of SVG is not included.

********* Finished testing of tst_Painting *********
Printing result for: total
	benchmark: painting::paint	http://127.0.0.1/~smp/svg/turbulence.svg
		mean: 46 msecs +/- 0 msecs, +/- 0 %
		avg:  46 msecs
			47 47 47 46 46 46 46 46 46 46 
	benchmark: painting::fullPagePaint	http://127.0.0.1/~smp/svg/turbulence.svg
		mean: 58 msecs +/- 0 msecs, +/- 0 %
		avg:  58 msecs
			58 58 58 58 58 58 58 58 59 58 
Total mean: 52 msecs per test, avg: 52</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360719</commentid>
    <comment_count>24</comment_count>
      <attachid>84399</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-03-02 04:24:18 -0800</bug_when>
    <thetext>Created attachment 84399
A simple test case to benchmark the SMP-based turbulence filter

This test case is able to show the effect of SMP-based turbulence filter. I know the JS is also taken account in this test, but its effect for the execution time is not significant (according to filter calculation). It is not an ultimate benchmark, it is just a simple test. If anyone has a good test or a benchmark for SVG, please let me know!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360723</commentid>
    <comment_count>25</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-03-02 04:40:51 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; Benjamin, do you have any idea what is happening here? Why did the environment produce this strange numbers?
&gt; 
&gt; Nope, I have no idea what is going on here. The deviation is just insane, it is usually around 1%.
&gt; 

Not belongs strictly to this bug (should we create another?) but
I have also tried those tests (the gitorious version) and the deviation
was not acceptable. I guess the trunk version also suffering from this
in wall-time mode. I do not think this is only a problem with SVG related
pages but it is caused by the event based approach of our benchmark framework.
The really good thing in this framework is that one can measure
the performance of specific subsystems like layouting or painting
but we cannot use it to validate optimizations as long as we cannot make it
producing stable results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364496</commentid>
    <comment_count>26</comment_count>
      <attachid>85174</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-03-09 07:41:32 -0800</bug_when>
    <thetext>Created attachment 85174
Measurement result with Methanol

I have measured the performance progression of this SMP framework with our page loading benchmark (called Methanol: http://gitorious.org/methanol).

Two measurement scenarios were used to validate the framework (an artificial test-suite and a collection of real websites).

Scenario 1:
 - Real websites:
   - Contains the first 25 unique websites from Alexa Top 500.
   - Does not contain any SVG.
 - Result
   - Measured on x86 and on ARM
   - It is not surprising that there is no difference between the reference and the two SMP-based approaches.

Scenario 2:
 - Artificial test-suite:
   - Methanol contains a small test-suite for SVG. Some test cases contain only one SVG filter with simple shapes, others are using combined filters.
 - Result
   - Measured on x86 and ARM
   - Methanol reported 30% - 80% performance progression on turbulence-related tests. Others were not changed. See the attached file.
 - An important though
   - The &apos;turbSmall&apos; test contains several small elements. The turbulence filter is called on these elements independently. The drawing area is for each elements is 100x100 (which is under the initial SMP-limit for turbulence). You can see the performance numbers were the same for each measurements. While the &apos;turbBig&apos; test performs better with SMP (in this case the elements&apos; size are 400x400).

If someone has another SVG-related benchmark, I would be happy to measure the SMP framework with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375069</commentid>
    <comment_count>27</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-03-28 23:53:27 -0700</bug_when>
    <thetext>&gt; Created an attachment (id=83307) [details]
&gt; Speeding up FETurbulence with SMP
&gt; ...
&gt;    - Methanol reported 30% - 80% performance progression on turbulence-related tests. Others were not changed. See the attached file.

Any other thoughts or suggestions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378808</commentid>
    <comment_count>28</comment_count>
      <attachid>83307</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-04-04 08:51:22 -0700</bug_when>
    <thetext>Comment on attachment 83307
Speeding up FETurbulence with SMP

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

On the whole looks good to me, but please fix the following things:

- I agree with Zoltan ( https://bugs.webkit.org/show_bug.cgi?id=43903#c16 ), we need 
template for parameter passing to avoid ugly reinterpret_casts and using sizof.

- Please fix the typo detected by smfr. (s/Simmetric/Symmetric)

- And what about the other build systems? You should add the new files
for all build system. ( Or at least disable PARALLEL_JOBS if !PLATFORM(QT) )
For example it doesn&apos;t build on Windows because of missing include path.

r- for the present due to my comments above and below.

&gt; Source/JavaScriptCore/wtf/ParallelJobs.cpp:135
&gt; +    ASSERT(m_numberOfJobs &gt; 0);

m_numberOfJobs is always greater than 0 if !ENABLE(OPENMP)

&gt; Source/JavaScriptCore/wtf/ParallelJobs.h:44
&gt; +//     ParallelJobs parallelJobs(&amp;worker, sizeof(Parameters));

s/worker/workerFunction

&gt; Source/JavaScriptCore/wtf/Platform.h:1162
&gt; +#if !defined(ENABLE_PARALLEL_JOBS) &amp;&amp; ENABLE(OPENMP)
&gt; +#define ENABLE_PARALLEL_JOBS 1
&gt; +#endif

We shouldn&apos;t enable parallel jobs if ENABLE(SINGLE_THREADED) is 
true, so we need an additional !ENABLE(SINGLE_THREADED) guard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379504</commentid>
    <comment_count>29</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-04-05 06:26:21 -0700</bug_when>
    <thetext>&gt; On the whole looks good to me, but please fix the following things:
&gt; 
&gt; - I agree with Zoltan ( https://bugs.webkit.org/show_bug.cgi?id=43903#c16 ), we need 
&gt; template for parameter passing to avoid ugly reinterpret_casts and using sizof.

Well, it seems an easy task, but the ParallelJobs has a static s_threadPool member in case of using WebKit&apos;s threading. If ParallelJobs is changed to template&lt;typename Type&gt;ParallelJobs, we will end up in more s_threadPool members (one for each different template type). This is not what we want, we should have only one thread pool. A possible solution is to create a base class (for example ParallelEnvironment) which contains the s_threadPool member and the related ThreadPrivate class.

I am still not convinced which solution is better - a template class with a base pool, or passing the size of the parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379509</commentid>
    <comment_count>30</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-04-05 06:31:58 -0700</bug_when>
    <thetext>&gt; I am still not convinced which solution is better - a template class with a base pool, or passing the size of the parameter.

I vote for the base class. You have to do it only once. The other one is ugly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379599</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-05 08:50:46 -0700</bug_when>
    <thetext>Please consider that inheritance should only be used to express &quot;is a&quot; relationships, and never to share code or data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381175</commentid>
    <comment_count>32</comment_count>
      <attachid>88589</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-04-07 01:06:10 -0700</bug_when>
    <thetext>Created attachment 88589
Speeding up FETurbulence with SMP

Well, I redesigned the patch using template (and fixed the other issues as well). The difference of the usage of ParallelJobs looks very small, but the framework itself is getting more complex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381245</commentid>
    <comment_count>33</comment_count>
      <attachid>88609</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-04-07 05:19:11 -0700</bug_when>
    <thetext>Created attachment 88609
Speeding up FETurbulence with SMP

Speculative fix for vcproj file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381384</commentid>
    <comment_count>34</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 08:58:14 -0700</bug_when>
    <thetext>+        programming. The framework is based on WebKit&apos;s threading infrastructure
+        and Open Multi-Processing&apos;s (OpenMP) API.

While this is certainly an interesting experiment and an extremely promising direction, I&apos;m not sure that adding an OpenMP-inspired threading code to WebKit is a good idea.

The code doesn&apos;t fit with the rest of WebKit, and it doesn&apos;t fit well with some target platforms (e.g. on OS X, one should use libdispatch for parallel jobs).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381458</commentid>
    <comment_count>35</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-04-07 10:25:45 -0700</bug_when>
    <thetext>&gt; The code doesn&apos;t fit with the rest of WebKit, and it doesn&apos;t fit well with some target platforms (e.g. on OS X, one should use libdispatch for parallel jobs).

As far as I see the central question of the patch is the generic WebKit interface for parallel jobs. The technical details (which platfom how implements them) is secondary. The header contains a simple, portable interface, which has 3 steps:
 - request threads, passing the optimal number of threads
 - system returns with the number of allocated threads (always &lt;= optimal, but &gt;= l), 
 - fill the thread local data
 - execute the jobs, and wait for finish

Alexey, would you do that a different way? Again, the purpose of this work seems to find a simple, yet powerful parallel processing interface. The openmp thing is just an implementation, nothing more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381502</commentid>
    <comment_count>36</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 11:11:39 -0700</bug_when>
    <thetext>Libdispatch is different in recognizing that no single application knows what happens with the rest of the system, so no application can know how many concurrent threads to use. Instead, you supply small tasks, and it makes sure to optimize parallelism globally and dynamically.

Since it&apos;s open source, you can use it on other operating systems, although the benefits are smaller without kernel support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381512</commentid>
    <comment_count>37</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-04-07 11:21:15 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; Libdispatch is different in recognizing that no single application knows what happens with the rest of the system, so no application can know how many concurrent threads to use. Instead, you supply small tasks, and it makes sure to optimize parallelism globally and dynamically.
&gt; 
&gt; Since it&apos;s open source, you can use it on other operating systems, although the benefits are smaller without kernel support.

This is good news, it fits to the current approach. Basically we would return the optimal number of threads and let the system execute them in any order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381525</commentid>
    <comment_count>38</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 11:36:06 -0700</bug_when>
    <thetext>What I&apos;m saying is that libdispatch changes the number of threads dynamically. It&apos;s not determined at the time tasks are scheduled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381541</commentid>
    <comment_count>39</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-04-07 11:52:08 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; What I&apos;m saying is that libdispatch changes the number of threads dynamically. It&apos;s not determined at the time tasks are scheduled.

I understand that, still I don&apos;t see a problem here. Basically even with libdispatch, you need to create those small tasks, isn&apos;t it? And their number is fixed when you created them, and they were executed somehow (doesn&apos;t matter how).

http://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/ConcurrencyandApplicationDesign/ConcurrencyandApplicationDesign.html#//apple_ref/doc/uid/TP40008091-CH100-SW1

Even with libdispatch, you determine the number of sub-tasks (since you create them), and their number is never infinte. Thus, the ParrallelJobs returns the number you passed as maxThreads, you create those sub-tasks, and libdispatch execute them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381563</commentid>
    <comment_count>40</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-07 12:14:33 -0700</bug_when>
    <thetext>So, are you saying that we&apos;d just pass INT_MAX as optimal number of threads? Even if that works, it sounds like an abuse.

I think that using parallelism more would be a good topic for WebKit contributor meeting discussion this month.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381589</commentid>
    <comment_count>41</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-04-07 12:48:32 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; So, are you saying that we&apos;d just pass INT_MAX as optimal number of threads? Even if that works, it sounds like an abuse.

hmmmm, not exactly. I would rather say that the optimal number would depend on the input, like we want to start a job for each 5000 pixels (don&apos;t think every pixel should have an own thread...), so the optimal would be round_up(width * height / 5000)

&gt; I think that using parallelism more would be a good topic for WebKit contributor meeting discussion this month.

Absolutely true. Unfortunately we can&apos;t be there in person. I hope we could follow you somehow, like mails, or something...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382736</commentid>
    <comment_count>42</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-08 23:51:08 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; &gt; The code doesn&apos;t fit with the rest of WebKit, and it doesn&apos;t fit well with some target platforms (e.g. on OS X, one should use libdispatch for parallel jobs).
&gt; 
&gt; As far as I see the central question of the patch is the generic WebKit interface for parallel jobs. The technical details (which platfom how implements them) is secondary. The header contains a simple, portable interface, which has 3 steps:
&gt;  - request threads, passing the optimal number of threads
&gt;  - system returns with the number of allocated threads (always &lt;= optimal, but &gt;= l), 
&gt;  - fill the thread local data
&gt;  - execute the jobs, and wait for finish
&gt; 
&gt; Alexey, would you do that a different way? Again, the purpose of this work seems to find a simple, yet powerful parallel processing interface. The openmp thing is just an implementation, nothing more.

Can we maybe split up everything openmp related into a different header, to really make it a detail of the implementation.

I think the patch is already great as-is, though I&apos;m absolutely no expert in this area, and like the hear from others how to go on :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382750</commentid>
    <comment_count>43</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-04-09 00:27:42 -0700</bug_when>
    <thetext>&gt; Can we maybe split up everything openmp related into a different header, to really make it a detail of the implementation.

The patch needs to be redesigned :(, because the ^{ block } construction required by libdispatch combined with templates results an GCC internal compiler error. Perhaps someone should report this to Apple as it seems ^{ block } is a special extension introduced by them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382762</commentid>
    <comment_count>44</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-04-09 02:39:08 -0700</bug_when>
    <thetext>It looks like everything is discussed without me. ;) That&apos;s great!

First of all the ParallelJobs framework should look like the Threading one. So splitting it into different headers is a good idea.

About OpenMP, libdispatch and other parallel processing API. Every platform has its own favorite parallel processing method/API. I have only introduced one extra (OpenMP) beside the generic WebKit&apos;s threading infrastructure. The libdispatch is also a very good feature, but I am not familiar with it. So, It would be nice if someone helps in this area.

About the framework. The WebKit&apos;s ParallelJobs framework should be simple and powerful for each parallel processing method/API. It is simple if the developers think it is ;) . It is powerful if it is as close to the platform dependent parallel processing API as possible. My solution is close to satisfy those two requirement. Well, I do not think I invented a brand new method for parallel processing. The basics are the same as you can see in any API.
 - Allocate / request some threads (depending on the input)
 - Fill the threads&apos; local data
 - Execute the threads and wait for finish

This is a very basic method using parallel processing and every API provides a way to execute tasks based on the above topics. As I see libdispatch also supports this way (http://libdispatch.macosforge.org/trac/wiki/tutorial#Puttingworkinthepipeline:Queues)

About the technical details. Using template makes a big mess. Especially when I try to add libdispatch support. As Zoltan said libdispatch is not supported in a template. The GCC 4.2 fails with internal compiler error on Mac. So, I have to redesign the whole framework.
- First of all, I would like to create separate headers for each parallel processing method/API and a common one which will contain the public API of WebKit&apos;s ParallelJobs framework (thanks to Nikolas).
- The other important thing should be the base class (so-called ParallelEnviroment). It will be something like in my first patch, will contain a constructor for initialization, functions to be able to fill the local data and an execute function.
- The third part should be the template class. The purpose of this class is to make the framework be as simple as possible.

Any more thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383298</commentid>
    <comment_count>45</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-04-11 11:22:09 -0700</bug_when>
    <thetext>Is it really a good idea to add the complexity of threading to the mix when so many basic bugs and crashes in SVG filters remain?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383369</commentid>
    <comment_count>46</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-04-11 12:26:47 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; Is it really a good idea to add the complexity of threading to the mix when so many basic bugs and crashes in SVG filters remain?

So many is a little exaggerated :) SVG is getting more attention than in the past, and the code improves rapidly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383442</commentid>
    <comment_count>47</comment_count>
      <attachid>88609</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-11 13:36:18 -0700</bug_when>
    <thetext>Comment on attachment 88609
Speeding up FETurbulence with SMP

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

This is a very interesting project, and I&apos;d love to be able to benchmark it under WinCairo to see what improvements it might provide.  It would be nice (in the future) to allow GCD/OpenMP backends for generic parallelization (perhaps in a &apos;platform/libdispatch&apos; and &apos;platform/openmp&apos; structure).

&gt; Source/JavaScriptCore/wtf/ParallelJobs.cpp:135
&gt; +

Couldn&apos;t the m_numberOfJobs calculation and the threadpool setup be done in a method, hiding the knowledge of OPENMP use?  Ditto for maxNumberOfThreads (above), though probably less important.

&gt; Source/JavaScriptCore/wtf/ParallelJobs.h:73
&gt; +static const int maxParallelThreads = 2;

Can&apos;t this be hidden inside the implementation file?  Is it accessed by other compilation units?

&gt; Source/JavaScriptCore/wtf/ParallelJobs.h:149
&gt; +    void executeJobs()

For clarity, could this implementation be hidden inside the cpp file?

&gt; Source/JavaScriptCore/wtf/ParallelJobs.h:158
&gt; +        int i;

Why is this declared outside the for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383559</commentid>
    <comment_count>48</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-04-11 14:56:10 -0700</bug_when>
    <thetext>&gt; So many is a little exaggerated :) SVG is getting more attention than in the past, and the code improves rapidly.

Given the rapid improvement you&apos;re expecting, would you be willing to hold off on changes like this until all reproducible crashers in SVG filters have been fixed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383849</commentid>
    <comment_count>49</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-04-12 00:01:40 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; &gt; So many is a little exaggerated :) SVG is getting more attention than in the past, and the code improves rapidly.
&gt; 
&gt; Given the rapid improvement you&apos;re expecting, would you be willing to hold off on changes like this until all reproducible crashers in SVG filters have been fixed?

I just could just find of two crashes in bugzilla. IIRC Zoltan is working on one of these crashes. The second one is more a implementation problem of SVGImage, that affects SVG filter. So SVGImage should get fixed instead of filter. If you know of more bugs, please let me know. If you know of more crashes, file a bug and add me and Zoltan please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383858</commentid>
    <comment_count>50</comment_count>
      <attachid>89166</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-04-12 00:41:58 -0700</bug_when>
    <thetext>Created attachment 89166
Speeding up FETurbulence with SMP

Well, I have updated the path as I promised; using separate headers, base classes try to be close to the platform dependent parallel processing APIs, the template class is as generic as possible.

Although I am not familiar with Mac, I have introduced a possible usage of libdistpatch API. I hope there will be someone else who is able to fine tune this part for Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383859</commentid>
    <comment_count>51</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-04-12 00:46:00 -0700</bug_when>
    <thetext>&gt; For clarity, could this implementation be hidden inside the cpp file?

Hmm. Why do you want to hide the implementation details? For example, in JavaScriptCore almost the whole assembler is public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383914</commentid>
    <comment_count>52</comment_count>
      <attachid>89166</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-04-12 03:00:30 -0700</bug_when>
    <thetext>Comment on attachment 89166
Speeding up FETurbulence with SMP

I am going to update the build systems to make svn apply happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383972</commentid>
    <comment_count>53</comment_count>
      <attachid>89195</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-04-12 06:26:06 -0700</bug_when>
    <thetext>Created attachment 89195
Speeding up FETurbulence with SMP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383973</commentid>
    <comment_count>54</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-12 06:27:33 -0700</bug_when>
    <thetext>Attachment 89195 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/ParallelJobsLibdispatch.h:75:  More than one command on the same line  [whitespace/newline] [4]
Source/JavaScriptCore/wtf/ParallelJobsLibdispatch.h:75:  Missing space before {  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/ParallelJobsLibdispatch.h:78:  More than one command on the same line  [whitespace/newline] [4]
Source/JavaScriptCore/wtf/ParallelJobsLibdispatch.h:78:  Missing space before {  [whitespace/braces] [5]
Total errors found: 4 in 16 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>392349</commentid>
    <comment_count>55</comment_count>
      <attachid>91082</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-04-26 01:15:08 -0700</bug_when>
    <thetext>Created attachment 91082
Speeding up FETurbulence with SMP

I got a feedback about the container of parameters in private; the destructor of parameters should be called during the destruction of their container.

Well, in order to solve this issue the ByteArray is changed to Vector, the container of the parameters and the ParallelEnviroment become the members of ParallelJobs class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392350</commentid>
    <comment_count>56</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-26 01:19:27 -0700</bug_when>
    <thetext>Attachment 91082 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/ParallelJobsLibdispatch.h:67:  More than one command on the same line  [whitespace/newline] [4]
Source/JavaScriptCore/wtf/ParallelJobsLibdispatch.h:67:  Missing space before {  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/ParallelJobsLibdispatch.h:72:  More than one command on the same line  [whitespace/newline] [4]
Source/JavaScriptCore/wtf/ParallelJobsLibdispatch.h:72:  Missing space before {  [whitespace/braces] [5]
Total errors found: 4 in 16 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>392396</commentid>
    <comment_count>57</comment_count>
      <attachid>91082</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-04-26 04:59:16 -0700</bug_when>
    <thetext>Comment on attachment 91082
Speeding up FETurbulence with SMP

You fixed all things what other asked, and there weren&apos;t 
any other objections, so it is ready for landing now. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392424</commentid>
    <comment_count>58</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-26 06:57:53 -0700</bug_when>
    <thetext>Style?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392428</commentid>
    <comment_count>59</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-04-26 07:02:43 -0700</bug_when>
    <thetext>&gt; Style?

:) I guess style bot is not prepared for the &apos;newly-supported feature of the C language&apos;. See here: http://libdispatch.macosforge.org/trac/wiki/tutorial#Definingworkitems:FunctionsandBlocks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392441</commentid>
    <comment_count>60</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-26 07:36:13 -0700</bug_when>
    <thetext>Please file a bug against the style-bot.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392445</commentid>
    <comment_count>61</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-26 07:38:07 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 91082:

http/tests/misc/favicon-loads-with-icon-loading-override.html bug 58412 (author: alice.liu@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392448</commentid>
    <comment_count>62</comment_count>
      <attachid>91082</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-26 07:41:04 -0700</bug_when>
    <thetext>Comment on attachment 91082
Speeding up FETurbulence with SMP

Clearing flags on attachment: 91082

Committed r84911: &lt;http://trac.webkit.org/changeset/84911&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392449</commentid>
    <comment_count>63</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-26 07:41:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392509</commentid>
    <comment_count>64</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-26 09:24:31 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/84911 might have broken SnowLeopard Intel Release (WebKit2 Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392560</commentid>
    <comment_count>65</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-26 10:47:37 -0700</bug_when>
    <thetext>Excellent work, looking forward to test it :-)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64198</attachid>
            <date>2010-08-12 02:49:59 -0700</date>
            <delta_ts>2010-11-30 05:07:48 -0800</delta_ts>
            <desc>parallel svg light filter</desc>
            <filename>0001-parallel-light.patch</filename>
            <type>text/plain</type>
            <size>9603</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAyNDVmZWFjYTRkZDg1OGMwMTVkMWY3ZWU1ZjRiNzZkYmEwMGMwODk4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBNb24sIDkgQXVnIDIwMTAgMTQ6Mjg6MDAgKzAyMDAKU3ViamVjdDogW1BBVENI
XSBqdW5rCgpTaWduZWQtb2ZmLWJ5OiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3pl
Z2VkLmh1PgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwIHwgICA1NSArKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oICAgfCAgIDM1ICsrKysrKysrKysrKwogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcCAgICAgfCAgIDQ3ICsrKysr
KysrKysrKysrLS0tCiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcu
aCAgICAgICB8ICAgMjEgKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMTQ5IGluc2VydGlvbnMo
KyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA0ZDcyNjVjLi42ODUwMDU5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAt
MjQsNiArMjQsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWZkZWYgRklMVEVSX1RI
UkVBRAorVGhyZWFkSWRlbnRpZmllciBGaWx0ZXJFZmZlY3Q6OnNfdGhyZWFkSUQ7CitGaWx0ZXJF
ZmZlY3Q6OlRocmVhZFNoYXJlZCogRmlsdGVyRWZmZWN0OjpzX3RocmVhZFNoYXJlZDsKKyNlbmRp
ZgorCiBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCgpCiAgICAgOiBtX2hhc1goZmFsc2UpCiAg
ICAgLCBtX2hhc1koZmFsc2UpCkBAIC0zMSw2ICszNiwxMyBAQCBGaWx0ZXJFZmZlY3Q6OkZpbHRl
ckVmZmVjdCgpCiAgICAgLCBtX2hhc0hlaWdodChmYWxzZSkKICAgICAsIG1fYWxwaGFJbWFnZShm
YWxzZSkKIHsKKyNpZmRlZiBGSUxURVJfVEhSRUFECisgICAgaWYgKCFzX3RocmVhZElEKSB7Cisg
ICAgICAgIGlmICghc190aHJlYWRTaGFyZWQpCisgICAgICAgICAgICBzX3RocmVhZFNoYXJlZCA9
IG5ldyBUaHJlYWRTaGFyZWQ7CisgICAgICAgIHNfdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoZmls
dGVyVGhyZWFkLCAwLCAiRmlsdGVyIGNvbW1vbiB0aHJlYWQiKTsKKyAgICB9CisjZW5kaWYKIH0K
IAogRmlsdGVyRWZmZWN0Ojp+RmlsdGVyRWZmZWN0KCkKQEAgLTg0LDYgKzk2LDQ5IEBAIFRleHRT
dHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgaW50KSBjb25zdAogICAgIHJldHVybiB0czsKIH0KIAorI2lmZGVmIEZJTFRFUl9USFJFQUQK
K2Jvb2wgRmlsdGVyRWZmZWN0OjpleGVjdXRlKFdURjo6VGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24s
IHZvaWQqIHBhcmFtZXRlcikKK3sKKyAgICBpZiAoIXNfdGhyZWFkU2hhcmVkKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQoIXNfdGhyZWFkU2hhcmVkLT5tX3N0YXJ0ICYmICFz
X3RocmVhZFNoYXJlZC0+bV9maW5pc2gpOworCisgICAgTXV0ZXhMb2NrZXIgbG9jayhzX3RocmVh
ZFNoYXJlZC0+bV9tdXRleCk7CisgICAgc190aHJlYWRTaGFyZWQtPm1fZnVuY3Rpb24gPSBmdW5j
dGlvbjsKKyAgICBzX3RocmVhZFNoYXJlZC0+bV9wYXJhbWV0ZXIgPSBwYXJhbWV0ZXI7CisgICAg
c190aHJlYWRTaGFyZWQtPm1fc3RhcnQgPSB0cnVlOworICAgIHNfdGhyZWFkU2hhcmVkLT5tX2Nv
bmQuc2lnbmFsKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRmlsdGVyRWZmZWN0Ojp3
YWl0Rm9yRmluaXNoKCkKK3sKKyAgICBBU1NFUlQoc190aHJlYWRTaGFyZWQpOworCisgICAgd2hp
bGUgKCFzX3RocmVhZFNoYXJlZC0+bV9maW5pc2gpCisgICAgICAgIHNfdGhyZWFkU2hhcmVkLT5t
X2NvbmQud2FpdChzX3RocmVhZFNoYXJlZC0+bV9tdXRleCk7CisKKyAgICBzX3RocmVhZFNoYXJl
ZC0+bV9maW5pc2ggPSBmYWxzZTsKK30KKwordm9pZCogRmlsdGVyRWZmZWN0OjpmaWx0ZXJUaHJl
YWQodm9pZCopCit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKHNfdGhyZWFkU2hh
cmVkLT5tX3N0YXJ0KSB7CisgICAgICAgICAgICBzX3RocmVhZFNoYXJlZC0+bV9mdW5jdGlvbihz
X3RocmVhZFNoYXJlZC0+bV9wYXJhbWV0ZXIpOworCisgICAgICAgICAgICBNdXRleExvY2tlciBs
b2NrKHNfdGhyZWFkU2hhcmVkLT5tX211dGV4KTsKKyAgICAgICAgICAgIHNfdGhyZWFkU2hhcmVk
LT5tX3N0YXJ0ID0gZmFsc2U7CisgICAgICAgICAgICBzX3RocmVhZFNoYXJlZC0+bV9maW5pc2gg
PSB0cnVlOworICAgICAgICAgICAgc190aHJlYWRTaGFyZWQtPm1fY29uZC5zaWduYWwoKTsKKyAg
ICAgICAgfQorICAgICAgICBzX3RocmVhZFNoYXJlZC0+bV9jb25kLndhaXQoc190aHJlYWRTaGFy
ZWQtPm1fbXV0ZXgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCAzYjhiNWEz
Li44MDdkMjE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCkBAIC0zMiw2ICszMiw5IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNkZWZpbmUgRklMVEVSX1RIUkVBRAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg2LDEwICs4OSwzNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NvdXJjZUlucHV0KCkgeyByZXR1cm4gZmFsc2U7
IH0KIAogICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24gPSAwKSBjb25zdDsKKwogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgRmlsdGVyRWZmZWN0KCk7CiAKKyNpZmRlZiBGSUxURVJfVEhSRUFECisgICAgICAg
IHN0YXRpYyBib29sIGV4ZWN1dGUoV1RGOjpUaHJlYWRGdW5jdGlvbiwgdm9pZCogcGFyYW1ldGVy
KTsKKyAgICAgICAgc3RhdGljIHZvaWQgd2FpdEZvckZpbmlzaCgpOworI2VuZGlmCisKICAgICBw
cml2YXRlOgorI2lmZGVmIEZJTFRFUl9USFJFQUQKKyAgICAgICAgc3RhdGljIHZvaWQqIGZpbHRl
clRocmVhZCh2b2lkKik7CisKKyAgICAgICAgY2xhc3MgVGhyZWFkU2hhcmVkIDogcHVibGljIEZh
c3RBbGxvY0Jhc2UgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBUaHJlYWRTaGFyZWQo
KQorICAgICAgICAgICAgICAgIDogbV9zdGFydChmYWxzZSkKKyAgICAgICAgICAgICAgICAsIG1f
ZmluaXNoKGZhbHNlKQorICAgICAgICAgICAgICAgICwgbV9mdW5jdGlvbihmaWx0ZXJUaHJlYWQp
IC8vIER1bW15IGZ1bmN0aW9uLgorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBtdXRhYmxlIE11dGV4IG1fbXV0ZXg7CisgICAgICAgICAgICBUaHJlYWRDb25kaXRp
b24gbV9jb25kOworICAgICAgICAgICAgYm9vbCBtX3N0YXJ0OworICAgICAgICAgICAgYm9vbCBt
X2ZpbmlzaDsKKyAgICAgICAgICAgIFdURjo6VGhyZWFkRnVuY3Rpb24gbV9mdW5jdGlvbjsKKyAg
ICAgICAgICAgIHZvaWQqIG1fcGFyYW1ldGVyOworICAgICAgICB9OworI2VuZGlmCiAKICAgICAg
ICAgYm9vbCBtX3hCQm94TW9kZSA6IDE7CiAgICAgICAgIGJvb2wgbV95QkJveE1vZGUgOiAxOwpA
QCAtMTA5LDYgKzEzOCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZsb2F0UmVj
dCBtX3VuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnM7CiAKICAgICAgICAgbXV0YWJsZSBPd25Q
dHI8SW1hZ2VCdWZmZXI+IG1fZWZmZWN0QnVmZmVyOworCisjaWZkZWYgRklMVEVSX1RIUkVBRAor
ICAgICAgICAvLyAwIGJ5IGRlZmF1bHQKKyAgICAgICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIg
c190aHJlYWRJRDsKKyAgICAgICAgc3RhdGljIFRocmVhZFNoYXJlZCogc190aHJlYWRTaGFyZWQ7
CisjZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRpbmcuY3BwIGIvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmNwcAppbmRleCA3YzNjODFjLi5mZWQ5
YmQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFTGlnaHRp
bmcuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5j
cHAKQEAgLTEzMyw2ICsxMzMsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEZFTGlnaHRpbmc6OnNl
dFBpeGVsKExpZ2h0aW5nRGF0YSYgZGF0YSwgTGlnaHRTb3VyY2U6OlBhaW50aW4KICAgICBkYXRh
LnBpeGVscy0+c2V0KGRhdGEub2Zmc2V0ICsgMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
ZGF0YS5saWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnooKSkpOwogfQog
CitBTFdBWVNfSU5MSU5FIHZvaWQgRkVMaWdodGluZzo6c2V0SW50ZXJpb3JQaXhlbHMoTGlnaHRp
bmdEYXRhJiBkYXRhLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCBmcm9tWSwgaW50IHRvWSkKK3sKKyAgICAvLyBJbnRlcmlvciBwaXhlbHMKKyAgICBmb3IgKGlu
dCB5ID0gZnJvbVk7IHkgPCB0b1k7ICsreSkgeworICAgICAgICBkYXRhLm9mZnNldCA9IHkgKiBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9y
IChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZz
ZXQgKz0gY1BpeGVsU2l6ZSkgeworICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdE
YXRhLCB4LCB5LAorICAgICAgICAgICAgICAgIC0xLjBmIC8gNC4wZiwgLWRhdGEudXBMZWZ0UGl4
ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVs
VmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVs
VmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAorICAgICAgICAgICAgICAgIC0x
LjBmIC8gNC4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZh
bHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1
ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1
ZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRp
bmcoQ2FudmFzUGl4ZWxBcnJheSogcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAg
ICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CkBAIC0yMTMsMTUgKzIy
NiwxOSBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhDYW52YXNQaXhlbEFycmF5KiBw
aXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICB9CiAKICAgICBpZiAod2lkdGggPj0g
MyAmJiBoZWlnaHQgPj0gMykgewotICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMKLSAgICAgICAg
Zm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3kpIHsKLSAg
ICAgICAgICAgIGRhdGEub2Zmc2V0ID0geSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgKyBjUGl4ZWxTaXplOwotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAg
ICAgICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwKLSAgICAgICAg
ICAgICAgICAgICAgLTEuMGYgLyA0LjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBkYXRh
LnVwUmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRh
dGEucmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5k
b3duUmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIC0xLjBmIC8gNC4wZiwg
LWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRh
LnVwUmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRh
dGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorI2lmZGVmIEZJTFRFUl9USFJFQUQKKyAgICAgICAgLy8gTm90
IHdvcnRoIG9yIG5vdCBhbGxvd2VkIHRvIGRvIFNNUAorICAgICAgICBMaWdodGluZ0RhdGEgZGF0
YTIgPSBkYXRhOworICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YTIgPSBwYWludGluZ0RhdGE7CisgICAgICAgIFBhaW50VGhyZWFkRGF0YSBwYWludFRocmVhZERh
dGEodGhpcywgZGF0YTIsIHBhaW50aW5nRGF0YTIpOworICAgICAgICBpZiAod2lkdGggKiBoZWln
aHQgPj0gNDAwMCAmJiBoZWlnaHQgPj0gNCAmJiBleGVjdXRlKHBhaW50VGhyZWFkLCAmcGFpbnRU
aHJlYWREYXRhKSkgeworICAgICAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMoZGF0YSwgcGFpbnRp
bmdEYXRhLCBoZWlnaHQgLyAyLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsKKyAgICAgICAg
ICAgIHdhaXRGb3JGaW5pc2goKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzZXRJbnRl
cmlvclBpeGVscyhkYXRhLCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmUpOworI2Vsc2UKKyAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMoZGF0YSwgMSwgZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSk7CisjZW5kaWYKICAgICB9CiAKICAgICBpbnQgdG90YWxTaXplID0g
ZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKQEAgLTI2NSw2ICsyODIs
MTggQEAgdm9pZCBGRUxpZ2h0aW5nOjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICAgICAgcmVz
dWx0SW1hZ2UoKS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY0ltYWdlRGF0YS5nZXQoKSwg
SW50UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpLCBJbnRQb2ludCgpKTsK
IH0KIAorI2lmZGVmIEZJTFRFUl9USFJFQUQKK3ZvaWQqIEZFTGlnaHRpbmc6OnBhaW50VGhyZWFk
KHZvaWQqIHBhcmFtZXRlcikKK3sKKyAgICBQYWludFRocmVhZERhdGEgZGF0YSA9ICpyZWludGVy
cHJldF9jYXN0PFBhaW50VGhyZWFkRGF0YSo+KHBhcmFtZXRlcik7CisgICAgcHJpbnRmKCJ0aHJl
YWQgcGFpbnQhXG4iKTsKKworICAgIGludCBoZWlnaHQgPSAoZGF0YS5saWdodGluZ0RhdGEuaGVp
Z2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAvIDI7CisgICAgZGF0YS5maWx0ZXItPnNldEludGVyaW9y
UGl4ZWxzKGRhdGEubGlnaHRpbmdEYXRhLCBkYXRhLnBhaW50aW5nRGF0YSwgMSwgaGVpZ2h0KTsK
KyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVMaWdodGluZy5oIGIvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmgKaW5kZXggN2RiNTBlMC4uYTUxNThjOCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmgKKysr
IGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUxpZ2h0aW5nLmgKQEAgLTcyLDYg
KzcyLDIxIEBAIHByb3RlY3RlZDoKICAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgZG93blJpZ2h0
UGl4ZWxWYWx1ZSgpOwogICAgIH07CiAKKyNpZmRlZiBGSUxURVJfVEhSRUFECisgICAgc3RydWN0
IFBhaW50VGhyZWFkRGF0YSB7CisgICAgICAgIFBhaW50VGhyZWFkRGF0YShGRUxpZ2h0aW5nKiBm
aWx0ZXIsIExpZ2h0aW5nRGF0YSYgbGlnaHRpbmdEYXRhLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEpCisgICAgICAgICAgICA6IGZpbHRlcihmaWx0ZXIpCisgICAgICAg
ICAgICAsIGxpZ2h0aW5nRGF0YShsaWdodGluZ0RhdGEpCisgICAgICAgICAgICAsIHBhaW50aW5n
RGF0YShwYWludGluZ0RhdGEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEZFTGln
aHRpbmcqIGZpbHRlcjsKKyAgICAgICAgTGlnaHRpbmdEYXRhJiBsaWdodGluZ0RhdGE7CisgICAg
ICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YTsKKyAgICB9OworI2Vu
ZGlmCisKICAgICBGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSwgRmlsdGVyRWZmZWN0KiwgY29uc3Qg
Q29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LAogICAgICAgICBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7CiAKQEAgLTc5LDYgKzk0LDEyIEBAIHByb3RlY3Rl
ZDoKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UGl4ZWwoTGlnaHRpbmdEYXRhJiwgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYsCiAgICAgICAgIGludCBsaWdodFgsIGludCBsaWdodFksIGZs
b2F0IGZhY3RvclgsIGludCBub3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBpbnQgbm9ybWFsWSk7CiAK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoTGlnaHRpbmdEYXRhJiBk
YXRhLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IGZyb21ZLCBpbnQgdG9ZKTsKKwor
I2lmZGVmIEZJTFRFUl9USFJFQUQKKyAgICBzdGF0aWMgdm9pZCogcGFpbnRUaHJlYWQodm9pZCog
cGFyYW1ldGVyKTsKKyNlbmRpZgorCiAgICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOwog
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1faW47CiAgICAgUmVmUHRyPExpZ2h0U291cmNlPiBt
X2xpZ2h0U291cmNlOwotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75125</attachid>
            <date>2010-11-30 05:07:48 -0800</date>
            <delta_ts>2011-04-07 01:06:10 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>0001-parallel-filters.patch</filename>
            <type>text/plain</type>
            <size>17638</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBjMjcwN2NmODViZDdhYjQzOGNmMTQwZWJkMTdmMzU5ZWUwYzkwMmMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUaHUsIDQgTm92IDIwMTAgMDk6Mzg6NTkgKzAxMDAKU3ViamVjdDogW1BBVENI
XSBwYXJhbGxlbC1maWx0ZXJzCgpTaWduZWQtb2ZmLWJ5OiBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAaW5mLnUtc3plZ2VkLmh1PgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcCAgIHwgICA1MiArKysrKysrKysrKy0tLQogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCAgICAgfCAgIDI0ICsrKysrKysKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIHwgICA3MiArKysr
KysrKysrKysrLS0tLS0tCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmggICB8ICAgMzIgKysrKysrKystCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcCB8ICAgNTcgKysrKysrKysrKysrKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggICB8ICAgMzUgKysrKysrKysr
KwogNiBmaWxlcyBjaGFuZ2VkLCAyMzUgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmlu
ZGV4IDgwM2I5YzEuLmRkYTMwZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTIyOSw2ICsyMjksMzAgQEAgdm9pZCBGRUxpZ2h0
aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0U291cmNl
OjpQYWludGluZ0QKICAgICBpbmxpbmVTZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0
YSwgbGlnaHRYLCBsaWdodFksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbFZlY3Rvcik7CiB9CiAK
K2lubGluZSB2b2lkIEZFTGlnaHRpbmc6OnNldEludGVyaW9yUGl4ZWxzKExpZ2h0aW5nRGF0YSYg
ZGF0YSwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgZnJvbVks
IGludCB0b1kpCit7CisgICAgSW50UG9pbnQgbm9ybWFsVmVjdG9yOworICAgIGludCBvZmZzZXQ7
CisKKyAgICBmb3IgKGludCB5ID0gZnJvbVk7IHkgPCB0b1k7ICsreSkgeworICAgICAgICBvZmZz
ZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Cisg
ICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gs
IG9mZnNldCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAgICAgICBkYXRhLmludGVyaW9yKG9mZnNl
dCwgbm9ybWFsVmVjdG9yKTsKKyAgICAgICAgICAgIGlubGluZVNldFBpeGVsKG9mZnNldCwgZGF0
YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgbm9ybWFs
VmVjdG9yKTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2lmZGVmIEZJTFRFUl9USFJFQUQKK3Zv
aWQqIEZFTGlnaHRpbmc6OnBhaW50VGhyZWFkKHZvaWQqIHBhcmFtZXRlcikKK3sKKyAgICBQYWlu
dFRocmVhZERhdGEmIGRhdGEgPSAqcmVpbnRlcnByZXRfY2FzdDxQYWludFRocmVhZERhdGEqPihw
YXJhbWV0ZXIpOworCisgICAgZGF0YS5maWx0ZXItPnNldEludGVyaW9yUGl4ZWxzKGRhdGEubGln
aHRpbmdEYXRhLCBkYXRhLnBhaW50aW5nRGF0YSwgMSwgZGF0YS5lbmRZKTsKKyAgICByZXR1cm4g
MDsKK30KKyNlbmRpZgorCiBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhCeXRlQXJyYXkq
IHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIExpZ2h0U291cmNlOjpQYWlu
dGluZ0RhdGEgcGFpbnRpbmdEYXRhOwpAQCAtMjUwLDYgKzI3NCwxNyBAQCBib29sIEZFTGlnaHRp
bmc6OmRyYXdMaWdodGluZyhCeXRlQXJyYXkqIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQogICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChtX2xpZ2h0aW5n
Q29sb3IucmVkKCksIG1fbGlnaHRpbmdDb2xvci5ncmVlbigpLCBtX2xpZ2h0aW5nQ29sb3IuYmx1
ZSgpKTsKICAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSk7
CiAKKyAgICBpbnQgc3RhcnRZID0gMTsKKyNpZmRlZiBGSUxURVJfVEhSRUFECisgICAgUGFpbnRU
aHJlYWREYXRhIHBhaW50VGhyZWFkRGF0YSh0aGlzLCBkYXRhLCBwYWludGluZ0RhdGEpOworICAg
IGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAxMCAmJiB3aWR0aCAqIGhlaWdodCA+IDQwMDAp
IHsKKyAgICAgICAgc3RhcnRZID0gKGhlaWdodCA+PiAxKSArIDM7CisgICAgICAgIHBhaW50VGhy
ZWFkRGF0YS5lbmRZID0gc3RhcnRZOworICAgICAgICBpZiAoIWV4ZWN1dGUocGFpbnRUaHJlYWQs
ICZwYWludFRocmVhZERhdGEpKQorICAgICAgICAgICAgc3RhcnRZID0gMTsKKyAgICB9CisjZW5k
aWYKKwogICAgIC8vIFRvcC9MZWZ0IGNvcm5lcgogICAgIEludFBvaW50IG5vcm1hbFZlY3RvcjsK
ICAgICBpbnQgb2Zmc2V0ID0gMDsKQEAgLTMwMSwxNiArMzM2LDEzIEBAIGJvb2wgRkVMaWdodGlu
Zzo6ZHJhd0xpZ2h0aW5nKEJ5dGVBcnJheSogcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykg
ewotICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkg
PCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3kpIHsKLSAgICAgICAgICAgIG9mZnNldCA9
IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAg
ICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gs
IG9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS5pbnRlcmlvcihv
ZmZzZXQsIG5vcm1hbFZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgaW5saW5lU2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGNGYWN0b3IxZGl2NCwgY0ZhY3RvcjFkaXY0
LCBub3JtYWxWZWN0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGlm
ICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKQorICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhk
YXRhLCBwYWludGluZ0RhdGEsIHN0YXJ0WSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSk7CisK
KyNpZmRlZiBGSUxURVJfVEhSRUFECisgICAgaWYgKHN0YXJ0WSAhPSAxKQorICAgICAgICB3YWl0
Rm9yRmluaXNoKCk7CisjZW5kaWYKIAogICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwogICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBE
aWZmdXNlTGlnaHRpbmcpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5oCmluZGV4IGMwZjYyYWIuLjEwOWYwN2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtNjksNiArNjksMjQgQEAgcHJv
dGVjdGVkOgogICAgICAgICBpbmxpbmUgdm9pZCBib3R0b21SaWdodChpbnQgb2Zmc2V0LCBJbnRQ
b2ludCYgbm9ybWFsVmVjdG9yKTsKICAgICB9OwogCisjaWZkZWYgRklMVEVSX1RIUkVBRAorICAg
IHN0cnVjdCBQYWludFRocmVhZERhdGEgeworICAgICAgICBQYWludFRocmVhZERhdGEoRkVMaWdo
dGluZyogZmlsdGVyLCBMaWdodGluZ0RhdGEmIGxpZ2h0aW5nRGF0YSwgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorICAgICAgICAgICAgOiBmaWx0ZXIoZmlsdGVyKQor
ICAgICAgICAgICAgLCBsaWdodGluZ0RhdGEobGlnaHRpbmdEYXRhKQorICAgICAgICAgICAgLCBw
YWludGluZ0RhdGEocGFpbnRpbmdEYXRhKQorICAgICAgICAgICAgLCBlbmRZKDApCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIEZFTGlnaHRpbmcqIGZpbHRlcjsKKyAgICAgICAgTGln
aHRpbmdEYXRhJiBsaWdodGluZ0RhdGE7CisgICAgICAgIC8vIExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEgbXVzdCBiZSBkdXBsaWNhdGVkLgorICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdE
YXRhIHBhaW50aW5nRGF0YTsKKyAgICAgICAgaW50IGVuZFk7CisgICAgfTsKKyNlbmRpZgorCiAg
ICAgRkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwogCiAg
ICAgYm9vbCBkcmF3TGlnaHRpbmcoQnl0ZUFycmF5KiwgaW50LCBpbnQpOwpAQCAtODIsNiArMTAw
LDEyIEBAIHByb3RlY3RlZDoKICAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7CiAgICAg
UmVmUHRyPExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOwogCisgICAgaW5saW5lIHZvaWQgc2V0
SW50ZXJpb3JQaXhlbHMoTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYs
IGludCBmcm9tWSwgaW50IHRvWSk7CisKKyNpZmRlZiBGSUxURVJfVEhSRUFECisgICAgc3RhdGlj
IHZvaWQqIHBhaW50VGhyZWFkKHZvaWQqIHBhcmFtZXRlcik7CisjZW5kaWYKKwogICAgIENvbG9y
IG1fbGlnaHRpbmdDb2xvcjsKICAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBmbG9hdCBt
X2RpZmZ1c2VDb25zdGFudDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggOWFkMjdjZi4uMTJiOWRmMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTI3
LDcgKzI3LDYgQEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkZpbHRl
ci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KIApAQCAtMTI4LDEyICsxMjcsMTEgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRp
bGVzKGJvb2wgc3RpdGNoKQogCiBGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdE
YXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpCiAgICAg
OiBzZWVkKHBhaW50aW5nU2VlZCkKKyAgICAsIGZpbHRlclNpemUocGFpbnRpbmdTaXplKQogICAg
ICwgd2lkdGgoMCkKICAgICAsIGhlaWdodCgwKQogICAgICwgd3JhcFgoMCkKICAgICAsIHdyYXBZ
KDApCi0gICAgLCBjaGFubmVsKDApCi0gICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKIHsK
IH0KIApAQCAtMjA0LDcgKzIwMiw3IEBAIGlubGluZSB2b2lkIGNoZWNrTm9pc2UoaW50JiBub2lz
ZVZhbHVlLCBpbnQgbGltaXRWYWx1ZSwgaW50IG5ld1ZhbHVlKQogICAgICAgICBub2lzZVZhbHVl
IC09IG5ld1ZhbHVlIC0gMTsKIH0KIAotZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikKK2Zs
b2F0IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQogewogICAgIHN0cnVjdCBO
b2lzZSB7CiAgICAgICAgIGludCBub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlOwpAQCAtMjM5LDIz
ICsyMzcsMjMgQEAgZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVYKIAogICAgIC8vIFRoaXMgaXMgdGFr
ZW4gMToxIGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMu
aHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50LgogICAgIGludCB0ZW1wID0gcGFpbnRpbmdEYXRhLmxh
dHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJW
YWx1ZV07Ci0gICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5l
bF1bdGVtcF07CisgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVt0ZW1wXTsK
ICAgICB1ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVswXSArIG5vaXNl
WS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMV07CiAgICAgdGVtcCA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0
aW9uSW50ZWdlclZhbHVlXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5n
RGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5u
ZWxdW3RlbXBdOwogICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0g
MSkgKiBxWzBdICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVsxXTsKICAg
ICBhID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CiAgICAgdGVtcCA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25J
bnRlZ2VyVmFsdWUgKyAxXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5n
RGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5u
ZWxdW3RlbXBdOwogICAgIHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBx
WzBdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVsxXTsKICAg
ICB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsg
bm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKLSAgICBxID0gcGFpbnRpbmdE
YXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRp
bmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3RlbXBdOwogICAgIHYgPSAobm9pc2VYLm5vaXNlUG9z
aXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzBdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJh
Y3Rpb25WYWx1ZSAtIDEpICogcVsxXTsKICAgICBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwg
dSwgdik7CiAgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOwogfQogCi11
bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9p
bnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQor
aW5saW5lIHVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFs
dWVGb3JQb2ludChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQogewogICAgIGZsb2F0IHRpbGVXaWR0aCA9IHBhaW50aW5nRGF0
YS5maWx0ZXJTaXplLndpZHRoKCk7CiAgICAgQVNTRVJUKHRpbGVXaWR0aCA+IDApOwpAQCAtMjkz
LDkgKzI5MSw5IEBAIHVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEmIHBhaW50CiAgICAgZmxvYXQgcmF0aW8gPSAx
OwogICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3Rh
dmUpIHsKICAgICAgICAgaWYgKG1fdHlwZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9J
U0UpCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWlu
dGluZ0RhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQoY2hhbm5lbCwgcGFpbnRpbmdEYXRhLCBub2lzZVZlY3Rv
cikgLyByYXRpbzsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0ICs9IGZhYnNmKG5vaXNlMkQocGFpbnRpbmdEYXRhLCBub2lzZVZlY3RvcikpIC8gcmF0
aW87CisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gZmFic2Yobm9pc2Uy
RChjaGFubmVsLCBwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSkgLyByYXRpbzsKICAgICAgICAg
bm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKICAgICAgICAgbm9pc2VWZWN0
b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKICAgICAgICAgcmF0aW8gKj0gMjsKQEAgLTMx
OCw2ICszMTYsMzIgQEAgdW5zaWduZWQgY2hhciBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1
bGVuY2VWYWx1ZUZvclBvaW50KFBhaW50aW5nRGF0YSYgcGFpbnQKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4odHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KTsKIH0K
IAoraW5saW5lIHZvaWQgRkVUdXJidWxlbmNlOjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgQnl0ZUFycmF5KiBwaXhlbEFycmF5LCBpbnQgd2lkdGgsIGludCBm
cm9tWSwgaW50IHRvWSkKK3sKKyAgICBGbG9hdFBvaW50IHBvaW50OworICAgIHBvaW50LnNldFko
YWJzb2x1dGVQYWludFJlY3QoKS55KCkgKyBmcm9tWSk7CisgICAgaW50IGluZGV4T2ZQaXhlbENo
YW5uZWwgPSBmcm9tWSAqIHdpZHRoICogNDsKKyAgICBmb3IgKGludCB5ID0gZnJvbVk7IHkgPCB0
b1k7ICsreSkgeworICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOworICAgICAgICBw
b2ludC5zZXRYKGFic29sdXRlUGFpbnRSZWN0KCkueCgpKTsKKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSAr
IDEpOworICAgICAgICAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2No
YW5uZWwsICsraW5kZXhPZlBpeGVsQ2hhbm5lbCkKKyAgICAgICAgICAgICAgICBwaXhlbEFycmF5
LT5zZXQoaW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9p
bnQoY2hhbm5lbCwgcGFpbnRpbmdEYXRhLCBwb2ludCkpOworICAgICAgICB9CisgICAgfQorfQor
CisjaWZkZWYgRklMVEVSX1RIUkVBRAordm9pZCogRkVUdXJidWxlbmNlOjpwYWludFRocmVhZCh2
b2lkKiBwYXJhbWV0ZXIpCit7CisgICAgUGFpbnRUaHJlYWREYXRhJiBkYXRhID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8UGFpbnRUaHJlYWREYXRhKj4ocGFyYW1ldGVyKTsKKworICAgIGRhdGEuZmlsdGVy
LT5zZXRJbnRlcmlvclBpeGVscyhkYXRhLnBhaW50aW5nRGF0YSwgZGF0YS5waXhlbEFycmF5LCBk
YXRhLndpZHRoLCAwLCBkYXRhLmVuZFkpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKIHZv
aWQgRkVUdXJidWxlbmNlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKIHsKICAgICBpZiAoIWVmZmVj
dENvbnRleHQoZmlsdGVyKSkKQEAgLTMzMiwxOSArMzU2LDIxIEBAIHZvaWQgRkVUdXJidWxlbmNl
OjphcHBseShGaWx0ZXIqIGZpbHRlcikKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1f
c2VlZCwgcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKSk7
CiAgICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7CiAKLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVn
aW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IHBvaW50OwotICAgIHBv
aW50LnNldFkoZmlsdGVyUmVnaW9uLnkoKSk7Ci0gICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwg
PSAwOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VSZWN0LmhlaWdodCgpOyArK3kpIHsK
LSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKLSAgICAgICAgcG9pbnQuc2V0WChm
aWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBpbWFnZVJlY3Qu
d2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwot
ICAgICAgICAgICAgZm9yIChwYWludGluZ0RhdGEuY2hhbm5lbCA9IDA7IHBhaW50aW5nRGF0YS5j
aGFubmVsIDwgNDsgKytwYWludGluZ0RhdGEuY2hhbm5lbCwgKytpbmRleE9mUGl4ZWxDaGFubmVs
KQotICAgICAgICAgICAgICAgIHBpeGVsQXJyYXktPnNldChpbmRleE9mUGl4ZWxDaGFubmVsLCBj
YWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIGZpbHRlci0+bWFw
QWJzb2x1dGVQb2ludFRvTG9jYWxQb2ludChwb2ludCkpKTsKLSAgICAgICAgfQorICAgIGludCBz
dGFydFkgPSAwOworI2lmZGVmIEZJTFRFUl9USFJFQUQKKyAgICBQYWludFRocmVhZERhdGEgcGFp
bnRUaHJlYWREYXRhKHRoaXMsIHBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgaW1hZ2VSZWN0Lndp
ZHRoKCkpOworICAgIGlmIChpbWFnZVJlY3QuaGVpZ2h0KCkgPj0gNiAmJiBpbWFnZVJlY3Qud2lk
dGgoKSAqIGltYWdlUmVjdC5oZWlnaHQoKSA+IDQwMDApIHsKKyAgICAgICAgc3RhcnRZID0gaW1h
Z2VSZWN0LmhlaWdodCgpID4+IDE7CisgICAgICAgIHBhaW50VGhyZWFkRGF0YS5lbmRZID0gc3Rh
cnRZOworICAgICAgICBpZiAoIWV4ZWN1dGUocGFpbnRUaHJlYWQsICZwYWludFRocmVhZERhdGEp
KQorICAgICAgICAgICAgc3RhcnRZID0gMDsKICAgICB9CisjZW5kaWYKKyAgICBzZXRJbnRlcmlv
clBpeGVscyhwYWludGluZ0RhdGEsIHBpeGVsQXJyYXksIGltYWdlUmVjdC53aWR0aCgpLCBzdGFy
dFksIGltYWdlUmVjdC5oZWlnaHQoKSk7CisjaWZkZWYgRklMVEVSX1RIUkVBRAorICAgIGlmIChz
dGFydFkpCisgICAgICAgIHdhaXRGb3JGaW5pc2goKTsKKyNlbmRpZgogICAgIHJlc3VsdEltYWdl
KCktPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwg
SW50UG9pbnQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuaAppbmRleCBjMTVkN2QxLi41ZDIwMDI4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC0yNyw2ICsyNyw3
IEBACiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5j
bHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNzMsMjIgKzc0LDQ1IEBAIHByaXZhdGU6CiAgICAgICAgIGxvbmcgc2VlZDsK
ICAgICAgICAgaW50IGxhdHRpY2VTZWxlY3RvclsyICogc19ibG9ja1NpemUgKyAyXTsKICAgICAg
ICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAqIHNfYmxvY2tTaXplICsgMl1bMl07CisgICAgICAgIElu
dFNpemUgZmlsdGVyU2l6ZTsKICAgICAgICAgaW50IHdpZHRoOyAvLyBIb3cgbXVjaCB0byBzdWJ0
cmFjdCB0byB3cmFwIGZvciBzdGl0Y2hpbmcuCiAgICAgICAgIGludCBoZWlnaHQ7CiAgICAgICAg
IGludCB3cmFwWDsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgogICAgICAgICBpbnQgd3JhcFk7
Ci0gICAgICAgIGludCBjaGFubmVsOwotICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7CiAKICAg
ICAgICAgUGFpbnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBwYWlu
dGluZ1NpemUpOwogICAgICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKICAgICB9OwogCisjaWZk
ZWYgRklMVEVSX1RIUkVBRAorICAgIHN0cnVjdCBQYWludFRocmVhZERhdGEgeworICAgICAgICBQ
YWludFRocmVhZERhdGEoRkVUdXJidWxlbmNlKiBmaWx0ZXIsIEJ5dGVBcnJheSogcGl4ZWxBcnJh
eSwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB3aWR0aCkKKyAgICAgICAgICAgIDog
ZmlsdGVyKGZpbHRlcikKKyAgICAgICAgICAgICwgcGl4ZWxBcnJheShwaXhlbEFycmF5KQorICAg
ICAgICAgICAgLCBwYWludGluZ0RhdGEocGFpbnRpbmdEYXRhKQorICAgICAgICAgICAgLCB3aWR0
aCh3aWR0aCkKKyAgICAgICAgICAgICwgZW5kWSgwKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsKKyAgICAgICAgQnl0ZUFycmF5KiBwaXhlbEFy
cmF5OworICAgICAgICBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YTsKKyAgICAgICAgaW50IHdp
ZHRoOworICAgICAgICBpbnQgZW5kWTsKKyAgICB9OworI2VuZGlmCisKICAgICBGRVR1cmJ1bGVu
Y2UoVHVyYnVsYW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CiAKICAg
ICBpbmxpbmUgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgZmxvYXQgbm9pc2Uy
RChQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgdW5zaWduZWQgY2hhciBj
YWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEmLCBjb25zdCBGbG9h
dFBvaW50Jik7CisgICAgZmxvYXQgbm9pc2UyRChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiwg
Y29uc3QgRmxvYXRQb2ludCYpOworICAgIGlubGluZSB1bnNpZ25lZCBjaGFyIGNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBjaGFubmVsLCBQYWludGluZ0RhdGEmLCBjb25zdCBG
bG9hdFBvaW50Jik7CisgICAgaW5saW5lIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdE
YXRhJiwgQnl0ZUFycmF5KiwgaW50IHdpZHRoLCBpbnQgZnJvbVksIGludCB0b1kpOworCisjaWZk
ZWYgRklMVEVSX1RIUkVBRAorICAgIHN0YXRpYyB2b2lkKiBwYWludFRocmVhZCh2b2lkKiBwYXJh
bWV0ZXIpOworI2VuZGlmCiAKICAgICBUdXJidWxhbmNlVHlwZSBtX3R5cGU7CiAgICAgZmxvYXQg
bV9iYXNlRnJlcXVlbmN5WDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggYWQzNTFhNS4uOTYxYWYwMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI2
LDYgKzI2LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmZGVmIEZJTFRFUl9USFJF
QUQKK1RocmVhZElkZW50aWZpZXIgRmlsdGVyRWZmZWN0OjpzX3RocmVhZElEOworRmlsdGVyRWZm
ZWN0OjpUaHJlYWRTaGFyZWQqIEZpbHRlckVmZmVjdDo6c190aHJlYWRTaGFyZWQ7Citib29sIEZp
bHRlckVmZmVjdDo6c19zdG9wVGhyZWFkOworI2VuZGlmCisKIEZpbHRlckVmZmVjdDo6RmlsdGVy
RWZmZWN0KCkKICAgICA6IG1fYWxwaGFJbWFnZShmYWxzZSkKICAgICAsIG1faGFzWChmYWxzZSkK
QEAgLTMzLDYgKzM5LDEzIEBAIEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KCkKICAgICAsIG1f
aGFzV2lkdGgoZmFsc2UpCiAgICAgLCBtX2hhc0hlaWdodChmYWxzZSkKIHsKKyNpZmRlZiBGSUxU
RVJfVEhSRUFECisgICAgaWYgKCFzX3RocmVhZElEKSB7CisgICAgICAgIGlmICghc190aHJlYWRT
aGFyZWQpCisgICAgICAgICAgICBzX3RocmVhZFNoYXJlZCA9IG5ldyBUaHJlYWRTaGFyZWQ7Cisg
ICAgICAgIHNfdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoZmlsdGVyVGhyZWFkLCAwLCAiRmlsdGVy
IGNvbW1vbiB0aHJlYWQiKTsKKyAgICB9CisjZW5kaWYKIH0KIAogRmlsdGVyRWZmZWN0Ojp+Rmls
dGVyRWZmZWN0KCkKQEAgLTg4LDYgKzEwMSw1MCBAQCBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIGludCkgY29uc3QKICAgICBy
ZXR1cm4gdHM7CiB9CiAKKyNpZmRlZiBGSUxURVJfVEhSRUFECitib29sIEZpbHRlckVmZmVjdDo6
ZXhlY3V0ZShXVEY6OlRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBwYXJhbWV0ZXIpCit7
CisgICAgaWYgKCFzX3RocmVhZFNoYXJlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
QVNTRVJUKCFzX3RocmVhZFNoYXJlZC0+bV9zdGFydCAmJiAhc190aHJlYWRTaGFyZWQtPm1fZmlu
aXNoKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2soc190aHJlYWRTaGFyZWQtPm1fbXV0ZXgpOwor
ICAgIHNfdGhyZWFkU2hhcmVkLT5tX2Z1bmN0aW9uID0gZnVuY3Rpb247CisgICAgc190aHJlYWRT
aGFyZWQtPm1fcGFyYW1ldGVyID0gcGFyYW1ldGVyOworICAgIHNfdGhyZWFkU2hhcmVkLT5tX3N0
YXJ0ID0gdHJ1ZTsKKyAgICBzX3RocmVhZFNoYXJlZC0+bV9jb25kLnNpZ25hbCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIEZpbHRlckVmZmVjdDo6d2FpdEZvckZpbmlzaCgpCit7Cisg
ICAgQVNTRVJUKHNfdGhyZWFkU2hhcmVkKTsKKworICAgIHdoaWxlICghc190aHJlYWRTaGFyZWQt
Pm1fZmluaXNoKQorICAgICAgICBzX3RocmVhZFNoYXJlZC0+bV9jb25kLndhaXQoc190aHJlYWRT
aGFyZWQtPm1fbXV0ZXgpOworCisgICAgc190aHJlYWRTaGFyZWQtPm1fZmluaXNoID0gZmFsc2U7
Cit9CisKK3ZvaWQqIEZpbHRlckVmZmVjdDo6ZmlsdGVyVGhyZWFkKHZvaWQqKQoreworICAgIHdo
aWxlICghc19zdG9wVGhyZWFkKSB7CisgICAgICAgIGlmIChzX3RocmVhZFNoYXJlZC0+bV9zdGFy
dCkgeworICAgICAgICAgICAgc190aHJlYWRTaGFyZWQtPm1fZnVuY3Rpb24oc190aHJlYWRTaGFy
ZWQtPm1fcGFyYW1ldGVyKTsKKworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhzX3RocmVh
ZFNoYXJlZC0+bV9tdXRleCk7CisgICAgICAgICAgICBzX3RocmVhZFNoYXJlZC0+bV9zdGFydCA9
IGZhbHNlOworICAgICAgICAgICAgc190aHJlYWRTaGFyZWQtPm1fZmluaXNoID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHNfdGhyZWFkU2hhcmVkLT5tX2NvbmQuc2lnbmFsKCk7CisgICAgICAgIH0KKyAg
ICAgICAgc190aHJlYWRTaGFyZWQtPm1fY29uZC53YWl0KHNfdGhyZWFkU2hhcmVkLT5tX211dGV4
KTsKKyAgICB9CisgICAgc19zdG9wVGhyZWFkID0gZmFsc2U7CisgICAgcmV0dXJuIDA7Cit9Cisj
ZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEZJTFRF
UlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgKaW5kZXggMjVkYjU3Yi4uZjcxODBiNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMzQsNiArMzQsOSBAQAogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNkZWZpbmUgRklMVEVS
X1RIUkVBRAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwOCw2ICsxMTEsMTEgQEAgcHVi
bGljOgogcHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVjdCgpOwogCisjaWZkZWYgRklMVEVSX1RI
UkVBRAorICAgIHN0YXRpYyBib29sIGV4ZWN1dGUoV1RGOjpUaHJlYWRGdW5jdGlvbiwgdm9pZCog
cGFyYW1ldGVyKTsKKyAgICBzdGF0aWMgdm9pZCB3YWl0Rm9yRmluaXNoKCk7CisjZW5kaWYKKwog
cHJpdmF0ZToKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fZWZmZWN0QnVmZmVyOwogICAgIEZp
bHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKQEAgLTEyMSw2ICsxMjksMjcgQEAgcHJp
dmF0ZToKICAgICBJbnRSZWN0IG1fbWF4RWZmZWN0UmVjdDsKIAogcHJpdmF0ZToKKyNpZmRlZiBG
SUxURVJfVEhSRUFECisgICAgc3RhdGljIHZvaWQqIGZpbHRlclRocmVhZCh2b2lkKik7CisKKyAg
ICBjbGFzcyBUaHJlYWRTaGFyZWQgOiBwdWJsaWMgRmFzdEFsbG9jQmFzZSB7CisgICAgcHVibGlj
OgorICAgICAgICBUaHJlYWRTaGFyZWQoKQorICAgICAgICAgICAgOiBtX3N0YXJ0KGZhbHNlKQor
ICAgICAgICAgICAgLCBtX2ZpbmlzaChmYWxzZSkKKyAgICAgICAgICAgICwgbV9mdW5jdGlvbihm
aWx0ZXJUaHJlYWQpIC8vIER1bW15IGZ1bmN0aW9uLgorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBtdXRhYmxlIE11dGV4IG1fbXV0ZXg7CisgICAgICAgIFRocmVhZENvbmRpdGlvbiBt
X2NvbmQ7CisgICAgICAgIGJvb2wgbV9zdGFydDsKKyAgICAgICAgYm9vbCBtX2ZpbmlzaDsKKyAg
ICAgICAgV1RGOjpUaHJlYWRGdW5jdGlvbiBtX2Z1bmN0aW9uOworICAgICAgICB2b2lkKiBtX3Bh
cmFtZXRlcjsKKyAgICB9OworI2VuZGlmCisKICAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlciB2
YXJpYWJsZXMgYXJlIFNWRyBzcGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLgogICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ1NjE0LgogCkBAIC0xMzUsNiArMTY0LDEyIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2hhc1k7CiAgICAgYm9vbCBtX2hhc1dpZHRoOwogICAgIGJvb2wgbV9oYXNI
ZWlnaHQ7CisKKyNpZmRlZiBGSUxURVJfVEhSRUFECisgICAgc3RhdGljIFRocmVhZElkZW50aWZp
ZXIgc190aHJlYWRJRDsKKyAgICBzdGF0aWMgVGhyZWFkU2hhcmVkKiBzX3RocmVhZFNoYXJlZDsK
KyAgICBzdGF0aWMgYm9vbCBzX3N0b3BUaHJlYWQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83307</attachid>
            <date>2011-02-22 07:06:48 -0800</date>
            <delta_ts>2011-04-07 01:06:10 -0700</delta_ts>
            <desc>Speeding up FETurbulence with SMP</desc>
            <filename>0001-Speeding-up-SVG-filters-with-multicore-SMP-support.patch</filename>
            <type>text/plain</type>
            <size>24150</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSBmMDNhZmE0ZDdjZGU5YTk5NDc4ZDk4NTIxN2VhMjBjNDM0Yjc5NGZlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVHVlLCAyMiBGZWIgMjAxMSAxNTo1MDoyMCArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIFNwZWVk
aW5nIHVwIFNWRyBmaWx0ZXJzIHdpdGggbXVsdGljb3JlIChTTVApIHN1cHBvcnQKClNpZ25lZC1v
ZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwgICAzMiArKysrCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5jcHAgICAgICAgICB8ICAxNjMgKysr
KysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2Jz
LmggICAgICAgICAgIHwgIDE0OSArKysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaCAgICAgICAgICAgICAgIHwgICAgOCArCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3d0Zi5wcmkgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI2ICsrKwogLi4u
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCAgICAgfCAgIDkwICsr
KysrKysrKy0tLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgg
ICAgICAgfCAgIDIzICsrKy0KIDggZmlsZXMgY2hhbmdlZCwgNDY5IGluc2VydGlvbnMoKyksIDIz
IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUGFyYWxsZWxKb2JzLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvUGFyYWxsZWxKb2JzLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAyNGNm
YTc4Li5kMmM1MDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAor
MjAxMS0wMi0yMiAgR2Fib3IgTG9raSAgPGxva2lAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGVlZGluZyB1cCBTVkcgZmlsdGVy
cyB3aXRoIG11bHRpY29yZSAoU01QKSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzkwMworCisgICAgICAgIFNvbWUgU1ZHIGZpbHRlcnMg
ZXhlY3V0ZSBhIGh1Z2UgbnVtYmVyIG9mIHBpeGVsIG1hbmlwdWxhdGlvbnMsIHdoaWNoCisgICAg
ICAgIGNhbm5vdCBiZSBzcGVkIHVwIGJ5IGdyYXBoaWNzIGFjY2VsZXJhdG9ycywgc2luY2UgdGhl
aXIgYWxnb3JpdGhtIGlzCisgICAgICAgIHRvbyBjb21wbGV4LiBVc2luZyB0aGUgcG93ZXIgb2Yg
U2ltbWV0cmljIE11bHRpIFByb2Nlc3NpbmcgKFNNUCkgd2UKKyAgICAgICAgY2FuIHNwbGl0IHVw
IGEgdGFzayB0byBzbWFsbGVyIChkYXRhIGluZGVwZW5kZW50KSB0YXNrcywgd2hpY2ggY2FuIGJl
CisgICAgICAgIGV4ZWN1dGVkIGluZGVwZW5kZW50bHkuCisKKyAgICAgICAgVGhlIFBhcmFsbGVs
Sm9icyBmcmFtZXdvcmsgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IGZvciBkaXN0cmlidXRlZAorICAg
ICAgICBwcm9ncmFtbWluZy4gVGhlIGZyYW1ld29yayBpcyBiYXNlZCBvbiBXZWJLaXQncyB0aHJl
YWRpbmcgaW5mcmFzdHJ1Y3R1cmUKKyAgICAgICAgYW5kIE9wZW4gTXVsdGktUHJvY2Vzc2luZydz
IChPcGVuTVApIEFQSS4KKworICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnMuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2JzOjpUaHJlYWRQcml2YXRlOjp0cnlMb2NrRm9yKToK
KyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2JzOjpUaHJlYWRQcml2YXRlOjpleGVjdXRlSm9iKToK
KyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2JzOjpUaHJlYWRQcml2YXRlOjp3YWl0Rm9yRmluaXNo
KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2JzOjpUaHJlYWRQcml2YXRlOjp3b3JrZXJUaHJl
YWQpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEpvYnM6OlBhcmFsbGVsSm9icyk6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsSm9iczo6ZXhlY3V0ZUpvYnMpOgorICAgICAgICAqIHd0Zi9QYXJhbGxl
bEpvYnMuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBhcmFsbGVsSm9iczo6bnVtYmVyT2ZKb2Jz
KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2JzOjpwYXJhbWV0ZXJGb3JKb2IpOgorICAgICAg
ICAoV1RGOjpQYXJhbGxlbEpvYnM6OlRocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUpOgorICAg
ICAgICAoV1RGOjpQYXJhbGxlbEpvYnM6OlRocmVhZFByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAg
ICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICogd3RmL3d0Zi5wcmk6CisKIDIwMTEtMDItMjAg
IEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QYXJhbGxlbEpvYnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxl
bEpvYnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTA2ZmUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5j
cHAKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtp
dC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShQQVJBTExFTF9KT0JTKQorCisjaW5jbHVkZSAiUGFyYWxsZWxKb2Jz
LmgiCisKK25hbWVzcGFjZSBXVEYgeworCisjaWYgIUVOQUJMRShPUEVOTVApCisKK1ZlY3Rvcjwg
UmVmUHRyPFBhcmFsbGVsSm9iczo6VGhyZWFkUHJpdmF0ZT4gPiogUGFyYWxsZWxKb2JzOjpzX3Ro
cmVhZFBvb2wgPSAwOworCitib29sIFBhcmFsbGVsSm9iczo6VGhyZWFkUHJpdmF0ZTo6dHJ5TG9j
a0ZvcihQYXJhbGxlbEpvYnMqIHBhcmVudCkKK3sKKyAgICBib29sIGxvY2tlZCA9IG1fbXV0ZXgu
dHJ5TG9jaygpOworCisgICAgaWYgKCFsb2NrZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChtX3BhcmVudCkgeworICAgICAgICBtX211dGV4LnVubG9jaygpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX3RocmVhZElEKQorICAgICAgICBtX3Ro
cmVhZElEID0gY3JlYXRlVGhyZWFkKCZQYXJhbGxlbEpvYnM6OlRocmVhZFByaXZhdGU6Ondvcmtl
clRocmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtlciIpOworCisgICAgaWYgKG1fdGhyZWFkSUQp
CisgICAgICAgIG1fcGFyZW50ID0gcGFyZW50OworCisgICAgbV9tdXRleC51bmxvY2soKTsKKyAg
ICByZXR1cm4gbV90aHJlYWRJRDsKK30KKwordm9pZCBQYXJhbGxlbEpvYnM6OlRocmVhZFByaXZh
dGU6OmV4ZWN1dGVKb2IoV29ya2VyRnVuY3Rpb24gd29ya2VyRnVuY3Rpb24sIHZvaWQqIHBhcmFt
ZXRlcnMpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKworICAgIG1fd29ya2Vy
RnVuY3Rpb24gPSB3b3JrZXJGdW5jdGlvbjsKKyAgICBtX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJz
OworICAgIG1fcnVubmluZyA9IHRydWU7CisgICAgbV90aHJlYWRDb25kaXRpb24uc2lnbmFsKCk7
Cit9CisKK3ZvaWQgUGFyYWxsZWxKb2JzOjpUaHJlYWRQcml2YXRlOjp3YWl0Rm9yRmluaXNoKCkK
K3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIHdoaWxlIChtX3J1bm5pbmcp
CisgICAgICAgIG1fdGhyZWFkQ29uZGl0aW9uLndhaXQobV9tdXRleCk7Cit9CisKK3ZvaWQqIFBh
cmFsbGVsSm9iczo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkKHZvaWQqIHRocmVhZERhdGEp
Cit7CisgICAgVGhyZWFkUHJpdmF0ZSogc2hhcmVkVGhyZWFkID0gcmVpbnRlcnByZXRfY2FzdDxU
aHJlYWRQcml2YXRlKj4odGhyZWFkRGF0YSk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhzaGFyZWRU
aHJlYWQtPm1fbXV0ZXgpOworCisgICAgd2hpbGUgKHNoYXJlZFRocmVhZC0+bV90aHJlYWRJRCkg
eworICAgICAgICBpZiAoc2hhcmVkVGhyZWFkLT5tX3J1bm5pbmcpIHsKKyAgICAgICAgICAgICgq
c2hhcmVkVGhyZWFkLT5tX3dvcmtlckZ1bmN0aW9uKShzaGFyZWRUaHJlYWQtPm1fcGFyYW1ldGVy
cyk7CisgICAgICAgICAgICBzaGFyZWRUaHJlYWQtPm1fcnVubmluZyA9IGZhbHNlOworICAgICAg
ICAgICAgc2hhcmVkVGhyZWFkLT5tX3BhcmVudCA9IDA7CisgICAgICAgICAgICBzaGFyZWRUaHJl
YWQtPm1fdGhyZWFkQ29uZGl0aW9uLnNpZ25hbCgpOworICAgICAgICB9CisgICAgICAgIC8vIFNs
ZWVwCisgICAgICAgIHNoYXJlZFRocmVhZC0+bV90aHJlYWRDb25kaXRpb24ud2FpdChzaGFyZWRU
aHJlYWQtPm1fbXV0ZXgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8vICAh
RU5BQkxFKE9QRU5NUCkKKworCitQYXJhbGxlbEpvYnM6OlBhcmFsbGVsSm9icyhXb3JrZXJGdW5j
dGlvbiB3b3JrZXJGdW5jdGlvbiwgc2l6ZV90IHNpemVPZlBhcmFtZXRlciwgaW50IHJlcXVlc3Rl
ZEpvYk51bWJlcikKKyAgICA6IG1fd29ya2VyRnVuY3Rpb24od29ya2VyRnVuY3Rpb24pCisgICAg
LCBtX3NpemVPZlBhcmFtZXRlcihzaXplT2ZQYXJhbWV0ZXIpCit7CisgICAgaW50IG1heE51bWJl
ck9mVGhyZWFkczsKKworI2lmIEVOQUJMRShPUEVOTVApCisgICAgbWF4TnVtYmVyT2ZUaHJlYWRz
ID0gb21wX2dldF9tYXhfdGhyZWFkcygpOworI2Vsc2UKKyAgICBtYXhOdW1iZXJPZlRocmVhZHMg
PSBtYXhQYXJhbGxlbFRocmVhZHM7CisjZW5kaWYKKworICAgIGlmICghcmVxdWVzdGVkSm9iTnVt
YmVyIHx8IHJlcXVlc3RlZEpvYk51bWJlciA+IG1heE51bWJlck9mVGhyZWFkcykKKyAgICAgICAg
cmVxdWVzdGVkSm9iTnVtYmVyID0gbWF4TnVtYmVyT2ZUaHJlYWRzOworCisjaWYgRU5BQkxFKE9Q
RU5NUCkKKyAgICBtX251bWJlck9mSm9icyA9IHJlcXVlc3RlZEpvYk51bWJlcjsKKyNlbHNlCisg
ICAgaWYgKCFzX3RocmVhZFBvb2wpCisgICAgICAgIHNfdGhyZWFkUG9vbCA9IG5ldyBWZWN0b3I8
IFJlZlB0cjxUaHJlYWRQcml2YXRlPiA+KCk7CisKKyAgICAvLyBUaGUgbWFpbiB0aHJlYWQgc2hv
dWxkIGJlIGFsc28gYSB3b3JrZXIuCisgICAgaW50IG1heE5ld1RocmVhZHMgPSByZXF1ZXN0ZWRK
b2JOdW1iZXIgLSAxOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhOdW1iZXJPZlRocmVh
ZHMgJiYgbV90aHJlYWRzLnNpemUoKSA8IG1heE5ld1RocmVhZHM7ICsraSkgeworICAgICAgICBp
ZiAoc190aHJlYWRQb29sLT5zaXplKCkgPCBpICsgMSkKKyAgICAgICAgICAgIHNfdGhyZWFkUG9v
bC0+YXBwZW5kKFRocmVhZFByaXZhdGU6OmNyZWF0ZSgpKTsKKworICAgICAgICBpZiAoKCpzX3Ro
cmVhZFBvb2wpW2ldLT50cnlMb2NrRm9yKHRoaXMpKQorICAgICAgICAgICAgbV90aHJlYWRzLmFw
cGVuZCgoKnNfdGhyZWFkUG9vbClbaV0pOworICAgIH0KKworICAgIG1fbnVtYmVyT2ZKb2JzID0g
bV90aHJlYWRzLnNpemUoKSArIDE7CisjZW5kaWYKKworICAgIEFTU0VSVChtX251bWJlck9mSm9i
cyA+IDApOworCisgICAgbV9wYXJhbWV0ZXJzID0gQnl0ZUFycmF5OjpjcmVhdGUobV9zaXplT2ZQ
YXJhbWV0ZXIgKiBtX251bWJlck9mSm9icyk7Cit9CisKK3ZvaWQgUGFyYWxsZWxKb2JzOjpleGVj
dXRlSm9icygpCit7CisjaWYgRU5BQkxFKE9QRU5NUCkKKyAgICBvbXBfc2V0X251bV90aHJlYWRz
KG1fbnVtYmVyT2ZKb2JzKTsKKworICAgICNwcmFnbWEgb21wIHBhcmFsbGVsIGZvcgorICAgIGZv
ciAoaW50IGkgPSBtX251bWJlck9mSm9iczsgaSA+IDA7IC0taSkKKyAgICAgICAgKCptX3dvcmtl
ckZ1bmN0aW9uKShwYXJhbWV0ZXJGb3JKb2IoaSkpOworI2Vsc2UKKyAgICBpbnQgaTsKKyAgICBm
b3IgKGkgPSBtX3RocmVhZHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCisgICAgICAgIG1fdGhy
ZWFkc1tpXS0+ZXhlY3V0ZUpvYihtX3dvcmtlckZ1bmN0aW9uLCBwYXJhbWV0ZXJGb3JKb2IoaSAr
IDEpKTsKKworICAgIC8vIFRoZSB3b3JrIGZvciB0aGUgbWFpbiB0aHJlYWQKKyAgICAoKm1fd29y
a2VyRnVuY3Rpb24pKHBhcmFtZXRlckZvckpvYihtX3RocmVhZHMuc2l6ZSgpICsgMSkpOworCisg
ICAgZm9yIChpID0gbV90aHJlYWRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICBt
X3RocmVhZHNbaV0tPndhaXRGb3JGaW5pc2goKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShQQVJBTExFTF9KT0JTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvUGFyYWxsZWxKb2JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uODkwYjZiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGFyYWxsZWxKb2JzLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tp
IDxsb2tpQHdlYmtpdC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUGFyYWxsZWxKb2JzX2gKKyNkZWZpbmUgUGFyYWxsZWxKb2JzX2gKKworI2luY2x1ZGUgIkFz
c2VydGlvbnMuaCIKKyNpbmNsdWRlICJCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJOb25jb3B5YWJs
ZS5oIgorI2luY2x1ZGUgIlJlZlB0ci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lm
IEVOQUJMRShQQVJBTExFTF9KT0JTKQorCisvLyBVc2FnZToKKy8vCisvLyAjaWYgRU5BQkxFKFBB
UkFMTEVMX0pPQlMpCisvLworLy8gICAgIC8vIEluaXRpYWxpemUgcGFyYWxsZWwgam9icworLy8g
ICAgIFBhcmFsbGVsSm9icyBwYXJhbGxlbEpvYnMoJndvcmtlciwgc2l6ZW9mKFBhcmFtZXRlcnMp
KTsKKy8vCisvLyAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5CisvLyAgICAgaW50IGkg
PSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisvLyAgICAgZm9yKDsgaSA+IDA7IC0taSkg
eworLy8gICAgICAgUGFyYW1ldGVycyogcGFyYW1zID0gcmVpbnRlcnByZXRfY2FzdDxQYXJhbWV0
ZXJzKj4ocGFyYWxsZWxKb2JzLnBhcmFtZXRlckZvckpvYihpKSk7CisvLyAgICAgICBwYXJhbXMt
PmF0dHIxID0gbG9jYWxWYXJzIC4uLgorLy8gICAgICAgLi4uCisvLyAgICAgfQorLy8KKy8vICAg
ICAvLyBFeGVjdXRlIHBhcmFsbGVsIGpvYnMKKy8vICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZUpv
YnMoKTsKKy8vCisvLyAjZWxzZQorLy8KKy8vICAgICBpbmxpbmVGdW5jdGlvbihhcmdzLi4uKTsK
Ky8vCisvLyAjZW5kaWYgLy8gRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisKKworI2lmIEVOQUJMRShP
UEVOTVApCisjaW5jbHVkZSA8b21wLmg+CisjZWxzZQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsKKworI2lmICFFTkFCTEUoT1BFTk1QKQorc3Rh
dGljIGNvbnN0IGludCBtYXhQYXJhbGxlbFRocmVhZHMgPSAyOworI2VuZGlmCisKK2NsYXNzIFBh
cmFsbGVsSm9icyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFyYWxsZWxKb2JzKTsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKCpXb3JrZXJGdW5jdGlvbikodm9pZCopOworCisgICAg
UGFyYWxsZWxKb2JzKFdvcmtlckZ1bmN0aW9uLCBzaXplX3QsIGludCByZXF1ZXN0ZWRKb2JOdW1i
ZXIgPSAwKTsKKworICAgIGludCBudW1iZXJPZkpvYnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fbnVtYmVyT2ZKb2JzOworICAgIH0KKworICAgIHZvaWQqIHBhcmFtZXRlckZvckpvYihpbnQg
aSkKKyAgICB7CisgICAgICAgIEFTU0VSVChudW1iZXJPZkpvYnMoKSA+PSBpKTsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcGFyYW1ldGVycy0+ZGF0YSgpKSArIG1f
c2l6ZU9mUGFyYW1ldGVyICogKGkgLSAxKTsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGVKb2Jz
KCk7CisKK3ByaXZhdGU6CisgICAgV29ya2VyRnVuY3Rpb24gbV93b3JrZXJGdW5jdGlvbjsKKyAg
ICBpbnQgbV9zaXplT2ZQYXJhbWV0ZXI7CisgICAgaW50IG1fbnVtYmVyT2ZKb2JzOworICAgIFJl
ZlB0cjxCeXRlQXJyYXk+IG1fcGFyYW1ldGVyczsKKworI2lmICFFTkFCTEUoT1BFTk1QKQorICAg
IGNsYXNzIFRocmVhZFByaXZhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaHJlYWRQcml2YXRlPiB7
CisgICAgcHVibGljOgorICAgICAgICBUaHJlYWRQcml2YXRlKCkKKyAgICAgICAgICAgIDogbV90
aHJlYWRJRCgwKQorICAgICAgICAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCisgICAgICAgICAgICAs
IG1fcGFyZW50KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5TG9j
a0ZvcihQYXJhbGxlbEpvYnMqKTsKKworICAgICAgICB2b2lkIGV4ZWN1dGVKb2IoV29ya2VyRnVu
Y3Rpb24sIHZvaWQqKTsKKworICAgICAgICB2b2lkIHdhaXRGb3JGaW5pc2goKTsKKworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRQcml2YXRlPiBjcmVhdGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZFByaXZhdGUoKSk7CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgdm9pZCogd29ya2VyVGhyZWFkKHZvaWQqKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICAgICAgYm9v
bCBtX3J1bm5pbmc7CisgICAgICAgIFBhcmFsbGVsSm9icyogbV9wYXJlbnQ7CisKKyAgICAgICAg
bXV0YWJsZSBNdXRleCBtX211dGV4OworICAgICAgICBUaHJlYWRDb25kaXRpb24gbV90aHJlYWRD
b25kaXRpb247CisKKyAgICAgICAgV29ya2VyRnVuY3Rpb24gbV93b3JrZXJGdW5jdGlvbjsKKyAg
ICAgICAgdm9pZCogbV9wYXJhbWV0ZXJzOworICAgIH07CisKKyAgICBWZWN0b3I8IFJlZlB0cjxU
aHJlYWRQcml2YXRlPiA+IG1fdGhyZWFkczsKKyAgICBzdGF0aWMgVmVjdG9yPCBSZWZQdHI8VGhy
ZWFkUHJpdmF0ZT4gPiogc190aHJlYWRQb29sOworI2VuZGlmCisKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OlBhcmFsbGVsSm9iczsKKworI2VuZGlmIC8vIEVOQUJMRShQ
QVJBTExFTF9KT0JTKQorCisjZW5kaWYgLy8gUGFyYWxsZWxKb2JzX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAppbmRleCA3ZDE0NmRkLi5iZjVhZTljIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oCkBAIC0xMTUzLDYgKzExNTMsMTQgQEAKICNkZWZpbmUgRU5BQkxF
X0JSQU5DSF9DT01QQUNUSU9OIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxFX09QRU5N
UCkgJiYgZGVmaW5lZChfT1BFTk1QKQorI2RlZmluZSBFTkFCTEVfT1BFTk1QIDEKKyNlbmRpZgor
CisjaWYgIWRlZmluZWQoRU5BQkxFX1BBUkFMTEVMX0pPQlMpICYmIEVOQUJMRShPUEVOTVApCisj
ZGVmaW5lIEVOQUJMRV9QQVJBTExFTF9KT0JTIDEKKyNlbmRpZgorCiAjaWYgRU5BQkxFKEdMSUJf
U1VQUE9SVCkKICNpbmNsdWRlICJHVHlwZWRlZnMuaCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi93dGYucHJpCmluZGV4IDNiZTNiNWYuLjc5MGY2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvd3RmLnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0
Zi5wcmkKQEAgLTIxLDYgKzIxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgd3RmL3F0L1RocmVhZGlu
Z1F0LmNwcCBcCiAgICAgd3RmL1BhZ2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgXAogICAgIHd0Zi9Q
YWdlQmxvY2suY3BwIFwKKyAgICB3dGYvUGFyYWxsZWxKb2JzLmNwcCBcCiAgICAgd3RmL1JhbmRv
bU51bWJlci5jcHAgXAogICAgIHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIFwKICAgICB3
dGYvU3RhY2tCb3VuZHMuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MjIwNTM0Li41MTA0MTk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDItMjIgIEdhYm9yIExva2kgIDxsb2tpQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgU3BlZWRpbmcgdXAgU1ZHIGZpbHRlcnMgd2l0aCBtdWx0aWNvcmUgKFNNUCkgc3VwcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5MDMKKwor
ICAgICAgICBTb21lIFNWRyBmaWx0ZXJzIGV4ZWN1dGUgYSBodWdlIG51bWJlciBvZiBwaXhlbCBt
YW5pcHVsYXRpb25zLCB3aGljaAorICAgICAgICBjYW5ub3QgYmUgc3BlZCB1cCBieSBncmFwaGlj
cyBhY2NlbGVyYXRvcnMsIHNpbmNlIHRoZWlyIGFsZ29yaXRobSBpcworICAgICAgICB0b28gY29t
cGxleC4gVXNpbmcgdGhlIHBvd2VyIG9mIFNpbW1ldHJpYyBNdWx0aSBQcm9jZXNzaW5nIChTTVAp
IHdlCisgICAgICAgIGNhbiBzcGxpdCB1cCBhIHRhc2sgdG8gc21hbGxlciAoZGF0YSBpbmRlcGVu
ZGVudCkgdGFza3MsIHdoaWNoIGNhbiBiZQorICAgICAgICBleGVjdXRlZCBpbmRlcGVuZGVudGx5
LgorCisgICAgICAgIFRoZSBQYXJhbGxlbEpvYnMgZnJhbWV3b3JrIHByb3ZpZGVzIGEgc2ltcGxl
IHdheSBmb3IgZGlzdHJpYnV0ZWQKKyAgICAgICAgcHJvZ3JhbW1pbmcuIFRoZSBmcmFtZXdvcmsg
aXMgYmFzZWQgb24gV2ViS2l0J3MgdGhyZWFkaW5nIGluZnJhc3RydWN0dXJlCisgICAgICAgIGFu
ZCBPcGVuIE11bHRpLVByb2Nlc3NpbmcncyAoT3Blbk1QKSBBUEkuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVHVyYnVsZW5jZTo6bm9pc2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuaDoKKwogMjAxMS0wMi0yMCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IChyZW1vdmUgaW5jbHVkZXMpLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCmluZGV4IDA2OGFjZWUuLjc5NTU0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTQs
NiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVn
ZWQuaHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3Jn
PgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2ICszMyw3IEBACiAKICNpbmNsdWRlIDx3dGYv
Qnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
UGFyYWxsZWxKb2JzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTM0LDcgKzEzNiw2
IEBAIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpQYWludGluZ0RhdGEobG9uZyBwYWludGlu
Z1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50CiAgICAgLCBoZWlnaHQoMCkKICAgICAsIHdyYXBY
KDApCiAgICAgLCB3cmFwWSgwKQotICAgICwgY2hhbm5lbCgwKQogICAgICwgZmlsdGVyU2l6ZShw
YWludGluZ1NpemUpCiB7CiB9CkBAIC0yMDYsNyArMjA3LDcgQEAgaW5saW5lIHZvaWQgY2hlY2tO
b2lzZShpbnQmIG5vaXNlVmFsdWUsIGludCBsaW1pdFZhbHVlLCBpbnQgbmV3VmFsdWUpCiAgICAg
ICAgIG5vaXNlVmFsdWUgLT0gbmV3VmFsdWUgLSAxOwogfQogCi1mbG9hdCBGRVR1cmJ1bGVuY2U6
Om5vaXNlMkQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5v
aXNlVmVjdG9yKQorZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKGludCBjaGFubmVsLCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCiB7
CiAgICAgc3RydWN0IE5vaXNlIHsKICAgICAgICAgaW50IG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWU7CkBAIC0yNDEsMjMgKzI0MiwyMyBAQCBmbG9hdCBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVgogCiAgICAg
Ly8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIv
U1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCiAgICAgaW50IHRlbXAgPSBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBv
c2l0aW9uSW50ZWdlclZhbHVlXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50
aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2No
YW5uZWxdW3RlbXBdOwogICAgIHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUg
KiBxWzBdICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVsxXTsKICAgICB0
ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9p
c2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOwotICAgIHEgPSBwYWludGluZ0RhdGEuZ3Jh
ZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOworICAgIHEgPSBwYWludGluZ0RhdGEu
Z3JhZGllbnRbY2hhbm5lbF1bdGVtcF07CiAgICAgdiA9IChub2lzZVgubm9pc2VQb3NpdGlvbkZy
YWN0aW9uVmFsdWUgLSAxKSAqIHFbMF0gKyBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFs
dWUgKiBxWzFdOwogICAgIGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKICAgICB0
ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVku
bm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOwotICAgIHEgPSBwYWludGluZ0RhdGEuZ3Jh
ZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOworICAgIHEgPSBwYWludGluZ0RhdGEu
Z3JhZGllbnRbY2hhbm5lbF1bdGVtcF07CiAgICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJh
Y3Rpb25WYWx1ZSAqIHFbMF0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0g
MSkgKiBxWzFdOwogICAgIHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRM
YXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOwotICAg
IHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOwor
ICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bdGVtcF07CiAgICAgdiA9IChu
b2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMF0gKyAobm9pc2VZLm5v
aXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzFdOwogICAgIGIgPSBsaW5lYXJJbnRl
cnBvbGF0aW9uKHN4LCB1LCB2KTsKICAgICByZXR1cm4gbGluZWFySW50ZXJwb2xhdGlvbihzeSwg
YSwgYik7CiB9CiAKLXVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCit1bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBmbG9hdCB0aWxlV2lkdGggPSBwYWlu
dGluZ0RhdGEuZmlsdGVyU2l6ZS53aWR0aCgpOwogICAgIEFTU0VSVCh0aWxlV2lkdGggPiAwKTsK
QEAgLTI5NSw5ICsyOTYsOSBAQCB1bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRl
VHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRhJiBwYWludAogICAgIGZsb2F0IHJh
dGlvID0gMTsKICAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7
ICsrb2N0YXZlKSB7CiAgICAgICAgIGlmIChtX3R5cGUgPT0gRkVUVVJCVUxFTkNFX1RZUEVfRlJB
Q1RBTE5PSVNFKQotICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNl
MkQocGFpbnRpbmdEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKKyAgICAgICAgICAgIHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKGNoYW5uZWwsIHBhaW50aW5nRGF0YSwgbm9p
c2VWZWN0b3IpIC8gcmF0aW87CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCArPSBmYWJzZihub2lzZTJEKHBhaW50aW5nRGF0YSwgbm9pc2VWZWN0b3Ip
KSAvIHJhdGlvOworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IGZhYnNm
KG5vaXNlMkQoY2hhbm5lbCwgcGFpbnRpbmdEYXRhLCBub2lzZVZlY3RvcikpIC8gcmF0aW87CiAg
ICAgICAgIG5vaXNlVmVjdG9yLnNldFgobm9pc2VWZWN0b3IueCgpICogMik7CiAgICAgICAgIG5v
aXNlVmVjdG9yLnNldFkobm9pc2VWZWN0b3IueSgpICogMik7CiAgICAgICAgIHJhdGlvICo9IDI7
CkBAIC0zMjAsNiArMzIxLDMyIEBAIHVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxh
dGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEmIHBhaW50CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1
NSk7CiB9CiAKK2lubGluZSB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihCeXRlQXJyYXkq
IHBpeGVsQXJyYXksIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQg
ZW5kWSkKK3sKKyAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7
CisgICAgSW50UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CisgICAg
aW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkg
PDwgMik7CisgICAgaW50IGNoYW5uZWw7CisKKyAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwg
ZW5kWTsgKyt5KSB7CisgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CisgICAgICAg
IHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAgcG9pbnQuc2V0WChw
b2ludC54KCkgKyAxKTsKKyAgICAgICAgICAgIGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0
OyArK2NoYW5uZWwsICsraW5kZXhPZlBpeGVsQ2hhbm5lbCkKKyAgICAgICAgICAgICAgICBwaXhl
bEFycmF5LT5zZXQoaW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVl
Rm9yUG9pbnQoY2hhbm5lbCwgcGFpbnRpbmdEYXRhLCBmaWx0ZXIoKS0+bWFwQWJzb2x1dGVQb2lu
dFRvTG9jYWxQb2ludChwb2ludCkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2lmIEVOQUJM
RShQQVJBTExFTF9KT0JTKQordm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIodm9p
ZCogcGFyYW1ldGVycykKK3sKKyAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyogcCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RmlsbFJlZ2lvblBhcmFtZXRlcnMqPihwYXJhbWV0ZXJzKTsKKyAgICBwLT5maWx0
ZXItPmZpbGxSZWdpb24ocC0+cGl4ZWxBcnJheSwgKnAtPnBhaW50aW5nRGF0YSwgcC0+c3RhcnRZ
LCBwLT5lbmRZKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKwogdm9pZCBG
RVR1cmJ1bGVuY2U6OmFwcGx5KCkKIHsKICAgICBpZiAoaGFzUmVzdWx0KCkpCkBAIC0zMzQsMTkg
KzM2MSw0MiBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHkoKQogICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGEobV9zZWVkLCByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKS5zaXplKCkpKTsKICAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKIAotICAgIEZsb2F0
UmVjdCBmaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZsb2F0UG9pbnQg
cG9pbnQ7Ci0gICAgcG9pbnQuc2V0WShmaWx0ZXJSZWdpb24ueSgpKTsKLSAgICBpbnQgaW5kZXhP
ZlBpeGVsQ2hhbm5lbCA9IDA7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBhYnNvbHV0ZVBhaW50
UmVjdCgpLmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAx
KTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCk7ICsreCkgewotICAgICAg
ICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAgICAgIGZvciAocGFpbnRp
bmdEYXRhLmNoYW5uZWwgPSAwOyBwYWludGluZ0RhdGEuY2hhbm5lbCA8IDQ7ICsrcGFpbnRpbmdE
YXRhLmNoYW5uZWwsICsraW5kZXhPZlBpeGVsQ2hhbm5lbCkKLSAgICAgICAgICAgICAgICBwaXhl
bEFycmF5LT5zZXQoaW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVl
Rm9yUG9pbnQocGFpbnRpbmdEYXRhLCBmaWx0ZXIoKS0+bWFwQWJzb2x1dGVQb2ludFRvTG9jYWxQ
b2ludChwb2ludCkpKTsKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKworICAgIGludCBvcHRp
bWFsVGhyZWFkTnVtYmVyID0gKGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29sdXRl
UGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbjsKKyAgICBpZiAo
b3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxl
bCBqb2JzCisgICAgICAgIFBhcmFsbGVsSm9icyBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwgc2l6ZW9mKEZpbGxSZWdpb25QYXJhbWV0ZXJzKSwg
b3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFy
cmF5CisgICAgICAgIGludCBpID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAgICAg
ICBpZiAoaSA+IDEpIHsKKyAgICAgICAgICAgIGludCBzdGFydFkgPSAwOworICAgICAgICAgICAg
aW50IHN0ZXBZID0gYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSAvIGk7CisgICAgICAgICAg
ICBmb3IgKDsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0
ZXJzKiBwYXJhbXMgPSByZWludGVycHJldF9jYXN0PEZpbGxSZWdpb25QYXJhbWV0ZXJzKj4ocGFy
YWxsZWxKb2JzLnBhcmFtZXRlckZvckpvYihpKSk7CisgICAgICAgICAgICAgICAgcGFyYW1zLT5m
aWx0ZXIgPSB0aGlzOworICAgICAgICAgICAgICAgIHBhcmFtcy0+cGl4ZWxBcnJheSA9IHBpeGVs
QXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1zLT5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdE
YXRhOworICAgICAgICAgICAgICAgIHBhcmFtcy0+c3RhcnRZID0gc3RhcnRZOworICAgICAgICAg
ICAgICAgIGlmIChpICE9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5lbmRZID0g
c3RhcnRZICsgc3RlcFk7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0WSA9IHN0YXJ0WSArIHN0
ZXBZOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBwYXJhbXMt
PmVuZFkgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBFeGVjdXRlIHBhcmFsbGVsIGpvYnMKKyAgICAgICAgICAgIHBhcmFsbGVs
Sm9icy5leGVjdXRlSm9icygpOworCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CisgICAgLy8gRmFsbGJhY2sgdG8gc2VxdWVudGlhbCBtb2RlIGlmIHRoZXJlIGlzIG5vIHJv
b20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwKKworI2Vu
ZGlmIC8vIEVOQUJMRShQQVJBTExFTF9KT0JTKQorCisgICAgZmlsbFJlZ2lvbihwaXhlbEFycmF5
LCBwYWludGluZ0RhdGEsIDAsIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpOwogfQogCiB2
b2lkIEZFVHVyYnVsZW5jZTo6ZHVtcCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCAxYmFkMTIzLi5hMWE2
NzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTU4LDYgKzU4LDEwIEBAIHB1YmxpYzoKICAgICBib29s
IHN0aXRjaFRpbGVzKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdGl0Y2hUaWxlcyhib29sKTsKIAor
I2lmIEVOQUJMRShQQVJBTExFTF9KT0JTKQorICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3Jr
ZXIodm9pZCopOworI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKICAgICB2aXJ0
dWFsIHZvaWQgZHVtcCgpOwogICAgIApAQCAtNjgsNiArNzIsOSBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CiAgICAgc3RhdGljIGNv
bnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsKKyNpZiBFTkFCTEUoUEFSQUxM
RUxfSk9CUykKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAo
MTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyNl
bmRpZgogCiAgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CiAgICAgICAgIGxvbmcgc2VlZDsKQEAg
LTc3LDE4ICs4NCwyOCBAQCBwcml2YXRlOgogICAgICAgICBpbnQgaGVpZ2h0OwogICAgICAgICBp
bnQgd3JhcFg7IC8vIE1pbmltdW0gdmFsdWUgdG8gd3JhcC4KICAgICAgICAgaW50IHdyYXBZOwot
ICAgICAgICBpbnQgY2hhbm5lbDsKICAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwogCiAgICAg
ICAgIFBhaW50aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRp
bmdTaXplKTsKICAgICAgICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7CiAgICAgfTsKIAorI2lmIEVO
QUJMRShQQVJBTExFTF9KT0JTKQorICAgIHN0cnVjdCBGaWxsUmVnaW9uUGFyYW1ldGVycyB7Cisg
ICAgICAgIEZFVHVyYnVsZW5jZSogZmlsdGVyOworICAgICAgICBCeXRlQXJyYXkqIHBpeGVsQXJy
YXk7CisgICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgICAgICBpbnQgc3Rh
cnRZOworICAgICAgICBpbnQgZW5kWTsKKyAgICB9OworI2VuZGlmCisKICAgICBGRVR1cmJ1bGVu
Y2UoRmlsdGVyKiwgVHVyYnVsYW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9v
bCk7CiAKICAgICBpbmxpbmUgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgZmxv
YXQgbm9pc2UyRChQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgdW5zaWdu
ZWQgY2hhciBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEmLCBj
b25zdCBGbG9hdFBvaW50Jik7CisgICAgZmxvYXQgbm9pc2UyRChpbnQgY2hhbm5lbCwgUGFpbnRp
bmdEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHVuc2lnbmVkIGNoYXIgY2FsY3VsYXRl
VHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYsIGNvbnN0
IEZsb2F0UG9pbnQmKTsKKyAgICBpbmxpbmUgdm9pZCBmaWxsUmVnaW9uKEJ5dGVBcnJheSosIFBh
aW50aW5nRGF0YSYsIGludCwgaW50KTsKIAogICAgIFR1cmJ1bGFuY2VUeXBlIG1fdHlwZTsKICAg
ICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwotLSAKMS43LjAuNAoK
</data>
<flag name="review"
          id="75089"
          type_id="1"
          status="-"
          setter="ossy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>84394</attachid>
            <date>2011-03-02 03:44:45 -0800</date>
            <delta_ts>2011-03-02 03:44:45 -0800</delta_ts>
            <desc>A big SVG to test turbulence filter</desc>
            <filename>turbulence.svg</filename>
            <type>image/svg+xml</type>
            <size>625</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9T
VkcvMS4xL0RURC9zdmcxMS5kdGQiPgoKPHN2ZyB3aWR0aD0iMjAwMCIgaGVpZ2h0PSIyMDAwIiB2
ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHg9
IjAlIiB5PSIwJSIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0iYmxhY2siIC8+Cgo8
ZGVmcz4KPGZpbHRlciBpZD0iZmlsdCIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiB4
PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj4KICAgIDxmZVR1cmJ1bGVuY2Ug
aWQ9InR1cmIiIGJhc2VGcmVxdWVuY3k9IjAuMDMiIG51bU9jdGF2ZXM9IjQiIHNlZWQ9IjY3IiBy
ZXN1bHQ9InR1cmIiLz4KPC9maWx0ZXI+CjwvZGVmcz4KCjxnIGZpbHRlcj0idXJsKCNmaWx0KSIg
ZmlsbD0id2hpdGUiIHN0cm9rZT0iYmxhY2siIG9uY2xpY2s9InN0YXJ0KCkiPgogICAgPHJlY3Qg
eD0iMCIgeT0iMCIgd2lkdGg9IjIwMDAiIGhlaWdodD0iMjAwMCIgLz4KPC9nPgoKPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>84399</attachid>
            <date>2011-03-02 04:24:18 -0800</date>
            <delta_ts>2011-03-02 04:24:18 -0800</delta_ts>
            <desc>A simple test case to benchmark the SMP-based turbulence filter</desc>
            <filename>turbulence-ani.svg</filename>
            <type>image/svg+xml</type>
            <size>2602</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9T
VkcvMS4xL0RURC9zdmcxMS5kdGQiPgoKPCEtLQogIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAogIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpCiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KCiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgYXJlIG1ldDoKICAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgoKICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBg
QVMgSVMnJyBBTkQgQU5ZCiAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKICBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKICBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCiAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQogIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0tPgoKPHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIw
MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cmVj
dCB4PSIwJSIgeT0iMCUiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9ImJsYWNrIiAv
PgoKPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHQiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0Jv
eCIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+CiAgICA8ZmVUdXJidWxl
bmNlIGlkPSJ0dXJiIiBiYXNlRnJlcXVlbmN5PSIwLjAzIiBudW1PY3RhdmVzPSI0IiBzZWVkPSIx
IiByZXN1bHQ9InR1cmIiPgogICAgPC9mZVR1cmJ1bGVuY2U+CjwvZmlsdGVyPgo8L2RlZnM+Cgo8
ZyBmaWx0ZXI9InVybCgjZmlsdCkiIGZpbGw9IndoaXRlIiBzdHJva2U9ImJsYWNrIiA+CiAgICA8
cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgLz4KPC9nPgoKPHRleHQg
aWQ9ImFmcHMiIHg9IjIwIiB5PSIxMDAiIGZvbnQtc2l6ZT0iMjAiIGZpbGw9IndoaXRlIiBzdHJv
a2U9IndoaXRlIj5hZnBzOjwvdGV4dD4KCjxzY3JpcHQ+CjwhW0NEQVRBWwoKdmFyIHR1cmIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHVyYicpLnNlZWQ7CnZhciBmcHMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnYWZwcycpOwoKZnBzLnRleHRDb250ZW50ID0gIm9rIjsKCnZhciByb3Vu
ZCA9IE1hdGgucm91bmQ7CnZhciBzdGFydERhdGUgPSAwOwp2YXIgZnJhbWVDb3VudGVyID0gMDsK
dmFyIHBoYXNlID0gMDsKCmZ1bmN0aW9uIGFuaW0oKSB7CiAgICB0dXJiLmJhc2VWYWwgKz0gMTsK
ICAgIGZyYW1lQ291bnRlcisrOwogICAgZnBzLnRleHRDb250ZW50ID0gImFmcHM6ICIgKyhyb3Vu
ZChmcmFtZUNvdW50ZXIgKiAxMDAwMDAgLyAobmV3IERhdGUoKSAtIHN0YXJ0RGF0ZSkpIC8gMTAw
KTsKfQoKZnVuY3Rpb24gc3RhcnQoKSB7CiAgICBpZiAoIXN0YXJ0RGF0ZSkgewogICAgICAgIHN0
YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7CiAgICAgICAgc2V0SW50ZXJ2YWwoYW5pbSwxKTsKICAgIH0K
fQoKc3RhcnQoKTsKCi8vXV0+Cjwvc2NyaXB0PgoKPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>85174</attachid>
            <date>2011-03-09 07:41:32 -0800</date>
            <delta_ts>2011-03-09 07:41:32 -0800</delta_ts>
            <desc>Measurement result with Methanol</desc>
            <filename>Methanol-SVG.txt</filename>
            <type>text/plain</type>
            <size>1146</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">VXNpbmcgTWV0aGFub2wgKGh0dHA6Ly9naXRvcmlvdXMub3JnL21ldGhhbm9sKQoKT3JpZzogT3Jp
Z2luYWwgY29kZQpXS1Q6IFVzaW5nIFNNUCBmcmFtZXdvcmsgd2l0aCBXZWJLaXQncyB0aHJlYWRp
bmcgaW5mcmFzdHJ1Y3R1cmUKT01QOiBVc2luZyBTTVAgZnJhbWV3b3JrIHdpdGggT3Blbk1QIGxp
YnJhcnkKCng4NiAgICAgICAgIE9yaWcgICAgIFdLVCAgICAgJSAgICAgICAgICAgIE9NUCAgICAg
JQpkaWZmdXNlICAgICAgNTc4ICAgICA1NzggICAgICAgICAgICAgICAgICA1NzYKcG9pbnQgICAg
ICAgIDY2OCAgICAgNjY1ICAgICAgICAgICAgICAgICAgNjY5CnNwb3QgICAgICAgICA5OTcgICAg
MTAwMCAgICAgICAgICAgICAgICAgIDk5OQp0dXJidWxlbmNlICAxNDYwICAgICA4MTEgIDEsODB4
IGFzIGZhc3QgICA4MjIgIDEsNzh4IGFzIGZhc3QKdHVyYkJpZyAgICAgMjc5NyAgICAxNTgzICAx
LDc3eCBhcyBmYXN0ICAxNjk5ICAxLDY1eCBhcyBmYXN0CnR1cmJTbWFsbCAgICAyNTIgICAgIDI1
MCAgICAgICAgICAgICAgICAgMTI1MAo0Qm94ZXMgICAgICA0Njk4ICAgIDMzNDYgIDEsNDB4IGFz
IGZhc3QgIDM0MDIgIDEsMzh4IGFzIGZhc3QKc2Vka2l0ICAgICAgIDkyNCAgICAgNjU5ICAxLDQw
eCBhcyBmYXN0ICAgNjgwICAxLDM2eCBhcyBmYXN0CgkJCQkJCQpBUk0gICAgICAgICBPcmlnICAg
ICBXS1QgICAgICUgICAgICAgICAgICBPTVAgICAgICUKZGlmZnVzZSAgICAgMjIxOCAgICAyMTc2
ICAgICAgICAgICAgICAgICAyMTc3CnBvaW50ICAgICAgIDIyMTQgICAgMjE2OSAgICAgICAgICAg
ICAgICAgMjE2MwpzcG90ICAgICAgICAzMjA4ICAgIDMxNjkgICAgICAgICAgICAgICAgIDMyNTUK
dHVyYnVsZW5jZSAgMzk0MiAgICAyMzcwICAxLDY2eCBhcyBmYXN0ICAyNDMzICAxLDYyeCBhcyBm
YXN0CnR1cmJCaWcgICAgIDc0NjEgICAgNDQ2OCAgMSw2N3ggYXMgZmFzdCAgNDQ4MyAgMSw2Nngg
YXMgZmFzdAp0dXJiU21hbGwgICAgNjk0ICAgICA2ODEgICAgICAgICAgICAgICAgICA2OTAKNEJv
eGVzICAgICAxMzMzOSAgIDEwMDExICAxLDMzeCBhcyBmYXN0IDEwMDMwICAxLDMzeCBhcyBmYXN0
CnNlZGtpdCAgICAgIDQ2NzMgICAgMzYyNiAgMSwyOXggYXMgZmFzdCAgMzUyNiAgMSwzM3ggYXMg
ZmFzdAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88589</attachid>
            <date>2011-04-07 01:06:10 -0700</date>
            <delta_ts>2011-04-07 05:19:11 -0700</delta_ts>
            <desc>Speeding up FETurbulence with SMP</desc>
            <filename>0001-Speeding-up-SVG-filters-with-multicore-SMP-support.patch</filename>
            <type>text/plain</type>
            <size>31173</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSAxMGFmNTE3N2M1NzU4YTZiOTdjZjBhZjgwNDUyYjllNzA2ZjMyZTAyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVGh1LCA3IEFwciAyMDExIDA5OjA2OjI5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gU3BlZWRp
bmcgdXAgU1ZHIGZpbHRlcnMgd2l0aCBtdWx0aWNvcmUgKFNNUCkgc3VwcG9ydAoKU2lnbmVkLW9m
Zi1ieTogR2Fib3IgTG9raSA8bG9raUBpbmYudS1zemVnZWQuaHU+Ci0tLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDMyICsrKysKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgICAgMiArCiAu
Li4vSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qICAgICAgICAgICB8ICAgIDgg
KwogLi4uL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICAgICAgfCAg
ICA4ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQgICAgICAgICAg
IHwgICAgMiArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5jcHAgICAg
ICAgICB8ICAxNDEgKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
YXJhbGxlbEpvYnMuaCAgICAgICAgICAgfCAgMTc3ICsrKysrKysrKysrKysrKysrKysrCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggICAgICAgICAgICAgICB8ICAgIDggKwog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpICAgICAgICAgICAgICAgICAgfCAgICAx
ICsKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAyNiArKysKIC4uLi9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QYXJhbGxlbEpvYnMu
aCAgIHwgICAgNCArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwICAgICB8ICAgODkgKysrKysrKystLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oICAgICAgIHwgICAyOCArKystCiAxMyBmaWxlcyBjaGFuZ2VkLCA1MDMg
aW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QYXJhbGxlbEpvYnMuaAoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDczOWNmN2YuLjYzYmQ2MDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDExLTA0LTA3ICBHYWJvciBMb2tpICA8
bG9raUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFNwZWVkaW5nIHVwIFNWRyBmaWx0ZXJzIHdpdGggbXVsdGljb3JlIChTTVApIHN1
cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQz
OTAzCisKKyAgICAgICAgU29tZSBTVkcgZmlsdGVycyBleGVjdXRlIGEgaHVnZSBudW1iZXIgb2Yg
cGl4ZWwgbWFuaXB1bGF0aW9ucywgd2hpY2gKKyAgICAgICAgY2Fubm90IGJlIHNwZWQgdXAgYnkg
Z3JhcGhpY3MgYWNjZWxlcmF0b3JzLCBzaW5jZSB0aGVpciBhbGdvcml0aG0gaXMKKyAgICAgICAg
dG9vIGNvbXBsZXguIFVzaW5nIHRoZSBwb3dlciBvZiBTeW1tZXRyaWMgTXVsdGkgUHJvY2Vzc2lu
ZyAoU01QKSB3ZQorICAgICAgICBjYW4gc3BsaXQgdXAgYSB0YXNrIHRvIHNtYWxsZXIgKGRhdGEg
aW5kZXBlbmRlbnQpIHRhc2tzLCB3aGljaCBjYW4gYmUKKyAgICAgICAgZXhlY3V0ZWQgaW5kZXBl
bmRlbnRseS4KKworICAgICAgICBUaGUgUGFyYWxsZWxKb2JzIGZyYW1ld29yayBwcm92aWRlcyBh
IHNpbXBsZSB3YXkgZm9yIGRpc3RyaWJ1dGVkCisgICAgICAgIHByb2dyYW1taW5nLiBUaGUgZnJh
bWV3b3JrIGlzIGJhc2VkIG9uIFdlYktpdCdzIHRocmVhZGluZyBpbmZyYXN0cnVjdHVyZQorICAg
ICAgICBhbmQgT3BlbiBNdWx0aS1Qcm9jZXNzaW5nJ3MgKE9wZW5NUCkgQVBJLgorCisgICAgICAg
ICogd3RmL1BhcmFsbGVsSm9icy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpQYXJhbGxlbEpv
YnM6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3IpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEpv
YnM6OlRocmVhZFByaXZhdGU6OmV4ZWN1dGVKb2IpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEpv
YnM6OlRocmVhZFByaXZhdGU6OndhaXRGb3JGaW5pc2gpOgorICAgICAgICAoV1RGOjpQYXJhbGxl
bEpvYnM6OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCk6CisgICAgICAgIChXVEY6OlBhcmFs
bGVsSm9iczo6UGFyYWxsZWxKb2JzKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2JzOjpleGVj
dXRlSm9icyk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9icy5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6UGFyYWxsZWxKb2JzOjpudW1iZXJPZkpvYnMpOgorICAgICAgICAoV1RGOjpQYXJhbGxl
bEpvYnM6OnBhcmFtZXRlckZvckpvYik6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSm9iczo6VGhy
ZWFkUHJpdmF0ZTo6VGhyZWFkUHJpdmF0ZSk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSm9iczo6
VGhyZWFkUHJpdmF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKyAgICAg
ICAgKiB3dGYvd3RmLnByaToKKwogMjAxMS0wNC0wNiAgRGFpIE1pa3VydWJlICA8ZG1pa3VydWJl
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAwYWI5ZmE4Li5iZmFkMjRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC01MDgsNiArNTA4LDggQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duQXJy
YXlQdHIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duUHRyLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc1JlZlB0ci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BhcmFsbGVsSm9icy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGFyYWxsZWxKb2JzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Qb3NzaWJseU51bGwuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9SYW5kb21OdW1iZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmlu
ZGV4IGQ5NTE0ZTQuLjg0ZDMyMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagpAQCAtODQxLDYgKzg0
MSwxNCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XHd0ZlxQYXJhbGxlbEpvYnMuY3BwIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQYXJhbGxlbEpvYnMuaCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8
RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUGxhdGZvcm0uaCIKIAkJCT4KIAkJPC9G
aWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjMmRkYzM5Li45OTJiOWJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE0LDYgKzIxNCw4IEBACiAJCTcxODZB
NkVDMTMxMDBCQTUwMDQ0NzlFMSAvKiBIZXhOdW1iZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxODZBNkU4MTMxMDBCNTcwMDQ0NzlFMSAvKiBIZXhO
dW1iZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3NkZCOUYwRjEyRTg1MTg2MDA1MUEyRUIgLyogU0hBMS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzZGQjlGMEUxMkU4NTE4NjAwNTFBMkVCIC8qIFNI
QTEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
NkZCOUYxMTEyRTg1MTk2MDA1MUEyRUIgLyogU0hBMS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkZCOUYxMDEyRTg1MTk2MDA1MUEyRUIgLyogU0hB
MS5jcHAgKi87IH07CisJCTc5MDZFNDNEMTM0Q0JGRDQwMDE3NUYxOSAvKiBQYXJhbGxlbEpvYnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNkU0
M0IxMzRDQkZENDAwMTc1RjE5IC8qIFBhcmFsbGVsSm9icy5jcHAgKi87IH07CisJCTc5MDZFNDNF
MTM0Q0JGRDQwMDE3NUYxOSAvKiBQYXJhbGxlbEpvYnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MDZFNDNDMTM0Q0JGRDQwMDE3NUYxOSAvKiBQYXJh
bGxlbEpvYnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNEVFNzA4MEVCQjc5NjMw
MDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1
cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3RTRFRTcwRTBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9Owog
CQk3RUZGMDA2NDBFQzA1QTlBMDBBQTdDOTMgLyogTm9kZUluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFRkYwMDYzMEVDMDVBOUEwMEFBN0M5MyAv
KiBOb2RlSW5mby5oICovOyB9OwpAQCAtODc5LDYgKzg4MSw4IEBACiAJCTcxODZBNkU4MTMxMDBC
NTcwMDQ0NzlFMSAvKiBIZXhOdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSGV4TnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2RkI5RjBFMTJF
ODUxODYwMDUxQTJFQiAvKiBTSEExLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNIQTEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzZGQjlGMTAxMkU4NTE5NjAw
NTFBMkVCIC8qIFNIQTEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U0hBMS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MDZFNDNCMTM0Q0JGRDQw
MDE3NUYxOSAvKiBQYXJhbGxlbEpvYnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGFyYWxsZWxKb2JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzkwNkU0M0MxMzRDQkZENDAwMTc1RjE5IC8qIFBhcmFsbGVsSm9icy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbEpvYnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0UyQzZDOTgwRDMxQzZCNjAwMkQ0NEUyIC8qIFNjb3BlQ2hhaW5NYXJrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlQ2hhaW5NYXJrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFNEVFNzA4MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1
cmVDaGFpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVDaGFp
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTRFRTcwRTBFQkI3QTVCMDA1OTM0
QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTY1Myw2ICsxNjU3LDggQEAKIAkJCQkxNEIzRUYwNDEyQkMyNEREMDBEMjlFRkYgLyogUGFnZUJs
b2NrLmNwcCAqLywKIAkJCQkxNEIzRUYwMzEyQkMyNEREMDBEMjlFRkYgLyogUGFnZUJsb2NrLmgg
Ki8sCiAJCQkJODY5MDIzMTQxMjA5MkQ1QzAwNjMwQUY5IC8qIFBhZ2VSZXNlcnZhdGlvbi5oICov
LAorCQkJCTc5MDZFNDNCMTM0Q0JGRDQwMDE3NUYxOSAvKiBQYXJhbGxlbEpvYnMuY3BwICovLAor
CQkJCTc5MDZFNDNDMTM0Q0JGRDQwMDE3NUYxOSAvKiBQYXJhbGxlbEpvYnMuaCAqLywKIAkJCQlC
Q0ZCRTY5NTEyMjU2MEU4MDAzMDlFOUQgLyogUGFzc093bkFycmF5UHRyLmggKi8sCiAJCQkJNDRE
RDQ4NTIwRkFFQTg1MDAwRDZCNEVCIC8qIFBhc3NPd25QdHIuaCAqLywKIAkJCQk2NTgwRjc5NTA5
NDA3MDU2MDA4MkMyMTkgLyogUGFzc1JlZlB0ci5oICovLApAQCAtMjU1Myw2ICsyNTU5LDcgQEAK
IAkJCQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFQ0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUNBNEYxMTMyRUFBNkQwMDJCMkFENyAvKiBERkdBbGlhc1RyYWNrZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTc5MDZFNDNFMTM0Q0JGRDQwMDE3NUYxOSAvKiBQYXJhbGxl
bEpvYnMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzAwMCw2ICszMDA3LDcgQEAKIAkJCQk4NkVDOURD
RDEzMjhERjgyMDAyQjJBRDcgLyogREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5MDZFNDNEMTM0Q0JGRDQwMDE3NUYxOSAv
KiBQYXJhbGxlbEpvYnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9DTWFrZUxpc3RzLnR4dAppbmRleCA5MWI2OTQ0Li5mYTgxN2UxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTU3LDYgKzU3LDcgQEAgU0VUKFdURl9IRUFE
RVJTCiAgICAgUGFzc093bkFycmF5UHRyLmgKICAgICBQYXNzT3duUHRyLmgKICAgICBQYXNzUmVm
UHRyLmgKKyAgICBQYXJhbGxlbEpvYnMuaAogICAgIFBsYXRmb3JtLmgKICAgICBQb3NzaWJseU51
bGwuaAogICAgIFJhbmRvbU51bWJlci5oCkBAIC0xMTgsNiArMTE5LDcgQEAgU0VUKFdURl9TT1VS
Q0VTCiAgICAgTWFpblRocmVhZC5jcHAKICAgICBNRDUuY3BwCiAgICAgT1NSYW5kb21Tb3VyY2Uu
Y3BwCisgICAgUGFyYWxsZWxKb2JzLmNwcAogICAgIFJhbmRvbU51bWJlci5jcHAKICAgICBSZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwCiAgICAgU0hBMS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGFyYWxsZWxKb2JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40MzcwZWVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
YXJhbGxlbEpvYnMuY3BwCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9r
aSA8bG9raUB3ZWJraXQub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKworI2luY2x1ZGUg
IlBhcmFsbGVsSm9icy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworI2lmICFFTkFCTEUoT1BFTk1Q
KQorCitWZWN0b3I8IFJlZlB0cjxQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlPiA+
KiBQYXJhbGxlbEVudmlyb25tZW50OjpzX3RocmVhZFBvb2wgPSAwOworCitib29sIFBhcmFsbGVs
RW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9ubWVu
dCogcGFyZW50KQoreworICAgIGJvb2wgbG9ja2VkID0gbV9tdXRleC50cnlMb2NrKCk7CisKKyAg
ICBpZiAoIWxvY2tlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcGFyZW50
KSB7CisgICAgICAgIG1fbXV0ZXgudW5sb2NrKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoIW1fdGhyZWFkSUQpCisgICAgICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVU
aHJlYWQoJlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCwg
dGhpcywgIlBhcmFsbGVsIHdvcmtlciIpOworCisgICAgaWYgKG1fdGhyZWFkSUQpCisgICAgICAg
IG1fcGFyZW50ID0gcGFyZW50OworCisgICAgbV9tdXRleC51bmxvY2soKTsKKyAgICByZXR1cm4g
bV90aHJlYWRJRDsKK30KKwordm9pZCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRl
OjpleGVjdXRlSm9iKFRocmVhZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCB2b2lkKiBwYXJhbWV0
ZXJzKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisKKyAgICBtX3RocmVhZEZ1
bmN0aW9uID0gdGhyZWFkRnVuY3Rpb247CisgICAgbV9wYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsK
KyAgICBtX3J1bm5pbmcgPSB0cnVlOworICAgIG1fdGhyZWFkQ29uZGl0aW9uLnNpZ25hbCgpOwor
fQorCit2b2lkIFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndhaXRGb3JGaW5p
c2goKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisKKyAgICB3aGlsZSAobV9y
dW5uaW5nKQorICAgICAgICBtX3RocmVhZENvbmRpdGlvbi53YWl0KG1fbXV0ZXgpOworfQorCit2
b2lkKiBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQodm9p
ZCogdGhyZWFkRGF0YSkKK3sKKyAgICBUaHJlYWRQcml2YXRlKiBzaGFyZWRUaHJlYWQgPSByZWlu
dGVycHJldF9jYXN0PFRocmVhZFByaXZhdGUqPih0aHJlYWREYXRhKTsKKyAgICBNdXRleExvY2tl
ciBsb2NrKHNoYXJlZFRocmVhZC0+bV9tdXRleCk7CisKKyAgICB3aGlsZSAoc2hhcmVkVGhyZWFk
LT5tX3RocmVhZElEKSB7CisgICAgICAgIGlmIChzaGFyZWRUaHJlYWQtPm1fcnVubmluZykgewor
ICAgICAgICAgICAgKCpzaGFyZWRUaHJlYWQtPm1fdGhyZWFkRnVuY3Rpb24pKHNoYXJlZFRocmVh
ZC0+bV9wYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIHNoYXJlZFRocmVhZC0+bV9ydW5uaW5nID0g
ZmFsc2U7CisgICAgICAgICAgICBzaGFyZWRUaHJlYWQtPm1fcGFyZW50ID0gMDsKKyAgICAgICAg
ICAgIHNoYXJlZFRocmVhZC0+bV90aHJlYWRDb25kaXRpb24uc2lnbmFsKCk7CisgICAgICAgIH0K
KworICAgICAgICBzaGFyZWRUaHJlYWQtPm1fdGhyZWFkQ29uZGl0aW9uLndhaXQoc2hhcmVkVGhy
ZWFkLT5tX211dGV4KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvLyAgIUVO
QUJMRShPUEVOTVApCisKKworUGFyYWxsZWxFbnZpcm9ubWVudDo6UGFyYWxsZWxFbnZpcm9ubWVu
dChUaHJlYWRGdW5jdGlvbiB0aHJlYWRGdW5jdGlvbiwgc2l6ZV90IHNpemVPZlBhcmFtZXRlciwg
aW50IHJlcXVlc3RlZEpvYk51bWJlcikKKyAgICA6IG1fdGhyZWFkRnVuY3Rpb24odGhyZWFkRnVu
Y3Rpb24pCit7CisgICAgaW50IG1heE51bWJlck9mVGhyZWFkczsKKworI2lmIEVOQUJMRShPUEVO
TVApCisgICAgbWF4TnVtYmVyT2ZUaHJlYWRzID0gb21wX2dldF9tYXhfdGhyZWFkcygpOworI2Vs
c2UKKyAgICBtYXhOdW1iZXJPZlRocmVhZHMgPSBtYXhQYXJhbGxlbFRocmVhZHM7CisjZW5kaWYK
KworICAgIGlmICghcmVxdWVzdGVkSm9iTnVtYmVyIHx8IHJlcXVlc3RlZEpvYk51bWJlciA+IG1h
eE51bWJlck9mVGhyZWFkcykKKyAgICAgICAgcmVxdWVzdGVkSm9iTnVtYmVyID0gbWF4TnVtYmVy
T2ZUaHJlYWRzOworCisjaWYgRU5BQkxFKE9QRU5NUCkKKyAgICBBU1NFUlQocmVxdWVzdGVkSm9i
TnVtYmVyID4gMCk7CisgICAgbV9udW1iZXJPZkpvYnMgPSByZXF1ZXN0ZWRKb2JOdW1iZXI7Cisj
ZWxzZQorICAgIGlmICghc190aHJlYWRQb29sKQorICAgICAgICBzX3RocmVhZFBvb2wgPSBuZXcg
VmVjdG9yPCBSZWZQdHI8VGhyZWFkUHJpdmF0ZT4gPigpOworCisgICAgLy8gVGhlIG1haW4gdGhy
ZWFkIHNob3VsZCBiZSBhbHNvIGEgd29ya2VyLgorICAgIGludCBtYXhOZXdUaHJlYWRzID0gcmVx
dWVzdGVkSm9iTnVtYmVyIC0gMTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4TnVtYmVy
T2ZUaHJlYWRzICYmIG1fdGhyZWFkcy5zaXplKCkgPCBtYXhOZXdUaHJlYWRzOyArK2kpIHsKKyAg
ICAgICAgaWYgKHNfdGhyZWFkUG9vbC0+c2l6ZSgpIDwgaSArIDEpCisgICAgICAgICAgICBzX3Ro
cmVhZFBvb2wtPmFwcGVuZChUaHJlYWRQcml2YXRlOjpjcmVhdGUoKSk7CisKKyAgICAgICAgaWYg
KCgqc190aHJlYWRQb29sKVtpXS0+dHJ5TG9ja0Zvcih0aGlzKSkKKyAgICAgICAgICAgIG1fdGhy
ZWFkcy5hcHBlbmQoKCpzX3RocmVhZFBvb2wpW2ldKTsKKyAgICB9CisKKyAgICBtX251bWJlck9m
Sm9icyA9IG1fdGhyZWFkcy5zaXplKCkgKyAxOworI2VuZGlmCisKKyAgICBtX3BhcmFtZXRlcnMg
PSBCeXRlQXJyYXk6OmNyZWF0ZShzaXplT2ZQYXJhbWV0ZXIgKiBtX251bWJlck9mSm9icyk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKFBBUkFMTEVMX0pPQlMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yZGYzMGEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChD
KSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJT
SVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBQYXJhbGxlbEpvYnNfaAorI2RlZmluZSBQYXJhbGxlbEpvYnNf
aAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgIkJ5dGVBcnJheS5oIgorI2lu
Y2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisjaW5jbHVkZSAiUmVmUHRyLmgiCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisKKy8vIFVzYWdlOgorLy8K
Ky8vICNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKy8vCisvLyAgICAgLy8gSW5pdGlhbGl6ZSBw
YXJhbGxlbCBqb2JzCisvLyAgICAgUGFyYWxsZWxKb2JzPFR5cGVPZlBhcmFtZXRlcj4gcGFyYWxs
ZWxKb2JzKCZ3b3JrZXIgWywgcmVxdWVzdGVkTnVtYmVyT2ZKb2JzXSk7CisvLworLy8gICAgIC8v
IEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQorLy8gICAgIGludCBpID0gcGFyYWxsZWxKb2JzLm51
bWJlck9mSm9icygpOworLy8gICAgIGZvcig7IGkgPiAwOyAtLWkpIHsKKy8vICAgICAgIFR5cGVP
ZlBhcmFtZXRlciogcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlckZvckpvYihpKTsKKy8v
ICAgICAgIHBhcmFtcy0+YXR0cjEgPSBsb2NhbFZhcnMgLi4uCisvLyAgICAgICAuLi4KKy8vICAg
ICB9CisvLworLy8gICAgIC8vIEV4ZWN1dGUgcGFyYWxsZWwgam9icworLy8gICAgIHBhcmFsbGVs
Sm9icy5leGVjdXRlSm9icygpOworLy8KKy8vICNlbHNlCisvLworLy8gICAgIGlubGluZUZ1bmN0
aW9uKGFyZ3MuLi4pOworLy8KKy8vICNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKwor
CisjaWYgRU5BQkxFKE9QRU5NUCkKKyNpbmNsdWRlIDxvbXAuaD4KKyNlbHNlCisjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCisjaWYgIUVOQUJM
RShPUEVOTVApCitzdGF0aWMgY29uc3QgaW50IG1heFBhcmFsbGVsVGhyZWFkcyA9IDI7CisjZW5k
aWYKKworY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUGFyYWxsZWxFbnZpcm9ubWVudCk7Citwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiB2b2lkICgq
VGhyZWFkRnVuY3Rpb24pKHZvaWQqKTsKKworICAgIFBhcmFsbGVsRW52aXJvbm1lbnQoVGhyZWFk
RnVuY3Rpb24sIHNpemVfdCwgaW50KTsKKworICAgIFRocmVhZEZ1bmN0aW9uIG1fdGhyZWFkRnVu
Y3Rpb247CisgICAgaW50IG1fbnVtYmVyT2ZKb2JzOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IG1f
cGFyYW1ldGVyczsKKworI2lmICFFTkFCTEUoT1BFTk1QKQorICAgIGNsYXNzIFRocmVhZFByaXZh
dGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaHJlYWRQcml2YXRlPiB7CisgICAgcHVibGljOgorICAg
ICAgICBUaHJlYWRQcml2YXRlKCkKKyAgICAgICAgICAgIDogbV90aHJlYWRJRCgwKQorICAgICAg
ICAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCisgICAgICAgICAgICAsIG1fcGFyZW50KDApCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5TG9ja0ZvcihQYXJhbGxlbEVudmly
b25tZW50Kik7CisKKyAgICAgICAgdm9pZCBleGVjdXRlSm9iKFRocmVhZEZ1bmN0aW9uLCB2b2lk
Kik7CisKKyAgICAgICAgdm9pZCB3YWl0Rm9yRmluaXNoKCk7CisKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8VGhyZWFkUHJpdmF0ZT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUaHJlYWRQcml2YXRlKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGljIHZvaWQqIHdvcmtlclRocmVhZCh2b2lkKik7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgICAgIGJvb2wgbV9ydW5uaW5n
OworICAgICAgICBQYXJhbGxlbEVudmlyb25tZW50KiBtX3BhcmVudDsKKworICAgICAgICBtdXRh
YmxlIE11dGV4IG1fbXV0ZXg7CisgICAgICAgIFRocmVhZENvbmRpdGlvbiBtX3RocmVhZENvbmRp
dGlvbjsKKworICAgICAgICBUaHJlYWRGdW5jdGlvbiBtX3RocmVhZEZ1bmN0aW9uOworICAgICAg
ICB2b2lkKiBtX3BhcmFtZXRlcnM7CisgICAgfTsKKworICAgIFZlY3RvcjwgUmVmUHRyPFRocmVh
ZFByaXZhdGU+ID4gbV90aHJlYWRzOworICAgIHN0YXRpYyBWZWN0b3I8IFJlZlB0cjxUaHJlYWRQ
cml2YXRlPiA+KiBzX3RocmVhZFBvb2w7CisjZW5kaWYKKworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KK2NsYXNzIFBhcmFsbGVsSm9icyA6IHB1YmxpYyBQYXJhbGxlbEVudmlyb25tZW50
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKCpXb3JrZXJGdW5jdGlvbikoVHlwZSopOwor
CisgICAgUGFyYWxsZWxKb2JzKFdvcmtlckZ1bmN0aW9uIGZ1bmMsIGludCByZXF1ZXN0ZWRKb2JO
dW1iZXIgPSAwKSA6CisgICAgICAgIFBhcmFsbGVsRW52aXJvbm1lbnQocmVpbnRlcnByZXRfY2Fz
dDxUaHJlYWRGdW5jdGlvbj4oZnVuYyksIHNpemVvZihUeXBlKSwgcmVxdWVzdGVkSm9iTnVtYmVy
KQorICAgIHsKKyAgICB9CisKKyAgICBpbnQgbnVtYmVyT2ZKb2JzKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX251bWJlck9mSm9iczsKKyAgICB9CisKKyAgICBUeXBlKiBwYXJhbWV0ZXJGb3JK
b2IoaW50IGkpCisgICAgeworICAgICAgICBBU1NFUlQobnVtYmVyT2ZKb2JzKCkgPj0gaSk7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFR5cGUqPihtX3BhcmFtZXRlcnMtPmRhdGEo
KSkgKyAoaSAtIDEpOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZUpvYnMoKQorICAgIHsKKyNp
ZiBFTkFCTEUoT1BFTk1QKQorICAgICAgICBvbXBfc2V0X251bV90aHJlYWRzKG1fbnVtYmVyT2ZK
b2JzKTsKKworICAgICAgICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBmb3IKKyAgICAgICAgZm9yIChp
bnQgaSA9IG1fbnVtYmVyT2ZKb2JzOyBpID4gMDsgLS1pKQorICAgICAgICAgICAgKCptX3RocmVh
ZEZ1bmN0aW9uKShwYXJhbWV0ZXJGb3JKb2IoaSkpOworI2Vsc2UKKyAgICAgICAgaW50IGk7Cisg
ICAgICAgIGZvciAoaSA9IG1fdGhyZWFkcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkKKyAgICAg
ICAgICAgIG1fdGhyZWFkc1tpXS0+ZXhlY3V0ZUpvYihtX3RocmVhZEZ1bmN0aW9uLCBwYXJhbWV0
ZXJGb3JKb2IoaSArIDEpKTsKKworICAgICAgICAvLyBUaGUgd29yayBmb3IgdGhlIG1haW4gdGhy
ZWFkCisgICAgICAgICgqbV90aHJlYWRGdW5jdGlvbikocGFyYW1ldGVyRm9ySm9iKG1fdGhyZWFk
cy5zaXplKCkgKyAxKSk7CisKKyAgICAgICAgZm9yIChpID0gbV90aHJlYWRzLnNpemUoKSAtIDE7
IGkgPj0gMDsgLS1pKQorICAgICAgICAgICAgbV90aHJlYWRzW2ldLT53YWl0Rm9yRmluaXNoKCk7
CisjZW5kaWYKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQ
YXJhbGxlbEpvYnM7CisKKyNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKworI2VuZGlm
IC8vIFBhcmFsbGVsSm9ic19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXgg
ZTQwYjFhNi4uZDkzNDg5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
bGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAt
MTE4Niw2ICsxMTg2LDE0IEBACiAjZGVmaW5lIEVOQUJMRV9CUkFOQ0hfQ09NUEFDVElPTiAxCiAj
ZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9PUEVOTVApICYmIGRlZmluZWQoX09QRU5NUCkK
KyNkZWZpbmUgRU5BQkxFX09QRU5NUCAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9Q
QVJBTExFTF9KT0JTKSAmJiAhRU5BQkxFKFNJTkdMRV9USFJFQURFRCkgJiYgRU5BQkxFKE9QRU5N
UCkKKyNkZWZpbmUgRU5BQkxFX1BBUkFMTEVMX0pPQlMgMQorI2VuZGlmCisKICNpZiBFTkFCTEUo
R0xJQl9TVVBQT1JUKQogI2luY2x1ZGUgIkdUeXBlZGVmcy5oIgogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL3d0Zi5wcmkKaW5kZXggNWYxNWViMC4uNTlhMmNjOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvd3RmLnByaQpAQCAtMjEsNiArMjEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYvcXQvVGhy
ZWFkaW5nUXQuY3BwIFwKICAgICB3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmNwcCBcCiAgICAg
d3RmL1BhZ2VCbG9jay5jcHAgXAorICAgIHd0Zi9QYXJhbGxlbEpvYnMuY3BwIFwKICAgICB3dGYv
UmFuZG9tTnVtYmVyLmNwcCBcCiAgICAgd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgXAog
ICAgIHd0Zi9TSEExLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzQxOGEzNC4uZTdhMDUzOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTA0LTA3ICBHYWJvciBMb2tpICA8bG9raUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNwZWVkaW5nIHVwIFNWRyBmaWx0ZXJzIHdpdGggbXVsdGljb3JlIChTTVApIHN1cHBvcnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzOTAzCisKKyAg
ICAgICAgU29tZSBTVkcgZmlsdGVycyBleGVjdXRlIGEgaHVnZSBudW1iZXIgb2YgcGl4ZWwgbWFu
aXB1bGF0aW9ucywgd2hpY2gKKyAgICAgICAgY2Fubm90IGJlIHNwZWQgdXAgYnkgZ3JhcGhpY3Mg
YWNjZWxlcmF0b3JzLCBzaW5jZSB0aGVpciBhbGdvcml0aG0gaXMKKyAgICAgICAgdG9vIGNvbXBs
ZXguIFVzaW5nIHRoZSBwb3dlciBvZiBTeW1tZXRyaWMgTXVsdGkgUHJvY2Vzc2luZyAoU01QKSB3
ZQorICAgICAgICBjYW4gc3BsaXQgdXAgYSB0YXNrIHRvIHNtYWxsZXIgKGRhdGEgaW5kZXBlbmRl
bnQpIHRhc2tzLCB3aGljaCBjYW4gYmUKKyAgICAgICAgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseS4K
KworICAgICAgICBUaGUgUGFyYWxsZWxKb2JzIGZyYW1ld29yayBwcm92aWRlcyBhIHNpbXBsZSB3
YXkgZm9yIGRpc3RyaWJ1dGVkCisgICAgICAgIHByb2dyYW1taW5nLiBUaGUgZnJhbWV3b3JrIGlz
IGJhc2VkIG9uIFdlYktpdCdzIHRocmVhZGluZyBpbmZyYXN0cnVjdHVyZQorICAgICAgICBhbmQg
T3BlbiBNdWx0aS1Qcm9jZXNzaW5nJ3MgKE9wZW5NUCkgQVBJLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OlBhaW50aW5nRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
Lmg6CisKIDIwMTEtMDQtMDcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QYXJhbGxlbEpvYnMuaCBiL1NvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QYXJhbGxlbEpvYnMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5iMDY0ZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1BhcmFsbGVsSm9icy5oCkBAIC0wLDAgKzEsNCBA
QAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9QYXJhbGxlbEpvYnNfaAorI2RlZmluZSBXZWJDb3JlX0ZX
RF9QYXJhbGxlbEpvYnNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1BhcmFsbGVsSm9icy5o
PgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggNjMwNjBlMS4uMmYwNjllOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2Rv
dmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBM
b2tpIDxsb2tpQHdlYmtpdC5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMzLDcg
QEAKIAogI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0xNTIsNyArMTU0LDYgQEAgRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OlBhaW50
aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnQKICAgICAsIGhl
aWdodCgwKQogICAgICwgd3JhcFgoMCkKICAgICAsIHdyYXBZKDApCi0gICAgLCBjaGFubmVsKDAp
CiAgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKIHsKIH0KQEAgLTIyNCw3ICsyMjUsNyBA
QCBpbmxpbmUgdm9pZCBjaGVja05vaXNlKGludCYgbm9pc2VWYWx1ZSwgaW50IGxpbWl0VmFsdWUs
IGludCBuZXdWYWx1ZSkKICAgICAgICAgbm9pc2VWYWx1ZSAtPSBuZXdWYWx1ZSAtIDE7CiB9CiAK
LWZsb2F0IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
Y29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCitmbG9hdCBGRVR1cmJ1bGVuY2U6Om5vaXNl
MkQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBGbG9hdFBv
aW50JiBub2lzZVZlY3RvcikKIHsKICAgICBzdHJ1Y3QgTm9pc2UgewogICAgICAgICBpbnQgbm9p
c2VQb3NpdGlvbkludGVnZXJWYWx1ZTsKQEAgLTI1OSwyMyArMjYwLDIzIEBAIGZsb2F0IEZFVHVy
YnVsZW5jZTo6bm9pc2UyRChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQ
b2ludCYgbm9pc2VWCiAKICAgICAvLyBUaGlzIGlzIHRha2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBo
dHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVu
dC4KICAgICBpbnQgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUlu
ZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOwotICAgIHEgPSBwYWludGlu
Z0RhdGEuZ3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOworICAgIHEgPSBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bdGVtcF07CiAgICAgdSA9IG5vaXNlWC5ub2lzZVBv
c2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMF0gKyBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9u
VmFsdWUgKiBxWzFdOwogICAgIHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25l
eHRMYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07Ci0gICAg
cSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07Cisg
ICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVt0ZW1wXTsKICAgICB2ID0gKG5v
aXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVswXSArIG5vaXNlWS5ub2lz
ZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMV07CiAgICAgYSA9IGxpbmVhckludGVycG9sYXRp
b24oc3gsIHUsIHYpOwogICAgIHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xh
dHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMV07Ci0gICAg
cSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07Cisg
ICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVt0ZW1wXTsKICAgICB1ID0gbm9p
c2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVswXSArIChub2lzZVkubm9pc2VQb3Np
dGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMV07CiAgICAgdGVtcCA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50
ZWdlclZhbHVlICsgMV07Ci0gICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0Rh
dGEuY2hhbm5lbF1bdGVtcF07CisgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVs
XVt0ZW1wXTsKICAgICB2ID0gKG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEp
ICogcVswXSArIChub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMV07
CiAgICAgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwogICAgIHJldHVybiBsaW5l
YXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsKIH0KIAotdW5zaWduZWQgY2hhciBGRVR1cmJ1bGVu
Y2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3Vuc2lnbmVkIGNoYXIgRkVUdXJidWxl
bmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChpbnQgY2hhbm5lbCwgUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewogICAgIGZs
b2F0IHRpbGVXaWR0aCA9IHBhaW50aW5nRGF0YS5maWx0ZXJTaXplLndpZHRoKCk7CiAgICAgQVNT
RVJUKHRpbGVXaWR0aCA+IDApOwpAQCAtMzEzLDkgKzMxNCw5IEBAIHVuc2lnbmVkIGNoYXIgRkVU
dXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEm
IHBhaW50CiAgICAgZmxvYXQgcmF0aW8gPSAxOwogICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9j
dGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKICAgICAgICAgaWYgKG1fdHlwZSA9PSBG
RVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlv
OworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQoY2hhbm5l
bCwgcGFpbnRpbmdEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IGZhYnNmKG5vaXNlMkQocGFpbnRp
bmdEYXRhLCBub2lzZVZlY3RvcikpIC8gcmF0aW87CisgICAgICAgICAgICB0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgKz0gZmFic2Yobm9pc2UyRChjaGFubmVsLCBwYWludGluZ0RhdGEsIG5vaXNl
VmVjdG9yKSkgLyByYXRpbzsKICAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54
KCkgKiAyKTsKICAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsK
ICAgICAgICAgcmF0aW8gKj0gMjsKQEAgLTMzOCw2ICszMzksMzEgQEAgdW5zaWduZWQgY2hhciBG
RVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KFBhaW50aW5nRGF0
YSYgcGFpbnQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0ICogMjU1KTsKIH0KIAoraW5saW5lIHZvaWQgRkVUdXJidWxlbmNlOjpm
aWxsUmVnaW9uKEJ5dGVBcnJheSogcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIGludCBzdGFydFksIGludCBlbmRZKQoreworICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0g
YWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICBJbnRQb2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24u
eSgpICsgc3RhcnRZKTsKKyAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChm
aWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKKyAgICBpbnQgY2hhbm5lbDsKKworICAgIGZvciAo
aW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKKyAgICAgICAgcG9pbnQuc2V0WShwb2lu
dC55KCkgKyAxKTsKKyAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKKyAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7CisgICAg
ICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOworICAgICAgICAgICAgZm9yIChjaGFu
bmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCwgKytpbmRleE9mUGl4ZWxDaGFubmVsKQor
ICAgICAgICAgICAgICAgIHBpeGVsQXJyYXktPnNldChpbmRleE9mUGl4ZWxDaGFubmVsLCBjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjaGFubmVsLCBwYWludGluZ0RhdGEsIGZpbHRl
cigpLT5tYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbFBvaW50KHBvaW50KSkpOworICAgICAgICB9Cisg
ICAgfQorfQorCisjaWYgRU5BQkxFKFBBUkFMTEVMX0pPQlMpCit2b2lkIEZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAg
ICBwYXJhbWV0ZXJzLT5maWx0ZXItPmZpbGxSZWdpb24ocGFyYW1ldGVycy0+cGl4ZWxBcnJheSwg
KnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJz
LT5lbmRZKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKwogdm9pZCBGRVR1
cmJ1bGVuY2U6OmFwcGx5KCkKIHsKICAgICBpZiAoaGFzUmVzdWx0KCkpCkBAIC0zNTIsMTkgKzM3
OCw0MiBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHkoKQogICAgIFBhaW50aW5nRGF0YSBwYWlu
dGluZ0RhdGEobV9zZWVkLCByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
KS5zaXplKCkpKTsKICAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKIAotICAgIEZsb2F0UmVj
dCBmaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZsb2F0UG9pbnQgcG9p
bnQ7Ci0gICAgcG9pbnQuc2V0WShmaWx0ZXJSZWdpb24ueSgpKTsKLSAgICBpbnQgaW5kZXhPZlBp
eGVsQ2hhbm5lbCA9IDA7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBhYnNvbHV0ZVBhaW50UmVj
dCgpLmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsK
LSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCk7ICsreCkgewotICAgICAgICAg
ICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAgICAgIGZvciAocGFpbnRpbmdE
YXRhLmNoYW5uZWwgPSAwOyBwYWludGluZ0RhdGEuY2hhbm5lbCA8IDQ7ICsrcGFpbnRpbmdEYXRh
LmNoYW5uZWwsICsraW5kZXhPZlBpeGVsQ2hhbm5lbCkKLSAgICAgICAgICAgICAgICBwaXhlbEFy
cmF5LT5zZXQoaW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQocGFpbnRpbmdEYXRhLCBmaWx0ZXIoKS0+bWFwQWJzb2x1dGVQb2ludFRvTG9jYWxQb2lu
dChwb2ludCkpKTsKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKworICAgIGludCBvcHRpbWFs
VGhyZWFkTnVtYmVyID0gKGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29sdXRlUGFp
bnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbjsKKyAgICBpZiAob3B0
aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBq
b2JzCisgICAgICAgIFBhcmFsbGVsSm9iczxGaWxsUmVnaW9uUGFyYW1ldGVycz4gcGFyYWxsZWxK
b2JzKCZXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIsIG9wdGltYWxUaHJl
YWROdW1iZXIpOworCisgICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQorICAgICAg
ICBpbnQgaSA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKKyAgICAgICAgaWYgKGkgPiAx
KSB7CisgICAgICAgICAgICBpbnQgc3RhcnRZID0gMDsKKyAgICAgICAgICAgIGludCBzdGVwWSA9
IGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkgLyBpOworICAgICAgICAgICAgZm9yICg7IGkg
PiAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1z
ID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlckZvckpvYihpKTsKKyAgICAgICAgICAgICAgICBwYXJh
bXMtPmZpbHRlciA9IHRoaXM7CisgICAgICAgICAgICAgICAgcGFyYW1zLT5waXhlbEFycmF5ID0g
cGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnBhaW50aW5nRGF0YSA9ICZwYWlu
dGluZ0RhdGE7CisgICAgICAgICAgICAgICAgcGFyYW1zLT5zdGFydFkgPSBzdGFydFk7CisgICAg
ICAgICAgICAgICAgaWYgKGkgIT0gMSkgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPmVu
ZFkgPSBzdGFydFkgKyBzdGVwWTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRZID0gc3RhcnRZ
ICsgc3RlcFk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBh
cmFtcy0+ZW5kWSA9IGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIEV4ZWN1dGUgcGFyYWxsZWwgam9icworICAgICAgICAgICAgcGFy
YWxsZWxKb2JzLmV4ZWN1dGVKb2JzKCk7CisKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KKyAgICAvLyBGYWxsYmFjayB0byBzZXF1ZW50aWFsIG1vZGUgaWYgdGhlcmUgaXMg
bm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbAor
CisjZW5kaWYgLy8gRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisKKyAgICBmaWxsUmVnaW9uKHBpeGVs
QXJyYXksIHBhaW50aW5nRGF0YSwgMCwgYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSk7CiB9
CiAKIHZvaWQgRkVUdXJidWxlbmNlOjpkdW1wKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IGRmZWIyMjAu
LjA0NjYyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNTgsNiArNTgsMTAgQEAgcHVibGljOgogICAg
IGJvb2wgc3RpdGNoVGlsZXMoKSBjb25zdDsKICAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wp
OwogCisjaWYgRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lv
bldvcmtlcih2b2lkKik7CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOwogICAg
IHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgCkBAIC02OCw2ICs3Miw5IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsKICAgICBzdGF0
aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUgLSAxOworI2lmIEVOQUJMRShQ
QVJBTExFTF9KT0JTKQorICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lv
biA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9i
cworI2VuZGlmCiAKICAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKICAgICAgICAgbG9uZyBzZWVk
OwpAQCAtNzcsMTggKzg0LDMzIEBAIHByaXZhdGU6CiAgICAgICAgIGludCBoZWlnaHQ7CiAgICAg
ICAgIGludCB3cmFwWDsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgogICAgICAgICBpbnQgd3Jh
cFk7Ci0gICAgICAgIGludCBjaGFubmVsOwogICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7CiAK
ICAgICAgICAgUGFpbnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBw
YWludGluZ1NpemUpOwogICAgICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKICAgICB9OwogCisj
aWYgRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KKyAg
ICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOworCisgICAgc3RydWN0IEZpbGxSZWdpb25QYXJh
bWV0ZXJzIHsKKyAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0ZXI7CisgICAgICAgIEJ5dGVBcnJh
eSogcGl4ZWxBcnJheTsKKyAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7CisgICAg
ICAgIGludCBzdGFydFk7CisgICAgICAgIGludCBlbmRZOworICAgIH07CisKKyAgICBzdGF0aWMg
dm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKik7CisjZW5kaWYKKwog
ICAgIEZFVHVyYnVsZW5jZShGaWx0ZXIqLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBp
bnQsIGZsb2F0LCBib29sKTsKIAogICAgIGlubGluZSB2b2lkIGluaXRQYWludChQYWludGluZ0Rh
dGEmKTsKLSAgICBmbG9hdCBub2lzZTJEKFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQm
KTsKLSAgICB1bnNpZ25lZCBjaGFyIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KFBh
aW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBmbG9hdCBub2lzZTJEKGludCBj
aGFubmVsLCBQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdW5zaWduZWQg
Y2hhciBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChpbnQgY2hhbm5lbCwgUGFpbnRp
bmdEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIGlubGluZSB2b2lkIGZpbGxSZWdpb24o
Qnl0ZUFycmF5KiwgUGFpbnRpbmdEYXRhJiwgaW50LCBpbnQpOwogCiAgICAgVHVyYnVsZW5jZVR5
cGUgbV90eXBlOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7Ci0tIAoxLjYuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88609</attachid>
            <date>2011-04-07 05:19:11 -0700</date>
            <delta_ts>2011-04-12 00:41:58 -0700</delta_ts>
            <desc>Speeding up FETurbulence with SMP</desc>
            <filename>0001-Speeding-up-SVG-filters-with-multicore-SMP-support.patch</filename>
            <type>text/plain</type>
            <size>31187</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSAxMGFmNTE3N2M1NzU4YTZiOTdjZjBhZjgwNDUyYjllNzA2ZjMyZTAyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVGh1LCA3IEFwciAyMDExIDA5OjA2OjI5ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gU3BlZWRp
bmcgdXAgU1ZHIGZpbHRlcnMgd2l0aCBtdWx0aWNvcmUgKFNNUCkgc3VwcG9ydAoKU2lnbmVkLW9m
Zi1ieTogR2Fib3IgTG9raSA8bG9raUBpbmYudS1zemVnZWQuaHU+Ci0tLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDMyICsrKysKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgICAgMiArCiAu
Li4vSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qICAgICAgICAgICB8ICAgIDgg
KwogLi4uL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICAgICAgfCAg
ICA4ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQgICAgICAgICAg
IHwgICAgMiArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5jcHAgICAg
ICAgICB8ICAxNDEgKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
YXJhbGxlbEpvYnMuaCAgICAgICAgICAgfCAgMTc3ICsrKysrKysrKysrKysrKysrKysrCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggICAgICAgICAgICAgICB8ICAgIDggKwog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpICAgICAgICAgICAgICAgICAgfCAgICAx
ICsKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAyNiArKysKIC4uLi9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QYXJhbGxlbEpvYnMu
aCAgIHwgICAgNCArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwICAgICB8ICAgODkgKysrKysrKystLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oICAgICAgIHwgICAyOCArKystCiAxMyBmaWxlcyBjaGFuZ2VkLCA1MDMg
aW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QYXJhbGxlbEpvYnMuaAoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDczOWNmN2YuLjYzYmQ2MDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDExLTA0LTA3ICBHYWJvciBMb2tpICA8
bG9raUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFNwZWVkaW5nIHVwIFNWRyBmaWx0ZXJzIHdpdGggbXVsdGljb3JlIChTTVApIHN1
cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQz
OTAzCisKKyAgICAgICAgU29tZSBTVkcgZmlsdGVycyBleGVjdXRlIGEgaHVnZSBudW1iZXIgb2Yg
cGl4ZWwgbWFuaXB1bGF0aW9ucywgd2hpY2gKKyAgICAgICAgY2Fubm90IGJlIHNwZWQgdXAgYnkg
Z3JhcGhpY3MgYWNjZWxlcmF0b3JzLCBzaW5jZSB0aGVpciBhbGdvcml0aG0gaXMKKyAgICAgICAg
dG9vIGNvbXBsZXguIFVzaW5nIHRoZSBwb3dlciBvZiBTeW1tZXRyaWMgTXVsdGkgUHJvY2Vzc2lu
ZyAoU01QKSB3ZQorICAgICAgICBjYW4gc3BsaXQgdXAgYSB0YXNrIHRvIHNtYWxsZXIgKGRhdGEg
aW5kZXBlbmRlbnQpIHRhc2tzLCB3aGljaCBjYW4gYmUKKyAgICAgICAgZXhlY3V0ZWQgaW5kZXBl
bmRlbnRseS4KKworICAgICAgICBUaGUgUGFyYWxsZWxKb2JzIGZyYW1ld29yayBwcm92aWRlcyBh
IHNpbXBsZSB3YXkgZm9yIGRpc3RyaWJ1dGVkCisgICAgICAgIHByb2dyYW1taW5nLiBUaGUgZnJh
bWV3b3JrIGlzIGJhc2VkIG9uIFdlYktpdCdzIHRocmVhZGluZyBpbmZyYXN0cnVjdHVyZQorICAg
ICAgICBhbmQgT3BlbiBNdWx0aS1Qcm9jZXNzaW5nJ3MgKE9wZW5NUCkgQVBJLgorCisgICAgICAg
ICogd3RmL1BhcmFsbGVsSm9icy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpQYXJhbGxlbEpv
YnM6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3IpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEpv
YnM6OlRocmVhZFByaXZhdGU6OmV4ZWN1dGVKb2IpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEpv
YnM6OlRocmVhZFByaXZhdGU6OndhaXRGb3JGaW5pc2gpOgorICAgICAgICAoV1RGOjpQYXJhbGxl
bEpvYnM6OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCk6CisgICAgICAgIChXVEY6OlBhcmFs
bGVsSm9iczo6UGFyYWxsZWxKb2JzKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2JzOjpleGVj
dXRlSm9icyk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9icy5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6UGFyYWxsZWxKb2JzOjpudW1iZXJPZkpvYnMpOgorICAgICAgICAoV1RGOjpQYXJhbGxl
bEpvYnM6OnBhcmFtZXRlckZvckpvYik6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSm9iczo6VGhy
ZWFkUHJpdmF0ZTo6VGhyZWFkUHJpdmF0ZSk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSm9iczo6
VGhyZWFkUHJpdmF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKyAgICAg
ICAgKiB3dGYvd3RmLnByaToKKwogMjAxMS0wNC0wNiAgRGFpIE1pa3VydWJlICA8ZG1pa3VydWJl
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAwYWI5ZmE4Li5iZmFkMjRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC01MDgsNiArNTA4LDggQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duQXJy
YXlQdHIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duUHRyLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc1JlZlB0ci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BhcmFsbGVsSm9icy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGFyYWxsZWxKb2JzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Qb3NzaWJseU51bGwuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9SYW5kb21OdW1iZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmlu
ZGV4IGQ5NTE0ZTQuLjg0ZDMyMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagpAQCAtODQxLDYgKzg0
MSwxNCBAQAogCQkJPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXHd0ZlxQYXJhbGxlbEpvYnMuY3BwIg0KKwkJCT4NCisJCTwvRmlsZT4NCisJCTxGaWxlDQor
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUGFyYWxsZWxKb2JzLmgiDQorCQkJPg0KKwkJPC9G
aWxlPg0KKwkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQbGF0Zm9ybS5oIg0K
IAkJCT4NCiAJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMyZGRj
MzkuLjk5MmI5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMTQsNiArMjE0
LDggQEAKIAkJNzE4NkE2RUMxMzEwMEJBNTAwNDQ3OUUxIC8qIEhleE51bWJlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzE4NkE2RTgxMzEwMEI1NzAw
NDQ3OUUxIC8qIEhleE51bWJlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc2RkI5RjBGMTJFODUxODYwMDUxQTJFQiAvKiBTSEExLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkZCOUYwRTEyRTg1MTg2
MDA1MUEyRUIgLyogU0hBMS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc2RkI5RjExMTJFODUxOTYwMDUxQTJFQiAvKiBTSEExLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2RkI5RjEwMTJFODUxOTYw
MDUxQTJFQiAvKiBTSEExLmNwcCAqLzsgfTsKKwkJNzkwNkU0M0QxMzRDQkZENDAwMTc1RjE5IC8q
IFBhcmFsbGVsSm9icy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTA2RTQzQjEzNENCRkQ0MDAxNzVGMTkgLyogUGFyYWxsZWxKb2JzLmNwcCAqLzsg
fTsKKwkJNzkwNkU0M0UxMzRDQkZENDAwMTc1RjE5IC8qIFBhcmFsbGVsSm9icy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNkU0M0MxMzRDQkZENDAw
MTc1RjE5IC8qIFBhcmFsbGVsSm9icy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVD
aGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0
RUU3MDgwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0U0RUU3MEYwRUJCN0E1QjAwNTkz
NEFBIC8qIFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdFNEVFNzBFMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFp
bi5jcHAgKi87IH07CiAJCTdFRkYwMDY0MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VGRjAwNjMwRUMw
NUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggKi87IH07CkBAIC04NzksNiArODgxLDggQEAKIAkJ
NzE4NkE2RTgxMzEwMEI1NzAwNDQ3OUUxIC8qIEhleE51bWJlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIZXhOdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzZGQjlGMEUxMkU4NTE4NjAwNTFBMkVCIC8qIFNIQTEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU0hBMS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NkZC
OUYxMDEyRTg1MTk2MDA1MUEyRUIgLyogU0hBMS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTSEExLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzkw
NkU0M0IxMzRDQkZENDAwMTc1RjE5IC8qIFBhcmFsbGVsSm9icy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJhbGxlbEpvYnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3OTA2RTQzQzEzNENCRkQ0MDAxNzVGMTkgLyogUGFyYWxsZWxKb2JzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsSm9icy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3RTJDNkM5ODBEMzFDNkI2MDAyRDQ0RTIgLyogU2NvcGVD
aGFpbk1hcmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NvcGVDaGFpbk1h
cmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U0RUU3MDgwRUJCNzk2MzAwNTkz
NEFBIC8qIFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFNEVFNzBF
MEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNjUzLDYgKzE2NTcsOCBAQAogCQkJCTE0QjNFRjA0MTJCQzI0REQwMEQy
OUVGRiAvKiBQYWdlQmxvY2suY3BwICovLAogCQkJCTE0QjNFRjAzMTJCQzI0REQwMEQyOUVGRiAv
KiBQYWdlQmxvY2suaCAqLywKIAkJCQk4NjkwMjMxNDEyMDkyRDVDMDA2MzBBRjkgLyogUGFnZVJl
c2VydmF0aW9uLmggKi8sCisJCQkJNzkwNkU0M0IxMzRDQkZENDAwMTc1RjE5IC8qIFBhcmFsbGVs
Sm9icy5jcHAgKi8sCisJCQkJNzkwNkU0M0MxMzRDQkZENDAwMTc1RjE5IC8qIFBhcmFsbGVsSm9i
cy5oICovLAogCQkJCUJDRkJFNjk1MTIyNTYwRTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIu
aCAqLywKIAkJCQk0NERENDg1MjBGQUVBODUwMDBENkI0RUIgLyogUGFzc093blB0ci5oICovLAog
CQkJCTY1ODBGNzk1MDk0MDcwNTYwMDgyQzIxOSAvKiBQYXNzUmVmUHRyLmggKi8sCkBAIC0yNTUz
LDYgKzI1NTksNyBAQAogCQkJCTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVC
b2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQ0E0RjExMzJFQUE2RDAwMkIyQUQ3IC8qIERG
R0FsaWFzVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzkwNkU0M0UxMzRDQkZENDAwMTc1
RjE5IC8qIFBhcmFsbGVsSm9icy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMDAwLDYgKzMwMDcsNyBA
QAogCQkJCTg2RUM5RENEMTMyOERGODIwMDJCMkFENyAvKiBERkdOb25TcGVjdWxhdGl2ZUpJVC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3Bl
cmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOUREMjEzMjhERjgyMDAyQjJBRDcg
LyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzkwNkU0M0QxMzRD
QkZENDAwMTc1RjE5IC8qIFBhcmFsbGVsSm9icy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDkxYjY5NDQuLmZhODE3ZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtNTcsNiArNTcsNyBA
QCBTRVQoV1RGX0hFQURFUlMKICAgICBQYXNzT3duQXJyYXlQdHIuaAogICAgIFBhc3NPd25QdHIu
aAogICAgIFBhc3NSZWZQdHIuaAorICAgIFBhcmFsbGVsSm9icy5oCiAgICAgUGxhdGZvcm0uaAog
ICAgIFBvc3NpYmx5TnVsbC5oCiAgICAgUmFuZG9tTnVtYmVyLmgKQEAgLTExOCw2ICsxMTksNyBA
QCBTRVQoV1RGX1NPVVJDRVMKICAgICBNYWluVGhyZWFkLmNwcAogICAgIE1ENS5jcHAKICAgICBP
U1JhbmRvbVNvdXJjZS5jcHAKKyAgICBQYXJhbGxlbEpvYnMuY3BwCiAgICAgUmFuZG9tTnVtYmVy
LmNwcAogICAgIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKICAgICBTSEExLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQzNzBlZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5jcHAKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lU
WSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShQQVJBTExFTF9KT0JT
KQorCisjaW5jbHVkZSAiUGFyYWxsZWxKb2JzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCisjaWYg
IUVOQUJMRShPUEVOTVApCisKK1ZlY3RvcjwgUmVmUHRyPFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRo
cmVhZFByaXZhdGU+ID4qIFBhcmFsbGVsRW52aXJvbm1lbnQ6OnNfdGhyZWFkUG9vbCA9IDA7CisK
K2Jvb2wgUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6dHJ5TG9ja0ZvcihQYXJh
bGxlbEVudmlyb25tZW50KiBwYXJlbnQpCit7CisgICAgYm9vbCBsb2NrZWQgPSBtX211dGV4LnRy
eUxvY2soKTsKKworICAgIGlmICghbG9ja2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAobV9wYXJlbnQpIHsKKyAgICAgICAgbV9tdXRleC51bmxvY2soKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV90aHJlYWRJRCkKKyAgICAgICAgbV90aHJl
YWRJRCA9IGNyZWF0ZVRocmVhZCgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6
d29ya2VyVGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CisKKyAgICBpZiAobV90aHJl
YWRJRCkKKyAgICAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7CisKKyAgICBtX211dGV4LnVubG9jaygp
OworICAgIHJldHVybiBtX3RocmVhZElEOworfQorCit2b2lkIFBhcmFsbGVsRW52aXJvbm1lbnQ6
OlRocmVhZFByaXZhdGU6OmV4ZWN1dGVKb2IoVGhyZWFkRnVuY3Rpb24gdGhyZWFkRnVuY3Rpb24s
IHZvaWQqIHBhcmFtZXRlcnMpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKwor
ICAgIG1fdGhyZWFkRnVuY3Rpb24gPSB0aHJlYWRGdW5jdGlvbjsKKyAgICBtX3BhcmFtZXRlcnMg
PSBwYXJhbWV0ZXJzOworICAgIG1fcnVubmluZyA9IHRydWU7CisgICAgbV90aHJlYWRDb25kaXRp
b24uc2lnbmFsKCk7Cit9CisKK3ZvaWQgUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0
ZTo6d2FpdEZvckZpbmlzaCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKwor
ICAgIHdoaWxlIChtX3J1bm5pbmcpCisgICAgICAgIG1fdGhyZWFkQ29uZGl0aW9uLndhaXQobV9t
dXRleCk7Cit9CisKK3ZvaWQqIFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6Ondv
cmtlclRocmVhZCh2b2lkKiB0aHJlYWREYXRhKQoreworICAgIFRocmVhZFByaXZhdGUqIHNoYXJl
ZFRocmVhZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGhyZWFkUHJpdmF0ZSo+KHRocmVhZERhdGEpOwor
ICAgIE11dGV4TG9ja2VyIGxvY2soc2hhcmVkVGhyZWFkLT5tX211dGV4KTsKKworICAgIHdoaWxl
IChzaGFyZWRUaHJlYWQtPm1fdGhyZWFkSUQpIHsKKyAgICAgICAgaWYgKHNoYXJlZFRocmVhZC0+
bV9ydW5uaW5nKSB7CisgICAgICAgICAgICAoKnNoYXJlZFRocmVhZC0+bV90aHJlYWRGdW5jdGlv
bikoc2hhcmVkVGhyZWFkLT5tX3BhcmFtZXRlcnMpOworICAgICAgICAgICAgc2hhcmVkVGhyZWFk
LT5tX3J1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIHNoYXJlZFRocmVhZC0+bV9wYXJlbnQg
PSAwOworICAgICAgICAgICAgc2hhcmVkVGhyZWFkLT5tX3RocmVhZENvbmRpdGlvbi5zaWduYWwo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHNoYXJlZFRocmVhZC0+bV90aHJlYWRDb25kaXRpb24u
d2FpdChzaGFyZWRUaHJlYWQtPm1fbXV0ZXgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwor
I2VuZGlmIC8vICAhRU5BQkxFKE9QRU5NUCkKKworCitQYXJhbGxlbEVudmlyb25tZW50OjpQYXJh
bGxlbEVudmlyb25tZW50KFRocmVhZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCBzaXplX3Qgc2l6
ZU9mUGFyYW1ldGVyLCBpbnQgcmVxdWVzdGVkSm9iTnVtYmVyKQorICAgIDogbV90aHJlYWRGdW5j
dGlvbih0aHJlYWRGdW5jdGlvbikKK3sKKyAgICBpbnQgbWF4TnVtYmVyT2ZUaHJlYWRzOworCisj
aWYgRU5BQkxFKE9QRU5NUCkKKyAgICBtYXhOdW1iZXJPZlRocmVhZHMgPSBvbXBfZ2V0X21heF90
aHJlYWRzKCk7CisjZWxzZQorICAgIG1heE51bWJlck9mVGhyZWFkcyA9IG1heFBhcmFsbGVsVGhy
ZWFkczsKKyNlbmRpZgorCisgICAgaWYgKCFyZXF1ZXN0ZWRKb2JOdW1iZXIgfHwgcmVxdWVzdGVk
Sm9iTnVtYmVyID4gbWF4TnVtYmVyT2ZUaHJlYWRzKQorICAgICAgICByZXF1ZXN0ZWRKb2JOdW1i
ZXIgPSBtYXhOdW1iZXJPZlRocmVhZHM7CisKKyNpZiBFTkFCTEUoT1BFTk1QKQorICAgIEFTU0VS
VChyZXF1ZXN0ZWRKb2JOdW1iZXIgPiAwKTsKKyAgICBtX251bWJlck9mSm9icyA9IHJlcXVlc3Rl
ZEpvYk51bWJlcjsKKyNlbHNlCisgICAgaWYgKCFzX3RocmVhZFBvb2wpCisgICAgICAgIHNfdGhy
ZWFkUG9vbCA9IG5ldyBWZWN0b3I8IFJlZlB0cjxUaHJlYWRQcml2YXRlPiA+KCk7CisKKyAgICAv
LyBUaGUgbWFpbiB0aHJlYWQgc2hvdWxkIGJlIGFsc28gYSB3b3JrZXIuCisgICAgaW50IG1heE5l
d1RocmVhZHMgPSByZXF1ZXN0ZWRKb2JOdW1iZXIgLSAxOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtYXhOdW1iZXJPZlRocmVhZHMgJiYgbV90aHJlYWRzLnNpemUoKSA8IG1heE5ld1RocmVh
ZHM7ICsraSkgeworICAgICAgICBpZiAoc190aHJlYWRQb29sLT5zaXplKCkgPCBpICsgMSkKKyAg
ICAgICAgICAgIHNfdGhyZWFkUG9vbC0+YXBwZW5kKFRocmVhZFByaXZhdGU6OmNyZWF0ZSgpKTsK
KworICAgICAgICBpZiAoKCpzX3RocmVhZFBvb2wpW2ldLT50cnlMb2NrRm9yKHRoaXMpKQorICAg
ICAgICAgICAgbV90aHJlYWRzLmFwcGVuZCgoKnNfdGhyZWFkUG9vbClbaV0pOworICAgIH0KKwor
ICAgIG1fbnVtYmVyT2ZKb2JzID0gbV90aHJlYWRzLnNpemUoKSArIDE7CisjZW5kaWYKKworICAg
IG1fcGFyYW1ldGVycyA9IEJ5dGVBcnJheTo6Y3JlYXRlKHNpemVPZlBhcmFtZXRlciAqIG1fbnVt
YmVyT2ZKb2JzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
UEFSQUxMRUxfSk9CUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFy
YWxsZWxKb2JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZjMwYTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5oCkBAIC0wLDAgKzEs
MTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhcmFsbGVsSm9ic19oCisjZGVmaW5l
IFBhcmFsbGVsSm9ic19oCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiQnl0
ZUFycmF5LmgiCisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKwor
Ly8gVXNhZ2U6CisvLworLy8gI2lmIEVOQUJMRShQQVJBTExFTF9KT0JTKQorLy8KKy8vICAgICAv
LyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKKy8vICAgICBQYXJhbGxlbEpvYnM8VHlwZU9mUGFy
YW1ldGVyPiBwYXJhbGxlbEpvYnMoJndvcmtlciBbLCByZXF1ZXN0ZWROdW1iZXJPZkpvYnNdKTsK
Ky8vCisvLyAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5CisvLyAgICAgaW50IGkgPSBw
YXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisvLyAgICAgZm9yKDsgaSA+IDA7IC0taSkgewor
Ly8gICAgICAgVHlwZU9mUGFyYW1ldGVyKiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVy
Rm9ySm9iKGkpOworLy8gICAgICAgcGFyYW1zLT5hdHRyMSA9IGxvY2FsVmFycyAuLi4KKy8vICAg
ICAgIC4uLgorLy8gICAgIH0KKy8vCisvLyAgICAgLy8gRXhlY3V0ZSBwYXJhbGxlbCBqb2JzCisv
LyAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGVKb2JzKCk7CisvLworLy8gI2Vsc2UKKy8vCisvLyAg
ICAgaW5saW5lRnVuY3Rpb24oYXJncy4uLik7CisvLworLy8gI2VuZGlmIC8vIEVOQUJMRShQQVJB
TExFTF9KT0JTKQorCisKKyNpZiBFTkFCTEUoT1BFTk1QKQorI2luY2x1ZGUgPG9tcC5oPgorI2Vs
c2UKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7
CisKKyNpZiAhRU5BQkxFKE9QRU5NUCkKK3N0YXRpYyBjb25zdCBpbnQgbWF4UGFyYWxsZWxUaHJl
YWRzID0gMjsKKyNlbmRpZgorCitjbGFzcyBQYXJhbGxlbEVudmlyb25tZW50IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQYXJhbGxlbEVudmlyb25tZW50KTsKK3Byb3RlY3RlZDoKKyAgICB0
eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9pZCopOworCisgICAgUGFyYWxsZWxFbnZp
cm9ubWVudChUaHJlYWRGdW5jdGlvbiwgc2l6ZV90LCBpbnQpOworCisgICAgVGhyZWFkRnVuY3Rp
b24gbV90aHJlYWRGdW5jdGlvbjsKKyAgICBpbnQgbV9udW1iZXJPZkpvYnM7CisgICAgUmVmUHRy
PEJ5dGVBcnJheT4gbV9wYXJhbWV0ZXJzOworCisjaWYgIUVOQUJMRShPUEVOTVApCisgICAgY2xh
c3MgVGhyZWFkUHJpdmF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRocmVhZFByaXZhdGU+IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFRocmVhZFByaXZhdGUoKQorICAgICAgICAgICAgOiBtX3RocmVh
ZElEKDApCisgICAgICAgICAgICAsIG1fcnVubmluZyhmYWxzZSkKKyAgICAgICAgICAgICwgbV9w
YXJlbnQoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlMb2NrRm9y
KFBhcmFsbGVsRW52aXJvbm1lbnQqKTsKKworICAgICAgICB2b2lkIGV4ZWN1dGVKb2IoVGhyZWFk
RnVuY3Rpb24sIHZvaWQqKTsKKworICAgICAgICB2b2lkIHdhaXRGb3JGaW5pc2goKTsKKworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRQcml2YXRlPiBjcmVhdGUoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZFByaXZhdGUoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCogd29ya2VyVGhyZWFkKHZvaWQqKTsKKworICAg
IHByaXZhdGU6CisgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICAgICAg
Ym9vbCBtX3J1bm5pbmc7CisgICAgICAgIFBhcmFsbGVsRW52aXJvbm1lbnQqIG1fcGFyZW50Owor
CisgICAgICAgIG11dGFibGUgTXV0ZXggbV9tdXRleDsKKyAgICAgICAgVGhyZWFkQ29uZGl0aW9u
IG1fdGhyZWFkQ29uZGl0aW9uOworCisgICAgICAgIFRocmVhZEZ1bmN0aW9uIG1fdGhyZWFkRnVu
Y3Rpb247CisgICAgICAgIHZvaWQqIG1fcGFyYW1ldGVyczsKKyAgICB9OworCisgICAgVmVjdG9y
PCBSZWZQdHI8VGhyZWFkUHJpdmF0ZT4gPiBtX3RocmVhZHM7CisgICAgc3RhdGljIFZlY3Rvcjwg
UmVmUHRyPFRocmVhZFByaXZhdGU+ID4qIHNfdGhyZWFkUG9vbDsKKyNlbmRpZgorCit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorY2xhc3MgUGFyYWxsZWxKb2JzIDogcHVibGljIFBhcmFs
bGVsRW52aXJvbm1lbnQgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoKldvcmtlckZ1bmN0
aW9uKShUeXBlKik7CisKKyAgICBQYXJhbGxlbEpvYnMoV29ya2VyRnVuY3Rpb24gZnVuYywgaW50
IHJlcXVlc3RlZEpvYk51bWJlciA9IDApIDoKKyAgICAgICAgUGFyYWxsZWxFbnZpcm9ubWVudChy
ZWludGVycHJldF9jYXN0PFRocmVhZEZ1bmN0aW9uPihmdW5jKSwgc2l6ZW9mKFR5cGUpLCByZXF1
ZXN0ZWRKb2JOdW1iZXIpCisgICAgeworICAgIH0KKworICAgIGludCBudW1iZXJPZkpvYnMoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyT2ZKb2JzOworICAgIH0KKworICAgIFR5cGUq
IHBhcmFtZXRlckZvckpvYihpbnQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChudW1iZXJPZkpv
YnMoKSA+PSBpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZSo+KG1fcGFy
YW1ldGVycy0+ZGF0YSgpKSArIChpIC0gMSk7CisgICAgfQorCisgICAgdm9pZCBleGVjdXRlSm9i
cygpCisgICAgeworI2lmIEVOQUJMRShPUEVOTVApCisgICAgICAgIG9tcF9zZXRfbnVtX3RocmVh
ZHMobV9udW1iZXJPZkpvYnMpOworCisgICAgICAgICNwcmFnbWEgb21wIHBhcmFsbGVsIGZvcgor
ICAgICAgICBmb3IgKGludCBpID0gbV9udW1iZXJPZkpvYnM7IGkgPiAwOyAtLWkpCisgICAgICAg
ICAgICAoKm1fdGhyZWFkRnVuY3Rpb24pKHBhcmFtZXRlckZvckpvYihpKSk7CisjZWxzZQorICAg
ICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gbV90aHJlYWRzLnNpemUoKSAtIDE7IGkgPj0g
MDsgLS1pKQorICAgICAgICAgICAgbV90aHJlYWRzW2ldLT5leGVjdXRlSm9iKG1fdGhyZWFkRnVu
Y3Rpb24sIHBhcmFtZXRlckZvckpvYihpICsgMSkpOworCisgICAgICAgIC8vIFRoZSB3b3JrIGZv
ciB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgKCptX3RocmVhZEZ1bmN0aW9uKShwYXJhbWV0ZXJG
b3JKb2IobV90aHJlYWRzLnNpemUoKSArIDEpKTsKKworICAgICAgICBmb3IgKGkgPSBtX3RocmVh
ZHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCisgICAgICAgICAgICBtX3RocmVhZHNbaV0tPndh
aXRGb3JGaW5pc2goKTsKKyNlbmRpZgorICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgor
Cit1c2luZyBXVEY6OlBhcmFsbGVsSm9iczsKKworI2VuZGlmIC8vIEVOQUJMRShQQVJBTExFTF9K
T0JTKQorCisjZW5kaWYgLy8gUGFyYWxsZWxKb2JzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxh
dGZvcm0uaAppbmRleCBlNDBiMWE2Li5kOTM0ODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
bGF0Zm9ybS5oCkBAIC0xMTg2LDYgKzExODYsMTQgQEAKICNkZWZpbmUgRU5BQkxFX0JSQU5DSF9D
T01QQUNUSU9OIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxFX09QRU5NUCkgJiYgZGVm
aW5lZChfT1BFTk1QKQorI2RlZmluZSBFTkFCTEVfT1BFTk1QIDEKKyNlbmRpZgorCisjaWYgIWRl
ZmluZWQoRU5BQkxFX1BBUkFMTEVMX0pPQlMpICYmICFFTkFCTEUoU0lOR0xFX1RIUkVBREVEKSAm
JiBFTkFCTEUoT1BFTk1QKQorI2RlZmluZSBFTkFCTEVfUEFSQUxMRUxfSk9CUyAxCisjZW5kaWYK
KwogI2lmIEVOQUJMRShHTElCX1NVUFBPUlQpCiAjaW5jbHVkZSAiR1R5cGVkZWZzLmgiCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQppbmRleCA1ZjE1ZWIwLi41OWEyY2M4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCkBAIC0yMSw2ICsyMSw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIHd0Zi9xdC9UaHJlYWRpbmdRdC5jcHAgXAogICAgIHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWdu
ZWQuY3BwIFwKICAgICB3dGYvUGFnZUJsb2NrLmNwcCBcCisgICAgd3RmL1BhcmFsbGVsSm9icy5j
cHAgXAogICAgIHd0Zi9SYW5kb21OdW1iZXIuY3BwIFwKICAgICB3dGYvUmVmQ291bnRlZExlYWtD
b3VudGVyLmNwcCBcCiAgICAgd3RmL1NIQTEuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNDE4YTM0Li5l
N2EwNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDQtMDcgIEdhYm9yIExv
a2kgIDxsb2tpQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3BlZWRpbmcgdXAgU1ZHIGZpbHRlcnMgd2l0aCBtdWx0aWNvcmUgKFNN
UCkgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDM5MDMKKworICAgICAgICBTb21lIFNWRyBmaWx0ZXJzIGV4ZWN1dGUgYSBodWdlIG51bWJl
ciBvZiBwaXhlbCBtYW5pcHVsYXRpb25zLCB3aGljaAorICAgICAgICBjYW5ub3QgYmUgc3BlZCB1
cCBieSBncmFwaGljcyBhY2NlbGVyYXRvcnMsIHNpbmNlIHRoZWlyIGFsZ29yaXRobSBpcworICAg
ICAgICB0b28gY29tcGxleC4gVXNpbmcgdGhlIHBvd2VyIG9mIFN5bW1ldHJpYyBNdWx0aSBQcm9j
ZXNzaW5nIChTTVApIHdlCisgICAgICAgIGNhbiBzcGxpdCB1cCBhIHRhc2sgdG8gc21hbGxlciAo
ZGF0YSBpbmRlcGVuZGVudCkgdGFza3MsIHdoaWNoIGNhbiBiZQorICAgICAgICBleGVjdXRlZCBp
bmRlcGVuZGVudGx5LgorCisgICAgICAgIFRoZSBQYXJhbGxlbEpvYnMgZnJhbWV3b3JrIHByb3Zp
ZGVzIGEgc2ltcGxlIHdheSBmb3IgZGlzdHJpYnV0ZWQKKyAgICAgICAgcHJvZ3JhbW1pbmcuIFRo
ZSBmcmFtZXdvcmsgaXMgYmFzZWQgb24gV2ViS2l0J3MgdGhyZWFkaW5nIGluZnJhc3RydWN0dXJl
CisgICAgICAgIGFuZCBPcGVuIE11bHRpLVByb2Nlc3NpbmcncyAoT3Blbk1QKSBBUEkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6bm9pc2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuaDoKKwogMjAxMS0wNC0wNyAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1BhcmFsbGVsSm9icy5o
IGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1BhcmFsbGVsSm9icy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNjRlOTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvUGFyYWxsZWxKb2JzLmgK
QEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1BhcmFsbGVsSm9ic19oCisjZGVm
aW5lIFdlYkNvcmVfRldEX1BhcmFsbGVsSm9ic19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
UGFyYWxsZWxKb2JzLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAppbmRleCA2MzA2MGUxLi4y
ZjA2OWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMzIsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE1Miw3ICsxNTQsNiBAQCBGRVR1cmJ1bGVuY2U6OlBhaW50
aW5nRGF0YTo6UGFpbnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBw
YWludAogICAgICwgaGVpZ2h0KDApCiAgICAgLCB3cmFwWCgwKQogICAgICwgd3JhcFkoMCkKLSAg
ICAsIGNoYW5uZWwoMCkKICAgICAsIGZpbHRlclNpemUocGFpbnRpbmdTaXplKQogewogfQpAQCAt
MjI0LDcgKzIyNSw3IEBAIGlubGluZSB2b2lkIGNoZWNrTm9pc2UoaW50JiBub2lzZVZhbHVlLCBp
bnQgbGltaXRWYWx1ZSwgaW50IG5ld1ZhbHVlKQogICAgICAgICBub2lzZVZhbHVlIC09IG5ld1Zh
bHVlIC0gMTsKIH0KIAotZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikKK2Zsb2F0IEZFVHVy
YnVsZW5jZTo6bm9pc2UyRChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQogewogICAgIHN0cnVjdCBOb2lzZSB7CiAg
ICAgICAgIGludCBub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlOwpAQCAtMjU5LDIzICsyNjAsMjMg
QEAgZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVYKIAogICAgIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZy
b20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1
cmJ1bGVuY2VFbGVtZW50LgogICAgIGludCB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07Ci0g
ICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07
CisgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVt0ZW1wXTsKICAgICB1ID0g
bm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVswXSArIG5vaXNlWS5ub2lzZVBv
c2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMV07CiAgICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdl
clZhbHVlXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFu
bmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3RlbXBd
OwogICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzBd
ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVsxXTsKICAgICBhID0gbGlu
ZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CiAgICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWUgKyAxXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFu
bmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3RlbXBd
OwogICAgIHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzBdICsgKG5v
aXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVsxXTsKICAgICB0ZW1wID0g
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5v
aXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdy
YWRpZW50W2NoYW5uZWxdW3RlbXBdOwogICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFj
dGlvblZhbHVlIC0gMSkgKiBxWzBdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1
ZSAtIDEpICogcVsxXTsKICAgICBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CiAg
ICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOwogfQogCi11bnNpZ25lZCBj
aGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordW5zaWduZWQg
Y2hhciBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBj
aGFubmVsLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpCiB7CiAgICAgZmxvYXQgdGlsZVdpZHRoID0gcGFpbnRpbmdEYXRhLmZpbHRlclNpemUud2lk
dGgoKTsKICAgICBBU1NFUlQodGlsZVdpZHRoID4gMCk7CkBAIC0zMTMsOSArMzE0LDkgQEAgdW5z
aWduZWQgY2hhciBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
KFBhaW50aW5nRGF0YSYgcGFpbnQKICAgICBmbG9hdCByYXRpbyA9IDE7CiAgICAgZm9yIChpbnQg
b2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewogICAgICAgICBp
ZiAobV90eXBlID09IEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSkKLSAgICAgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgbm9pc2VW
ZWN0b3IpIC8gcmF0aW87CisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0g
bm9pc2UyRChjaGFubmVsLCBwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gZmFic2Yo
bm9pc2UyRChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSkgLyByYXRpbzsKKyAgICAgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBmYWJzZihub2lzZTJEKGNoYW5uZWwsIHBhaW50
aW5nRGF0YSwgbm9pc2VWZWN0b3IpKSAvIHJhdGlvOwogICAgICAgICBub2lzZVZlY3Rvci5zZXRY
KG5vaXNlVmVjdG9yLngoKSAqIDIpOwogICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVj
dG9yLnkoKSAqIDIpOwogICAgICAgICByYXRpbyAqPSAyOwpAQCAtMzM4LDYgKzMzOSwzMSBAQCB1
bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9p
bnQoUGFpbnRpbmdEYXRhJiBwYWludAogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPih0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpOwogfQogCitpbmxpbmUgdm9pZCBG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oQnl0ZUFycmF5KiBwaXhlbEFycmF5LCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7CisgICAgSW50UmVjdCBm
aWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIEludFBvaW50IHBvaW50KDAs
IGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOworICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVs
ID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOworICAgIGludCBjaGFubmVs
OworCisgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgeworICAgICAgICBw
b2ludC5zZXRZKHBvaW50LnkoKSArIDEpOworICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lv
bi54KCkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGZpbHRlclJlZ2lvbi53aWR0aCgp
OyArK3gpIHsKKyAgICAgICAgICAgIHBvaW50LnNldFgocG9pbnQueCgpICsgMSk7CisgICAgICAg
ICAgICBmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsLCArK2luZGV4T2ZQ
aXhlbENoYW5uZWwpCisgICAgICAgICAgICAgICAgcGl4ZWxBcnJheS0+c2V0KGluZGV4T2ZQaXhl
bENoYW5uZWwsIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNoYW5uZWwsIHBhaW50
aW5nRGF0YSwgZmlsdGVyKCktPm1hcEFic29sdXRlUG9pbnRUb0xvY2FsUG9pbnQocG9pbnQpKSk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKK3ZvaWQg
RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzKQoreworICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbihwYXJhbWV0ZXJz
LT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGFy
dFksIHBhcmFtZXRlcnMtPmVuZFkpOworfQorI2VuZGlmIC8vIEVOQUJMRShQQVJBTExFTF9KT0JT
KQorCiB2b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHkoKQogewogICAgIGlmIChoYXNSZXN1bHQoKSkK
QEAgLTM1MiwxOSArMzc4LDQyIEBAIHZvaWQgRkVUdXJidWxlbmNlOjphcHBseSgpCiAgICAgUGFp
bnRpbmdEYXRhIHBhaW50aW5nRGF0YShtX3NlZWQsIHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpLnNpemUoKSkpOwogICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOwog
Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
RmxvYXRQb2ludCBwb2ludDsKLSAgICBwb2ludC5zZXRZKGZpbHRlclJlZ2lvbi55KCkpOwotICAg
IGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0gMDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGFi
c29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBwb2ludC5zZXRZKHBv
aW50LnkoKSArIDEpOwotICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwotICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKTsgKyt4
KSB7Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAg
Zm9yIChwYWludGluZ0RhdGEuY2hhbm5lbCA9IDA7IHBhaW50aW5nRGF0YS5jaGFubmVsIDwgNDsg
KytwYWludGluZ0RhdGEuY2hhbm5lbCwgKytpbmRleE9mUGl4ZWxDaGFubmVsKQotICAgICAgICAg
ICAgICAgIHBpeGVsQXJyYXktPnNldChpbmRleE9mUGl4ZWxDaGFubmVsLCBjYWxjdWxhdGVUdXJi
dWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIGZpbHRlcigpLT5tYXBBYnNvbHV0ZVBv
aW50VG9Mb2NhbFBvaW50KHBvaW50KSkpOworI2lmIEVOQUJMRShQQVJBTExFTF9KT0JTKQorCisg
ICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAoYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgp
ICogYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSkgLyBzX21pbmltYWxSZWN0RGltZW5zaW9u
OworICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAgICAgICAvLyBJbml0aWFs
aXplIHBhcmFsbGVsIGpvYnMKKyAgICAgICAgUGFyYWxsZWxKb2JzPEZpbGxSZWdpb25QYXJhbWV0
ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtl
ciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVy
IGFycmF5CisgICAgICAgIGludCBpID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAg
ICAgICBpZiAoaSA+IDEpIHsKKyAgICAgICAgICAgIGludCBzdGFydFkgPSAwOworICAgICAgICAg
ICAgaW50IHN0ZXBZID0gYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSAvIGk7CisgICAgICAg
ICAgICBmb3IgKDsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJh
bWV0ZXJzKiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyRm9ySm9iKGkpOworICAgICAg
ICAgICAgICAgIHBhcmFtcy0+ZmlsdGVyID0gdGhpczsKKyAgICAgICAgICAgICAgICBwYXJhbXMt
PnBpeGVsQXJyYXkgPSBwaXhlbEFycmF5OworICAgICAgICAgICAgICAgIHBhcmFtcy0+cGFpbnRp
bmdEYXRhID0gJnBhaW50aW5nRGF0YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnN0YXJ0WSA9
IHN0YXJ0WTsKKyAgICAgICAgICAgICAgICBpZiAoaSAhPSAxKSB7CisgICAgICAgICAgICAgICAg
ICAgIHBhcmFtcy0+ZW5kWSA9IHN0YXJ0WSArIHN0ZXBZOworICAgICAgICAgICAgICAgICAgICBz
dGFydFkgPSBzdGFydFkgKyBzdGVwWTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLT5lbmRZID0gYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRXhlY3V0ZSBwYXJhbGxlbCBqb2JzCisg
ICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZUpvYnMoKTsKKworICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQorICAgIC8vIEZhbGxiYWNrIHRvIHNlcXVlbnRpYWwgbW9k
ZSBpZiB0aGVyZSBpcyBubyByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEg
aXMgdG9vIHNtYWxsCisKKyNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKworICAgIGZp
bGxSZWdpb24ocGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCAwLCBhYnNvbHV0ZVBhaW50UmVjdCgp
LmhlaWdodCgpKTsKIH0KIAogdm9pZCBGRVR1cmJ1bGVuY2U6OmR1bXAoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgK
aW5kZXggZGZlYjIyMC4uMDQ2NjJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC01OCw2ICs1OCwxMCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBzdGl0Y2hUaWxlcygpIGNvbnN0OwogICAgIGJvb2wgc2V0U3Rp
dGNoVGlsZXMoYm9vbCk7CiAKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKyAgICBzdGF0aWMg
dm9pZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lk
IGFwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKICAgICAKQEAgLTY4LDYgKzcyLDkg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tTaXplID0g
MjU2OwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja01hc2sgPSBzX2Jsb2NrU2l6ZSAtIDE7
CisjaWYgRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisgICAgc3RhdGljIGNvbnN0IGludCBzX21pbmlt
YWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZv
ciBwYXJhbGxlbCBqb2JzCisjZW5kaWYKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewogICAg
ICAgICBsb25nIHNlZWQ7CkBAIC03NywxOCArODQsMzMgQEAgcHJpdmF0ZToKICAgICAgICAgaW50
IGhlaWdodDsKICAgICAgICAgaW50IHdyYXBYOyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCiAg
ICAgICAgIGludCB3cmFwWTsKLSAgICAgICAgaW50IGNoYW5uZWw7CiAgICAgICAgIEludFNpemUg
ZmlsdGVyU2l6ZTsKIAogICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNv
bnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSk7CiAgICAgICAgIGlubGluZSBsb25nIHJhbmRvbSgp
OwogICAgIH07CiAKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPgorICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7CisKKyAgICBzdHJ1Y3Qg
RmlsbFJlZ2lvblBhcmFtZXRlcnMgeworICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsKKyAg
ICAgICAgQnl0ZUFycmF5KiBwaXhlbEFycmF5OworICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50
aW5nRGF0YTsKKyAgICAgICAgaW50IHN0YXJ0WTsKKyAgICAgICAgaW50IGVuZFk7CisgICAgfTsK
KworICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMq
KTsKKyNlbmRpZgorCiAgICAgRkVUdXJidWxlbmNlKEZpbHRlciosIFR1cmJ1bGVuY2VUeXBlLCBm
bG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOwogCiAgICAgaW5saW5lIHZvaWQgaW5pdFBh
aW50KFBhaW50aW5nRGF0YSYpOwotICAgIGZsb2F0IG5vaXNlMkQoUGFpbnRpbmdEYXRhJiwgY29u
c3QgRmxvYXRQb2ludCYpOwotICAgIHVuc2lnbmVkIGNoYXIgY2FsY3VsYXRlVHVyYnVsZW5jZVZh
bHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIGZsb2F0
IG5vaXNlMkQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsK
KyAgICB1bnNpZ25lZCBjaGFyIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBj
aGFubmVsLCBQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgaW5saW5lIHZv
aWQgZmlsbFJlZ2lvbihCeXRlQXJyYXkqLCBQYWludGluZ0RhdGEmLCBpbnQsIGludCk7CiAKICAg
ICBUdXJidWxlbmNlVHlwZSBtX3R5cGU7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKLS0g
CjEuNi41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89166</attachid>
            <date>2011-04-12 00:41:58 -0700</date>
            <delta_ts>2011-04-12 06:26:06 -0700</delta_ts>
            <desc>Speeding up FETurbulence with SMP</desc>
            <filename>0001-Speeding-up-SVG-filters-with-multicore-SMP-support-CLRF.patch</filename>
            <type>text/plain</type>
            <size>42757</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSBhY2Q0MzJhOThjYjFlNTQ2MDcyNmFjYzdmNDE0ZTBmNGRiMjE0NDk2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogTW9uLCAxMSBBcHIgMjAxMSAxMzoxMDowMCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFNwZWVk
aW5nIHVwIFNWRyBmaWx0ZXJzIHdpdGggbXVsdGljb3JlIChTTVApIHN1cHBvcnQKClNpZ25lZC1v
ZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwgICAzMiArKysrKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgfCAgICA1ICsK
IC4uLi9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogICAgICAgICAgIHwgICAy
MCArKysKIC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAg
IHwgICAyMCArKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQgICAg
ICAgICAgIHwgICAgNSArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5o
ICAgICAgICAgICB8ICAxMTEgKysrKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwICB8ICAgOTggKysrKysrKysrKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmggICAgfCAgMTQ0ICsrKysr
KysrKysrKysrKysrKysrCiAuLi4vSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0xpYmRp
c3BhdGNoLmggICB8ICAgOTAgKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BhcmFsbGVsSm9ic09wZW5NUC5oICAgICB8ICAgODkgKysrKysrKysrKysrCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggICAgICAgICAgICAgICB8ICAgIDggKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiAr
KysrCiAuLi4vV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvUGFyYWxsZWxKb2JzLmggICB8
ICAgIDQgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCAg
ICAgfCAgIDg5ICsrKysrKysrKystLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5oICAgICAgIHwgICAyOCArKysrLQogMTYgZmlsZXMgY2hhbmdlZCwgNzQ3IGlu
c2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9i
c0xpYmRpc3BhdGNoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1BhcmFsbGVsSm9ic09wZW5NUC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1BhcmFsbGVsSm9icy5oCgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKaW5kZXggNTY5YzlkMi4uMDk2NGI5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTEtMDQtMTEgIEdhYm9yIExva2kgIDxsb2tpQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlZWRp
bmcgdXAgU1ZHIGZpbHRlcnMgd2l0aCBtdWx0aWNvcmUgKFNNUCkgc3VwcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5MDMKKworICAgICAgICBT
b21lIFNWRyBmaWx0ZXJzIGV4ZWN1dGUgYSBodWdlIG51bWJlciBvZiBwaXhlbCBtYW5pcHVsYXRp
b25zLCB3aGljaAorICAgICAgICBjYW5ub3QgYmUgc3BlZCB1cCBieSBncmFwaGljcyBhY2NlbGVy
YXRvcnMsIHNpbmNlIHRoZWlyIGFsZ29yaXRobSBpcworICAgICAgICB0b28gY29tcGxleC4gVXNp
bmcgdGhlIHBvd2VyIG9mIFN5bW1ldHJpYyBNdWx0aSBQcm9jZXNzaW5nIChTTVApIHdlCisgICAg
ICAgIGNhbiBzcGxpdCB1cCBhIHRhc2sgdG8gc21hbGxlciAoZGF0YSBpbmRlcGVuZGVudCkgdGFz
a3MsIHdoaWNoIGNhbiBiZQorICAgICAgICBleGVjdXRlZCBpbmRlcGVuZGVudGx5LgorCisgICAg
ICAgIFRoZSBQYXJhbGxlbEpvYnMgZnJhbWV3b3JrIHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3Ig
ZGlzdHJpYnV0ZWQKKyAgICAgICAgcHJvZ3JhbW1pbmcuIFRoZSBmcmFtZXdvcmsgaXMgYmFzZWQg
b24gV2ViS2l0J3MgdGhyZWFkaW5nIGluZnJhc3RydWN0dXJlLAorICAgICAgICBPcGVuIE11bHRp
LVByb2Nlc3NpbmcncyAoT3Blbk1QKSBBUEksIGFuZCBsaWJkaXNwYXRjaCBBUEkuCisKKyAgICAg
ICAgKiB3dGYvUGFyYWxsZWxKb2JzLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlBhcmFsbGVs
Sm9iczo6VGhyZWFkUHJpdmF0ZTo6dHJ5TG9ja0Zvcik6CisgICAgICAgIChXVEY6OlBhcmFsbGVs
Sm9iczo6VGhyZWFkUHJpdmF0ZTo6ZXhlY3V0ZUpvYik6CisgICAgICAgIChXVEY6OlBhcmFsbGVs
Sm9iczo6VGhyZWFkUHJpdmF0ZTo6d2FpdEZvckZpbmlzaCk6CisgICAgICAgIChXVEY6OlBhcmFs
bGVsSm9iczo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdURjo6UGFy
YWxsZWxKb2JzOjpQYXJhbGxlbEpvYnMpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEpvYnM6OmV4
ZWN1dGVKb2JzKToKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzLmg6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpQYXJhbGxlbEpvYnM6Om51bWJlck9mSm9icyk6CisgICAgICAgIChXVEY6OlBhcmFs
bGVsSm9iczo6cGFyYW1ldGVyRm9ySm9iKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2JzOjpU
aHJlYWRQcml2YXRlOjpUaHJlYWRQcml2YXRlKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2Jz
OjpUaHJlYWRQcml2YXRlOjpjcmVhdGUpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAg
ICAgICAqIHd0Zi93dGYucHJpOgorCiAyMDExLTA0LTEwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJl
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQmV0aCBEYWtpbi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzY1NzQzZC4uZGQ5
ZjdkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ4
MSw2ICs0ODEsMTEgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9QYXNzT3duQXJyYXlQdHIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QYXNzT3duUHRyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc1JlZlB0
ci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic09wZW5NUC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1BsYXRmb3JtLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUG9zc2libHlO
dWxsLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dU
Ri9XVEYudmNwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9XVEYvV1RGLnZjcHJvagppbmRleCBkOTUxNGU0Li4yNjgzNmRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52
Y3Byb2oKQEAgLTg0MSw2ICs4NDEsMjYgQEAKIAkJCT4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQor
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUGFyYWxsZWxKb2JzLmgiDQorCQkJPg0KKwkJPC9G
aWxlPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQYXJhbGxlbEpvYnNH
ZW5lcmljLmNwcCINCisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cd3RmXFBhcmFsbGVsSm9ic0dlbmVyaWMuaCINCisJCQk+DQorCQk8L0ZpbGU+DQor
CQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFBhcmFsbGVsSm9ic0xpYmRpc3Bh
dGNoLmgiDQorCQkJPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXHd0ZlxQYXJhbGxlbEpvYnNPcGVuTVAuaCINCisJCQk+DQorCQk8L0ZpbGU+DQorCQk8Rmls
ZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFBsYXRmb3JtLmgiDQogCQkJPg0KIAkJPC9G
aWxlPg0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzkzN2U3NS4uN2I2NzY5YyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMiw2ICsyMjIsMTEgQEAKIAkJNzE4
NkE2RUMxMzEwMEJBNTAwNDQ3OUUxIC8qIEhleE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzE4NkE2RTgxMzEwMEI1NzAwNDQ3OUUxIC8qIEhl
eE51bWJlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc2RkI5RjBGMTJFODUxODYwMDUxQTJFQiAvKiBTSEExLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkZCOUYwRTEyRTg1MTg2MDA1MUEyRUIgLyog
U0hBMS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc2RkI5RjExMTJFODUxOTYwMDUxQTJFQiAvKiBTSEExLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2RkI5RjEwMTJFODUxOTYwMDUxQTJFQiAvKiBT
SEExLmNwcCAqLzsgfTsKKwkJNzlEMDVFQjAxMzUzMUZCRDAwMjg0MzI2IC8qIFBhcmFsbGVsSm9i
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlEMDVF
QUIxMzUzMUZCRDAwMjg0MzI2IC8qIFBhcmFsbGVsSm9icy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5RDA1RUIxMTM1MzFGQkQwMDI4NDMyNiAv
KiBQYXJhbGxlbEpvYnNHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5RDA1RUFDMTM1MzFGQkQwMDI4NDMyNiAvKiBQYXJhbGxlbEpvYnNH
ZW5lcmljLmNwcCAqLzsgfTsKKwkJNzlEMDVFQjIxMzUzMUZCRDAwMjg0MzI2IC8qIFBhcmFsbGVs
Sm9ic0dlbmVyaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5RDA1RUFEMTM1MzFGQkQwMDI4NDMyNiAvKiBQYXJhbGxlbEpvYnNHZW5lcmljLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzlEMDVFQjMx
MzUzMUZCRDAwMjg0MzI2IC8qIFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUQwNUVBRTEzNTMxRkJEMDAyODQz
MjYgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUQwNUVCNDEzNTMxRkJEMDAyODQzMjYgLyogUGFy
YWxsZWxKb2JzT3Blbk1QLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUQwNUVBRjEzNTMxRkJEMDAyODQzMjYgLyogUGFyYWxsZWxKb2JzT3Blbk1QLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0U0RUU3
MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTRFRTcwODBFQkI3OTYzMDA1OTM0QUEgLyog
U3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3RTRFRTcwRjBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0RUU3MEUw
RUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKIAkJN0VGRjAwNjQw
RUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3RUZGMDA2MzBFQzA1QTlBMDBBQTdDOTMgLyogTm9kZUluZm8u
aCAqLzsgfTsKQEAgLTg4Nyw2ICs4OTIsMTEgQEAKIAkJNzE4NkE2RTgxMzEwMEI1NzAwNDQ3OUUx
IC8qIEhleE51bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZXhOdW1i
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzZGQjlGMEUxMkU4NTE4NjAwNTFB
MkVCIC8qIFNIQTEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0hBMS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NkZCOUYxMDEyRTg1MTk2MDA1MUEyRUIgLyog
U0hBMS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTSEExLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlEMDVFQUIxMzUzMUZCRDAwMjg0MzI2IC8q
IFBhcmFsbGVsSm9icy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxl
bEpvYnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlEMDVFQUMxMzUzMUZCRDAw
Mjg0MzI2IC8qIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTc5RDA1RUFEMTM1MzFGQkQwMDI4NDMyNiAvKiBQYXJhbGxlbEpvYnNHZW5l
cmljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsSm9ic0dlbmVy
aWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlEMDVFQUUxMzUzMUZCRDAwMjg0
MzI2IC8qIFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTc5RDA1RUFGMTM1MzFGQkQwMDI4NDMyNiAvKiBQYXJhbGxlbEpvYnNPcGVuTVAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxKb2JzT3Blbk1QLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRFMiAv
KiBTY29wZUNoYWluTWFyay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29w
ZUNoYWluTWFyay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTRFRTcwODBFQkI3
OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0U0RUU3MEUwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzQsNiArMTY4NCwxMSBAQAogCQkJCUJDRkJFNjk1MTIy
NTYwRTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIuaCAqLywKIAkJCQk0NERENDg1MjBGQUVB
ODUwMDBENkI0RUIgLyogUGFzc093blB0ci5oICovLAogCQkJCTY1ODBGNzk1MDk0MDcwNTYwMDgy
QzIxOSAvKiBQYXNzUmVmUHRyLmggKi8sCisJCQkJNzlEMDVFQUIxMzUzMUZCRDAwMjg0MzI2IC8q
IFBhcmFsbGVsSm9icy5oICovLAorCQkJCTc5RDA1RUFDMTM1MzFGQkQwMDI4NDMyNiAvKiBQYXJh
bGxlbEpvYnNHZW5lcmljLmNwcCAqLywKKwkJCQk3OUQwNUVBRDEzNTMxRkJEMDAyODQzMjYgLyog
UGFyYWxsZWxKb2JzR2VuZXJpYy5oICovLAorCQkJCTc5RDA1RUFFMTM1MzFGQkQwMDI4NDMyNiAv
KiBQYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oICovLAorCQkJCTc5RDA1RUFGMTM1MzFGQkQwMDI4
NDMyNiAvKiBQYXJhbGxlbEpvYnNPcGVuTVAuaCAqLywKIAkJCQk2NUQ2RDg3RTA5QjVBMzJFMDAw
MkU0RDcgLyogUGxhdGZvcm0uaCAqLywKIAkJCQlBN0Q2NDlBOTEwMTUyMjRFMDA5QjJFMUIgLyog
UG9zc2libHlOdWxsLmggKi8sCiAJCQkJRTREOENFOUIxMkZDNDJFMTAwQkM5RjVBIC8qIEJsb29t
RmlsdGVyLmggKi8sCkBAIC0yNTQ1LDYgKzI1NjAsMTAgQEAKIAkJCQk4NjcwNEI0MzEyREI4QTgx
MDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVERTZF
NUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAog
CQkJCTE0RkI5ODZFMTM1MjI1NDEwMDg1QTVEQiAvKiBIZWFwLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3OUQwNUVCMDEzNTMxRkJEMDAyODQzMjYgLyogUGFyYWxsZWxKb2JzLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3OUQwNUVCMjEzNTMxRkJEMDAyODQzMjYgLyogUGFyYWxsZWxKb2JzR2VuZXJpYy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzlEMDVFQjMxMzUzMUZCRDAwMjg0MzI2IC8qIFBhcmFsbGVs
Sm9ic0xpYmRpc3BhdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OUQwNUVCNDEzNTMxRkJEMDAy
ODQzMjYgLyogUGFyYWxsZWxKb2JzT3Blbk1QLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI5OTIsNiAr
MzAxMSw3IEBACiAJCQkJODY3MDRCODkxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2NzA0QjQyMTJEQjhBODEwMEE5RkU3QiAvKiBZYXJyU3lu
dGF4Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEZCOTg2RDEzNTIyNTQxMDA4NUE1
REIgLyogSGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OUQwNUVCMTEzNTMxRkJEMDAyODQz
MjYgLyogUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDkxYjY5NDQuLjgxMTIwZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtNTcsNiArNTcsMTAgQEAg
U0VUKFdURl9IRUFERVJTCiAgICAgUGFzc093bkFycmF5UHRyLmgKICAgICBQYXNzT3duUHRyLmgK
ICAgICBQYXNzUmVmUHRyLmgKKyAgICBQYXJhbGxlbEpvYnMuaAorICAgIFBhcmFsbGVsSm9ic0dl
bmVyaWMuaAorICAgIFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmgKKyAgICBQYXJhbGxlbEpvYnNP
cGVuTVAuaAogICAgIFBsYXRmb3JtLmgKICAgICBQb3NzaWJseU51bGwuaAogICAgIFJhbmRvbU51
bWJlci5oCkBAIC0xMTgsNiArMTIyLDcgQEAgU0VUKFdURl9TT1VSQ0VTCiAgICAgTWFpblRocmVh
ZC5jcHAKICAgICBNRDUuY3BwCiAgICAgT1NSYW5kb21Tb3VyY2UuY3BwCisgICAgUGFyYWxsZWxK
b2JzR2VuZXJpYy5jcHAKICAgICBSYW5kb21OdW1iZXIuY3BwCiAgICAgUmVmQ291bnRlZExlYWtD
b3VudGVyLmNwcAogICAgIFNIQTEuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1BhcmFsbGVsSm9icy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxl
bEpvYnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWFlNzIwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuaApA
QCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9y
Zz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYXJhbGxlbEpvYnNf
aAorI2RlZmluZSBQYXJhbGxlbEpvYnNfaAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorI2lu
Y2x1ZGUgIkJ5dGVBcnJheS5oIgorI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisjaW5jbHVkZSAi
UmVmUHRyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFBBUkFMTEVM
X0pPQlMpCisKKy8vIFVzYWdlOgorLy8KKy8vICNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKy8v
CisvLyAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2JzCisvLyAgICAgUGFyYWxsZWxKb2Jz
PFR5cGVPZlBhcmFtZXRlcj4gcGFyYWxsZWxKb2JzKCZ3b3JrZXIgWywgcmVxdWVzdGVkTnVtYmVy
T2ZKb2JzXSk7CisvLworLy8gICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQorLy8gICAg
IGludCBpID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworLy8gICAgIGZvcig7IGkgPiAw
OyAtLWkpIHsKKy8vICAgICAgIFR5cGVPZlBhcmFtZXRlciogcGFyYW1zID0gcGFyYWxsZWxKb2Jz
LnBhcmFtZXRlckZvckpvYihpKTsKKy8vICAgICAgIHBhcmFtcy0+YXR0cjEgPSBsb2NhbFZhcnMg
Li4uCisvLyAgICAgICAuLi4KKy8vICAgICB9CisvLworLy8gICAgIC8vIEV4ZWN1dGUgcGFyYWxs
ZWwgam9icworLy8gICAgIHBhcmFsbGVsSm9icy5leGVjdXRlSm9icygpOworLy8KKy8vICNlbHNl
CisvLworLy8gICAgIGlubGluZUZ1bmN0aW9uKGFyZ3MuLi4pOworLy8KKy8vICNlbmRpZiAvLyBF
TkFCTEUoUEFSQUxMRUxfSk9CUykKKworI2lmIEVOQUJMRShUSFJFQURJTkdfR0VORVJJQykKKyNp
bmNsdWRlICJQYXJhbGxlbEpvYnNHZW5lcmljLmgiCisKKyNlbGlmIEVOQUJMRShUSFJFQURJTkdf
T1BFTk1QKQorI2luY2x1ZGUgIlBhcmFsbGVsSm9ic09wZW5NUC5oIgorCisjZWxpZiBFTkFCTEUo
VEhSRUFESU5HX0xJQkRJU1BBVENIKQorI2luY2x1ZGUgIlBhcmFsbGVsSm9ic0xpYmRpc3BhdGNo
LmgiCisKKyNlbHNlCisjZXJyb3IgIk5vIHBhcmFsbGVsIHByb2Nlc3NpbmcgQVBJIGZvciBQYXJh
bGxlbEpvYnMiCisKKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KK2NsYXNzIFBhcmFsbGVsSm9icyA6IHB1YmxpYyBQYXJhbGxlbEVudmlyb25tZW50
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKCpXb3JrZXJGdW5jdGlvbikoVHlwZSopOwor
CisgICAgUGFyYWxsZWxKb2JzKFdvcmtlckZ1bmN0aW9uIGZ1bmMsIGludCByZXF1ZXN0ZWRKb2JO
dW1iZXIgPSAwKSA6CisgICAgICAgIFBhcmFsbGVsRW52aXJvbm1lbnQocmVpbnRlcnByZXRfY2Fz
dDxUaHJlYWRGdW5jdGlvbj4oZnVuYyksIHNpemVvZihUeXBlKSwgcmVxdWVzdGVkSm9iTnVtYmVy
KQorICAgIHsKKyAgICB9CisKKyAgICBpbnQgbnVtYmVyT2ZKb2JzKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBQYXJhbGxlbEVudmlyb25tZW50OjpudW1iZXJPZkpvYnMoKTsKKyAgICB9CisKKyAg
ICBUeXBlKiBwYXJhbWV0ZXJGb3JKb2IoaW50IGkpCisgICAgeworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxUeXBlKj4oUGFyYWxsZWxFbnZpcm9ubWVudDo6cGFyYW1ldGVyRm9ySm9i
KGkpKTsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGVKb2JzKCkKKyAgICB7CisgICAgICAgIFBh
cmFsbGVsRW52aXJvbm1lbnQ6OmV4ZWN1dGVKb2JzKCk7CisgICAgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UGFyYWxsZWxKb2JzOworCisjZW5kaWYgLy8gRU5BQkxF
KFBBUkFMTEVMX0pPQlMpCisKKyNlbmRpZiAvLyBQYXJhbGxlbEpvYnNfaApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1ZjhlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKQEAgLTAsMCArMSw5
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICog
Q29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KFBBUkFMTEVMX0pPQlMpICYmIEVOQUJMRShUSFJFQURJTkdfR0VORVJJQykKKworI2luY2x1ZGUg
IlBhcmFsbGVsSm9icy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVmVjdG9yPCBSZWZQdHI8UGFy
YWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZT4gPiogUGFyYWxsZWxFbnZpcm9ubWVudDo6
c190aHJlYWRQb29sID0gMDsKKworYm9vbCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2
YXRlOjp0cnlMb2NrRm9yKFBhcmFsbGVsRW52aXJvbm1lbnQqIHBhcmVudCkKK3sKKyAgICBib29s
IGxvY2tlZCA9IG1fbXV0ZXgudHJ5TG9jaygpOworCisgICAgaWYgKCFsb2NrZWQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3BhcmVudCkgeworICAgICAgICBtX211dGV4LnVu
bG9jaygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX3RocmVh
ZElEKQorICAgICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKCZQYXJhbGxlbEVudmlyb25t
ZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3b3JrZXIi
KTsKKworICAgIGlmIChtX3RocmVhZElEKQorICAgICAgICBtX3BhcmVudCA9IHBhcmVudDsKKwor
ICAgIG1fbXV0ZXgudW5sb2NrKCk7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQ7Cit9CisKK3ZvaWQg
UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6ZXhlY3V0ZUpvYihUaHJlYWRGdW5j
dGlvbiB0aHJlYWRGdW5jdGlvbiwgdm9pZCogcGFyYW1ldGVycykKK3sKKyAgICBNdXRleExvY2tl
ciBsb2NrKG1fbXV0ZXgpOworCisgICAgbV90aHJlYWRGdW5jdGlvbiA9IHRocmVhZEZ1bmN0aW9u
OworICAgIG1fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7CisgICAgbV9ydW5uaW5nID0gdHJ1ZTsK
KyAgICBtX3RocmVhZENvbmRpdGlvbi5zaWduYWwoKTsKK30KKwordm9pZCBQYXJhbGxlbEVudmly
b25tZW50OjpUaHJlYWRQcml2YXRlOjp3YWl0Rm9yRmluaXNoKCkKK3sKKyAgICBNdXRleExvY2tl
ciBsb2NrKG1fbXV0ZXgpOworCisgICAgd2hpbGUgKG1fcnVubmluZykKKyAgICAgICAgbV90aHJl
YWRDb25kaXRpb24ud2FpdChtX211dGV4KTsKK30KKwordm9pZCogUGFyYWxsZWxFbnZpcm9ubWVu
dDo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkKHZvaWQqIHRocmVhZERhdGEpCit7CisgICAg
VGhyZWFkUHJpdmF0ZSogc2hhcmVkVGhyZWFkID0gcmVpbnRlcnByZXRfY2FzdDxUaHJlYWRQcml2
YXRlKj4odGhyZWFkRGF0YSk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhzaGFyZWRUaHJlYWQtPm1f
bXV0ZXgpOworCisgICAgd2hpbGUgKHNoYXJlZFRocmVhZC0+bV90aHJlYWRJRCkgeworICAgICAg
ICBpZiAoc2hhcmVkVGhyZWFkLT5tX3J1bm5pbmcpIHsKKyAgICAgICAgICAgICgqc2hhcmVkVGhy
ZWFkLT5tX3RocmVhZEZ1bmN0aW9uKShzaGFyZWRUaHJlYWQtPm1fcGFyYW1ldGVycyk7CisgICAg
ICAgICAgICBzaGFyZWRUaHJlYWQtPm1fcnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgc2hh
cmVkVGhyZWFkLT5tX3BhcmVudCA9IDA7CisgICAgICAgICAgICBzaGFyZWRUaHJlYWQtPm1fdGhy
ZWFkQ29uZGl0aW9uLnNpZ25hbCgpOworICAgICAgICB9CisKKyAgICAgICAgc2hhcmVkVGhyZWFk
LT5tX3RocmVhZENvbmRpdGlvbi53YWl0KHNoYXJlZFRocmVhZC0+bV9tdXRleCk7CisgICAgfQor
ICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShQQVJBTExFTF9KT0JTKSAmJiBFTkFCTEUoVEhSRUFESU5HX0dFTkVSSUMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNzI2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaApAQCAtMCwwICsxLDE0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYXJhbGxlbEpvYnNHZW5lcmljX2gKKyNkZWZp
bmUgUGFyYWxsZWxKb2JzR2VuZXJpY19oCisKKyNpZiBFTkFCTEUoVEhSRUFESU5HX0dFTkVSSUMp
CisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW50IG1heFBhcmFsbGVsVGhyZWFkcyA9IDI7CisKK2NsYXNzIFBh
cmFsbGVsRW52aXJvbm1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhcmFsbGVsRW52
aXJvbm1lbnQpOworcHJvdGVjdGVkOgorICAgIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9u
KSh2b2lkKik7CisKKyAgICBQYXJhbGxlbEVudmlyb25tZW50KFRocmVhZEZ1bmN0aW9uIHRocmVh
ZEZ1bmN0aW9uLCBzaXplX3Qgc2l6ZU9mUGFyYW1ldGVyLCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVk
Sm9iTnVtYmVyKSA6CisgICAgICAgIG1fdGhyZWFkRnVuY3Rpb24odGhyZWFkRnVuY3Rpb24pLAor
ICAgICAgICBtX3NpemVPZlBhcmFtZXRlcihzaXplT2ZQYXJhbWV0ZXIpCisgICAgeworICAgICAg
ICBpZiAoIXJlcXVlc3RlZEpvYk51bWJlciB8fCByZXF1ZXN0ZWRKb2JOdW1iZXIgPiBtYXhQYXJh
bGxlbFRocmVhZHMpCisgICAgICAgICAgICByZXF1ZXN0ZWRKb2JOdW1iZXIgPSBtYXhQYXJhbGxl
bFRocmVhZHM7CisKKyAgICAgICAgaWYgKCFzX3RocmVhZFBvb2wpCisgICAgICAgICAgICBzX3Ro
cmVhZFBvb2wgPSBuZXcgVmVjdG9yPCBSZWZQdHI8VGhyZWFkUHJpdmF0ZT4gPigpOworCisgICAg
ICAgIC8vIFRoZSBtYWluIHRocmVhZCBzaG91bGQgYmUgYWxzbyBhIHdvcmtlci4KKyAgICAgICAg
dW5zaWduZWQgaW50IG1heE5ld1RocmVhZHMgPSByZXF1ZXN0ZWRKb2JOdW1iZXIgLSAxOworCisg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbWF4UGFyYWxsZWxUaHJlYWRzICYm
IG1fdGhyZWFkcy5zaXplKCkgPCBtYXhOZXdUaHJlYWRzOyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChzX3RocmVhZFBvb2wtPnNpemUoKSA8IGkgKyAxKQorICAgICAgICAgICAgICAgIHNfdGhyZWFk
UG9vbC0+YXBwZW5kKFRocmVhZFByaXZhdGU6OmNyZWF0ZSgpKTsKKworICAgICAgICAgICAgaWYg
KCgqc190aHJlYWRQb29sKVtpXS0+dHJ5TG9ja0Zvcih0aGlzKSkKKyAgICAgICAgICAgICAgICBt
X3RocmVhZHMuYXBwZW5kKCgqc190aHJlYWRQb29sKVtpXSk7CisgICAgICAgIH0KKworICAgICAg
ICBtX251bWJlck9mSm9icyA9IG1fdGhyZWFkcy5zaXplKCkgKyAxOworCisgICAgICAgIG1fcGFy
YW1ldGVycyA9IEJ5dGVBcnJheTo6Y3JlYXRlKG1fc2l6ZU9mUGFyYW1ldGVyICogbV9udW1iZXJP
ZkpvYnMpOworICAgIH0KKworICAgIGludCBudW1iZXJPZkpvYnMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fbnVtYmVyT2ZKb2JzOworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIqIHBhcmFt
ZXRlckZvckpvYihpbnQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX251bWJlck9mSm9icyA+
PSBpKTsKKyAgICAgICAgcmV0dXJuIG1fcGFyYW1ldGVycy0+ZGF0YSgpICsgKGkgLSAxKSAqIG1f
c2l6ZU9mUGFyYW1ldGVyOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZUpvYnMoKQorICAgIHsK
KyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IG1fdGhyZWFkcy5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkKKyAgICAgICAgICAgIG1fdGhyZWFkc1tpXS0+ZXhlY3V0ZUpvYihtX3RocmVh
ZEZ1bmN0aW9uLCBwYXJhbWV0ZXJGb3JKb2IoaSArIDEpKTsKKworICAgICAgICAvLyBUaGUgd29y
ayBmb3IgdGhlIG1haW4gdGhyZWFkCisgICAgICAgICgqbV90aHJlYWRGdW5jdGlvbikocGFyYW1l
dGVyRm9ySm9iKG1fdGhyZWFkcy5zaXplKCkgKyAxKSk7CisKKyAgICAgICAgLy8gV2FpdCB1bnRp
bCBhbGwgam9icyBhcmUgZG9uZS4KKyAgICAgICAgZm9yIChpID0gbV90aHJlYWRzLnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKQorICAgICAgICAgICAgbV90aHJlYWRzW2ldLT53YWl0Rm9yRmluaXNo
KCk7CisgICAgfQorCisgICAgY2xhc3MgVGhyZWFkUHJpdmF0ZSA6IHB1YmxpYyBSZWZDb3VudGVk
PFRocmVhZFByaXZhdGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRocmVhZFByaXZhdGUoKQor
ICAgICAgICAgICAgOiBtX3RocmVhZElEKDApCisgICAgICAgICAgICAsIG1fcnVubmluZyhmYWxz
ZSkKKyAgICAgICAgICAgICwgbV9wYXJlbnQoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCB0cnlMb2NrRm9yKFBhcmFsbGVsRW52aXJvbm1lbnQqKTsKKworICAgICAgICB2
b2lkIGV4ZWN1dGVKb2IoVGhyZWFkRnVuY3Rpb24sIHZvaWQqKTsKKworICAgICAgICB2b2lkIHdh
aXRGb3JGaW5pc2goKTsKKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRQcml2YXRl
PiBjcmVhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRo
cmVhZFByaXZhdGUoKSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCogd29ya2Vy
VGhyZWFkKHZvaWQqKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJRDsKKyAgICAgICAgYm9vbCBtX3J1bm5pbmc7CisgICAgICAgIFBhcmFsbGVsRW52
aXJvbm1lbnQqIG1fcGFyZW50OworCisgICAgICAgIG11dGFibGUgTXV0ZXggbV9tdXRleDsKKyAg
ICAgICAgVGhyZWFkQ29uZGl0aW9uIG1fdGhyZWFkQ29uZGl0aW9uOworCisgICAgICAgIFRocmVh
ZEZ1bmN0aW9uIG1fdGhyZWFkRnVuY3Rpb247CisgICAgICAgIHZvaWQqIG1fcGFyYW1ldGVyczsK
KyAgICB9OworCitwcml2YXRlOgorICAgIFRocmVhZEZ1bmN0aW9uIG1fdGhyZWFkRnVuY3Rpb247
CisgICAgc2l6ZV90IG1fc2l6ZU9mUGFyYW1ldGVyOworICAgIGludCBtX251bWJlck9mSm9iczsK
KyAgICBSZWZQdHI8Qnl0ZUFycmF5PiBtX3BhcmFtZXRlcnM7CisKKyAgICBWZWN0b3I8IFJlZlB0
cjxUaHJlYWRQcml2YXRlPiA+IG1fdGhyZWFkczsKKyAgICBzdGF0aWMgVmVjdG9yPCBSZWZQdHI8
VGhyZWFkUHJpdmF0ZT4gPiogc190aHJlYWRQb29sOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFESU5HX0dFTkVSSUMpCisKKworI2VuZGlmIC8vIFBh
cmFsbGVsSm9ic0dlbmVyaWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
YXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmFjM2Q4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9G
IFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQYXJhbGxlbEpvYnNMaWJkaXNwYXRjaF9oCisjZGVmaW5lIFBhcmFsbGVs
Sm9ic0xpYmRpc3BhdGNoX2gKKworI2lmIEVOQUJMRShUSFJFQURJTkdfTElCRElTUEFUQ0gpCisK
KyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGludCBtYXhQYXJhbGxlbFRocmVhZHMgPSAyOworCitjbGFzcyBQ
YXJhbGxlbEVudmlyb25tZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYXJhbGxlbEVu
dmlyb25tZW50KTsKK3Byb3RlY3RlZDoKKyAgICB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlv
bikodm9pZCopOworCisgICAgUGFyYWxsZWxFbnZpcm9ubWVudChUaHJlYWRGdW5jdGlvbiB0aHJl
YWRGdW5jdGlvbiwgc2l6ZV90IHNpemVPZlBhcmFtZXRlciwgdW5zaWduZWQgaW50IHJlcXVlc3Rl
ZEpvYk51bWJlcikgOgorICAgICAgICBtX3RocmVhZEZ1bmN0aW9uKHRocmVhZEZ1bmN0aW9uKSwK
KyAgICAgICAgbV9zaXplT2ZQYXJhbWV0ZXIoc2l6ZU9mUGFyYW1ldGVyKQorICAgIHsKKyAgICAg
ICAgaWYgKCFyZXF1ZXN0ZWRKb2JOdW1iZXIgfHwgcmVxdWVzdGVkSm9iTnVtYmVyID4gbWF4UGFy
YWxsZWxUaHJlYWRzKQorICAgICAgICAgICAgcmVxdWVzdGVkSm9iTnVtYmVyID0gbWF4UGFyYWxs
ZWxUaHJlYWRzOworCisgICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRKb2JOdW1iZXIgPiAwKTsKKwor
ICAgICAgICBtX251bWJlck9mSm9icyA9IHJlcXVlc3RlZEpvYk51bWJlcjsKKworICAgICAgICBt
X3BhcmFtZXRlcnMgPSBCeXRlQXJyYXk6OmNyZWF0ZShtX3NpemVPZlBhcmFtZXRlciAqIG1fbnVt
YmVyT2ZKb2JzKTsKKyAgICB9CisKKyAgICBpbnQgbnVtYmVyT2ZKb2JzKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX251bWJlck9mSm9iczsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyKiBw
YXJhbWV0ZXJGb3JKb2IoaW50IGkpCisgICAgeworICAgICAgICBBU1NFUlQobV9udW1iZXJPZkpv
YnMgPj0gaSk7CisgICAgICAgIHJldHVybiBtX3BhcmFtZXRlcnMtPmRhdGEoKSArIChpIC0gMSkg
KiBtX3NpemVPZlBhcmFtZXRlcjsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGVKb2JzKCkKKyAg
ICB7CisgICAgICAgIC8vIGxpYmRpc3BhdGNoIGlzIE5PVCBzdXBwb3J0ZWQgaW5zaWRlIGEgdGVt
cGxhdGUKKyAgICAgICAgZGlzcGF0Y2hfcXVldWVfdCBwYXJhbGxlbEpvYnNRdWV1ZSA9IGRpc3Bh
dGNoX3F1ZXVlX2NyZWF0ZSgiUGFyYWxsZWxKb2JzIiwgMCk7CisKKyAgICAgICAgZm9yIChpbnQg
aSA9IG1fbnVtYmVyT2ZKb2JzOyBpID4gMTsgLS1pKQorICAgICAgICAgICAgZGlzcGF0Y2hfYXN5
bmMocGFyYWxsZWxKb2JzUXVldWUsIF57KCptX3RocmVhZEZ1bmN0aW9uKShwYXJhbWV0ZXJGb3JK
b2IoaSwgc2l6ZU9mUGFyYW1ldGVyKSk7fSk7CisKKyAgICAgICAgLy8gVGhlIHdvcmsgZm9yIHRo
ZSBtYWluIHRocmVhZC4gV2FpdCB1bnRpbCBhbGwgam9icyBhcmUgZG9uZS4KKyAgICAgICAgZGlz
cGF0Y2hfc3luYyhwYXJhbGxlbEpvYnNRdWV1ZSwgXnsoKm1fdGhyZWFkRnVuY3Rpb24pKHBhcmFt
ZXRlckZvckpvYigxLCBzaXplT2ZQYXJhbWV0ZXIpKTt9KTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgVGhyZWFkRnVuY3Rpb24gbV90aHJlYWRGdW5jdGlvbjsKKyAgICBzaXplX3QgbV9zaXplT2ZQ
YXJhbWV0ZXI7CisgICAgaW50IG1fbnVtYmVyT2ZKb2JzOworICAgIFJlZlB0cjxCeXRlQXJyYXk+
IG1fcGFyYW1ldGVyczsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFESU5HX0xJQkRJU1BB
VENIKQorCisjZW5kaWYgLy8gUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2hfaApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNPcGVuTVAuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzT3Blbk1QLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZGJjNzQ5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzT3Blbk1QLmgKQEAgLTAsMCArMSw4OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0
IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklW
RVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZF
UlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBQYXJhbGxlbEpvYnNPcGVuTVBfaAorI2RlZmluZSBQYXJh
bGxlbEpvYnNPcGVuTVBfaAorCisjaWYgRU5BQkxFKFRIUkVBRElOR19PUEVOTVApCisKKyNpbmNs
dWRlIDxvbXAuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFBhcmFsbGVsRW52aXJvbm1l
bnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhcmFsbGVsRW52aXJvbm1lbnQpOworcHJv
dGVjdGVkOgorICAgIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKik7CisKKyAg
ICBQYXJhbGxlbEVudmlyb25tZW50KFRocmVhZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCBzaXpl
X3Qgc2l6ZU9mUGFyYW1ldGVyLCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkSm9iTnVtYmVyKSA6Cisg
ICAgICAgIG1fdGhyZWFkRnVuY3Rpb24odGhyZWFkRnVuY3Rpb24pLAorICAgICAgICBtX3NpemVP
ZlBhcmFtZXRlcihzaXplT2ZQYXJhbWV0ZXIpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQg
bWF4TnVtYmVyT2ZUaHJlYWRzID0gb21wX2dldF9tYXhfdGhyZWFkcygpOworCisgICAgICAgIGlm
ICghcmVxdWVzdGVkSm9iTnVtYmVyIHx8IHJlcXVlc3RlZEpvYk51bWJlciA+IG1heE51bWJlck9m
VGhyZWFkcykKKyAgICAgICAgICAgIHJlcXVlc3RlZEpvYk51bWJlciA9IG1heE51bWJlck9mVGhy
ZWFkczsKKworICAgICAgICBBU1NFUlQocmVxdWVzdGVkSm9iTnVtYmVyID4gMCk7CisKKyAgICAg
ICAgbV9udW1iZXJPZkpvYnMgPSByZXF1ZXN0ZWRKb2JOdW1iZXI7CisKKyAgICAgICAgbV9wYXJh
bWV0ZXJzID0gQnl0ZUFycmF5OjpjcmVhdGUobV9zaXplT2ZQYXJhbWV0ZXIgKiBtX251bWJlck9m
Sm9icyk7CisgICAgfQorCisgICAgaW50IG51bWJlck9mSm9icygpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9udW1iZXJPZkpvYnM7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciogcGFyYW1l
dGVyRm9ySm9iKGludCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbnVtYmVyT2ZKb2JzID49
IGkpOworICAgICAgICByZXR1cm4gbV9wYXJhbWV0ZXJzLT5kYXRhKCkgKyAoaSAtIDEpICogbV9z
aXplT2ZQYXJhbWV0ZXI7CisgICAgfQorCisgICAgdm9pZCBleGVjdXRlSm9icygpCisgICAgewor
ICAgICAgICBvbXBfc2V0X251bV90aHJlYWRzKG1fbnVtYmVyT2ZKb2JzKTsKKworI3ByYWdtYSBv
bXAgcGFyYWxsZWwgZm9yCisgICAgICAgIGZvciAoaW50IGkgPSBtX251bWJlck9mSm9iczsgaSA+
IDA7IC0taSkKKyAgICAgICAgICAgICgqbV90aHJlYWRGdW5jdGlvbikocGFyYW1ldGVyRm9ySm9i
KGkpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkRnVuY3Rpb24gbV90aHJlYWRGdW5j
dGlvbjsKKyAgICBzaXplX3QgbV9zaXplT2ZQYXJhbWV0ZXI7CisgICAgaW50IG1fbnVtYmVyT2ZK
b2JzOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IG1fcGFyYW1ldGVyczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVBRElOR19PUEVOTVApCisKKyNlbmRp
ZiAvLyBQYXJhbGxlbEpvYnNPcGVuTVBfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
CmluZGV4IDAyZjJlNGIuLmM0YjJjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3Jt
LmgKQEAgLTExODYsNiArMTE4NiwxNCBAQAogI2RlZmluZSBFTkFCTEVfQlJBTkNIX0NPTVBBQ1RJ
T04gMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVfVEhSRUFESU5HX09QRU5NUCkgJiYg
ZGVmaW5lZChfT1BFTk1QKQorI2RlZmluZSBFTkFCTEVfVEhSRUFESU5HX09QRU5NUCAxCisjZW5k
aWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9QQVJBTExFTF9KT0JTKSAmJiAhRU5BQkxFKFNJTkdM
RV9USFJFQURFRCkgJiYgKEVOQUJMRShUSFJFQURJTkdfR0VORVJJQykgfHwgRU5BQkxFKFRIUkVB
RElOR19MSUJESVNQQVRDSCkgfHwgRU5BQkxFKFRIUkVBRElOR19PUEVOTVApKQorI2RlZmluZSBF
TkFCTEVfUEFSQUxMRUxfSk9CUyAxCisjZW5kaWYKKwogI2lmIEVOQUJMRShHTElCX1NVUFBPUlQp
CiAjaW5jbHVkZSAiR1R5cGVkZWZzLmgiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvd3RmLnByaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnBy
aQppbmRleCA1ZjE1ZWIwLi4xMGI0MWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL3d0Zi5wcmkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCkBA
IC0yMSw2ICsyMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9xdC9UaHJlYWRpbmdRdC5jcHAg
XAogICAgIHd0Zi9QYWdlQWxsb2NhdGlvbkFsaWduZWQuY3BwIFwKICAgICB3dGYvUGFnZUJsb2Nr
LmNwcCBcCisgICAgd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIFwKICAgICB3dGYvUmFuZG9t
TnVtYmVyLmNwcCBcCiAgICAgd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgXAogICAgIHd0
Zi9TSEExLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTJmY2E1Yy4uYjQxN2JlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI5IEBACisyMDExLTA0LTExICBHYWJvciBMb2tpICA8bG9raUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwZWVk
aW5nIHVwIFNWRyBmaWx0ZXJzIHdpdGggbXVsdGljb3JlIChTTVApIHN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzOTAzCisKKyAgICAgICAg
U29tZSBTVkcgZmlsdGVycyBleGVjdXRlIGEgaHVnZSBudW1iZXIgb2YgcGl4ZWwgbWFuaXB1bGF0
aW9ucywgd2hpY2gKKyAgICAgICAgY2Fubm90IGJlIHNwZWQgdXAgYnkgZ3JhcGhpY3MgYWNjZWxl
cmF0b3JzLCBzaW5jZSB0aGVpciBhbGdvcml0aG0gaXMKKyAgICAgICAgdG9vIGNvbXBsZXguIFVz
aW5nIHRoZSBwb3dlciBvZiBTeW1tZXRyaWMgTXVsdGkgUHJvY2Vzc2luZyAoU01QKSB3ZQorICAg
ICAgICBjYW4gc3BsaXQgdXAgYSB0YXNrIHRvIHNtYWxsZXIgKGRhdGEgaW5kZXBlbmRlbnQpIHRh
c2tzLCB3aGljaCBjYW4gYmUKKyAgICAgICAgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseS4KKworICAg
ICAgICBUaGUgUGFyYWxsZWxKb2JzIGZyYW1ld29yayBwcm92aWRlcyBhIHNpbXBsZSB3YXkgZm9y
IGRpc3RyaWJ1dGVkCisgICAgICAgIHByb2dyYW1taW5nLiBUaGUgZnJhbWV3b3JrIGlzIGJhc2Vk
IG9uIFdlYktpdCdzIHRocmVhZGluZyBpbmZyYXN0cnVjdHVyZSwKKyAgICAgICAgT3BlbiBNdWx0
aS1Qcm9jZXNzaW5nJ3MgKE9wZW5NUCkgQVBJLCBhbmQgbGliZGlzcGF0Y2ggQVBJLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OlBhaW50aW5nRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
VHVyYnVsZW5jZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmg6CisKIDIwMTEtMDQtMTAgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dA
Z21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1BhcmFsbGVsSm9icy5oIGIv
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1BhcmFsbGVsSm9icy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNjRlOTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvUGFyYWxsZWxKb2JzLmgKQEAg
LTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1BhcmFsbGVsSm9ic19oCisjZGVmaW5l
IFdlYkNvcmVfRldEX1BhcmFsbGVsSm9ic19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUGFy
YWxsZWxKb2JzLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAppbmRleCA2MzA2MGUxLi4yZjA2
OWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzIsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTE1Miw3ICsxNTQsNiBAQCBGRVR1cmJ1bGVuY2U6OlBhaW50aW5n
RGF0YTo6UGFpbnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBwYWlu
dAogICAgICwgaGVpZ2h0KDApCiAgICAgLCB3cmFwWCgwKQogICAgICwgd3JhcFkoMCkKLSAgICAs
IGNoYW5uZWwoMCkKICAgICAsIGZpbHRlclNpemUocGFpbnRpbmdTaXplKQogewogfQpAQCAtMjI0
LDcgKzIyNSw3IEBAIGlubGluZSB2b2lkIGNoZWNrTm9pc2UoaW50JiBub2lzZVZhbHVlLCBpbnQg
bGltaXRWYWx1ZSwgaW50IG5ld1ZhbHVlKQogICAgICAgICBub2lzZVZhbHVlIC09IG5ld1ZhbHVl
IC0gMTsKIH0KIAotZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikKK2Zsb2F0IEZFVHVyYnVs
ZW5jZTo6bm9pc2UyRChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNv
bnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQogewogICAgIHN0cnVjdCBOb2lzZSB7CiAgICAg
ICAgIGludCBub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlOwpAQCAtMjU5LDIzICsyNjAsMjMgQEAg
ZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBj
b25zdCBGbG9hdFBvaW50JiBub2lzZVYKIAogICAgIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20g
U1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1
bGVuY2VFbGVtZW50LgogICAgIGludCB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07Ci0gICAg
cSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGluZ0RhdGEuY2hhbm5lbF1bdGVtcF07Cisg
ICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVt0ZW1wXTsKICAgICB1ID0gbm9p
c2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVswXSArIG5vaXNlWS5ub2lzZVBvc2l0
aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMV07CiAgICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZh
bHVlXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVs
XVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3RlbXBdOwog
ICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzBdICsg
bm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVsxXTsKICAgICBhID0gbGluZWFy
SW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CiAgICAgdGVtcCA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUg
KyAxXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVs
XVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3RlbXBdOwog
ICAgIHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzBdICsgKG5vaXNl
WS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVsxXTsKICAgICB0ZW1wID0gcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNl
UG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50
W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W2NoYW5uZWxdW3RlbXBdOwogICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlv
blZhbHVlIC0gMSkgKiBxWzBdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAt
IDEpICogcVsxXTsKICAgICBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CiAgICAg
cmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOwogfQogCi11bnNpZ25lZCBjaGFy
IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordW5zaWduZWQgY2hh
ciBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBjaGFu
bmVsLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
CiB7CiAgICAgZmxvYXQgdGlsZVdpZHRoID0gcGFpbnRpbmdEYXRhLmZpbHRlclNpemUud2lkdGgo
KTsKICAgICBBU1NFUlQodGlsZVdpZHRoID4gMCk7CkBAIC0zMTMsOSArMzE0LDkgQEAgdW5zaWdu
ZWQgY2hhciBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KFBh
aW50aW5nRGF0YSYgcGFpbnQKICAgICBmbG9hdCByYXRpbyA9IDE7CiAgICAgZm9yIChpbnQgb2N0
YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewogICAgICAgICBpZiAo
bV90eXBlID09IEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSkKLSAgICAgICAgICAgIHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgbm9pc2VWZWN0
b3IpIC8gcmF0aW87CisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9p
c2UyRChjaGFubmVsLCBwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gZmFic2Yobm9p
c2UyRChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSkgLyByYXRpbzsKKyAgICAgICAgICAgIHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBmYWJzZihub2lzZTJEKGNoYW5uZWwsIHBhaW50aW5n
RGF0YSwgbm9pc2VWZWN0b3IpKSAvIHJhdGlvOwogICAgICAgICBub2lzZVZlY3Rvci5zZXRYKG5v
aXNlVmVjdG9yLngoKSAqIDIpOwogICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9y
LnkoKSAqIDIpOwogICAgICAgICByYXRpbyAqPSAyOwpAQCAtMzM4LDYgKzMzOSwzMSBAQCB1bnNp
Z25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQo
UGFpbnRpbmdEYXRhJiBwYWludAogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Pih0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpOwogfQogCitpbmxpbmUgdm9pZCBGRVR1
cmJ1bGVuY2U6OmZpbGxSZWdpb24oQnl0ZUFycmF5KiBwaXhlbEFycmF5LCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7CisgICAgSW50UmVjdCBmaWx0
ZXJSZWdpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIEludFBvaW50IHBvaW50KDAsIGZp
bHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOworICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0g
c3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOworICAgIGludCBjaGFubmVsOwor
CisgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgeworICAgICAgICBwb2lu
dC5zZXRZKHBvaW50LnkoKSArIDEpOworICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54
KCkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGZpbHRlclJlZ2lvbi53aWR0aCgpOyAr
K3gpIHsKKyAgICAgICAgICAgIHBvaW50LnNldFgocG9pbnQueCgpICsgMSk7CisgICAgICAgICAg
ICBmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsLCArK2luZGV4T2ZQaXhl
bENoYW5uZWwpCisgICAgICAgICAgICAgICAgcGl4ZWxBcnJheS0+c2V0KGluZGV4T2ZQaXhlbENo
YW5uZWwsIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNoYW5uZWwsIHBhaW50aW5n
RGF0YSwgZmlsdGVyKCktPm1hcEFic29sdXRlUG9pbnRUb0xvY2FsUG9pbnQocG9pbnQpKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKK3ZvaWQgRkVU
dXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0
ZXJzKQoreworICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbihwYXJhbWV0ZXJzLT5w
aXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFks
IHBhcmFtZXRlcnMtPmVuZFkpOworfQorI2VuZGlmIC8vIEVOQUJMRShQQVJBTExFTF9KT0JTKQor
CiB2b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHkoKQogewogICAgIGlmIChoYXNSZXN1bHQoKSkKQEAg
LTM1MiwxOSArMzc4LDQyIEBAIHZvaWQgRkVUdXJidWxlbmNlOjphcHBseSgpCiAgICAgUGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YShtX3NlZWQsIHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpLnNpemUoKSkpOwogICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOwogCi0g
ICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmxv
YXRQb2ludCBwb2ludDsKLSAgICBwb2ludC5zZXRZKGZpbHRlclJlZ2lvbi55KCkpOwotICAgIGlu
dCBpbmRleE9mUGl4ZWxDaGFubmVsID0gMDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGFic29s
dXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBwb2ludC5zZXRZKHBvaW50
LnkoKSArIDEpOwotICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKTsgKyt4KSB7
Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgZm9y
IChwYWludGluZ0RhdGEuY2hhbm5lbCA9IDA7IHBhaW50aW5nRGF0YS5jaGFubmVsIDwgNDsgKytw
YWludGluZ0RhdGEuY2hhbm5lbCwgKytpbmRleE9mUGl4ZWxDaGFubmVsKQotICAgICAgICAgICAg
ICAgIHBpeGVsQXJyYXktPnNldChpbmRleE9mUGl4ZWxDaGFubmVsLCBjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIGZpbHRlcigpLT5tYXBBYnNvbHV0ZVBvaW50
VG9Mb2NhbFBvaW50KHBvaW50KSkpOworI2lmIEVOQUJMRShQQVJBTExFTF9KT0JTKQorCisgICAg
aW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAoYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpICog
YWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSkgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uOwor
ICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAgICAgICAvLyBJbml0aWFsaXpl
IHBhcmFsbGVsIGpvYnMKKyAgICAgICAgUGFyYWxsZWxKb2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJz
PiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwg
b3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFy
cmF5CisgICAgICAgIGludCBpID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAgICAg
ICBpZiAoaSA+IDEpIHsKKyAgICAgICAgICAgIGludCBzdGFydFkgPSAwOworICAgICAgICAgICAg
aW50IHN0ZXBZID0gYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSAvIGk7CisgICAgICAgICAg
ICBmb3IgKDsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0
ZXJzKiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyRm9ySm9iKGkpOworICAgICAgICAg
ICAgICAgIHBhcmFtcy0+ZmlsdGVyID0gdGhpczsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnBp
eGVsQXJyYXkgPSBwaXhlbEFycmF5OworICAgICAgICAgICAgICAgIHBhcmFtcy0+cGFpbnRpbmdE
YXRhID0gJnBhaW50aW5nRGF0YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMtPnN0YXJ0WSA9IHN0
YXJ0WTsKKyAgICAgICAgICAgICAgICBpZiAoaSAhPSAxKSB7CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtcy0+ZW5kWSA9IHN0YXJ0WSArIHN0ZXBZOworICAgICAgICAgICAgICAgICAgICBzdGFy
dFkgPSBzdGFydFkgKyBzdGVwWTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLT5lbmRZID0gYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRXhlY3V0ZSBwYXJhbGxlbCBqb2JzCisgICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZUpvYnMoKTsKKworICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQorICAgIC8vIEZhbGxiYWNrIHRvIHNlcXVlbnRpYWwgbW9kZSBp
ZiB0aGVyZSBpcyBubyByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMg
dG9vIHNtYWxsCisKKyNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKworICAgIGZpbGxS
ZWdpb24ocGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCAwLCBhYnNvbHV0ZVBhaW50UmVjdCgpLmhl
aWdodCgpKTsKIH0KIAogdm9pZCBGRVR1cmJ1bGVuY2U6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKaW5k
ZXggZGZlYjIyMC4uMDQ2NjJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC01OCw2ICs1OCwxMCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzdGl0Y2hUaWxlcygpIGNvbnN0OwogICAgIGJvb2wgc2V0U3RpdGNo
VGlsZXMoYm9vbCk7CiAKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKyAgICBzdGF0aWMgdm9p
ZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIGFw
cGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKICAgICAKQEAgLTY4LDYgKzcyLDkgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tTaXplID0gMjU2
OwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja01hc2sgPSBzX2Jsb2NrU2l6ZSAtIDE7Cisj
aWYgRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisgICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxS
ZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBw
YXJhbGxlbCBqb2JzCisjZW5kaWYKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewogICAgICAg
ICBsb25nIHNlZWQ7CkBAIC03NywxOCArODQsMzMgQEAgcHJpdmF0ZToKICAgICAgICAgaW50IGhl
aWdodDsKICAgICAgICAgaW50IHdyYXBYOyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCiAgICAg
ICAgIGludCB3cmFwWTsKLSAgICAgICAgaW50IGNoYW5uZWw7CiAgICAgICAgIEludFNpemUgZmls
dGVyU2l6ZTsKIAogICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0
IEludFNpemUmIHBhaW50aW5nU2l6ZSk7CiAgICAgICAgIGlubGluZSBsb25nIHJhbmRvbSgpOwog
ICAgIH07CiAKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgorICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7CisKKyAgICBzdHJ1Y3QgRmls
bFJlZ2lvblBhcmFtZXRlcnMgeworICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsKKyAgICAg
ICAgQnl0ZUFycmF5KiBwaXhlbEFycmF5OworICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5n
RGF0YTsKKyAgICAgICAgaW50IHN0YXJ0WTsKKyAgICAgICAgaW50IGVuZFk7CisgICAgfTsKKwor
ICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqKTsK
KyNlbmRpZgorCiAgICAgRkVUdXJidWxlbmNlKEZpbHRlciosIFR1cmJ1bGVuY2VUeXBlLCBmbG9h
dCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOwogCiAgICAgaW5saW5lIHZvaWQgaW5pdFBhaW50
KFBhaW50aW5nRGF0YSYpOwotICAgIGZsb2F0IG5vaXNlMkQoUGFpbnRpbmdEYXRhJiwgY29uc3Qg
RmxvYXRQb2ludCYpOwotICAgIHVuc2lnbmVkIGNoYXIgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVl
Rm9yUG9pbnQoUGFpbnRpbmdEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIGZsb2F0IG5v
aXNlMkQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAg
ICB1bnNpZ25lZCBjaGFyIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBjaGFu
bmVsLCBQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgaW5saW5lIHZvaWQg
ZmlsbFJlZ2lvbihCeXRlQXJyYXkqLCBQYWludGluZ0RhdGEmLCBpbnQsIGludCk7CiAKICAgICBU
dXJidWxlbmNlVHlwZSBtX3R5cGU7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKLS0gCjEu
Ny4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89195</attachid>
            <date>2011-04-12 06:26:06 -0700</date>
            <delta_ts>2011-04-26 01:15:08 -0700</delta_ts>
            <desc>Speeding up FETurbulence with SMP</desc>
            <filename>0001-Speeding-up-SVG-filters-with-multicore-SMP-support.patch</filename>
            <type>text/plain</type>
            <size>43746</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSAxNmI1NTMwYjY1ODU3MDEzOGRiZGRiMDc2NTJkZGY4ZmI3ZTQzNzNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVHVlLCAxMiBBcHIgMjAxMSAxNDo1MToxMiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFNwZWVk
aW5nIHVwIFNWRyBmaWx0ZXJzIHdpdGggbXVsdGljb3JlIChTTVApIHN1cHBvcnQKClNpZ25lZC1v
ZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwgICA1MSArKysrKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICB8ICAgIDUg
KwogLi4uL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvaiAgICAgICAgICAgfCAg
IDIwICsrKwogLi4uL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICAg
ICAgfCAgIDIwICsrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dCAg
ICAgICAgICAgfCAgICA1ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2Jz
LmggICAgICAgICAgIHwgIDExMSArKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAgIHwgICA5OCArKysrKysrKysrKysrCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaCAgICB8ICAxNDQgKysr
KysrKysrKysrKysrKysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzTGli
ZGlzcGF0Y2guaCAgIHwgICA5MiArKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1BhcmFsbGVsSm9ic09wZW5NUC5oICAgICB8ICAgODkgKysrKysrKysrKysrCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggICAgICAgICAgICAgICB8ICAgIDggKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpICAgICAgICAgICAgICAgICAgfCAgICAxICsK
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAy
NyArKysrCiAuLi4vV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvUGFyYWxsZWxKb2JzLmgg
ICB8ICAgIDQgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cCAgICAgfCAgIDg5ICsrKysrKysrKystLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oICAgICAgIHwgICAyOCArKysrLQogMTYgZmlsZXMgY2hhbmdlZCwgNzY5
IGluc2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmlj
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVs
Sm9ic0xpYmRpc3BhdGNoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1BhcmFsbGVsSm9ic09wZW5NUC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1BhcmFsbGVsSm9icy5oCgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKaW5kZXggYjBjOGYxNi4uOGQ0MTE3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTQgQEAKKzIwMTEtMDQtMTIgIEdhYm9yIExva2kgIDxsb2tpQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bl
ZWRpbmcgdXAgU1ZHIGZpbHRlcnMgd2l0aCBtdWx0aWNvcmUgKFNNUCkgc3VwcG9ydAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5MDMKKworICAgICAg
ICBTb21lIFNWRyBmaWx0ZXJzIGV4ZWN1dGUgYSBodWdlIG51bWJlciBvZiBwaXhlbCBtYW5pcHVs
YXRpb25zLCB3aGljaAorICAgICAgICBjYW5ub3QgYmUgc3BlZCB1cCBieSBncmFwaGljcyBhY2Nl
bGVyYXRvcnMsIHNpbmNlIHRoZWlyIGFsZ29yaXRobSBpcworICAgICAgICB0b28gY29tcGxleC4g
VXNpbmcgdGhlIHBvd2VyIG9mIFN5bW1ldHJpYyBNdWx0aSBQcm9jZXNzaW5nIChTTVApIHdlCisg
ICAgICAgIGNhbiBzcGxpdCB1cCBhIHRhc2sgdG8gc21hbGxlciAoZGF0YSBpbmRlcGVuZGVudCkg
dGFza3MsIHdoaWNoIGNhbiBiZQorICAgICAgICBleGVjdXRlZCBpbmRlcGVuZGVudGx5LgorCisg
ICAgICAgIFRoZSBQYXJhbGxlbEpvYnMgZnJhbWV3b3JrIHByb3ZpZGVzIGEgc2ltcGxlIHdheSBm
b3IgZGlzdHJpYnV0ZWQKKyAgICAgICAgcHJvZ3JhbW1pbmcuIFRoZSBmcmFtZXdvcmsgaXMgYmFz
ZWQgb24gV2ViS2l0J3MgdGhyZWFkaW5nIGluZnJhc3RydWN0dXJlLAorICAgICAgICBPcGVuIE11
bHRpLVByb2Nlc3NpbmcncyAoT3Blbk1QKSBBUEksIGFuZCBsaWJkaXNwYXRjaCBBUEkuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiB3dGYvUGFyYWxsZWxKb2JzLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpQYXJhbGxlbEpvYnM6
OlBhcmFsbGVsSm9icyk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSm9iczo6bnVtYmVyT2ZKb2Jz
KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2JzOjpwYXJhbWV0ZXJGb3JKb2IpOgorICAgICAg
ICAoV1RGOjpQYXJhbGxlbEpvYnM6OmV4ZWN1dGVKb2JzKToKKyAgICAgICAgKiB3dGYvUGFyYWxs
ZWxKb2JzR2VuZXJpYy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25t
ZW50OjpUaHJlYWRQcml2YXRlOjp0cnlMb2NrRm9yKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxF
bnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6ZXhlY3V0ZUpvYik6CisgICAgICAgIChXVEY6OlBh
cmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndhaXRGb3JGaW5pc2gpOgorICAgICAg
ICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQp
OgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpQYXJhbGxlbEVudmlyb25tZW50KToKKyAgICAgICAg
KFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6bnVtYmVyT2ZKb2JzKToKKyAgICAgICAgKFdURjo6
UGFyYWxsZWxFbnZpcm9ubWVudDo6cGFyYW1ldGVyRm9ySm9iKToKKyAgICAgICAgKFdURjo6UGFy
YWxsZWxFbnZpcm9ubWVudDo6ZXhlY3V0ZUpvYnMpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVu
dmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjpUaHJlYWRQcml2YXRlKToKKyAgICAgICAgKFdURjo6
UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3
dGYvUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBhcmFs
bGVsRW52aXJvbm1lbnQ6OlBhcmFsbGVsRW52aXJvbm1lbnQpOgorICAgICAgICAoV1RGOjpQYXJh
bGxlbEVudmlyb25tZW50OjpudW1iZXJPZkpvYnMpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVu
dmlyb25tZW50OjpwYXJhbWV0ZXJGb3JKb2IpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmly
b25tZW50OjpleGVjdXRlSm9icyk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic09wZW5NUC5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6UGFyYWxsZWxFbnZp
cm9ubWVudCk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6Om51bWJlck9mSm9i
cyk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OnBhcmFtZXRlckZvckpvYik6
CisgICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OmV4ZWN1dGVKb2JzKToKKyAgICAg
ICAgKiB3dGYvUGxhdGZvcm0uaDoKKyAgICAgICAgKiB3dGYvd3RmLnByaToKKwogMjAxMS0wNC0x
MSAgQmVuIFRheWxvciAgPGJlbnRheWxvci5zb2x4ODZAZ21haWwuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCmluZGV4IGFkZTQ2OTEuLjJhMzhiYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NzgsNiArNDc4LDExIEBAIGphdmFzY3Jp
cHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc093bkFy
cmF5UHRyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFzc093blB0ci5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
YXJhbGxlbEpvYnNHZW5lcmljLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJh
bGxlbEpvYnNHZW5lcmljLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxK
b2JzTGliZGlzcGF0Y2guaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpv
YnNPcGVuTVAuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bvc3NpYmx5TnVsbC5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKaW5kZXgg
ZDk1MTRlNC4uMjY4MzZkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCkBAIC04NDEsNiArODQxLDI2
IEBACiAJCQk+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3Rm
XFBhcmFsbGVsSm9icy5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHd0ZlxQYXJhbGxlbEpvYnNHZW5lcmljLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgor
CQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUGFyYWxsZWxKb2JzR2VuZXJpYy5o
IgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQ
YXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQYXJhbGxlbEpvYnNPcGVuTVAuaCIKKwkJCT4KKwkJPC9G
aWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUGxhdGZvcm0uaCIKIAkJ
CT4KIAkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyMTczZWZmLi44
NjRjZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI0LDYgKzIyNCwxMSBA
QAogCQk3MTg2QTZFQzEzMTAwQkE1MDA0NDc5RTEgLyogSGV4TnVtYmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MTg2QTZFODEzMTAwQjU3MDA0NDc5
RTEgLyogSGV4TnVtYmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzZGQjlGMEYxMkU4NTE4NjAwNTFBMkVCIC8qIFNIQTEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2RkI5RjBFMTJFODUxODYwMDUx
QTJFQiAvKiBTSEExLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzZGQjlGMTExMkU4NTE5NjAwNTFBMkVCIC8qIFNIQTEuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzZGQjlGMTAxMkU4NTE5NjAwNTFB
MkVCIC8qIFNIQTEuY3BwICovOyB9OworCQk3OUEwMzQ4QjEzNTQ3NUQxMDBBOEM0NUQgLyogUGFy
YWxsZWxKb2JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OUEwMzQ4NjEzNTQ3NUQxMDBBOEM0NUQgLyogUGFyYWxsZWxKb2JzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzlBMDM0OEMxMzU0NzVEMTAw
QThDNDVEIC8qIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMDM0ODcxMzU0NzVEMTAwQThDNDVEIC8qIFBhcmFs
bGVsSm9ic0dlbmVyaWMuY3BwICovOyB9OworCQk3OUEwMzQ4RDEzNTQ3NUQxMDBBOEM0NUQgLyog
UGFyYWxsZWxKb2JzR2VuZXJpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMDM0ODgxMzU0NzVEMTAwQThDNDVEIC8qIFBhcmFsbGVsSm9ic0dlbmVy
aWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
OUEwMzQ4RTEzNTQ3NUQxMDBBOEM0NUQgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTAzNDg5MTM1NDc1
RDEwMEE4QzQ1RCAvKiBQYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5QTAzNDhGMTM1NDc1RDEwMEE4QzQ1
RCAvKiBQYXJhbGxlbEpvYnNPcGVuTVAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5QTAzNDhBMTM1NDc1RDEwMEE4QzQ1RCAvKiBQYXJhbGxlbEpvYnNP
cGVuTVAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNEVFNzA4MEVCQjc5NjMwMDU5
MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVD
aGFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
RTRFRTcwRTBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQk3
RUZGMDA2NDBFQzA1QTlBMDBBQTdDOTMgLyogTm9kZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFRkYwMDYzMEVDMDVBOUEwMEFBN0M5MyAvKiBO
b2RlSW5mby5oICovOyB9OwpAQCAtODg2LDYgKzg5MSwxMSBAQAogCQk3MTg2QTZFODEzMTAwQjU3
MDA0NDc5RTEgLyogSGV4TnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhleE51bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NkZCOUYwRTEyRTg1
MTg2MDA1MUEyRUIgLyogU0hBMS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
SEExLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2RkI5RjEwMTJFODUxOTYwMDUx
QTJFQiAvKiBTSEExLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNI
QTEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwMzQ4NjEzNTQ3NUQxMDBB
OEM0NUQgLyogUGFyYWxsZWxKb2JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhcmFsbGVsSm9icy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwMzQ4NzEz
NTQ3NUQxMDBBOEM0NUQgLyogUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJhbGxlbEpvYnNHZW5lcmljLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlBMDM0ODgxMzU0NzVEMTAwQThDNDVEIC8qIFBhcmFsbGVs
Sm9ic0dlbmVyaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxK
b2JzR2VuZXJpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwMzQ4OTEzNTQ3
NUQxMDBBOEM0NUQgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzlBMDM0OEExMzU0NzVEMTAwQThDNDVEIC8qIFBhcmFsbGVsSm9i
c09wZW5NUC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbEpvYnNP
cGVuTVAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0UyQzZDOTgwRDMxQzZCNjAw
MkQ0NEUyIC8qIFNjb3BlQ2hhaW5NYXJrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjb3BlQ2hhaW5NYXJrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFNEVF
NzA4MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVDaGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3RTRFRTcwRTBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlQ2hhaW4uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY4MCw2ICsxNjkwLDExIEBACiAJCQkJQkNG
QkU2OTUxMjI1NjBFODAwMzA5RTlEIC8qIFBhc3NPd25BcnJheVB0ci5oICovLAogCQkJCTQ0REQ0
ODUyMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3duUHRyLmggKi8sCiAJCQkJNjU4MEY3OTUwOTQw
NzA1NjAwODJDMjE5IC8qIFBhc3NSZWZQdHIuaCAqLywKKwkJCQk3OUEwMzQ4NjEzNTQ3NUQxMDBB
OEM0NUQgLyogUGFyYWxsZWxKb2JzLmggKi8sCisJCQkJNzlBMDM0ODcxMzU0NzVEMTAwQThDNDVE
IC8qIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwICovLAorCQkJCTc5QTAzNDg4MTM1NDc1RDEwMEE4
QzQ1RCAvKiBQYXJhbGxlbEpvYnNHZW5lcmljLmggKi8sCisJCQkJNzlBMDM0ODkxMzU0NzVEMTAw
QThDNDVEIC8qIFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmggKi8sCisJCQkJNzlBMDM0OEExMzU0
NzVEMTAwQThDNDVEIC8qIFBhcmFsbGVsSm9ic09wZW5NUC5oICovLAogCQkJCTY1RDZEODdFMDlC
NUEzMkUwMDAyRTRENyAvKiBQbGF0Zm9ybS5oICovLAogCQkJCUE3RDY0OUE5MTAxNTIyNEUwMDlC
MkUxQiAvKiBQb3NzaWJseU51bGwuaCAqLywKIAkJCQlFNEQ4Q0U5QjEyRkM0MkUxMDBCQzlGNUEg
LyogQmxvb21GaWx0ZXIuaCAqLywKQEAgLTI1MzcsNiArMjU1MiwxMCBAQAogCQkJCTE0MkQ2RjA5
MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
RDZGMEQxMzUzOUEyRjAwQjAyRTg2IC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDJENkYxMjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3OUEwMzQ4QjEzNTQ3NUQxMDBBOEM0NUQgLyogUGFyYWxsZWxKb2JzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3OUEwMzQ4RDEzNTQ3NUQxMDBBOEM0NUQgLyogUGFyYWxsZWxKb2JzR2VuZXJp
Yy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlBMDM0OEUxMzU0NzVEMTAwQThDNDVEIC8qIFBhcmFs
bGVsSm9ic0xpYmRpc3BhdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OUEwMzQ4RjEzNTQ3NUQx
MDBBOEM0NUQgLyogUGFyYWxsZWxKb2JzT3Blbk1QLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI5ODIs
NiArMzAwMSw3IEBACiAJCQkJMTQyRDZGMEMxMzUzOUEyRjAwQjAyRTg2IC8qIE1hcmtlZFNwYWNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJr
U3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMTMxMzUzOUE0MTAwQjAyRTg2IC8q
IE1hcmtTdGFja1Bvc2l4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5QTAzNDhDMTM1NDc1RDEw
MEE4QzQ1RCAvKiBQYXJhbGxlbEpvYnNHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggOTFiNjk0NC4uODExMjBmYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC01Nyw2ICs1Nywx
MCBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBQYXNzT3duQXJyYXlQdHIuaAogICAgIFBhc3NPd25Q
dHIuaAogICAgIFBhc3NSZWZQdHIuaAorICAgIFBhcmFsbGVsSm9icy5oCisgICAgUGFyYWxsZWxK
b2JzR2VuZXJpYy5oCisgICAgUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaAorICAgIFBhcmFsbGVs
Sm9ic09wZW5NUC5oCiAgICAgUGxhdGZvcm0uaAogICAgIFBvc3NpYmx5TnVsbC5oCiAgICAgUmFu
ZG9tTnVtYmVyLmgKQEAgLTExOCw2ICsxMjIsNyBAQCBTRVQoV1RGX1NPVVJDRVMKICAgICBNYWlu
VGhyZWFkLmNwcAogICAgIE1ENS5jcHAKICAgICBPU1JhbmRvbVNvdXJjZS5jcHAKKyAgICBQYXJh
bGxlbEpvYnNHZW5lcmljLmNwcAogICAgIFJhbmRvbU51bWJlci5jcHAKICAgICBSZWZDb3VudGVk
TGVha0NvdW50ZXIuY3BwCiAgICAgU0hBMS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bh
cmFsbGVsSm9icy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYWU3MjAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9i
cy5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJr
aXQub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhcmFsbGVs
Sm9ic19oCisjZGVmaW5lIFBhcmFsbGVsSm9ic19oCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgi
CisjaW5jbHVkZSAiQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKyNpbmNs
dWRlICJSZWZQdHIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoUEFS
QUxMRUxfSk9CUykKKworLy8gVXNhZ2U6CisvLworLy8gI2lmIEVOQUJMRShQQVJBTExFTF9KT0JT
KQorLy8KKy8vICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKKy8vICAgICBQYXJhbGxl
bEpvYnM8VHlwZU9mUGFyYW1ldGVyPiBwYXJhbGxlbEpvYnMoJndvcmtlciBbLCByZXF1ZXN0ZWRO
dW1iZXJPZkpvYnNdKTsKKy8vCisvLyAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Cisv
LyAgICAgaW50IGkgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisvLyAgICAgZm9yKDsg
aSA+IDA7IC0taSkgeworLy8gICAgICAgVHlwZU9mUGFyYW1ldGVyKiBwYXJhbXMgPSBwYXJhbGxl
bEpvYnMucGFyYW1ldGVyRm9ySm9iKGkpOworLy8gICAgICAgcGFyYW1zLT5hdHRyMSA9IGxvY2Fs
VmFycyAuLi4KKy8vICAgICAgIC4uLgorLy8gICAgIH0KKy8vCisvLyAgICAgLy8gRXhlY3V0ZSBw
YXJhbGxlbCBqb2JzCisvLyAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGVKb2JzKCk7CisvLworLy8g
I2Vsc2UKKy8vCisvLyAgICAgaW5saW5lRnVuY3Rpb24oYXJncy4uLik7CisvLworLy8gI2VuZGlm
IC8vIEVOQUJMRShQQVJBTExFTF9KT0JTKQorCisjaWYgRU5BQkxFKFRIUkVBRElOR19HRU5FUklD
KQorI2luY2x1ZGUgIlBhcmFsbGVsSm9ic0dlbmVyaWMuaCIKKworI2VsaWYgRU5BQkxFKFRIUkVB
RElOR19PUEVOTVApCisjaW5jbHVkZSAiUGFyYWxsZWxKb2JzT3Blbk1QLmgiCisKKyNlbGlmIEVO
QUJMRShUSFJFQURJTkdfTElCRElTUEFUQ0gpCisjaW5jbHVkZSAiUGFyYWxsZWxKb2JzTGliZGlz
cGF0Y2guaCIKKworI2Vsc2UKKyNlcnJvciAiTm8gcGFyYWxsZWwgcHJvY2Vzc2luZyBBUEkgZm9y
IFBhcmFsbGVsSm9icyIKKworI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgorY2xhc3MgUGFyYWxsZWxKb2JzIDogcHVibGljIFBhcmFsbGVsRW52aXJv
bm1lbnQgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoKldvcmtlckZ1bmN0aW9uKShUeXBl
Kik7CisKKyAgICBQYXJhbGxlbEpvYnMoV29ya2VyRnVuY3Rpb24gZnVuYywgaW50IHJlcXVlc3Rl
ZEpvYk51bWJlciA9IDApIDoKKyAgICAgICAgUGFyYWxsZWxFbnZpcm9ubWVudChyZWludGVycHJl
dF9jYXN0PFRocmVhZEZ1bmN0aW9uPihmdW5jKSwgc2l6ZW9mKFR5cGUpLCByZXF1ZXN0ZWRKb2JO
dW1iZXIpCisgICAgeworICAgIH0KKworICAgIGludCBudW1iZXJPZkpvYnMoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFBhcmFsbGVsRW52aXJvbm1lbnQ6Om51bWJlck9mSm9icygpOworICAgIH0K
KworICAgIFR5cGUqIHBhcmFtZXRlckZvckpvYihpbnQgaSkKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PFR5cGUqPihQYXJhbGxlbEVudmlyb25tZW50OjpwYXJhbWV0ZXJG
b3JKb2IoaSkpOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZUpvYnMoKQorICAgIHsKKyAgICAg
ICAgUGFyYWxsZWxFbnZpcm9ubWVudDo6ZXhlY3V0ZUpvYnMoKTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQYXJhbGxlbEpvYnM7CisKKyNlbmRpZiAvLyBF
TkFCTEUoUEFSQUxMRUxfSk9CUykKKworI2VuZGlmIC8vIFBhcmFsbGVsSm9ic19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTVmOGVmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcApAQCAtMCww
ICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoUEFSQUxMRUxfSk9CUykgJiYgRU5BQkxFKFRIUkVBRElOR19HRU5FUklDKQorCisjaW5j
bHVkZSAiUGFyYWxsZWxKb2JzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitWZWN0b3I8IFJlZlB0
cjxQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlPiA+KiBQYXJhbGxlbEVudmlyb25t
ZW50OjpzX3RocmVhZFBvb2wgPSAwOworCitib29sIFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVh
ZFByaXZhdGU6OnRyeUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9ubWVudCogcGFyZW50KQoreworICAg
IGJvb2wgbG9ja2VkID0gbV9tdXRleC50cnlMb2NrKCk7CisKKyAgICBpZiAoIWxvY2tlZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcGFyZW50KSB7CisgICAgICAgIG1fbXV0
ZXgudW5sb2NrKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1f
dGhyZWFkSUQpCisgICAgICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoJlBhcmFsbGVsRW52
aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCwgdGhpcywgIlBhcmFsbGVsIHdv
cmtlciIpOworCisgICAgaWYgKG1fdGhyZWFkSUQpCisgICAgICAgIG1fcGFyZW50ID0gcGFyZW50
OworCisgICAgbV9tdXRleC51bmxvY2soKTsKKyAgICByZXR1cm4gbV90aHJlYWRJRDsKK30KKwor
dm9pZCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjpleGVjdXRlSm9iKFRocmVh
ZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCB2b2lkKiBwYXJhbWV0ZXJzKQoreworICAgIE11dGV4
TG9ja2VyIGxvY2sobV9tdXRleCk7CisKKyAgICBtX3RocmVhZEZ1bmN0aW9uID0gdGhyZWFkRnVu
Y3Rpb247CisgICAgbV9wYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKKyAgICBtX3J1bm5pbmcgPSB0
cnVlOworICAgIG1fdGhyZWFkQ29uZGl0aW9uLnNpZ25hbCgpOworfQorCit2b2lkIFBhcmFsbGVs
RW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndhaXRGb3JGaW5pc2goKQoreworICAgIE11dGV4
TG9ja2VyIGxvY2sobV9tdXRleCk7CisKKyAgICB3aGlsZSAobV9ydW5uaW5nKQorICAgICAgICBt
X3RocmVhZENvbmRpdGlvbi53YWl0KG1fbXV0ZXgpOworfQorCit2b2lkKiBQYXJhbGxlbEVudmly
b25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQodm9pZCogdGhyZWFkRGF0YSkKK3sK
KyAgICBUaHJlYWRQcml2YXRlKiBzaGFyZWRUaHJlYWQgPSByZWludGVycHJldF9jYXN0PFRocmVh
ZFByaXZhdGUqPih0aHJlYWREYXRhKTsKKyAgICBNdXRleExvY2tlciBsb2NrKHNoYXJlZFRocmVh
ZC0+bV9tdXRleCk7CisKKyAgICB3aGlsZSAoc2hhcmVkVGhyZWFkLT5tX3RocmVhZElEKSB7Cisg
ICAgICAgIGlmIChzaGFyZWRUaHJlYWQtPm1fcnVubmluZykgeworICAgICAgICAgICAgKCpzaGFy
ZWRUaHJlYWQtPm1fdGhyZWFkRnVuY3Rpb24pKHNoYXJlZFRocmVhZC0+bV9wYXJhbWV0ZXJzKTsK
KyAgICAgICAgICAgIHNoYXJlZFRocmVhZC0+bV9ydW5uaW5nID0gZmFsc2U7CisgICAgICAgICAg
ICBzaGFyZWRUaHJlYWQtPm1fcGFyZW50ID0gMDsKKyAgICAgICAgICAgIHNoYXJlZFRocmVhZC0+
bV90aHJlYWRDb25kaXRpb24uc2lnbmFsKCk7CisgICAgICAgIH0KKworICAgICAgICBzaGFyZWRU
aHJlYWQtPm1fdGhyZWFkQ29uZGl0aW9uLndhaXQoc2hhcmVkVGhyZWFkLT5tX211dGV4KTsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKFBBUkFMTEVMX0pPQlMpICYmIEVOQUJMRShUSFJFQURJTkdfR0VORVJJQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3MjY0NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCkBAIC0wLDAgKzEs
MTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhcmFsbGVsSm9ic0dlbmVyaWNfaAor
I2RlZmluZSBQYXJhbGxlbEpvYnNHZW5lcmljX2gKKworI2lmIEVOQUJMRShUSFJFQURJTkdfR0VO
RVJJQykKKworI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4UGFyYWxsZWxUaHJlYWRzID0gMjsKKworY2xh
c3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFyYWxs
ZWxFbnZpcm9ubWVudCk7Citwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVu
Y3Rpb24pKHZvaWQqKTsKKworICAgIFBhcmFsbGVsRW52aXJvbm1lbnQoVGhyZWFkRnVuY3Rpb24g
dGhyZWFkRnVuY3Rpb24sIHNpemVfdCBzaXplT2ZQYXJhbWV0ZXIsIHVuc2lnbmVkIGludCByZXF1
ZXN0ZWRKb2JOdW1iZXIpIDoKKyAgICAgICAgbV90aHJlYWRGdW5jdGlvbih0aHJlYWRGdW5jdGlv
biksCisgICAgICAgIG1fc2l6ZU9mUGFyYW1ldGVyKHNpemVPZlBhcmFtZXRlcikKKyAgICB7Cisg
ICAgICAgIGlmICghcmVxdWVzdGVkSm9iTnVtYmVyIHx8IHJlcXVlc3RlZEpvYk51bWJlciA+IG1h
eFBhcmFsbGVsVGhyZWFkcykKKyAgICAgICAgICAgIHJlcXVlc3RlZEpvYk51bWJlciA9IG1heFBh
cmFsbGVsVGhyZWFkczsKKworICAgICAgICBpZiAoIXNfdGhyZWFkUG9vbCkKKyAgICAgICAgICAg
IHNfdGhyZWFkUG9vbCA9IG5ldyBWZWN0b3I8IFJlZlB0cjxUaHJlYWRQcml2YXRlPiA+KCk7CisK
KyAgICAgICAgLy8gVGhlIG1haW4gdGhyZWFkIHNob3VsZCBiZSBhbHNvIGEgd29ya2VyLgorICAg
ICAgICB1bnNpZ25lZCBpbnQgbWF4TmV3VGhyZWFkcyA9IHJlcXVlc3RlZEpvYk51bWJlciAtIDE7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtYXhQYXJhbGxlbFRocmVh
ZHMgJiYgbV90aHJlYWRzLnNpemUoKSA8IG1heE5ld1RocmVhZHM7ICsraSkgeworICAgICAgICAg
ICAgaWYgKHNfdGhyZWFkUG9vbC0+c2l6ZSgpIDwgaSArIDEpCisgICAgICAgICAgICAgICAgc190
aHJlYWRQb29sLT5hcHBlbmQoVGhyZWFkUHJpdmF0ZTo6Y3JlYXRlKCkpOworCisgICAgICAgICAg
ICBpZiAoKCpzX3RocmVhZFBvb2wpW2ldLT50cnlMb2NrRm9yKHRoaXMpKQorICAgICAgICAgICAg
ICAgIG1fdGhyZWFkcy5hcHBlbmQoKCpzX3RocmVhZFBvb2wpW2ldKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fbnVtYmVyT2ZKb2JzID0gbV90aHJlYWRzLnNpemUoKSArIDE7CisKKyAgICAgICAg
bV9wYXJhbWV0ZXJzID0gQnl0ZUFycmF5OjpjcmVhdGUobV9zaXplT2ZQYXJhbWV0ZXIgKiBtX251
bWJlck9mSm9icyk7CisgICAgfQorCisgICAgaW50IG51bWJlck9mSm9icygpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9udW1iZXJPZkpvYnM7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciog
cGFyYW1ldGVyRm9ySm9iKGludCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbnVtYmVyT2ZK
b2JzID49IGkpOworICAgICAgICByZXR1cm4gbV9wYXJhbWV0ZXJzLT5kYXRhKCkgKyAoaSAtIDEp
ICogbV9zaXplT2ZQYXJhbWV0ZXI7CisgICAgfQorCisgICAgdm9pZCBleGVjdXRlSm9icygpCisg
ICAgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gbV90aHJlYWRzLnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKQorICAgICAgICAgICAgbV90aHJlYWRzW2ldLT5leGVjdXRlSm9iKG1f
dGhyZWFkRnVuY3Rpb24sIHBhcmFtZXRlckZvckpvYihpICsgMSkpOworCisgICAgICAgIC8vIFRo
ZSB3b3JrIGZvciB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgKCptX3RocmVhZEZ1bmN0aW9uKShw
YXJhbWV0ZXJGb3JKb2IobV90aHJlYWRzLnNpemUoKSArIDEpKTsKKworICAgICAgICAvLyBXYWl0
IHVudGlsIGFsbCBqb2JzIGFyZSBkb25lLgorICAgICAgICBmb3IgKGkgPSBtX3RocmVhZHMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCisgICAgICAgICAgICBtX3RocmVhZHNbaV0tPndhaXRGb3JG
aW5pc2goKTsKKyAgICB9CisKKyAgICBjbGFzcyBUaHJlYWRQcml2YXRlIDogcHVibGljIFJlZkNv
dW50ZWQ8VGhyZWFkUHJpdmF0ZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgVGhyZWFkUHJpdmF0
ZSgpCisgICAgICAgICAgICA6IG1fdGhyZWFkSUQoMCkKKyAgICAgICAgICAgICwgbV9ydW5uaW5n
KGZhbHNlKQorICAgICAgICAgICAgLCBtX3BhcmVudCgwKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHRyeUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9ubWVudCopOworCisgICAg
ICAgIHZvaWQgZXhlY3V0ZUpvYihUaHJlYWRGdW5jdGlvbiwgdm9pZCopOworCisgICAgICAgIHZv
aWQgd2FpdEZvckZpbmlzaCgpOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZFBy
aXZhdGU+IGNyZWF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGhyZWFkUHJpdmF0ZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkKiB3
b3JrZXJUaHJlYWQodm9pZCopOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVGhyZWFkSWRlbnRp
ZmllciBtX3RocmVhZElEOworICAgICAgICBib29sIG1fcnVubmluZzsKKyAgICAgICAgUGFyYWxs
ZWxFbnZpcm9ubWVudCogbV9wYXJlbnQ7CisKKyAgICAgICAgbXV0YWJsZSBNdXRleCBtX211dGV4
OworICAgICAgICBUaHJlYWRDb25kaXRpb24gbV90aHJlYWRDb25kaXRpb247CisKKyAgICAgICAg
VGhyZWFkRnVuY3Rpb24gbV90aHJlYWRGdW5jdGlvbjsKKyAgICAgICAgdm9pZCogbV9wYXJhbWV0
ZXJzOworICAgIH07CisKK3ByaXZhdGU6CisgICAgVGhyZWFkRnVuY3Rpb24gbV90aHJlYWRGdW5j
dGlvbjsKKyAgICBzaXplX3QgbV9zaXplT2ZQYXJhbWV0ZXI7CisgICAgaW50IG1fbnVtYmVyT2ZK
b2JzOworICAgIFJlZlB0cjxCeXRlQXJyYXk+IG1fcGFyYW1ldGVyczsKKworICAgIFZlY3Rvcjwg
UmVmUHRyPFRocmVhZFByaXZhdGU+ID4gbV90aHJlYWRzOworICAgIHN0YXRpYyBWZWN0b3I8IFJl
ZlB0cjxUaHJlYWRQcml2YXRlPiA+KiBzX3RocmVhZFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShUSFJFQURJTkdfR0VORVJJQykKKworCisjZW5kaWYg
Ly8gUGFyYWxsZWxKb2JzR2VuZXJpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1BhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1BhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjQwMTc3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaApAQCAtMCwwICsxLDkyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lU
WSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoX2gKKyNkZWZpbmUgUGFy
YWxsZWxKb2JzTGliZGlzcGF0Y2hfaAorCisjaWYgRU5BQkxFKFRIUkVBRElOR19MSUJESVNQQVRD
SCkKKworI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CitzdGF0aWMgY29uc3QgaW50IG1heFBhcmFsbGVsVGhyZWFkcyA9IDI7CisKK2NsYXNzIFBhcmFs
bGVsRW52aXJvbm1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhcmFsbGVsRW52aXJv
bm1lbnQpOworcHJvdGVjdGVkOgorICAgIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2
b2lkKik7CisKKyAgICBQYXJhbGxlbEVudmlyb25tZW50KFRocmVhZEZ1bmN0aW9uIHRocmVhZEZ1
bmN0aW9uLCBzaXplX3Qgc2l6ZU9mUGFyYW1ldGVyLCBpbnQgcmVxdWVzdGVkSm9iTnVtYmVyKSA6
CisgICAgICAgIG1fdGhyZWFkRnVuY3Rpb24odGhyZWFkRnVuY3Rpb24pLAorICAgICAgICBtX3Np
emVPZlBhcmFtZXRlcihzaXplT2ZQYXJhbWV0ZXIpCisgICAgeworICAgICAgICBpZiAoIXJlcXVl
c3RlZEpvYk51bWJlciB8fCByZXF1ZXN0ZWRKb2JOdW1iZXIgPiBtYXhQYXJhbGxlbFRocmVhZHMp
CisgICAgICAgICAgICByZXF1ZXN0ZWRKb2JOdW1iZXIgPSBtYXhQYXJhbGxlbFRocmVhZHM7CisK
KyAgICAgICAgQVNTRVJUKHJlcXVlc3RlZEpvYk51bWJlciA+IDApOworCisgICAgICAgIG1fbnVt
YmVyT2ZKb2JzID0gcmVxdWVzdGVkSm9iTnVtYmVyOworCisgICAgICAgIG1fcGFyYW1ldGVycyA9
IEJ5dGVBcnJheTo6Y3JlYXRlKG1fc2l6ZU9mUGFyYW1ldGVyICogbV9udW1iZXJPZkpvYnMpOwor
ICAgIH0KKworICAgIGludCBudW1iZXJPZkpvYnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
bnVtYmVyT2ZKb2JzOworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIqIHBhcmFtZXRlckZvckpv
YihpbnQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX251bWJlck9mSm9icyA+PSBpKTsKKyAg
ICAgICAgcmV0dXJuIG1fcGFyYW1ldGVycy0+ZGF0YSgpICsgKGkgLSAxKSAqIG1fc2l6ZU9mUGFy
YW1ldGVyOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZUpvYnMoKQorICAgIHsKKyAgICAgICAg
Ly8gbGliZGlzcGF0Y2ggaXMgTk9UIHN1cHBvcnRlZCBpbnNpZGUgYSB0ZW1wbGF0ZQorICAgICAg
ICBkaXNwYXRjaF9xdWV1ZV90IHBhcmFsbGVsSm9ic1F1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3Jl
YXRlKCJQYXJhbGxlbEpvYnMiLCAwKTsKKworICAgICAgICBmb3IgKGludCBpID0gbV9udW1iZXJP
ZkpvYnM7IGkgPiAxOyAtLWkpCisgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhwYXJhbGxlbEpv
YnNRdWV1ZSwgXnsoKm1fdGhyZWFkRnVuY3Rpb24pKHBhcmFtZXRlckZvckpvYihpKSk7fSk7CisK
KyAgICAgICAgLy8gVGhlIHdvcmsgZm9yIHRoZSBtYWluIHRocmVhZC4gV2FpdCB1bnRpbCBhbGwg
am9icyBhcmUgZG9uZS4KKyAgICAgICAgZGlzcGF0Y2hfc3luYyhwYXJhbGxlbEpvYnNRdWV1ZSwg
XnsoKm1fdGhyZWFkRnVuY3Rpb24pKHBhcmFtZXRlckZvckpvYigxKSk7fSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIFRocmVhZEZ1bmN0aW9uIG1fdGhyZWFkRnVuY3Rpb247CisgICAgc2l6ZV90
IG1fc2l6ZU9mUGFyYW1ldGVyOworICAgIGludCBtX251bWJlck9mSm9iczsKKyAgICBSZWZQdHI8
Qnl0ZUFycmF5PiBtX3BhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShUSFJFQURJTkdfTElCRElTUEFUQ0gpCisKKyNlbmRpZiAvLyBQYXJhbGxl
bEpvYnNMaWJkaXNwYXRjaF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BhcmFsbGVsSm9ic09wZW5NUC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxl
bEpvYnNPcGVuTVAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDQ0ZmZm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpv
YnNPcGVuTVAuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9r
aUB3ZWJraXQub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBh
cmFsbGVsSm9ic09wZW5NUF9oCisjZGVmaW5lIFBhcmFsbGVsSm9ic09wZW5NUF9oCisKKyNpZiBF
TkFCTEUoVEhSRUFESU5HX09QRU5NUCkKKworI2luY2x1ZGUgPG9tcC5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUGFyYWxsZWxFbnZpcm9ubWVudCk7Citwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiB2b2lk
ICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqKTsKKworICAgIFBhcmFsbGVsRW52aXJvbm1lbnQoVGhy
ZWFkRnVuY3Rpb24gdGhyZWFkRnVuY3Rpb24sIHNpemVfdCBzaXplT2ZQYXJhbWV0ZXIsIGludCBy
ZXF1ZXN0ZWRKb2JOdW1iZXIpIDoKKyAgICAgICAgbV90aHJlYWRGdW5jdGlvbih0aHJlYWRGdW5j
dGlvbiksCisgICAgICAgIG1fc2l6ZU9mUGFyYW1ldGVyKHNpemVPZlBhcmFtZXRlcikKKyAgICB7
CisgICAgICAgIGludCBtYXhOdW1iZXJPZlRocmVhZHMgPSBvbXBfZ2V0X21heF90aHJlYWRzKCk7
CisKKyAgICAgICAgaWYgKCFyZXF1ZXN0ZWRKb2JOdW1iZXIgfHwgcmVxdWVzdGVkSm9iTnVtYmVy
ID4gbWF4TnVtYmVyT2ZUaHJlYWRzKQorICAgICAgICAgICAgcmVxdWVzdGVkSm9iTnVtYmVyID0g
bWF4TnVtYmVyT2ZUaHJlYWRzOworCisgICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRKb2JOdW1iZXIg
PiAwKTsKKworICAgICAgICBtX251bWJlck9mSm9icyA9IHJlcXVlc3RlZEpvYk51bWJlcjsKKwor
ICAgICAgICBtX3BhcmFtZXRlcnMgPSBCeXRlQXJyYXk6OmNyZWF0ZShtX3NpemVPZlBhcmFtZXRl
ciAqIG1fbnVtYmVyT2ZKb2JzKTsKKyAgICB9CisKKyAgICBpbnQgbnVtYmVyT2ZKb2JzKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX251bWJlck9mSm9iczsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBjaGFyKiBwYXJhbWV0ZXJGb3JKb2IoaW50IGkpCisgICAgeworICAgICAgICBBU1NFUlQobV9u
dW1iZXJPZkpvYnMgPj0gaSk7CisgICAgICAgIHJldHVybiBtX3BhcmFtZXRlcnMtPmRhdGEoKSAr
IChpIC0gMSkgKiBtX3NpemVPZlBhcmFtZXRlcjsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGVK
b2JzKCkKKyAgICB7CisgICAgICAgIG9tcF9zZXRfbnVtX3RocmVhZHMobV9udW1iZXJPZkpvYnMp
OworCisjcHJhZ21hIG9tcCBwYXJhbGxlbCBmb3IKKyAgICAgICAgZm9yIChpbnQgaSA9IG1fbnVt
YmVyT2ZKb2JzOyBpID4gMDsgLS1pKQorICAgICAgICAgICAgKCptX3RocmVhZEZ1bmN0aW9uKShw
YXJhbWV0ZXJGb3JKb2IoaSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWRGdW5jdGlv
biBtX3RocmVhZEZ1bmN0aW9uOworICAgIHNpemVfdCBtX3NpemVPZlBhcmFtZXRlcjsKKyAgICBp
bnQgbV9udW1iZXJPZkpvYnM7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4gbV9wYXJhbWV0ZXJzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFESU5HX09Q
RU5NUCkKKworI2VuZGlmIC8vIFBhcmFsbGVsSm9ic09wZW5NUF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1BsYXRmb3JtLmgKaW5kZXggMDJmMmU0Yi4uYzRiMmM0MSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaApAQCAtMTE4Niw2ICsxMTg2LDE0IEBACiAjZGVmaW5lIEVOQUJMRV9C
UkFOQ0hfQ09NUEFDVElPTiAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9USFJFQURJ
TkdfT1BFTk1QKSAmJiBkZWZpbmVkKF9PUEVOTVApCisjZGVmaW5lIEVOQUJMRV9USFJFQURJTkdf
T1BFTk1QIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX1BBUkFMTEVMX0pPQlMpICYm
ICFFTkFCTEUoU0lOR0xFX1RIUkVBREVEKSAmJiAoRU5BQkxFKFRIUkVBRElOR19HRU5FUklDKSB8
fCBFTkFCTEUoVEhSRUFESU5HX0xJQkRJU1BBVENIKSB8fCBFTkFCTEUoVEhSRUFESU5HX09QRU5N
UCkpCisjZGVmaW5lIEVOQUJMRV9QQVJBTExFTF9KT0JTIDEKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KEdMSUJfU1VQUE9SVCkKICNpbmNsdWRlICJHVHlwZWRlZnMuaCIKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi93dGYucHJpCmluZGV4IDVmMTVlYjAuLjEwYjQxZTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL3d0Zi5wcmkKQEAgLTIxLDYgKzIxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgd3RmL3F0L1Ro
cmVhZGluZ1F0LmNwcCBcCiAgICAgd3RmL1BhZ2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgXAogICAg
IHd0Zi9QYWdlQmxvY2suY3BwIFwKKyAgICB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAgXAog
ICAgIHd0Zi9SYW5kb21OdW1iZXIuY3BwIFwKICAgICB3dGYvUmVmQ291bnRlZExlYWtDb3VudGVy
LmNwcCBcCiAgICAgd3RmL1NIQTEuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNWY2NmRlLi4yYjM3MTBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDQtMTIgIEdhYm9yIExva2kgIDxs
b2tpQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgU3BlZWRpbmcgdXAgU1ZHIGZpbHRlcnMgd2l0aCBtdWx0aWNvcmUgKFNNUCkgc3Vw
cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5
MDMKKworICAgICAgICBTb21lIFNWRyBmaWx0ZXJzIGV4ZWN1dGUgYSBodWdlIG51bWJlciBvZiBw
aXhlbCBtYW5pcHVsYXRpb25zLCB3aGljaAorICAgICAgICBjYW5ub3QgYmUgc3BlZCB1cCBieSBn
cmFwaGljcyBhY2NlbGVyYXRvcnMsIHNpbmNlIHRoZWlyIGFsZ29yaXRobSBpcworICAgICAgICB0
b28gY29tcGxleC4gVXNpbmcgdGhlIHBvd2VyIG9mIFN5bW1ldHJpYyBNdWx0aSBQcm9jZXNzaW5n
IChTTVApIHdlCisgICAgICAgIGNhbiBzcGxpdCB1cCBhIHRhc2sgdG8gc21hbGxlciAoZGF0YSBp
bmRlcGVuZGVudCkgdGFza3MsIHdoaWNoIGNhbiBiZQorICAgICAgICBleGVjdXRlZCBpbmRlcGVu
ZGVudGx5LgorCisgICAgICAgIFRoZSBQYXJhbGxlbEpvYnMgZnJhbWV3b3JrIHByb3ZpZGVzIGEg
c2ltcGxlIHdheSBmb3IgZGlzdHJpYnV0ZWQKKyAgICAgICAgcHJvZ3JhbW1pbmcuIFRoZSBmcmFt
ZXdvcmsgaXMgYmFzZWQgb24gV2ViS2l0J3MgdGhyZWFkaW5nIGluZnJhc3RydWN0dXJlLAorICAg
ICAgICBPcGVuIE11bHRpLVByb2Nlc3NpbmcncyAoT3Blbk1QKSBBUEksIGFuZCBsaWJkaXNwYXRj
aCBBUEkuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvUGFyYWxsZWxKb2JzLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpQYWlu
dGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpub2lzZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOgorCiAyMDExLTA0LTA2ICBQaGlsaXBwZSBOb3Jt
YW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4g
Um9iaW5zb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvUGFyYWxsZWxKb2JzLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYv
UGFyYWxsZWxKb2JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2NGU5
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9QYXJhbGxlbEpvYnMuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfUGFy
YWxsZWxKb2JzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfUGFyYWxsZWxKb2JzX2gKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9QYXJhbGxlbEpvYnMuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CmluZGV4IDYzMDYwZTEuLjJmMDY5ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTQsNiArNCw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2ICszMyw3IEBACiAKICNpbmNsdWRlIDx3dGYvQnl0ZUFy
cmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFyYWxs
ZWxKb2JzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTUyLDcgKzE1NCw2IEBAIEZF
VHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQs
IGNvbnN0IEludFNpemUmIHBhaW50CiAgICAgLCBoZWlnaHQoMCkKICAgICAsIHdyYXBYKDApCiAg
ICAgLCB3cmFwWSgwKQotICAgICwgY2hhbm5lbCgwKQogICAgICwgZmlsdGVyU2l6ZShwYWludGlu
Z1NpemUpCiB7CiB9CkBAIC0yMjQsNyArMjI1LDcgQEAgaW5saW5lIHZvaWQgY2hlY2tOb2lzZShp
bnQmIG5vaXNlVmFsdWUsIGludCBsaW1pdFZhbHVlLCBpbnQgbmV3VmFsdWUpCiAgICAgICAgIG5v
aXNlVmFsdWUgLT0gbmV3VmFsdWUgLSAxOwogfQogCi1mbG9hdCBGRVR1cmJ1bGVuY2U6Om5vaXNl
MkQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVj
dG9yKQorZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKGludCBjaGFubmVsLCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCiB7CiAgICAg
c3RydWN0IE5vaXNlIHsKICAgICAgICAgaW50IG5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7CkBA
IC0yNTksMjMgKzI2MCwyMyBAQCBmbG9hdCBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVgogCiAgICAgLy8gVGhp
cyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEv
ZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCiAgICAgaW50IHRlbXAgPSBwYWludGlu
Z0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9u
SW50ZWdlclZhbHVlXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0
YS5jaGFubmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxd
W3RlbXBdOwogICAgIHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBxWzBd
ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogcVsxXTsKICAgICB0ZW1wID0g
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5v
aXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOwotICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
cGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOworICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1bdGVtcF07CiAgICAgdiA9IChub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9u
VmFsdWUgLSAxKSAqIHFbMF0gKyBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBx
WzFdOwogICAgIGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKICAgICB0ZW1wID0g
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQ
b3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOwotICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
cGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOworICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1bdGVtcF07CiAgICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25W
YWx1ZSAqIHFbMF0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBx
WzFdOwogICAgIHRlbXAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNl
SW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOwotICAgIHEgPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbcGFpbnRpbmdEYXRhLmNoYW5uZWxdW3RlbXBdOworICAgIHEg
PSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bdGVtcF07CiAgICAgdiA9IChub2lzZVgu
bm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIHFbMF0gKyAobm9pc2VZLm5vaXNlUG9z
aXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzFdOwogICAgIGIgPSBsaW5lYXJJbnRlcnBvbGF0
aW9uKHN4LCB1LCB2KTsKICAgICByZXR1cm4gbGluZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7
CiB9CiAKLXVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFs
dWVGb3JQb2ludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCit1bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZh
bHVlRm9yUG9pbnQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBmbG9hdCB0aWxlV2lkdGggPSBwYWludGluZ0Rh
dGEuZmlsdGVyU2l6ZS53aWR0aCgpOwogICAgIEFTU0VSVCh0aWxlV2lkdGggPiAwKTsKQEAgLTMx
Myw5ICszMTQsOSBAQCB1bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRhJiBwYWludAogICAgIGZsb2F0IHJhdGlvID0g
MTsKICAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7ICsrb2N0
YXZlKSB7CiAgICAgICAgIGlmIChtX3R5cGUgPT0gRkVUVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5P
SVNFKQotICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFp
bnRpbmdEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCArPSBub2lzZTJEKGNoYW5uZWwsIHBhaW50aW5nRGF0YSwgbm9pc2VWZWN0
b3IpIC8gcmF0aW87CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlv
blJlc3VsdCArPSBmYWJzZihub2lzZTJEKHBhaW50aW5nRGF0YSwgbm9pc2VWZWN0b3IpKSAvIHJh
dGlvOworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IGZhYnNmKG5vaXNl
MkQoY2hhbm5lbCwgcGFpbnRpbmdEYXRhLCBub2lzZVZlY3RvcikpIC8gcmF0aW87CiAgICAgICAg
IG5vaXNlVmVjdG9yLnNldFgobm9pc2VWZWN0b3IueCgpICogMik7CiAgICAgICAgIG5vaXNlVmVj
dG9yLnNldFkobm9pc2VWZWN0b3IueSgpICogMik7CiAgICAgICAgIHJhdGlvICo9IDI7CkBAIC0z
MzgsNiArMzM5LDMxIEBAIHVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJi
dWxlbmNlVmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEmIHBhaW50CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSk7CiB9
CiAKK2lubGluZSB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihCeXRlQXJyYXkqIHBpeGVs
QXJyYXksIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkK
K3sKKyAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7CisgICAg
SW50UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CisgICAgaW50IGlu
ZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7
CisgICAgaW50IGNoYW5uZWw7CisKKyAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsg
Kyt5KSB7CisgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CisgICAgICAgIHBvaW50
LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmls
dGVyUmVnaW9uLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54
KCkgKyAxKTsKKyAgICAgICAgICAgIGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2No
YW5uZWwsICsraW5kZXhPZlBpeGVsQ2hhbm5lbCkKKyAgICAgICAgICAgICAgICBwaXhlbEFycmF5
LT5zZXQoaW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9p
bnQoY2hhbm5lbCwgcGFpbnRpbmdEYXRhLCBmaWx0ZXIoKS0+bWFwQWJzb2x1dGVQb2ludFRvTG9j
YWxQb2ludChwb2ludCkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2lmIEVOQUJMRShQQVJB
TExFTF9KT0JTKQordm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lv
blBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCit7CisgICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5maWxs
UmVnaW9uKHBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEs
IHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7Cit9CisjZW5kaWYgLy8gRU5B
QkxFKFBBUkFMTEVMX0pPQlMpCisKIHZvaWQgRkVUdXJidWxlbmNlOjphcHBseSgpCiB7CiAgICAg
aWYgKGhhc1Jlc3VsdCgpKQpAQCAtMzUyLDE5ICszNzgsNDIgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6
OmFwcGx5KCkKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgcm91bmRlZElu
dFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKSk7CiAgICAgaW5pdFBhaW50
KHBhaW50aW5nRGF0YSk7CiAKLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQ
YWludFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IHBvaW50OwotICAgIHBvaW50LnNldFkoZmlsdGVy
UmVnaW9uLnkoKSk7Ci0gICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSAwOwotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAg
ICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7Ci0gICAgICAgIHBvaW50LnNldFgoZmlsdGVy
UmVnaW9uLngoKSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgYWJzb2x1dGVQYWludFJl
Y3QoKS53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIHBvaW50LnNldFgocG9pbnQueCgpICsg
MSk7Ci0gICAgICAgICAgICBmb3IgKHBhaW50aW5nRGF0YS5jaGFubmVsID0gMDsgcGFpbnRpbmdE
YXRhLmNoYW5uZWwgPCA0OyArK3BhaW50aW5nRGF0YS5jaGFubmVsLCArK2luZGV4T2ZQaXhlbENo
YW5uZWwpCi0gICAgICAgICAgICAgICAgcGl4ZWxBcnJheS0+c2V0KGluZGV4T2ZQaXhlbENoYW5u
ZWwsIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwgZmlsdGVy
KCktPm1hcEFic29sdXRlUG9pbnRUb0xvY2FsUG9pbnQocG9pbnQpKSk7CisjaWYgRU5BQkxFKFBB
UkFMTEVMX0pPQlMpCisKKyAgICBpbnQgb3B0aW1hbFRocmVhZE51bWJlciA9IChhYnNvbHV0ZVBh
aW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpKSAvIHNfbWlu
aW1hbFJlY3REaW1lbnNpb247CisgICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Cisg
ICAgICAgIC8vIEluaXRpYWxpemUgcGFyYWxsZWwgam9icworICAgICAgICBQYXJhbGxlbEpvYnM8
RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKworICAgICAgICAvLyBG
aWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKKyAgICAgICAgaW50IGkgPSBwYXJhbGxlbEpvYnMubnVt
YmVyT2ZKb2JzKCk7CisgICAgICAgIGlmIChpID4gMSkgeworICAgICAgICAgICAgaW50IHN0YXJ0
WSA9IDA7CisgICAgICAgICAgICBpbnQgc3RlcFkgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdo
dCgpIC8gaTsKKyAgICAgICAgICAgIGZvciAoOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICAg
ICAgRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXJG
b3JKb2IoaSk7CisgICAgICAgICAgICAgICAgcGFyYW1zLT5maWx0ZXIgPSB0aGlzOworICAgICAg
ICAgICAgICAgIHBhcmFtcy0+cGl4ZWxBcnJheSA9IHBpeGVsQXJyYXk7CisgICAgICAgICAgICAg
ICAgcGFyYW1zLT5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAgICAgICAg
IHBhcmFtcy0+c3RhcnRZID0gc3RhcnRZOworICAgICAgICAgICAgICAgIGlmIChpICE9IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5lbmRZID0gc3RhcnRZICsgc3RlcFk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0WSA9IHN0YXJ0WSArIHN0ZXBZOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPmVuZFkgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLmhlaWdodCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBFeGVjdXRl
IHBhcmFsbGVsIGpvYnMKKyAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlSm9icygpOwor
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CisgICAgLy8gRmFsbGJhY2sg
dG8gc2VxdWVudGlhbCBtb2RlIGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBv
ciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwKKworI2VuZGlmIC8vIEVOQUJMRShQQVJBTExF
TF9KT0JTKQorCisgICAgZmlsbFJlZ2lvbihwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIDAsIGFi
c29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpOwogfQogCiB2b2lkIEZFVHVyYnVsZW5jZTo6ZHVt
cCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuaAppbmRleCBkZmViMjIwLi4wNDY2MmJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgK
QEAgLTU4LDYgKzU4LDEwIEBAIHB1YmxpYzoKICAgICBib29sIHN0aXRjaFRpbGVzKCkgY29uc3Q7
CiAgICAgYm9vbCBzZXRTdGl0Y2hUaWxlcyhib29sKTsKIAorI2lmIEVOQUJMRShQQVJBTExFTF9K
T0JTKQorICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOworI2VuZGlmCisK
ICAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogICAg
IApAQCAtNjgsNiArNzIsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBp
bnQgc19ibG9ja1NpemUgPSAyNTY7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9
IHNfYmxvY2tTaXplIC0gMTsKKyNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKyAgICBzdGF0aWMg
Y29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJp
Y2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyNlbmRpZgogCiAgICAgc3RydWN0IFBh
aW50aW5nRGF0YSB7CiAgICAgICAgIGxvbmcgc2VlZDsKQEAgLTc3LDE4ICs4NCwzMyBAQCBwcml2
YXRlOgogICAgICAgICBpbnQgaGVpZ2h0OwogICAgICAgICBpbnQgd3JhcFg7IC8vIE1pbmltdW0g
dmFsdWUgdG8gd3JhcC4KICAgICAgICAgaW50IHdyYXBZOwotICAgICAgICBpbnQgY2hhbm5lbDsK
ICAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwogCiAgICAgICAgIFBhaW50aW5nRGF0YShsb25n
IHBhaW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKTsKICAgICAgICAgaW5s
aW5lIGxvbmcgcmFuZG9tKCk7CiAgICAgfTsKIAorI2lmIEVOQUJMRShQQVJBTExFTF9KT0JTKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CisgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9i
czsKKworICAgIHN0cnVjdCBGaWxsUmVnaW9uUGFyYW1ldGVycyB7CisgICAgICAgIEZFVHVyYnVs
ZW5jZSogZmlsdGVyOworICAgICAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXk7CisgICAgICAgIFBh
aW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgICAgICBpbnQgc3RhcnRZOworICAgICAgICBp
bnQgZW5kWTsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxs
UmVnaW9uUGFyYW1ldGVycyopOworI2VuZGlmCisKICAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyKiwg
VHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CiAKICAgICBp
bmxpbmUgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgZmxvYXQgbm9pc2UyRChQ
YWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgdW5zaWduZWQgY2hhciBjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBv
aW50Jik7CisgICAgZmxvYXQgbm9pc2UyRChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiwgY29u
c3QgRmxvYXRQb2ludCYpOworICAgIHVuc2lnbmVkIGNoYXIgY2FsY3VsYXRlVHVyYnVsZW5jZVZh
bHVlRm9yUG9pbnQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQm
KTsKKyAgICBpbmxpbmUgdm9pZCBmaWxsUmVnaW9uKEJ5dGVBcnJheSosIFBhaW50aW5nRGF0YSYs
IGludCwgaW50KTsKIAogICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX2Jh
c2VGcmVxdWVuY3lYOwotLSAKMS43LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91082</attachid>
            <date>2011-04-26 01:15:08 -0700</date>
            <delta_ts>2011-04-26 07:41:04 -0700</delta_ts>
            <desc>Speeding up FETurbulence with SMP</desc>
            <filename>0001-Speeding-up-SVG-filters-with-multicore-SMP-support.patch</filename>
            <type>text/plain</type>
            <size>43166</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSAwM2Q3NGQyODQxYWJhOGZjY2MyYjU3NjcyNzU4MWY2YWRkNmMxMGMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVHVlLCAxMiBBcHIgMjAxMSAxNDo1MToxMiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFNwZWVk
aW5nIHVwIFNWRyBmaWx0ZXJzIHdpdGggbXVsdGljb3JlIChTTVApIHN1cHBvcnQKClNpZ25lZC1v
ZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwgICA1MSArKysrKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICB8ICAgIDUg
KwogLi4uL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvaiAgICAgICAgICAgfCAg
IDIwICsrKwogLi4uL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICAg
ICAgfCAgIDIwICsrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dCAg
ICAgICAgICAgfCAgICA1ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2Jz
LmggICAgICAgICAgIHwgIDExNiArKysrKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwICB8ICAgOTggKysrKysrKysrKysrKysKIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oICAgIHwgIDEzOCAr
KysrKysrKysrKysrKysrKysrKwogLi4uL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNM
aWJkaXNwYXRjaC5oICAgfCAgIDg1ICsrKysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QYXJhbGxlbEpvYnNPcGVuTVAuaCAgICAgfCAgIDgxICsrKysrKysrKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oICAgICAgICAgICAgICAgfCAgICA4ICsKIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaSAgICAgICAgICAgICAgICAgIHwgICAgMSAr
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MjcgKysrKwogLi4uL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1BhcmFsbGVsSm9icy5o
ICAgfCAgICA0ICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAgICAgIHwgICA4OSArKysrKysrKysrLS0tCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuaCAgICAgICB8ICAgMjggKysrKy0KIDE2IGZpbGVzIGNoYW5nZWQsIDc1
MyBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9icy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJp
Yy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxl
bEpvYnNMaWJkaXNwYXRjaC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9QYXJhbGxlbEpvYnNPcGVuTVAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9QYXJhbGxlbEpvYnMuaAoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IDVjNjExM2YuLjIwNmUyZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDU0IEBACisyMDExLTA0LTI2ICBHYWJvciBMb2tpICA8bG9raUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNw
ZWVkaW5nIHVwIFNWRyBmaWx0ZXJzIHdpdGggbXVsdGljb3JlIChTTVApIHN1cHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzOTAzCisKKyAgICAg
ICAgU29tZSBTVkcgZmlsdGVycyBleGVjdXRlIGEgaHVnZSBudW1iZXIgb2YgcGl4ZWwgbWFuaXB1
bGF0aW9ucywgd2hpY2gKKyAgICAgICAgY2Fubm90IGJlIHNwZWQgdXAgYnkgZ3JhcGhpY3MgYWNj
ZWxlcmF0b3JzLCBzaW5jZSB0aGVpciBhbGdvcml0aG0gaXMKKyAgICAgICAgdG9vIGNvbXBsZXgu
IFVzaW5nIHRoZSBwb3dlciBvZiBTeW1tZXRyaWMgTXVsdGkgUHJvY2Vzc2luZyAoU01QKSB3ZQor
ICAgICAgICBjYW4gc3BsaXQgdXAgYSB0YXNrIHRvIHNtYWxsZXIgKGRhdGEgaW5kZXBlbmRlbnQp
IHRhc2tzLCB3aGljaCBjYW4gYmUKKyAgICAgICAgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseS4KKwor
ICAgICAgICBUaGUgUGFyYWxsZWxKb2JzIGZyYW1ld29yayBwcm92aWRlcyBhIHNpbXBsZSB3YXkg
Zm9yIGRpc3RyaWJ1dGVkCisgICAgICAgIHByb2dyYW1taW5nLiBUaGUgZnJhbWV3b3JrIGlzIGJh
c2VkIG9uIFdlYktpdCdzIHRocmVhZGluZyBpbmZyYXN0cnVjdHVyZSwKKyAgICAgICAgT3BlbiBN
dWx0aS1Qcm9jZXNzaW5nJ3MgKE9wZW5NUCkgQVBJLCBhbmQgbGliZGlzcGF0Y2ggQVBJLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogd3RmL1BhcmFsbGVsSm9icy5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFyYWxsZWxKb2Jz
OjpQYXJhbGxlbEpvYnMpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEpvYnM6Om51bWJlck9mSm9i
cyk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSm9iczo6cGFyYW1ldGVyRm9ySm9iKToKKyAgICAg
ICAgKFdURjo6UGFyYWxsZWxKb2JzOjpleGVjdXRlSm9icyk6CisgICAgICAgICogd3RmL1BhcmFs
bGVsSm9ic0dlbmVyaWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9u
bWVudDo6VGhyZWFkUHJpdmF0ZTo6dHJ5TG9ja0Zvcik6CisgICAgICAgIChXVEY6OlBhcmFsbGVs
RW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OmV4ZWN1dGVKb2IpOgorICAgICAgICAoV1RGOjpQ
YXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3YWl0Rm9yRmluaXNoKToKKyAgICAg
ICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFk
KToKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6UGFyYWxsZWxFbnZpcm9ubWVudCk6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6Om51bWJlck9mSm9icyk6CisgICAgICAgIChXVEY6
OlBhcmFsbGVsRW52aXJvbm1lbnQ6OnBhcmFtZXRlckZvckpvYik6CisgICAgICAgIChXVEY6OlBh
cmFsbGVsRW52aXJvbm1lbnQ6OmV4ZWN1dGVKb2JzKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxF
bnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6VGhyZWFkUHJpdmF0ZSk6CisgICAgICAgIChXVEY6
OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAgICog
d3RmL1BhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpQYXJh
bGxlbEVudmlyb25tZW50OjpQYXJhbGxlbEVudmlyb25tZW50KToKKyAgICAgICAgKFdURjo6UGFy
YWxsZWxFbnZpcm9ubWVudDo6bnVtYmVyT2ZKb2JzKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxF
bnZpcm9ubWVudDo6cGFyYW1ldGVyRm9ySm9iKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZp
cm9ubWVudDo6ZXhlY3V0ZUpvYnMpOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNPcGVuTVAu
aDogQWRkZWQuCisgICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlBhcmFsbGVsRW52
aXJvbm1lbnQpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpudW1iZXJPZkpv
YnMpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpwYXJhbWV0ZXJGb3JKb2Ip
OgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpleGVjdXRlSm9icyk6CisgICAg
ICAgICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICogd3RmL3d0Zi5wcmk6CisKIDIwMTEtMDQt
MjUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCBhZGU0NjkxLi4yYTM4YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDc4LDYgKzQ3OCwxMSBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25BcnJheVB0
ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25QdHIuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGFyYWxsZWxKb2JzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxs
ZWxKb2JzR2VuZXJpYy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxK
b2JzR2VuZXJpYy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0xp
YmRpc3BhdGNoLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzT3Bl
bk1QLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9Qb3NzaWJseU51bGwuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9SYW5kb21OdW1iZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmluZGV4IDdjODMz
MzkuLjVhOTYyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagpAQCAtODQ1LDYgKzg0NSwyNiBAQAog
CQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxQYXJh
bGxlbEpvYnMuaCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlx3dGZcUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZp
bGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFBhcmFsbGVsSm9ic0dlbmVyaWMuaCIKKwkJ
CT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUGFyYWxs
ZWxKb2JzTGliZGlzcGF0Y2guaCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlx3dGZcUGFyYWxsZWxKb2JzT3Blbk1QLmgiCisJCQk+CisJCTwvRmlsZT4K
KwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFBsYXRmb3JtLmgiCiAJCQk+CiAJ
CTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTNkMDgzNS4uNGRkMDU3
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyNCw2ICsyMjQsMTEgQEAKIAkJ
NzE4NkE2RUMxMzEwMEJBNTAwNDQ3OUUxIC8qIEhleE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzE4NkE2RTgxMzEwMEI1NzAwNDQ3OUUxIC8q
IEhleE51bWJlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc2RkI5RjBGMTJFODUxODYwMDUxQTJFQiAvKiBTSEExLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkZCOUYwRTEyRTg1MTg2MDA1MUEyRUIg
LyogU0hBMS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc2RkI5RjExMTJFODUxOTYwMDUxQTJFQiAvKiBTSEExLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2RkI5RjEwMTJFODUxOTYwMDUxQTJFQiAv
KiBTSEExLmNwcCAqLzsgfTsKKwkJNzkzNEJCN0IxMzYxOTc5MzAwQ0I5OUExIC8qIFBhcmFsbGVs
Sm9icy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkz
NEJCNzYxMzYxOTc5MzAwQ0I5OUExIC8qIFBhcmFsbGVsSm9icy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5MzRCQjdDMTM2MTk3OTQwMENCOTlB
MSAvKiBQYXJhbGxlbEpvYnNHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5MzRCQjc3MTM2MTk3OTMwMENCOTlBMSAvKiBQYXJhbGxlbEpv
YnNHZW5lcmljLmNwcCAqLzsgfTsKKwkJNzkzNEJCN0QxMzYxOTc5NDAwQ0I5OUExIC8qIFBhcmFs
bGVsSm9ic0dlbmVyaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5MzRCQjc4MTM2MTk3OTMwMENCOTlBMSAvKiBQYXJhbGxlbEpvYnNHZW5lcmljLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzkzNEJC
N0UxMzYxOTc5NDAwQ0I5OUExIC8qIFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTM0QkI3OTEzNjE5NzkzMDBD
Qjk5QTEgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTM0QkI3RjEzNjE5Nzk0MDBDQjk5QTEgLyog
UGFyYWxsZWxKb2JzT3Blbk1QLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTM0QkI3QTEzNjE5NzkzMDBDQjk5QTEgLyogUGFyYWxsZWxKb2JzT3Blbk1Q
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0U0
RUU3MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTRFRTcwODBFQkI3OTYzMDA1OTM0QUEg
LyogU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3RTRFRTcwRjBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0RUU3
MEUwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKIAkJN0VGRjAw
NjQwRUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUZGMDA2MzBFQzA1QTlBMDBBQTdDOTMgLyogTm9kZUlu
Zm8uaCAqLzsgfTsKQEAgLTg5MCw2ICs4OTUsMTEgQEAKIAkJNzE4NkE2RTgxMzEwMEI1NzAwNDQ3
OUUxIC8qIEhleE51bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZXhO
dW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzZGQjlGMEUxMkU4NTE4NjAw
NTFBMkVCIC8qIFNIQTEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0hBMS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NkZCOUYxMDEyRTg1MTk2MDA1MUEyRUIg
LyogU0hBMS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTSEExLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzkzNEJCNzYxMzYxOTc5MzAwQ0I5OUEx
IC8qIFBhcmFsbGVsSm9icy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJh
bGxlbEpvYnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzkzNEJCNzcxMzYxOTc5
MzAwQ0I5OUExIC8qIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTc5MzRCQjc4MTM2MTk3OTMwMENCOTlBMSAvKiBQYXJhbGxlbEpvYnNH
ZW5lcmljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsSm9ic0dl
bmVyaWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzkzNEJCNzkxMzYxOTc5MzAw
Q0I5OUExIC8qIFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTc5MzRCQjdBMTM2MTk3OTMwMENCOTlBMSAvKiBQYXJhbGxlbEpvYnNPcGVu
TVAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxKb2JzT3Blbk1Q
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRF
MiAvKiBTY29wZUNoYWluTWFyay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y29wZUNoYWluTWFyay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTRFRTcwODBF
QkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0U0RUU3MEUwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODksNiArMTY5OSwxMSBAQAogCQkJCUJDRkJFNjk1
MTIyNTYwRTgwMDMwOUU5RCAvKiBQYXNzT3duQXJyYXlQdHIuaCAqLywKIAkJCQk0NERENDg1MjBG
QUVBODUwMDBENkI0RUIgLyogUGFzc093blB0ci5oICovLAogCQkJCTY1ODBGNzk1MDk0MDcwNTYw
MDgyQzIxOSAvKiBQYXNzUmVmUHRyLmggKi8sCisJCQkJNzkzNEJCNzYxMzYxOTc5MzAwQ0I5OUEx
IC8qIFBhcmFsbGVsSm9icy5oICovLAorCQkJCTc5MzRCQjc3MTM2MTk3OTMwMENCOTlBMSAvKiBQ
YXJhbGxlbEpvYnNHZW5lcmljLmNwcCAqLywKKwkJCQk3OTM0QkI3ODEzNjE5NzkzMDBDQjk5QTEg
LyogUGFyYWxsZWxKb2JzR2VuZXJpYy5oICovLAorCQkJCTc5MzRCQjc5MTM2MTk3OTMwMENCOTlB
MSAvKiBQYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oICovLAorCQkJCTc5MzRCQjdBMTM2MTk3OTMw
MENCOTlBMSAvKiBQYXJhbGxlbEpvYnNPcGVuTVAuaCAqLywKIAkJCQk2NUQ2RDg3RTA5QjVBMzJF
MDAwMkU0RDcgLyogUGxhdGZvcm0uaCAqLywKIAkJCQlBN0Q2NDlBOTEwMTUyMjRFMDA5QjJFMUIg
LyogUG9zc2libHlOdWxsLmggKi8sCiAJCQkJRTREOENFOUIxMkZDNDJFMTAwQkM5RjVBIC8qIEJs
b29tRmlsdGVyLmggKi8sCkBAIC0yNTUyLDYgKzI1NjcsMTAgQEAKIAkJCQlBMUQ3NjQ1MjEzNTQ0
NDhCMDBDNUM3QzAgLyogQWxpZ25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBOTEz
NUU1RTFDMDA5NjMwMTIgLyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTc5MzRCQjdCMTM2MTk3OTMwMENCOTlBMSAvKiBQYXJhbGxlbEpvYnMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTc5MzRCQjdEMTM2MTk3OTQwMENCOTlBMSAvKiBQYXJhbGxlbEpvYnNHZW5l
cmljLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTM0QkI3RTEzNjE5Nzk0MDBDQjk5QTEgLyogUGFy
YWxsZWxKb2JzTGliZGlzcGF0Y2guaCBpbiBIZWFkZXJzICovLAorCQkJCTc5MzRCQjdGMTM2MTk3
OTQwMENCOTlBMSAvKiBQYXJhbGxlbEpvYnNPcGVuTVAuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjk5
OCw2ICszMDE3LDcgQEAKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjEzMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJr
U3RhY2tQb3NpeC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkFFNjRBODEzNUU1RTFDMDA5NjMw
MTIgLyogTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzkzNEJCN0Mx
MzYxOTc5NDAwQ0I5OUExIC8qIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCA5N2FhZDJkLi5k
MGQ1MzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTU4
LDYgKzU4LDEwIEBAIFNFVChXVEZfSEVBREVSUwogICAgIFBhc3NPd25BcnJheVB0ci5oCiAgICAg
UGFzc093blB0ci5oCiAgICAgUGFzc1JlZlB0ci5oCisgICAgUGFyYWxsZWxKb2JzLmgKKyAgICBQ
YXJhbGxlbEpvYnNHZW5lcmljLmgKKyAgICBQYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oCisgICAg
UGFyYWxsZWxKb2JzT3Blbk1QLmgKICAgICBQbGF0Zm9ybS5oCiAgICAgUG9zc2libHlOdWxsLmgK
ICAgICBSYW5kb21OdW1iZXIuaApAQCAtMTE5LDYgKzEyMyw3IEBAIFNFVChXVEZfU09VUkNFUwog
ICAgIE1haW5UaHJlYWQuY3BwCiAgICAgTUQ1LmNwcAogICAgIE9TUmFuZG9tU291cmNlLmNwcAor
ICAgIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCiAgICAgUmFuZG9tTnVtYmVyLmNwcAogICAgIFJl
ZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKICAgICBTSEExLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGFyYWxsZWxKb2JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MmUwNTI0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFy
YWxsZWxKb2JzLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
VW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxs
b2tpQHdlYmtpdC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UGFyYWxsZWxKb2JzX2gKKyNkZWZpbmUgUGFyYWxsZWxKb2JzX2gKKworI2luY2x1ZGUgIkFzc2Vy
dGlvbnMuaCIKKyNpbmNsdWRlICJOb25jb3B5YWJsZS5oIgorI2luY2x1ZGUgIlJlZlB0ci5oIgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShQQVJBTExFTF9KT0JTKQorCisv
LyBVc2FnZToKKy8vCisvLyAjaWYgRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisvLworLy8gICAgIC8v
IEluaXRpYWxpemUgcGFyYWxsZWwgam9icworLy8gICAgIFBhcmFsbGVsSm9iczxUeXBlT2ZQYXJh
bWV0ZXI+IHBhcmFsbGVsSm9icygmd29ya2VyIFssIHJlcXVlc3RlZE51bWJlck9mSm9ic10pOwor
Ly8KKy8vICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKKy8vICAgICBmb3IoaSA9IDA7
IGkgPCBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7ICsraSkgeworLy8gICAgICAgVHlwZU9m
UGFyYW1ldGVyJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOworLy8gICAgICAg
cGFyYW1zLmF0dHIxID0gbG9jYWxWYXJzIC4uLgorLy8gICAgICAgLi4uCisvLyAgICAgfQorLy8K
Ky8vICAgICAvLyBFeGVjdXRlIHBhcmFsbGVsIGpvYnMKKy8vICAgICBwYXJhbGxlbEpvYnMuZXhl
Y3V0ZSgpOworLy8KKy8vICNlbHNlCisvLworLy8gICAgIGlubGluZUZ1bmN0aW9uKGFyZ3MuLi4p
OworLy8KKy8vICNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfSk9CUykKKworI2lmIEVOQUJMRShU
SFJFQURJTkdfR0VORVJJQykKKyNpbmNsdWRlICJQYXJhbGxlbEpvYnNHZW5lcmljLmgiCisKKyNl
bGlmIEVOQUJMRShUSFJFQURJTkdfT1BFTk1QKQorI2luY2x1ZGUgIlBhcmFsbGVsSm9ic09wZW5N
UC5oIgorCisjZWxpZiBFTkFCTEUoVEhSRUFESU5HX0xJQkRJU1BBVENIKQorI2luY2x1ZGUgIlBh
cmFsbGVsSm9ic0xpYmRpc3BhdGNoLmgiCisKKyNlbHNlCisjZXJyb3IgIk5vIHBhcmFsbGVsIHBy
b2Nlc3NpbmcgQVBJIGZvciBQYXJhbGxlbEpvYnMiCisKKyNlbmRpZgorCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2NsYXNzIFBhcmFsbGVsSm9icyB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkICgqV29y
a2VyRnVuY3Rpb24pKFR5cGUqKTsKKworICAgIFBhcmFsbGVsSm9icyhXb3JrZXJGdW5jdGlvbiBm
dW5jLCBpbnQgcmVxdWVzdGVkSm9iTnVtYmVyID0gMCkgOgorICAgICAgICBtX3BhcmFsbGVsRW52
aXJvbm1lbnQocmVpbnRlcnByZXRfY2FzdDxQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRGdW5j
dGlvbj4oZnVuYyksIHNpemVvZihUeXBlKSwgcmVxdWVzdGVkSm9iTnVtYmVyKQorICAgIHsKKyAg
ICAgICAgbV9wYXJhbWV0ZXJzLmdyb3cobV9wYXJhbGxlbEVudmlyb25tZW50Lm51bWJlck9mSm9i
cygpKTsKKyAgICAgICAgQVNTRVJUKG51bWJlck9mSm9icygpID09IG1fcGFyYW1ldGVycy5zaXpl
KCkpOworICAgIH0KKworICAgIHNpemVfdCBudW1iZXJPZkpvYnMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fcGFyYW1ldGVycy5zaXplKCk7CisgICAgfQorCisgICAgVHlwZSYgcGFyYW1ldGVy
KHNpemVfdCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyYW1ldGVyc1tpXTsKKyAgICB9
CisKKyAgICB2b2lkIGV4ZWN1dGUoKQorICAgIHsKKyAgICAgICAgbV9wYXJhbGxlbEVudmlyb25t
ZW50LmV4ZWN1dGUocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obV9wYXJhbWV0ZXJz
LmRhdGEoKSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQYXJhbGxlbEVudmlyb25tZW50IG1f
cGFyYWxsZWxFbnZpcm9ubWVudDsKKyAgICBWZWN0b3I8VHlwZT4gbV9wYXJhbWV0ZXJzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UGFyYWxsZWxKb2JzOworCisjZW5k
aWYgLy8gRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisKKyNlbmRpZiAvLyBQYXJhbGxlbEpvYnNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmlj
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI0MWI4MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAK
QEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9y
Zz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFBBUkFMTEVMX0pPQlMpICYmIEVOQUJMRShUSFJFQURJTkdfR0VORVJJQykK
KworI2luY2x1ZGUgIlBhcmFsbGVsSm9icy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVmVjdG9y
PCBSZWZQdHI8UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZT4gPiogUGFyYWxsZWxF
bnZpcm9ubWVudDo6c190aHJlYWRQb29sID0gMDsKKworYm9vbCBQYXJhbGxlbEVudmlyb25tZW50
OjpUaHJlYWRQcml2YXRlOjp0cnlMb2NrRm9yKFBhcmFsbGVsRW52aXJvbm1lbnQqIHBhcmVudCkK
K3sKKyAgICBib29sIGxvY2tlZCA9IG1fbXV0ZXgudHJ5TG9jaygpOworCisgICAgaWYgKCFsb2Nr
ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3BhcmVudCkgeworICAgICAg
ICBtX211dGV4LnVubG9jaygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKCFtX3RocmVhZElEKQorICAgICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKCZQYXJh
bGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQsIHRoaXMsICJQYXJh
bGxlbCB3b3JrZXIiKTsKKworICAgIGlmIChtX3RocmVhZElEKQorICAgICAgICBtX3BhcmVudCA9
IHBhcmVudDsKKworICAgIG1fbXV0ZXgudW5sb2NrKCk7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQ7
Cit9CisKK3ZvaWQgUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6ZXhlY3V0ZShU
aHJlYWRGdW5jdGlvbiB0aHJlYWRGdW5jdGlvbiwgdm9pZCogcGFyYW1ldGVycykKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworCisgICAgbV90aHJlYWRGdW5jdGlvbiA9IHRocmVh
ZEZ1bmN0aW9uOworICAgIG1fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7CisgICAgbV9ydW5uaW5n
ID0gdHJ1ZTsKKyAgICBtX3RocmVhZENvbmRpdGlvbi5zaWduYWwoKTsKK30KKwordm9pZCBQYXJh
bGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3YWl0Rm9yRmluaXNoKCkKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworCisgICAgd2hpbGUgKG1fcnVubmluZykKKyAgICAg
ICAgbV90aHJlYWRDb25kaXRpb24ud2FpdChtX211dGV4KTsKK30KKwordm9pZCogUGFyYWxsZWxF
bnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkKHZvaWQqIHRocmVhZERhdGEp
Cit7CisgICAgVGhyZWFkUHJpdmF0ZSogc2hhcmVkVGhyZWFkID0gcmVpbnRlcnByZXRfY2FzdDxU
aHJlYWRQcml2YXRlKj4odGhyZWFkRGF0YSk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhzaGFyZWRU
aHJlYWQtPm1fbXV0ZXgpOworCisgICAgd2hpbGUgKHNoYXJlZFRocmVhZC0+bV90aHJlYWRJRCkg
eworICAgICAgICBpZiAoc2hhcmVkVGhyZWFkLT5tX3J1bm5pbmcpIHsKKyAgICAgICAgICAgICgq
c2hhcmVkVGhyZWFkLT5tX3RocmVhZEZ1bmN0aW9uKShzaGFyZWRUaHJlYWQtPm1fcGFyYW1ldGVy
cyk7CisgICAgICAgICAgICBzaGFyZWRUaHJlYWQtPm1fcnVubmluZyA9IGZhbHNlOworICAgICAg
ICAgICAgc2hhcmVkVGhyZWFkLT5tX3BhcmVudCA9IDA7CisgICAgICAgICAgICBzaGFyZWRUaHJl
YWQtPm1fdGhyZWFkQ29uZGl0aW9uLnNpZ25hbCgpOworICAgICAgICB9CisKKyAgICAgICAgc2hh
cmVkVGhyZWFkLT5tX3RocmVhZENvbmRpdGlvbi53YWl0KHNoYXJlZFRocmVhZC0+bV9tdXRleCk7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShQQVJBTExFTF9KT0JTKSAmJiBFTkFCTEUoVEhSRUFESU5HX0dFTkVSSUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYTQ0ZDUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaApAQCAtMCww
ICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYXJhbGxlbEpvYnNHZW5lcmlj
X2gKKyNkZWZpbmUgUGFyYWxsZWxKb2JzR2VuZXJpY19oCisKKyNpZiBFTkFCTEUoVEhSRUFESU5H
X0dFTkVSSUMpCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBp
bnQgbWF4UGFyYWxsZWxUaHJlYWRzID0gMjsKKworY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lk
ICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqKTsKKworICAgIFBhcmFsbGVsRW52aXJvbm1lbnQoVGhy
ZWFkRnVuY3Rpb24gdGhyZWFkRnVuY3Rpb24sIHNpemVfdCBzaXplT2ZQYXJhbWV0ZXIsIHVuc2ln
bmVkIGludCByZXF1ZXN0ZWRKb2JOdW1iZXIpIDoKKyAgICAgICAgbV90aHJlYWRGdW5jdGlvbih0
aHJlYWRGdW5jdGlvbiksCisgICAgICAgIG1fc2l6ZU9mUGFyYW1ldGVyKHNpemVPZlBhcmFtZXRl
cikKKyAgICB7CisgICAgICAgIGlmICghcmVxdWVzdGVkSm9iTnVtYmVyIHx8IHJlcXVlc3RlZEpv
Yk51bWJlciA+IG1heFBhcmFsbGVsVGhyZWFkcykKKyAgICAgICAgICAgIHJlcXVlc3RlZEpvYk51
bWJlciA9IG1heFBhcmFsbGVsVGhyZWFkczsKKworICAgICAgICBpZiAoIXNfdGhyZWFkUG9vbCkK
KyAgICAgICAgICAgIHNfdGhyZWFkUG9vbCA9IG5ldyBWZWN0b3I8IFJlZlB0cjxUaHJlYWRQcml2
YXRlPiA+KCk7CisKKyAgICAgICAgLy8gVGhlIG1haW4gdGhyZWFkIHNob3VsZCBiZSBhbHNvIGEg
d29ya2VyLgorICAgICAgICB1bnNpZ25lZCBpbnQgbWF4TmV3VGhyZWFkcyA9IHJlcXVlc3RlZEpv
Yk51bWJlciAtIDE7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtYXhQ
YXJhbGxlbFRocmVhZHMgJiYgbV90aHJlYWRzLnNpemUoKSA8IG1heE5ld1RocmVhZHM7ICsraSkg
eworICAgICAgICAgICAgaWYgKHNfdGhyZWFkUG9vbC0+c2l6ZSgpIDwgaSArIDEpCisgICAgICAg
ICAgICAgICAgc190aHJlYWRQb29sLT5hcHBlbmQoVGhyZWFkUHJpdmF0ZTo6Y3JlYXRlKCkpOwor
CisgICAgICAgICAgICBpZiAoKCpzX3RocmVhZFBvb2wpW2ldLT50cnlMb2NrRm9yKHRoaXMpKQor
ICAgICAgICAgICAgICAgIG1fdGhyZWFkcy5hcHBlbmQoKCpzX3RocmVhZFBvb2wpW2ldKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fbnVtYmVyT2ZKb2JzID0gbV90aHJlYWRzLnNpemUoKSArIDE7
CisgICAgfQorCisgICAgaW50IG51bWJlck9mSm9icygpCisgICAgeworICAgICAgICByZXR1cm4g
bV9udW1iZXJPZkpvYnM7CisgICAgfQorCisgICAgdm9pZCBleGVjdXRlKHVuc2lnbmVkIGNoYXIq
IHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgZm9yIChpID0g
MDsgaSA8IG1fdGhyZWFkcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgbV90aHJlYWRzW2ld
LT5leGVjdXRlKG1fdGhyZWFkRnVuY3Rpb24sIHBhcmFtZXRlcnMpOworICAgICAgICAgICAgcGFy
YW1ldGVycyArPSBtX3NpemVPZlBhcmFtZXRlcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRo
ZSB3b3JrIGZvciB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgKCptX3RocmVhZEZ1bmN0aW9uKShw
YXJhbWV0ZXJzKTsKKworICAgICAgICAvLyBXYWl0IHVudGlsIGFsbCBqb2JzIGFyZSBkb25lLgor
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgbV90aHJlYWRzW2ldLT53YWl0Rm9yRmluaXNoKCk7CisgICAgfQorCisgICAgY2xhc3MgVGhy
ZWFkUHJpdmF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRocmVhZFByaXZhdGU+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRocmVhZFByaXZhdGUoKQorICAgICAgICAgICAgOiBtX3RocmVhZElEKDAp
CisgICAgICAgICAgICAsIG1fcnVubmluZyhmYWxzZSkKKyAgICAgICAgICAgICwgbV9wYXJlbnQo
MCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlMb2NrRm9yKFBhcmFs
bGVsRW52aXJvbm1lbnQqKTsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoVGhyZWFkRnVuY3Rpb24s
IHZvaWQqKTsKKworICAgICAgICB2b2lkIHdhaXRGb3JGaW5pc2goKTsKKworICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUaHJlYWRQcml2YXRlPiBjcmVhdGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZFByaXZhdGUoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGF0aWMgdm9pZCogd29ya2VyVGhyZWFkKHZvaWQqKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICAgICAgYm9vbCBtX3J1
bm5pbmc7CisgICAgICAgIFBhcmFsbGVsRW52aXJvbm1lbnQqIG1fcGFyZW50OworCisgICAgICAg
IG11dGFibGUgTXV0ZXggbV9tdXRleDsKKyAgICAgICAgVGhyZWFkQ29uZGl0aW9uIG1fdGhyZWFk
Q29uZGl0aW9uOworCisgICAgICAgIFRocmVhZEZ1bmN0aW9uIG1fdGhyZWFkRnVuY3Rpb247Cisg
ICAgICAgIHZvaWQqIG1fcGFyYW1ldGVyczsKKyAgICB9OworCitwcml2YXRlOgorICAgIFRocmVh
ZEZ1bmN0aW9uIG1fdGhyZWFkRnVuY3Rpb247CisgICAgc2l6ZV90IG1fc2l6ZU9mUGFyYW1ldGVy
OworICAgIGludCBtX251bWJlck9mSm9iczsKKworICAgIFZlY3RvcjwgUmVmUHRyPFRocmVhZFBy
aXZhdGU+ID4gbV90aHJlYWRzOworICAgIHN0YXRpYyBWZWN0b3I8IFJlZlB0cjxUaHJlYWRQcml2
YXRlPiA+KiBzX3RocmVhZFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShUSFJFQURJTkdfR0VORVJJQykKKworCisjZW5kaWYgLy8gUGFyYWxsZWxKb2Jz
R2VuZXJpY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVs
Sm9ic0xpYmRpc3BhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BhcmFsbGVsSm9i
c0xpYmRpc3BhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3Yzc3
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxK
b2JzTGliZGlzcGF0Y2guaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9r
aSA8bG9raUB3ZWJraXQub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoX2gKKyNkZWZpbmUgUGFyYWxsZWxKb2JzTGliZGlz
cGF0Y2hfaAorCisjaWYgRU5BQkxFKFRIUkVBRElOR19MSUJESVNQQVRDSCkKKworI2luY2x1ZGUg
PGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitzdGF0aWMgY29uc3Qg
aW50IG1heFBhcmFsbGVsVGhyZWFkcyA9IDI7CisKK2NsYXNzIFBhcmFsbGVsRW52aXJvbm1lbnQg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgdm9p
ZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKik7CisKKyAgICBQYXJhbGxlbEVudmlyb25tZW50KFRo
cmVhZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCBzaXplX3Qgc2l6ZU9mUGFyYW1ldGVyLCBpbnQg
cmVxdWVzdGVkSm9iTnVtYmVyKSA6CisgICAgICAgIG1fdGhyZWFkRnVuY3Rpb24odGhyZWFkRnVu
Y3Rpb24pLAorICAgICAgICBtX3NpemVPZlBhcmFtZXRlcihzaXplT2ZQYXJhbWV0ZXIpCisgICAg
eworICAgICAgICBpZiAoIXJlcXVlc3RlZEpvYk51bWJlciB8fCByZXF1ZXN0ZWRKb2JOdW1iZXIg
PiBtYXhQYXJhbGxlbFRocmVhZHMpCisgICAgICAgICAgICByZXF1ZXN0ZWRKb2JOdW1iZXIgPSBt
YXhQYXJhbGxlbFRocmVhZHM7CisKKyAgICAgICAgQVNTRVJUKHJlcXVlc3RlZEpvYk51bWJlciA+
IDApOworCisgICAgICAgIG1fbnVtYmVyT2ZKb2JzID0gcmVxdWVzdGVkSm9iTnVtYmVyOworICAg
IH0KKworICAgIGludCBudW1iZXJPZkpvYnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbnVt
YmVyT2ZKb2JzOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZSh1bnNpZ25lZCBjaGFyKiBwYXJh
bWV0ZXJzKQorICAgIHsKKyAgICAgICAgLy8gbGliZGlzcGF0Y2ggaXMgTk9UIHN1cHBvcnRlZCBp
bnNpZGUgYSB0ZW1wbGF0ZQorICAgICAgICBkaXNwYXRjaF9xdWV1ZV90IHBhcmFsbGVsSm9ic1F1
ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJQYXJhbGxlbEpvYnMiLCAwKTsKKworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZKb2JzIC0gMTsgKytpKSB7CisgICAgICAg
ICAgICBkaXNwYXRjaF9hc3luYyhwYXJhbGxlbEpvYnNRdWV1ZSwgXnsoKm1fdGhyZWFkRnVuY3Rp
b24pKHBhcmFtZXRlcnMpO30pOworICAgICAgICAgICAgcGFyYW1ldGVycyArPSBtX3NpemVPZlBh
cmFtZXRlcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSB3b3JrIGZvciB0aGUgbWFpbiB0
aHJlYWQuIFdhaXQgdW50aWwgYWxsIGpvYnMgYXJlIGRvbmUuCisgICAgICAgIGRpc3BhdGNoX3N5
bmMocGFyYWxsZWxKb2JzUXVldWUsIF57KCptX3RocmVhZEZ1bmN0aW9uKShwYXJhbWV0ZXJzKTt9
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkRnVuY3Rpb24gbV90aHJlYWRGdW5jdGlv
bjsKKyAgICBzaXplX3QgbV9zaXplT2ZQYXJhbWV0ZXI7CisgICAgaW50IG1fbnVtYmVyT2ZKb2Jz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFESU5H
X0xJQkRJU1BBVENIKQorCisjZW5kaWYgLy8gUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2hfaApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXJhbGxlbEpvYnNPcGVuTVAuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzT3Blbk1QLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2YmQ4MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGFyYWxsZWxKb2JzT3Blbk1QLmgKQEAgLTAsMCArMSw4
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICog
Q29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYXJhbGxlbEpvYnNPcGVuTVBfaAorI2Rl
ZmluZSBQYXJhbGxlbEpvYnNPcGVuTVBfaAorCisjaWYgRU5BQkxFKFRIUkVBRElOR19PUEVOTVAp
CisKKyNpbmNsdWRlIDxvbXAuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFBhcmFsbGVs
RW52aXJvbm1lbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhcmFsbGVsRW52aXJvbm1l
bnQpOworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKik7
CisKKyAgICBQYXJhbGxlbEVudmlyb25tZW50KFRocmVhZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9u
LCBzaXplX3Qgc2l6ZU9mUGFyYW1ldGVyLCBpbnQgcmVxdWVzdGVkSm9iTnVtYmVyKSA6CisgICAg
ICAgIG1fdGhyZWFkRnVuY3Rpb24odGhyZWFkRnVuY3Rpb24pLAorICAgICAgICBtX3NpemVPZlBh
cmFtZXRlcihzaXplT2ZQYXJhbWV0ZXIpCisgICAgeworICAgICAgICBpbnQgbWF4TnVtYmVyT2ZU
aHJlYWRzID0gb21wX2dldF9tYXhfdGhyZWFkcygpOworCisgICAgICAgIGlmICghcmVxdWVzdGVk
Sm9iTnVtYmVyIHx8IHJlcXVlc3RlZEpvYk51bWJlciA+IG1heE51bWJlck9mVGhyZWFkcykKKyAg
ICAgICAgICAgIHJlcXVlc3RlZEpvYk51bWJlciA9IG1heE51bWJlck9mVGhyZWFkczsKKworICAg
ICAgICBBU1NFUlQocmVxdWVzdGVkSm9iTnVtYmVyID4gMCk7CisKKyAgICAgICAgbV9udW1iZXJP
ZkpvYnMgPSByZXF1ZXN0ZWRKb2JOdW1iZXI7CisKKyAgICB9CisKKyAgICBpbnQgbnVtYmVyT2ZK
b2JzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX251bWJlck9mSm9iczsKKyAgICB9CisKKyAg
ICB2b2lkIGV4ZWN1dGUodW5zaWduZWQgY2hhciogcGFyYW1ldGVycykKKyAgICB7CisgICAgICAg
IG9tcF9zZXRfbnVtX3RocmVhZHMobV9udW1iZXJPZkpvYnMpOworCisjcHJhZ21hIG9tcCBwYXJh
bGxlbCBmb3IKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bWJlck9mSm9iczsgKytp
KQorICAgICAgICAgICAgKCptX3RocmVhZEZ1bmN0aW9uKShwYXJhbWV0ZXJzICsgaSAqIG1fc2l6
ZU9mUGFyYW1ldGVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkRnVuY3Rpb24gbV90
aHJlYWRGdW5jdGlvbjsKKyAgICBzaXplX3QgbV9zaXplT2ZQYXJhbWV0ZXI7CisgICAgaW50IG1f
bnVtYmVyT2ZKb2JzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoVEhSRUFESU5HX09QRU5NUCkKKworI2VuZGlmIC8vIFBhcmFsbGVsSm9ic09wZW5NUF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggZDE1NDAzNC4uNzYzOWIxNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAtMTE5Niw2ICsxMTk2LDE0IEBACiAj
ZGVmaW5lIEVOQUJMRV9CUkFOQ0hfQ09NUEFDVElPTiAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVk
KEVOQUJMRV9USFJFQURJTkdfT1BFTk1QKSAmJiBkZWZpbmVkKF9PUEVOTVApCisjZGVmaW5lIEVO
QUJMRV9USFJFQURJTkdfT1BFTk1QIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX1BB
UkFMTEVMX0pPQlMpICYmICFFTkFCTEUoU0lOR0xFX1RIUkVBREVEKSAmJiAoRU5BQkxFKFRIUkVB
RElOR19HRU5FUklDKSB8fCBFTkFCTEUoVEhSRUFESU5HX0xJQkRJU1BBVENIKSB8fCBFTkFCTEUo
VEhSRUFESU5HX09QRU5NUCkpCisjZGVmaW5lIEVOQUJMRV9QQVJBTExFTF9KT0JTIDEKKyNlbmRp
ZgorCiAjaWYgRU5BQkxFKEdMSUJfU1VQUE9SVCkKICNpbmNsdWRlICJHVHlwZWRlZnMuaCIKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCmluZGV4IDVmMTVlYjAuLjEwYjQxZTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKQEAgLTIxLDYgKzIxLDcgQEAgU09VUkNFUyArPSBc
CiAgICAgd3RmL3F0L1RocmVhZGluZ1F0LmNwcCBcCiAgICAgd3RmL1BhZ2VBbGxvY2F0aW9uQWxp
Z25lZC5jcHAgXAogICAgIHd0Zi9QYWdlQmxvY2suY3BwIFwKKyAgICB3dGYvUGFyYWxsZWxKb2Jz
R2VuZXJpYy5jcHAgXAogICAgIHd0Zi9SYW5kb21OdW1iZXIuY3BwIFwKICAgICB3dGYvUmVmQ291
bnRlZExlYWtDb3VudGVyLmNwcCBcCiAgICAgd3RmL1NIQTEuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBj
MTdlNGRhLi5hZDkxNTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDQtMjYg
IEdhYm9yIExva2kgIDxsb2tpQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlZWRpbmcgdXAgU1ZHIGZpbHRlcnMgd2l0aCBtdWx0
aWNvcmUgKFNNUCkgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDM5MDMKKworICAgICAgICBTb21lIFNWRyBmaWx0ZXJzIGV4ZWN1dGUgYSBo
dWdlIG51bWJlciBvZiBwaXhlbCBtYW5pcHVsYXRpb25zLCB3aGljaAorICAgICAgICBjYW5ub3Qg
YmUgc3BlZCB1cCBieSBncmFwaGljcyBhY2NlbGVyYXRvcnMsIHNpbmNlIHRoZWlyIGFsZ29yaXRo
bSBpcworICAgICAgICB0b28gY29tcGxleC4gVXNpbmcgdGhlIHBvd2VyIG9mIFN5bW1ldHJpYyBN
dWx0aSBQcm9jZXNzaW5nIChTTVApIHdlCisgICAgICAgIGNhbiBzcGxpdCB1cCBhIHRhc2sgdG8g
c21hbGxlciAoZGF0YSBpbmRlcGVuZGVudCkgdGFza3MsIHdoaWNoIGNhbiBiZQorICAgICAgICBl
eGVjdXRlZCBpbmRlcGVuZGVudGx5LgorCisgICAgICAgIFRoZSBQYXJhbGxlbEpvYnMgZnJhbWV3
b3JrIHByb3ZpZGVzIGEgc2ltcGxlIHdheSBmb3IgZGlzdHJpYnV0ZWQKKyAgICAgICAgcHJvZ3Jh
bW1pbmcuIFRoZSBmcmFtZXdvcmsgaXMgYmFzZWQgb24gV2ViS2l0J3MgdGhyZWFkaW5nIGluZnJh
c3RydWN0dXJlLAorICAgICAgICBPcGVuIE11bHRpLVByb2Nlc3NpbmcncyAoT3Blbk1QKSBBUEks
IGFuZCBsaWJkaXNwYXRjaCBBUEkuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYv
UGFyYWxsZWxKb2JzLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6UGFp
bnRpbmdEYXRhOjpQYWludGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
Ojpub2lzZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVy
YnVsZW5jZVZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpm
aWxsUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldv
cmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmFwcGx5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOgorCiAyMDExLTA0LTI1
ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL1BhcmFsbGVsSm9icy5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL1BhcmFsbGVsSm9icy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIw
NjRlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvUGFyYWxsZWxKb2JzLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldE
X1BhcmFsbGVsSm9ic19oCisjZGVmaW5lIFdlYkNvcmVfRldEX1BhcmFsbGVsSm9ic19oCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvUGFyYWxsZWxKb2JzLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmNwcAppbmRleCA2MzA2MGUxLi4wOTM1ZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC00LDYg
KzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2Vk
Lmh1PgorICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0J5
dGVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bh
cmFsbGVsSm9icy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE1Miw3ICsxNTQsNiBA
QCBGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdT
ZWVkLCBjb25zdCBJbnRTaXplJiBwYWludAogICAgICwgaGVpZ2h0KDApCiAgICAgLCB3cmFwWCgw
KQogICAgICwgd3JhcFkoMCkKLSAgICAsIGNoYW5uZWwoMCkKICAgICAsIGZpbHRlclNpemUocGFp
bnRpbmdTaXplKQogewogfQpAQCAtMjI0LDcgKzIyNSw3IEBAIGlubGluZSB2b2lkIGNoZWNrTm9p
c2UoaW50JiBub2lzZVZhbHVlLCBpbnQgbGltaXRWYWx1ZSwgaW50IG5ld1ZhbHVlKQogICAgICAg
ICBub2lzZVZhbHVlIC09IG5ld1ZhbHVlIC0gMTsKIH0KIAotZmxvYXQgRkVUdXJidWxlbmNlOjpu
b2lzZTJEKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lz
ZVZlY3RvcikKK2Zsb2F0IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChpbnQgY2hhbm5lbCwgUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQogewog
ICAgIHN0cnVjdCBOb2lzZSB7CiAgICAgICAgIGludCBub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVl
OwpAQCAtMjU5LDIzICsyNjAsMjMgQEAgZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVYKIAogICAgIC8v
IFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NW
RzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50LgogICAgIGludCB0ZW1wID0gcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3Np
dGlvbkludGVnZXJWYWx1ZV07Ci0gICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtwYWludGlu
Z0RhdGEuY2hhbm5lbF1bdGVtcF07CisgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVt0ZW1wXTsKICAgICB1ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICog
cVswXSArIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIHFbMV07CiAgICAgdGVt
cCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNl
WS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdy
YWRpZW50W2NoYW5uZWxdW3RlbXBdOwogICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFj
dGlvblZhbHVlIC0gMSkgKiBxWzBdICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVl
ICogcVsxXTsKICAgICBhID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CiAgICAgdGVt
cCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5v
aXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKLSAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAgICBxID0gcGFpbnRpbmdEYXRhLmdy
YWRpZW50W2NoYW5uZWxdW3RlbXBdOwogICAgIHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0
aW9uVmFsdWUgKiBxWzBdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEp
ICogcVsxXTsKICAgICB0ZW1wID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0
dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKLSAgICBx
ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W3BhaW50aW5nRGF0YS5jaGFubmVsXVt0ZW1wXTsKKyAg
ICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3RlbXBdOwogICAgIHYgPSAobm9p
c2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBxWzBdICsgKG5vaXNlWS5ub2lz
ZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogcVsxXTsKICAgICBiID0gbGluZWFySW50ZXJw
b2xhdGlvbihzeCwgdSwgdik7CiAgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEs
IGIpOwogfQogCi11bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5j
ZVZhbHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQordW5zaWduZWQgY2hhciBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KGludCBjaGFubmVsLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgZmxvYXQgdGlsZVdpZHRoID0gcGFpbnRp
bmdEYXRhLmZpbHRlclNpemUud2lkdGgoKTsKICAgICBBU1NFUlQodGlsZVdpZHRoID4gMCk7CkBA
IC0zMTMsOSArMzE0LDkgQEAgdW5zaWduZWQgY2hhciBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50KFBhaW50aW5nRGF0YSYgcGFpbnQKICAgICBmbG9hdCByYXRp
byA9IDE7CiAgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyAr
K29jdGF2ZSkgewogICAgICAgICBpZiAobV90eXBlID09IEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNU
QUxOT0lTRSkKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJE
KHBhaW50aW5nRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87CisgICAgICAgICAgICB0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChjaGFubmVsLCBwYWludGluZ0RhdGEsIG5vaXNl
VmVjdG9yKSAvIHJhdGlvOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgKz0gZmFic2Yobm9pc2UyRChwYWludGluZ0RhdGEsIG5vaXNlVmVjdG9yKSkg
LyByYXRpbzsKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBmYWJzZihu
b2lzZTJEKGNoYW5uZWwsIHBhaW50aW5nRGF0YSwgbm9pc2VWZWN0b3IpKSAvIHJhdGlvOwogICAg
ICAgICBub2lzZVZlY3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOwogICAgICAgICBub2lz
ZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9yLnkoKSAqIDIpOwogICAgICAgICByYXRpbyAqPSAyOwpA
QCAtMzM4LDYgKzMzOSwzMSBAQCB1bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRl
VHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoUGFpbnRpbmdEYXRhJiBwYWludAogICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUp
OwogfQogCitpbmxpbmUgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oQnl0ZUFycmF5KiBw
aXhlbEFycmF5LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVu
ZFkpCit7CisgICAgSW50UmVjdCBmaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpOwor
ICAgIEludFBvaW50IHBvaW50KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOworICAgIGlu
dCBpbmRleE9mUGl4ZWxDaGFubmVsID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8
IDIpOworICAgIGludCBjaGFubmVsOworCisgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVu
ZFk7ICsreSkgeworICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOworICAgICAgICBw
b2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGZpbHRlclJlZ2lvbi53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgIHBvaW50LnNldFgocG9p
bnQueCgpICsgMSk7CisgICAgICAgICAgICBmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsg
KytjaGFubmVsLCArK2luZGV4T2ZQaXhlbENoYW5uZWwpCisgICAgICAgICAgICAgICAgcGl4ZWxB
cnJheS0+c2V0KGluZGV4T2ZQaXhlbENoYW5uZWwsIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZv
clBvaW50KGNoYW5uZWwsIHBhaW50aW5nRGF0YSwgZmlsdGVyKCktPm1hcEFic29sdXRlUG9pbnRU
b0xvY2FsUG9pbnQocG9pbnQpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNpZiBFTkFCTEUo
UEFSQUxMRUxfSk9CUykKK3ZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxS
ZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQoreworICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+
ZmlsbFJlZ2lvbihwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdE
YXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOworfQorI2VuZGlmIC8v
IEVOQUJMRShQQVJBTExFTF9KT0JTKQorCiB2b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHkoKQogewog
ICAgIGlmIChoYXNSZXN1bHQoKSkKQEAgLTM1MiwxOSArMzc4LDQyIEBAIHZvaWQgRkVUdXJidWxl
bmNlOjphcHBseSgpCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YShtX3NlZWQsIHJvdW5k
ZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSkpOwogICAgIGluaXRQ
YWludChwYWludGluZ0RhdGEpOwogCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29s
dXRlUGFpbnRSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBwb2ludDsKLSAgICBwb2ludC5zZXRZKGZp
bHRlclJlZ2lvbi55KCkpOwotICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0gMDsKLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCk7ICsreSkgewot
ICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwotICAgICAgICBwb2ludC5zZXRYKGZp
bHRlclJlZ2lvbi54KCkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGFic29sdXRlUGFp
bnRSZWN0KCkud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50Lngo
KSArIDEpOwotICAgICAgICAgICAgZm9yIChwYWludGluZ0RhdGEuY2hhbm5lbCA9IDA7IHBhaW50
aW5nRGF0YS5jaGFubmVsIDwgNDsgKytwYWludGluZ0RhdGEuY2hhbm5lbCwgKytpbmRleE9mUGl4
ZWxDaGFubmVsKQotICAgICAgICAgICAgICAgIHBpeGVsQXJyYXktPnNldChpbmRleE9mUGl4ZWxD
aGFubmVsLCBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIGZp
bHRlcigpLT5tYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbFBvaW50KHBvaW50KSkpOworI2lmIEVOQUJM
RShQQVJBTExFTF9KT0JTKQorCisgICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAoYWJzb2x1
dGVQYWludFJlY3QoKS53aWR0aCgpICogYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSkgLyBz
X21pbmltYWxSZWN0RGltZW5zaW9uOworICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkg
eworICAgICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKKyAgICAgICAgUGFyYWxsZWxK
b2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAg
Ly8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5CisgICAgICAgIGludCBpID0gcGFyYWxsZWxKb2Jz
Lm51bWJlck9mSm9icygpOworICAgICAgICBpZiAoaSA+IDEpIHsKKyAgICAgICAgICAgIGludCBz
dGFydFkgPSAwOworICAgICAgICAgICAgaW50IHN0ZXBZID0gYWJzb2x1dGVQYWludFJlY3QoKS5o
ZWlnaHQoKSAvIGk7CisgICAgICAgICAgICBmb3IgKDsgaSA+IDA7IC0taSkgeworICAgICAgICAg
ICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1l
dGVyKGktMSk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7CisgICAgICAg
ICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSBwaXhlbEFycmF5OworICAgICAgICAgICAgICAg
IHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAgICAgICAgIHBh
cmFtcy5zdGFydFkgPSBzdGFydFk7CisgICAgICAgICAgICAgICAgaWYgKGkgIT0gMSkgeworICAg
ICAgICAgICAgICAgICAgICBwYXJhbXMuZW5kWSA9IHN0YXJ0WSArIHN0ZXBZOworICAgICAgICAg
ICAgICAgICAgICBzdGFydFkgPSBzdGFydFkgKyBzdGVwWTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVuZFkgPSBhYnNvbHV0ZVBhaW50UmVjdCgp
LmhlaWdodCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBFeGVjdXRlIHBhcmFs
bGVsIGpvYnMKKyAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7CisKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KKyAgICAvLyBGYWxsYmFjayB0byBzZXF1ZW50
aWFsIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWlu
dCBhcmVhIGlzIHRvbyBzbWFsbAorCisjZW5kaWYgLy8gRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisK
KyAgICBmaWxsUmVnaW9uKHBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgMCwgYWJzb2x1dGVQYWlu
dFJlY3QoKS5oZWlnaHQoKSk7CiB9CiAKIHZvaWQgRkVUdXJidWxlbmNlOjpkdW1wKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCmluZGV4IGRmZWIyMjAuLjA0NjYyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNTgsNiAr
NTgsMTAgQEAgcHVibGljOgogICAgIGJvb2wgc3RpdGNoVGlsZXMoKSBjb25zdDsKICAgICBib29s
IHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCisjaWYgRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisgICAg
c3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lkKik7CisjZW5kaWYKKwogICAgIHZpcnR1
YWwgdm9pZCBhcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgCkBAIC02OCw2
ICs3Miw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2Nr
U2l6ZSA9IDI1NjsKICAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1Np
emUgLSAxOworI2lmIEVOQUJMRShQQVJBTExFTF9KT0JTKQorICAgIHN0YXRpYyBjb25zdCBpbnQg
c19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBs
aW1pdCBmb3IgcGFyYWxsZWwgam9icworI2VuZGlmCiAKICAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRh
IHsKICAgICAgICAgbG9uZyBzZWVkOwpAQCAtNzcsMTggKzg0LDMzIEBAIHByaXZhdGU6CiAgICAg
ICAgIGludCBoZWlnaHQ7CiAgICAgICAgIGludCB3cmFwWDsgLy8gTWluaW11bSB2YWx1ZSB0byB3
cmFwLgogICAgICAgICBpbnQgd3JhcFk7Ci0gICAgICAgIGludCBjaGFubmVsOwogICAgICAgICBJ
bnRTaXplIGZpbHRlclNpemU7CiAKICAgICAgICAgUGFpbnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdT
ZWVkLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpOwogICAgICAgICBpbmxpbmUgbG9uZyBy
YW5kb20oKTsKICAgICB9OwogCisjaWYgRU5BQkxFKFBBUkFMTEVMX0pPQlMpCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVHlwZT4KKyAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOworCisgICAg
c3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKKyAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0
ZXI7CisgICAgICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheTsKKyAgICAgICAgUGFpbnRpbmdEYXRh
KiBwYWludGluZ0RhdGE7CisgICAgICAgIGludCBzdGFydFk7CisgICAgICAgIGludCBlbmRZOwor
ICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJh
bWV0ZXJzKik7CisjZW5kaWYKKwogICAgIEZFVHVyYnVsZW5jZShGaWx0ZXIqLCBUdXJidWxlbmNl
VHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKIAogICAgIGlubGluZSB2b2lk
IGluaXRQYWludChQYWludGluZ0RhdGEmKTsKLSAgICBmbG9hdCBub2lzZTJEKFBhaW50aW5nRGF0
YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB1bnNpZ25lZCBjaGFyIGNhbGN1bGF0ZVR1cmJ1
bGVuY2VWYWx1ZUZvclBvaW50KFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAg
ICBmbG9hdCBub2lzZTJEKGludCBjaGFubmVsLCBQYWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBv
aW50Jik7CisgICAgdW5zaWduZWQgY2hhciBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2lu
dChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIGlu
bGluZSB2b2lkIGZpbGxSZWdpb24oQnl0ZUFycmF5KiwgUGFpbnRpbmdEYXRhJiwgaW50LCBpbnQp
OwogCiAgICAgVHVyYnVsZW5jZVR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5j
eVg7Ci0tIAoxLjcuNC4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>