<?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>58486</bug_id>
          
          <creation_ts>2011-04-13 15:05:21 -0700</creation_ts>
          <short_desc>[WinCairo] Implement ImageDiff Logic</short_desc>
          <delta_ts>2011-04-14 16:32:03 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>385279</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-13 15:05:21 -0700</bug_when>
    <thetext>The attached patch implements a WinCairo-compatible version of ImageDiff, as well as adjusting old-run-webkit-tests to work with the WinCairo project names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385311</commentid>
    <comment_count>1</comment_count>
      <attachid>89481</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-13 15:35:34 -0700</bug_when>
    <thetext>Created attachment 89481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385312</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-13 15:36:56 -0700</bug_when>
    <thetext>Attachment 89481 did not pass style-queue:

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

Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:34:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 7 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>385314</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-13 15:37:53 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 89481 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/c...&quot; exit_code: 1
&gt; 
&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:34:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; Total errors found: 3 in 7 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

1. This file can&apos;t include &quot;config.h&quot;, since its part of &quot;Tools&quot;, not WebCore.
2. The weird header order is necessary because of Windows issues with winsock2.h being included after windows.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385331</commentid>
    <comment_count>4</comment_count>
      <attachid>89481</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-13 16:00:19 -0700</bug_when>
    <thetext>Comment on attachment 89481
Patch

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

In general this change looks pretty good to me, though it originates from before a lot of the current WebKit style guidelines. Across all code, I&apos;d like to see:

1. All C++ style casts.
2. Remove &apos;f&apos; after floating point numbers when it&apos;s not necessary (when the .0 is enough).

It&apos;s a pity we don&apos;t share more of this with the GTK port, but perhaps another patch can remove the GTK version in favor of this one.

&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:47
&gt; +#include &lt;wtf/MathExtras.h&gt;
&gt; +
&gt; +#include &lt;fcntl.h&gt;
&gt; +#include &lt;io.h&gt;
&gt; +#include &lt;winsock2.h&gt;
&gt; +#include &lt;windows.h&gt;
&gt; +#endif

If possible please fix these style errors and if not leave a comment documenting why certain headers must be in an unusual order.

&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:60
&gt; +    CFMutableDataRef cfDataObj = (CFMutableDataRef)closure;

Please use a C++ style cast here and complete words for variable names.

&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:79
&gt; +    return cairo_image_surface_create_from_png_stream ((cairo_read_func_t)readFromData, data.get());

Please use C++ style cast here as well.

&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:113
&gt; +    // Draw base image in bitmap context
&gt; +    void* baseBuffer = calloc(height, rowBytes);
&gt; +    cairo_surface_t* baseImageStore = cairo_image_surface_create_for_data((unsigned char*)baseBuffer, CAIRO_FORMAT_ARGB32, width, height, width * 4); 
&gt; +    cairo_t* baseContext = cairo_create(baseImageStore);
&gt; +    cairo_surface_destroy(baseImageStore);
&gt; +
&gt; +    cairo_set_source_surface(baseContext, baseImage, 0, 0);
&gt; +    cairo_paint(baseContext);
&gt; +    cairo_destroy(baseContext);
&gt; +
&gt; +    // Draw test image in bitmap context
&gt; +    void* buffer = calloc(height, rowBytes);
&gt; +    cairo_surface_t* testImageStore = cairo_image_surface_create_for_data((unsigned char*)buffer, CAIRO_FORMAT_ARGB32, width, height, width * 4); 
&gt; +    cairo_t* testContext = cairo_create(testImageStore);
&gt; +    cairo_surface_destroy(testImageStore);
&gt; +
&gt; +    cairo_set_source_surface(testContext, testImage, 0, 0);
&gt; +    cairo_paint(testContext);
&gt; +    cairo_destroy(testContext);

Why redraw the images again here? Can&apos;t you just do cairo_imag_surface_get_data on baseImage and testImage?

&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:178
&gt; +    cairo_format_t info = cairo_image_surface_get_format(image);
&gt; +    
&gt; +    return (info == CAIRO_FORMAT_ARGB32);

this can just be:

return (cairo_image_surface_get_format(image) == CAIRO_FORMAT_ARGB32);

&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:183
&gt; +    CFMutableDataRef cfDataObj = (CFMutableDataRef)closure;

Ditto.

&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:214
&gt; +        // remove the CR

The comment here should be a complete sentence.

&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:235
&gt; +            if ((cairo_image_surface_get_width(actualImage) == cairo_image_surface_get_width(baselineImage)) &amp;&amp; (cairo_image_surface_get_height(actualImage) == cairo_image_surface_get_height(baselineImage)) &amp;&amp; (imageHasAlpha(actualImage) == imageHasAlpha(baselineImage))) {

Please split this line since it&apos;s longer than the customary 120 characters.

&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:241
&gt; +                    difference = 0.0f;
&gt; +                else {
&gt; +                    difference = roundf(difference * 100.0f) / 100.0f;
&gt; +                    difference = max(difference, 0.01f); // round to 2 decimal places

Style guidelines suggest that you should avoid using the &apos;f&apos; after floating point numbers.

&gt; Tools/DumpRenderTree/cairo/ImageDiffCairo.cpp:246
&gt; +            if (difference &gt; 0.0f) {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385383</commentid>
    <comment_count>5</comment_count>
      <attachid>89499</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-13 17:18:33 -0700</bug_when>
    <thetext>Created attachment 89499
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385384</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-13 17:22:00 -0700</bug_when>
    <thetext>Attachment 89499 did not pass style-queue:

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

Tools/DumpRenderTree/win/ImageDiffCairo.cpp:32:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 7 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>385387</commentid>
    <comment_count>7</comment_count>
      <attachid>89499</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-13 17:25:33 -0700</bug_when>
    <thetext>Comment on attachment 89499
Patch

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

Looks good, but the difference calculation still looks suspicious to me. :)

&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:43
&gt; +#include &lt;windows.h&gt;
&gt; +
&gt; +#include &lt;wtf/MathExtras.h&gt;

The newline isn&apos;t necessary here.

&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:55
&gt; +static inline float strtof(const char *nptr, char **endptr)

Please use full variable names for these arguments and move the asterisks next to the type name.

&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:128
&gt; +    // Draw base image in bitmap context
&gt; +    void* baseBuffer = calloc(height, rowBytes);
&gt; +    unsigned char* basePixel = reinterpret_cast&lt;unsigned char*&gt;(baseBuffer);
&gt; +    cairo_surface_t* baseImageStore = cairo_image_surface_create_for_data(basePixel, CAIRO_FORMAT_ARGB32, width, height, width * 4); 
&gt; +    cairo_t* baseContext = cairo_create(baseImageStore);
&gt; +    cairo_surface_destroy(baseImageStore);
&gt; +
&gt; +    cairo_set_source_surface(baseContext, baseImage, 0, 0);
&gt; +    cairo_paint(baseContext);
&gt; +    cairo_destroy(baseContext);
&gt; +
&gt; +    // Draw test image in bitmap context
&gt; +    void* buffer = calloc(height, rowBytes);
&gt; +    unsigned char* pixel = reinterpret_cast&lt;unsigned char*&gt;(buffer);
&gt; +    cairo_surface_t* testImageStore = cairo_image_surface_create_for_data(pixel, CAIRO_FORMAT_ARGB32, width, height, width * 4); 
&gt; +    cairo_t* testContext = cairo_create(testImageStore);
&gt; +    cairo_surface_destroy(testImageStore);

I&apos;m still not sure why this is necessary. Why not just do:

unsigned char* basePixel  = cairo_image_surface_get_data(baseImage);
unsigned char* pixel  = cairo_image_surface_get_data(testImage);

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385465</commentid>
    <comment_count>8</comment_count>
      <attachid>89499</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-13 19:58:43 -0700</bug_when>
    <thetext>Comment on attachment 89499
Patch

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

&gt;&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:43
&gt;&gt; +#include &lt;wtf/MathExtras.h&gt;
&gt; 
&gt; The newline isn&apos;t necessary here.

Will fix.

&gt;&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:55
&gt;&gt; +static inline float strtof(const char *nptr, char **endptr)
&gt; 
&gt; Please use full variable names for these arguments and move the asterisks next to the type name.

Will do.

&gt;&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:128
&gt;&gt; +    cairo_surface_destroy(testImageStore);
&gt; 
&gt; I&apos;m still not sure why this is necessary. Why not just do:
&gt; 
&gt; unsigned char* basePixel  = cairo_image_surface_get_data(baseImage);
&gt; unsigned char* pixel  = cairo_image_surface_get_data(testImage);
&gt; 
&gt; ?

I&apos;m not sure either. The image surfaces entering this method are PNG surfaces.  I&apos;m not sure if there is anything different about the way Cairo deals with the images when it turns them into &quot;device independent&quot; image surfaces.  Probably not.  I&apos;ll try to build a test to see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385952</commentid>
    <comment_count>9</comment_count>
      <attachid>89623</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-14 12:25:08 -0700</bug_when>
    <thetext>Created attachment 89623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385954</commentid>
    <comment_count>10</comment_count>
      <attachid>89499</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-14 12:27:13 -0700</bug_when>
    <thetext>Comment on attachment 89499
Patch

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

&gt;&gt;&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:128
&gt;&gt;&gt; +    cairo_surface_destroy(testImageStore);
&gt;&gt; 
&gt;&gt; I&apos;m still not sure why this is necessary. Why not just do:
&gt;&gt; 
&gt;&gt; unsigned char* basePixel  = cairo_image_surface_get_data(baseImage);
&gt;&gt; unsigned char* pixel  = cairo_image_surface_get_data(testImage);
&gt;&gt; 
&gt;&gt; ?
&gt; 
&gt; I&apos;m not sure either. The image surfaces entering this method are PNG surfaces.  I&apos;m not sure if there is anything different about the way Cairo deals with the images when it turns them into &quot;device independent&quot; image surfaces.  Probably not.  I&apos;ll try to build a test to see.

Okay -- I memcmp&apos;d the two buffers, and they are identical.  I&apos;m not sure why the CoreGraphics implementation needed to draw to the context before diffing, but maybe there are color space or other considerations I&apos;m not thinking of.

At any rate, I&apos;ve changed to the &quot;cairo_image_surface_get_data&quot; implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385956</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-14 12:28:10 -0700</bug_when>
    <thetext>Attachment 89623 did not pass style-queue:

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

Tools/DumpRenderTree/win/ImageDiffCairo.cpp:32:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 7 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>386093</commentid>
    <comment_count>12</comment_count>
      <attachid>89623</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-04-14 15:14:48 -0700</bug_when>
    <thetext>Comment on attachment 89623
Patch

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

Looks good. Please consider my suggestions before landing.

&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:58
&gt; +static inline float strtof(const char *nptr, char **endptr)
&gt; +{
&gt; +    return strtod(nptr, endptr);
&gt; +}
&gt; +#endif

Looks like the fixes here were lost? Please fix before landing. :)

&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:91
&gt; +static cairo_user_data_key_t imageDataKey;

Should give this the same naming convention as the statics above s_imageDataKey.

&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:113
&gt; +    unsigned char* basePixel = cairo_image_surface_get_data(baseImage);
&gt; +    unsigned char* pixel = cairo_image_surface_get_data(testImage);

I think something like testPixel would be clearer here. Or even actualPixels and expectedPixels. :)

&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:161
&gt; +    if (difference &gt; 0) {
&gt; +        normalizeBuffer(maxDistance, reinterpret_cast&lt;unsigned char*&gt;(diffBuffer), height * width);
&gt; +        
&gt; +        diffImage = cairo_image_surface_create_for_data(diffPixel, CAIRO_FORMAT_ARGB32, width, height, width * s_bytesPerPixel); 
&gt; +        cairo_surface_set_user_data(diffImage, &amp;imageDataKey, diffBuffer, releaseMallocBuffer);
&gt; +    } else
&gt; +        free(diffBuffer);
&gt; +    
&gt; +    return diffImage;

I think an early return would be clearer here: 

if (difference &lt;= 0) {
    free(diffBuffer);
    return 0;
}

normalizeBuffer(maxDistance, reinterpret_cast&lt;unsigned char*&gt;(diffBuffer), height * width);
cairo_surface_t* diffImage = cairo_image_surface_create_for_data(diffPixel, CAIRO_FORMAT_ARGB32, width, height, width * s_bytesPerPixel);
cairo_surface_set_user_data(diffImage, &amp;imageDataKey, diffBuffer, releaseMallocBuffer);
return diffImage;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386161</commentid>
    <comment_count>13</comment_count>
      <attachid>89623</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-14 16:29:02 -0700</bug_when>
    <thetext>Comment on attachment 89623
Patch

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

&gt;&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:58
&gt;&gt; +#endif
&gt; 
&gt; Looks like the fixes here were lost? Please fix before landing. :)

Whoops!  Fixed.

&gt;&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:91
&gt;&gt; +static cairo_user_data_key_t imageDataKey;
&gt; 
&gt; Should give this the same naming convention as the statics above s_imageDataKey.

Done.

&gt;&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:113
&gt;&gt; +    unsigned char* pixel = cairo_image_surface_get_data(testImage);
&gt; 
&gt; I think something like testPixel would be clearer here. Or even actualPixels and expectedPixels. :)

Agreed.  I switched to baselinePixels and actualPixels, to match the image names in the main loop.

&gt;&gt; Tools/DumpRenderTree/win/ImageDiffCairo.cpp:161
&gt;&gt; +    return diffImage;
&gt; 
&gt; I think an early return would be clearer here: 
&gt; 
&gt; if (difference &lt;= 0) {
&gt;     free(diffBuffer);
&gt;     return 0;
&gt; }
&gt; 
&gt; normalizeBuffer(maxDistance, reinterpret_cast&lt;unsigned char*&gt;(diffBuffer), height * width);
&gt; cairo_surface_t* diffImage = cairo_image_surface_create_for_data(diffPixel, CAIRO_FORMAT_ARGB32, width, height, width * s_bytesPerPixel);
&gt; cairo_surface_set_user_data(diffImage, &amp;imageDataKey, diffBuffer, releaseMallocBuffer);
&gt; return diffImage;

Done!

&gt; Tools/Scripts/old-run-webkit-tests:-129
&gt; -my @additionalPlatformDirectories = ();

Note: These changes were not mine.  I must have a conflict in the diff.  I&apos;ll make sure none of these changes are part of the commit.

&gt; Tools/Scripts/old-run-webkit-tests:-281
&gt; -                                  Look in the specified directory before looking in any of the default platform-specific directories

Ditto.

&gt; Tools/Scripts/old-run-webkit-tests:-330
&gt; -    &apos;additional-platform-directory=s&apos; =&gt; \@additionalPlatformDirectories,

Ditto

&gt; Tools/Scripts/old-run-webkit-tests:-2179
&gt; -

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386166</commentid>
    <comment_count>14</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-04-14 16:32:03 -0700</bug_when>
    <thetext>Committed r83912: &lt;http://trac.webkit.org/changeset/83912&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89481</attachid>
            <date>2011-04-13 15:35:34 -0700</date>
            <delta_ts>2011-04-13 17:18:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58486-20110413153533.patch</filename>
            <type>text/plain</type>
            <size>16926</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDgzNzcxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjkgQEAKKzIwMTEtMDQtMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXaW5D
YWlyb10gSW1wbGVtZW50IEltYWdlRGlmZiBMb2dpYy4KKyAgICAgICAgaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0ODYKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2NhaXJvL0ltYWdlRGlmZkNhaXJvLmNwcDogQWRkZWQuCisgICAgICAgIChzdHJ0b2YpOgorICAg
ICAgICAocmVhZEZyb21EYXRhKToKKyAgICAgICAgKGNyZWF0ZUltYWdlRnJvbVN0ZGluKToKKyAg
ICAgICAgKHJlbGVhc2VNYWxsb2NCdWZmZXIpOgorICAgICAgICAoY3JlYXRlRGlmZmVyZW5jZUlt
YWdlKToKKyAgICAgICAgKGltYWdlSGFzQWxwaGEpOgorICAgICAgICAod3JpdGVUb0RhdGEpOgor
ICAgICAgICAobWFpbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0ltYWdlRGlmZi52
Y3Byb2o6IFVwZGF0ZWQgZm9yIG5ldworICAgICAgICAgIEltYWdlRGlmZkNhaXJvLmNwcCAoZXhj
bHVkaW5nIGZyb20gQXBwbGUgYnVpbGRzKS4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4v
SW1hZ2VEaWZmRGVidWdDYWlyb0NGTGl0ZS52c3Byb3BzOiBVc2UKKyAgICAgICAgICBuZXcgSW1h
Z2VEaWZmV2luQ2Fpcm9Db21tb24udnNwcm9wcyBmaWxlLgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3dpbi9JbWFnZURpZmZSZWxlYXNlQ2Fpcm9DRkxpdGUudnNwcm9wczogVXNlCisgICAgICAg
ICAgbmV3IEltYWdlRGlmZldpbkNhaXJvQ29tbW9uLnZzcHJvcHMgZmlsZS4KKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZmV2luQ2Fpcm9Db21tb24udnNwcm9wczogQWRkZWQu
CisgICAgICAgICogU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0czogTWFrZSBzdXJlIHByb3Bl
ciBleGVjdXRhYmxlCisgICAgICAgICAgaXMgYnVpbHQgYW5kIGV4ZWN1dGVkIGZvciBXaW5DYWly
byBwb3J0LgorCiAyMDExLTA0LTEzICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1paGFpIFBhcnBhcml0YS4KSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2NhaXJvL0ltYWdlRGlmZkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jYWlyby9JbWFnZURpZmZDYWlyby5jcHAJKHJldmlzaW9uIDApCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9JbWFnZURpZmZDYWlyby5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBCZW4g
TGEgTW9uaWNhIDxiZW4ubGFtb25pY2FAZ21haWwuY29tPi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQnJlbnQgRnVsZ2hhbS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmluZSBt
aW4gbWluCisKKy8vIEZJWE1FOiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gaW5jbHVkZSB0aGVzZSBk
ZWZpbmVzIGZyb20gYSBjb25maWcuaCBzb21ld2hlcmUuCisjZGVmaW5lIEpTX0VYUE9SVF9QUklW
QVRFCisjZGVmaW5lIFdURl9FWFBPUlRfUFJJVkFURQorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiBQTEFURk9STShX
SU4pCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2luY2x1ZGUgPGZjbnRsLmg+Cisj
aW5jbHVkZSA8aW8uaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisjaWYgUExBVEZPUk0oV0lOKQor
c3RhdGljIGlubGluZSBmbG9hdCBzdHJ0b2YoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0
cikKK3sKKyAgICByZXR1cm4gc3RydG9kKG5wdHIsIGVuZHB0cik7Cit9CisjZW5kaWYKKworc3Rh
dGljIGNhaXJvX3N0YXR1c190IHJlYWRGcm9tRGF0YSh2b2lkKiBjbG9zdXJlLCB1bnNpZ25lZCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworICAgIENGTXV0YWJsZURhdGFSZWYg
Y2ZEYXRhT2JqID0gKENGTXV0YWJsZURhdGFSZWYpY2xvc3VyZTsKKworICAgIENGRGF0YUdldEJ5
dGVzKGNmRGF0YU9iaiwgQ0ZSYW5nZU1ha2UoMCwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YU9iaikp
LCBkYXRhKTsKKworICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGlj
IGNhaXJvX3N1cmZhY2VfdCogY3JlYXRlSW1hZ2VGcm9tU3RkaW4oaW50IGJ5dGVzUmVtYWluaW5n
KQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzIwNDhdOworICAgIFJldGFpblB0cjxDRk11
dGFibGVEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoMCwgYnl0ZXNS
ZW1haW5pbmcpKTsKKworICAgIHdoaWxlIChieXRlc1JlbWFpbmluZyA+IDApIHsKKyAgICAgICAg
c2l6ZV90IGJ5dGVzVG9SZWFkID0gbWluKGJ5dGVzUmVtYWluaW5nLCAyMDQ4KTsKKyAgICAgICAg
c2l6ZV90IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlciwgMSwgYnl0ZXNUb1JlYWQsIHN0ZGluKTsK
KyAgICAgICAgQ0ZEYXRhQXBwZW5kQnl0ZXMoZGF0YS5nZXQoKSwgYnVmZmVyLCBzdGF0aWNfY2Fz
dDxDRkluZGV4PihieXRlc1JlYWQpKTsKKyAgICAgICAgYnl0ZXNSZW1haW5pbmcgLT0gc3RhdGlj
X2Nhc3Q8aW50PihieXRlc1JlYWQpOworICAgIH0KKworICAgIHJldHVybiBjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZV9mcm9tX3BuZ19zdHJlYW0gKChjYWlyb19yZWFkX2Z1bmNfdClyZWFkRnJv
bURhdGEsIGRhdGEuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlTWFsbG9jQnVmZmVy
KHZvaWQqIGRhdGEpCit7CisgICAgZnJlZShkYXRhKTsKK30KKworc3RhdGljIGNhaXJvX3VzZXJf
ZGF0YV9rZXlfdCBpbWFnZURhdGFLZXk7CisKK3N0YXRpYyBjYWlyb19zdXJmYWNlX3QqIGNyZWF0
ZURpZmZlcmVuY2VJbWFnZShjYWlyb19zdXJmYWNlX3QqIGJhc2VJbWFnZSwgY2Fpcm9fc3VyZmFj
ZV90KiB0ZXN0SW1hZ2UsIGZsb2F0JiBkaWZmZXJlbmNlKQoreworICAgIHNpemVfdCB3aWR0aCA9
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGJhc2VJbWFnZSk7CisgICAgc2l6ZV90IGhl
aWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChiYXNlSW1hZ2UpOworICAgIHNp
emVfdCByb3dCeXRlcyA9IHdpZHRoICogNDsKKworICAgIC8vIERyYXcgYmFzZSBpbWFnZSBpbiBi
aXRtYXAgY29udGV4dAorICAgIHZvaWQqIGJhc2VCdWZmZXIgPSBjYWxsb2MoaGVpZ2h0LCByb3dC
eXRlcyk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBiYXNlSW1hZ2VTdG9yZSA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKCh1bnNpZ25lZCBjaGFyKiliYXNlQnVmZmVyLCBDQUlS
T19GT1JNQVRfQVJHQjMyLCB3aWR0aCwgaGVpZ2h0LCB3aWR0aCAqIDQpOyAKKyAgICBjYWlyb190
KiBiYXNlQ29udGV4dCA9IGNhaXJvX2NyZWF0ZShiYXNlSW1hZ2VTdG9yZSk7CisgICAgY2Fpcm9f
c3VyZmFjZV9kZXN0cm95KGJhc2VJbWFnZVN0b3JlKTsKKworICAgIGNhaXJvX3NldF9zb3VyY2Vf
c3VyZmFjZShiYXNlQ29udGV4dCwgYmFzZUltYWdlLCAwLCAwKTsKKyAgICBjYWlyb19wYWludChi
YXNlQ29udGV4dCk7CisgICAgY2Fpcm9fZGVzdHJveShiYXNlQ29udGV4dCk7CisKKyAgICAvLyBE
cmF3IHRlc3QgaW1hZ2UgaW4gYml0bWFwIGNvbnRleHQKKyAgICB2b2lkKiBidWZmZXIgPSBjYWxs
b2MoaGVpZ2h0LCByb3dCeXRlcyk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiB0ZXN0SW1hZ2VTdG9y
ZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKCh1bnNpZ25lZCBjaGFyKili
dWZmZXIsIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoLCBoZWlnaHQsIHdpZHRoICogNCk7IAor
ICAgIGNhaXJvX3QqIHRlc3RDb250ZXh0ID0gY2Fpcm9fY3JlYXRlKHRlc3RJbWFnZVN0b3JlKTsK
KyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodGVzdEltYWdlU3RvcmUpOworCisgICAgY2Fpcm9f
c2V0X3NvdXJjZV9zdXJmYWNlKHRlc3RDb250ZXh0LCB0ZXN0SW1hZ2UsIDAsIDApOworICAgIGNh
aXJvX3BhaW50KHRlc3RDb250ZXh0KTsKKyAgICBjYWlyb19kZXN0cm95KHRlc3RDb250ZXh0KTsK
KworICAgIC8vIENvbXBhcmUgdGhlIGNvbnRlbnQgb2YgdGhlIDIgYml0bWFwcworICAgIHZvaWQq
IGRpZmZCdWZmZXIgPSBtYWxsb2Mod2lkdGggKiBoZWlnaHQpOworICAgIGZsb2F0IGNvdW50ID0g
MC4wZjsKKyAgICBmbG9hdCBzdW0gPSAwLjBmOworICAgIGZsb2F0IG1heERpc3RhbmNlID0gMC4w
ZjsKKyAgICB1bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWwgPSAodW5zaWduZWQgY2hhciopYmFzZUJ1
ZmZlcjsKKyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbCA9ICh1bnNpZ25lZCBjaGFyKilidWZmZXI7
CisgICAgdW5zaWduZWQgY2hhciogZGlmZiA9ICh1bnNpZ25lZCBjaGFyKilkaWZmQnVmZmVyOwor
ICAgIGZvciAoc2l6ZV90IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKKyAgICAgICAgZm9yIChz
aXplX3QgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSAo
cGl4ZWxbMF0gLSBiYXNlUGl4ZWxbMF0pIC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMF0s
IGJhc2VQaXhlbFswXSk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IChwaXhlbFsxXSAtIGJh
c2VQaXhlbFsxXSkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFsxXSwgYmFzZVBpeGVsWzFd
KTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSAocGl4ZWxbMl0gLSBiYXNlUGl4ZWxbMl0pIC8g
bWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMl0sIGJhc2VQaXhlbFsyXSk7CisgICAgICAgICAg
ICBmbG9hdCBhbHBoYSA9IChwaXhlbFszXSAtIGJhc2VQaXhlbFszXSkgLyBtYXg8ZmxvYXQ+KDI1
NSAtIGJhc2VQaXhlbFszXSwgYmFzZVBpeGVsWzNdKTsKKyAgICAgICAgICAgIGZsb2F0IGRpc3Rh
bmNlID0gc3FydGYocmVkICogcmVkICsgZ3JlZW4gKiBncmVlbiArIGJsdWUgKiBibHVlICsgYWxw
aGEgKiBhbHBoYSkgLyAyLjBmOworICAgICAgICAgICAgCisgICAgICAgICAgICAqZGlmZisrID0g
KHVuc2lnbmVkIGNoYXIpKGRpc3RhbmNlICogMjU1LjBmKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGRpc3RhbmNlID49IDEuMGYgLyAyNTUuMGYpIHsKKyAgICAgICAgICAgICAgICBj
b3VudCArPSAxLjBmOworICAgICAgICAgICAgICAgIHN1bSArPSBkaXN0YW5jZTsKKyAgICAgICAg
ICAgICAgICBpZiAoZGlzdGFuY2UgPiBtYXhEaXN0YW5jZSkKKyAgICAgICAgICAgICAgICAgICAg
bWF4RGlzdGFuY2UgPSBkaXN0YW5jZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYmFzZVBpeGVsICs9IDQ7CisgICAgICAgICAgICBwaXhlbCArPSA0OworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIC8vIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYXMgYSBwZXJj
ZW50YWdlIGNvbWJpbmluZyBib3RoIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IHBpeGVscyBhbmQg
dGhlaXIgZGlmZmVyZW5jZSBhbW91bnQgaS5lLiB0aGUgYXZlcmFnZSBkaXN0YW5jZSBvdmVyIHRo
ZSBlbnRpcmUgaW1hZ2UKKyAgICBpZiAoY291bnQgPiAwLjBmKQorICAgICAgICBkaWZmZXJlbmNl
ID0gMTAwLjBmICogc3VtIC8gKGhlaWdodCAqIHdpZHRoKTsKKyAgICBlbHNlCisgICAgICAgIGRp
ZmZlcmVuY2UgPSAwLjBmOworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBkaWZmSW1hZ2UgPSAwOwor
ICAgIC8vIEdlbmVyYXRlIGEgbm9ybWFsaXplZCBkaWZmIGltYWdlIGlmIHRoZXJlIGlzIGFueSBk
aWZmZXJlbmNlCisgICAgaWYgKGRpZmZlcmVuY2UgPiAwLjBmKSB7CisgICAgICAgIGlmIChtYXhE
aXN0YW5jZSA8IDEuMGYpIHsKKyAgICAgICAgICAgIGRpZmYgPSAodW5zaWduZWQgY2hhciopZGlm
ZkJ1ZmZlcjsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IHAgPSAwOyBwIDwgaGVpZ2h0ICogd2lk
dGg7ICsrcCkKKyAgICAgICAgICAgICAgICBkaWZmW3BdID0gZGlmZltwXSAvIG1heERpc3RhbmNl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkaWZmSW1hZ2UgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgodW5zaWduZWQgY2hhciopZGlmZkJ1ZmZlciwgQ0FJUk9f
Rk9STUFUX0FSR0IzMiwgd2lkdGgsIGhlaWdodCwgd2lkdGggKiA0KTsgCisgICAgICAgIGNhaXJv
X3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShkaWZmSW1hZ2UsICZpbWFnZURhdGFLZXksIGRpZmZCdWZm
ZXIsIHJlbGVhc2VNYWxsb2NCdWZmZXIpOworICAgIH0gZWxzZQorICAgICAgICBmcmVlKGRpZmZC
dWZmZXIpOworICAgIAorICAgIC8vIERlc3Ryb3kgZHJhd2luZyBidWZmZXJzCisgICAgaWYgKGJ1
ZmZlcikKKyAgICAgICAgZnJlZShidWZmZXIpOworICAgIGlmIChiYXNlQnVmZmVyKQorICAgICAg
ICBmcmVlKGJhc2VCdWZmZXIpOworICAgIAorICAgIHJldHVybiBkaWZmSW1hZ2U7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpbWFnZUhhc0FscGhhKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCit7
CisgICAgY2Fpcm9fZm9ybWF0X3QgaW5mbyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1h
dChpbWFnZSk7CisgICAgCisgICAgcmV0dXJuIChpbmZvID09IENBSVJPX0ZPUk1BVF9BUkdCMzIp
OworfQorCitzdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVUb0RhdGEodm9pZCogY2xvc3VyZSwg
dW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKyAgICBDRk11dGFi
bGVEYXRhUmVmIGNmRGF0YU9iaiA9IChDRk11dGFibGVEYXRhUmVmKWNsb3N1cmU7CisKKyAgICBD
RkRhdGFBcHBlbmRCeXRlcyhjZkRhdGFPYmosIGRhdGEsIGxlbmd0aCk7CisKKyAgICByZXR1cm4g
Q0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFy
KiBhcmd2W10pCit7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIF9zZXRtb2RlKDAsIF9PX0JJTkFS
WSk7CisgICAgX3NldG1vZGUoMSwgX09fQklOQVJZKTsKKyNlbmRpZgorCisgICAgZmxvYXQgdG9s
ZXJhbmNlID0gMC4wZjsKKworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7Cisg
ICAgICAgIGlmICghc3RyY21wKGFyZ3ZbaV0sICItdCIpIHx8ICFzdHJjbXAoYXJndltpXSwgIi0t
dG9sZXJhbmNlIikpIHsKKyAgICAgICAgICAgIGlmIChpID49IGFyZ2MgLSAxKQorICAgICAgICAg
ICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB0b2xlcmFuY2UgPSBzdHJ0b2YoYXJndltpICsg
MV0sIDApOworICAgICAgICAgICAgKytpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsKKyAgICBjYWlyb19zdXJmYWNlX3Qq
IGFjdHVhbEltYWdlID0gMDsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGJhc2VsaW5lSW1hZ2UgPSAw
OworCisgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKSkgewor
ICAgICAgICAvLyByZW1vdmUgdGhlIENSCisgICAgICAgIGNoYXIqIG5ld0xpbmVDaGFyYWN0ZXIg
PSBzdHJjaHIoYnVmZmVyLCAnXG4nKTsKKyAgICAgICAgaWYgKG5ld0xpbmVDaGFyYWN0ZXIpCisg
ICAgICAgICAgICAqbmV3TGluZUNoYXJhY3RlciA9ICdcMCc7CisKKyAgICAgICAgaWYgKCFzdHJu
Y21wKCJDb250ZW50LUxlbmd0aDogIiwgYnVmZmVyLCAxNikpIHsKKyAgICAgICAgICAgIHN0cnRv
ayhidWZmZXIsICIgIik7CisgICAgICAgICAgICBpbnQgaW1hZ2VTaXplID0gc3RydG9sKHN0cnRv
aygwLCAiICIpLCAwLCAxMCk7CisKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPiAwICYmICFh
Y3R1YWxJbWFnZSkKKyAgICAgICAgICAgICAgICBhY3R1YWxJbWFnZSA9IGNyZWF0ZUltYWdlRnJv
bVN0ZGluKGltYWdlU2l6ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChpbWFnZVNpemUgPiAwICYm
ICFiYXNlbGluZUltYWdlKQorICAgICAgICAgICAgICAgIGJhc2VsaW5lSW1hZ2UgPSBjcmVhdGVJ
bWFnZUZyb21TdGRpbihpbWFnZVNpemUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGZwdXRzKCJlcnJvciwgaW1hZ2Ugc2l6ZSBtdXN0IGJlIHNwZWNpZmllZC5cbiIsIHN0ZG91
dCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWN0dWFsSW1hZ2UgJiYgYmFzZWxpbmVJbWFn
ZSkgeworICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBkaWZmSW1hZ2UgPSAwOworICAgICAg
ICAgICAgZmxvYXQgZGlmZmVyZW5jZSA9IDEwMC4wZjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChhY3R1YWxJbWFnZSkgPT0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoYmFzZWxpbmVJbWFnZSkpICYmIChjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9oZWlnaHQoYWN0dWFsSW1hZ2UpID09IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChiYXNlbGluZUltYWdlKSkgJiYgKGltYWdlSGFzQWxwaGEoYWN0dWFsSW1hZ2Up
ID09IGltYWdlSGFzQWxwaGEoYmFzZWxpbmVJbWFnZSkpKSB7CisgICAgICAgICAgICAgICAgZGlm
ZkltYWdlID0gY3JlYXRlRGlmZmVyZW5jZUltYWdlKGFjdHVhbEltYWdlLCBiYXNlbGluZUltYWdl
LCBkaWZmZXJlbmNlKTsgLy8gZGlmZmVyZW5jZSBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlCisgICAg
ICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPD0gdG9sZXJhbmNlKQorICAgICAgICAgICAgICAg
ICAgICBkaWZmZXJlbmNlID0gMC4wZjsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGlmZmVyZW5jZSA9IHJvdW5kZihkaWZmZXJlbmNlICogMTAwLjBmKSAvIDEw
MC4wZjsKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSA9IG1heChkaWZmZXJlbmNlLCAw
LjAxZik7IC8vIHJvdW5kIHRvIDIgZGVjaW1hbCBwbGFjZXMKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmcHV0cygiZXJyb3IsIHRlc3QgYW5k
IHJlZmVyZW5jZSBpbWFnZSBoYXZlIGRpZmZlcmVudCBwcm9wZXJ0aWVzLlxuIiwgc3RkZXJyKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlID4gMC4wZikgewor
ICAgICAgICAgICAgICAgIGlmIChkaWZmSW1hZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgUmV0
YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGltYWdlRGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVN
dXRhYmxlKDAsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV93cml0ZV90
b19wbmdfc3RyZWFtKGRpZmZJbWFnZSwgKGNhaXJvX3dyaXRlX2Z1bmNfdCl3cml0ZVRvRGF0YSwg
aW1hZ2VEYXRhLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDb250ZW50LUxl
bmd0aDogJWx1XG4iLCBDRkRhdGFHZXRMZW5ndGgoaW1hZ2VEYXRhLmdldCgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIGZ3cml0ZShDRkRhdGFHZXRCeXRlUHRyKGltYWdlRGF0YS5nZXQoKSksIDEs
IENGRGF0YUdldExlbmd0aChpbWFnZURhdGEuZ2V0KCkpLCBzdGRvdXQpOworICAgICAgICAgICAg
ICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koZGlmZkltYWdlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGlmZkltYWdlID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJkaWZmOiAlMDEuMmYlJSBmYWlsZWRc
biIsIGRpZmZlcmVuY2UpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRvdXQsICJkaWZmOiAlMDEuMmYlJSBwYXNzZWRcbiIsIGRpZmZlcmVuY2UpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koYWN0dWFsSW1hZ2Up
OworICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGJhc2VsaW5lSW1hZ2UpOworICAg
ICAgICAgICAgYWN0dWFsSW1hZ2UgPSAwOworICAgICAgICAgICAgYmFzZWxpbmVJbWFnZSA9IDA7
CisgICAgICAgIH0KKworICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICB9CisKKyAgICByZXR1
cm4gMDsKK30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmYudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmYudmNwcm9q
CShyZXZpc2lvbiA4Mzc3MSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmYu
dmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsOCArMzg2LDYwIEBACiAJPC9SZWZlcmVuY2Vz
PgogCTxGaWxlcz4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cY2Fpcm9cSW1hZ2VEaWZm
Q2Fpcm8uY3BwIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8
V2luMzIiCisJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJPgorCQkJCTxUb29sCisJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZp
bGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1
cmF0aW9uCisJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJ
UmVsYXRpdmVQYXRoPSIuLlxjZ1xJbWFnZURpZmZDRy5jcHAiCiAJCQk+CisJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJPC9GaWxlPgog
CTwvRmlsZXM+CiAJPEdsb2JhbHM+CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vSW1h
Z2VEaWZmRGVidWdDYWlyb0NGTGl0ZS52c3Byb3BzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZEZWJ1Z0NhaXJvQ0ZMaXRlLnZzcHJvcHMJKHJldmlzaW9u
IDgzNzcxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ltYWdlRGlmZkRlYnVnQ2Fpcm9D
RkxpdGUudnNwcm9wcwkod29ya2luZyBjb3B5KQpAQCAtNyw2ICs3LDYgQEAKICAgICAgICQoV2Vi
S2l0VlNQcm9wc1JlZGlyZWN0aW9uRGlyKS4uXC4uXC4uXFdlYktpdExpYnJhcmllc1x3aW5cdG9v
bHNcdnNwcm9wc1xjb21tb24udnNwcm9wczsKICAgICAgICQoV2ViS2l0VlNQcm9wc1JlZGlyZWN0
aW9uRGlyKS4uXC4uXC4uXFdlYktpdExpYnJhcmllc1x3aW5cdG9vbHNcdnNwcm9wc1xkZWJ1Zy52
c3Byb3BzOwogICAgICAgJChXZWJLaXRWU1Byb3BzUmVkaXJlY3Rpb25EaXIpLi5cLi5cLi5cV2Vi
S2l0TGlicmFyaWVzXHdpblx0b29sc1x2c3Byb3BzXGRlYnVnX3dpbmNhaXJvLnZzcHJvcHM7Ci0g
ICAgICAuXEltYWdlRGlmZkNvbW1vbi52c3Byb3BzIgorICAgICAgLlxJbWFnZURpZmZXaW5DYWly
b0NvbW1vbi52c3Byb3BzIgogCT4KIDwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4KSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZSZWxlYXNlQ2Fpcm9DRkxpdGUudnNw
cm9wcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZmUmVs
ZWFzZUNhaXJvQ0ZMaXRlLnZzcHJvcHMJKHJldmlzaW9uIDgzNzcxKQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0ltYWdlRGlmZlJlbGVhc2VDYWlyb0NGTGl0ZS52c3Byb3BzCSh3b3JraW5n
IGNvcHkpCkBAIC04LDYgKzgsNiBAQAogICAgICAgJChXZWJLaXRWU1Byb3BzUmVkaXJlY3Rpb25E
aXIpLi5cLi5cLi5cV2ViS2l0TGlicmFyaWVzXHdpblx0b29sc1x2c3Byb3BzXHJlbGVhc2Vwcm9k
dWN0aW9uLnZzcHJvcHM7CiAgICAgICAkKFdlYktpdFZTUHJvcHNSZWRpcmVjdGlvbkRpcikuLlwu
LlwuLlxXZWJLaXRMaWJyYXJpZXNcd2luXHRvb2xzXHZzcHJvcHNccmVsZWFzZS52c3Byb3BzOwog
ICAgICAgJChXZWJLaXRWU1Byb3BzUmVkaXJlY3Rpb25EaXIpLi5cLi5cLi5cV2ViS2l0TGlicmFy
aWVzXHdpblx0b29sc1x2c3Byb3BzXFdpbkNhaXJvLnZzcHJvcHM7Ci0gICAgICAuXEltYWdlRGlm
ZkNvbW1vbi52c3Byb3BzIgorICAgICAgLlxJbWFnZURpZmZXaW5DYWlyb0NvbW1vbi52c3Byb3Bz
IgogCT4KIDwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4KSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9JbWFnZURpZmZXaW5DYWlyb0NvbW1vbi52c3Byb3BzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZXaW5DYWlyb0NvbW1vbi52c3Byb3Bz
CShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ltYWdlRGlmZldpbkNh
aXJvQ29tbW9uLnZzcHJvcHMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb3Bl
cnR5U2hlZXQKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5h
bWU9IkltYWdlRGlmZkNvbW1vbiIKKwk+CisJPFRvb2wKKwkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChDb25maWd1cmF0aW9u
QnVpbGREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGlu
Y2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVk
ZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVz
RGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHBy
aXZhdGUmcXVvdDsiCisJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOT01JTk1BWCIKKwkvPgor
CTxUb29sCisJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJQWRkaXRpb25hbE9wdGlvbnM9Ii9OWENP
TVBBVCIKKwkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iSmF2YVNjcmlwdENvcmUkKFdlYktpdERM
TENvbmZpZ1N1ZmZpeCkubGliIGNhaXJvLmxpYiBsaWJqcGVnLmxpYiBsaWJwbmcubGliIHpsaWIu
bGliIE1zaW1nMzIubGliIENGTGl0ZSQoTGlicmFyeUNvbmZpZ1N1ZmZpeCkubGliIgorCQlTdWJT
eXN0ZW09IjEiCisJLz4KKzwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4KSW5kZXg6IFRvb2xz
L1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwkocmV2aXNpb24gODM3NDApCisrKyBUb29scy9TY3JpcHRz
L29sZC1ydW4td2Via2l0LXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC00MjcsNiArNDI3LDcgQEAg
bXkgJGR1bXBUb29sTmFtZSA9ICR1c2VXZWJLaXRUZXN0UnVubmVyCiAKIGlmIChpc0FwcGxlV2lu
V2ViS2l0KCkpIHsKICAgICAkZHVtcFRvb2xOYW1lIC49ICJfZGVidWciIGlmIGNvbmZpZ3VyYXRp
b25Gb3JWaXN1YWxTdHVkaW8oKSBlcSAiRGVidWdfQWxsIjsKKyAgICAkZHVtcFRvb2xOYW1lIC49
ICJfZGVidWciIGlmIGNvbmZpZ3VyYXRpb25Gb3JWaXN1YWxTdHVkaW8oKSBlcSAiRGVidWdfQ2Fp
cm9fQ0ZMaXRlIjsKICAgICAkZHVtcFRvb2xOYW1lIC49ICRDb25maWd7X2V4ZX07CiB9CiBteSAk
ZHVtcFRvb2wgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRwcm9kdWN0RGlyLCAkZHVtcFRvb2xOYW1l
KTsKQEAgLTQzNCw2ICs0MzUsNyBAQCBkaWUgImNhbid0IGZpbmQgZXhlY3V0YWJsZSAkZHVtcFRv
b2xOYW1lCiAKIG15ICRpbWFnZURpZmZUb29sID0gIiRwcm9kdWN0RGlyL0ltYWdlRGlmZiI7CiAk
aW1hZ2VEaWZmVG9vbCAuPSAiX2RlYnVnIiBpZiBpc0N5Z3dpbigpICYmIGNvbmZpZ3VyYXRpb25G
b3JWaXN1YWxTdHVkaW8oKSBlcSAiRGVidWdfQWxsIjsKKyRpbWFnZURpZmZUb29sIC49ICJfZGVi
dWciIGlmIGlzQ3lnd2luKCkgJiYgY29uZmlndXJhdGlvbkZvclZpc3VhbFN0dWRpbygpIGVxICJE
ZWJ1Z19DYWlyb19DRkxpdGUiOwogZGllICJjYW4ndCBmaW5kIGV4ZWN1dGFibGUgJGltYWdlRGlm
ZlRvb2wgKGxvb2tlZCBpbiAkcHJvZHVjdERpcilcbiIgaWYgJHBpeGVsVGVzdHMgJiYgIS14ICRp
bWFnZURpZmZUb29sOwogCiBjaGVja0ZyYW1ld29ya3MoKSB1bmxlc3MgaXNDeWd3aW4oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89499</attachid>
            <date>2011-04-13 17:18:33 -0700</date>
            <delta_ts>2011-04-14 12:27:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58486-20110413171832.patch</filename>
            <type>text/plain</type>
            <size>17215</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDgzNzcxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjkgQEAKKzIwMTEtMDQtMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXaW5D
YWlyb10gSW1wbGVtZW50IEltYWdlRGlmZiBMb2dpYy4KKyAgICAgICAgaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0ODYKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3dpbi9JbWFnZURpZmZDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoc3RydG9mKToKKyAgICAg
ICAgKHJlYWRGcm9tRGF0YSk6CisgICAgICAgIChjcmVhdGVJbWFnZUZyb21TdGRpbik6CisgICAg
ICAgIChyZWxlYXNlTWFsbG9jQnVmZmVyKToKKyAgICAgICAgKGNyZWF0ZURpZmZlcmVuY2VJbWFn
ZSk6CisgICAgICAgIChpbWFnZUhhc0FscGhhKToKKyAgICAgICAgKHdyaXRlVG9EYXRhKToKKyAg
ICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmYudmNw
cm9qOiBVcGRhdGVkIGZvciBuZXcKKyAgICAgICAgICBJbWFnZURpZmZDYWlyby5jcHAgKGV4Y2x1
ZGluZyBmcm9tIEFwcGxlIGJ1aWxkcykuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0lt
YWdlRGlmZkRlYnVnQ2Fpcm9DRkxpdGUudnNwcm9wczogVXNlCisgICAgICAgICAgbmV3IEltYWdl
RGlmZldpbkNhaXJvQ29tbW9uLnZzcHJvcHMgZmlsZS4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS93aW4vSW1hZ2VEaWZmUmVsZWFzZUNhaXJvQ0ZMaXRlLnZzcHJvcHM6IFVzZQorICAgICAgICAg
IG5ldyBJbWFnZURpZmZXaW5DYWlyb0NvbW1vbi52c3Byb3BzIGZpbGUuCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd2luL0ltYWdlRGlmZldpbkNhaXJvQ29tbW9uLnZzcHJvcHM6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHM6IE1ha2Ugc3VyZSBwcm9wZXIg
ZXhlY3V0YWJsZQorICAgICAgICAgIGlzIGJ1aWx0IGFuZCBleGVjdXRlZCBmb3IgV2luQ2Fpcm8g
cG9ydC4KKwogMjAxMS0wNC0xMyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBNaWhhaSBQYXJwYXJpdGEuCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZmLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZmLnZjcHJvagkocmV2aXNpb24gODM3NzEpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZmLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
Mzg2LDggKzM4Niw2MCBAQAogCTwvUmVmZXJlbmNlcz4KIAk8RmlsZXM+CiAJCTxGaWxlCisJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHdpblxJbWFnZURpZmZDYWlyby5jcHAiCisJCQk+CisJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgor
CQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJ
CQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJLz4KKwkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJE
ZWJ1Z19BbGx8V2luMzIiCisJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJPgorCQkJ
CTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJLz4KKwkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJQcm9kdWN0aW9u
fFdpbjMyIgorCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCT4KKwkJCQk8VG9vbAor
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNnXEltYWdlRGlm
ZkNHLmNwcCIKIAkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnX0Nh
aXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQk+CisJ
CQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkvPgorCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2Vf
Q2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCT4K
KwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCS8+CisJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgogCQk8L0ZpbGU+CiAJPC9GaWxlcz4KIAk8R2xvYmFscz4KSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZDYWlyby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ltYWdlRGlmZkNhaXJvLmNwcAkocmV2aXNpb24g
MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZDYWlyby5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBC
ZW4gTGEgTW9uaWNhIDxiZW4ubGFtb25pY2FAZ21haWwuY29tPi4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQnJlbnQgRnVsZ2hhbS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRklY
TUU6IFdlIG5lZWQgdG8gYmUgYWJsZSB0byBpbmNsdWRlIHRoZXNlIGRlZmluZXMgZnJvbSBhIGNv
bmZpZy5oIHNvbWV3aGVyZS4KKyNkZWZpbmUgSlNfRVhQT1JUX1BSSVZBVEUKKyNkZWZpbmUgV1RG
X0VYUE9SVF9QUklWQVRFCisKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxm
Y250bC5oPgorI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitz
dGF0aWMgY29uc3QgaW50IHNfYnVmZmVyU2l6ZSA9IDIwNDg7CitzdGF0aWMgY29uc3QgaW50IHNf
Ynl0ZXNQZXJQaXhlbCA9IDQ7CisKKyNpZiBQTEFURk9STShXSU4pCisjdW5kZWYgbWluCisjdW5k
ZWYgbWF4CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgc3RydG9mKGNvbnN0IGNoYXIgKm5wdHIsIGNo
YXIgKiplbmRwdHIpCit7CisgICAgcmV0dXJuIHN0cnRvZChucHRyLCBlbmRwdHIpOworfQorI2Vu
ZGlmCisKK3N0YXRpYyBjYWlyb19zdGF0dXNfdCByZWFkRnJvbURhdGEodm9pZCogY2xvc3VyZSwg
dW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKyAgICBDRk11dGFi
bGVEYXRhUmVmIGRhdGFTb3VyY2UgPSByZWludGVycHJldF9jYXN0PENGTXV0YWJsZURhdGFSZWY+
KGNsb3N1cmUpOworCisgICAgQ0ZEYXRhR2V0Qnl0ZXMoZGF0YVNvdXJjZSwgQ0ZSYW5nZU1ha2Uo
MCwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGFTb3VyY2UpKSwgZGF0YSk7CisKKyAgICByZXR1cm4gQ0FJ
Uk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBjYWlyb19zdXJmYWNlX3QqIGNyZWF0ZUlt
YWdlRnJvbVN0ZGluKGludCBieXRlc1JlbWFpbmluZykKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1
ZmZlcltzX2J1ZmZlclNpemVdOworICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBkYXRh
KEFkb3B0Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoMCwgYnl0ZXNSZW1haW5pbmcpKTsKKworICAg
IHdoaWxlIChieXRlc1JlbWFpbmluZyA+IDApIHsKKyAgICAgICAgc2l6ZV90IGJ5dGVzVG9SZWFk
ID0gbWluKGJ5dGVzUmVtYWluaW5nLCBzX2J1ZmZlclNpemUpOworICAgICAgICBzaXplX3QgYnl0
ZXNSZWFkID0gZnJlYWQoYnVmZmVyLCAxLCBieXRlc1RvUmVhZCwgc3RkaW4pOworICAgICAgICBD
RkRhdGFBcHBlbmRCeXRlcyhkYXRhLmdldCgpLCBidWZmZXIsIHN0YXRpY19jYXN0PENGSW5kZXg+
KGJ5dGVzUmVhZCkpOworICAgICAgICBieXRlc1JlbWFpbmluZyAtPSBzdGF0aWNfY2FzdDxpbnQ+
KGJ5dGVzUmVhZCk7CisgICAgfQorCisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3Jl
YXRlX2Zyb21fcG5nX3N0cmVhbSAoc3RhdGljX2Nhc3Q8Y2Fpcm9fcmVhZF9mdW5jX3Q+KHJlYWRG
cm9tRGF0YSksIGRhdGEuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlTWFsbG9jQnVm
ZmVyKHZvaWQqIGRhdGEpCit7CisgICAgZnJlZShkYXRhKTsKK30KKworc3RhdGljIGNhaXJvX3Vz
ZXJfZGF0YV9rZXlfdCBpbWFnZURhdGFLZXk7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcGl4ZWxE
aWZmZXJlbmNlKGZsb2F0IGV4cGVjdGVkLCBmbG9hdCBhY3R1YWwpCit7CisgICAgcmV0dXJuIChh
Y3R1YWwgLSBleHBlY3RlZCkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGV4cGVjdGVkLCBleHBlY3RlZCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBub3JtYWxpemVCdWZmZXIoZmxvYXQgbWF4RGlzdGFu
Y2UsIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBpZiAobWF4
RGlzdGFuY2UgPj0gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgcCA9IDA7
IHAgPCBsZW5ndGg7ICsrcCkKKyAgICAgICAgYnVmZmVyW3BdIC89IG1heERpc3RhbmNlOworfQor
CitzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBjcmVhdGVEaWZmZXJlbmNlSW1hZ2UoY2Fpcm9fc3Vy
ZmFjZV90KiBiYXNlSW1hZ2UsIGNhaXJvX3N1cmZhY2VfdCogdGVzdEltYWdlLCBmbG9hdCYgZGlm
ZmVyZW5jZSkKK3sKKyAgICBzaXplX3Qgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93
aWR0aChiYXNlSW1hZ2UpOworICAgIHNpemVfdCBoZWlnaHQgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQoYmFzZUltYWdlKTsKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSB3aWR0aCAqIHNf
Ynl0ZXNQZXJQaXhlbDsKKworICAgIC8vIERyYXcgYmFzZSBpbWFnZSBpbiBiaXRtYXAgY29udGV4
dAorICAgIHZvaWQqIGJhc2VCdWZmZXIgPSBjYWxsb2MoaGVpZ2h0LCByb3dCeXRlcyk7CisgICAg
dW5zaWduZWQgY2hhciogYmFzZVBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oYmFzZUJ1ZmZlcik7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBiYXNlSW1hZ2VTdG9yZSA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGJhc2VQaXhlbCwgQ0FJUk9fRk9STUFU
X0FSR0IzMiwgd2lkdGgsIGhlaWdodCwgd2lkdGggKiA0KTsgCisgICAgY2Fpcm9fdCogYmFzZUNv
bnRleHQgPSBjYWlyb19jcmVhdGUoYmFzZUltYWdlU3RvcmUpOworICAgIGNhaXJvX3N1cmZhY2Vf
ZGVzdHJveShiYXNlSW1hZ2VTdG9yZSk7CisKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2Uo
YmFzZUNvbnRleHQsIGJhc2VJbWFnZSwgMCwgMCk7CisgICAgY2Fpcm9fcGFpbnQoYmFzZUNvbnRl
eHQpOworICAgIGNhaXJvX2Rlc3Ryb3koYmFzZUNvbnRleHQpOworCisgICAgLy8gRHJhdyB0ZXN0
IGltYWdlIGluIGJpdG1hcCBjb250ZXh0CisgICAgdm9pZCogYnVmZmVyID0gY2FsbG9jKGhlaWdo
dCwgcm93Qnl0ZXMpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oYnVmZmVyKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHRlc3RJbWFn
ZVN0b3JlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEocGl4ZWwsIENBSVJP
X0ZPUk1BVF9BUkdCMzIsIHdpZHRoLCBoZWlnaHQsIHdpZHRoICogNCk7IAorICAgIGNhaXJvX3Qq
IHRlc3RDb250ZXh0ID0gY2Fpcm9fY3JlYXRlKHRlc3RJbWFnZVN0b3JlKTsKKyAgICBjYWlyb19z
dXJmYWNlX2Rlc3Ryb3kodGVzdEltYWdlU3RvcmUpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9z
dXJmYWNlKHRlc3RDb250ZXh0LCB0ZXN0SW1hZ2UsIDAsIDApOworICAgIGNhaXJvX3BhaW50KHRl
c3RDb250ZXh0KTsKKyAgICBjYWlyb19kZXN0cm95KHRlc3RDb250ZXh0KTsKKworICAgIC8vIENv
bXBhcmUgdGhlIGNvbnRlbnQgb2YgdGhlIDIgYml0bWFwcworICAgIHZvaWQqIGRpZmZCdWZmZXIg
PSBtYWxsb2Mod2lkdGggKiBoZWlnaHQpOworICAgIHVuc2lnbmVkIGNoYXIqIGRpZmZQaXhlbCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRpZmZCdWZmZXIpOworCisgICAgZmxv
YXQgY291bnQgPSAwOworICAgIGZsb2F0IHN1bSA9IDA7CisgICAgZmxvYXQgbWF4RGlzdGFuY2Ug
PSAwOworICAgIGZvciAoc2l6ZV90IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKKyAgICAgICAg
Zm9yIChzaXplX3QgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAgICBmbG9hdCBy
ZWQgPSBwaXhlbERpZmZlcmVuY2UoYmFzZVBpeGVsWzBdLCBwaXhlbFswXSk7CisgICAgICAgICAg
ICBmbG9hdCBncmVlbiA9IHBpeGVsRGlmZmVyZW5jZShiYXNlUGl4ZWxbMV0sIHBpeGVsWzFdKTsK
KyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbERpZmZlcmVuY2UoYmFzZVBpeGVsWzJdLCBw
aXhlbFsyXSk7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsRGlmZmVyZW5jZShiYXNl
UGl4ZWxbM10sIHBpeGVsWzNdKTsKKworICAgICAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSBzcXJ0
ZihyZWQgKiByZWQgKyBncmVlbiAqIGdyZWVuICsgYmx1ZSAqIGJsdWUgKyBhbHBoYSAqIGFscGhh
KSAvIDIuMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKmRpZmZQaXhlbCsrID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGlzdGFuY2UgKiAyNTUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoZGlzdGFuY2UgPj0gMS4wIC8gMjU1LjApIHsKKyAgICAgICAgICAgICAgICAr
K2NvdW50OworICAgICAgICAgICAgICAgIHN1bSArPSBkaXN0YW5jZTsKKyAgICAgICAgICAgICAg
ICBpZiAoZGlzdGFuY2UgPiBtYXhEaXN0YW5jZSkKKyAgICAgICAgICAgICAgICAgICAgbWF4RGlz
dGFuY2UgPSBkaXN0YW5jZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYmFzZVBpeGVsICs9IHNfYnl0ZXNQZXJQaXhlbDsKKyAgICAgICAgICAgIHBpeGVsICs9IHNf
Ynl0ZXNQZXJQaXhlbDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBDb21wdXRlIHRo
ZSBkaWZmZXJlbmNlIGFzIGEgcGVyY2VudGFnZSBjb21iaW5pbmcgYm90aCB0aGUgbnVtYmVyIG9m
IGRpZmZlcmVudCBwaXhlbHMgYW5kIHRoZWlyIGRpZmZlcmVuY2UgYW1vdW50IGkuZS4gdGhlIGF2
ZXJhZ2UgZGlzdGFuY2Ugb3ZlciB0aGUgZW50aXJlIGltYWdlCisgICAgaWYgKGNvdW50ID4gMCkK
KyAgICAgICAgZGlmZmVyZW5jZSA9IDEwMC4wZiAqIHN1bSAvIChoZWlnaHQgKiB3aWR0aCk7Cisg
ICAgZWxzZQorICAgICAgICBkaWZmZXJlbmNlID0gMDsKKworICAgIGNhaXJvX3N1cmZhY2VfdCog
ZGlmZkltYWdlID0gMDsKKyAgICAvLyBHZW5lcmF0ZSBhIG5vcm1hbGl6ZWQgZGlmZiBpbWFnZSBp
ZiB0aGVyZSBpcyBhbnkgZGlmZmVyZW5jZQorICAgIGlmIChkaWZmZXJlbmNlID4gMCkgeworICAg
ICAgICBub3JtYWxpemVCdWZmZXIobWF4RGlzdGFuY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGRpZmZCdWZmZXIpLCBoZWlnaHQgKiB3aWR0aCk7CisgICAgICAgIAorICAgICAg
ICBkaWZmSW1hZ2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShkaWZmUGl4
ZWwsIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoLCBoZWlnaHQsIHdpZHRoICogc19ieXRlc1Bl
clBpeGVsKTsgCisgICAgICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShkaWZmSW1hZ2Us
ICZpbWFnZURhdGFLZXksIGRpZmZCdWZmZXIsIHJlbGVhc2VNYWxsb2NCdWZmZXIpOworICAgIH0g
ZWxzZQorICAgICAgICBmcmVlKGRpZmZCdWZmZXIpOworICAgIAorICAgIC8vIERlc3Ryb3kgZHJh
d2luZyBidWZmZXJzCisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgZnJlZShidWZmZXIpOworICAg
IGlmIChiYXNlQnVmZmVyKQorICAgICAgICBmcmVlKGJhc2VCdWZmZXIpOworICAgIAorICAgIHJl
dHVybiBkaWZmSW1hZ2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbWFnZUhhc0FscGhhKGNh
aXJvX3N1cmZhY2VfdCogaW1hZ2UpCit7CisgICAgcmV0dXJuIChjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9mb3JtYXQoaW1hZ2UpID09IENBSVJPX0ZPUk1BVF9BUkdCMzIpOworfQorCitzdGF0aWMg
Y2Fpcm9fc3RhdHVzX3Qgd3JpdGVUb0RhdGEodm9pZCogY2xvc3VyZSwgdW5zaWduZWQgY2hhciog
ZGF0YSwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKyAgICBDRk11dGFibGVEYXRhUmVmIGRhdGFU
YXJnZXQgPSByZWludGVycHJldF9jYXN0PENGTXV0YWJsZURhdGFSZWY+KGNsb3N1cmUpOworCisg
ICAgQ0ZEYXRhQXBwZW5kQnl0ZXMoZGF0YVRhcmdldCwgZGF0YSwgbGVuZ3RoKTsKKworICAgIHJl
dHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0
IGNoYXIqIGFyZ3ZbXSkKK3sKKyNpZiBQTEFURk9STShXSU4pCisgICAgX3NldG1vZGUoMCwgX09f
QklOQVJZKTsKKyAgICBfc2V0bW9kZSgxLCBfT19CSU5BUlkpOworI2VuZGlmCisKKyAgICBmbG9h
dCB0b2xlcmFuY2UgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyArK2kpIHsK
KyAgICAgICAgaWYgKCFzdHJjbXAoYXJndltpXSwgIi10IikgfHwgIXN0cmNtcChhcmd2W2ldLCAi
LS10b2xlcmFuY2UiKSkgeworICAgICAgICAgICAgaWYgKGkgPj0gYXJnYyAtIDEpCisgICAgICAg
ICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIHRvbGVyYW5jZSA9IHN0cnRvZihhcmd2W2kg
KyAxXSwgMCk7CisgICAgICAgICAgICArK2k7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNoYXIgYnVmZmVyW3NfYnVmZmVyU2l6ZV07CisgICAgY2Fpcm9f
c3VyZmFjZV90KiBhY3R1YWxJbWFnZSA9IDA7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBiYXNlbGlu
ZUltYWdlID0gMDsKKworICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBz
dGRpbikpIHsKKyAgICAgICAgY2hhciogbmV3TGluZUNoYXJhY3RlciA9IHN0cmNocihidWZmZXIs
ICdcbicpOworICAgICAgICBpZiAobmV3TGluZUNoYXJhY3RlcikKKyAgICAgICAgICAgICpuZXdM
aW5lQ2hhcmFjdGVyID0gJ1wwJzsKKworICAgICAgICBpZiAoIXN0cm5jbXAoIkNvbnRlbnQtTGVu
Z3RoOiAiLCBidWZmZXIsIDE2KSkgeworICAgICAgICAgICAgc3RydG9rKGJ1ZmZlciwgIiAiKTsK
KyAgICAgICAgICAgIGludCBpbWFnZVNpemUgPSBzdHJ0b2woc3RydG9rKDAsICIgIiksIDAsIDEw
KTsKKworICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSA+IDAgJiYgIWFjdHVhbEltYWdlKQorICAg
ICAgICAgICAgICAgIGFjdHVhbEltYWdlID0gY3JlYXRlSW1hZ2VGcm9tU3RkaW4oaW1hZ2VTaXpl
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGltYWdlU2l6ZSA+IDAgJiYgIWJhc2VsaW5lSW1hZ2Up
CisgICAgICAgICAgICAgICAgYmFzZWxpbmVJbWFnZSA9IGNyZWF0ZUltYWdlRnJvbVN0ZGluKGlt
YWdlU2l6ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnB1dHMoImVycm9y
LCBpbWFnZSBzaXplIG11c3QgYmUgc3BlY2lmaWVkLlxuIiwgc3Rkb3V0KTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChhY3R1YWxJbWFnZSAmJiBiYXNlbGluZUltYWdlKSB7CisgICAgICAgICAg
ICBjYWlyb19zdXJmYWNlX3QqIGRpZmZJbWFnZSA9IDA7CisgICAgICAgICAgICBmbG9hdCBkaWZm
ZXJlbmNlID0gMTAwLjA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfd2lkdGgoYWN0dWFsSW1hZ2UpID09IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3dpZHRoKGJhc2VsaW5lSW1hZ2UpKQorICAgICAgICAgICAgICAgICYmIChjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9oZWlnaHQoYWN0dWFsSW1hZ2UpID09IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChiYXNlbGluZUltYWdlKSkKKyAgICAgICAgICAgICAgICAmJiAoaW1hZ2VIYXNB
bHBoYShhY3R1YWxJbWFnZSkgPT0gaW1hZ2VIYXNBbHBoYShiYXNlbGluZUltYWdlKSkpIHsKKyAg
ICAgICAgICAgICAgICBkaWZmSW1hZ2UgPSBjcmVhdGVEaWZmZXJlbmNlSW1hZ2UoYWN0dWFsSW1h
Z2UsIGJhc2VsaW5lSW1hZ2UsIGRpZmZlcmVuY2UpOyAvLyBkaWZmZXJlbmNlIGlzIHBhc3NlZCBi
eSByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICBpZiAoZGlmZmVyZW5jZSA8PSB0b2xlcmFuY2Up
CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UgPSAwOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlID0gcm91bmRmKGRpZmZlcmVuY2Ug
KiAxMDAuMCkgLyAxMDAuMDsKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSA9IG1heDxm
bG9hdD4oZGlmZmVyZW5jZSwgMC4wMSk7IC8vIHJvdW5kIHRvIDIgZGVjaW1hbCBwbGFjZXMKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmcHV0
cygiZXJyb3IsIHRlc3QgYW5kIHJlZmVyZW5jZSBpbWFnZSBoYXZlIGRpZmZlcmVudCBwcm9wZXJ0
aWVzLlxuIiwgc3RkZXJyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkaWZm
ZXJlbmNlID4gMC4wKSB7CisgICAgICAgICAgICAgICAgaWYgKGRpZmZJbWFnZSkgeworICAgICAg
ICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gaW1hZ2VEYXRhKEFkb3B0
Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOworICAgICAgICAgICAgICAgICAgICBjYWly
b19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oZGlmZkltYWdlLCAoY2Fpcm9fd3JpdGVfZnVu
Y190KXdyaXRlVG9EYXRhLCBpbWFnZURhdGEuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBw
cmludGYoIkNvbnRlbnQtTGVuZ3RoOiAlbHVcbiIsIENGRGF0YUdldExlbmd0aChpbWFnZURhdGEu
Z2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZndyaXRlKENGRGF0YUdldEJ5dGVQdHIoaW1h
Z2VEYXRhLmdldCgpKSwgMSwgQ0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0YS5nZXQoKSksIHN0ZG91
dCk7CisgICAgICAgICAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShkaWZmSW1hZ2Up
OworICAgICAgICAgICAgICAgICAgICBkaWZmSW1hZ2UgPSAwOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImRpZmY6
ICUwMS4yZiUlIGZhaWxlZFxuIiwgZGlmZmVyZW5jZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImRpZmY6ICUwMS4yZiUlIHBhc3NlZFxuIiwg
ZGlmZmVyZW5jZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShhY3R1YWxJbWFnZSk7CisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koYmFz
ZWxpbmVJbWFnZSk7CisgICAgICAgICAgICBhY3R1YWxJbWFnZSA9IDA7CisgICAgICAgICAgICBi
YXNlbGluZUltYWdlID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGZmbHVzaChzdGRvdXQpOwor
ICAgIH0KKworICAgIHJldHVybiAwOworfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0ltYWdlRGlmZkRlYnVnQ2Fpcm9DRkxpdGUudnNwcm9wcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZmRGVidWdDYWlyb0NGTGl0ZS52c3Byb3BzCShyZXZp
c2lvbiA4Mzc3MSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZEZWJ1Z0Nh
aXJvQ0ZMaXRlLnZzcHJvcHMJKHdvcmtpbmcgY29weSkKQEAgLTcsNiArNyw2IEBACiAgICAgICAk
KFdlYktpdFZTUHJvcHNSZWRpcmVjdGlvbkRpcikuLlwuLlwuLlxXZWJLaXRMaWJyYXJpZXNcd2lu
XHRvb2xzXHZzcHJvcHNcY29tbW9uLnZzcHJvcHM7CiAgICAgICAkKFdlYktpdFZTUHJvcHNSZWRp
cmVjdGlvbkRpcikuLlwuLlwuLlxXZWJLaXRMaWJyYXJpZXNcd2luXHRvb2xzXHZzcHJvcHNcZGVi
dWcudnNwcm9wczsKICAgICAgICQoV2ViS2l0VlNQcm9wc1JlZGlyZWN0aW9uRGlyKS4uXC4uXC4u
XFdlYktpdExpYnJhcmllc1x3aW5cdG9vbHNcdnNwcm9wc1xkZWJ1Z193aW5jYWlyby52c3Byb3Bz
OwotICAgICAgLlxJbWFnZURpZmZDb21tb24udnNwcm9wcyIKKyAgICAgIC5cSW1hZ2VEaWZmV2lu
Q2Fpcm9Db21tb24udnNwcm9wcyIKIAk+CiA8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZmUmVsZWFzZUNhaXJvQ0ZMaXRl
LnZzcHJvcHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ltYWdlRGlm
ZlJlbGVhc2VDYWlyb0NGTGl0ZS52c3Byb3BzCShyZXZpc2lvbiA4Mzc3MSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZSZWxlYXNlQ2Fpcm9DRkxpdGUudnNwcm9wcwkod29y
a2luZyBjb3B5KQpAQCAtOCw2ICs4LDYgQEAKICAgICAgICQoV2ViS2l0VlNQcm9wc1JlZGlyZWN0
aW9uRGlyKS4uXC4uXC4uXFdlYktpdExpYnJhcmllc1x3aW5cdG9vbHNcdnNwcm9wc1xyZWxlYXNl
cHJvZHVjdGlvbi52c3Byb3BzOwogICAgICAgJChXZWJLaXRWU1Byb3BzUmVkaXJlY3Rpb25EaXIp
Li5cLi5cLi5cV2ViS2l0TGlicmFyaWVzXHdpblx0b29sc1x2c3Byb3BzXHJlbGVhc2UudnNwcm9w
czsKICAgICAgICQoV2ViS2l0VlNQcm9wc1JlZGlyZWN0aW9uRGlyKS4uXC4uXC4uXFdlYktpdExp
YnJhcmllc1x3aW5cdG9vbHNcdnNwcm9wc1xXaW5DYWlyby52c3Byb3BzOwotICAgICAgLlxJbWFn
ZURpZmZDb21tb24udnNwcm9wcyIKKyAgICAgIC5cSW1hZ2VEaWZmV2luQ2Fpcm9Db21tb24udnNw
cm9wcyIKIAk+CiA8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZmV2luQ2Fpcm9Db21tb24udnNwcm9wcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZmV2luQ2Fpcm9Db21tb24udnNw
cm9wcwkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZX
aW5DYWlyb0NvbW1vbi52c3Byb3BzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACis8P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Q
cm9wZXJ0eVNoZWV0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOC4wMCIK
KwlOYW1lPSJJbWFnZURpZmZDb21tb24iCisJPgorCTxUb29sCisJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoQ29uZmlndXJh
dGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGly
KVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGlu
Y2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVycyZxdW90OzsmcXVvdDskKFdlYktpdExpYnJh
cmllc0RpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVk
ZVxwcml2YXRlJnF1b3Q7IgorCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTk9NSU5NQVgiCisJ
Lz4KKwk8VG9vbAorCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCUFkZGl0aW9uYWxPcHRpb25zPSIv
TlhDT01QQVQiCisJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IkphdmFTY3JpcHRDb3JlJChXZWJL
aXRETExDb25maWdTdWZmaXgpLmxpYiBjYWlyby5saWIgbGlianBlZy5saWIgbGlicG5nLmxpYiB6
bGliLmxpYiBNc2ltZzMyLmxpYiBDRkxpdGUkKExpYnJhcnlDb25maWdTdWZmaXgpLmxpYiIKKwkJ
U3ViU3lzdGVtPSIxIgorCS8+Cis8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CkluZGV4OiBU
b29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMJKHJldmlzaW9uIDgzNzQwKQorKysgVG9vbHMvU2Ny
aXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtNDI3LDYgKzQyNyw3
IEBAIG15ICRkdW1wVG9vbE5hbWUgPSAkdXNlV2ViS2l0VGVzdFJ1bm5lcgogCiBpZiAoaXNBcHBs
ZVdpbldlYktpdCgpKSB7CiAgICAgJGR1bXBUb29sTmFtZSAuPSAiX2RlYnVnIiBpZiBjb25maWd1
cmF0aW9uRm9yVmlzdWFsU3R1ZGlvKCkgZXEgIkRlYnVnX0FsbCI7CisgICAgJGR1bXBUb29sTmFt
ZSAuPSAiX2RlYnVnIiBpZiBjb25maWd1cmF0aW9uRm9yVmlzdWFsU3R1ZGlvKCkgZXEgIkRlYnVn
X0NhaXJvX0NGTGl0ZSI7CiAgICAgJGR1bXBUb29sTmFtZSAuPSAkQ29uZmlne19leGV9OwogfQog
bXkgJGR1bXBUb29sID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkcHJvZHVjdERpciwgJGR1bXBUb29s
TmFtZSk7CkBAIC00MzQsNiArNDM1LDcgQEAgZGllICJjYW4ndCBmaW5kIGV4ZWN1dGFibGUgJGR1
bXBUb29sTmFtZQogCiBteSAkaW1hZ2VEaWZmVG9vbCA9ICIkcHJvZHVjdERpci9JbWFnZURpZmYi
OwogJGltYWdlRGlmZlRvb2wgLj0gIl9kZWJ1ZyIgaWYgaXNDeWd3aW4oKSAmJiBjb25maWd1cmF0
aW9uRm9yVmlzdWFsU3R1ZGlvKCkgZXEgIkRlYnVnX0FsbCI7CiskaW1hZ2VEaWZmVG9vbCAuPSAi
X2RlYnVnIiBpZiBpc0N5Z3dpbigpICYmIGNvbmZpZ3VyYXRpb25Gb3JWaXN1YWxTdHVkaW8oKSBl
cSAiRGVidWdfQ2Fpcm9fQ0ZMaXRlIjsKIGRpZSAiY2FuJ3QgZmluZCBleGVjdXRhYmxlICRpbWFn
ZURpZmZUb29sIChsb29rZWQgaW4gJHByb2R1Y3REaXIpXG4iIGlmICRwaXhlbFRlc3RzICYmICEt
eCAkaW1hZ2VEaWZmVG9vbDsKIAogY2hlY2tGcmFtZXdvcmtzKCkgdW5sZXNzIGlzQ3lnd2luKCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89623</attachid>
            <date>2011-04-14 12:25:08 -0700</date>
            <delta_ts>2011-04-14 16:29:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58486-20110414122507.patch</filename>
            <type>text/plain</type>
            <size>18005</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDgzNzkzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjkgQEAKKzIwMTEtMDQtMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXaW5D
YWlyb10gSW1wbGVtZW50IEltYWdlRGlmZiBMb2dpYy4KKyAgICAgICAgaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0ODYKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3dpbi9JbWFnZURpZmZDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoc3RydG9mKToKKyAgICAg
ICAgKHJlYWRGcm9tRGF0YSk6CisgICAgICAgIChjcmVhdGVJbWFnZUZyb21TdGRpbik6CisgICAg
ICAgIChyZWxlYXNlTWFsbG9jQnVmZmVyKToKKyAgICAgICAgKGNyZWF0ZURpZmZlcmVuY2VJbWFn
ZSk6CisgICAgICAgIChpbWFnZUhhc0FscGhhKToKKyAgICAgICAgKHdyaXRlVG9EYXRhKToKKyAg
ICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmYudmNw
cm9qOiBVcGRhdGVkIGZvciBuZXcKKyAgICAgICAgICBJbWFnZURpZmZDYWlyby5jcHAgKGV4Y2x1
ZGluZyBmcm9tIEFwcGxlIGJ1aWxkcykuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0lt
YWdlRGlmZkRlYnVnQ2Fpcm9DRkxpdGUudnNwcm9wczogVXNlCisgICAgICAgICAgbmV3IEltYWdl
RGlmZldpbkNhaXJvQ29tbW9uLnZzcHJvcHMgZmlsZS4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS93aW4vSW1hZ2VEaWZmUmVsZWFzZUNhaXJvQ0ZMaXRlLnZzcHJvcHM6IFVzZQorICAgICAgICAg
IG5ldyBJbWFnZURpZmZXaW5DYWlyb0NvbW1vbi52c3Byb3BzIGZpbGUuCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd2luL0ltYWdlRGlmZldpbkNhaXJvQ29tbW9uLnZzcHJvcHM6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHM6IE1ha2Ugc3VyZSBwcm9wZXIg
ZXhlY3V0YWJsZQorICAgICAgICAgIGlzIGJ1aWx0IGFuZCBleGVjdXRlZCBmb3IgV2luQ2Fpcm8g
cG9ydC4KKwogMjAxMS0wNC0xMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBjb3JyZWN0aW9uLgpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0ltYWdlRGlmZi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0ltYWdlRGlmZi52Y3Byb2oJKHJldmlzaW9uIDgzNzcxKQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0ltYWdlRGlmZi52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE5OSw2ICsxOTksNyBAQAogCQk8L0NvbmZpZ3VyYXRpb24+CiAJCTxDb25maWd1cmF0aW9uCiAJ
CQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rv
cnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCiAJCQlJ
bmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxJbWFnZURpZmZEZWJ1Z0NhaXJvQ0ZMaXRlLnZzcHJv
cHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjIiCkBAIC0zODYsOCArMzg3LDYwIEBACiAJPC9SZWZlcmVu
Y2VzPgogCTxGaWxlcz4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cd2luXEltYWdlRGlm
ZkNhaXJvLmNwcCIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVn
fFdpbjMyIgorCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCT4KKwkJCQk8VG9vbAor
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxG
aWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmln
dXJhdGlvbgorCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJ
CVJlbGF0aXZlUGF0aD0iLi5cY2dcSW1hZ2VEaWZmQ0cuY3BwIgogCQkJPgorCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCTwvRmlsZT4K
IAk8L0ZpbGVzPgogCTxHbG9iYWxzPgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0lt
YWdlRGlmZkNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4v
SW1hZ2VEaWZmQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0ltYWdlRGlmZkNhaXJvLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1IEJlbiBMYSBNb25pY2EgPGJlbi5sYW1vbmljYUBn
bWFpbC5jb20+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBC
cmVudCBGdWxnaGFtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBGSVhNRTogV2UgbmVlZCB0byBiZSBhYmxlIHRvIGlu
Y2x1ZGUgdGhlc2UgZGVmaW5lcyBmcm9tIGEgY29uZmlnLmggc29tZXdoZXJlLgorI2RlZmluZSBK
U19FWFBPUlRfUFJJVkFURQorI2RlZmluZSBXVEZfRVhQT1JUX1BSSVZBVEUKKworI2luY2x1ZGUg
PGNhaXJvLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisj
aWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW8uaD4KKyNp
bmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNlbmRpZgor
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgY29uc3QgaW50IHNfYnVmZmVyU2l6ZSA9
IDIwNDg7CitzdGF0aWMgY29uc3QgaW50IHNfYnl0ZXNQZXJQaXhlbCA9IDQ7CisKKyNpZiBQTEFU
Rk9STShXSU4pCisjdW5kZWYgbWluCisjdW5kZWYgbWF4CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQg
c3RydG9mKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCit7CisgICAgcmV0dXJuIHN0
cnRvZChucHRyLCBlbmRwdHIpOworfQorI2VuZGlmCisKK3N0YXRpYyBjYWlyb19zdGF0dXNfdCBy
ZWFkRnJvbURhdGEodm9pZCogY2xvc3VyZSwgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQg
aW50IGxlbmd0aCkKK3sKKyAgICBDRk11dGFibGVEYXRhUmVmIGRhdGFTb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PENGTXV0YWJsZURhdGFSZWY+KGNsb3N1cmUpOworCisgICAgQ0ZSYW5nZSByYW5n
ZSA9IENGUmFuZ2VNYWtlKDAsIGxlbmd0aCk7CisgICAgQ0ZEYXRhR2V0Qnl0ZXMoZGF0YVNvdXJj
ZSwgcmFuZ2UsIGRhdGEpOworICAgIENGRGF0YURlbGV0ZUJ5dGVzKGRhdGFTb3VyY2UsIHJhbmdl
KTsKKworICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGNhaXJv
X3N1cmZhY2VfdCogY3JlYXRlSW1hZ2VGcm9tU3RkaW4oaW50IGJ5dGVzUmVtYWluaW5nKQorewor
ICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW3NfYnVmZmVyU2l6ZV07CisgICAgUmV0YWluUHRyPENG
TXV0YWJsZURhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCBieXRl
c1JlbWFpbmluZykpOworCisgICAgd2hpbGUgKGJ5dGVzUmVtYWluaW5nID4gMCkgeworICAgICAg
ICBzaXplX3QgYnl0ZXNUb1JlYWQgPSBtaW4oYnl0ZXNSZW1haW5pbmcsIHNfYnVmZmVyU2l6ZSk7
CisgICAgICAgIHNpemVfdCBieXRlc1JlYWQgPSBmcmVhZChidWZmZXIsIDEsIGJ5dGVzVG9SZWFk
LCBzdGRpbik7CisgICAgICAgIENGRGF0YUFwcGVuZEJ5dGVzKGRhdGEuZ2V0KCksIGJ1ZmZlciwg
c3RhdGljX2Nhc3Q8Q0ZJbmRleD4oYnl0ZXNSZWFkKSk7CisgICAgICAgIGJ5dGVzUmVtYWluaW5n
IC09IHN0YXRpY19jYXN0PGludD4oYnl0ZXNSZWFkKTsKKyAgICB9CisKKyAgICByZXR1cm4gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZnJvbV9wbmdfc3RyZWFtIChzdGF0aWNfY2FzdDxjYWly
b19yZWFkX2Z1bmNfdD4ocmVhZEZyb21EYXRhKSwgZGF0YS5nZXQoKSk7Cit9CisKK3N0YXRpYyB2
b2lkIHJlbGVhc2VNYWxsb2NCdWZmZXIodm9pZCogZGF0YSkKK3sKKyAgICBmcmVlKGRhdGEpOwor
fQorCitzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IGltYWdlRGF0YUtleTsKKworc3RhdGlj
IGlubGluZSBmbG9hdCBwaXhlbERpZmZlcmVuY2UoZmxvYXQgZXhwZWN0ZWQsIGZsb2F0IGFjdHVh
bCkKK3sKKyAgICByZXR1cm4gKGFjdHVhbCAtIGV4cGVjdGVkKSAvIG1heDxmbG9hdD4oMjU1IC0g
ZXhwZWN0ZWQsIGV4cGVjdGVkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5vcm1hbGl6ZUJ1
ZmZlcihmbG9hdCBtYXhEaXN0YW5jZSwgdW5zaWduZWQgY2hhciogYnVmZmVyLCBzaXplX3QgbGVu
Z3RoKQoreworICAgIGlmIChtYXhEaXN0YW5jZSA+PSAxKQorICAgICAgICByZXR1cm47CisKKyAg
ICBmb3IgKHNpemVfdCBwID0gMDsgcCA8IGxlbmd0aDsgKytwKQorICAgICAgICBidWZmZXJbcF0g
Lz0gbWF4RGlzdGFuY2U7Cit9CisKK3N0YXRpYyBjYWlyb19zdXJmYWNlX3QqIGNyZWF0ZURpZmZl
cmVuY2VJbWFnZShjYWlyb19zdXJmYWNlX3QqIGJhc2VJbWFnZSwgY2Fpcm9fc3VyZmFjZV90KiB0
ZXN0SW1hZ2UsIGZsb2F0JiBkaWZmZXJlbmNlKQoreworICAgIHNpemVfdCB3aWR0aCA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGJhc2VJbWFnZSk7CisgICAgc2l6ZV90IGhlaWdodCA9
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChiYXNlSW1hZ2UpOworCisgICAgdW5zaWdu
ZWQgY2hhciogYmFzZVBpeGVsID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShiYXNlSW1h
Z2UpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVsID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YSh0ZXN0SW1hZ2UpOworCisgICAgLy8gQ29tcGFyZSB0aGUgY29udGVudCBvZiB0aGUgMiBi
aXRtYXBzCisgICAgdm9pZCogZGlmZkJ1ZmZlciA9IG1hbGxvYyh3aWR0aCAqIGhlaWdodCk7Cisg
ICAgdW5zaWduZWQgY2hhciogZGlmZlBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4oZGlmZkJ1ZmZlcik7CisKKyAgICBmbG9hdCBjb3VudCA9IDA7CisgICAgZmxvYXQgc3Vt
ID0gMDsKKyAgICBmbG9hdCBtYXhEaXN0YW5jZSA9IDA7CisgICAgZm9yIChzaXplX3QgeSA9IDA7
IHkgPCBoZWlnaHQ7ICsreSkgeworICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IHdpZHRo
OyArK3gpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsRGlmZmVyZW5jZShiYXNlUGl4
ZWxbMF0sIHBpeGVsWzBdKTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxEaWZmZXJl
bmNlKGJhc2VQaXhlbFsxXSwgcGl4ZWxbMV0pOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBp
eGVsRGlmZmVyZW5jZShiYXNlUGl4ZWxbMl0sIHBpeGVsWzJdKTsKKyAgICAgICAgICAgIGZsb2F0
IGFscGhhID0gcGl4ZWxEaWZmZXJlbmNlKGJhc2VQaXhlbFszXSwgcGl4ZWxbM10pOworCisgICAg
ICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IHNxcnRmKHJlZCAqIHJlZCArIGdyZWVuICogZ3JlZW4g
KyBibHVlICogYmx1ZSArIGFscGhhICogYWxwaGEpIC8gMi4wOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAqZGlmZlBpeGVsKysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkaXN0YW5j
ZSAqIDI1NSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSAxLjAg
LyAyNTUuMCkgeworICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICAgICAgc3Vt
ICs9IGRpc3RhbmNlOworICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IG1heERpc3RhbmNl
KQorICAgICAgICAgICAgICAgICAgICBtYXhEaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBiYXNlUGl4ZWwgKz0gc19ieXRlc1BlclBp
eGVsOworICAgICAgICAgICAgcGl4ZWwgKz0gc19ieXRlc1BlclBpeGVsOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYXMgYSBwZXJjZW50YWdl
IGNvbWJpbmluZyBib3RoIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IHBpeGVscyBhbmQgdGhlaXIg
ZGlmZmVyZW5jZSBhbW91bnQgaS5lLiB0aGUgYXZlcmFnZSBkaXN0YW5jZSBvdmVyIHRoZSBlbnRp
cmUgaW1hZ2UKKyAgICBpZiAoY291bnQgPiAwKQorICAgICAgICBkaWZmZXJlbmNlID0gMTAwLjBm
ICogc3VtIC8gKGhlaWdodCAqIHdpZHRoKTsKKyAgICBlbHNlCisgICAgICAgIGRpZmZlcmVuY2Ug
PSAwOworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBkaWZmSW1hZ2UgPSAwOworICAgIC8vIEdlbmVy
YXRlIGEgbm9ybWFsaXplZCBkaWZmIGltYWdlIGlmIHRoZXJlIGlzIGFueSBkaWZmZXJlbmNlCisg
ICAgaWYgKGRpZmZlcmVuY2UgPiAwKSB7CisgICAgICAgIG5vcm1hbGl6ZUJ1ZmZlcihtYXhEaXN0
YW5jZSwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGlmZkJ1ZmZlciksIGhlaWdo
dCAqIHdpZHRoKTsKKyAgICAgICAgCisgICAgICAgIGRpZmZJbWFnZSA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGRpZmZQaXhlbCwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lk
dGgsIGhlaWdodCwgd2lkdGggKiBzX2J5dGVzUGVyUGl4ZWwpOyAKKyAgICAgICAgY2Fpcm9fc3Vy
ZmFjZV9zZXRfdXNlcl9kYXRhKGRpZmZJbWFnZSwgJmltYWdlRGF0YUtleSwgZGlmZkJ1ZmZlciwg
cmVsZWFzZU1hbGxvY0J1ZmZlcik7CisgICAgfSBlbHNlCisgICAgICAgIGZyZWUoZGlmZkJ1ZmZl
cik7CisgICAgCisgICAgcmV0dXJuIGRpZmZJbWFnZTsKK30KKworc3RhdGljIGlubGluZSBib29s
IGltYWdlSGFzQWxwaGEoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSkKK3sKKyAgICByZXR1cm4gKGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChpbWFnZSkgPT0gQ0FJUk9fRk9STUFUX0FSR0Iz
Mik7Cit9CisKK3N0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZVRvRGF0YSh2b2lkKiBjbG9zdXJl
LCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworICAgIENGTXV0
YWJsZURhdGFSZWYgZGF0YVRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZNdXRhYmxlRGF0YVJl
Zj4oY2xvc3VyZSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhkYXRhVGFyZ2V0LCBkYXRhLCBs
ZW5ndGgpOworCisgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQgbWFp
bihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQoreworI2lmIFBMQVRGT1JNKFdJTikKKyAg
ICBfc2V0bW9kZSgwLCBfT19CSU5BUlkpOworICAgIF9zZXRtb2RlKDEsIF9PX0JJTkFSWSk7Cisj
ZW5kaWYKKworICAgIGZsb2F0IHRvbGVyYW5jZSA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMTsg
aSA8IGFyZ2M7ICsraSkgeworICAgICAgICBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLXQiKSB8fCAh
c3RyY21wKGFyZ3ZbaV0sICItLXRvbGVyYW5jZSIpKSB7CisgICAgICAgICAgICBpZiAoaSA+PSBh
cmdjIC0gMSkKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgdG9sZXJhbmNl
ID0gc3RydG9mKGFyZ3ZbaSArIDFdLCAwKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorCisgICAgY2hhciBidWZmZXJbc19idWZmZXJT
aXplXTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGFjdHVhbEltYWdlID0gMDsKKyAgICBjYWlyb19z
dXJmYWNlX3QqIGJhc2VsaW5lSW1hZ2UgPSAwOworCisgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwg
c2l6ZW9mKGJ1ZmZlciksIHN0ZGluKSkgeworICAgICAgICBjaGFyKiBuZXdMaW5lQ2hhcmFjdGVy
ID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisgICAgICAgIGlmIChuZXdMaW5lQ2hhcmFjdGVyKQor
ICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIgPSAnXDAnOworCisgICAgICAgIGlmICghc3Ry
bmNtcCgiQ29udGVudC1MZW5ndGg6ICIsIGJ1ZmZlciwgMTYpKSB7CisgICAgICAgICAgICBzdHJ0
b2soYnVmZmVyLCAiICIpOworICAgICAgICAgICAgaW50IGltYWdlU2l6ZSA9IHN0cnRvbChzdHJ0
b2soMCwgIiAiKSwgMCwgMTApOworCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplID4gMCAmJiAh
YWN0dWFsSW1hZ2UpCisgICAgICAgICAgICAgICAgYWN0dWFsSW1hZ2UgPSBjcmVhdGVJbWFnZUZy
b21TdGRpbihpbWFnZVNpemUpOworICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VTaXplID4gMCAm
JiAhYmFzZWxpbmVJbWFnZSkKKyAgICAgICAgICAgICAgICBiYXNlbGluZUltYWdlID0gY3JlYXRl
SW1hZ2VGcm9tU3RkaW4oaW1hZ2VTaXplKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBmcHV0cygiZXJyb3IsIGltYWdlIHNpemUgbXVzdCBiZSBzcGVjaWZpZWQuXG4iLCBzdGRv
dXQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFjdHVhbEltYWdlICYmIGJhc2VsaW5lSW1h
Z2UpIHsKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfdCogZGlmZkltYWdlID0gMDsKKyAgICAg
ICAgICAgIGZsb2F0IGRpZmZlcmVuY2UgPSAxMDAuMDsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChhY3R1YWxJbWFnZSkgPT0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoYmFzZWxpbmVJbWFnZSkpCisgICAgICAgICAgICAg
ICAgJiYgKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChhY3R1YWxJbWFnZSkgPT0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGJhc2VsaW5lSW1hZ2UpKQorICAgICAgICAgICAg
ICAgICYmIChpbWFnZUhhc0FscGhhKGFjdHVhbEltYWdlKSA9PSBpbWFnZUhhc0FscGhhKGJhc2Vs
aW5lSW1hZ2UpKSkgeworICAgICAgICAgICAgICAgIGRpZmZJbWFnZSA9IGNyZWF0ZURpZmZlcmVu
Y2VJbWFnZShhY3R1YWxJbWFnZSwgYmFzZWxpbmVJbWFnZSwgZGlmZmVyZW5jZSk7IC8vIGRpZmZl
cmVuY2UgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZQorICAgICAgICAgICAgICAgIGlmIChkaWZmZXJl
bmNlIDw9IHRvbGVyYW5jZSkKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSA9IDA7Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UgPSBy
b3VuZGYoZGlmZmVyZW5jZSAqIDEwMC4wKSAvIDEwMC4wOworICAgICAgICAgICAgICAgICAgICBk
aWZmZXJlbmNlID0gbWF4PGZsb2F0PihkaWZmZXJlbmNlLCAwLjAxKTsgLy8gcm91bmQgdG8gMiBk
ZWNpbWFsIHBsYWNlcworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIGZwdXRzKCJlcnJvciwgdGVzdCBhbmQgcmVmZXJlbmNlIGltYWdlIGhhdmUg
ZGlmZmVyZW50IHByb3BlcnRpZXMuXG4iLCBzdGRlcnIpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPiAwLjApIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlm
ZkltYWdlKSB7CisgICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVm
PiBpbWFnZURhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShkaWZmSW1hZ2Us
IChjYWlyb193cml0ZV9mdW5jX3Qpd3JpdGVUb0RhdGEsIGltYWdlRGF0YS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHByaW50ZigiQ29udGVudC1MZW5ndGg6ICVsdVxuIiwgQ0ZEYXRhR2V0
TGVuZ3RoKGltYWdlRGF0YS5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBmd3JpdGUoQ0ZE
YXRhR2V0Qnl0ZVB0cihpbWFnZURhdGEuZ2V0KCkpLCAxLCBDRkRhdGFHZXRMZW5ndGgoaW1hZ2VE
YXRhLmdldCgpKSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9k
ZXN0cm95KGRpZmZJbWFnZSk7CisgICAgICAgICAgICAgICAgICAgIGRpZmZJbWFnZSA9IDA7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZwcmlu
dGYoc3Rkb3V0LCAiZGlmZjogJTAxLjJmJSUgZmFpbGVkXG4iLCBkaWZmZXJlbmNlKTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiZGlmZjogJTAx
LjJmJSUgcGFzc2VkXG4iLCBkaWZmZXJlbmNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KGFjdHVhbEltYWdlKTsKKyAgICAgICAgICAgIGNhaXJvX3N1
cmZhY2VfZGVzdHJveShiYXNlbGluZUltYWdlKTsKKyAgICAgICAgICAgIGFjdHVhbEltYWdlID0g
MDsKKyAgICAgICAgICAgIGJhc2VsaW5lSW1hZ2UgPSAwOworICAgICAgICB9CisKKyAgICAgICAg
ZmZsdXNoKHN0ZG91dCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZmRGVidWdDYWlyb0NGTGl0ZS52c3Byb3BzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZEZWJ1Z0NhaXJvQ0ZM
aXRlLnZzcHJvcHMJKHJldmlzaW9uIDgzNzcxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0ltYWdlRGlmZkRlYnVnQ2Fpcm9DRkxpdGUudnNwcm9wcwkod29ya2luZyBjb3B5KQpAQCAtNyw2
ICs3LDYgQEAKICAgICAgICQoV2ViS2l0VlNQcm9wc1JlZGlyZWN0aW9uRGlyKS4uXC4uXC4uXFdl
YktpdExpYnJhcmllc1x3aW5cdG9vbHNcdnNwcm9wc1xjb21tb24udnNwcm9wczsKICAgICAgICQo
V2ViS2l0VlNQcm9wc1JlZGlyZWN0aW9uRGlyKS4uXC4uXC4uXFdlYktpdExpYnJhcmllc1x3aW5c
dG9vbHNcdnNwcm9wc1xkZWJ1Zy52c3Byb3BzOwogICAgICAgJChXZWJLaXRWU1Byb3BzUmVkaXJl
Y3Rpb25EaXIpLi5cLi5cLi5cV2ViS2l0TGlicmFyaWVzXHdpblx0b29sc1x2c3Byb3BzXGRlYnVn
X3dpbmNhaXJvLnZzcHJvcHM7Ci0gICAgICAuXEltYWdlRGlmZkNvbW1vbi52c3Byb3BzIgorICAg
ICAgLlxJbWFnZURpZmZXaW5DYWlyb0NvbW1vbi52c3Byb3BzIgogCT4KIDwvVmlzdWFsU3R1ZGlv
UHJvcGVydHlTaGVldD4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZS
ZWxlYXNlQ2Fpcm9DRkxpdGUudnNwcm9wcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vSW1hZ2VEaWZmUmVsZWFzZUNhaXJvQ0ZMaXRlLnZzcHJvcHMJKHJldmlzaW9uIDgz
NzcxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ltYWdlRGlmZlJlbGVhc2VDYWlyb0NG
TGl0ZS52c3Byb3BzCSh3b3JraW5nIGNvcHkpCkBAIC04LDYgKzgsNiBAQAogICAgICAgJChXZWJL
aXRWU1Byb3BzUmVkaXJlY3Rpb25EaXIpLi5cLi5cLi5cV2ViS2l0TGlicmFyaWVzXHdpblx0b29s
c1x2c3Byb3BzXHJlbGVhc2Vwcm9kdWN0aW9uLnZzcHJvcHM7CiAgICAgICAkKFdlYktpdFZTUHJv
cHNSZWRpcmVjdGlvbkRpcikuLlwuLlwuLlxXZWJLaXRMaWJyYXJpZXNcd2luXHRvb2xzXHZzcHJv
cHNccmVsZWFzZS52c3Byb3BzOwogICAgICAgJChXZWJLaXRWU1Byb3BzUmVkaXJlY3Rpb25EaXIp
Li5cLi5cLi5cV2ViS2l0TGlicmFyaWVzXHdpblx0b29sc1x2c3Byb3BzXFdpbkNhaXJvLnZzcHJv
cHM7Ci0gICAgICAuXEltYWdlRGlmZkNvbW1vbi52c3Byb3BzIgorICAgICAgLlxJbWFnZURpZmZX
aW5DYWlyb0NvbW1vbi52c3Byb3BzIgogCT4KIDwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4K
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZXaW5DYWlyb0NvbW1vbi52
c3Byb3BzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9JbWFnZURpZmZX
aW5DYWlyb0NvbW1vbi52c3Byb3BzCShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0ltYWdlRGlmZldpbkNhaXJvQ29tbW9uLnZzcHJvcHMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/
PgorPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIK
KwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9IkltYWdlRGlmZkNvbW1vbiIKKwk+CisJPFRvb2wKKwkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0i
JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzJnF1b3Q7OyZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGli
cmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDsiCisJCVByZXByb2Nlc3NvckRlZmluaXRp
b25zPSJOT01JTk1BWCIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJQWRk
aXRpb25hbE9wdGlvbnM9Ii9OWENPTVBBVCIKKwkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iSmF2
YVNjcmlwdENvcmUkKFdlYktpdERMTENvbmZpZ1N1ZmZpeCkubGliIGNhaXJvJChMaWJyYXJ5Q29u
ZmlnU3VmZml4KS5saWIgbGlianBlZy5saWIgbGlicG5nJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5s
aWIgemxpYi5saWIgTXNpbWczMi5saWIgQ0ZMaXRlJChMaWJyYXJ5Q29uZmlnU3VmZml4KS5saWIi
CisJCVN1YlN5c3RlbT0iMSIKKwkvPgorPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0PgpJbmRl
eDogVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCShyZXZpc2lvbiA4Mzc5MSkKKysrIFRvb2xz
L1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsx
MjYsNiBAQCBzdWIgd3JpdGVUb0ZpbGUoJCQpOwogCiAjIEFyZ3VtZW50IGhhbmRsaW5nCiBteSAk
YWRkUGxhdGZvcm1FeGNlcHRpb25zID0gMDsKLW15IEBhZGRpdGlvbmFsUGxhdGZvcm1EaXJlY3Rv
cmllcyA9ICgpOwogbXkgJGNvbXBsZXhUZXh0ID0gMDsKIG15ICRleGl0QWZ0ZXJORmFpbHVyZXMg
PSAwOwogbXkgJGV4aXRBZnRlck5DcmFzaGVzT3JUaW1lb3V0cyA9IDA7CkBAIC0yNzcsOCArMjc2
LDYgQEAgbXkgJHNhbXBsZURlZmF1bHQgPSAkcnVuU2FtcGxlID8gInJ1biIgOgogbXkgJHVzYWdl
ID0gPDxFT0Y7CiBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBbdGVzdGRpcnx0ZXN0cGF0
aCAuLi5dCiAgIC0tYWRkLXBsYXRmb3JtLWV4Y2VwdGlvbnMgICAgICAgUHV0IG5ldyByZXN1bHRz
IGZvciBub24tcGxhdGZvcm0tc3BlY2lmaWMgZmFpbGluZyB0ZXN0cyBpbnRvIHRoZSBwbGF0Zm9y
bS1zcGVjaWZpYyByZXN1bHRzIGRpcmVjdG9yeQotICAtLWFkZGl0aW9uYWwtcGxhdGZvcm0tZGly
ZWN0b3J5IHBhdGgvdG8vZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTG9vayBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBiZWZvcmUgbG9va2luZyBpbiBhbnkg
b2YgdGhlIGRlZmF1bHQgcGxhdGZvcm0tc3BlY2lmaWMgZGlyZWN0b3JpZXMKICAgLS1jb21wbGV4
LXRleHQgICAgICAgICAgICAgICAgICBVc2UgdGhlIGNvbXBsZXggdGV4dCBjb2RlIHBhdGggZm9y
IGFsbCB0ZXh0IChNYWMgT1MgWCBhbmQgV2luZG93cyBvbmx5KQogICAtY3wtLWNvbmZpZ3VyYXRp
b24gY29uZmlnICAgICAgIFNldCBEdW1wUmVuZGVyVHJlZSBidWlsZCBjb25maWd1cmF0aW9uCiAg
IC1nfC0tZ3VhcmQtbWFsbG9jICAgICAgICAgICAgICAgRW5hYmxlIG1hbGxvYyBndWFyZApAQCAt
MzI3LDcgKzMyNCw2IEBAIHNldENvbmZpZ3VyYXRpb24oKTsKIAogbXkgJGdldE9wdGlvbnNSZXN1
bHQgPSBHZXRPcHRpb25zKAogICAgICdhZGQtcGxhdGZvcm0tZXhjZXB0aW9ucycgPT4gXCRhZGRQ
bGF0Zm9ybUV4Y2VwdGlvbnMsCi0gICAgJ2FkZGl0aW9uYWwtcGxhdGZvcm0tZGlyZWN0b3J5PXMn
ID0+IFxAYWRkaXRpb25hbFBsYXRmb3JtRGlyZWN0b3JpZXMsCiAgICAgJ2NvbXBsZXgtdGV4dCcg
PT4gXCRjb21wbGV4VGV4dCwKICAgICAnZXhpdC1hZnRlci1uLWZhaWx1cmVzPWknID0+IFwkZXhp
dEFmdGVyTkZhaWx1cmVzLAogICAgICdleGl0LWFmdGVyLW4tY3Jhc2hlcy1vci10aW1lb3V0cz1p
JyA9PiBcJGV4aXRBZnRlck5DcmFzaGVzT3JUaW1lb3V0cywKQEAgLTQzMSw2ICs0MjcsNyBAQCBt
eSAkZHVtcFRvb2xOYW1lID0gJHVzZVdlYktpdFRlc3RSdW5uZXIKIAogaWYgKGlzQXBwbGVXaW5X
ZWJLaXQoKSkgewogICAgICRkdW1wVG9vbE5hbWUgLj0gIl9kZWJ1ZyIgaWYgY29uZmlndXJhdGlv
bkZvclZpc3VhbFN0dWRpbygpIGVxICJEZWJ1Z19BbGwiOworICAgICRkdW1wVG9vbE5hbWUgLj0g
Il9kZWJ1ZyIgaWYgY29uZmlndXJhdGlvbkZvclZpc3VhbFN0dWRpbygpIGVxICJEZWJ1Z19DYWly
b19DRkxpdGUiOwogICAgICRkdW1wVG9vbE5hbWUgLj0gJENvbmZpZ3tfZXhlfTsKIH0KIG15ICRk
dW1wVG9vbCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJHByb2R1Y3REaXIsICRkdW1wVG9vbE5hbWUp
OwpAQCAtNDM4LDYgKzQzNSw3IEBAIGRpZSAiY2FuJ3QgZmluZCBleGVjdXRhYmxlICRkdW1wVG9v
bE5hbWUKIAogbXkgJGltYWdlRGlmZlRvb2wgPSAiJHByb2R1Y3REaXIvSW1hZ2VEaWZmIjsKICRp
bWFnZURpZmZUb29sIC49ICJfZGVidWciIGlmIGlzQ3lnd2luKCkgJiYgY29uZmlndXJhdGlvbkZv
clZpc3VhbFN0dWRpbygpIGVxICJEZWJ1Z19BbGwiOworJGltYWdlRGlmZlRvb2wgLj0gIl9kZWJ1
ZyIgaWYgaXNDeWd3aW4oKSAmJiBjb25maWd1cmF0aW9uRm9yVmlzdWFsU3R1ZGlvKCkgZXEgIkRl
YnVnX0NhaXJvX0NGTGl0ZSI7CiBkaWUgImNhbid0IGZpbmQgZXhlY3V0YWJsZSAkaW1hZ2VEaWZm
VG9vbCAobG9va2VkIGluICRwcm9kdWN0RGlyKVxuIiBpZiAkcGl4ZWxUZXN0cyAmJiAhLXggJGlt
YWdlRGlmZlRvb2w7CiAKIGNoZWNrRnJhbWV3b3JrcygpIHVubGVzcyBpc0N5Z3dpbigpOwpAQCAt
MjE3NSw4ICsyMTczLDYgQEAgc3ViIGJ1aWxkUGxhdGZvcm1SZXN1bHRIaWVyYXJjaHkoKQogICAg
ICAgICBwdXNoKEBoaWVyYXJjaHksICRzY29wZWQpIGlmICgtZCAkc2NvcGVkKTsKICAgICB9CiAg
ICAgCi0gICAgdW5zaGlmdCBAaGllcmFyY2h5LCBncmVwIHsgLWQgJF8gfSBAYWRkaXRpb25hbFBs
YXRmb3JtRGlyZWN0b3JpZXM7Ci0KICAgICByZXR1cm4gQGhpZXJhcmNoeTsKIH0KIAo=
</data>
<flag name="review"
          id="82329"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>