<?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>56238</bug_id>
          
          <creation_ts>2011-03-11 20:18:07 -0800</creation_ts>
          <short_desc>Non-premultiplied-alpha canvas attribute is ignore for toDataURL, drawImage, texImage2D</short_desc>
          <delta_ts>2011-04-13 11:21:05 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>58425</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="John Bauman">jbauman</reporter>
          <assigned_to name="John Bauman">jbauman</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>366493</commentid>
    <comment_count>0</comment_count>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-11 20:18:07 -0800</bug_when>
    <thetext>Currently WebKit treats every webgl canvas as having a premultiplied alpha, which causes a lot of problems for functions that need to either premultiply it (drawImage), or avoid converting it entirely (toDataURL, texImage2D).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366496</commentid>
    <comment_count>1</comment_count>
      <attachid>85565</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-11 20:25:55 -0800</bug_when>
    <thetext>Created attachment 85565
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366497</commentid>
    <comment_count>2</comment_count>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-11 20:27:26 -0800</bug_when>
    <thetext>I&apos;m not entirely sure that that&apos;s the right approach, but it works for Chromium and Safari and I&apos;m sure it could be extended to Qt if I knew enough about Qt, so that&apos;s probably a sign.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367269</commentid>
    <comment_count>3</comment_count>
      <attachid>85565</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-14 14:56:06 -0700</bug_when>
    <thetext>Comment on attachment 85565
Patch

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

This looks like it&apos;s on the right track to me but needs some more work.

Please incorporate the test, or portion thereof, which exercises this functionality using the script &quot;update-webgl-conformance-tests&quot;. (cd into LayoutTests/fast/canvas/webgl, and run the script pointing it to the path of the test in the Khronos repo.)

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:347
&gt; +    RefPtr&lt;ImageData&gt; imData = getImageData();

Avoid abbreviations in WebKit style. Just use &quot;imageData&quot;.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:864
&gt; +    // Read rendering results into an RGBA pixel array.

The call sites indicate this produces BGRA data. Please update the comment or the spec of this method to indicate exactly what it does; please also mention whether the alpha channel is multiplied in or not.

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:136
&gt; +    String ImageDataToDataURL(ImageData&amp; input, const String&amp; mimeType, const double* quality);

It would be nicer to put this in ImageData.h/cpp (WebCore/html/) but I see the reasons for putting it here. In particular, if you can achieve better code refactoring (see below), I think it&apos;s OK to leave it here. You could also consider making this a static private method, making ImageData a friend, and adding ImageData::todataURL().

Here, ImageData&amp; should be const.

&gt; Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:593
&gt; +    if (!image)
&gt; +        return &quot;data:,&quot;;
&gt; +        
&gt; +    RetainPtr&lt;CFMutableDataRef&gt; data(AdoptCF, CFDataCreateMutable(kCFAllocatorDefault, 0));
&gt; +    if (!data)
&gt; +        return &quot;data:,&quot;;
&gt; +        
&gt; +    RetainPtr&lt;CFStringRef&gt; uti = utiFromMIMEType(mimeType);
&gt; +    ASSERT(uti);
&gt; +        
&gt; +    RetainPtr&lt;CGImageDestinationRef&gt; destination(AdoptCF, CGImageDestinationCreateWithData(data.get(), uti.get(), 1, 0));
&gt; +    if (!destination)
&gt; +        return &quot;data:,&quot;;
&gt; +        
&gt; +    RetainPtr&lt;CFDictionaryRef&gt; imageProperties = 0;
&gt; +    if (CFEqual(uti.get(), jpegUTI()) &amp;&amp; quality &amp;&amp; *quality &gt;= 0.0 &amp;&amp; *quality &lt;= 1.0) {
&gt; +        // Apply the compression quality to the image destination.
&gt; +        RetainPtr&lt;CFNumberRef&gt; compressionQuality(AdoptCF, CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, quality));
&gt; +        const void* key = kCGImageDestinationLossyCompressionQuality;
&gt; +        const void* value = compressionQuality.get();
&gt; +        imageProperties.adoptCF(CFDictionaryCreate(0, &amp;key, &amp;value, 1, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));
&gt; +    }
&gt; +        
&gt; +    CGImageDestinationAddImage(destination.get(), image.get(), imageProperties.get());
&gt; +    CGImageDestinationFinalize(destination.get());
&gt; +    
&gt; +    Vector&lt;char&gt; out;
&gt; +    base64Encode(reinterpret_cast&lt;const char*&gt;(CFDataGetBytePtr(data.get())), CFDataGetLength(data.get()), out);
&gt; +
&gt; +    return makeString(&quot;data:&quot;, mimeType, &quot;;base64,&quot;, out);

This block of code is exactly equal to that in ImageBuffer::toDataURL. Please refactor it into a new helper function.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:530
&gt; +    return 0;

Add FIXME indicating this should be implemented.

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:399
&gt; +    Vector&lt;unsigned char&gt; encodedImage;
&gt; +    if (mimeType == &quot;image/jpeg&quot;) {
&gt; +        int compressionQuality = JPEGImageEncoder::DefaultCompressionQuality;
&gt; +        if (quality &amp;&amp; *quality &gt;= 0.0 &amp;&amp; *quality &lt;= 1.0)
&gt; +            compressionQuality = static_cast&lt;int&gt;(*quality * 100 + 0.5);
&gt; +        if (!JPEGImageEncoder::encode(source, compressionQuality, &amp;encodedImage))
&gt; +            return &quot;data:,&quot;;
&gt; +    } else {
&gt; +        if (!PNGImageEncoder::encode(source, &amp;encodedImage))
&gt; +            return &quot;data:,&quot;;
&gt; +        ASSERT(mimeType == &quot;image/png&quot;);
&gt; +    }
&gt; +
&gt; +    Vector&lt;char&gt; base64Data;
&gt; +    base64Encode(*reinterpret_cast&lt;Vector&lt;char&gt;*&gt;(&amp;encodedImage), base64Data);
&gt; +
&gt; +    return makeString(&quot;data:&quot;, mimeType, &quot;;base64,&quot;, base64Data);

There is some duplicated code between this and ImageBuffer::toDataURL above. It&apos;s less than in other places in this file but it would be good to refactor.

&gt; Source/WebCore/platform/image-encoders/skia/JPEGImageEncoder.cpp:196
&gt; +    imageSize.clampNegativeToZero();
&gt; +    JPEGOutputBuffer destination;
&gt; +    destination.output = output;
&gt; +    Vector&lt;JSAMPLE&gt; row;
&gt; +
&gt; +    jpeg_compress_struct cinfo;
&gt; +    jpeg_error_mgr error;
&gt; +    cinfo.err = jpeg_std_error(&amp;error);
&gt; +    error.error_exit = handleError;
&gt; +    jmp_buf jumpBuffer;
&gt; +    cinfo.client_data = &amp;jumpBuffer;
&gt; +
&gt; +    if (setjmp(jumpBuffer)) {
&gt; +        jpeg_destroy_compress(&amp;cinfo);
&gt; +        return false;
&gt; +    }
&gt; +
&gt; +    jpeg_create_compress(&amp;cinfo);
&gt; +    cinfo.dest = &amp;destination;
&gt; +    cinfo.dest-&gt;init_destination = prepareOutput;
&gt; +    cinfo.dest-&gt;empty_output_buffer = writeOutput;
&gt; +    cinfo.dest-&gt;term_destination = finishOutput;
&gt; +    cinfo.image_height = imageSize.height();
&gt; +    cinfo.image_width = imageSize.width();
&gt; +    cinfo.in_color_space = JCS_RGB;
&gt; +    cinfo.input_components = 3;
&gt; +
&gt; +    jpeg_set_defaults(&amp;cinfo);
&gt; +    jpeg_set_quality(&amp;cinfo, quality, TRUE);
&gt; +    jpeg_start_compress(&amp;cinfo, TRUE);
&gt; +
&gt; +    const unsigned char* pixels = imageData.data()-&gt;data()-&gt;data();
&gt; +    row.resize(cinfo.image_width * cinfo.input_components);
&gt; +    while (cinfo.next_scanline &lt; cinfo.image_height) {
&gt; +        RGBAtoRGB(pixels, cinfo.image_width, row.data());
&gt; +        jpeg_write_scanlines(&amp;cinfo, row.dataSlot(), 1);
&gt; +        pixels += cinfo.image_width * 4;
&gt; +    }
&gt; +
&gt; +    jpeg_finish_compress(&amp;cinfo);
&gt; +    jpeg_destroy_compress(&amp;cinfo);
&gt; +    return true;

Nearly all of this code is duplicated from encode(const SkBitmap&amp; bitmap, ...). Please refactor it to avoid the duplication.

&gt; Source/WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp:154
&gt; +    IntSize imageSize(bitmap.width(), bitmap.height());
&gt; +    imageSize.clampNegativeToZero();
&gt; +    unsigned char *pixels = bitmap.data()-&gt;data()-&gt;data();
&gt; +
&gt; +    png_struct* png = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
&gt; +    png_info* info = png_create_info_struct(png);
&gt; +    if (!png || !info || setjmp(png_jmpbuf(png))) {
&gt; +        png_destroy_write_struct(png ? &amp;png : 0, info ? &amp;info : 0);
&gt; +        return false;
&gt; +    }
&gt; +
&gt; +    // Optimize compression for speed.
&gt; +    // The parameters are the same as what libpng uses by default for RGB and RGBA images, except:
&gt; +    // - the zlib compression level is 3 instead of 6, to avoid the lazy Ziv-Lempel match searching;
&gt; +    // - the delta filter is 1 (&quot;sub&quot;) instead of 5 (&quot;all&quot;), to reduce the filter computations.
&gt; +    // The zlib memory level (8) and strategy (Z_FILTERED) will be set inside libpng.
&gt; +    //
&gt; +    // Avoid the zlib strategies Z_HUFFMAN_ONLY or Z_RLE.
&gt; +    // Although they are the fastest for poorly-compressible images (e.g. photographs),
&gt; +    // they are very slow for highly-compressible images (e.g. text, drawings or business graphics).
&gt; +    png_set_compression_level(png, 3);
&gt; +    png_set_filter(png, PNG_FILTER_TYPE_BASE, PNG_FILTER_SUB);
&gt; +
&gt; +    png_set_write_fn(png, output, writeOutput, 0);
&gt; +    png_set_IHDR(png, info, imageSize.width(), imageSize.height(),
&gt; +                 8, PNG_COLOR_TYPE_RGB_ALPHA, 0, 0, 0);
&gt; +    png_write_info(png, info);
&gt; +
&gt; +    for (int y = 0; y &lt; imageSize.height(); ++y) {
&gt; +        png_write_row(png, pixels);
&gt; +        pixels += imageSize.width() * 4;
&gt; +    }
&gt; +
&gt; +    png_write_end(png, info);
&gt; +    png_destroy_write_struct(&amp;png, &amp;info);
&gt; +    return true;

Same comment about duplicated code between here and encode(const SkBitmap&amp; bitmap, ...).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367486</commentid>
    <comment_count>4</comment_count>
      <attachid>85767</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-14 21:00:54 -0700</bug_when>
    <thetext>Created attachment 85767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367952</commentid>
    <comment_count>5</comment_count>
      <attachid>85767</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-15 14:37:03 -0700</bug_when>
    <thetext>Comment on attachment 85767
Patch

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

The code changes look good but there are a few issues with the test case that need to be fixed.

&gt; LayoutTests/fast/canvas/webgl/premultiplyalpha-test.html:49
&gt; +     console.log(gl.getContextAttributes());

This should be removed.

&gt; LayoutTests/fast/canvas/webgl/premultiplyalpha-test.html:70
&gt; +     img.src = png;
&gt; +     img.onload = function() {

There are issues like this race condition that I mentioned in the upstream bug report on Khronos. Please fix those and re-convert this test case into a layout test.

&gt; LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js:109
&gt; -  &apos;    gl_FragColor = texture2D(tex, texCoord);\n&apos; +
&gt; +  &apos;    gl_FragData[0] = texture2D(tex, texCoord);\n&apos; +

This change is invalid. gl_FragData is unsupported in GLSL ES 2.0.

&gt; LayoutTests/platform/chromium/test_expectations.txt:2360
&gt; +BUGWEBGL : fast/canvas/webgl/premultiplyalpha-test.html = TEXT

Why is this new test not passing? It seems wrong that it doesn&apos;t pass even in Chromium.

&gt; LayoutTests/platform/mac/Skipped:306
&gt; +fast/canvas/webgl/premultipliedalpha-test.html

Since the new test doesn&apos;t involve drawing a WebGL canvas to the screen whose premultipliedAlpha flag is set to false, it seems that we should be able to make the new test pass on Mac as well. Is that not possible?

&gt; Source/WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp:106
&gt; +            preMultipliedBGRAtoRGBA(pixels,
&gt; +                                    imageSize.width(), row.data());

Line break here is unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367967</commentid>
    <comment_count>6</comment_count>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-15 15:00:03 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; 
&gt; &gt; LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js:109
&gt; &gt; -  &apos;    gl_FragColor = texture2D(tex, texCoord);\n&apos; +
&gt; &gt; +  &apos;    gl_FragData[0] = texture2D(tex, texCoord);\n&apos; +
&gt; 
&gt; This change is invalid. gl_FragData is unsupported in GLSL ES 2.0.

I got this straight from upstream. http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.24.pdf says that gl_FragData is allowed.
&gt; 
&gt; &gt; LayoutTests/platform/chromium/test_expectations.txt:2360
&gt; &gt; +BUGWEBGL : fast/canvas/webgl/premultiplyalpha-test.html = TEXT
&gt; 
&gt; Why is this new test not passing? It seems wrong that it doesn&apos;t pass even in Chromium.

Currently the test for the premultiplied case is broken, but with that fixed it should work on chromium and mac.
&gt; 
&gt; &gt; LayoutTests/platform/mac/Skipped:306
&gt; &gt; +fast/canvas/webgl/premultipliedalpha-test.html
&gt; 
&gt; Since the new test doesn&apos;t involve drawing a WebGL canvas to the screen whose premultipliedAlpha flag is set to false, it seems that we should be able to make the new test pass on Mac as well. Is that not possible?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367978</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-15 15:15:46 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js:109
&gt; &gt; &gt; -  &apos;    gl_FragColor = texture2D(tex, texCoord);\n&apos; +
&gt; &gt; &gt; +  &apos;    gl_FragData[0] = texture2D(tex, texCoord);\n&apos; +
&gt; &gt; 
&gt; &gt; This change is invalid. gl_FragData is unsupported in GLSL ES 2.0.
&gt; 
&gt; I got this straight from upstream. http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.24.pdf says that gl_FragData is allowed.

I apologize; I stand corrected.

&gt; &gt; &gt; LayoutTests/platform/chromium/test_expectations.txt:2360
&gt; &gt; &gt; +BUGWEBGL : fast/canvas/webgl/premultiplyalpha-test.html = TEXT
&gt; &gt; 
&gt; &gt; Why is this new test not passing? It seems wrong that it doesn&apos;t pass even in Chromium.
&gt; 
&gt; Currently the test for the premultiplied case is broken, but with that fixed it should work on chromium and mac.

What&apos;s the plan in this area? Are you going to fix the test upstream in Khronos? In that case, let&apos;s get it fixed there and then just update this copy of the test to match it.

&gt; &gt; 
&gt; &gt; &gt; LayoutTests/platform/mac/Skipped:306
&gt; &gt; &gt; +fast/canvas/webgl/premultipliedalpha-test.html
&gt; &gt; 
&gt; &gt; Since the new test doesn&apos;t involve drawing a WebGL canvas to the screen whose premultipliedAlpha flag is set to false, it seems that we should be able to make the new test pass on Mac as well. Is that not possible?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368109</commentid>
    <comment_count>8</comment_count>
      <attachid>85889</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-15 18:07:26 -0700</bug_when>
    <thetext>Created attachment 85889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368112</commentid>
    <comment_count>9</comment_count>
      <attachid>85890</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-15 18:15:31 -0700</bug_when>
    <thetext>Created attachment 85890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368121</commentid>
    <comment_count>10</comment_count>
      <attachid>85890</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-15 18:28:54 -0700</bug_when>
    <thetext>Comment on attachment 85890
Patch

Looks great. Excellent work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368155</commentid>
    <comment_count>11</comment_count>
      <attachid>85890</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-15 20:27:04 -0700</bug_when>
    <thetext>Comment on attachment 85890
Patch

Clearing flags on attachment: 85890

Committed r81213: &lt;http://trac.webkit.org/changeset/81213&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368156</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-15 20:27:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368601</commentid>
    <comment_count>13</comment_count>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-16 15:44:18 -0700</bug_when>
    <thetext>*** Bug 55509 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85565</attachid>
            <date>2011-03-11 20:25:55 -0800</date>
            <delta_ts>2011-03-14 21:00:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56238-20110311202554.patch</filename>
            <type>text/plain</type>
            <size>28988</size>
            <attacher name="John Bauman">jbauman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA5MTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMGNiMDllNjczOWZmYWI4
NWZjZGQzOWM4MDc1NjBiZjI5NGU3ZmY2Li44YTA5ZDhkMTI0NjZmN2ZkYjkxYjg4MmU5MDUxMTBl
NjI3NTgyN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMDMtMTEgIEpvaG4g
QmF1bWFuICA8amJhdW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm9uLXByZW11bHRpcGxpZWQtYWxwaGEgY2FudmFzIGF0
dHJpYnV0ZSBpcyBpZ25vcmUgZm9yIHRvRGF0YVVSTCwgZHJhd0ltYWdlLCB0ZXhJbWFnZTJECisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjIzOAorCisg
ICAgICAgIEF0dGVtcHQgdG8gZ2V0IGFuIEltYWdlRGF0YSAobm9uLXByZW11bHRpcGxpZWQpIGZy
b20gYSBXZWJHTCBjYW52YXMKKyAgICAgICAgaW5zdGVhZCBvZiBnZXR0aW5nIGFuIEltYWdlQnVm
ZmVyLCBzbyB0aGVyZSdzIGEgY2hhbmNlIHRoZSBkYXRhIGNhbiBiZQorICAgICAgICBwYXNzZWQg
c3RyYWlnaHQgdGhyb3VnaCB0byB0aGUgY29uc3VtZXIgd2l0aCBubyBwcmVtdWx0aXBsaWNhdGlv
bgorICAgICAgICBuZWNlc3NhcnkuIEZpeGVzIENocm9taXVtIGFuZCBTYWZhcmkuCisKKyAgICAg
ICAgVGVzdGVkIGJ5IHdlYmdsIGNvbmZvcm1hbmNlIHRlc3QuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
Ojp0b0RhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldElt
YWdlRGF0YSk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YVRvRGF0
YVVSTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxp
ZGF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tp
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGFUb0RhdGFVUkwpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSR0JBdG9SR0IpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRW5j
b2Rlcjo6ZW5jb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQ
RUdJbWFnZUVuY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lh
L1BOR0ltYWdlRW5jb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZUVuY29kZXI6
OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFn
ZUVuY29kZXIuaDoKKwogMjAxMS0wMy0xMSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHAKaW5kZXggMDA2N2QyNmZkMGIyN2MyMGIyM2JhMDMzZDU3Y2YwN2IxNjUyOTY4
Ni4uOTJjNzM3MDMwNDlhODg5ZTI4NDY0NjBlMjYxODFlODE3ZGM4ZTc2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySFRNTENh
bnZhcy5oIgpAQCAtMzM3LDE1ICszMzgsMzcgQEAgU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXQKIAog
ICAgIFN0cmluZyBsb3dlcmNhc2VNaW1lVHlwZSA9IG1pbWVUeXBlLmxvd2VyKCk7CiAKLSAgICBt
YWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOwotCiAgICAgLy8gRklYTUU6IE1ha2UgaXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcgdGhyZWFkc2FmZSAodG8gYWxsb3cgdGhp
cyBtZXRob2QgdG8gYmUgdXNlZCBvbiBhIHdvcmtlciB0aHJlYWQpLgogICAgIGlmIChtaW1lVHlw
ZS5pc051bGwoKSB8fCAhTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
Rm9yRW5jb2RpbmcobG93ZXJjYXNlTWltZVR5cGUpKQotICAgICAgICByZXR1cm4gYnVmZmVyKCkt
PnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7CisgICAgICAgIGxvd2VyY2FzZU1pbWVUeXBlID0gImlt
YWdlL3BuZyI7CisKKyNpZiBQTEFURk9STShDRykgfHwgVVNFKFNLSUEpCisgICAgLy8gVHJ5IHRv
IGdldCBJbWFnZURhdGEgZmlyc3QsIGFzIHRoYXQgbWF5IGF2b2lkIGxvc3N5IGNvbnZlcnNpb25z
LgorICAgIFJlZlB0cjxJbWFnZURhdGE+IGltRGF0YSA9IGdldEltYWdlRGF0YSgpOworCisgICAg
aWYgKGltRGF0YSkKKyAgICAgICAgcmV0dXJuIEltYWdlRGF0YVRvRGF0YVVSTCgqaW1EYXRhLCBs
b3dlcmNhc2VNaW1lVHlwZSwgcXVhbGl0eSk7CisjZW5kaWYKIAorICAgIG1ha2VSZW5kZXJpbmdS
ZXN1bHRzQXZhaWxhYmxlKCk7CisgICAgICAKICAgICByZXR1cm4gYnVmZmVyKCktPnRvRGF0YVVS
TChsb3dlcmNhc2VNaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRhKCkKK3sKKyAgICBpZiAoIW1fY29udGV4
dCB8fCAhbV9jb250ZXh0LT5pczNkKCkpCisgICAgICAgcmV0dXJuIDA7CisKKyNpZiBFTkFCTEUo
V0VCR0wpICAgIAorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4ID0gc3RhdGljX2Nhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKKworICAgIHJldHVybiBj
dHgtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisjZWxzZQorICAgIHJldHVy
biAwOworI2VuZGlmCit9CisKIEludFJlY3QgSFRNTENhbnZhc0VsZW1lbnQ6OmNvbnZlcnRMb2dp
Y2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JiBsb2dpY2FsUmVjdCkgY29uc3QKIHsKICAgICBm
bG9hdCBsZWZ0ID0gZmxvb3JmKGxvZ2ljYWxSZWN0LngoKSAqIG1fcGFnZVNjYWxlRmFjdG9yKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBhMmE2MDZkNGFlNjU1
ZDk5N2Y5N2I5YzliMTY2NWM1MjM1YjJiNzM0Li44NzA2YzZiMTEyMTUwMjFlMTJkYmNlZjdhZTll
ZDEzNWY2NDBhYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBA
IC00Nyw2ICs0Nyw3IEBAIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKIGNsYXNzIEltYWdlOworY2xh
c3MgSW1hZ2VEYXRhOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRTaXplOwogCkBAIC0x
MDUsNiArMTA2LDcgQEAgcHVibGljOgogICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsK
ICAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdDsKICAgICB2b2lkIGNsZWFyQ29waWVkSW1h
Z2UoKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKCk7CiAKICAgICBJ
bnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAg
ICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHAKaW5kZXggY2M3YTIzYjQwMDZhZDVlNWMyYjk0ODMyMjQ3NDM3YzExNzE5OGY4Ni4u
Y2I0NTFjYmEzNjMzZmZjYTU2YTM0ODk0OWY0MzAyNWU5NWZkMmQ5MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC00
OTUsNiArNDk1LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcygpCiAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyh0aGlzKTsKIH0KIAorUGFzc1JlZlB0cjxJbWFnZURhdGE+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIHJldHVy
biBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7Cit9CisKIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7CkBAIC0z
MDYyLDggKzMwNjcsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGNoZWNrT3JpZ2luKGNhbnZhcyk7Ci0gICAgdGV4SW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJ
bWFnZSgpLAotICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZh
cy0+Z2V0SW1hZ2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEu
Z2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhLCBlYyk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0zMjUyLDggKzMyNjEsMTIg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
aGVja09yaWdpbihjYW52YXMpOwotICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLAot
ICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0
SW1hZ2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5n
ZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdl
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCAxMzE0
NWM4ZDFhODg5MjE2ZTZlMjNjZWJiMjM3NDE3ZTE2YTU1NDU4Li42Yjg4NWQ5MmVkOTFiNDVhNGI0
M2M2ZTFjNWRmMTBhYjczN2YyNWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMjg2LDYgKzI4Niw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAogICAgIHZpcnR1YWwg
dm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CiAKICAg
ICB2b2lkIHJlbW92ZU9iamVjdChXZWJHTE9iamVjdCopOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggYTlk
YjY1MGIwMDk2YzcxYjAwYmM1MGE5ZjU3YTBkNWQyMDc5NmE5MS4uNmJhZTQ0OGVlZmI4MjYyNzcy
OWEyMTEzMWE5NzNmZWVmN2Y5YmE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC03NTcsNiArNzU3LDcgQEAgcHVi
bGljOgogI2VuZGlmCiAKICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogCiAjaWYgUExBVEZPUk0oUVQp
CiAgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIHJlY3QpIGNv
bnN0OwpAQCAtODU5LDYgKzg2MCw5IEBAIHB1YmxpYzoKICAgICAvLyBjb3VsZCBub3QgYmUgaG9u
b3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBpbXBs
ZW1lbnRhdGlvbi4KICAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgLy8gUmVh
ZCByZW5kZXJpbmcgcmVzdWx0cyBpbnRvIGFuIFJHQkEgcGl4ZWwgYXJyYXkuCisgICAgdm9pZCBy
ZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIGludCBwaXhlbHNTaXpl
KTsKICNlbmRpZgogCiAgICAgaW50IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA0
ODg3OGRhOWY1MjA5YzNkMGE5ZjliMDVmMjJjZmUxNjQzNTdmMTg1Li42ZWY3Nzk3ODUzYjAwMmI0
NDY4NGU4OTMzMGRiOWM2MjcxZmFkMDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEzMiw2ICsxMzIsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpOwog
ICAgIH07CiAKKyNpZiBQTEFURk9STShDRykgfHwgVVNFKFNLSUEpCisgICAgU3RyaW5nIEltYWdl
RGF0YVRvRGF0YVVSTChJbWFnZURhdGEmIGlucHV0LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBj
b25zdCBkb3VibGUqIHF1YWxpdHkpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEltYWdlQnVmZmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggN2M4ZTMxMzA1ZmM5ZjFi
MzIxNWQzMmRmZDE5ZDExMWZmNjE1OTMxZC4uMzU5YzE2ZTQ0YjAzZGZiMWZmZDhmOGYwMTkyMzA3
ZTIwMWQ3Njc3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC01NDEsNCArNTQyLDU0
IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uCiAKICAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0
YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgb3V0KTsKIH0KKworU3RyaW5nIEltYWdlRGF0YVRv
RGF0YVVSTChJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
ZG91YmxlKiBxdWFsaXR5KQoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgICAgICAKKyAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVy
UmVmPiBkYXRhUHJvdmlkZXI7CisgICAgCisgICAgZGF0YVByb3ZpZGVyLmFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBzb3VyY2UuZGF0YSgpLT5kYXRhKCktPmRhdGEoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQg
KiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOworICAgIAorICAgIGlmICgh
ZGF0YVByb3ZpZGVyKQorICAgICAgICByZXR1cm4gImRhdGE6LCI7CisKKyAgICBpbWFnZS5hZG9w
dENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIs
IDQgKiBzb3VyY2Uud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dD
b2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBr
Q0dJbWFnZUFscGhhTGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVBy
b3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgaWYgKCFpbWFnZSkK
KyAgICAgICAgcmV0dXJuICJkYXRhOiwiOworICAgICAgICAKKyAgICBSZXRhaW5QdHI8Q0ZNdXRh
YmxlRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsK
KyAgICAgICAgCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGkgPSB1dGlGcm9tTUlNRVR5
cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworICAgICAgICAKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbihBZG9wdENGLCBDR0ltYWdlRGVzdGlu
YXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCB1dGkuZ2V0KCksIDEsIDApKTsKKyAgICBp
ZiAoIWRlc3RpbmF0aW9uKQorICAgICAgICByZXR1cm4gImRhdGE6LCI7CisgICAgICAgIAorICAg
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllcyA9IDA7CisgICAgaWYg
KENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0g
MC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Np
b24gcXVhbGl0eSB0byB0aGUgaW1hZ2UgZGVzdGluYXRpb24uCisgICAgICAgIFJldGFpblB0cjxD
Rk51bWJlclJlZj4gY29tcHJlc3Npb25RdWFsaXR5KEFkb3B0Q0YsIENGTnVtYmVyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsIHF1YWxpdHkpKTsKKyAgICAg
ICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25R
dWFsaXR5OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5n
ZXQoKTsKKyAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NG
VHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIH0KKyAgICAgICAgCisgICAgQ0dJ
bWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLmdldCgpLCBp
bWFnZVByb3BlcnRpZXMuZ2V0KCkpOworICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRl
c3RpbmF0aW9uLmdldCgpKTsKKyAgICAKKyAgICBWZWN0b3I8Y2hhcj4gb3V0OworICAgIGJhc2U2
NEVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGRh
dGEuZ2V0KCkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpLCBvdXQpOworCisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIG91dCk7Cit9CiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cAppbmRleCBjMjI0ZTIwN2MzMTZiODBjNDc2YWEzYzQxZmM4MWQ2MDM2YzVhY2ViLi4yNTQ3YjUz
NGZmMDY1Y2RkZDUyZDc0ZGFhMmFhYjc5M2QzNjRiZGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50MzJBcnJheS5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVWludDhBcnJheS5oIgpA
QCAtNzAsMjEgKzcxLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmli
dXRlcygpCiAgICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhc3RkOjpzdHJzdHIoZXh0ZW5z
aW9ucywgIkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKQogICAgICAgICAgICAgbV9h
dHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKICAgICB9Ci0gICAgLy8gRklYTUU6IGluc3RlYWQgb2Yg
ZW5mb3JjaW5nIHByZW11bHRpcGxpZWRBbHBoYSA9IHRydWUsIGltcGxlbWVudCB0aGUKLSAgICAv
LyBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gcHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2UgaXMgcmVx
dWVzdGVkLgotICAgIG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpemUpCiB7
Ci0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwotICAg
IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0KLSAgICBpbnQg
cm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSByb3dC
eXRlcyAqIG1fY3VycmVudEhlaWdodDsKLQotICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+
IHBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOwot
ICAgIGlmICghcGl4ZWxzKQorICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBt
X2N1cnJlbnRIZWlnaHQgKiA0KQogICAgICAgICByZXR1cm47CiAKICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKQEAgLTExMSwxOCArMTAyLDYyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvCiAg
ICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CiAgICAgfQogCi0gICAgOjpn
bFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQkdS
QSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMuZ2V0KCkpOworICAgIDo6Z2xS
ZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX0JHUkEs
IEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKIAogICAgIGlmIChtdXN0UmVz
dG9yZVBhY2tBbGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdO
TUVOVCwgcGFja0FsaWdubWVudCk7CiAKICAgICBpZiAobXVzdFJlc3RvcmVGQk8pCiAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdl
QnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKworICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVu
dFdpZHRoICogNDsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVp
Z2h0OworCisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJh
eVB0cihuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7CisgICAgaWYgKCFwaXhlbHMpCisg
ICAgICAgIHJldHVybjsKKworICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscy5nZXQoKSwg
dG90YWxCeXRlcyk7CisKKyAgICBpZiAoIW1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKSB7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7CisgICAgICAg
ICAgICAvLyBQcmVtdWx0aXBseSBhbHBoYQorICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0
ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAg
ICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVs
c1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1
NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICB9CisgICAg
fQogCiAgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQsCiAgICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+
aGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKIH0K
IAorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgLy8gUmVhZGluZyBwcmVtdWx0aXBsaWVkIGFs
cGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hpY2ggaXMKKyAgICAvLyBsb3Nz
eQorICAgIGlmIChtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJ
bnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpKTsKKyAgICB1bnNpZ25lZCBj
aGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgaW50
IHRvdGFsQnl0ZXMgPSA0ICogbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQ7CisKKyAg
ICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMsIHRvdGFsQnl0ZXMpOworCisgICAgLy8gQ29u
dmVydCB0byBSR0JBCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQp
CisgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworCisgICAgcmV0
dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
c2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAppbmRleCBiODQ5MjE0MDA2MWVjMTcxNDMwYzQxZmM2MjY0N2Zm
MmU3ZmZjZTgxLi43ODc2YTBhY2UyYzcxZmE4MDY1NTY3OWQxZjNkOGI2YjJiNWZmM2I0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcApAQCAtNTI1LDYgKzUyNSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250
ZXh0KiBjbwogICAgIHBhaW50KHBhaW50ZXIsIFFSZWN0KFFQb2ludCgwLCAwKSwgUVNpemUobV9j
dXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpKTsKIH0KIAorUGFzc1JlZlB0cjxJbWFnZURh
dGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
Cit7CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50KFFQ
YWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdCYgcmVjdCkgY29uc3QKIHsKICNpZiBRVF9WRVJT
SU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNywgMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAppbmRleCAy
NzIxNTIzNmFmNTc0MTM4YWI0YTI1YTA4OWFiYjZjMWVhZDVjZDdiLi5lODg5YTQ3Njg3ZjUxOTJl
ZjI4ZTllYjM0ZjkyNjgzZjQ0MTI5MDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBAIC0zNzcsNCAr
Mzc3LDI2IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uCiAgICAgcmV0dXJuIG1ha2VTdHJpbmco
ImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NERhdGEpOwogfQogCisKK1N0cmlu
ZyBJbWFnZURhdGFUb0RhdGFVUkwoSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKK3sKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hh
cj4gZW5jb2RlZEltYWdlOworICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvanBlZyIpIHsKKyAg
ICAgICAgaW50IGNvbXByZXNzaW9uUXVhbGl0eSA9IEpQRUdJbWFnZUVuY29kZXI6OkRlZmF1bHRD
b21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgIGlmIChxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAu
MCAmJiAqcXVhbGl0eSA8PSAxLjApCisgICAgICAgICAgICBjb21wcmVzc2lvblF1YWxpdHkgPSBz
dGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwICsgMC41KTsKKyAgICAgICAgaWYgKCFKUEVH
SW1hZ2VFbmNvZGVyOjplbmNvZGUoc291cmNlLCBjb21wcmVzc2lvblF1YWxpdHksICZlbmNvZGVk
SW1hZ2UpKQorICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmICghUE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUoc291cmNlLCAmZW5jb2RlZEltYWdlKSkK
KyAgICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKKyAgICAgICAgQVNTRVJUKG1pbWVUeXBlID09
ICJpbWFnZS9wbmciKTsKKyAgICB9CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAg
ICBiYXNlNjRFbmNvZGUoKnJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4oJmVuY29kZWRJ
bWFnZSksIGJhc2U2NERhdGEpOworCisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWlt
ZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NERhdGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9z
a2lhL0pQRUdJbWFnZUVuY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VFbmNvZGVyLmNwcAppbmRleCBiZTNjOTJhZjI0YzM1Yzky
ZGQxNGI3NWE0ODE3YWEyOWIyYjNiYjhiLi5jY2NmYmI4OTc4ZjVhY2NhMGMzMjY4MjEzZTMyMTA4
YjMxNjI5M2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNv
ZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5jcHAKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKUEVHSW1hZ2VFbmNvZGVyLmgi
CiAKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVk
ZSAiU2tCaXRtYXAuaCIKICNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgpAQCAtMTM5LDQgKzE0MCw2
MCBAQCBib29sIEpQRUdJbWFnZUVuY29kZXI6OmVuY29kZShjb25zdCBTa0JpdG1hcCYgYml0bWFw
LCBpbnQgcXVhbGl0eSwgVmVjdG9yPHVuc2lnbgogICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0
aWMgdm9pZCBSR0JBdG9SR0IoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXQsIHVuc2lnbmVkIGlu
dCBwaXhlbHMsIHVuc2lnbmVkIGNoYXIqIG91dHB1dCkKK3sKKyAgICBmb3IgKDsgcGl4ZWxzLS0g
PiAwOyBpbnB1dCArPSA0KSB7CisgICAgICAgICpvdXRwdXQrKyA9IGlucHV0WzBdOworICAgICAg
ICAqb3V0cHV0KysgPSBpbnB1dFsxXTsKKyAgICAgICAgKm91dHB1dCsrID0gaW5wdXRbMl07Cisg
ICAgfQorfQorCitib29sIEpQRUdJbWFnZUVuY29kZXI6OmVuY29kZShjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQor
eworICAgIEludFNpemUgaW1hZ2VTaXplKGltYWdlRGF0YS53aWR0aCgpLCBpbWFnZURhdGEuaGVp
Z2h0KCkpOworICAgIGltYWdlU2l6ZS5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgSlBFR091
dHB1dEJ1ZmZlciBkZXN0aW5hdGlvbjsKKyAgICBkZXN0aW5hdGlvbi5vdXRwdXQgPSBvdXRwdXQ7
CisgICAgVmVjdG9yPEpTQU1QTEU+IHJvdzsKKworICAgIGpwZWdfY29tcHJlc3Nfc3RydWN0IGNp
bmZvOworICAgIGpwZWdfZXJyb3JfbWdyIGVycm9yOworICAgIGNpbmZvLmVyciA9IGpwZWdfc3Rk
X2Vycm9yKCZlcnJvcik7CisgICAgZXJyb3IuZXJyb3JfZXhpdCA9IGhhbmRsZUVycm9yOworICAg
IGptcF9idWYganVtcEJ1ZmZlcjsKKyAgICBjaW5mby5jbGllbnRfZGF0YSA9ICZqdW1wQnVmZmVy
OworCisgICAgaWYgKHNldGptcChqdW1wQnVmZmVyKSkgeworICAgICAgICBqcGVnX2Rlc3Ryb3lf
Y29tcHJlc3MoJmNpbmZvKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGpw
ZWdfY3JlYXRlX2NvbXByZXNzKCZjaW5mbyk7CisgICAgY2luZm8uZGVzdCA9ICZkZXN0aW5hdGlv
bjsKKyAgICBjaW5mby5kZXN0LT5pbml0X2Rlc3RpbmF0aW9uID0gcHJlcGFyZU91dHB1dDsKKyAg
ICBjaW5mby5kZXN0LT5lbXB0eV9vdXRwdXRfYnVmZmVyID0gd3JpdGVPdXRwdXQ7CisgICAgY2lu
Zm8uZGVzdC0+dGVybV9kZXN0aW5hdGlvbiA9IGZpbmlzaE91dHB1dDsKKyAgICBjaW5mby5pbWFn
ZV9oZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0KCk7CisgICAgY2luZm8uaW1hZ2Vfd2lkdGggPSBp
bWFnZVNpemUud2lkdGgoKTsKKyAgICBjaW5mby5pbl9jb2xvcl9zcGFjZSA9IEpDU19SR0I7Cisg
ICAgY2luZm8uaW5wdXRfY29tcG9uZW50cyA9IDM7CisKKyAgICBqcGVnX3NldF9kZWZhdWx0cygm
Y2luZm8pOworICAgIGpwZWdfc2V0X3F1YWxpdHkoJmNpbmZvLCBxdWFsaXR5LCBUUlVFKTsKKyAg
ICBqcGVnX3N0YXJ0X2NvbXByZXNzKCZjaW5mbywgVFJVRSk7CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICBy
b3cucmVzaXplKGNpbmZvLmltYWdlX3dpZHRoICogY2luZm8uaW5wdXRfY29tcG9uZW50cyk7Cisg
ICAgd2hpbGUgKGNpbmZvLm5leHRfc2NhbmxpbmUgPCBjaW5mby5pbWFnZV9oZWlnaHQpIHsKKyAg
ICAgICAgUkdCQXRvUkdCKHBpeGVscywgY2luZm8uaW1hZ2Vfd2lkdGgsIHJvdy5kYXRhKCkpOwor
ICAgICAgICBqcGVnX3dyaXRlX3NjYW5saW5lcygmY2luZm8sIHJvdy5kYXRhU2xvdCgpLCAxKTsK
KyAgICAgICAgcGl4ZWxzICs9IGNpbmZvLmltYWdlX3dpZHRoICogNDsKKyAgICB9CisKKyAgICBq
cGVnX2ZpbmlzaF9jb21wcmVzcygmY2luZm8pOworICAgIGpwZWdfZGVzdHJveV9jb21wcmVzcygm
Y2luZm8pOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQ
RUdJbWFnZUVuY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJz
L3NraWEvSlBFR0ltYWdlRW5jb2Rlci5oCmluZGV4IGYyYWM1MmQwZWFjMmYwYzU3OWYwMmFjYmJh
NDA5ZDhkYzU1NTI0MmUuLjU0MDgwOTE0NmNkMzY4MDEzYzk0MzFhNTdjOGEwMzNlNmNlZTk2ODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEv
SlBFR0ltYWdlRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVu
Y29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5oCkBAIC0zNywxMCArMzcsMTMgQEAgY2xhc3Mg
U2tCaXRtYXA7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRhOworCiBj
bGFzcyBKUEVHSW1hZ2VFbmNvZGVyIHsKIHB1YmxpYzoKICAgICAvLyBFbmNvZGUgdGhlIGlucHV0
IGJpdG1hcCB3aXRoIGEgY29tcHJlc3Npb24gcXVhbGl0eSBpbiBbMC0xMDBdLgogICAgIHN0YXRp
YyBib29sIGVuY29kZShjb25zdCBTa0JpdG1hcCYsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWdu
ZWQgY2hhcj4qKTsKKyAgICBzdGF0aWMgYm9vbCBlbmNvZGUoY29uc3QgSW1hZ2VEYXRhJiwgaW50
IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiopOwogCiAgICAgLy8gRm9yIGNhbGxlcnM6
IHByb3ZpZGUgYSByZWFzb25hYmxlIGNvbXByZXNzaW9uIHF1YWxpdHkgZGVmYXVsdC4KICAgICBl
bnVtIFF1YWxpdHkgeyBEZWZhdWx0Q29tcHJlc3Npb25RdWFsaXR5ID0gOTIgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VF
bmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEv
UE5HSW1hZ2VFbmNvZGVyLmNwcAppbmRleCA3OGY3MzdlMzBjODk4ZjE5YTAxZjIxNGZkM2FiMzVm
NWY1OTdhODE0Li4yMDViNjI1OTJlNjIyOTEyM2M5ODJmODQ3MGQxYTk2MmZmOTM2NmFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0lt
YWdlRW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUE5HSW1hZ2VFbmNvZGVyLmgiCiAKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKICNp
bmNsdWRlICJTa0NvbG9yUHJpdi5oIgpAQCAtMTEzLDQgKzExNCw0NCBAQCBib29sIFBOR0ltYWdl
RW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiogb3V0cAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFBOR0ltYWdlRW5jb2Rlcjo6
ZW5jb2RlKGNvbnN0IEltYWdlRGF0YSYgYml0bWFwLCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91
dHB1dCkKK3sKKyAgICBJbnRTaXplIGltYWdlU2l6ZShiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhl
aWdodCgpKTsKKyAgICBpbWFnZVNpemUuY2xhbXBOZWdhdGl2ZVRvWmVybygpOworICAgIHVuc2ln
bmVkIGNoYXIgKnBpeGVscyA9IGJpdG1hcC5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworCisgICAg
cG5nX3N0cnVjdCogcG5nID0gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJf
U1RSSU5HLCAwLCAwLCAwKTsKKyAgICBwbmdfaW5mbyogaW5mbyA9IHBuZ19jcmVhdGVfaW5mb19z
dHJ1Y3QocG5nKTsKKyAgICBpZiAoIXBuZyB8fCAhaW5mbyB8fCBzZXRqbXAocG5nX2ptcGJ1Zihw
bmcpKSkgeworICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QocG5nID8gJnBuZyA6IDAs
IGluZm8gPyAmaW5mbyA6IDApOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gT3B0aW1pemUgY29tcHJlc3Npb24gZm9yIHNwZWVkLgorICAgIC8vIFRoZSBwYXJhbWV0ZXJz
IGFyZSB0aGUgc2FtZSBhcyB3aGF0IGxpYnBuZyB1c2VzIGJ5IGRlZmF1bHQgZm9yIFJHQiBhbmQg
UkdCQSBpbWFnZXMsIGV4Y2VwdDoKKyAgICAvLyAtIHRoZSB6bGliIGNvbXByZXNzaW9uIGxldmVs
IGlzIDMgaW5zdGVhZCBvZiA2LCB0byBhdm9pZCB0aGUgbGF6eSBaaXYtTGVtcGVsIG1hdGNoIHNl
YXJjaGluZzsKKyAgICAvLyAtIHRoZSBkZWx0YSBmaWx0ZXIgaXMgMSAoInN1YiIpIGluc3RlYWQg
b2YgNSAoImFsbCIpLCB0byByZWR1Y2UgdGhlIGZpbHRlciBjb21wdXRhdGlvbnMuCisgICAgLy8g
VGhlIHpsaWIgbWVtb3J5IGxldmVsICg4KSBhbmQgc3RyYXRlZ3kgKFpfRklMVEVSRUQpIHdpbGwg
YmUgc2V0IGluc2lkZSBsaWJwbmcuCisgICAgLy8KKyAgICAvLyBBdm9pZCB0aGUgemxpYiBzdHJh
dGVnaWVzIFpfSFVGRk1BTl9PTkxZIG9yIFpfUkxFLgorICAgIC8vIEFsdGhvdWdoIHRoZXkgYXJl
IHRoZSBmYXN0ZXN0IGZvciBwb29ybHktY29tcHJlc3NpYmxlIGltYWdlcyAoZS5nLiBwaG90b2dy
YXBocyksCisgICAgLy8gdGhleSBhcmUgdmVyeSBzbG93IGZvciBoaWdobHktY29tcHJlc3NpYmxl
IGltYWdlcyAoZS5nLiB0ZXh0LCBkcmF3aW5ncyBvciBidXNpbmVzcyBncmFwaGljcykuCisgICAg
cG5nX3NldF9jb21wcmVzc2lvbl9sZXZlbChwbmcsIDMpOworICAgIHBuZ19zZXRfZmlsdGVyKHBu
ZywgUE5HX0ZJTFRFUl9UWVBFX0JBU0UsIFBOR19GSUxURVJfU1VCKTsKKworICAgIHBuZ19zZXRf
d3JpdGVfZm4ocG5nLCBvdXRwdXQsIHdyaXRlT3V0cHV0LCAwKTsKKyAgICBwbmdfc2V0X0lIRFIo
cG5nLCBpbmZvLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLAorICAgICAg
ICAgICAgICAgICA4LCBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEEsIDAsIDAsIDApOworICAgIHBu
Z193cml0ZV9pbmZvKHBuZywgaW5mbyk7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdl
U2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIHBuZ193cml0ZV9yb3cocG5nLCBwaXhlbHMp
OworICAgICAgICBwaXhlbHMgKz0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OworICAgIH0KKworICAg
IHBuZ193cml0ZV9lbmQocG5nLCBpbmZvKTsKKyAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3Qo
JnBuZywgJmluZm8pOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9z
a2lhL1BOR0ltYWdlRW5jb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5j
b2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuaAppbmRleCBiOGRmZWMzYmIzYmQ1NDcwN2NiMDUz
MTBiODQwN2IzOGVhOTUwMGMyLi4wNjFkN2FjYTJjZWU4YThiMDNlZmM0MGUzNDYyNjMzNGVlMjJm
YmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9z
a2lhL1BOR0ltYWdlRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmgKQEAgLTM3LDEwICszNywxMyBAQCBjbGFz
cyBTa0JpdG1hcDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisK
IC8vIEludGVyZmFjZSBmb3IgZW5jb2RpbmcgUE5HIGRhdGEuIFRoaXMgaXMgYSB3cmFwcGVyIGFy
b3VuZCBsaWJwbmcuCiBjbGFzcyBQTkdJbWFnZUVuY29kZXIgewogcHVibGljOgogICAgIHN0YXRp
YyBib29sIGVuY29kZShjb25zdCBTa0JpdG1hcCYsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0
cHV0KTsKKyAgICBzdGF0aWMgYm9vbCBlbmNvZGUoY29uc3QgSW1hZ2VEYXRhJiwgVmVjdG9yPHVu
c2lnbmVkIGNoYXI+KiBvdXRwdXQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiMWUzOTY0NjI2NzFkMTU2MjlhYzIwYzRkMDI1Nzk2
NmU5ZDA2ZmQ0Li4yYTU5YjMzYjNkN2JkNjgyYjk4OGViYTZhY2U1ODc1NWQ5MGRhOThhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTAzLTExICBKb2hu
IEJhdW1hbiAgPGpiYXVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vbi1wcmVtdWx0aXBsaWVkLWFscGhhIGNhbnZhcyBh
dHRyaWJ1dGUgaXMgaWdub3JlIGZvciB0b0RhdGFVUkwsIGRyYXdJbWFnZSwgdGV4SW1hZ2UyRAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMzgKKwor
ICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBhIHdlYmdsIGNvbnRleHQgaW50byBhbiBJ
bWFnZURhdGEuCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgICog
c3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDoKKwogMjAxMS0wMy0xMSAgRGF2aWQgTGV2
aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUm9sbG91dCB0aGUgY2hyb21pdW0g
ZGVwcyByb2xsIGFzIGl0IGFkZHMgYSBkZXBlbmRlbmN5IG9uIGEgaGVhZGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0u
Y3BwCmluZGV4IDNkOTM3YWMwMzkwMzc1M2Q3MDE4MzNiZmE4NjVhZWM2NWExNjllMWQuLjhkMTJj
NGQ1MWU1NTZmMGNlMzJlYjM2M2VkNzE4ODUwZDM1N2Y4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCkBA
IC0yMDAsNiArMjAwLDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29uCiAKICAgICBtX2ltcGwt
PnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBs
LT5oZWlnaHQoKSk7CiAKKyAgICBpZiAoIW1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5w
cmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9p
bXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWlnaHQoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJ1ZmZlclNpemU7IGkgKz0gNCkgeworICAgICAgICAgICAgcGl4ZWxzW2kgKyAw
XSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwor
ICAgICAgICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAq
IHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6
bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICB9
CisgICAgfQorCiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXAucmVhZHlU
b0RyYXcoKSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGRyYXcgdGhlIHJlc2l6aW5nIGJpdG1h
cCBpbnRvIHRoZSBjYW52YXMncyBiYWNraW5nIHN0b3JlLgpAQCAtMjE4LDYgKzIyOCwyMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbgogI2VuZGlmCiB9CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSgpCit7CisgICAgaWYgKG1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0
aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9pbXBsLT53aWR0aCgp
LCBtX2ltcGwtPmhlaWdodCgpKSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VE
YXRhLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAq
IG1faW1wbC0+d2lkdGgoKSAqIG1faW1wbC0+aGVpZ2h0KCk7CisKKyAgICBtX2ltcGwtPnJlYWRC
YWNrRnJhbWVidWZmZXIocGl4ZWxzLCBidWZmZXJTaXplKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ld
LCBwaXhlbHNbaSArIDJdKTsKKworICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOworfQor
CiBib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50c0ludG9DYW52YXNCdWZmZXIo
KSBjb25zdAogewogICAgIC8vIElmIHRoZSBncHUgY29tcG9zaXRvciBpcyBvbiB0aGVuIHNraXAg
dGhlIHJlYWRiYWNrIGFuZCBzb2Z0d2FyZSByZW5kZXJpbmcgcGF0aC4KQEAgLTEwNTksNiArMTA4
Niw3IEBAIERFTEVHQVRFX1RPX0lOVEVSTkFMXzYodmVydGV4QXR0cmliUG9pbnRlciwgR0MzRHVp
bnQsIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEYm9vCiBERUxFR0FURV9UT19JTlRFUk5BTF80KHZp
ZXdwb3J0LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKIAogREVMRUdB
VEVfVE9fSU5URVJOQUxfMShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCopCitERUxFR0FURV9UT19JTlRFUk5BTF9SKHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhLCBQYXNzUmVmUHRyPEltYWdlRGF0YT4pCiAKIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCmlu
ZGV4IGM4ZjdjN2E3YTc0MWM0N2RjMzUyMzU5ZDYxYThjYTY3YTJlNDk0ODUuLmI1MTdlNjBiOGRm
OWViZjcxMmY2NTYyOThmZGQ1NjA1YjhlZDBlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgKQEAgLTY3LDYgKzY3
LDcgQEAgcHVibGljOgogICAgIEludFNpemUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsK
IAogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCopOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YSgpOwogICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0
OwogCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85767</attachid>
            <date>2011-03-14 21:00:54 -0700</date>
            <delta_ts>2011-03-15 18:07:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56238-20110314210053.patch</filename>
            <type>text/plain</type>
            <size>46979</size>
            <attacher name="John Bauman">jbauman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA5MTQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkZWFlNDQ4MDgzYjBjZmM3M2U5N2Yx
NTk5MTBkMDQ0NzQyOWJlZTY1Li5iYjY5ZTcxYWY5NjVkMjI0ZDJjYjg1NjhjNzgzMzgwMzc0NDIw
ZTVjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDMtMTQgIEpvaG4gQmF1bWFuICA8amJh
dW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm9uLXByZW11bHRpcGxpZWQtYWxwaGEgY2FudmFzIGF0dHJpYnV0ZSBpcyBp
Z25vcmUgZm9yIHRvRGF0YVVSTCwgZHJhd0ltYWdlLCB0ZXhJbWFnZTJECisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjIzOAorCisgICAgICAgIEFkZCBu
ZXcgdGVzdCBmcm9tIHdlYmdsIGNvbmZvcm1hbmNlIHRlc3QuCisKKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRp
bHMuanM6IFVwZGF0ZSB0byBmaXggZmlsbFRleHR1cmUKKyAgICAgICAgKFdlYkdMVGVzdFV0aWxz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjLXdrMi9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9Ta2lwcGVkOgorCiAyMDExLTAzLTExICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBGaXggcHJvdG90eXBlLWluaGVyaXRhbmNlLWV4cGVjdGVkIHJlc3VsdCBk
dWUgdG8gdHdvIGNoYW5nZXM6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcHJlbXVsdGlwbHlhbHBoYS10ZXN0LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45NWNjODBmYjE1MTUzMDkxNzI5ZDcwZjZjMTU2ZTZlOGQwMGM3YjgxCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcHJlbXVsdGlwbHlhbHBoYS10
ZXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
NDk6IFtvYmplY3QgV2ViR0xDb250ZXh0QXR0cmlidXRlc10KK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSA0OTogW29iamVjdCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzXQorVGVzdCB0aGUgV2ViR0wgcHJl
bXVsdGlwbGVkQWxwaGEgY29udGV4dCBjcmVhdGlvbiBmbGFnLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKwordGVzdGluZzogcHJlbXVsdGlwbGllZEFscGhhOiB0cnVlCitQQVNTIGds
LmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGVkQWxwaGEgaXMgcHJlbXVsdGlwbGVk
QWxwaGEKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3Vs
ZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBkcmF3aW5nLgorUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9y
cyBmcm9tIGNyZWF0aW5nIGNvcHkuCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gMm5kIGRyYXdpbmcuCitQQVNTIHNo
b3VsZCBkcmF3IHdpdGggMCwwLDAsMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
Cit0ZXN0aW5nOiBwcmVtdWx0aXBsaWVkQWxwaGE6IGZhbHNlCitQQVNTIGdsLmdldENvbnRleHRB
dHRyaWJ1dGVzKCkucHJlbXVsdGlwbGVkQWxwaGEgaXMgcHJlbXVsdGlwbGVkQWxwaGEKK1BBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJv
cnMgZnJvbSBzZXR1cC4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBkcmF3aW5nLgorUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIGNyZWF0
aW5nIGNvcHkuCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBT
aG91bGQgYmUgbm8gZXJyb3JzIGZyb20gMm5kIGRyYXdpbmcuCitQQVNTIHNob3VsZCBkcmF3IHdp
dGggMjU1LDE5MiwxMjgsMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3By
ZW11bHRpcGx5YWxwaGEtdGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
cHJlbXVsdGlwbHlhbHBoYS10ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y2Njg5ZDMxNzM2YjNjZjBl
Y2FkOTNlZDU1MDVmZDljMDkyZGQwMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3ByZW11bHRpcGx5YWxwaGEtdGVzdC5odG1sCkBAIC0wLDAgKzEsMTA0
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0
aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxo
dG1sPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCB0aGUgV2ViR0wgcHJlbXVsdGlwbGVkQWxwaGEgY29u
dGV4dCBjcmVhdGlvbiBmbGFnLjwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPiA8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvd2ViZ2wtdGVzdC11dGlscy5qcyI+IDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0
PgordmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOworCit2YXIgdGVzdHMgPSBbCisgIC8vIElmIHBy
ZW11bHRpcGxlZEFscGhhIGlzIHRydWUgdGhlbgorICAvLyBbdGV4dHVyZV0gICAgICAgICAgIFtj
YW52YXNdICAgICAgW2RhdGFVUkxdCisgIC8vIDI1NSwgMTkyLCAxMjgsIDAgLT4gMCwgMCwgMCwg
MCAtPiAwLCAwLCAwLCAwCisgIHsgY3JlYXRpb25BdHRyaWJ1dGVzOiB7fSwKKyAgICBleHBlY3Rl
ZENvbG9yOiBbMCwgMCwgMCwgMF0KKyAgfSwKKyAgLy8gSWYgcHJlbXVsdGlwbGVkQWxwaGEgaXMg
ZmFsc2UgdGhlbgorICAvLyBbdGV4dHVyZV0gICAgICAgICAgIFtjYW52YXNdICAgICAgICAgICAg
W2RhdGFVUkxdCisgIC8vIDI1NSwgMTkyLCAxMjgsIDAgLT4gMjU1LCAxOTIsIDEyOCwgMCAtPiAy
NTUsIDE5MiwgMTI4LCAwCisgIHsgY3JlYXRpb25BdHRyaWJ1dGVzOiB7cHJlbXVsdGlwbGllZEFs
cGhhOiBmYWxzZX0sCisgICAgZXhwZWN0ZWRDb2xvcjogWzI1NSwgMTkyLCAxMjgsIDBdCisgIH0K
K107CisKK3ZhciBnX2NvdW50ID0gMDsKK3ZhciBnbDsKK3ZhciBjYW52YXM7Cit2YXIgcHJlbXVs
dGlwbGVkQWxwaGE7CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoZSBXZWJHTCBwcmVtdWx0aXBsZWRB
bHBoYSBjb250ZXh0IGNyZWF0aW9uIGZsYWcuIik7Citkb05leHRUZXN0KCk7CitmdW5jdGlvbiBk
b05leHRUZXN0KCkgeworICBpZiAoZ19jb3VudCA8IHRlc3RzLmxlbmd0aCkgeworICAgICB2YXIg
dGVzdCA9IHRlc3RzW2dfY291bnQrK107CisgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImNhbnZhcyIpOworICAgICBnbCA9IHd0dS5jcmVhdGUzRENvbnRleHQoY2FudmFzLCB0
ZXN0LmNyZWF0aW9uQXR0cmlidXRlcyk7CisgICAgIHZhciBwcmVtdWx0aXBsaWVkQWxwaGEgPSB0
ZXN0LmNyZWF0aW9uQXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgIT0gZmFsc2U7CisgICAg
IGRlYnVnKCIiKQorICAgICBkZWJ1ZygidGVzdGluZzogcHJlbXVsdGlwbGllZEFscGhhOiAiICsg
cHJlbXVsdGlwbGllZEFscGhhKTsKKworICAgICBzaG91bGRCZSgnZ2wuZ2V0Q29udGV4dEF0dHJp
YnV0ZXMoKS5wcmVtdWx0aXBsZWRBbHBoYScsICdwcmVtdWx0aXBsZWRBbHBoYScpOworCisgICAg
IGNvbnNvbGUubG9nKGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOworICAgICB2YXIgcHJvZ3Jh
bSA9IHd0dS5zZXR1cFRleHR1cmVkUXVhZChnbCk7CisKKyAgICAgZ2xFcnJvclNob3VsZEJlKGds
LCBnbC5OT19FUlJPUiwgIlNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4iKTsKKyAgICAg
dmFyIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgd3R1LmZpbGxUZXh0dXJlKGdsLCB0
ZXgsIDIsIDIsIFsyNTUsIDE5MiwgMTI4LCAwXSwgMCk7CisgICAgIHZhciBsb2MgPSBnbC5nZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgInRleCIpOworICAgICBnbC51bmlmb3JtMWkobG9jLCAw
KTsKKyAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9G
SUxURVIsIGdsLkxJTkVBUik7CisgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwg
Z2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpOworICAgICBnbC50ZXhQYXJhbWV0ZXJp
KGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTsKKyAg
ICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wu
Q0xBTVBfVE9fRURHRSk7CisKKyAgICAgd3R1LmRyYXdRdWFkKGdsKTsKKyAgICAgZ2xFcnJvclNo
b3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBkcmF3aW5n
LiIpOworCisgICAgIC8vIGdldCBhIGNvcHkgb2YgdGhlIHRleHR1cmUgYXMgYSBQTkcuCisgICAg
IHZhciBwbmcgPSBjYW52YXMudG9EYXRhVVJMKCk7CisgICAgIC8vIG1ha2UgYSB0ZXh0dXJlIGZy
b20gdGhlIGNhbnZhcworICAgICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1n
Iik7CisgICAgIGltZy5zcmMgPSBwbmc7CisgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICB2YXIgcG5nVGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgICAgIC8vIG5vdCBu
ZWVkZWQgYXMgaXQncyB0aGUgZGVmYXVsdAorICAgICAgIC8vIGdsLnBpeGVsU3RvcmVpKGdsLlVO
UEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgZmFsc2UpOworICAgICAgIGdsLnBpeGVsU3Rv
cmVpKGdsLlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wsIGZhbHNlKTsKKyAgICAg
ICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBwbmdUZXgpOworICAgICAgIGdsLnRleElt
YWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllU
RSwgaW1nKTsKKyAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRV
UkVfTUlOX0ZJTFRFUiwgZ2wuTElORUFSKTsKKyAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRF
WFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTsKKyAgICAgICBnbC50
ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9U
T19FREdFKTsKKyAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRV
UkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTsKKyAgICAgICBnbEVycm9yU2hvdWxkQmUoZ2ws
IGdsLk5PX0VSUk9SLCAiU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIGNyZWF0aW5nIGNvcHkuIik7
CisgICAgICAgd3R1LmRyYXdRdWFkKGdsKTsKKyAgICAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGds
Lk5PX0VSUk9SLCAiU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIDJuZCBkcmF3aW5nLiIpOworICAg
ICAgIHd0dS5jaGVja0NhbnZhcygKKyAgICAgICAgICBnbCwgdGVzdC5leHBlY3RlZENvbG9yLAor
ICAgICAgICAgICJzaG91bGQgZHJhdyB3aXRoICIgKyB0ZXN0LmV4cGVjdGVkQ29sb3IpOworCisg
ICAgICAgZG9OZXh0VGVzdCgpOworICAgICB9CisgICB9IGVsc2UgeworICAgICAgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgIGZpbmlzaFRlc3QoKTsKKyAgIH0KK30KKworPC9zY3Jp
cHQ+CisKKzxzY3JpcHQ+Cis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgorCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0
LXV0aWxzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmds
LXRlc3QtdXRpbHMuanMKaW5kZXggZjNlNTIwZmFjZmZiMzI2YzhlOWI5ZDQ1ZDNkYmIxMjE4MzMz
MjAxMS4uYzUzMjhlMTM0ZDJiYzQwYmU2MzNhNTE0OGFmODNiNGE4YTNiMThiMiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRp
bHMuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmds
LXRlc3QtdXRpbHMuanMKQEAgLTEwNiw3ICsxMDYsNyBAQCB2YXIgc2ltcGxlVGV4dHVyZUZyYWdt
ZW50U2hhZGVyID0gJycgKwogICAndW5pZm9ybSBzYW1wbGVyMkQgdGV4O1xuJyArCiAgICd2YXJ5
aW5nIHZlYzIgdGV4Q29vcmQ7XG4nICsKICAgJ3ZvaWQgbWFpbigpIHtcbicgKwotICAnICAgIGds
X0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHRleENvb3JkKTtcbicgKworICAnICAgIGdsX0Zy
YWdEYXRhWzBdID0gdGV4dHVyZTJEKHRleCwgdGV4Q29vcmQpO1xuJyArCiAgICd9XG4nOwogCiAv
KioKQEAgLTI2MiwxNiArMjYyLDIxIEBAIHZhciBzZXR1cFRleHR1cmVkUXVhZCA9IGZ1bmN0aW9u
KAogICovCiB2YXIgZmlsbFRleHR1cmUgPSBmdW5jdGlvbihnbCwgdGV4LCB3aWR0aCwgaGVpZ2h0
LCBjb2xvciwgb3B0X2xldmVsKSB7CiAgIG9wdF9sZXZlbCA9IG9wdF9sZXZlbCB8fCAwOwotICB2
YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7Ci0gIGNhbnZhcy53
aWR0aCA9IHdpZHRoOwotICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwotICB2YXIgY3R4MmQgPSBj
YW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKLSAgY3R4MmQuZmlsbFN0eWxlID0gInJnYmEoIiArIGNv
bG9yWzBdICsgIiwiICsgY29sb3JbMV0gKyAiLCIgKyBjb2xvclsyXSArICIsIiArIGNvbG9yWzNd
ICsgIikiOwotICBjdHgyZC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgdmFyIG51
bVBpeGVscyA9IHdpZHRoICogaGVpZ2h0OworICB2YXIgc2l6ZSA9IG51bVBpeGVscyAqIDQ7Cisg
IHZhciBidWYgPSBuZXcgVWludDhBcnJheShzaXplKTsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8
IG51bVBpeGVsczsgKytpaSkgeworICAgIHZhciBvZmYgPSBpaSAqIDQ7CisgICAgYnVmW29mZiAr
IDBdID0gY29sb3JbMF07CisgICAgYnVmW29mZiArIDFdID0gY29sb3JbMV07CisgICAgYnVmW29m
ZiArIDJdID0gY29sb3JbMl07CisgICAgYnVmW29mZiArIDNdID0gY29sb3JbM107CisgIH0KICAg
Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKICAgZ2wudGV4SW1hZ2UyRCgKLSAg
ICAgIGdsLlRFWFRVUkVfMkQsIG9wdF9sZXZlbCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdO
RURfQllURSwgY2FudmFzKTsKLX07CisgICAgICBnbC5URVhUVVJFXzJELCBvcHRfbGV2ZWwsIGds
LlJHQkEsIHdpZHRoLCBoZWlnaHQsIDAsCisgICAgICBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRF
LCBidWYpOworICB9OwogCiAvKioKICAqIENyZWF0ZXMgYSB0ZXh0dXJlcyBhbmQgZmlsbHMgaXQg
d2l0aCBhIHNvbGlkIGNvbG9yCkBAIC0zMTYsMTQgKzMyMSwxNyBAQCB2YXIgZHJhd1F1YWQgPSBm
dW5jdGlvbihnbCwgb3B0X2NvbG9yKSB7CiAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29s
b3IgVGhlIGNvbG9yIHRvIGZpbGwgY2xlYXIgd2l0aCBiZWZvcmUgZHJhd2luZy4gQQogICogICAg
ICAgIDQgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAg
dG8gMjU1LgogICogQHBhcmFtIHtzdHJpbmd9IG1zZyBNZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRo
IHN1Y2Nlc3MuIEVnICgic2hvdWxkIGJlIHJlZCIpLgorICogQHBhcmFtIHtudW1iZXJ9IGVycm9y
UmFuZ2UgT3B0aW9uYWwuIEFjY2VwdGFibGUgZXJyb3IgaW4KKyAqICAgICAgICBjb2xvciBjaGVj
a2luZy4gMCBieSBkZWZhdWx0LgogICovCi12YXIgY2hlY2tDYW52YXNSZWN0ID0gZnVuY3Rpb24o
Z2wsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBtc2cpIHsKK3ZhciBjaGVja0NhbnZhc1Jl
Y3QgPSBmdW5jdGlvbihnbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY29sb3IsIG1zZywgZXJyb3JS
YW5nZSkgeworICBlcnJvclJhbmdlID0gZXJyb3JSYW5nZSB8fCAwOwogICB2YXIgYnVmID0gbmV3
IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKICAgZ2wucmVhZFBpeGVscyh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOwogICBmb3IgKHZh
ciBpID0gMDsgaSA8IHdpZHRoICogaGVpZ2h0OyArK2kpIHsKICAgICB2YXIgb2Zmc2V0ID0gaSAq
IDQ7CiAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2xvci5sZW5ndGg7ICsraikgewotICAgICAg
aWYgKGJ1ZltvZmZzZXQgKyBqXSAhPSBjb2xvcltqXSkgeworICAgICAgaWYgKE1hdGguYWJzKGJ1
ZltvZmZzZXQgKyBqXSAtIGNvbG9yW2pdKSA+IGVycm9yUmFuZ2UpIHsKICAgICAgICAgdGVzdEZh
aWxlZChtc2cpOwogICAgICAgICB2YXIgd2FzID0gYnVmW29mZnNldCArIDBdLnRvU3RyaW5nKCk7
CiAgICAgICAgIGZvciAoaiA9IDE7IGogPCBjb2xvci5sZW5ndGg7ICsraikgewpAQCAtMzc4LDIw
ICszODYsMTUgQEAgdmFyIGxvYWRUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHVybCwgY2FsbGJhY2sp
IHsKICAqICAgICBwYXNzZWQgaW4gb25lIHdpbGwgYmUgY3JlYXRlZC4KICAqIEByZXR1cm4geyFX
ZWJHTENvbnRleHR9IFRoZSBjcmVhdGVkIGNvbnRleHQuCiAgKi8KLXZhciBjcmVhdGUzRENvbnRl
eHQgPSBmdW5jdGlvbihvcHRfY2FudmFzKSB7Cit2YXIgY3JlYXRlM0RDb250ZXh0ID0gZnVuY3Rp
b24ob3B0X2NhbnZhcywgb3B0X2F0dHJpYnV0ZXMpIHsKICAgb3B0X2NhbnZhcyA9IG9wdF9jYW52
YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgIHZhciBjb250ZXh0ID0g
bnVsbDsKICAgdHJ5IHsKLSAgICBjb250ZXh0ID0gb3B0X2NhbnZhcy5nZXRDb250ZXh0KCJleHBl
cmltZW50YWwtd2ViZ2wiKTsKKyAgICBjb250ZXh0ID0gb3B0X2NhbnZhcy5nZXRDb250ZXh0KCJ3
ZWJnbCIsIG9wdF9hdHRyaWJ1dGVzKTsKICAgfSBjYXRjaChlKSB7fQogICBpZiAoIWNvbnRleHQp
IHsKICAgICB0cnkgewotICAgICAgY29udGV4dCA9IG9wdF9jYW52YXMuZ2V0Q29udGV4dCgid2Vi
a2l0LTNkIik7Ci0gICAgfSBjYXRjaChlKSB7fQotICB9Ci0gIGlmICghY29udGV4dCkgewotICAg
IHRyeSB7Ci0gICAgICBjb250ZXh0ID0gb3B0X2NhbnZhcy5nZXRDb250ZXh0KCJtb3otd2ViZ2wi
KTsKKyAgICAgIGNvbnRleHQgPSBvcHRfY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13
ZWJnbCIsIG9wdF9hdHRyaWJ1dGVzKTsKICAgICB9IGNhdGNoKGUpIHt9CiAgIH0KICAgaWYgKCFj
b250ZXh0KSB7CkBAIC01NjgsNyArNTcxLDcgQEAgdmFyIHNldHVwV2ViR0xXaXRoU2hhZGVycyA9
IGZ1bmN0aW9uKAogCiAgIC8vIEJpbmQgYXR0cmlidXRlcwogICBmb3IgKHZhciBpIGluIGF0dHJp
YnMpIHsKLSAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24gKHByb2dyYW0sIHBhcnNlSW50KGkpLCBh
dHRyaWJzW2ldKTsKKyAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24gKHByb2dyYW0sIGksIGF0dHJp
YnNbaV0pOwogICB9CiAKICAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0pOwpAQCAtNjQ0LDYgKzY0
NywxMSBAQCB2YXIgbG9hZFNoYWRlciA9IGZ1bmN0aW9uKGdsLCBzaGFkZXJTb3VyY2UsIHNoYWRl
clR5cGUpIHsKIAogICAvLyBMb2FkIHRoZSBzaGFkZXIgc291cmNlCiAgIGdsLnNoYWRlclNvdXJj
ZShzaGFkZXIsIHNoYWRlclNvdXJjZSk7CisgIHZhciBlcnIgPSBnbC5nZXRFcnJvcigpOworICBp
ZiAoZXJyICE9IGdsLk5PX0VSUk9SKSB7CisgICAgZXJyb3IoIioqKiBFcnJvciBsb2FkaW5nIHNo
YWRlciAnIiArIHNoYWRlciArICInOiIgKyBnbEVudW1Ub1N0cmluZyhnbCwgZXJyKSk7CisgICAg
cmV0dXJuIG51bGw7CisgIH0KIAogICAvLyBDb21waWxlIHRoZSBzaGFkZXIKICAgZ2wuY29tcGls
ZVNoYWRlcihzaGFkZXIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IGFiYWVhYzM5ZmZjMjRmOGU3MWY3MTA1ODc5Nzkw
YzZiOWNhNDRlODYuLmY2ZThlNjdhYTM5MTlkMGVhMDA1NWYwNmQ3ODA2NzEwYzQ3Y2FmZDAgMTAw
NzU1Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25z
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQKQEAgLTIzNTcsNiArMjM1Nyw4IEBAIEJVR1dFQkdMIE1BQyBMSU5VWCA6IGZhc3QvY2Fu
dmFzL3dlYmdsL2dsc2wtY29uZm9ybWFuY2UuaHRtbCA9IENSQVNICiBCVUdXRUJHTCBHUFUgV0lO
IERFQlVHIFNMT1cgOiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEt
ZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbCA9IFBBU1MKIEJVR1dFQkdMIEdQVSBXSU4gREVC
VUcgU0xPVyA6IGZhc3QvY2FudmFzL3dlYmdsL2luZGV4LXZhbGlkYXRpb24td2l0aC1yZXNpemVk
LWJ1ZmZlci5odG1sID0gUEFTUwogCitCVUdXRUJHTCA6IGZhc3QvY2FudmFzL3dlYmdsL3ByZW11
bHRpcGx5YWxwaGEtdGVzdC5odG1sID0gVEVYVAorCiAvLyBUaGVzZSB3ZXJlIG5vdCBmaXhlZCBi
eSB0aGUgTWVzYSA3LjkgdXBncmFkZS4gTmVlZCB0byBpbnZlc3RpZ2F0ZS4KIEJVR0NSNjA2NTEg
V0lOIDogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtb2JqZWN0LWdldC1jYWxscy5odG1sID0gVElNRU9V
VCBQQVNTIFRFWFQKIC8vIEJVR0NSNjA2NTEgV0lOIDogZmFzdC9jYW52YXMvd2ViZ2wvZ2xzbC1j
b25mb3JtYW5jZS5odG1sID0gVElNRU9VVCBGQUlMCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMtd2syL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1Nr
aXBwZWQKaW5kZXggNDI1NzAwY2M2ZjFjNDFmMTdhMDRkZmJjZjcwZmNiMzc1YzcxMGQ4NS4uMmY0
ODk1YjgyZjZlYTMxMjMwNDViMWRlNjM2Y2I1ODQwYmJlZjcxZCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy13azIvU2tpcHBlZApAQCAtMTA4MSw2ICsxMDgxLDcgQEAgZmFzdC9jYW52YXMvd2ViZ2wv
bnVsbC1vYmplY3QtYmVoYXZpb3VyLmh0bWwKIGZhc3QvY2FudmFzL3dlYmdsL251bGwtdW5pZm9y
bS1sb2NhdGlvbi5odG1sCiBmYXN0L2NhbnZhcy93ZWJnbC9vYmplY3QtZGVsZXRpb24tYmVoYXZp
b3VyLmh0bWwKIGZhc3QvY2FudmFzL3dlYmdsL3BvaW50LXNpemUuaHRtbAorZmFzdC9jYW52YXMv
d2ViZ2wvcHJlbXVsdGlwbHlhbHBoYS10ZXN0Lmh0bWwKIGZhc3QvY2FudmFzL3dlYmdsL3Byb2dy
YW0tdGVzdC5odG1sCiBmYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy1wYWNrLWFsaWdubWVu
dC5odG1sCiBmYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy10ZXN0Lmh0bWwKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL1NraXBwZWQKaW5kZXggOTdhODE2MWYxYWQwYzExNzQ0ZTRhZTQ1MjFmNDYxYTQxZTAz
MmVlZi4uMDU4MGMwNTU1MjhlOTQwNjU3MjU3ODgxMzZiMzYxM2NkYzFhNTk4YiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1NraXBwZWQKQEAgLTMwMyw2ICszMDMsNyBAQCBtZWRpYS92aWRlby1jb250cm9s
cy1pbi1tZWRpYS1kb2N1bWVudC5odG1sCiAjIE5vbi1wcmVtdWx0aXBsaWVkLWFscGhhIGN1cnJl
bnRseSBicm9rZW4gb24gbWFjLgogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTU1MDkKIGNvbXBvc2l0aW5nL3dlYmdsL3dlYmdsLW5vbnByZW11bHRpcGxpZWQtYmxl
bmQuaHRtbAorZmFzdC9jYW52YXMvd2ViZ2wvcHJlbXVsdGlwbGllZGFscGhhLXRlc3QuaHRtbAog
CiAjIERhdGFUcmFuc2Zlckl0ZW1zIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCiBlZGl0aW5nL3Bh
c3RlYm9hcmQvZGF0YS10cmFuc2Zlci1pdGVtcy5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzBjYjA5ZTY3
MzlmZmFiODVmY2RkMzljODA3NTYwYmYyOTRlN2ZmNi4uYzhhMmYwZGYzZGY4MGM1MzAzNjRmYWEy
ZGQxODA5Y2ViNjVlYTlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDExLTAzLTE0
ICBKb2huIEJhdW1hbiAgPGpiYXVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vbi1wcmVtdWx0aXBsaWVkLWFscGhhIGNh
bnZhcyBhdHRyaWJ1dGUgaXMgaWdub3JlIGZvciB0b0RhdGFVUkwsIGRyYXdJbWFnZSwgdGV4SW1h
Z2UyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYy
MzgKKworICAgICAgIEF0dGVtcHQgdG8gZ2V0IGFuIEltYWdlRGF0YSAobm9uLXByZW11bHRpcGxp
ZWQpIGZyb20gYSBXZWJHTCBjYW52YXMKKyAgICAgICBpbnN0ZWFkIG9mIGdldHRpbmcgYW4gSW1h
Z2VCdWZmZXIsIHNvIHRoZXJlJ3MgYSBjaGFuY2UgdGhlIGRhdGEgY2FuIGJlCisgICAgICAgcGFz
c2VkIHN0cmFpZ2h0IHRocm91Z2ggdG8gdGhlIGNvbnN1bWVyIHdpdGggbm8gcHJlbXVsdGlwbGlj
YXRpb24KKyAgICAgICBuZWNlc3NhcnkuIEZpeGVzIENocm9taXVtIGFuZCBTYWZhcmkuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvcHJlbXVsdGlwbHlhbHBoYS10ZXN0Lmh0bWwK
KworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNF
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0dJbWFnZVRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YVRvRGF0YVVSTCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6dG9EYXRhVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YVRvRGF0YVVSTCk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VFbmNvZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZU11bHRpcGxpZWRCR1JBdG9SR0IpOgorICAgICAg
ICAoV2ViQ29yZTo6UkdCQXRvUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVBpeGVscyk6
CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnByZU11bHRpcGxpZWRCR1JBdG9SR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6OmVuY29kZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZUVuY29kZXI6OmVu
Y29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVu
Y29kZXIuaDoKKwogMjAxMS0wMy0xMSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKaW5kZXggMDA2N2QyNmZkMGIyN2MyMGIyM2JhMDMzZDU3Y2YwN2IxNjUyOTY4Ni4u
N2QwOGE1ZGIwOTE5OWI5NTExN2JkZTQwZDA0ODhmNjk1OGY5MWJkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZh
cy5oIgpAQCAtMzM3LDE1ICszMzgsMzcgQEAgU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXQKIAogICAg
IFN0cmluZyBsb3dlcmNhc2VNaW1lVHlwZSA9IG1pbWVUeXBlLmxvd2VyKCk7CiAKLSAgICBtYWtl
UmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOwotCiAgICAgLy8gRklYTUU6IE1ha2UgaXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcgdGhyZWFkc2FmZSAodG8gYWxsb3cgdGhpcyBt
ZXRob2QgdG8gYmUgdXNlZCBvbiBhIHdvcmtlciB0aHJlYWQpLgogICAgIGlmIChtaW1lVHlwZS5p
c051bGwoKSB8fCAhTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcobG93ZXJjYXNlTWltZVR5cGUpKQotICAgICAgICByZXR1cm4gYnVmZmVyKCktPnRv
RGF0YVVSTCgiaW1hZ2UvcG5nIik7CisgICAgICAgIGxvd2VyY2FzZU1pbWVUeXBlID0gImltYWdl
L3BuZyI7CisKKyNpZiBQTEFURk9STShDRykgfHwgVVNFKFNLSUEpCisgICAgLy8gVHJ5IHRvIGdl
dCBJbWFnZURhdGEgZmlyc3QsIGFzIHRoYXQgbWF5IGF2b2lkIGxvc3N5IGNvbnZlcnNpb25zLgor
ICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGdldEltYWdlRGF0YSgpOworCisgICAg
aWYgKGltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuIEltYWdlRGF0YVRvRGF0YVVSTCgqaW1hZ2VE
YXRhLCBsb3dlcmNhc2VNaW1lVHlwZSwgcXVhbGl0eSk7CisjZW5kaWYKIAorICAgIG1ha2VSZW5k
ZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CisgICAgICAKICAgICByZXR1cm4gYnVmZmVyKCktPnRv
RGF0YVVSTChsb3dlcmNhc2VNaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKK1Bhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRhKCkKK3sKKyAgICBpZiAoIW1f
Y29udGV4dCB8fCAhbV9jb250ZXh0LT5pczNkKCkpCisgICAgICAgcmV0dXJuIDA7CisKKyNpZiBF
TkFCTEUoV0VCR0wpICAgIAorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4ID0gc3RhdGlj
X2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKKworICAgIHJl
dHVybiBjdHgtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisjZWxzZQorICAg
IHJldHVybiAwOworI2VuZGlmCit9CisKIEludFJlY3QgSFRNTENhbnZhc0VsZW1lbnQ6OmNvbnZl
cnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JiBsb2dpY2FsUmVjdCkgY29uc3QKIHsK
ICAgICBmbG9hdCBsZWZ0ID0gZmxvb3JmKGxvZ2ljYWxSZWN0LngoKSAqIG1fcGFnZVNjYWxlRmFj
dG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBhMmE2MDZk
NGFlNjU1ZDk5N2Y5N2I5YzliMTY2NWM1MjM1YjJiNzM0Li44NzA2YzZiMTEyMTUwMjFlMTJkYmNl
ZjdhZTllZDEzNWY2NDBhYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5oCkBAIC00Nyw2ICs0Nyw3IEBAIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKIGNsYXNzIEltYWdl
OworY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRTaXplOwog
CkBAIC0xMDUsNiArMTA2LDcgQEAgcHVibGljOgogICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBj
b25zdDsKICAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdDsKICAgICB2b2lkIGNsZWFyQ29w
aWVkSW1hZ2UoKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKCk7CiAK
ICAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29u
c3Q7CiAgICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAKaW5kZXggY2M3YTIzYjQwMDZhZDVlNWMyYjk0ODMyMjQ3NDM3YzExNzE5
OGY4Ni4uY2I0NTFjYmEzNjMzZmZjYTU2YTM0ODk0OWY0MzAyNWU5NWZkMmQ5MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CkBAIC00OTUsNiArNDk1LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCiAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyh0aGlzKTsKIH0KIAorUGFzc1JlZlB0cjxJbWFnZURhdGE+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAg
IHJldHVybiBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7Cit9
CisKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCk7
CkBAIC0zMDYyLDggKzMwNjcsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGNoZWNrT3JpZ2luKGNhbnZhcyk7Ci0gICAgdGV4SW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5j
b3BpZWRJbWFnZSgpLAotICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9
IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFn
ZURhdGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1h
Z2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVt
dWx0aXBseUFscGhhLCBlYyk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0zMjUyLDggKzMy
NjEsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBjaGVja09yaWdpbihjYW52YXMpOwotICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFn
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZh
cy0+Z2V0SW1hZ2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdl
RGF0YS5nZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGll
ZEltYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRl
eCAxMzE0NWM4ZDFhODg5MjE2ZTZlMjNjZWJiMjM3NDE3ZTE2YTU1NDU4Li42Yjg4NWQ5MmVkOTFi
NDVhNGI0M2M2ZTFjNWRmMTBhYjczN2YyNWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMjg2LDYgKzI4Niw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7
CiAKICAgICB2b2lkIHJlbW92ZU9iamVjdChXZWJHTE9iamVjdCopOwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5k
ZXggYTlkYjY1MGIwMDk2YzcxYjAwYmM1MGE5ZjU3YTBkNWQyMDc5NmE5MS4uMzlkODI3NDc4NTU4
OGRjMzBjMDkxYTFkOGNlMmRiZDAwNTBlYWMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC03NTcsNiArNzU3LDcg
QEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOworICAgIFBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogCiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIHJl
Y3QpIGNvbnN0OwpAQCAtODU5LDYgKzg2MCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gY291bGQgbm90
IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMCiAgICAg
Ly8gaW1wbGVtZW50YXRpb24uCiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAg
IC8vIFJlYWQgcmVuZGVyaW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFycmF5IHdpdGggdGhlIHNh
bWUgZm9ybWF0IGFzIHRoZQorICAgIC8vIGJhY2tidWZmZXIuCisgICAgdm9pZCByZWFkUmVuZGVy
aW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIGludCBwaXhlbHNTaXplKTsKICNlbmRp
ZgogCiAgICAgaW50IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCA0ODg3OGRhOWY1
MjA5YzNkMGE5ZjliMDVmMjJjZmUxNjQzNTdmMTg1Li44NjBmNTc0NzhiMzgxYTdiNWRhYzQyYTM4
ZDRhNTQ0Y2MzMmUxODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgKQEAgLTEzMiw2ICsxMzIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIH07CiAK
KyNpZiBQTEFURk9STShDRykgfHwgVVNFKFNLSUEpCisgICAgU3RyaW5nIEltYWdlRGF0YVRvRGF0
YVVSTChjb25zdCBJbWFnZURhdGEmIGlucHV0LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBkb3VibGUqIHF1YWxpdHkpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEltYWdlQnVmZmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggN2M4ZTMxMzA1ZmM5ZjFiMzIx
NWQzMmRmZDE5ZDExMWZmNjE1OTMxZC4uM2M4Zjk1OTA3YWFmZmVjNDE5YTRkNGZmNjM4NDZjYjJi
ZTc1NzliZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2
aWNlcy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC00OTgsMjEgKzQ5OSw4IEBA
IHN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21NSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQogI2VuZGlmCiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uc3QKK3N0
YXRpYyBTdHJpbmcgQ0dJbWFnZVRvRGF0YVVSTChDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpCiB7Ci0gICAgQVNTRVJUKE1JTUVU
eXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBl
KSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFtX2FjY2Vs
ZXJhdGVSZW5kZXJpbmcpCi0gICAgICAgIGltYWdlLmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlSW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSkpOwotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZS5hZG9wdENG
KHdrSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCkpKTsKLSNlbmRpZgotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwi
OwotCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRh
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CiAgICAgaWYgKCFkYXRhKQog
ICAgICAgICByZXR1cm4gImRhdGE6LCI7CkBAIC01MzMsNyArNTIxLDcgQEAgU3RyaW5nIEltYWdl
QnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBx
dWFsaXR5KSBjb24KICAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5
Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogICAgIH0KIAotICAgIENHSW1h
Z2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZS5nZXQoKSwgaW1h
Z2VQcm9wZXJ0aWVzLmdldCgpKTsKKyAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0
aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7CiAgICAgQ0dJbWFn
ZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwogCiAgICAgVmVjdG9yPGNo
YXI+IG91dDsKQEAgLTU0MSw0ICs1MjksNDYgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KSBjb24KIAog
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBvdXQp
OwogfQorCitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7
CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgaWYgKCFtX2FjY2VsZXJh
dGVSZW5kZXJpbmcpCisgICAgICAgIGltYWdlLmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSkpOworI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCisgICAgZWxzZQorICAgICAgICBpbWFnZS5hZG9wdENGKHdr
SU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkp
KTsKKyNlbmRpZgorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiOwor
CisgICAgcmV0dXJuIENHSW1hZ2VUb0RhdGFVUkwoaW1hZ2UuZ2V0KCksIG1pbWVUeXBlLCBxdWFs
aXR5KTsKK30KKworU3RyaW5nIEltYWdlRGF0YVRvRGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KQorewor
ICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhtaW1lVHlwZSkpOworICAgICAgICAKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
aW1hZ2U7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Cisg
ICAgCisgICAgZGF0YVByb3ZpZGVyLmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0
YSgwLCBzb3VyY2UuZGF0YSgpLT5kYXRhKCktPmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNv
dXJjZS5oZWlnaHQoKSwgMCkpOworICAgIAorICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAgICAg
ICByZXR1cm4gImRhdGE6LCI7CisKKyAgICBpbWFnZS5hZG9wdENGKENHSW1hZ2VDcmVhdGUoc291
cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNl
UkdCKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTGFzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxz
ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuICJkYXRh
OiwiOworCisgICAgcmV0dXJuIENHSW1hZ2VUb0RhdGFVUkwoaW1hZ2UuZ2V0KCksIG1pbWVUeXBl
LCBxdWFsaXR5KTsKK30KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IGMyMjRlMjA3YzMxNmI4MGM0NzZhYTNjNDFmYzgxZDYw
MzZjNWFjZWIuLjI1NDdiNTM0ZmYwNjVjZGRkNTJkNzRkYWEyYWFiNzkzZDM2NGJkZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNs
dWRlICJJbnQzMkFycmF5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJVaW50OEFycmF5LmgiCkBAIC03MCwyMSArNzEsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKICAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFz
dGQ6OnN0cnN0cihleHRlbnNpb25zLCAiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikp
CiAgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwogICAgIH0KLSAgICAvLyBG
SVhNRTogaW5zdGVhZCBvZiBlbmZvcmNpbmcgcHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZSwgaW1w
bGVtZW50IHRoZQotICAgIC8vIGNvcnJlY3QgYmVoYXZpb3Igd2hlbiBwcmVtdWx0aXBsaWVkQWxw
aGEgPSBmYWxzZSBpcyByZXF1ZXN0ZWQuCi0gICAgbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEg
PSB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBp
bnQgcGl4ZWxzU2l6ZSkKIHsKLSAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4
dC0+Y2FudmFzKCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZm
ZXIoKTsKLQotICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKLSAgICBpbnQg
dG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OwotCi0gICAgT3duQXJyYXlQ
dHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hh
clt0b3RhbEJ5dGVzXSk7Ci0gICAgaWYgKCFwaXhlbHMpCisgICAgaWYgKHBpeGVsc1NpemUgPCBt
X2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtMTExLDE4ICsxMDIsNjIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCogY28KICAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsK
ICAgICB9CiAKLSAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJy
ZW50SGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscy5n
ZXQoKSk7CisgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwog
CiAgICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKICAgICAgICAgOjpnbFBpeGVsU3Rv
cmVpKEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKIAogICAgIGlmIChtdXN0UmVz
dG9yZUZCTykKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fYm91bmRGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorewor
ICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKKyAgICBJ
bWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworCisgICAgaW50IHJv
d0J5dGVzID0gbV9jdXJyZW50V2lkdGggKiA0OworICAgIGludCB0b3RhbEJ5dGVzID0gcm93Qnl0
ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7CisKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBw
aXhlbHMgPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNdKTsKKyAg
ICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVhZFJlbmRlcmluZ1Jlc3Vs
dHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5dGVzKTsKKworICAgIGlmICghbV9hdHRycy5wcmVtdWx0
aXBsaWVkQWxwaGEpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBp
ICs9IDQpIHsKKyAgICAgICAgICAgIC8vIFByZW11bHRpcGx5IGFscGhhCisgICAgICAgICAgICBw
aXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDBdICogcGl4ZWxzW2kgKyAz
XSAvIDI1NSk7CisgICAgICAgICAgICBwaXhlbHNbaSArIDFdID0gc3RkOjptaW4oMjU1LCBwaXhl
bHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhlbHNbaSAr
IDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDJdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7
CisgICAgICAgIH0KKyAgICB9CiAKICAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9j
dXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKICAgICAgICAgICAgICAgICAgIGNhbnZhcy0+
d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZv
cm1Db250ZXh0KCkpOwogfQogCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0
M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICAvLyBSZWFkaW5n
IHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGlj
aCBpcworICAgIC8vIGxvc3N5CisgICAgaWYgKG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IElt
YWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkp
OworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkt
PmRhdGEoKTsKKyAgICBpbnQgdG90YWxCeXRlcyA9IDQgKiBtX2N1cnJlbnRXaWR0aCAqIG1fY3Vy
cmVudEhlaWdodDsKKworICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRl
cyk7CisKKyAgICAvLyBDb252ZXJ0IHRvIFJHQkEKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRv
dGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kg
KyAyXSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKK30KKwogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYg
KCFtX2NvbnRleHRPYmopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4IGI4NDkyMTQwMDYxZWMx
NzE0MzBjNDFmYzYyNjQ3ZmYyZTdmZmNlODEuLjQyNDFiMDBlNmY3YzNiYjEzZDA3MzNiZTU0M2E3
MjMzMmYyZmI5ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC01MjUsNiArNTI1LDEzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvCiAgICAgcGFpbnQocGFpbnRlciwgUVJlY3QoUVBvaW50
KDAsIDApLCBRU2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSkpOwogfQogCitQ
YXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBpbXBs
ZW1lbnRlZCBmb3IgcHJvcGVyIG5vbi1wcmVtdWx0aXBsaWVkLWFscGhhCisgICAgLy8gc3VwcG9y
dC4KKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnQoUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiByZWN0KSBjb25zdAogewogI2lmIFFUX1ZFUlNJ
T04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCmluZGV4IDI3
MjE1MjM2YWY1NzQxMzhhYjRhMjVhMDg5YWJiNmMxZWFkNWNkN2IuLmI4OWM2OGQyY2FmMmU2ZTRk
Y2IyMGViNTc4OTU1ODc0NzE5YWQzZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTM0MSw2ICsz
NDEsMjggQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShCeXRl
QXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc28KICAgICBwdXRJbWFnZURhdGE8UHJlbXVs
dGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKSwgbV9zaXplKTsK
IH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgU3RyaW5nIEltYWdlVG9EYXRhVVJM
KFQmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5
KQoreworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBlbmNvZGVkSW1hZ2U7CisgICAgaWYgKG1p
bWVUeXBlID09ICJpbWFnZS9qcGVnIikgeworICAgICAgICBpbnQgY29tcHJlc3Npb25RdWFsaXR5
ID0gSlBFR0ltYWdlRW5jb2Rlcjo6RGVmYXVsdENvbXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAg
aWYgKHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkKKyAgICAg
ICAgICAgIGNvbXByZXNzaW9uUXVhbGl0eSA9IHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAx
MDAgKyAwLjUpOworICAgICAgICBpZiAoIUpQRUdJbWFnZUVuY29kZXI6OmVuY29kZShzb3VyY2Us
IGNvbXByZXNzaW9uUXVhbGl0eSwgJmVuY29kZWRJbWFnZSkpCisgICAgICAgICAgICByZXR1cm4g
ImRhdGE6LCI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFQTkdJbWFnZUVuY29kZXI6OmVu
Y29kZShzb3VyY2UsICZlbmNvZGVkSW1hZ2UpKQorICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwi
OworICAgICAgICBBU1NFUlQobWltZVR5cGUgPT0gImltYWdlL3BuZyIpOworICAgIH0KKworICAg
IFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZSgqcmVpbnRlcnByZXRf
Y2FzdDxWZWN0b3I8Y2hhcj4qPigmZW5jb2RlZEltYWdlKSwgYmFzZTY0RGF0YSk7CisKKyAgICBy
ZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RGF0
YSk7Cit9CisKIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uc3QKIHsKICAgICBBU1NFUlQoTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUp
KTsKQEAgLTM1OCwyMyArMzgwLDEzIEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uCiAgICAgICAg
IGlmICghZGV2aWNlLT5yZWFkUGl4ZWxzKGJvdW5kcywgJmJpdG1hcCkpCiAgICAgICAgICAgICBy
ZXR1cm4gImRhdGE6LCI7CiAgICAgfQotICAgIAotICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2Uv
anBlZyIpIHsKLSAgICAgICAgaW50IGNvbXByZXNzaW9uUXVhbGl0eSA9IEpQRUdJbWFnZUVuY29k
ZXI6OkRlZmF1bHRDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAgICAgIGlmIChxdWFsaXR5ICYmICpx
dWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApCi0gICAgICAgICAgICBjb21wcmVzc2lv
blF1YWxpdHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwICsgMC41KTsKLSAgICAg
ICAgaWYgKCFKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUoYml0bWFwLCBjb21wcmVzc2lvblF1YWxp
dHksICZlbmNvZGVkSW1hZ2UpKQotICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmICghUE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUoYml0bWFwLCAmZW5j
b2RlZEltYWdlKSkKLSAgICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKLSAgICAgICAgQVNTRVJU
KG1pbWVUeXBlID09ICJpbWFnZS9wbmciKTsKLSAgICB9CiAKLSAgICBWZWN0b3I8Y2hhcj4gYmFz
ZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoKnJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNoYXI+
Kj4oJmVuY29kZWRJbWFnZSksIGJhc2U2NERhdGEpOworICAgIHJldHVybiBJbWFnZVRvRGF0YVVS
TChiaXRtYXAsIG1pbWVUeXBlLCBxdWFsaXR5KTsKK30KIAotICAgIHJldHVybiBtYWtlU3RyaW5n
KCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjREYXRhKTsKK1N0cmluZyBJbWFn
ZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKK3sKKyAgICByZXR1cm4gSW1hZ2VUb0RhdGFV
Ukwoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3Nr
aWEvSlBFR0ltYWdlRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1l
bmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuY3BwCmluZGV4IGJlM2M5MmFmMjRjMzVjOTJk
ZDE0Yjc1YTQ4MTdhYTI5YjJiM2JiOGIuLjUwNjRlMzgxZmE1OGM4MmZjYzgyMzc5ZmRiZmI1N2Fj
MmM5MzUyNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29k
ZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VFbmNvZGVyLmNwcApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpQRUdJbWFnZUVuY29kZXIuaCIK
IAorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRl
ICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlNrQ29sb3JQcml2LmgiCkBAIC03OSwyMiArODAsMjkg
QEAgc3RhdGljIHZvaWQgaGFuZGxlRXJyb3Ioal9jb21tb25fcHRyIGNvbW1vbikKICAgICBsb25n
am1wKCpqdW1wQnVmZmVyUHRyLCAtMSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByZU11bHRpcGxpZWRC
R1JBdG9SR0IoY29uc3QgU2tQTUNvbG9yKiBpbnB1dCwgdW5zaWduZWQgaW50IHBpeGVscywgdW5z
aWduZWQgY2hhciogb3V0cHV0KQorc3RhdGljIHZvaWQgcHJlTXVsdGlwbGllZEJHUkF0b1JHQihj
b25zdCB2b2lkKiBwaXhlbHMsIHVuc2lnbmVkIGludCBwaXhlbENvdW50LCB1bnNpZ25lZCBjaGFy
KiBvdXRwdXQpCiB7Ci0gICAgZm9yICg7IHBpeGVscy0tID4gMDsgKytpbnB1dCkgeworICAgIGNv
bnN0IFNrUE1Db2xvciogaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBTa1BNQ29sb3IqPihwaXhl
bHMpOworICAgIGZvciAoOyBwaXhlbENvdW50LS0gPiAwOyArK2lucHV0KSB7CiAgICAgICAgICpv
dXRwdXQrKyA9IFNrR2V0UGFja2VkUjMyKCppbnB1dCk7CiAgICAgICAgICpvdXRwdXQrKyA9IFNr
R2V0UGFja2VkRzMyKCppbnB1dCk7CiAgICAgICAgICpvdXRwdXQrKyA9IFNrR2V0UGFja2VkQjMy
KCppbnB1dCk7CiAgICAgfQogfQogCi1ib29sIEpQRUdJbWFnZUVuY29kZXI6OmVuY29kZShjb25z
dCBTa0JpdG1hcCYgYml0bWFwLCBpbnQgcXVhbGl0eSwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBv
dXRwdXQpCitzdGF0aWMgdm9pZCBSR0JBdG9SR0IoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXQs
IHVuc2lnbmVkIGludCBwaXhlbHMsIHVuc2lnbmVkIGNoYXIqIG91dHB1dCkKIHsKLSAgICBpZiAo
Yml0bWFwLmNvbmZpZygpICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBPbmx5IHN1cHBvcnQgQVJHQiAzMiBicHAgc2tpYSBiaXRtYXBzLgor
ICAgIGZvciAoOyBwaXhlbHMtLSA+IDA7IGlucHV0ICs9IDQpIHsKKyAgICAgICAgKm91dHB1dCsr
ID0gaW5wdXRbMF07CisgICAgICAgICpvdXRwdXQrKyA9IGlucHV0WzFdOworICAgICAgICAqb3V0
cHV0KysgPSBpbnB1dFsyXTsKKyAgICB9Cit9CiAKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1h
cExvY2soYml0bWFwKTsKLSAgICBJbnRTaXplIGltYWdlU2l6ZShiaXRtYXAud2lkdGgoKSwgYml0
bWFwLmhlaWdodCgpKTsKK3N0YXRpYyBib29sIGVuY29kZVBpeGVscyhjb25zdCBJbnRTaXplJiBp
bnB1dFNpemUsIHVuc2lnbmVkIGNoYXIqIHBpeGVscywgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBwcmVtdWx0aXBsaWVkLCBpbnQgcXVhbGl0eSwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+
KiBvdXRwdXQpCit7CisgICAgSW50U2l6ZSBpbWFnZVNpemUoaW5wdXRTaXplKTsKICAgICBpbWFn
ZVNpemUuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwogICAgIEpQRUdPdXRwdXRCdWZmZXIgZGVzdGlu
YXRpb247CiAgICAgZGVzdGluYXRpb24ub3V0cHV0ID0gb3V0cHV0OwpAQCAtMTI2LDEyICsxMzQs
MTQgQEAgYm9vbCBKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUoY29uc3QgU2tCaXRtYXAmIGJpdG1h
cCwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ24KICAgICBqcGVnX3NldF9xdWFsaXR5KCZjaW5m
bywgcXVhbGl0eSwgVFJVRSk7CiAgICAganBlZ19zdGFydF9jb21wcmVzcygmY2luZm8sIFRSVUUp
OwogCi0gICAgY29uc3QgU2tQTUNvbG9yKiBwaXhlbHMgPSBzdGF0aWNfY2FzdDxTa1BNQ29sb3Iq
PihiaXRtYXAuZ2V0UGl4ZWxzKCkpOwogICAgIHJvdy5yZXNpemUoY2luZm8uaW1hZ2Vfd2lkdGgg
KiBjaW5mby5pbnB1dF9jb21wb25lbnRzKTsKICAgICB3aGlsZSAoY2luZm8ubmV4dF9zY2FubGlu
ZSA8IGNpbmZvLmltYWdlX2hlaWdodCkgewotICAgICAgICBwcmVNdWx0aXBsaWVkQkdSQXRvUkdC
KHBpeGVscywgY2luZm8uaW1hZ2Vfd2lkdGgsIHJvdy5kYXRhKCkpOworICAgICAgICBpZiAocHJl
bXVsdGlwbGllZCkKKyAgICAgICAgICAgIHByZU11bHRpcGxpZWRCR1JBdG9SR0IocGl4ZWxzLCBj
aW5mby5pbWFnZV93aWR0aCwgcm93LmRhdGEoKSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAg
ICBSR0JBdG9SR0IocGl4ZWxzLCBjaW5mby5pbWFnZV93aWR0aCwgcm93LmRhdGEoKSk7CiAgICAg
ICAgIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCZjaW5mbywgcm93LmRhdGFTbG90KCksIDEpOwotICAg
ICAgICBwaXhlbHMgKz0gY2luZm8uaW1hZ2Vfd2lkdGg7CisgICAgICAgIHBpeGVscyArPSBjaW5m
by5pbWFnZV93aWR0aCAqIDQ7CiAgICAgfQogCiAgICAganBlZ19maW5pc2hfY29tcHJlc3MoJmNp
bmZvKTsKQEAgLTEzOSw0ICsxNDksMjIgQEAgYm9vbCBKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUo
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ24KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUoY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0
KQoreworICAgIGlmIChiaXRtYXAuY29uZmlnKCkgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29u
ZmlnKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE9ubHkgc3VwcG9ydCBBUkdCIDMyIGJwcCBz
a2lhIGJpdG1hcHMuCisKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1hcExvY2soYml0bWFwKTsK
KyAgICBJbnRTaXplIGltYWdlU2l6ZShiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsK
KworICAgIHJldHVybiBlbmNvZGVQaXhlbHMoaW1hZ2VTaXplLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyICo+KGJpdG1hcC5nZXRQaXhlbHMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICB0
cnVlLCBxdWFsaXR5LCBvdXRwdXQpOworfQorCitib29sIEpQRUdJbWFnZUVuY29kZXI6OmVuY29k
ZShjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiogb3V0cHV0KQoreworICAgIHJldHVybiBlbmNvZGVQaXhlbHMoaW1hZ2VEYXRhLnNp
emUoKSwgaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZSwgcXVhbGl0eSwgb3V0cHV0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMv
c2tpYS9KUEVHSW1hZ2VFbmNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1l
bmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuaAppbmRleCBmMmFjNTJkMGVhYzJmMGM1Nzlm
MDJhY2JiYTQwOWQ4ZGM1NTUyNDJlLi41NDA4MDkxNDZjZDM2ODAxM2M5NDMxYTU3YzhhMDMzZTZj
ZWU5Njg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVy
cy9za2lhL0pQRUdJbWFnZUVuY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuaApAQCAtMzcsMTAgKzM3LDEzIEBA
IGNsYXNzIFNrQml0bWFwOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlRGF0
YTsKKwogY2xhc3MgSlBFR0ltYWdlRW5jb2RlciB7CiBwdWJsaWM6CiAgICAgLy8gRW5jb2RlIHRo
ZSBpbnB1dCBiaXRtYXAgd2l0aCBhIGNvbXByZXNzaW9uIHF1YWxpdHkgaW4gWzAtMTAwXS4KICAg
ICBzdGF0aWMgYm9vbCBlbmNvZGUoY29uc3QgU2tCaXRtYXAmLCBpbnQgcXVhbGl0eSwgVmVjdG9y
PHVuc2lnbmVkIGNoYXI+Kik7CisgICAgc3RhdGljIGJvb2wgZW5jb2RlKGNvbnN0IEltYWdlRGF0
YSYsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qKTsKIAogICAgIC8vIEZvciBj
YWxsZXJzOiBwcm92aWRlIGEgcmVhc29uYWJsZSBjb21wcmVzc2lvbiBxdWFsaXR5IGRlZmF1bHQu
CiAgICAgZW51bSBRdWFsaXR5IHsgRGVmYXVsdENvbXByZXNzaW9uUXVhbGl0eSA9IDkyIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BO
R0ltYWdlRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVy
cy9za2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAKaW5kZXggNzhmNzM3ZTMwYzg5OGYxOWEwMWYyMTRm
ZDNhYjM1ZjVmNTk3YTgxNC4uODc0ODY2NzYxM2RhNjBjOGEzMjgzNzU1MGU4M2E1Yzk0YzZhOWY3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tp
YS9QTkdJbWFnZUVuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5oIgogCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlNrQml0bWFw
LmgiCiAjaW5jbHVkZSAiU2tDb2xvclByaXYuaCIKQEAgLTQ2LDExICs0NywxMiBAQCBzdGF0aWMg
dm9pZCB3cml0ZU91dHB1dChwbmdfc3RydWN0cCBwbmcsIHBuZ19ieXRlcCBkYXRhLCBwbmdfc2l6
ZV90IHNpemUpCiAgICAgc3RhdGljX2Nhc3Q8VmVjdG9yPHVuc2lnbmVkIGNoYXI+Kj4ocG5nLT5p
b19wdHIpLT5hcHBlbmQoZGF0YSwgc2l6ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByZU11bHRpcGxp
ZWRCR1JBdG9SR0JBKGNvbnN0IFNrUE1Db2xvciogaW5wdXQsIGludCBwaXhlbHMsIHVuc2lnbmVk
IGNoYXIqIG91dHB1dCkKK3N0YXRpYyB2b2lkIHByZU11bHRpcGxpZWRCR1JBdG9SR0JBKGNvbnN0
IHZvaWQqIHBpeGVscywgaW50IHBpeGVsQ291bnQsIHVuc2lnbmVkIGNoYXIqIG91dHB1dCkKIHsK
ICAgICBzdGF0aWMgY29uc3QgU2tVblByZU11bHRpcGx5OjpTY2FsZSogc2NhbGUgPSBTa1VuUHJl
TXVsdGlwbHk6OkdldFNjYWxlVGFibGUoKTsKKyAgICBjb25zdCBTa1BNQ29sb3IqIGlucHV0ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU2tQTUNvbG9yKj4ocGl4ZWxzKTsKIAotICAgIGZvciAoOyBwaXhl
bHMtLSA+IDA7ICsraW5wdXQpIHsKKyAgICBmb3IgKDsgcGl4ZWxDb3VudC0tID4gMDsgKytpbnB1
dCkgewogICAgICAgICBjb25zdCB1bnNpZ25lZCBhbHBoYSA9IFNrR2V0UGFja2VkQTMyKCppbnB1
dCk7CiAgICAgICAgIGlmICgoYWxwaGEgIT0gMCkgJiYgKGFscGhhICE9IDI1NSkpIHsKICAgICAg
ICAgICAgICpvdXRwdXQrKyA9IFNrVW5QcmVNdWx0aXBseTo6QXBwbHlTY2FsZShzY2FsZVthbHBo
YV0sIFNrR2V0UGFja2VkUjMyKCppbnB1dCkpOwpAQCAtNjYsMTMgKzY4LDEwIEBAIHN0YXRpYyB2
b2lkIHByZU11bHRpcGxpZWRCR1JBdG9SR0JBKGNvbnN0IFNrUE1Db2xvciogaW5wdXQsIGludCBw
aXhlbHMsIHVuc2lnbmVkCiAgICAgfQogfQogCi1ib29sIFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2Rl
KGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQor
c3RhdGljIGJvb2wgZW5jb2RlUGl4ZWxzKGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSwgdW5zaWdu
ZWQgY2hhciogcGl4ZWxzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRp
cGxpZWQsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQogewotICAgIGlmIChiaXRtYXAu
Y29uZmlnKCkgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIE9ubHkgc3VwcG9ydCBBUkdCIDMyIGJwcCBza2lhIGJpdG1hcHMuCi0KLSAgICBT
a0F1dG9Mb2NrUGl4ZWxzIGJpdG1hcExvY2soYml0bWFwKTsKLSAgICBJbnRTaXplIGltYWdlU2l6
ZShiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsKKyAgICBJbnRTaXplIGltYWdlU2l6
ZShpbnB1dFNpemUpOwogICAgIGltYWdlU2l6ZS5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAgICAg
VmVjdG9yPHVuc2lnbmVkIGNoYXI+IHJvdzsKIApAQCAtMTAwLDEyICs5OSwxNSBAQCBib29sIFBO
R0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiogb3V0cAogICAgICAgICAgICAgICAgICA4LCBQTkdfQ09MT1JfVFlQRV9SR0Jf
QUxQSEEsIDAsIDAsIDApOwogICAgIHBuZ193cml0ZV9pbmZvKHBuZywgaW5mbyk7CiAKLSAgICBj
b25zdCBTa1BNQ29sb3IqIHBpeGVscyA9IHN0YXRpY19jYXN0PFNrUE1Db2xvcio+KGJpdG1hcC5n
ZXRQaXhlbHMoKSk7Ci0gICAgcm93LnJlc2l6ZShpbWFnZVNpemUud2lkdGgoKSAqIGJpdG1hcC5i
eXRlc1BlclBpeGVsKCkpOworICAgIHJvdy5yZXNpemUoaW1hZ2VTaXplLndpZHRoKCkgKiBzaXpl
b2YoU2tQTUNvbG9yKSk7CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZVNpemUuaGVpZ2h0
KCk7ICsreSkgewotICAgICAgICBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCQShwaXhlbHMsIGltYWdl
U2l6ZS53aWR0aCgpLCByb3cuZGF0YSgpKTsKLSAgICAgICAgcG5nX3dyaXRlX3JvdyhwbmcsIHJv
dy5kYXRhKCkpOwotICAgICAgICBwaXhlbHMgKz0gaW1hZ2VTaXplLndpZHRoKCk7CisgICAgICAg
IGlmIChwcmVtdWx0aXBsaWVkKSB7CisgICAgICAgICAgICBwcmVNdWx0aXBsaWVkQkdSQXRvUkdC
QShwaXhlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVNpemUu
d2lkdGgoKSwgcm93LmRhdGEoKSk7CisgICAgICAgICAgICBwbmdfd3JpdGVfcm93KHBuZywgcm93
LmRhdGEoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG5nX3dyaXRlX3Jvdyhwbmcs
IHBpeGVscyk7CisgICAgICAgIHBpeGVscyArPSBpbWFnZVNpemUud2lkdGgoKSAqIDQ7CiAgICAg
fQogCiAgICAgcG5nX3dyaXRlX2VuZChwbmcsIGluZm8pOwpAQCAtMTEzLDQgKzExNSwxOSBAQCBi
b29sIFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiogb3V0cAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFBOR0lt
YWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiogb3V0cHV0KQoreworICAgIGlmIChiaXRtYXAuY29uZmlnKCkgIT0gU2tCaXRtYXA6
OmtBUkdCXzg4ODhfQ29uZmlnKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE9ubHkgc3VwcG9y
dCBBUkdCIDMyIGJwcCBza2lhIGJpdG1hcHMuCisKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1h
cExvY2soYml0bWFwKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZShiaXRtYXAud2lkdGgoKSwgYml0
bWFwLmhlaWdodCgpKTsKKyAgICByZXR1cm4gZW5jb2RlUGl4ZWxzKGltYWdlU2l6ZSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGJpdG1hcC5nZXRQaXhlbHMoKSksIHRydWUsIG91dHB1dCk7
Cit9CisKK2Jvb2wgUE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUoY29uc3QgSW1hZ2VEYXRhJiBiaXRt
YXAsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQoreworICAgIHJldHVybiBlbmNvZGVQ
aXhlbHMoYml0bWFwLnNpemUoKSwgYml0bWFwLmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCksIGZhbHNl
LCBvdXRwdXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVu
Y29kZXIuaAppbmRleCBiOGRmZWMzYmIzYmQ1NDcwN2NiMDUzMTBiODQwN2IzOGVhOTUwMGMyLi4w
NjFkN2FjYTJjZWU4YThiMDNlZmM0MGUzNDYyNjMzNGVlMjJmYmY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1h
Z2VFbmNvZGVyLmgKQEAgLTM3LDEwICszNywxMyBAQCBjbGFzcyBTa0JpdG1hcDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIC8vIEludGVyZmFjZSBmb3IgZW5j
b2RpbmcgUE5HIGRhdGEuIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBsaWJwbmcuCiBjbGFzcyBQ
TkdJbWFnZUVuY29kZXIgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGVuY29kZShjb25zdCBT
a0JpdG1hcCYsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KTsKKyAgICBzdGF0aWMgYm9v
bCBlbmNvZGUoY29uc3QgSW1hZ2VEYXRhJiwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQp
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCBiMWUzOTY0NjI2NzFkMTU2MjlhYzIwYzRkMDI1Nzk2NmU5ZDA2ZmQ0Li4wMWE0YzRkMzNl
ZGI4YTEzMjY3YjlkYjQ5ZTc3Mzg5OTgzMDQwOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTAzLTE0ICBKb2huIEJhdW1hbiAgPGpiYXVtYW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vbi1wcmVtdWx0aXBsaWVkLWFscGhhIGNhbnZhcyBhdHRyaWJ1dGUgaXMgaWdub3JlIGZv
ciB0b0RhdGFVUkwsIGRyYXdJbWFnZSwgdGV4SW1hZ2UyRAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMzgKKworICAgICAgICBBZGQgc3VwcG9ydCBm
b3IgcmVhZGluZyBhIHdlYmdsIGNvbnRleHQgaW50byBhbiBJbWFnZURhdGEuCisKKyAgICAgICAg
KiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwuaDoKKwogMjAxMS0wMy0xMSAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUm9sbG91dCB0aGUgY2hyb21pdW0gZGVwcyByb2xsIGFzIGl0IGFkZHMg
YSBkZXBlbmRlbmN5IG9uIGEgaGVhZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCmluZGV4IDNkOTM3YWMwMzkw
Mzc1M2Q3MDE4MzNiZmE4NjVhZWM2NWExNjllMWQuLjhkMTJjNGQ1MWU1NTZmMGNlMzJlYjM2M2Vk
NzE4ODUwZDM1N2Y4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dy
YXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCkBAIC0yMDAsNiArMjAwLDE2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29uCiAKICAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIo
cGl4ZWxzLCA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWlnaHQoKSk7CiAKKyAgICBp
ZiAoIW1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpIHsK
KyAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBs
LT5oZWlnaHQoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1ZmZlclNpemU7
IGkgKz0gNCkgeworICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4
ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kg
KyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUp
OworICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAy
XSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICB9CisgICAgfQorCiAjaWYgVVNFKFNL
SUEpCiAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXAucmVhZHlUb0RyYXcoKSkgewogICAgICAgICAv
LyBXZSBuZWVkIHRvIGRyYXcgdGhlIHJlc2l6aW5nIGJpdG1hcCBpbnRvIHRoZSBjYW52YXMncyBi
YWNraW5nIHN0b3JlLgpAQCAtMjE4LDYgKzIyOCwyMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bgogI2VuZGlmCiB9CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgaWYgKG1f
aW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdl
RGF0YTo6Y3JlYXRlKEludFNpemUobV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpKSk7
CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+
ZGF0YSgpOworICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAqIG1faW1wbC0+d2lkdGgoKSAqIG1f
aW1wbC0+aGVpZ2h0KCk7CisKKyAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxz
LCBidWZmZXJTaXplKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsg
aSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKwor
ICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAogewogICAgIC8vIElm
IHRoZSBncHUgY29tcG9zaXRvciBpcyBvbiB0aGVuIHNraXAgdGhlIHJlYWRiYWNrIGFuZCBzb2Z0
d2FyZSByZW5kZXJpbmcgcGF0aC4KQEAgLTEwNTksNiArMTA4Niw3IEBAIERFTEVHQVRFX1RPX0lO
VEVSTkFMXzYodmVydGV4QXR0cmliUG9pbnRlciwgR0MzRHVpbnQsIEdDM0RpbnQsIEdDM0RlbnVt
LCBHQzNEYm9vCiBERUxFR0FURV9UT19JTlRFUk5BTF80KHZpZXdwb3J0LCBHQzNEaW50LCBHQzNE
aW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKIAogREVMRUdBVEVfVE9fSU5URVJOQUxfMShwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopCitERUxF
R0FURV9UT19JTlRFUk5BTF9SKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhLCBQYXNz
UmVmUHRyPEltYWdlRGF0YT4pCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9D
YW52YXNCdWZmZXIoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCmluZGV4IGM4ZjdjN2E3YTc0MWM0N2Rj
MzUyMzU5ZDYxYThjYTY3YTJlNDk0ODUuLmI1MTdlNjBiOGRmOWViZjcxMmY2NTYyOThmZGQ1NjA1
YjhlZDBlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzREludGVybmFsLmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGljOgogICAgIElu
dFNpemUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKIAogICAgIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOworICAgIFBhc3NS
ZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogICAg
IGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogCiAgICAgdm9pZCBwcmVwYXJl
VGV4dHVyZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85889</attachid>
            <date>2011-03-15 18:07:26 -0700</date>
            <delta_ts>2011-03-15 18:15:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56238-20110315180725.patch</filename>
            <type>text/plain</type>
            <size>50111</size>
            <attacher name="John Bauman">jbauman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA5MTQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkZWFlNDQ4MDgzYjBjZmM3M2U5N2Yx
NTk5MTBkMDQ0NzQyOWJlZTY1Li5iYjY5ZTcxYWY5NjVkMjI0ZDJjYjg1NjhjNzgzMzgwMzc0NDIw
ZTVjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDMtMTQgIEpvaG4gQmF1bWFuICA8amJh
dW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm9uLXByZW11bHRpcGxpZWQtYWxwaGEgY2FudmFzIGF0dHJpYnV0ZSBpcyBp
Z25vcmUgZm9yIHRvRGF0YVVSTCwgZHJhd0ltYWdlLCB0ZXhJbWFnZTJECisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjIzOAorCisgICAgICAgIEFkZCBu
ZXcgdGVzdCBmcm9tIHdlYmdsIGNvbmZvcm1hbmNlIHRlc3QuCisKKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRp
bHMuanM6IFVwZGF0ZSB0byBmaXggZmlsbFRleHR1cmUKKyAgICAgICAgKFdlYkdMVGVzdFV0aWxz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjLXdrMi9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9Ta2lwcGVkOgorCiAyMDExLTAzLTExICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBGaXggcHJvdG90eXBlLWluaGVyaXRhbmNlLWV4cGVjdGVkIHJlc3VsdCBk
dWUgdG8gdHdvIGNoYW5nZXM6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcHJlbXVsdGlwbHlhbHBoYS10ZXN0LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kNDRhNTRjOTQ4ZDc4MmQ3MTg4MGM3OTI0YTFjOWM1NzhhNTMwZWU1Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcHJlbXVsdGlwbHlhbHBoYS10
ZXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM3IEBACitUZXN0IHRoZSBXZWJHTCBwcmVtdWx0
aXBsZWRBbHBoYSBjb250ZXh0IGNyZWF0aW9uIGZsYWcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCit0ZXN0aW5nOiBwcmVtdWx0aXBsaWVkQWxwaGE6IHRydWUgdG9EYXRhVVJMOiB0
cnVlCitQQVNTIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGVkQWxwaGEgaXMg
cHJlbXVsdGlwbGVkQWxwaGEKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4KK1BBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBkcmF3
aW5nLgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxk
IGJlIG5vIGVycm9ycyBmcm9tIGNyZWF0aW5nIGNvcHkuCitQQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gMm5kIGRyYXdp
bmcuCitQQVNTIHNob3VsZCBkcmF3IHdpdGggNjQsMTI4LDI1NSwxMjgKKwordGVzdGluZzogcHJl
bXVsdGlwbGllZEFscGhhOiB0cnVlIHRvRGF0YVVSTDogZmFsc2UKK1BBU1MgZ2wuZ2V0Q29udGV4
dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsZWRBbHBoYSBpcyBwcmVtdWx0aXBsZWRBbHBoYQorUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVy
cm9ycyBmcm9tIHNldHVwLgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIGRyYXdpbmcuCitQQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gY3Jl
YXRpbmcgY29weS4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSAybmQgZHJhd2luZy4KK1BBU1Mgc2hvdWxkIGRyYXcg
d2l0aCA2NCwxMjgsMjU1LDEyOAorCit0ZXN0aW5nOiBwcmVtdWx0aXBsaWVkQWxwaGE6IGZhbHNl
IHRvRGF0YVVSTDogdHJ1ZQorUEFTUyBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRp
cGxlZEFscGhhIGlzIHByZW11bHRpcGxlZEFscGhhCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAuCitQQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJy
b3JzIGZyb20gZHJhd2luZy4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBjcmVhdGluZyBjb3B5LgorUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBm
cm9tIDJuZCBkcmF3aW5nLgorUEFTUyBzaG91bGQgZHJhdyB3aXRoIDI1NSwxOTIsMTI4LDEKKwor
dGVzdGluZzogcHJlbXVsdGlwbGllZEFscGhhOiBmYWxzZSB0b0RhdGFVUkw6IGZhbHNlCitQQVNT
IGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGVkQWxwaGEgaXMgcHJlbXVsdGlw
bGVkQWxwaGEKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNo
b3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBkcmF3aW5nLgorUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVy
cm9ycyBmcm9tIGNyZWF0aW5nIGNvcHkuCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gMm5kIGRyYXdpbmcuCitQQVNT
IHNob3VsZCBkcmF3IHdpdGggMjU1LDE5MiwxMjgsMQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3ByZW11bHRpcGx5YWxwaGEtdGVzdC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY3N2EzNzBiOGU4NjY2Njc3MTllOTZiNzg2Y2RkYTM1Nzk4YjE0MjIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRl
c3QuaHRtbApAQCAtMCwwICsxLDE0NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0Mv
L0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RS
L2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgdGhlIFdlYkdM
IHByZW11bHRpcGxlZEFscGhhIGNvbnRleHQgY3JlYXRpb24gZmxhZy48L3RpdGxlPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj4gPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMiPiA8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PjxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKKwordmFy
IHRlc3RzID0gWworICAvLyBJZiBwcmVtdWx0aXBsZWRBbHBoYSBpcyB0cnVlIHRoZW4KKyAgLy8g
W3RleHR1cmVdICAgICAgICAgICBbY2FudmFzXSAgICAgICAgICAgICBbZGF0YVVSTF0KKyAgLy8g
MzIsIDY0LCAxMjgsIDEyOCAtPiA2NCwgMTI4LCAyNTUsIDEyOCAtPiA2NCwgMTI4LCAyNTUsIDEy
OAorICB7IGNyZWF0aW9uQXR0cmlidXRlczoge30sCisgICAgc2VudENvbG9yOiBbMzIsIDY0LCAx
MjgsIDEyOF0sCisgICAgZXhwZWN0ZWRDb2xvcjogWzY0LCAxMjgsIDI1NSwgMTI4XSwKKyAgICBl
cnJvclJhbmdlOiAyLAorICAgIHVzZVRvRGF0YVVSTDogdHJ1ZSwKKyAgfSwKKyAgLy8gSWYgcHJl
bXVsdGlwbGVkQWxwaGEgaXMgdHJ1ZSB0aGVuCisgIC8vIFt0ZXh0dXJlXSAgICAgICAgICAgW2Nh
bnZhc10gICAgICAgICAgICAgW3RleHR1cmVdCisgIC8vIDMyLCA2NCwgMTI4LCAxMjggLT4gNjQs
IDEyOCwgMjU1LCAxMjggLT4gNjQsIDEyOCwgMjU1LCAxMjgKKyAgeyBjcmVhdGlvbkF0dHJpYnV0
ZXM6IHt9LAorICAgIHNlbnRDb2xvcjogWzMyLCA2NCwgMTI4LCAxMjhdLAorICAgIGV4cGVjdGVk
Q29sb3I6IFs2NCwgMTI4LCAyNTUsIDEyOF0sCisgICAgZXJyb3JSYW5nZTogMiwKKyAgICB1c2VU
b0RhdGFVUkw6IGZhbHNlLAorICB9LAorICAvLyBJZiBwcmVtdWx0aXBsZWRBbHBoYSBpcyBmYWxz
ZSB0aGVuCisgIC8vIFt0ZXh0dXJlXSAgICAgICAgICAgW2NhbnZhc10gICAgICAgICAgICBbZGF0
YVVSTF0KKyAgLy8gMjU1LCAxOTIsIDEyOCwgMSAtPiAyNTUsIDE5MiwgMTI4LCAxIC0+IDI1NSwg
MTkyLCAxMjgsIDEKKyAgeyBjcmVhdGlvbkF0dHJpYnV0ZXM6IHtwcmVtdWx0aXBsaWVkQWxwaGE6
IGZhbHNlfSwKKyAgICBzZW50Q29sb3I6IFsyNTUsIDE5MiwgMTI4LCAxXSwKKyAgICBleHBlY3Rl
ZENvbG9yOiBbMjU1LCAxOTIsIDEyOCwgMV0sCisgICAgZXJyb3JSYW5nZTogMCwKKyAgICB1c2VU
b0RhdGFVUkw6IHRydWUsCisgIH0sCisgIC8vIElmIHByZW11bHRpcGxlZEFscGhhIGlzIGZhbHNl
IHRoZW4KKyAgLy8gW3RleHR1cmVdICAgICAgICAgICBbY2FudmFzXSAgICAgICAgICAgIFt0ZXh0
dXJlXQorICAvLyAyNTUsIDE5MiwgMTI4LCAxIC0+IDI1NSwgMTkyLCAxMjgsIDEgLT4gMjU1LCAx
OTIsIDEyOCwgMQorICB7IGNyZWF0aW9uQXR0cmlidXRlczoge3ByZW11bHRpcGxpZWRBbHBoYTog
ZmFsc2V9LAorICAgIHNlbnRDb2xvcjogWzI1NSwgMTkyLCAxMjgsIDFdLAorICAgIGV4cGVjdGVk
Q29sb3I6IFsyNTUsIDE5MiwgMTI4LCAxXSwKKyAgICBlcnJvclJhbmdlOiAwLAorICAgIHVzZVRv
RGF0YVVSTDogZmFsc2UsCisgIH0KK107CisKK3ZhciBnX2NvdW50ID0gMDsKK3ZhciBnbDsKK3Zh
ciBjYW52YXM7Cit2YXIgcHJlbXVsdGlwbGVkQWxwaGE7CisKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0
V2ViR0xFbmFibGVkIiwgIjEiKTsKK30KKworZGVzY3JpcHRpb24oIlRlc3QgdGhlIFdlYkdMIHBy
ZW11bHRpcGxlZEFscGhhIGNvbnRleHQgY3JlYXRpb24gZmxhZy4iKTsKK2RvTmV4dFRlc3QoKTsK
K2Z1bmN0aW9uIGRvTmV4dFRlc3QoKSB7CisgIGlmIChnX2NvdW50IDwgdGVzdHMubGVuZ3RoKSB7
CisgICAgIHZhciB0ZXN0ID0gdGVzdHNbZ19jb3VudCsrXTsKKyAgICAgY2FudmFzID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgIGdsID0gd3R1LmNyZWF0ZTNEQ29udGV4
dChjYW52YXMsIHRlc3QuY3JlYXRpb25BdHRyaWJ1dGVzKTsKKyAgICAgdmFyIHByZW11bHRpcGxp
ZWRBbHBoYSA9IHRlc3QuY3JlYXRpb25BdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSAhPSBm
YWxzZTsKKyAgICAgZGVidWcoIiIpCisgICAgIGRlYnVnKCJ0ZXN0aW5nOiBwcmVtdWx0aXBsaWVk
QWxwaGE6ICIgKyBwcmVtdWx0aXBsaWVkQWxwaGEgKyAiIHRvRGF0YVVSTDogIiArIHRlc3QudXNl
VG9EYXRhVVJMKTsKKworICAgICBzaG91bGRCZSgnZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5w
cmVtdWx0aXBsZWRBbHBoYScsICdwcmVtdWx0aXBsZWRBbHBoYScpOworCisgICAgIHZhciBwcm9n
cmFtID0gd3R1LnNldHVwVGV4dHVyZWRRdWFkKGdsKTsKKworICAgICBnbEVycm9yU2hvdWxkQmUo
Z2wsIGdsLk5PX0VSUk9SLCAiU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIHNldHVwLiIpOworICAg
ICB2YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgICB3dHUuZmlsbFRleHR1cmUoZ2ws
IHRleCwgMiwgMiwgdGVzdC5zZW50Q29sb3IsIDApOworICAgICB2YXIgbG9jID0gZ2wuZ2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW0sICJ0ZXgiKTsKKyAgICAgZ2wudW5pZm9ybTFpKGxvYywgMCk7
CisgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklM
VEVSLCBnbC5MSU5FQVIpOworICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGds
LlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTsKKyAgICAgZ2wudGV4UGFyYW1ldGVyaShn
bC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7CisgICAg
IGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNM
QU1QX1RPX0VER0UpOworCisgICAgIHd0dS5kcmF3UXVhZChnbCk7CisgICAgIGdsRXJyb3JTaG91
bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gZHJhd2luZy4i
KTsKKworICAgICBmdW5jdGlvbiBsb2FkVGV4dHVyZSgpIHsKKyAgICAgICB2YXIgcG5nVGV4ID0g
Z2wuY3JlYXRlVGV4dHVyZSgpOworICAgICAgIC8vIG5vdCBuZWVkZWQgYXMgaXQncyB0aGUgZGVm
YXVsdAorICAgICAgIC8vIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBI
QV9XRUJHTCwgZmFsc2UpOworICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19DT0xPUlNQ
QUNFX0NPTlZFUlNJT05fV0VCR0wsIGZhbHNlKTsKKyAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5U
RVhUVVJFXzJELCBwbmdUZXgpOworICAgICAgIGlmICh0ZXN0LnVzZVRvRGF0YVVSTCkgeworICAg
ICAgICAgIC8vIGNyZWF0ZSB0ZXh0dXJlIGZyb20gaW1hZ2UKKyAgICAgICAgICBnbC50ZXhJbWFn
ZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUs
IHRoaXMpOworICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8gY3JlYXRlIHRleHR1cmUgZnJv
bSBjYW52YXMKKyAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJH
QkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGNhbnZhcyk7CisgICAgICAgfQorICAgICAg
IGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBn
bC5MSU5FQVIpOworICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVY
VFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpOworICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wu
VEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpOworICAgICAg
IGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNM
QU1QX1RPX0VER0UpOworICAgICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJT
aG91bGQgYmUgbm8gZXJyb3JzIGZyb20gY3JlYXRpbmcgY29weS4iKTsKKyAgICAgICB3dHUuZHJh
d1F1YWQoZ2wpOworICAgICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91
bGQgYmUgbm8gZXJyb3JzIGZyb20gMm5kIGRyYXdpbmcuIik7CisgICAgICAgd3R1LmNoZWNrQ2Fu
dmFzKAorICAgICAgICAgIGdsLCB0ZXN0LmV4cGVjdGVkQ29sb3IsCisgICAgICAgICAgInNob3Vs
ZCBkcmF3IHdpdGggIiArIHRlc3QuZXhwZWN0ZWRDb2xvciwgdGVzdC5lcnJvclJhbmdlKTsKKwor
ICAgICAgIGRvTmV4dFRlc3QoKTsKKyAgICAgfQorCisgICAgIGlmICh0ZXN0LnVzZVRvRGF0YVVS
TCkgeworICAgICAgICAvLyBMb2FkIGNhbnZhcyBpbnRvIHN0cmluZyB1c2luZyB0b0RhdGFVUkwK
KyAgICAgICAgdmFyIHBuZyA9IGNhbnZhcy50b0RhdGFVUkwoKTsKKyAgICAgICAgLy8gTG9hZCBz
dHJpbmcgaW50byB0aGUgdGV4dHVyZQorICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbWciKTsKKyAgICAgICAgaW5wdXQub25sb2FkID0gbG9hZFRleHR1cmU7Cisg
ICAgICAgIGlucHV0LnNyYyA9IHBuZzsKKyAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTG9hZCBj
YW52YXMgaW50byB0aGUgdGV4dHVyZSBhc3luY2hyb25vdXNseSAodG8gcHJldmVudCB1bmJvdW5k
ZWQgc3RhY2sgY29uc3VtcHRpb24pCisgICAgICAgIHNldFRpbWVvdXQobG9hZFRleHR1cmUsIDAp
OworICAgICB9CisgICB9IGVsc2UgeworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
KyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICBmaW5pc2hUZXN0KCk7CisgICB9Cit9
CisKKzwvc2NyaXB0PgorCis8c2NyaXB0PgorPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4K
KworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMv
d2ViZ2wtdGVzdC11dGlscy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291
cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCmluZGV4IGYzZTUyMGZhY2ZmYjMyNmM4ZTliOWQ0NWQz
ZGJiMTIxODMzMzIwMTEuLmRjZTUwOWFjNTk0MjA0ZjhlZjBkYmI3NmFkY2VmN2YwMTBjMDI3Mzkg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJn
bC10ZXN0LXV0aWxzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291
cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCkBAIC0xMDYsNyArMTA2LDcgQEAgdmFyIHNpbXBsZVRl
eHR1cmVGcmFnbWVudFNoYWRlciA9ICcnICsKICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHRleDtcbicg
KwogICAndmFyeWluZyB2ZWMyIHRleENvb3JkO1xuJyArCiAgICd2b2lkIG1haW4oKSB7XG4nICsK
LSAgJyAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4LCB0ZXhDb29yZCk7XG4nICsKKyAg
JyAgICBnbF9GcmFnRGF0YVswXSA9IHRleHR1cmUyRCh0ZXgsIHRleENvb3JkKTtcbicgKwogICAn
fVxuJzsKIAogLyoqCkBAIC0yNjIsMTYgKzI2MiwyMSBAQCB2YXIgc2V0dXBUZXh0dXJlZFF1YWQg
PSBmdW5jdGlvbigKICAqLwogdmFyIGZpbGxUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHRleCwgd2lk
dGgsIGhlaWdodCwgY29sb3IsIG9wdF9sZXZlbCkgewogICBvcHRfbGV2ZWwgPSBvcHRfbGV2ZWwg
fHwgMDsKLSAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwot
ICBjYW52YXMud2lkdGggPSB3aWR0aDsKLSAgY2FudmFzLmhlaWdodCA9IGhlaWdodDsKLSAgdmFy
IGN0eDJkID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7Ci0gIGN0eDJkLmZpbGxTdHlsZSA9ICJy
Z2JhKCIgKyBjb2xvclswXSArICIsIiArIGNvbG9yWzFdICsgIiwiICsgY29sb3JbMl0gKyAiLCIg
KyBjb2xvclszXSArICIpIjsKLSAgY3R4MmQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7
CisgIHZhciBudW1QaXhlbHMgPSB3aWR0aCAqIGhlaWdodDsKKyAgdmFyIHNpemUgPSBudW1QaXhl
bHMgKiA0OworICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7CisgIGZvciAodmFyIGlp
ID0gMDsgaWkgPCBudW1QaXhlbHM7ICsraWkpIHsKKyAgICB2YXIgb2ZmID0gaWkgKiA0OworICAg
IGJ1ZltvZmYgKyAwXSA9IGNvbG9yWzBdOworICAgIGJ1ZltvZmYgKyAxXSA9IGNvbG9yWzFdOwor
ICAgIGJ1ZltvZmYgKyAyXSA9IGNvbG9yWzJdOworICAgIGJ1ZltvZmYgKyAzXSA9IGNvbG9yWzNd
OworICB9CiAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7CiAgIGdsLnRleElt
YWdlMkQoCi0gICAgICBnbC5URVhUVVJFXzJELCBvcHRfbGV2ZWwsIGdsLlJHQkEsIGdsLlJHQkEs
IGdsLlVOU0lHTkVEX0JZVEUsIGNhbnZhcyk7Ci19OworICAgICAgZ2wuVEVYVFVSRV8yRCwgb3B0
X2xldmVsLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLAorICAgICAgZ2wuUkdCQSwgZ2wuVU5T
SUdORURfQllURSwgYnVmKTsKKyAgfTsKIAogLyoqCiAgKiBDcmVhdGVzIGEgdGV4dHVyZXMgYW5k
IGZpbGxzIGl0IHdpdGggYSBzb2xpZCBjb2xvcgpAQCAtMzE2LDE0ICszMjEsMTcgQEAgdmFyIGRy
YXdRdWFkID0gZnVuY3Rpb24oZ2wsIG9wdF9jb2xvcikgewogICogQHBhcmFtIHshQXJyYXkuPG51
bWJlcj59IGNvbG9yIFRoZSBjb2xvciB0byBmaWxsIGNsZWFyIHdpdGggYmVmb3JlIGRyYXdpbmcu
IEEKICAqICAgICAgICA0IGVsZW1lbnQgYXJyYXkgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRo
ZSByYW5nZSAwIHRvIDI1NS4KICAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgTWVzc2FnZSB0byBhc3Nv
Y2lhdGUgd2l0aCBzdWNjZXNzLiBFZyAoInNob3VsZCBiZSByZWQiKS4KKyAqIEBwYXJhbSB7bnVt
YmVyfSBlcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRhYmxlIGVycm9yIGluCisgKiAgICAgICAg
Y29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KICAqLwotdmFyIGNoZWNrQ2FudmFzUmVjdCA9
IGZ1bmN0aW9uKGdsLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgbXNnKSB7Cit2YXIgY2hl
Y2tDYW52YXNSZWN0ID0gZnVuY3Rpb24oZ2wsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBt
c2csIGVycm9yUmFuZ2UpIHsKKyAgZXJyb3JSYW5nZSA9IGVycm9yUmFuZ2UgfHwgMDsKICAgdmFy
IGJ1ZiA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CiAgIGdsLnJlYWRQaXhl
bHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsK
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aCAqIGhlaWdodDsgKytpKSB7CiAgICAgdmFyIG9m
ZnNldCA9IGkgKiA0OwogICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sb3IubGVuZ3RoOyArK2op
IHsKLSAgICAgIGlmIChidWZbb2Zmc2V0ICsgal0gIT0gY29sb3Jbal0pIHsKKyAgICAgIGlmIChN
YXRoLmFicyhidWZbb2Zmc2V0ICsgal0gLSBjb2xvcltqXSkgPiBlcnJvclJhbmdlKSB7CiAgICAg
ICAgIHRlc3RGYWlsZWQobXNnKTsKICAgICAgICAgdmFyIHdhcyA9IGJ1ZltvZmZzZXQgKyAwXS50
b1N0cmluZygpOwogICAgICAgICBmb3IgKGogPSAxOyBqIDwgY29sb3IubGVuZ3RoOyArK2opIHsK
QEAgLTM0Myw5ICszNTEsMTEgQEAgdmFyIGNoZWNrQ2FudmFzUmVjdCA9IGZ1bmN0aW9uKGdsLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgbXNnKSB7CiAgKiBAcGFyYW0geyFBcnJheS48bnVt
YmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgY2xlYXIgd2l0aCBiZWZvcmUgZHJhd2luZy4g
QQogICogICAgICAgIDQgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhl
IHJhbmdlIDAgdG8gMjU1LgogICogQHBhcmFtIHtzdHJpbmd9IG1zZyBNZXNzYWdlIHRvIGFzc29j
aWF0ZSB3aXRoIHN1Y2Nlc3MuIEVnICgic2hvdWxkIGJlIHJlZCIpLgorICogQHBhcmFtIHtudW1i
ZXJ9IGVycm9yUmFuZ2UgT3B0aW9uYWwuIEFjY2VwdGFibGUgZXJyb3IgaW4KKyAqICAgICAgICBj
b2xvciBjaGVja2luZy4gMCBieSBkZWZhdWx0LgogICovCi12YXIgY2hlY2tDYW52YXMgPSBmdW5j
dGlvbihnbCwgY29sb3IsIG1zZykgewotICBjaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIGdsLmNh
bnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCwgY29sb3IsIG1zZyk7Cit2YXIgY2hlY2tDYW52
YXMgPSBmdW5jdGlvbihnbCwgY29sb3IsIG1zZywgZXJyb3JSYW5nZSkgeworICBjaGVja0NhbnZh
c1JlY3QoZ2wsIDAsIDAsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCwgY29sb3Is
IG1zZywgZXJyb3JSYW5nZSk7CiB9OwogCiAvKioKQEAgLTM3OCwyMCArMzg4LDE1IEBAIHZhciBs
b2FkVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB1cmwsIGNhbGxiYWNrKSB7CiAgKiAgICAgcGFzc2Vk
IGluIG9uZSB3aWxsIGJlIGNyZWF0ZWQuCiAgKiBAcmV0dXJuIHshV2ViR0xDb250ZXh0fSBUaGUg
Y3JlYXRlZCBjb250ZXh0LgogICovCi12YXIgY3JlYXRlM0RDb250ZXh0ID0gZnVuY3Rpb24ob3B0
X2NhbnZhcykgewordmFyIGNyZWF0ZTNEQ29udGV4dCA9IGZ1bmN0aW9uKG9wdF9jYW52YXMsIG9w
dF9hdHRyaWJ1dGVzKSB7CiAgIG9wdF9jYW52YXMgPSBvcHRfY2FudmFzIHx8IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICB2YXIgY29udGV4dCA9IG51bGw7CiAgIHRyeSB7Ci0g
ICAgY29udGV4dCA9IG9wdF9jYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7
CisgICAgY29udGV4dCA9IG9wdF9jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wiLCBvcHRfYXR0cmli
dXRlcyk7CiAgIH0gY2F0Y2goZSkge30KICAgaWYgKCFjb250ZXh0KSB7CiAgICAgdHJ5IHsKLSAg
ICAgIGNvbnRleHQgPSBvcHRfY2FudmFzLmdldENvbnRleHQoIndlYmtpdC0zZCIpOwotICAgIH0g
Y2F0Y2goZSkge30KLSAgfQotICBpZiAoIWNvbnRleHQpIHsKLSAgICB0cnkgewotICAgICAgY29u
dGV4dCA9IG9wdF9jYW52YXMuZ2V0Q29udGV4dCgibW96LXdlYmdsIik7CisgICAgICBjb250ZXh0
ID0gb3B0X2NhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLCBvcHRfYXR0cmli
dXRlcyk7CiAgICAgfSBjYXRjaChlKSB7fQogICB9CiAgIGlmICghY29udGV4dCkgewpAQCAtNTY4
LDcgKzU3Myw3IEBAIHZhciBzZXR1cFdlYkdMV2l0aFNoYWRlcnMgPSBmdW5jdGlvbigKIAogICAv
LyBCaW5kIGF0dHJpYnV0ZXMKICAgZm9yICh2YXIgaSBpbiBhdHRyaWJzKSB7Ci0gICAgZ2wuYmlu
ZEF0dHJpYkxvY2F0aW9uIChwcm9ncmFtLCBwYXJzZUludChpKSwgYXR0cmlic1tpXSk7CisgICAg
Z2wuYmluZEF0dHJpYkxvY2F0aW9uIChwcm9ncmFtLCBpLCBhdHRyaWJzW2ldKTsKICAgfQogCiAg
IGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtKTsKQEAgLTYxNyw4ICs2MjIsMTkgQEAgdmFyIHJlYWRG
aWxlTGlzdCA9IGZ1bmN0aW9uKHVybCkgewogICAgICAgICAgIHN0clswXSAhPSAnIycgJiYKICAg
ICAgICAgICBzdHJbMF0gIT0gIjsiICYmCiAgICAgICAgICAgc3RyLnN1YnN0cigwLCAyKSAhPSAi
Ly8iKSB7Ci0gICAgICAgIG5ld191cmwgPSBwcmVmaXggKyBzdHI7Ci0gICAgICAgIGZpbGVzID0g
ZmlsZXMuY29uY2F0KHJlYWRGaWxlTGlzdChuZXdfdXJsKSk7CisgICAgICAgIHZhciBuYW1lcyA9
IHN0ci5zcGxpdCgvICsvKTsKKyAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PSAxKSB7CisgICAg
ICAgICAgbmV3X3VybCA9IHByZWZpeCArIHN0cjsKKyAgICAgICAgICBmaWxlcyA9IGZpbGVzLmNv
bmNhdChyZWFkRmlsZUxpc3QobmV3X3VybCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IHZhciBzID0gIiI7CisgICAgICAgICAgdmFyIHAgPSAiIjsKKyAgICAgICAgICBmb3IgKHZhciBq
aiA9IDA7IGpqIDwgbmFtZXMubGVuZ3RoOyArK2pqKSB7CisgICAgICAgICAgICBzICs9IHAgKyBw
cmVmaXggKyBuYW1lc1tqal07CisgICAgICAgICAgICBwID0gIiAiOworICAgICAgICAgIH0KKyAg
ICAgICAgICBmaWxlcy5wdXNoKHMpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9IGVs
c2UgewpAQCAtNjQ0LDYgKzY2MCwxMSBAQCB2YXIgbG9hZFNoYWRlciA9IGZ1bmN0aW9uKGdsLCBz
aGFkZXJTb3VyY2UsIHNoYWRlclR5cGUpIHsKIAogICAvLyBMb2FkIHRoZSBzaGFkZXIgc291cmNl
CiAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNoYWRlclNvdXJjZSk7CisgIHZhciBlcnIgPSBn
bC5nZXRFcnJvcigpOworICBpZiAoZXJyICE9IGdsLk5PX0VSUk9SKSB7CisgICAgZXJyb3IoIioq
KiBFcnJvciBsb2FkaW5nIHNoYWRlciAnIiArIHNoYWRlciArICInOiIgKyBnbEVudW1Ub1N0cmlu
ZyhnbCwgZXJyKSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0KIAogICAvLyBDb21waWxlIHRoZSBz
aGFkZXIKICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IGFiYWVhYzM5ZmZj
MjRmOGU3MWY3MTA1ODc5NzkwYzZiOWNhNDRlODYuLjU1YjQwNWI3MTQzZDA1YTcyMmFjNTdkMzhj
MjFmYTM2NmI5ZDEwY2QgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTIzNTcsNiArMjM1Nyw4IEBAIEJVR1dFQkdMIE1B
QyBMSU5VWCA6IGZhc3QvY2FudmFzL3dlYmdsL2dsc2wtY29uZm9ybWFuY2UuaHRtbCA9IENSQVNI
CiBCVUdXRUJHTCBHUFUgV0lOIERFQlVHIFNMT1cgOiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0
LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbCA9IFBBU1MKIEJV
R1dFQkdMIEdQVSBXSU4gREVCVUcgU0xPVyA6IGZhc3QvY2FudmFzL3dlYmdsL2luZGV4LXZhbGlk
YXRpb24td2l0aC1yZXNpemVkLWJ1ZmZlci5odG1sID0gUEFTUwogCitCVUdXSzU2NDE0IDogZmFz
dC9jYW52YXMvd2ViZ2wvcHJlbXVsdGlwbHlhbHBoYS10ZXN0Lmh0bWwgPSBURVhUCisKIC8vIFRo
ZXNlIHdlcmUgbm90IGZpeGVkIGJ5IHRoZSBNZXNhIDcuOSB1cGdyYWRlLiBOZWVkIHRvIGludmVz
dGlnYXRlLgogQlVHQ1I2MDY1MSBXSU4gOiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1vYmplY3QtZ2V0
LWNhbGxzLmh0bWwgPSBUSU1FT1VUIFBBU1MgVEVYVAogLy8gQlVHQ1I2MDY1MSBXSU4gOiBmYXN0
L2NhbnZhcy93ZWJnbC9nbHNsLWNvbmZvcm1hbmNlLmh0bWwgPSBUSU1FT1VUIEZBSUwKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvU2tpcHBlZCBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy13azIvU2tpcHBlZAppbmRleCA0MjU3MDBjYzZmMWM0MWYxN2EwNGRmYmNm
NzBmY2IzNzVjNzEwZDg1Li4yZjQ4OTViODJmNmVhMzEyMzA0NWIxZGU2MzZjYjU4NDBiYmVmNzFk
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9Ta2lwcGVkCkBAIC0xMDgxLDYgKzEwODEsNyBA
QCBmYXN0L2NhbnZhcy93ZWJnbC9udWxsLW9iamVjdC1iZWhhdmlvdXIuaHRtbAogZmFzdC9jYW52
YXMvd2ViZ2wvbnVsbC11bmlmb3JtLWxvY2F0aW9uLmh0bWwKIGZhc3QvY2FudmFzL3dlYmdsL29i
amVjdC1kZWxldGlvbi1iZWhhdmlvdXIuaHRtbAogZmFzdC9jYW52YXMvd2ViZ2wvcG9pbnQtc2l6
ZS5odG1sCitmYXN0L2NhbnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QuaHRtbAogZmFz
dC9jYW52YXMvd2ViZ2wvcHJvZ3JhbS10ZXN0Lmh0bWwKIGZhc3QvY2FudmFzL3dlYmdsL3JlYWQt
cGl4ZWxzLXBhY2stYWxpZ25tZW50Lmh0bWwKIGZhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxz
LXRlc3QuaHRtbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwY2IwOWU2NzM5ZmZhYjg1ZmNkZDM5YzgwNzU2MGJm
Mjk0ZTdmZjYuLmM4YTJmMGRmM2RmODBjNTMwMzY0ZmFhMmRkMTgwOWNlYjY1ZWE5ZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAxMS0wMy0xNCAgSm9obiBCYXVtYW4gIDxqYmF1bWFu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOb24tcHJlbXVsdGlwbGllZC1hbHBoYSBjYW52YXMgYXR0cmlidXRlIGlzIGlnbm9y
ZSBmb3IgdG9EYXRhVVJMLCBkcmF3SW1hZ2UsIHRleEltYWdlMkQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjM4CisKKyAgICAgICBBdHRlbXB0IHRv
IGdldCBhbiBJbWFnZURhdGEgKG5vbi1wcmVtdWx0aXBsaWVkKSBmcm9tIGEgV2ViR0wgY2FudmFz
CisgICAgICAgaW5zdGVhZCBvZiBnZXR0aW5nIGFuIEltYWdlQnVmZmVyLCBzbyB0aGVyZSdzIGEg
Y2hhbmNlIHRoZSBkYXRhIGNhbiBiZQorICAgICAgIHBhc3NlZCBzdHJhaWdodCB0aHJvdWdoIHRv
IHRoZSBjb25zdW1lciB3aXRoIG5vIHByZW11bHRpcGxpY2F0aW9uCisgICAgICAgbmVjZXNzYXJ5
LiBGaXhlcyBDaHJvbWl1bSBhbmQgU2FmYXJpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFz
L3dlYmdsL3ByZW11bHRpcGx5YWxwaGEtdGVzdC5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojp0
b0RhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldEltYWdl
RGF0YSk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNHSW1hZ2VUb0RhdGFVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURhdGFUb0RhdGFVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUb0Rh
dGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURhdGFUb0RhdGFVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwcmVNdWx0aXBsaWVkQkdSQXRvUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkF0b1JHQik6
CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SlBF
R0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVy
cy9za2lhL0pQRUdJbWFnZUVuY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNv
ZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVNdWx0
aXBsaWVkQkdSQXRvUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmg6CisKIDIwMTEtMDMtMTEg
IENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDAwNjdkMjZm
ZDBiMjdjMjBiMjNiYTAzM2Q1N2NmMDdiMTY1Mjk2ODYuLjdkMDhhNWRiMDkxOTliOTUxMTdiZGU0
MGQwNDg4ZjY5NThmOTFiZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKQEAgLTMzNywxNSArMzM4LDM3
IEBAIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0CiAKICAgICBTdHJpbmcgbG93ZXJjYXNlTWltZVR5
cGUgPSBtaW1lVHlwZS5sb3dlcigpOwogCi0gICAgbWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFi
bGUoKTsKLQogICAgIC8vIEZJWE1FOiBNYWtlIGlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nIHRocmVhZHNhZmUgKHRvIGFsbG93IHRoaXMgbWV0aG9kIHRvIGJlIHVzZWQgb24gYSB3
b3JrZXIgdGhyZWFkKS4KICAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkgfHwgIU1JTUVUeXBlUmVn
aXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKGxvd2VyY2FzZU1pbWVU
eXBlKSkKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwoImltYWdlL3BuZyIpOwor
ICAgICAgICBsb3dlcmNhc2VNaW1lVHlwZSA9ICJpbWFnZS9wbmciOworCisjaWYgUExBVEZPUk0o
Q0cpIHx8IFVTRShTS0lBKQorICAgIC8vIFRyeSB0byBnZXQgSW1hZ2VEYXRhIGZpcnN0LCBhcyB0
aGF0IG1heSBhdm9pZCBsb3NzeSBjb252ZXJzaW9ucy4KKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBp
bWFnZURhdGEgPSBnZXRJbWFnZURhdGEoKTsKKworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAg
IHJldHVybiBJbWFnZURhdGFUb0RhdGFVUkwoKmltYWdlRGF0YSwgbG93ZXJjYXNlTWltZVR5cGUs
IHF1YWxpdHkpOworI2VuZGlmCiAKKyAgICBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgp
OworICAgICAgCiAgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwobG93ZXJjYXNlTWltZVR5
cGUsIHF1YWxpdHkpOwogfQogCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gSFRNTENhbnZhc0VsZW1l
bnQ6OmdldEltYWdlRGF0YSgpCit7CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4dC0+
aXMzZCgpKQorICAgICAgIHJldHVybiAwOworCisjaWYgRU5BQkxFKFdFQkdMKSAgICAKKyAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCo+KG1fY29udGV4dC5nZXQoKSk7CisKKyAgICByZXR1cm4gY3R4LT5wYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQor
CiBJbnRSZWN0IEhUTUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0
IEZsb2F0UmVjdCYgbG9naWNhbFJlY3QpIGNvbnN0CiB7CiAgICAgZmxvYXQgbGVmdCA9IGZsb29y
Zihsb2dpY2FsUmVjdC54KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggYTJhNjA2ZDRhZTY1NWQ5OTdmOTdiOWM5YjE2NjVj
NTIzNWIyYjczNC4uODcwNmM2YjExMjE1MDIxZTEyZGJjZWY3YWU5ZWQxMzVmNjQwYWM0OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtNDcsNiArNDcsNyBAQCBj
bGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xh
c3MgSFRNTENhbnZhc0VsZW1lbnQ7CiBjbGFzcyBJbWFnZTsKK2NsYXNzIEltYWdlRGF0YTsKIGNs
YXNzIEltYWdlQnVmZmVyOwogY2xhc3MgSW50U2l6ZTsKIApAQCAtMTA1LDYgKzEwNiw3IEBAIHB1
YmxpYzoKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgY29uc3Q7CiAgICAgSW1hZ2UqIGNvcGll
ZEltYWdlKCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCk7CisgICAgUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YSgpOwogCiAgICAgSW50UmVjdCBjb252ZXJ0TG9n
aWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIEludFNpemUgY29udmVy
dExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGNj
N2EyM2I0MDA2YWQ1ZTVjMmI5NDgzMjI0NzQzN2MxMTcxOThmODYuLmNiNDUxY2JhMzYzM2ZmY2E1
NmEzNDg5NDlmNDMwMjVlOTVmZDJkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtNDk1LDYgKzQ5NSwxMSBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
KQogICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7CiB9
CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworfQorCiBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
Y29udGV4dC0+cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpOwpAQCAtMzA2Miw4ICszMDY3LDEyIEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjaGVj
a09yaWdpbihjYW52YXMpOwotICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwKLSAgICAgICAg
ICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsK
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgp
OworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7CisgICAg
ZWxzZQorICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQog
CiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMzI1Miw4ICszMjYxLDEyIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2hlY2tPcmlnaW4oY2FudmFz
KTsKLSAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOworICAg
IGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKKyAgICBl
bHNlCisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVj
KTsKIH0KIAogI2lmIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggMTMxNDVjOGQxYTg4OTIxNmU2ZTIz
Y2ViYjIzNzQxN2UxNmE1NTQ1OC4uNmI4ODVkOTJlZDkxYjQ1YTRiNDNjNmUxYzVkZjEwYWI3Mzdm
MjVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgKQEAgLTI4Niw2ICsyODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogCiAgICAgdm9pZCByZW1vdmVPYmpl
Y3QoV2ViR0xPYmplY3QqKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGE5ZGI2NTBiMDA5NmM3MWIwMGJj
NTBhOWY1N2EwZDVkMjA3OTZhOTEuLjM5ZDgyNzQ3ODU1ODhkYzMwYzA5MWExZDhjZTJkYmQwMDUw
ZWFjMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaApAQCAtNzU3LDYgKzc1Nyw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAg
ICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0KTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEoKTsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIHZvaWQgcGFpbnQo
UVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiByZWN0KSBjb25zdDsKQEAgLTg1OSw2ICs4
NjAsMTAgQEAgcHVibGljOgogICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRo
ZSBjYXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTAogICAgIC8vIGltcGxlbWVudGF0aW9uLgogICAg
IHZvaWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAgICAvLyBSZWFkIHJlbmRlcmluZyByZXN1
bHRzIGludG8gYSBwaXhlbCBhcnJheSB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUKKyAgICAv
LyBiYWNrYnVmZmVyLgorICAgIHZvaWQgcmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hh
ciogcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSk7CiAjZW5kaWYKIAogICAgIGludCBtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggNDg4NzhkYTlmNTIwOWMzZDBhOWY5YjA1ZjIyY2ZlMTY0
MzU3ZjE4NS4uODYwZjU3NDc4YjM4MWE3YjVkYWM0MmEzOGQ0YTU0NGNjMzJlMTg5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xMzIs
NiArMTMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBib29sJiBzdWNjZXNzKTsKICAgICB9OwogCisjaWYgUExBVEZPUk0oQ0cpIHx8IFVT
RShTS0lBKQorICAgIFN0cmluZyBJbWFnZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBp
bnB1dCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KTsKKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBJbWFnZUJ1ZmZlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCmluZGV4IDdjOGUzMTMwNWZjOWYxYjMyMTVkMzJkZmQxOWQxMTFmZjYxNTkzMWQu
LjNjOGY5NTkwN2FhZmZlYzQxOWE0ZDRmZjYzODQ2Y2IyYmU3NTc5YmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlIDxB
cHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgpAQCAtNDk4LDIxICs0OTksOCBAQCBzdGF0aWMgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiB1dGlGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKICNlbmRpZgog
fQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0CitzdGF0aWMgU3RyaW5nIENHSW1hZ2VUb0Rh
dGFVUkwoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91
YmxlKiBxdWFsaXR5KQogewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKQotICAgICAg
ICBpbWFnZS5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCkpKTsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UuYWRvcHRDRih3a0lPU3VyZmFjZUNvbnRleHRDcmVh
dGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0jZW5kaWYKLQotICAgIGlm
ICghaW1hZ2UpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQogICAgIFJldGFpblB0cjxDRk11
dGFibGVEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgMCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwi
OwpAQCAtNTMzLDcgKzUyMSw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uCiAgICAgICAgIGlt
YWdlUHJvcGVydGllcy5hZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUs
IDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFs
dWVDYWxsQmFja3MpKTsKICAgICB9CiAKLSAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShk
ZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UuZ2V0KCksIGltYWdlUHJvcGVydGllcy5nZXQoKSk7Cisg
ICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBp
bWFnZVByb3BlcnRpZXMuZ2V0KCkpOwogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRl
c3RpbmF0aW9uLmdldCgpKTsKIAogICAgIFZlY3RvcjxjaGFyPiBvdXQ7CkBAIC01NDEsNCArNTI5
LDQ2IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uCiAKICAgICByZXR1cm4gbWFrZVN0cmluZygi
ZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgb3V0KTsKIH0KKworU3RyaW5nIEltYWdlQnVm
ZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFs
aXR5KSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisgICAgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IGltYWdlOworICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKQorICAgICAgICBp
bWFnZS5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZv
cm1Db250ZXh0KCkpKTsKKyNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQor
ICAgIGVsc2UKKyAgICAgICAgaW1hZ2UuYWRvcHRDRih3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJ
bWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7CisjZW5kaWYKKworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIHJldHVybiBDR0ltYWdlVG9E
YXRhVVJMKGltYWdlLmdldCgpLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK1N0cmluZyBJbWFn
ZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdp
c3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAg
ICAgICAgCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIFJldGFpblB0cjxD
R0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOworICAgIAorICAgIGRhdGFQcm92aWRlci5h
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgc291cmNlLmRhdGEoKS0+ZGF0
YSgpLT5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKKyAg
ICAKKyAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiOworCisg
ICAgaW1hZ2UuYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVp
Z2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpLCBrQ0dCaXRtYXBCeXRlT3Jk
ZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYUxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERl
ZmF1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAg
IGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIHJldHVybiBDR0lt
YWdlVG9EYXRhVVJMKGltYWdlLmdldCgpLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRl
eCBjMjI0ZTIwN2MzMTZiODBjNDc2YWEzYzQxZmM4MWQ2MDM2YzVhY2ViLi4yNTQ3YjUzNGZmMDY1
Y2RkZDUyZDc0ZGFhMmFhYjc5M2QzNjRiZGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50MzJBcnJheS5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVWludDhBcnJheS5oIgpAQCAtNzAs
MjEgKzcxLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygp
CiAgICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhc3RkOjpzdHJzdHIoZXh0ZW5zaW9ucywg
IkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKQogICAgICAgICAgICAgbV9hdHRycy5h
bnRpYWxpYXMgPSBmYWxzZTsKICAgICB9Ci0gICAgLy8gRklYTUU6IGluc3RlYWQgb2YgZW5mb3Jj
aW5nIHByZW11bHRpcGxpZWRBbHBoYSA9IHRydWUsIGltcGxlbWVudCB0aGUKLSAgICAvLyBjb3Jy
ZWN0IGJlaGF2aW9yIHdoZW4gcHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2UgaXMgcmVxdWVzdGVk
LgotICAgIG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJp
bmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpemUpCiB7Ci0gICAg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwotICAgIEltYWdl
QnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0KLSAgICBpbnQgcm93Qnl0
ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAq
IG1fY3VycmVudEhlaWdodDsKLQotICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVs
cyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOwotICAgIGlm
ICghcGl4ZWxzKQorICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBtX2N1cnJl
bnRIZWlnaHQgKiA0KQogICAgICAgICByZXR1cm47CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKQEAgLTExMSwxOCArMTAyLDYyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvCiAgICAgICAg
IG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CiAgICAgfQogCi0gICAgOjpnbFJlYWRQ
aXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQkdSQSwgR0xf
VU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMuZ2V0KCkpOworICAgIDo6Z2xSZWFkUGl4
ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX0JHUkEsIEdMX1VO
U0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKIAogICAgIGlmIChtdXN0UmVzdG9yZVBh
Y2tBbGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwg
cGFja0FsaWdubWVudCk7CiAKICAgICBpZiAobXVzdFJlc3RvcmVGQk8pCiAgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
ID0gY2FudmFzLT5idWZmZXIoKTsKKworICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRo
ICogNDsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0Owor
CisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJheVB0cihu
ZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7CisgICAgaWYgKCFwaXhlbHMpCisgICAgICAg
IHJldHVybjsKKworICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscy5nZXQoKSwgdG90YWxC
eXRlcyk7CisKKyAgICBpZiAoIW1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKSB7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7CisgICAgICAgICAgICAv
LyBQcmVtdWx0aXBseSBhbHBoYQorICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWlu
KDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAg
cGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsg
M10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4
ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICB9CisgICAgfQogCiAg
ICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQsCiAgICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0
KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAorUGFz
c1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YSgpCit7CisgICAgLy8gUmVhZGluZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdv
dWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hpY2ggaXMKKyAgICAvLyBsb3NzeQorICAg
IGlmIChtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXpl
KG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBw
aXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgaW50IHRvdGFs
Qnl0ZXMgPSA0ICogbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQ7CisKKyAgICByZWFk
UmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMsIHRvdGFsQnl0ZXMpOworCisgICAgLy8gQ29udmVydCB0
byBSR0JBCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAg
ICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworCisgICAgcmV0dXJuIGlt
YWdlRGF0YS5yZWxlYXNlKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlmICghbV9jb250ZXh0T2JqKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcAppbmRleCBiODQ5MjE0MDA2MWVjMTcxNDMwYzQxZmM2MjY0N2ZmMmU3ZmZj
ZTgxLi40MjQxYjAwZTZmN2MzYmIxM2QwNzMzYmU1NDNhNzIzMzJmMmZiOWZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcApAQCAtNTI1LDYgKzUyNSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBj
bwogICAgIHBhaW50KHBhaW50ZXIsIFFSZWN0KFFQb2ludCgwLCAwKSwgUVNpemUobV9jdXJyZW50
V2lkdGgsIG1fY3VycmVudEhlaWdodCkpKTsKIH0KIAorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7Cisg
ICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgZm9yIHByb3BlciBub24t
cHJlbXVsdGlwbGllZC1hbHBoYQorICAgIC8vIHN1cHBvcnQuCisgICAgcmV0dXJuIDA7Cit9CisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBR
UmVjdCYgcmVjdCkgY29uc3QKIHsKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0so
NCwgNywgMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAppbmRleCAyNzIxNTIzNmFmNTc0MTM4YWI0YTI1YTA4
OWFiYjZjMWVhZDVjZDdiLi5iODljNjhkMmNhZjJlNmU0ZGNiMjBlYjU3ODk1NTg3NDcxOWFkM2Rl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBAIC0zNDEsNiArMzQxLDI4IEBAIHZvaWQgSW1hZ2VCdWZm
ZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IElu
dFNpemUmIHNvCiAgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNl
U2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+Z2V0RGV2aWNlKCksIG1fc2l6ZSk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorc3RhdGljIFN0cmluZyBJbWFnZVRvRGF0YVVSTChUJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKK3sKKyAgICBWZWN0b3I8dW5zaWdu
ZWQgY2hhcj4gZW5jb2RlZEltYWdlOworICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvanBlZyIp
IHsKKyAgICAgICAgaW50IGNvbXByZXNzaW9uUXVhbGl0eSA9IEpQRUdJbWFnZUVuY29kZXI6OkRl
ZmF1bHRDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgIGlmIChxdWFsaXR5ICYmICpxdWFsaXR5
ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApCisgICAgICAgICAgICBjb21wcmVzc2lvblF1YWxp
dHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwICsgMC41KTsKKyAgICAgICAgaWYg
KCFKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUoc291cmNlLCBjb21wcmVzc2lvblF1YWxpdHksICZl
bmNvZGVkSW1hZ2UpKQorICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmICghUE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUoc291cmNlLCAmZW5jb2RlZElt
YWdlKSkKKyAgICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKKyAgICAgICAgQVNTRVJUKG1pbWVU
eXBlID09ICJpbWFnZS9wbmciKTsKKyAgICB9CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0
YTsKKyAgICBiYXNlNjRFbmNvZGUoKnJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4oJmVu
Y29kZWRJbWFnZSksIGJhc2U2NERhdGEpOworCisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6
IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NERhdGEpOworfQorCiBTdHJpbmcgSW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1
YWxpdHkpIGNvbnN0CiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CkBAIC0zNTgsMjMgKzM4MCwxMyBA
QCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBj
b25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbgogICAgICAgICBpZiAoIWRldmljZS0+cmVhZFBpeGVs
cyhib3VuZHMsICZiaXRtYXApKQogICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogICAgIH0K
LSAgICAKLSAgICBpZiAobWltZVR5cGUgPT0gImltYWdlL2pwZWciKSB7Ci0gICAgICAgIGludCBj
b21wcmVzc2lvblF1YWxpdHkgPSBKUEVHSW1hZ2VFbmNvZGVyOjpEZWZhdWx0Q29tcHJlc3Npb25R
dWFsaXR5OwotICAgICAgICBpZiAocXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxp
dHkgPD0gMS4wKQotICAgICAgICAgICAgY29tcHJlc3Npb25RdWFsaXR5ID0gc3RhdGljX2Nhc3Q8
aW50PigqcXVhbGl0eSAqIDEwMCArIDAuNSk7Ci0gICAgICAgIGlmICghSlBFR0ltYWdlRW5jb2Rl
cjo6ZW5jb2RlKGJpdG1hcCwgY29tcHJlc3Npb25RdWFsaXR5LCAmZW5jb2RlZEltYWdlKSkKLSAg
ICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIVBO
R0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGJpdG1hcCwgJmVuY29kZWRJbWFnZSkpCi0gICAgICAgICAg
ICByZXR1cm4gImRhdGE6LCI7Ci0gICAgICAgIEFTU0VSVChtaW1lVHlwZSA9PSAiaW1hZ2UvcG5n
Iik7Ci0gICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5j
b2RlKCpyZWludGVycHJldF9jYXN0PFZlY3RvcjxjaGFyPio+KCZlbmNvZGVkSW1hZ2UpLCBiYXNl
NjREYXRhKTsKKyAgICByZXR1cm4gSW1hZ2VUb0RhdGFVUkwoYml0bWFwLCBtaW1lVHlwZSwgcXVh
bGl0eSk7Cit9CiAKLSAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjti
YXNlNjQsIiwgYmFzZTY0RGF0YSk7CitTdHJpbmcgSW1hZ2VEYXRhVG9EYXRhVVJMKGNvbnN0IElt
YWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1
YWxpdHkpCit7CisgICAgcmV0dXJuIEltYWdlVG9EYXRhVVJMKHNvdXJjZSwgbWltZVR5cGUsIHF1
YWxpdHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VF
bmNvZGVyLmNwcAppbmRleCBiZTNjOTJhZjI0YzM1YzkyZGQxNGI3NWE0ODE3YWEyOWIyYjNiYjhi
Li41MDY0ZTM4MWZhNThjODJmY2M4MjM3OWZkYmZiNTdhYzJjOTM1Mjc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29k
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEv
SlBFR0ltYWdlRW5jb2Rlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJKUEVHSW1hZ2VFbmNvZGVyLmgiCiAKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKICNpbmNsdWRl
ICJTa0NvbG9yUHJpdi5oIgpAQCAtNzksMjIgKzgwLDI5IEBAIHN0YXRpYyB2b2lkIGhhbmRsZUVy
cm9yKGpfY29tbW9uX3B0ciBjb21tb24pCiAgICAgbG9uZ2ptcCgqanVtcEJ1ZmZlclB0ciwgLTEp
OwogfQogCi1zdGF0aWMgdm9pZCBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCKGNvbnN0IFNrUE1Db2xv
ciogaW5wdXQsIHVuc2lnbmVkIGludCBwaXhlbHMsIHVuc2lnbmVkIGNoYXIqIG91dHB1dCkKK3N0
YXRpYyB2b2lkIHByZU11bHRpcGxpZWRCR1JBdG9SR0IoY29uc3Qgdm9pZCogcGl4ZWxzLCB1bnNp
Z25lZCBpbnQgcGl4ZWxDb3VudCwgdW5zaWduZWQgY2hhciogb3V0cHV0KQogewotICAgIGZvciAo
OyBwaXhlbHMtLSA+IDA7ICsraW5wdXQpIHsKKyAgICBjb25zdCBTa1BNQ29sb3IqIGlucHV0ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU2tQTUNvbG9yKj4ocGl4ZWxzKTsKKyAgICBmb3IgKDsgcGl4ZWxD
b3VudC0tID4gMDsgKytpbnB1dCkgewogICAgICAgICAqb3V0cHV0KysgPSBTa0dldFBhY2tlZFIz
MigqaW5wdXQpOwogICAgICAgICAqb3V0cHV0KysgPSBTa0dldFBhY2tlZEczMigqaW5wdXQpOwog
ICAgICAgICAqb3V0cHV0KysgPSBTa0dldFBhY2tlZEIzMigqaW5wdXQpOwogICAgIH0KIH0KIAot
Ym9vbCBKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50
IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQorc3RhdGljIHZvaWQgUkdC
QXRvUkdCKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0LCB1bnNpZ25lZCBpbnQgcGl4ZWxzLCB1
bnNpZ25lZCBjaGFyKiBvdXRwdXQpCiB7Ci0gICAgaWYgKGJpdG1hcC5jb25maWcoKSAhPSBTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gT25seSBz
dXBwb3J0IEFSR0IgMzIgYnBwIHNraWEgYml0bWFwcy4KKyAgICBmb3IgKDsgcGl4ZWxzLS0gPiAw
OyBpbnB1dCArPSA0KSB7CisgICAgICAgICpvdXRwdXQrKyA9IGlucHV0WzBdOworICAgICAgICAq
b3V0cHV0KysgPSBpbnB1dFsxXTsKKyAgICAgICAgKm91dHB1dCsrID0gaW5wdXRbMl07CisgICAg
fQorfQogCi0gICAgU2tBdXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKGJpdG1hcCk7Ci0gICAgSW50
U2l6ZSBpbWFnZVNpemUoYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CitzdGF0aWMg
Ym9vbCBlbmNvZGVQaXhlbHMoY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplLCB1bnNpZ25lZCBjaGFy
KiBwaXhlbHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbGllZCwg
aW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQoreworICAgIEludFNp
emUgaW1hZ2VTaXplKGlucHV0U2l6ZSk7CiAgICAgaW1hZ2VTaXplLmNsYW1wTmVnYXRpdmVUb1pl
cm8oKTsKICAgICBKUEVHT3V0cHV0QnVmZmVyIGRlc3RpbmF0aW9uOwogICAgIGRlc3RpbmF0aW9u
Lm91dHB1dCA9IG91dHB1dDsKQEAgLTEyNiwxMiArMTM0LDE0IEBAIGJvb2wgSlBFR0ltYWdlRW5j
b2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGludCBxdWFsaXR5LCBWZWN0b3I8
dW5zaWduCiAgICAganBlZ19zZXRfcXVhbGl0eSgmY2luZm8sIHF1YWxpdHksIFRSVUUpOwogICAg
IGpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZvLCBUUlVFKTsKIAotICAgIGNvbnN0IFNrUE1Db2xv
ciogcGl4ZWxzID0gc3RhdGljX2Nhc3Q8U2tQTUNvbG9yKj4oYml0bWFwLmdldFBpeGVscygpKTsK
ICAgICByb3cucmVzaXplKGNpbmZvLmltYWdlX3dpZHRoICogY2luZm8uaW5wdXRfY29tcG9uZW50
cyk7CiAgICAgd2hpbGUgKGNpbmZvLm5leHRfc2NhbmxpbmUgPCBjaW5mby5pbWFnZV9oZWlnaHQp
IHsKLSAgICAgICAgcHJlTXVsdGlwbGllZEJHUkF0b1JHQihwaXhlbHMsIGNpbmZvLmltYWdlX3dp
ZHRoLCByb3cuZGF0YSgpKTsKKyAgICAgICAgaWYgKHByZW11bHRpcGxpZWQpCisgICAgICAgICAg
ICBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCKHBpeGVscywgY2luZm8uaW1hZ2Vfd2lkdGgsIHJvdy5k
YXRhKCkpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgUkdCQXRvUkdCKHBpeGVscywgY2lu
Zm8uaW1hZ2Vfd2lkdGgsIHJvdy5kYXRhKCkpOwogICAgICAgICBqcGVnX3dyaXRlX3NjYW5saW5l
cygmY2luZm8sIHJvdy5kYXRhU2xvdCgpLCAxKTsKLSAgICAgICAgcGl4ZWxzICs9IGNpbmZvLmlt
YWdlX3dpZHRoOworICAgICAgICBwaXhlbHMgKz0gY2luZm8uaW1hZ2Vfd2lkdGggKiA0OwogICAg
IH0KIAogICAgIGpwZWdfZmluaXNoX2NvbXByZXNzKCZjaW5mbyk7CkBAIC0xMzksNCArMTQ5LDIy
IEBAIGJvb2wgSlBFR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAs
IGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wg
SlBFR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGludCBxdWFs
aXR5LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKK3sKKyAgICBpZiAoYml0bWFwLmNv
bmZpZygpICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBPbmx5IHN1cHBvcnQgQVJHQiAzMiBicHAgc2tpYSBiaXRtYXBzLgorCisgICAgU2tB
dXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKGJpdG1hcCk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUo
Yml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CisKKyAgICByZXR1cm4gZW5jb2RlUGl4
ZWxzKGltYWdlU2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihiaXRtYXAuZ2V0UGl4
ZWxzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgcXVhbGl0eSwgb3V0cHV0KTsK
K30KKworYm9vbCBKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUoY29uc3QgSW1hZ2VEYXRhJiBpbWFn
ZURhdGEsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKK3sKKyAg
ICByZXR1cm4gZW5jb2RlUGl4ZWxzKGltYWdlRGF0YS5zaXplKCksIGltYWdlRGF0YS5kYXRhKCkt
PmRhdGEoKS0+ZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHF1YWxpdHks
IG91dHB1dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VF
bmNvZGVyLmgKaW5kZXggZjJhYzUyZDBlYWMyZjBjNTc5ZjAyYWNiYmE0MDlkOGRjNTU1MjQyZS4u
NTQwODA5MTQ2Y2QzNjgwMTNjOTQzMWE1N2M4YTAzM2U2Y2VlOTY4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VFbmNvZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEVH
SW1hZ2VFbmNvZGVyLmgKQEAgLTM3LDEwICszNywxMyBAQCBjbGFzcyBTa0JpdG1hcDsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIGNsYXNzIEpQRUdJbWFnZUVu
Y29kZXIgewogcHVibGljOgogICAgIC8vIEVuY29kZSB0aGUgaW5wdXQgYml0bWFwIHdpdGggYSBj
b21wcmVzc2lvbiBxdWFsaXR5IGluIFswLTEwMF0uCiAgICAgc3RhdGljIGJvb2wgZW5jb2RlKGNv
bnN0IFNrQml0bWFwJiwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiopOworICAg
IHN0YXRpYyBib29sIGVuY29kZShjb25zdCBJbWFnZURhdGEmLCBpbnQgcXVhbGl0eSwgVmVjdG9y
PHVuc2lnbmVkIGNoYXI+Kik7CiAKICAgICAvLyBGb3IgY2FsbGVyczogcHJvdmlkZSBhIHJlYXNv
bmFibGUgY29tcHJlc3Npb24gcXVhbGl0eSBkZWZhdWx0LgogICAgIGVudW0gUXVhbGl0eSB7IERl
ZmF1bHRDb21wcmVzc2lvblF1YWxpdHkgPSA5MiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIu
Y3BwCmluZGV4IDc4ZjczN2UzMGM4OThmMTlhMDFmMjE0ZmQzYWIzNWY1ZjU5N2E4MTQuLmZkYmI0
Y2U0MmM0NTUzYmEwMWYwYTNhNzYwN2RjNjk3ZmZlMTU1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdl
RW5jb2Rlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJQTkdJbWFnZUVuY29kZXIuaCIKIAorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlNrQ29sb3JQ
cml2LmgiCkBAIC00NiwxMSArNDcsMTIgQEAgc3RhdGljIHZvaWQgd3JpdGVPdXRwdXQocG5nX3N0
cnVjdHAgcG5nLCBwbmdfYnl0ZXAgZGF0YSwgcG5nX3NpemVfdCBzaXplKQogICAgIHN0YXRpY19j
YXN0PFZlY3Rvcjx1bnNpZ25lZCBjaGFyPio+KHBuZy0+aW9fcHRyKS0+YXBwZW5kKGRhdGEsIHNp
emUpOwogfQogCi1zdGF0aWMgdm9pZCBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCQShjb25zdCBTa1BN
Q29sb3IqIGlucHV0LCBpbnQgcGl4ZWxzLCB1bnNpZ25lZCBjaGFyKiBvdXRwdXQpCitzdGF0aWMg
dm9pZCBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCQShjb25zdCB2b2lkKiBwaXhlbHMsIGludCBwaXhl
bENvdW50LCB1bnNpZ25lZCBjaGFyKiBvdXRwdXQpCiB7CiAgICAgc3RhdGljIGNvbnN0IFNrVW5Q
cmVNdWx0aXBseTo6U2NhbGUqIHNjYWxlID0gU2tVblByZU11bHRpcGx5OjpHZXRTY2FsZVRhYmxl
KCk7CisgICAgY29uc3QgU2tQTUNvbG9yKiBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IFNrUE1D
b2xvcio+KHBpeGVscyk7CiAKLSAgICBmb3IgKDsgcGl4ZWxzLS0gPiAwOyArK2lucHV0KSB7Cisg
ICAgZm9yICg7IHBpeGVsQ291bnQtLSA+IDA7ICsraW5wdXQpIHsKICAgICAgICAgY29uc3QgdW5z
aWduZWQgYWxwaGEgPSBTa0dldFBhY2tlZEEzMigqaW5wdXQpOwogICAgICAgICBpZiAoKGFscGhh
ICE9IDApICYmIChhbHBoYSAhPSAyNTUpKSB7CiAgICAgICAgICAgICAqb3V0cHV0KysgPSBTa1Vu
UHJlTXVsdGlwbHk6OkFwcGx5U2NhbGUoc2NhbGVbYWxwaGFdLCBTa0dldFBhY2tlZFIzMigqaW5w
dXQpKTsKQEAgLTY2LDEzICs2OCwxMCBAQCBzdGF0aWMgdm9pZCBwcmVNdWx0aXBsaWVkQkdSQXRv
UkdCQShjb25zdCBTa1BNQ29sb3IqIGlucHV0LCBpbnQgcGl4ZWxzLCB1bnNpZ25lZAogICAgIH0K
IH0KIAotYm9vbCBQTkdJbWFnZUVuY29kZXI6OmVuY29kZShjb25zdCBTa0JpdG1hcCYgYml0bWFw
LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKK3N0YXRpYyBib29sIGVuY29kZVBpeGVs
cyhjb25zdCBJbnRTaXplJiBpbnB1dFNpemUsIHVuc2lnbmVkIGNoYXIqIHBpeGVscywgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBsaWVkLCBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4qIG91dHB1dCkKIHsKLSAgICBpZiAoYml0bWFwLmNvbmZpZygpICE9IFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPbmx5IHN1cHBvcnQg
QVJHQiAzMiBicHAgc2tpYSBiaXRtYXBzLgotCi0gICAgU2tBdXRvTG9ja1BpeGVscyBiaXRtYXBM
b2NrKGJpdG1hcCk7Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUoYml0bWFwLndpZHRoKCksIGJpdG1h
cC5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUoaW5wdXRTaXplKTsKICAgICBpbWFn
ZVNpemUuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwogICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBy
b3c7CiAKQEAgLTEwMCwxMiArOTksMTQgQEAgYm9vbCBQTkdJbWFnZUVuY29kZXI6OmVuY29kZShj
b25zdCBTa0JpdG1hcCYgYml0bWFwLCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHAKICAgICAg
ICAgICAgICAgICAgOCwgUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBLCAwLCAwLCAwKTsKICAgICBw
bmdfd3JpdGVfaW5mbyhwbmcsIGluZm8pOwogCi0gICAgY29uc3QgU2tQTUNvbG9yKiBwaXhlbHMg
PSBzdGF0aWNfY2FzdDxTa1BNQ29sb3IqPihiaXRtYXAuZ2V0UGl4ZWxzKCkpOwotICAgIHJvdy5y
ZXNpemUoaW1hZ2VTaXplLndpZHRoKCkgKiBiaXRtYXAuYnl0ZXNQZXJQaXhlbCgpKTsKKyAgICBy
b3cucmVzaXplKGltYWdlU2l6ZS53aWR0aCgpICogc2l6ZW9mKFNrUE1Db2xvcikpOwogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VTaXplLmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgcHJl
TXVsdGlwbGllZEJHUkF0b1JHQkEocGl4ZWxzLCBpbWFnZVNpemUud2lkdGgoKSwgcm93LmRhdGEo
KSk7Ci0gICAgICAgIHBuZ193cml0ZV9yb3cocG5nLCByb3cuZGF0YSgpKTsKLSAgICAgICAgcGl4
ZWxzICs9IGltYWdlU2l6ZS53aWR0aCgpOworICAgICAgICBpZiAocHJlbXVsdGlwbGllZCkgewor
ICAgICAgICAgICAgcHJlTXVsdGlwbGllZEJHUkF0b1JHQkEocGl4ZWxzLCBpbWFnZVNpemUud2lk
dGgoKSwgcm93LmRhdGEoKSk7CisgICAgICAgICAgICBwbmdfd3JpdGVfcm93KHBuZywgcm93LmRh
dGEoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG5nX3dyaXRlX3JvdyhwbmcsIHBp
eGVscyk7CisgICAgICAgIHBpeGVscyArPSBpbWFnZVNpemUud2lkdGgoKSAqIDQ7CiAgICAgfQog
CiAgICAgcG5nX3dyaXRlX2VuZChwbmcsIGluZm8pOwpAQCAtMTEzLDQgKzExNCwxOSBAQCBib29s
IFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiogb3V0cAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFBOR0ltYWdl
RW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiogb3V0cHV0KQoreworICAgIGlmIChiaXRtYXAuY29uZmlnKCkgIT0gU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE9ubHkgc3VwcG9ydCBB
UkdCIDMyIGJwcCBza2lhIGJpdG1hcHMuCisKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1hcExv
Y2soYml0bWFwKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZShiaXRtYXAud2lkdGgoKSwgYml0bWFw
LmhlaWdodCgpKTsKKyAgICByZXR1cm4gZW5jb2RlUGl4ZWxzKGltYWdlU2l6ZSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KGJpdG1hcC5nZXRQaXhlbHMoKSksIHRydWUsIG91dHB1dCk7Cit9
CisKK2Jvb2wgUE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUoY29uc3QgSW1hZ2VEYXRhJiBiaXRtYXAs
IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQoreworICAgIHJldHVybiBlbmNvZGVQaXhl
bHMoYml0bWFwLnNpemUoKSwgYml0bWFwLmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCksIGZhbHNlLCBv
dXRwdXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29k
ZXIuaAppbmRleCBiOGRmZWMzYmIzYmQ1NDcwN2NiMDUzMTBiODQwN2IzOGVhOTUwMGMyLi4wNjFk
N2FjYTJjZWU4YThiMDNlZmM0MGUzNDYyNjMzNGVlMjJmYmY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VF
bmNvZGVyLmgKQEAgLTM3LDEwICszNywxMyBAQCBjbGFzcyBTa0JpdG1hcDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIC8vIEludGVyZmFjZSBmb3IgZW5jb2Rp
bmcgUE5HIGRhdGEuIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBsaWJwbmcuCiBjbGFzcyBQTkdJ
bWFnZUVuY29kZXIgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGVuY29kZShjb25zdCBTa0Jp
dG1hcCYsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KTsKKyAgICBzdGF0aWMgYm9vbCBl
bmNvZGUoY29uc3QgSW1hZ2VEYXRhJiwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBiMWUzOTY0NjI2NzFkMTU2MjlhYzIwYzRkMDI1Nzk2NmU5ZDA2ZmQ0Li4wMWE0YzRkMzNlZGI4
YTEzMjY3YjlkYjQ5ZTc3Mzg5OTgzMDQwOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE3IEBACisyMDExLTAzLTE0ICBKb2huIEJhdW1hbiAgPGpiYXVtYW5AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vbi1wcmVtdWx0aXBsaWVkLWFscGhhIGNhbnZhcyBhdHRyaWJ1dGUgaXMgaWdub3JlIGZvciB0
b0RhdGFVUkwsIGRyYXdJbWFnZSwgdGV4SW1hZ2UyRAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMzgKKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
cmVhZGluZyBhIHdlYmdsIGNvbnRleHQgaW50byBhbiBJbWFnZURhdGEuCisKKyAgICAgICAgKiBz
cmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwuaDoKKwogMjAxMS0wMy0xMSAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUm9sbG91dCB0aGUgY2hyb21pdW0gZGVwcyByb2xsIGFzIGl0IGFkZHMgYSBk
ZXBlbmRlbmN5IG9uIGEgaGVhZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCmluZGV4IDNkOTM3YWMwMzkwMzc1
M2Q3MDE4MzNiZmE4NjVhZWM2NWExNjllMWQuLjhkMTJjNGQ1MWU1NTZmMGNlMzJlYjM2M2VkNzE4
ODUwZDM1N2Y4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCkBAIC0yMDAsNiArMjAwLDE2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
Q2FudmFzUmVuZGVyaW5nQ29uCiAKICAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4
ZWxzLCA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWlnaHQoKSk7CiAKKyAgICBpZiAo
IW1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAg
ICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBsLT5o
ZWlnaHQoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1ZmZlclNpemU7IGkg
Kz0gNCkgeworICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxz
W2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAx
XSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwor
ICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAq
IHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICB9CisgICAgfQorCiAjaWYgVVNFKFNLSUEp
CiAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXAucmVhZHlUb0RyYXcoKSkgewogICAgICAgICAvLyBX
ZSBuZWVkIHRvIGRyYXcgdGhlIHJlc2l6aW5nIGJpdG1hcCBpbnRvIHRoZSBjYW52YXMncyBiYWNr
aW5nIHN0b3JlLgpAQCAtMjE4LDYgKzIyOCwyMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nvbgog
I2VuZGlmCiB9CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgaWYgKG1faW1w
bC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0
YTo6Y3JlYXRlKEludFNpemUobV9pbXBsLT53aWR0aCgpLCBtX2ltcGwtPmhlaWdodCgpKSk7Cisg
ICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+ZGF0
YSgpOworICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAqIG1faW1wbC0+d2lkdGgoKSAqIG1faW1w
bC0+aGVpZ2h0KCk7CisKKyAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCBi
dWZmZXJTaXplKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSAr
PSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKworICAg
IHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAogewogICAgIC8vIElmIHRo
ZSBncHUgY29tcG9zaXRvciBpcyBvbiB0aGVuIHNraXAgdGhlIHJlYWRiYWNrIGFuZCBzb2Z0d2Fy
ZSByZW5kZXJpbmcgcGF0aC4KQEAgLTEwNTksNiArMTA4Niw3IEBAIERFTEVHQVRFX1RPX0lOVEVS
TkFMXzYodmVydGV4QXR0cmliUG9pbnRlciwgR0MzRHVpbnQsIEdDM0RpbnQsIEdDM0RlbnVtLCBH
QzNEYm9vCiBERUxFR0FURV9UT19JTlRFUk5BTF80KHZpZXdwb3J0LCBHQzNEaW50LCBHQzNEaW50
LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKIAogREVMRUdBVEVfVE9fSU5URVJOQUxfMShwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopCitERUxFR0FU
RV9UT19JTlRFUk5BTF9SKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhLCBQYXNzUmVm
UHRyPEltYWdlRGF0YT4pCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52
YXNCdWZmZXIoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCmluZGV4IGM4ZjdjN2E3YTc0MWM0N2RjMzUy
MzU5ZDYxYThjYTY3YTJlNDk0ODUuLmI1MTdlNjBiOGRmOWViZjcxMmY2NTYyOThmZGQ1NjA1Yjhl
ZDBlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGlj
c0NvbnRleHQzREludGVybmFsLmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGljOgogICAgIEludFNp
emUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKIAogICAgIHZvaWQgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOworICAgIFBhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogICAgIGJv
b2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwogCiAgICAgdm9pZCBwcmVwYXJlVGV4
dHVyZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85890</attachid>
            <date>2011-03-15 18:15:31 -0700</date>
            <delta_ts>2011-03-15 20:27:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56238-20110315181529.patch</filename>
            <type>text/plain</type>
            <size>50078</size>
            <attacher name="John Bauman">jbauman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODA5MTQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkZWFlNDQ4MDgzYjBjZmM3M2U5N2Yx
NTk5MTBkMDQ0NzQyOWJlZTY1Li4wMjcwOTY0YTcwNGQwZGU3ZmI1MDMwMDVkOWE5ZDczYWQzYjY3
NjUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDMtMTQgIEpvaG4gQmF1bWFuICA8amJh
dW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm9uLXByZW11bHRpcGxpZWQtYWxwaGEgY2FudmFzIGF0dHJpYnV0ZSBpcyBp
Z25vcmUgZm9yIHRvRGF0YVVSTCwgZHJhd0ltYWdlLCB0ZXhJbWFnZTJECisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjIzOAorCisgICAgICAgIEFkZCBu
ZXcgdGVzdCBmcm9tIHdlYmdsIGNvbmZvcm1hbmNlIHRlc3QuCisKKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRp
bHMuanM6IFVwZGF0ZSB0byBmaXggZmlsbFRleHR1cmUKKyAgICAgICAgKFdlYkdMVGVzdFV0aWxz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjLXdrMi9Ta2lwcGVkOgorCiAyMDExLTAzLTExICBEYXZpZCBM
ZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggcHJvdG90eXBlLWluaGVy
aXRhbmNlLWV4cGVjdGVkIHJlc3VsdCBkdWUgdG8gdHdvIGNoYW5nZXM6CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcHJlbXVsdGlwbHlhbHBoYS10
ZXN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDRhNTRjOTQ4ZDc4MmQ3MTg4MGM3OTI0YTFj
OWM1NzhhNTMwZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvcHJlbXVsdGlwbHlhbHBoYS10ZXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM3IEBA
CitUZXN0IHRoZSBXZWJHTCBwcmVtdWx0aXBsZWRBbHBoYSBjb250ZXh0IGNyZWF0aW9uIGZsYWcu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCit0ZXN0aW5nOiBwcmVtdWx0aXBsaWVk
QWxwaGE6IHRydWUgdG9EYXRhVVJMOiB0cnVlCitQQVNTIGdsLmdldENvbnRleHRBdHRyaWJ1dGVz
KCkucHJlbXVsdGlwbGVkQWxwaGEgaXMgcHJlbXVsdGlwbGVkQWxwaGEKK1BBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBz
ZXR1cC4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3Vs
ZCBiZSBubyBlcnJvcnMgZnJvbSBkcmF3aW5nLgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIGNyZWF0aW5nIGNvcHku
CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUg
bm8gZXJyb3JzIGZyb20gMm5kIGRyYXdpbmcuCitQQVNTIHNob3VsZCBkcmF3IHdpdGggNjQsMTI4
LDI1NSwxMjgKKwordGVzdGluZzogcHJlbXVsdGlwbGllZEFscGhhOiB0cnVlIHRvRGF0YVVSTDog
ZmFsc2UKK1BBU1MgZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsZWRBbHBoYSBp
cyBwcmVtdWx0aXBsZWRBbHBoYQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIHNldHVwLgorUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIGRy
YXdpbmcuCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91
bGQgYmUgbm8gZXJyb3JzIGZyb20gY3JlYXRpbmcgY29weS4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSAybmQgZHJh
d2luZy4KK1BBU1Mgc2hvdWxkIGRyYXcgd2l0aCA2NCwxMjgsMjU1LDEyOAorCit0ZXN0aW5nOiBw
cmVtdWx0aXBsaWVkQWxwaGE6IGZhbHNlIHRvRGF0YVVSTDogdHJ1ZQorUEFTUyBnbC5nZXRDb250
ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxlZEFscGhhIGlzIHByZW11bHRpcGxlZEFscGhhCitQ
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8g
ZXJyb3JzIGZyb20gc2V0dXAuCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gZHJhd2luZy4KK1BBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBj
cmVhdGluZyBjb3B5LgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIDJuZCBkcmF3aW5nLgorUEFTUyBzaG91bGQgZHJh
dyB3aXRoIDI1NSwxOTIsMTI4LDEKKwordGVzdGluZzogcHJlbXVsdGlwbGllZEFscGhhOiBmYWxz
ZSB0b0RhdGFVUkw6IGZhbHNlCitQQVNTIGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVs
dGlwbGVkQWxwaGEgaXMgcHJlbXVsdGlwbGVkQWxwaGEKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4KK1BB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBl
cnJvcnMgZnJvbSBkcmF3aW5nLgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIGNyZWF0aW5nIGNvcHkuCitQQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3Jz
IGZyb20gMm5kIGRyYXdpbmcuCitQQVNTIHNob3VsZCBkcmF3IHdpdGggMjU1LDE5MiwxMjgsMQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wcmVtdWx0aXBseWFs
cGhhLXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3ByZW11bHRpcGx5
YWxwaGEtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3N2EzNzBiOGU4NjY2Njc3MTllOTZiNzg2Y2Rk
YTM1Nzk4YjE0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9wcmVtdWx0aXBseWFscGhhLXRlc3QuaHRtbApAQCAtMCwwICsxLDE0NyBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIK
KyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFk
PgorPHRpdGxlPlRlc3QgdGhlIFdlYkdMIHByZW11bHRpcGxlZEFscGhhIGNvbnRleHQgY3JlYXRp
b24gZmxhZy48L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93
ZWJnbC10ZXN0LmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRl
c3QtdXRpbHMuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3Jp
cHRpb24iPjwvZGl2PjxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3ZhciB3dHUg
PSBXZWJHTFRlc3RVdGlsczsKKwordmFyIHRlc3RzID0gWworICAvLyBJZiBwcmVtdWx0aXBsZWRB
bHBoYSBpcyB0cnVlIHRoZW4KKyAgLy8gW3RleHR1cmVdICAgICAgICAgICBbY2FudmFzXSAgICAg
ICAgICAgICBbZGF0YVVSTF0KKyAgLy8gMzIsIDY0LCAxMjgsIDEyOCAtPiA2NCwgMTI4LCAyNTUs
IDEyOCAtPiA2NCwgMTI4LCAyNTUsIDEyOAorICB7IGNyZWF0aW9uQXR0cmlidXRlczoge30sCisg
ICAgc2VudENvbG9yOiBbMzIsIDY0LCAxMjgsIDEyOF0sCisgICAgZXhwZWN0ZWRDb2xvcjogWzY0
LCAxMjgsIDI1NSwgMTI4XSwKKyAgICBlcnJvclJhbmdlOiAyLAorICAgIHVzZVRvRGF0YVVSTDog
dHJ1ZSwKKyAgfSwKKyAgLy8gSWYgcHJlbXVsdGlwbGVkQWxwaGEgaXMgdHJ1ZSB0aGVuCisgIC8v
IFt0ZXh0dXJlXSAgICAgICAgICAgW2NhbnZhc10gICAgICAgICAgICAgW3RleHR1cmVdCisgIC8v
IDMyLCA2NCwgMTI4LCAxMjggLT4gNjQsIDEyOCwgMjU1LCAxMjggLT4gNjQsIDEyOCwgMjU1LCAx
MjgKKyAgeyBjcmVhdGlvbkF0dHJpYnV0ZXM6IHt9LAorICAgIHNlbnRDb2xvcjogWzMyLCA2NCwg
MTI4LCAxMjhdLAorICAgIGV4cGVjdGVkQ29sb3I6IFs2NCwgMTI4LCAyNTUsIDEyOF0sCisgICAg
ZXJyb3JSYW5nZTogMiwKKyAgICB1c2VUb0RhdGFVUkw6IGZhbHNlLAorICB9LAorICAvLyBJZiBw
cmVtdWx0aXBsZWRBbHBoYSBpcyBmYWxzZSB0aGVuCisgIC8vIFt0ZXh0dXJlXSAgICAgICAgICAg
W2NhbnZhc10gICAgICAgICAgICBbZGF0YVVSTF0KKyAgLy8gMjU1LCAxOTIsIDEyOCwgMSAtPiAy
NTUsIDE5MiwgMTI4LCAxIC0+IDI1NSwgMTkyLCAxMjgsIDEKKyAgeyBjcmVhdGlvbkF0dHJpYnV0
ZXM6IHtwcmVtdWx0aXBsaWVkQWxwaGE6IGZhbHNlfSwKKyAgICBzZW50Q29sb3I6IFsyNTUsIDE5
MiwgMTI4LCAxXSwKKyAgICBleHBlY3RlZENvbG9yOiBbMjU1LCAxOTIsIDEyOCwgMV0sCisgICAg
ZXJyb3JSYW5nZTogMCwKKyAgICB1c2VUb0RhdGFVUkw6IHRydWUsCisgIH0sCisgIC8vIElmIHBy
ZW11bHRpcGxlZEFscGhhIGlzIGZhbHNlIHRoZW4KKyAgLy8gW3RleHR1cmVdICAgICAgICAgICBb
Y2FudmFzXSAgICAgICAgICAgIFt0ZXh0dXJlXQorICAvLyAyNTUsIDE5MiwgMTI4LCAxIC0+IDI1
NSwgMTkyLCAxMjgsIDEgLT4gMjU1LCAxOTIsIDEyOCwgMQorICB7IGNyZWF0aW9uQXR0cmlidXRl
czoge3ByZW11bHRpcGxpZWRBbHBoYTogZmFsc2V9LAorICAgIHNlbnRDb2xvcjogWzI1NSwgMTky
LCAxMjgsIDFdLAorICAgIGV4cGVjdGVkQ29sb3I6IFsyNTUsIDE5MiwgMTI4LCAxXSwKKyAgICBl
cnJvclJhbmdlOiAwLAorICAgIHVzZVRvRGF0YVVSTDogZmFsc2UsCisgIH0KK107CisKK3ZhciBn
X2NvdW50ID0gMDsKK3ZhciBnbDsKK3ZhciBjYW52YXM7Cit2YXIgcHJlbXVsdGlwbGVkQWxwaGE7
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92
ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKK30KKworZGVzY3Jp
cHRpb24oIlRlc3QgdGhlIFdlYkdMIHByZW11bHRpcGxlZEFscGhhIGNvbnRleHQgY3JlYXRpb24g
ZmxhZy4iKTsKK2RvTmV4dFRlc3QoKTsKK2Z1bmN0aW9uIGRvTmV4dFRlc3QoKSB7CisgIGlmIChn
X2NvdW50IDwgdGVzdHMubGVuZ3RoKSB7CisgICAgIHZhciB0ZXN0ID0gdGVzdHNbZ19jb3VudCsr
XTsKKyAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAg
IGdsID0gd3R1LmNyZWF0ZTNEQ29udGV4dChjYW52YXMsIHRlc3QuY3JlYXRpb25BdHRyaWJ1dGVz
KTsKKyAgICAgdmFyIHByZW11bHRpcGxpZWRBbHBoYSA9IHRlc3QuY3JlYXRpb25BdHRyaWJ1dGVz
LnByZW11bHRpcGxpZWRBbHBoYSAhPSBmYWxzZTsKKyAgICAgZGVidWcoIiIpCisgICAgIGRlYnVn
KCJ0ZXN0aW5nOiBwcmVtdWx0aXBsaWVkQWxwaGE6ICIgKyBwcmVtdWx0aXBsaWVkQWxwaGEgKyAi
IHRvRGF0YVVSTDogIiArIHRlc3QudXNlVG9EYXRhVVJMKTsKKworICAgICBzaG91bGRCZSgnZ2wu
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsZWRBbHBoYScsICdwcmVtdWx0aXBsZWRB
bHBoYScpOworCisgICAgIHZhciBwcm9ncmFtID0gd3R1LnNldHVwVGV4dHVyZWRRdWFkKGdsKTsK
KworICAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiU2hvdWxkIGJlIG5vIGVy
cm9ycyBmcm9tIHNldHVwLiIpOworICAgICB2YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOwor
ICAgICB3dHUuZmlsbFRleHR1cmUoZ2wsIHRleCwgMiwgMiwgdGVzdC5zZW50Q29sb3IsIDApOwor
ICAgICB2YXIgbG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ0ZXgiKTsKKyAg
ICAgZ2wudW5pZm9ybTFpKGxvYywgMCk7CisgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVS
RV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5MSU5FQVIpOworICAgICBnbC50ZXhQYXJh
bWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTElORUFSKTsK
KyAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywg
Z2wuQ0xBTVBfVE9fRURHRSk7CisgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwg
Z2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOworCisgICAgIHd0dS5kcmF3UXVh
ZChnbCk7CisgICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQgYmUg
bm8gZXJyb3JzIGZyb20gZHJhd2luZy4iKTsKKworICAgICBmdW5jdGlvbiBsb2FkVGV4dHVyZSgp
IHsKKyAgICAgICB2YXIgcG5nVGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgICAgIC8vIG5v
dCBuZWVkZWQgYXMgaXQncyB0aGUgZGVmYXVsdAorICAgICAgIC8vIGdsLnBpeGVsU3RvcmVpKGds
LlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgZmFsc2UpOworICAgICAgIGdsLnBpeGVs
U3RvcmVpKGdsLlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wsIGZhbHNlKTsKKyAg
ICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBwbmdUZXgpOworICAgICAgIGlmICh0
ZXN0LnVzZVRvRGF0YVVSTCkgeworICAgICAgICAgIC8vIGNyZWF0ZSB0ZXh0dXJlIGZyb20gaW1h
Z2UKKyAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGds
LlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHRoaXMpOworICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgLy8gY3JlYXRlIHRleHR1cmUgZnJvbSBjYW52YXMKKyAgICAgICAgICBnbC50ZXhJbWFnZTJE
KGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGNh
bnZhcyk7CisgICAgICAgfQorICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwg
Z2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5MSU5FQVIpOworICAgICAgIGdsLnRleFBhcmFtZXRl
cmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpOworICAg
ICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGds
LkNMQU1QX1RPX0VER0UpOworICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwg
Z2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpOworICAgICAgIGdsRXJyb3JTaG91
bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gY3JlYXRpbmcg
Y29weS4iKTsKKyAgICAgICB3dHUuZHJhd1F1YWQoZ2wpOworICAgICAgIGdsRXJyb3JTaG91bGRC
ZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gMm5kIGRyYXdpbmcu
Iik7CisgICAgICAgd3R1LmNoZWNrQ2FudmFzKAorICAgICAgICAgIGdsLCB0ZXN0LmV4cGVjdGVk
Q29sb3IsCisgICAgICAgICAgInNob3VsZCBkcmF3IHdpdGggIiArIHRlc3QuZXhwZWN0ZWRDb2xv
ciwgdGVzdC5lcnJvclJhbmdlKTsKKworICAgICAgIGRvTmV4dFRlc3QoKTsKKyAgICAgfQorCisg
ICAgIGlmICh0ZXN0LnVzZVRvRGF0YVVSTCkgeworICAgICAgICAvLyBMb2FkIGNhbnZhcyBpbnRv
IHN0cmluZyB1c2luZyB0b0RhdGFVUkwKKyAgICAgICAgdmFyIHBuZyA9IGNhbnZhcy50b0RhdGFV
UkwoKTsKKyAgICAgICAgLy8gTG9hZCBzdHJpbmcgaW50byB0aGUgdGV4dHVyZQorICAgICAgICB2
YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKKyAgICAgICAgaW5wdXQu
b25sb2FkID0gbG9hZFRleHR1cmU7CisgICAgICAgIGlucHV0LnNyYyA9IHBuZzsKKyAgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gTG9hZCBjYW52YXMgaW50byB0aGUgdGV4dHVyZSBhc3luY2hyb25v
dXNseSAodG8gcHJldmVudCB1bmJvdW5kZWQgc3RhY2sgY29uc3VtcHRpb24pCisgICAgICAgIHNl
dFRpbWVvdXQobG9hZFRleHR1cmUsIDApOworICAgICB9CisgICB9IGVsc2UgeworICAgICAgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAg
ICBmaW5pc2hUZXN0KCk7CisgICB9Cit9CisKKzwvc2NyaXB0PgorCis8c2NyaXB0PgorPC9zY3Jp
cHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qcyBiL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCmluZGV4IGYz
ZTUyMGZhY2ZmYjMyNmM4ZTliOWQ0NWQzZGJiMTIxODMzMzIwMTEuLmRjZTUwOWFjNTk0MjA0Zjhl
ZjBkYmI3NmFkY2VmN2YwMTBjMDI3MzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCkBAIC0xMDYs
NyArMTA2LDcgQEAgdmFyIHNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlciA9ICcnICsKICAgJ3Vu
aWZvcm0gc2FtcGxlcjJEIHRleDtcbicgKwogICAndmFyeWluZyB2ZWMyIHRleENvb3JkO1xuJyAr
CiAgICd2b2lkIG1haW4oKSB7XG4nICsKLSAgJyAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQo
dGV4LCB0ZXhDb29yZCk7XG4nICsKKyAgJyAgICBnbF9GcmFnRGF0YVswXSA9IHRleHR1cmUyRCh0
ZXgsIHRleENvb3JkKTtcbicgKwogICAnfVxuJzsKIAogLyoqCkBAIC0yNjIsMTYgKzI2MiwyMSBA
QCB2YXIgc2V0dXBUZXh0dXJlZFF1YWQgPSBmdW5jdGlvbigKICAqLwogdmFyIGZpbGxUZXh0dXJl
ID0gZnVuY3Rpb24oZ2wsIHRleCwgd2lkdGgsIGhlaWdodCwgY29sb3IsIG9wdF9sZXZlbCkgewog
ICBvcHRfbGV2ZWwgPSBvcHRfbGV2ZWwgfHwgMDsKLSAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwotICBjYW52YXMud2lkdGggPSB3aWR0aDsKLSAgY2FudmFz
LmhlaWdodCA9IGhlaWdodDsKLSAgdmFyIGN0eDJkID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7
Ci0gIGN0eDJkLmZpbGxTdHlsZSA9ICJyZ2JhKCIgKyBjb2xvclswXSArICIsIiArIGNvbG9yWzFd
ICsgIiwiICsgY29sb3JbMl0gKyAiLCIgKyBjb2xvclszXSArICIpIjsKLSAgY3R4MmQuZmlsbFJl
Y3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgIHZhciBudW1QaXhlbHMgPSB3aWR0aCAqIGhlaWdo
dDsKKyAgdmFyIHNpemUgPSBudW1QaXhlbHMgKiA0OworICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJy
YXkoc2l6ZSk7CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBudW1QaXhlbHM7ICsraWkpIHsKKyAg
ICB2YXIgb2ZmID0gaWkgKiA0OworICAgIGJ1ZltvZmYgKyAwXSA9IGNvbG9yWzBdOworICAgIGJ1
ZltvZmYgKyAxXSA9IGNvbG9yWzFdOworICAgIGJ1ZltvZmYgKyAyXSA9IGNvbG9yWzJdOworICAg
IGJ1ZltvZmYgKyAzXSA9IGNvbG9yWzNdOworICB9CiAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRV
UkVfMkQsIHRleCk7CiAgIGdsLnRleEltYWdlMkQoCi0gICAgICBnbC5URVhUVVJFXzJELCBvcHRf
bGV2ZWwsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGNhbnZhcyk7Ci19Owor
ICAgICAgZ2wuVEVYVFVSRV8yRCwgb3B0X2xldmVsLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAw
LAorICAgICAgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsKKyAgfTsKIAogLyoqCiAg
KiBDcmVhdGVzIGEgdGV4dHVyZXMgYW5kIGZpbGxzIGl0IHdpdGggYSBzb2xpZCBjb2xvcgpAQCAt
MzE2LDE0ICszMjEsMTcgQEAgdmFyIGRyYXdRdWFkID0gZnVuY3Rpb24oZ2wsIG9wdF9jb2xvcikg
ewogICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciB0byBmaWxsIGNs
ZWFyIHdpdGggYmVmb3JlIGRyYXdpbmcuIEEKICAqICAgICAgICA0IGVsZW1lbnQgYXJyYXkgd2hl
cmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KICAqIEBwYXJhbSB7c3Ry
aW5nfSBtc2cgTWVzc2FnZSB0byBhc3NvY2lhdGUgd2l0aCBzdWNjZXNzLiBFZyAoInNob3VsZCBi
ZSByZWQiKS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBlcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRh
YmxlIGVycm9yIGluCisgKiAgICAgICAgY29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KICAq
LwotdmFyIGNoZWNrQ2FudmFzUmVjdCA9IGZ1bmN0aW9uKGdsLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBjb2xvciwgbXNnKSB7Cit2YXIgY2hlY2tDYW52YXNSZWN0ID0gZnVuY3Rpb24oZ2wsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBtc2csIGVycm9yUmFuZ2UpIHsKKyAgZXJyb3JSYW5nZSA9
IGVycm9yUmFuZ2UgfHwgMDsKICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVp
Z2h0ICogNCk7CiAgIGdsLnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgYnVmKTsKICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aCAqIGhl
aWdodDsgKytpKSB7CiAgICAgdmFyIG9mZnNldCA9IGkgKiA0OwogICAgIGZvciAodmFyIGogPSAw
OyBqIDwgY29sb3IubGVuZ3RoOyArK2opIHsKLSAgICAgIGlmIChidWZbb2Zmc2V0ICsgal0gIT0g
Y29sb3Jbal0pIHsKKyAgICAgIGlmIChNYXRoLmFicyhidWZbb2Zmc2V0ICsgal0gLSBjb2xvcltq
XSkgPiBlcnJvclJhbmdlKSB7CiAgICAgICAgIHRlc3RGYWlsZWQobXNnKTsKICAgICAgICAgdmFy
IHdhcyA9IGJ1ZltvZmZzZXQgKyAwXS50b1N0cmluZygpOwogICAgICAgICBmb3IgKGogPSAxOyBq
IDwgY29sb3IubGVuZ3RoOyArK2opIHsKQEAgLTM0Myw5ICszNTEsMTEgQEAgdmFyIGNoZWNrQ2Fu
dmFzUmVjdCA9IGZ1bmN0aW9uKGdsLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgbXNnKSB7
CiAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgY2xl
YXIgd2l0aCBiZWZvcmUgZHJhd2luZy4gQQogICogICAgICAgIDQgZWxlbWVudCBhcnJheSB3aGVy
ZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgogICogQHBhcmFtIHtzdHJp
bmd9IG1zZyBNZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHN1Y2Nlc3MuIEVnICgic2hvdWxkIGJl
IHJlZCIpLgorICogQHBhcmFtIHtudW1iZXJ9IGVycm9yUmFuZ2UgT3B0aW9uYWwuIEFjY2VwdGFi
bGUgZXJyb3IgaW4KKyAqICAgICAgICBjb2xvciBjaGVja2luZy4gMCBieSBkZWZhdWx0LgogICov
Ci12YXIgY2hlY2tDYW52YXMgPSBmdW5jdGlvbihnbCwgY29sb3IsIG1zZykgewotICBjaGVja0Nh
bnZhc1JlY3QoZ2wsIDAsIDAsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCwgY29s
b3IsIG1zZyk7Cit2YXIgY2hlY2tDYW52YXMgPSBmdW5jdGlvbihnbCwgY29sb3IsIG1zZywgZXJy
b3JSYW5nZSkgeworICBjaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIGdsLmNhbnZhcy53aWR0aCwg
Z2wuY2FudmFzLmhlaWdodCwgY29sb3IsIG1zZywgZXJyb3JSYW5nZSk7CiB9OwogCiAvKioKQEAg
LTM3OCwyMCArMzg4LDE1IEBAIHZhciBsb2FkVGV4dHVyZSA9IGZ1bmN0aW9uKGdsLCB1cmwsIGNh
bGxiYWNrKSB7CiAgKiAgICAgcGFzc2VkIGluIG9uZSB3aWxsIGJlIGNyZWF0ZWQuCiAgKiBAcmV0
dXJuIHshV2ViR0xDb250ZXh0fSBUaGUgY3JlYXRlZCBjb250ZXh0LgogICovCi12YXIgY3JlYXRl
M0RDb250ZXh0ID0gZnVuY3Rpb24ob3B0X2NhbnZhcykgewordmFyIGNyZWF0ZTNEQ29udGV4dCA9
IGZ1bmN0aW9uKG9wdF9jYW52YXMsIG9wdF9hdHRyaWJ1dGVzKSB7CiAgIG9wdF9jYW52YXMgPSBv
cHRfY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICB2YXIgY29u
dGV4dCA9IG51bGw7CiAgIHRyeSB7Ci0gICAgY29udGV4dCA9IG9wdF9jYW52YXMuZ2V0Q29udGV4
dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7CisgICAgY29udGV4dCA9IG9wdF9jYW52YXMuZ2V0Q29u
dGV4dCgid2ViZ2wiLCBvcHRfYXR0cmlidXRlcyk7CiAgIH0gY2F0Y2goZSkge30KICAgaWYgKCFj
b250ZXh0KSB7CiAgICAgdHJ5IHsKLSAgICAgIGNvbnRleHQgPSBvcHRfY2FudmFzLmdldENvbnRl
eHQoIndlYmtpdC0zZCIpOwotICAgIH0gY2F0Y2goZSkge30KLSAgfQotICBpZiAoIWNvbnRleHQp
IHsKLSAgICB0cnkgewotICAgICAgY29udGV4dCA9IG9wdF9jYW52YXMuZ2V0Q29udGV4dCgibW96
LXdlYmdsIik7CisgICAgICBjb250ZXh0ID0gb3B0X2NhbnZhcy5nZXRDb250ZXh0KCJleHBlcmlt
ZW50YWwtd2ViZ2wiLCBvcHRfYXR0cmlidXRlcyk7CiAgICAgfSBjYXRjaChlKSB7fQogICB9CiAg
IGlmICghY29udGV4dCkgewpAQCAtNTY4LDcgKzU3Myw3IEBAIHZhciBzZXR1cFdlYkdMV2l0aFNo
YWRlcnMgPSBmdW5jdGlvbigKIAogICAvLyBCaW5kIGF0dHJpYnV0ZXMKICAgZm9yICh2YXIgaSBp
biBhdHRyaWJzKSB7Ci0gICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uIChwcm9ncmFtLCBwYXJzZUlu
dChpKSwgYXR0cmlic1tpXSk7CisgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uIChwcm9ncmFtLCBp
LCBhdHRyaWJzW2ldKTsKICAgfQogCiAgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtKTsKQEAgLTYx
Nyw4ICs2MjIsMTkgQEAgdmFyIHJlYWRGaWxlTGlzdCA9IGZ1bmN0aW9uKHVybCkgewogICAgICAg
ICAgIHN0clswXSAhPSAnIycgJiYKICAgICAgICAgICBzdHJbMF0gIT0gIjsiICYmCiAgICAgICAg
ICAgc3RyLnN1YnN0cigwLCAyKSAhPSAiLy8iKSB7Ci0gICAgICAgIG5ld191cmwgPSBwcmVmaXgg
KyBzdHI7Ci0gICAgICAgIGZpbGVzID0gZmlsZXMuY29uY2F0KHJlYWRGaWxlTGlzdChuZXdfdXJs
KSk7CisgICAgICAgIHZhciBuYW1lcyA9IHN0ci5zcGxpdCgvICsvKTsKKyAgICAgICAgaWYgKG5h
bWVzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgbmV3X3VybCA9IHByZWZpeCArIHN0cjsKKyAg
ICAgICAgICBmaWxlcyA9IGZpbGVzLmNvbmNhdChyZWFkRmlsZUxpc3QobmV3X3VybCkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgIHZhciBzID0gIiI7CisgICAgICAgICAgdmFyIHAgPSAi
IjsKKyAgICAgICAgICBmb3IgKHZhciBqaiA9IDA7IGpqIDwgbmFtZXMubGVuZ3RoOyArK2pqKSB7
CisgICAgICAgICAgICBzICs9IHAgKyBwcmVmaXggKyBuYW1lc1tqal07CisgICAgICAgICAgICBw
ID0gIiAiOworICAgICAgICAgIH0KKyAgICAgICAgICBmaWxlcy5wdXNoKHMpOworICAgICAgICB9
CiAgICAgICB9CiAgICAgfQogICB9IGVsc2UgewpAQCAtNjQ0LDYgKzY2MCwxMSBAQCB2YXIgbG9h
ZFNoYWRlciA9IGZ1bmN0aW9uKGdsLCBzaGFkZXJTb3VyY2UsIHNoYWRlclR5cGUpIHsKIAogICAv
LyBMb2FkIHRoZSBzaGFkZXIgc291cmNlCiAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNoYWRl
clNvdXJjZSk7CisgIHZhciBlcnIgPSBnbC5nZXRFcnJvcigpOworICBpZiAoZXJyICE9IGdsLk5P
X0VSUk9SKSB7CisgICAgZXJyb3IoIioqKiBFcnJvciBsb2FkaW5nIHNoYWRlciAnIiArIHNoYWRl
ciArICInOiIgKyBnbEVudW1Ub1N0cmluZyhnbCwgZXJyKSk7CisgICAgcmV0dXJuIG51bGw7Cisg
IH0KIAogICAvLyBDb21waWxlIHRoZSBzaGFkZXIKICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3Rh
dGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0CmluZGV4IGFiYWVhYzM5ZmZjMjRmOGU3MWY3MTA1ODc5NzkwYzZiOWNhNDRlODYuLjU1
YjQwNWI3MTQzZDA1YTcyMmFjNTdkMzhjMjFmYTM2NmI5ZDEwY2QgMTAwNzU1Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTIzNTcs
NiArMjM1Nyw4IEBAIEJVR1dFQkdMIE1BQyBMSU5VWCA6IGZhc3QvY2FudmFzL3dlYmdsL2dsc2wt
Y29uZm9ybWFuY2UuaHRtbCA9IENSQVNICiBCVUdXRUJHTCBHUFUgV0lOIERFQlVHIFNMT1cgOiBm
YXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1h
bnRpYWxpYXMuaHRtbCA9IFBBU1MKIEJVR1dFQkdMIEdQVSBXSU4gREVCVUcgU0xPVyA6IGZhc3Qv
Y2FudmFzL3dlYmdsL2luZGV4LXZhbGlkYXRpb24td2l0aC1yZXNpemVkLWJ1ZmZlci5odG1sID0g
UEFTUwogCitCVUdXSzU2NDE0IDogZmFzdC9jYW52YXMvd2ViZ2wvcHJlbXVsdGlwbHlhbHBoYS10
ZXN0Lmh0bWwgPSBURVhUCisKIC8vIFRoZXNlIHdlcmUgbm90IGZpeGVkIGJ5IHRoZSBNZXNhIDcu
OSB1cGdyYWRlLiBOZWVkIHRvIGludmVzdGlnYXRlLgogQlVHQ1I2MDY1MSBXSU4gOiBmYXN0L2Nh
bnZhcy93ZWJnbC9nbC1vYmplY3QtZ2V0LWNhbGxzLmh0bWwgPSBUSU1FT1VUIFBBU1MgVEVYVAog
Ly8gQlVHQ1I2MDY1MSBXSU4gOiBmYXN0L2NhbnZhcy93ZWJnbC9nbHNsLWNvbmZvcm1hbmNlLmh0
bWwgPSBUSU1FT1VUIEZBSUwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azIvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvU2tpcHBlZAppbmRleCA0
MjU3MDBjYzZmMWM0MWYxN2EwNGRmYmNmNzBmY2IzNzVjNzEwZDg1Li4yZjQ4OTViODJmNmVhMzEy
MzA0NWIxZGU2MzZjYjU4NDBiYmVmNzFkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMtd2syL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9Ta2lw
cGVkCkBAIC0xMDgxLDYgKzEwODEsNyBAQCBmYXN0L2NhbnZhcy93ZWJnbC9udWxsLW9iamVjdC1i
ZWhhdmlvdXIuaHRtbAogZmFzdC9jYW52YXMvd2ViZ2wvbnVsbC11bmlmb3JtLWxvY2F0aW9uLmh0
bWwKIGZhc3QvY2FudmFzL3dlYmdsL29iamVjdC1kZWxldGlvbi1iZWhhdmlvdXIuaHRtbAogZmFz
dC9jYW52YXMvd2ViZ2wvcG9pbnQtc2l6ZS5odG1sCitmYXN0L2NhbnZhcy93ZWJnbC9wcmVtdWx0
aXBseWFscGhhLXRlc3QuaHRtbAogZmFzdC9jYW52YXMvd2ViZ2wvcHJvZ3JhbS10ZXN0Lmh0bWwK
IGZhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLXBhY2stYWxpZ25tZW50Lmh0bWwKIGZhc3Qv
Y2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLXRlc3QuaHRtbApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwY2IwOWU2
NzM5ZmZhYjg1ZmNkZDM5YzgwNzU2MGJmMjk0ZTdmZjYuLmM4YTJmMGRmM2RmODBjNTMwMzY0ZmFh
MmRkMTgwOWNlYjY1ZWE5ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAxMS0wMy0x
NCAgSm9obiBCYXVtYW4gIDxqYmF1bWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb24tcHJlbXVsdGlwbGllZC1hbHBoYSBj
YW52YXMgYXR0cmlidXRlIGlzIGlnbm9yZSBmb3IgdG9EYXRhVVJMLCBkcmF3SW1hZ2UsIHRleElt
YWdlMkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MjM4CisKKyAgICAgICBBdHRlbXB0IHRvIGdldCBhbiBJbWFnZURhdGEgKG5vbi1wcmVtdWx0aXBs
aWVkKSBmcm9tIGEgV2ViR0wgY2FudmFzCisgICAgICAgaW5zdGVhZCBvZiBnZXR0aW5nIGFuIElt
YWdlQnVmZmVyLCBzbyB0aGVyZSdzIGEgY2hhbmNlIHRoZSBkYXRhIGNhbiBiZQorICAgICAgIHBh
c3NlZCBzdHJhaWdodCB0aHJvdWdoIHRvIHRoZSBjb25zdW1lciB3aXRoIG5vIHByZW11bHRpcGxp
Y2F0aW9uCisgICAgICAgbmVjZXNzYXJ5LiBGaXhlcyBDaHJvbWl1bSBhbmQgU2FmYXJpLgorCisg
ICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL3ByZW11bHRpcGx5YWxwaGEtdGVzdC5odG1s
CisKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENhbnZhc0VsZW1lbnQ6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNHSW1hZ2VUb0RhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGFUb0RhdGFVUkwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5n
UmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VUb0RhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURhdGFUb0RhdGFVUkwp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVNdWx0aXBsaWVkQkdSQXRvUkdCKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkF0b1JHQik6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwcmVNdWx0aXBsaWVkQkdSQXRvUkdCQSk6CisgICAgICAgIChXZWJD
b3JlOjplbmNvZGVQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VFbmNvZGVyOjpl
bmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VF
bmNvZGVyLmg6CisKIDIwMTEtMDMtMTEgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCmluZGV4IDAwNjdkMjZmZDBiMjdjMjBiMjNiYTAzM2Q1N2NmMDdiMTY1Mjk2ODYu
LjdkMDhhNWRiMDkxOTliOTUxMTdiZGU0MGQwNDg4ZjY5NThmOTFiZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52
YXMuaCIKQEAgLTMzNywxNSArMzM4LDM3IEBAIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0CiAKICAg
ICBTdHJpbmcgbG93ZXJjYXNlTWltZVR5cGUgPSBtaW1lVHlwZS5sb3dlcigpOwogCi0gICAgbWFr
ZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUoKTsKLQogICAgIC8vIEZJWE1FOiBNYWtlIGlzU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nIHRocmVhZHNhZmUgKHRvIGFsbG93IHRoaXMg
bWV0aG9kIHRvIGJlIHVzZWQgb24gYSB3b3JrZXIgdGhyZWFkKS4KICAgICBpZiAobWltZVR5cGUu
aXNOdWxsKCkgfHwgIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKGxvd2VyY2FzZU1pbWVUeXBlKSkKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT50
b0RhdGFVUkwoImltYWdlL3BuZyIpOworICAgICAgICBsb3dlcmNhc2VNaW1lVHlwZSA9ICJpbWFn
ZS9wbmciOworCisjaWYgUExBVEZPUk0oQ0cpIHx8IFVTRShTS0lBKQorICAgIC8vIFRyeSB0byBn
ZXQgSW1hZ2VEYXRhIGZpcnN0LCBhcyB0aGF0IG1heSBhdm9pZCBsb3NzeSBjb252ZXJzaW9ucy4K
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoKTsKKworICAg
IGlmIChpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBJbWFnZURhdGFUb0RhdGFVUkwoKmltYWdl
RGF0YSwgbG93ZXJjYXNlTWltZVR5cGUsIHF1YWxpdHkpOworI2VuZGlmCiAKKyAgICBtYWtlUmVu
ZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOworICAgICAgCiAgICAgcmV0dXJuIGJ1ZmZlcigpLT50
b0RhdGFVUkwobG93ZXJjYXNlTWltZVR5cGUsIHF1YWxpdHkpOwogfQogCitQYXNzUmVmUHRyPElt
YWdlRGF0YT4gSFRNTENhbnZhc0VsZW1lbnQ6OmdldEltYWdlRGF0YSgpCit7CisgICAgaWYgKCFt
X2NvbnRleHQgfHwgIW1fY29udGV4dC0+aXMzZCgpKQorICAgICAgIHJldHVybiAwOworCisjaWYg
RU5BQkxFKFdFQkdMKSAgICAKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCA9IHN0YXRp
Y19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7CisKKyAgICBy
ZXR1cm4gY3R4LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworI2Vsc2UKKyAg
ICByZXR1cm4gMDsKKyNlbmRpZgorfQorCiBJbnRSZWN0IEhUTUxDYW52YXNFbGVtZW50Ojpjb252
ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVjdCYgbG9naWNhbFJlY3QpIGNvbnN0CiB7
CiAgICAgZmxvYXQgbGVmdCA9IGZsb29yZihsb2dpY2FsUmVjdC54KCkgKiBtX3BhZ2VTY2FsZUZh
Y3Rvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggYTJhNjA2
ZDRhZTY1NWQ5OTdmOTdiOWM5YjE2NjVjNTIzNWIyYjczNC4uODcwNmM2YjExMjE1MDIxZTEyZGJj
ZWY3YWU5ZWQxMzVmNjQwYWM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CiBjbGFzcyBJbWFn
ZTsKK2NsYXNzIEltYWdlRGF0YTsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3MgSW50U2l6ZTsK
IApAQCAtMTA1LDYgKzEwNiw3IEBAIHB1YmxpYzoKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkg
Y29uc3Q7CiAgICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhckNv
cGllZEltYWdlKCk7CisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YSgpOwog
CiAgICAgSW50UmVjdCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OwogICAgIEludFNpemUgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFNpemUm
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCmluZGV4IGNjN2EyM2I0MDA2YWQ1ZTVjMmI5NDgzMjI0NzQzN2MxMTcx
OThmODYuLmNiNDUxY2JhMzYzM2ZmY2E1NmEzNDg5NDlmNDMwMjVlOTVmZDJkOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cApAQCAtNDk1LDYgKzQ5NSwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQogICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXModGhpcyk7CiB9CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwor
fQorCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigp
OwpAQCAtMzA2Miw4ICszMDY3LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjaGVja09yaWdpbihjYW52YXMpOwotICAgIHRleEltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+
Y29waWVkSW1hZ2UoKSwKLSAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEg
PSBjYW52YXMtPmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAgIHRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1h
Z2VEYXRhLmdldCgpLCBlYyk7CisgICAgZWxzZQorICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZElt
YWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMzI1Miw4ICsz
MjYxLDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgY2hlY2tPcmlnaW4oY2FudmFzKTsKLSAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1h
Z2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIGVjKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52
YXMtPmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFn
ZURhdGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3Bp
ZWRJbWFnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAogI2lmIEVOQUJMRShWSURFTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5k
ZXggMTMxNDVjOGQxYTg4OTIxNmU2ZTIzY2ViYjIzNzQxN2UxNmE1NTQ1OC4uNmI4ODVkOTJlZDkx
YjQ1YTRiNDNjNmUxYzVkZjEwYWI3MzdmMjVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTI4Niw2ICsyODYsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
OwogCiAgICAgdm9pZCByZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqKTsKICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmlu
ZGV4IGE5ZGI2NTBiMDA5NmM3MWIwMGJjNTBhOWY1N2EwZDVkMjA3OTZhOTEuLjM5ZDgyNzQ3ODU1
ODhkYzMwYzA5MWExZDhjZTJkYmQwMDUwZWFjMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNzU3LDYgKzc1Nyw3
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKKyAgICBQYXNzUmVmUHRyPElt
YWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKIAogI2lmIFBMQVRG
T1JNKFFUKQogICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiBy
ZWN0KSBjb25zdDsKQEAgLTg1OSw2ICs4NjAsMTAgQEAgcHVibGljOgogICAgIC8vIGNvdWxkIG5v
dCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTAogICAg
IC8vIGltcGxlbWVudGF0aW9uLgogICAgIHZvaWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAg
ICAvLyBSZWFkIHJlbmRlcmluZyByZXN1bHRzIGludG8gYSBwaXhlbCBhcnJheSB3aXRoIHRoZSBz
YW1lIGZvcm1hdCBhcyB0aGUKKyAgICAvLyBiYWNrYnVmZmVyLgorICAgIHZvaWQgcmVhZFJlbmRl
cmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciogcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSk7CiAjZW5k
aWYKIAogICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggNDg4NzhkYTlm
NTIwOWMzZDBhOWY5YjA1ZjIyY2ZlMTY0MzU3ZjE4NS4uODYwZjU3NDc4YjM4MWE3YjVkYWM0MmEz
OGQ0YTU0NGNjMzJlMTg5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCkBAIC0xMzIsNiArMTMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgSW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBib29sJiBzdWNjZXNzKTsKICAgICB9Owog
CisjaWYgUExBVEZPUk0oQ0cpIHx8IFVTRShTS0lBKQorICAgIFN0cmluZyBJbWFnZURhdGFUb0Rh
dGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBpbnB1dCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgZG91YmxlKiBxdWFsaXR5KTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBJbWFnZUJ1ZmZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmluZGV4IDdjOGUzMTMwNWZjOWYxYjMy
MTVkMzJkZmQxOWQxMTFmZjYxNTkzMWQuLjNjOGY5NTkwN2FhZmZlYzQxOWE0ZDRmZjYzODQ2Y2Iy
YmU3NTc5YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQml0bWFw
SW1hZ2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNDk4LDIxICs0OTksOCBA
QCBzdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkKICNlbmRpZgogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0Citz
dGF0aWMgU3RyaW5nIENHSW1hZ2VUb0RhdGFVUkwoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KQogewotICAgIEFTU0VSVChNSU1F
VHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlw
ZSkpOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICghbV9hY2Nl
bGVyYXRlUmVuZGVyaW5nKQotICAgICAgICBpbWFnZS5hZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UuYWRvcHRD
Rih3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpKSk7Ci0jZW5kaWYKLQotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiAiZGF0YTos
IjsKLQogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0
YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwogICAgIGlmICghZGF0YSkK
ICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwpAQCAtNTMzLDcgKzUyMSw3IEBAIFN0cmluZyBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSog
cXVhbGl0eSkgY29uCiAgICAgICAgIGltYWdlUHJvcGVydGllcy5hZG9wdENGKENGRGljdGlvbmFy
eUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICB9CiAKLSAgICBDR0lt
YWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UuZ2V0KCksIGlt
YWdlUHJvcGVydGllcy5nZXQoKSk7CisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVz
dGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOwogICAgIENHSW1h
Z2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIAogICAgIFZlY3Rvcjxj
aGFyPiBvdXQ7CkBAIC01NDEsNCArNTI5LDQ2IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uCiAK
ICAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgb3V0
KTsKIH0KKworU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OworCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIGlmICghbV9hY2NlbGVy
YXRlUmVuZGVyaW5nKQorICAgICAgICBpbWFnZS5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKKyNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQorICAgIGVsc2UKKyAgICAgICAgaW1hZ2UuYWRvcHRDRih3
a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgp
KSk7CisjZW5kaWYKKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsK
KworICAgIHJldHVybiBDR0ltYWdlVG9EYXRhVVJMKGltYWdlLmdldCgpLCBtaW1lVHlwZSwgcXVh
bGl0eSk7Cit9CisKK1N0cmluZyBJbWFnZURhdGFUb0RhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKK3sK
KyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICAgICAgCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwor
ICAgIAorICAgIGRhdGFQcm92aWRlci5hZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERh
dGEoMCwgc291cmNlLmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICogc291cmNlLndpZHRoKCkgKiBz
b3VyY2UuaGVpZ2h0KCksIDApKTsKKyAgICAKKyAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAg
ICAgcmV0dXJuICJkYXRhOiwiOworCisgICAgaW1hZ2UuYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNv
dXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRoKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHQ29sb3JTcGFjZUNyZWF0ZURldmlj
ZVJHQigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYUxhc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFs
c2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgIAorICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiAiZGF0
YTosIjsKKworICAgIHJldHVybiBDR0ltYWdlVG9EYXRhVVJMKGltYWdlLmdldCgpLCBtaW1lVHlw
ZSwgcXVhbGl0eSk7Cit9CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAppbmRleCBjMjI0ZTIwN2MzMTZiODBjNDc2YWEzYzQxZmM4MWQ2
MDM2YzVhY2ViLi4yNTQ3YjUzNGZmMDY1Y2RkZDUyZDc0ZGFhMmFhYjc5M2QzNjRiZGZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiSW50MzJBcnJheS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiVWludDhBcnJheS5oIgpAQCAtNzAsMjEgKzcxLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCiAgICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAh
c3RkOjpzdHJzdHIoZXh0ZW5zaW9ucywgIkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
KQogICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKICAgICB9Ci0gICAgLy8g
RklYTUU6IGluc3RlYWQgb2YgZW5mb3JjaW5nIHByZW11bHRpcGxpZWRBbHBoYSA9IHRydWUsIGlt
cGxlbWVudCB0aGUKLSAgICAvLyBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gcHJlbXVsdGlwbGllZEFs
cGhhID0gZmFsc2UgaXMgcmVxdWVzdGVkLgotICAgIG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhh
ID0gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywg
aW50IHBpeGVsc1NpemUpCiB7Ci0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRl
eHQtPmNhbnZhcygpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVm
ZmVyKCk7Ci0KLSAgICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7Ci0gICAgaW50
IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKLQotICAgIE93bkFycmF5
UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNo
YXJbdG90YWxCeXRlc10pOwotICAgIGlmICghcGl4ZWxzKQorICAgIGlmIChwaXhlbHNTaXplIDwg
bV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0KQogICAgICAgICByZXR1cm47CiAK
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTExMSwxOCArMTAyLDYyIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqIGNvCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7
CiAgICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3Vy
cmVudEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMu
Z2V0KCkpOworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJl
bnRIZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsK
IAogICAgIGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhlbFN0
b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7CiAKICAgICBpZiAobXVzdFJl
c3RvcmVGQk8pCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX2JvdW5kRkJPKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CisgICAg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKworICAgIGludCBy
b3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5
dGVzICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4g
cGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7Cisg
ICAgaWYgKCFwaXhlbHMpCisgICAgICAgIHJldHVybjsKKworICAgIHJlYWRSZW5kZXJpbmdSZXN1
bHRzKHBpeGVscy5nZXQoKSwgdG90YWxCeXRlcyk7CisKKyAgICBpZiAoIW1fYXR0cnMucHJlbXVs
dGlwbGllZEFscGhhKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsg
aSArPSA0KSB7CisgICAgICAgICAgICAvLyBQcmVtdWx0aXBseSBhbHBoYQorICAgICAgICAgICAg
cGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsg
M10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4
ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kg
KyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUp
OworICAgICAgICB9CisgICAgfQogCiAgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1f
Y3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsCiAgICAgICAgICAgICAgICAgICBjYW52YXMt
PndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpKTsKIH0KIAorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgLy8gUmVhZGlu
ZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hp
Y2ggaXMKKyAgICAvLyBsb3NzeQorICAgIGlmIChtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJ
bWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQp
KTsKKyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgp
LT5kYXRhKCk7CisgICAgaW50IHRvdGFsQnl0ZXMgPSA0ICogbV9jdXJyZW50V2lkdGggKiBtX2N1
cnJlbnRIZWlnaHQ7CisKKyAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMsIHRvdGFsQnl0
ZXMpOworCisgICAgLy8gQ29udmVydCB0byBSR0JBCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0
b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tp
ICsgMl0pOworCisgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7Cit9CisKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGlm
ICghbV9jb250ZXh0T2JqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCBiODQ5MjE0MDA2MWVj
MTcxNDMwYzQxZmM2MjY0N2ZmMmU3ZmZjZTgxLi40MjQxYjAwZTZmN2MzYmIxM2QwNzMzYmU1NDNh
NzIzMzJmMmZiOWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtNTI1LDYgKzUyNSwxMyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhD
YW52YXNSZW5kZXJpbmdDb250ZXh0KiBjbwogICAgIHBhaW50KHBhaW50ZXIsIFFSZWN0KFFQb2lu
dCgwLCAwKSwgUVNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpKTsKIH0KIAor
UGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgaW1w
bGVtZW50ZWQgZm9yIHByb3BlciBub24tcHJlbXVsdGlwbGllZC1hbHBoYQorICAgIC8vIHN1cHBv
cnQuCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50KFFQ
YWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdCYgcmVjdCkgY29uc3QKIHsKICNpZiBRVF9WRVJT
SU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNywgMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAppbmRleCAy
NzIxNTIzNmFmNTc0MTM4YWI0YTI1YTA4OWFiYjZjMWVhZDVjZDdiLi5iODljNjhkMmNhZjJlNmU0
ZGNiMjBlYjU3ODk1NTg3NDcxOWFkM2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBAIC0zNDEsNiAr
MzQxLDI4IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoQnl0
ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvCiAgICAgcHV0SW1hZ2VEYXRhPFByZW11
bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBjb250
ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0RGV2aWNlKCksIG1fc2l6ZSk7
CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIFN0cmluZyBJbWFnZVRvRGF0YVVS
TChUJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0
eSkKK3sKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gZW5jb2RlZEltYWdlOworICAgIGlmICht
aW1lVHlwZSA9PSAiaW1hZ2UvanBlZyIpIHsKKyAgICAgICAgaW50IGNvbXByZXNzaW9uUXVhbGl0
eSA9IEpQRUdJbWFnZUVuY29kZXI6OkRlZmF1bHRDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAg
IGlmIChxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApCisgICAg
ICAgICAgICBjb21wcmVzc2lvblF1YWxpdHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICog
MTAwICsgMC41KTsKKyAgICAgICAgaWYgKCFKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUoc291cmNl
LCBjb21wcmVzc2lvblF1YWxpdHksICZlbmNvZGVkSW1hZ2UpKQorICAgICAgICAgICAgcmV0dXJu
ICJkYXRhOiwiOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghUE5HSW1hZ2VFbmNvZGVyOjpl
bmNvZGUoc291cmNlLCAmZW5jb2RlZEltYWdlKSkKKyAgICAgICAgICAgIHJldHVybiAiZGF0YTos
IjsKKyAgICAgICAgQVNTRVJUKG1pbWVUeXBlID09ICJpbWFnZS9wbmciKTsKKyAgICB9CisKKyAg
ICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoKnJlaW50ZXJwcmV0
X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4oJmVuY29kZWRJbWFnZSksIGJhc2U2NERhdGEpOworCisgICAg
cmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NERh
dGEpOworfQorCiBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0CiB7CiAgICAgQVNTRVJUKE1JTUVU
eXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBl
KSk7CkBAIC0zNTgsMjMgKzM4MCwxMyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbgogICAgICAg
ICBpZiAoIWRldmljZS0+cmVhZFBpeGVscyhib3VuZHMsICZiaXRtYXApKQogICAgICAgICAgICAg
cmV0dXJuICJkYXRhOiwiOwogICAgIH0KLSAgICAKLSAgICBpZiAobWltZVR5cGUgPT0gImltYWdl
L2pwZWciKSB7Ci0gICAgICAgIGludCBjb21wcmVzc2lvblF1YWxpdHkgPSBKUEVHSW1hZ2VFbmNv
ZGVyOjpEZWZhdWx0Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBpZiAocXVhbGl0eSAmJiAq
cXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKQotICAgICAgICAgICAgY29tcHJlc3Np
b25RdWFsaXR5ID0gc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMCArIDAuNSk7Ci0gICAg
ICAgIGlmICghSlBFR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGJpdG1hcCwgY29tcHJlc3Npb25RdWFs
aXR5LCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAoIVBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGJpdG1hcCwgJmVu
Y29kZWRJbWFnZSkpCi0gICAgICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0gICAgICAgIEFTU0VS
VChtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7Ci0gICAgfQogCi0gICAgVmVjdG9yPGNoYXI+IGJh
c2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKCpyZWludGVycHJldF9jYXN0PFZlY3RvcjxjaGFy
Pio+KCZlbmNvZGVkSW1hZ2UpLCBiYXNlNjREYXRhKTsKKyAgICByZXR1cm4gSW1hZ2VUb0RhdGFV
UkwoYml0bWFwLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CiAKLSAgICByZXR1cm4gbWFrZVN0cmlu
ZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RGF0YSk7CitTdHJpbmcgSW1h
Z2VEYXRhVG9EYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpCit7CisgICAgcmV0dXJuIEltYWdlVG9EYXRh
VVJMKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9z
a2lhL0pQRUdJbWFnZUVuY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VFbmNvZGVyLmNwcAppbmRleCBiZTNjOTJhZjI0YzM1Yzky
ZGQxNGI3NWE0ODE3YWEyOWIyYjNiYjhiLi41MDY0ZTM4MWZhNThjODJmY2M4MjM3OWZkYmZiNTdh
YzJjOTM1Mjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNv
ZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5jcHAKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKUEVHSW1hZ2VFbmNvZGVyLmgi
CiAKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVk
ZSAiU2tCaXRtYXAuaCIKICNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgpAQCAtNzksMjIgKzgwLDI5
IEBAIHN0YXRpYyB2b2lkIGhhbmRsZUVycm9yKGpfY29tbW9uX3B0ciBjb21tb24pCiAgICAgbG9u
Z2ptcCgqanVtcEJ1ZmZlclB0ciwgLTEpOwogfQogCi1zdGF0aWMgdm9pZCBwcmVNdWx0aXBsaWVk
QkdSQXRvUkdCKGNvbnN0IFNrUE1Db2xvciogaW5wdXQsIHVuc2lnbmVkIGludCBwaXhlbHMsIHVu
c2lnbmVkIGNoYXIqIG91dHB1dCkKK3N0YXRpYyB2b2lkIHByZU11bHRpcGxpZWRCR1JBdG9SR0Io
Y29uc3Qgdm9pZCogcGl4ZWxzLCB1bnNpZ25lZCBpbnQgcGl4ZWxDb3VudCwgdW5zaWduZWQgY2hh
ciogb3V0cHV0KQogewotICAgIGZvciAoOyBwaXhlbHMtLSA+IDA7ICsraW5wdXQpIHsKKyAgICBj
b25zdCBTa1BNQ29sb3IqIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2tQTUNvbG9yKj4ocGl4
ZWxzKTsKKyAgICBmb3IgKDsgcGl4ZWxDb3VudC0tID4gMDsgKytpbnB1dCkgewogICAgICAgICAq
b3V0cHV0KysgPSBTa0dldFBhY2tlZFIzMigqaW5wdXQpOwogICAgICAgICAqb3V0cHV0KysgPSBT
a0dldFBhY2tlZEczMigqaW5wdXQpOwogICAgICAgICAqb3V0cHV0KysgPSBTa0dldFBhY2tlZEIz
MigqaW5wdXQpOwogICAgIH0KIH0KIAotYm9vbCBKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUoY29u
c3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiog
b3V0cHV0KQorc3RhdGljIHZvaWQgUkdCQXRvUkdCKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0
LCB1bnNpZ25lZCBpbnQgcGl4ZWxzLCB1bnNpZ25lZCBjaGFyKiBvdXRwdXQpCiB7Ci0gICAgaWYg
KGJpdG1hcC5jb25maWcoKSAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCi0gICAgICAg
IHJldHVybiBmYWxzZTsgLy8gT25seSBzdXBwb3J0IEFSR0IgMzIgYnBwIHNraWEgYml0bWFwcy4K
KyAgICBmb3IgKDsgcGl4ZWxzLS0gPiAwOyBpbnB1dCArPSA0KSB7CisgICAgICAgICpvdXRwdXQr
KyA9IGlucHV0WzBdOworICAgICAgICAqb3V0cHV0KysgPSBpbnB1dFsxXTsKKyAgICAgICAgKm91
dHB1dCsrID0gaW5wdXRbMl07CisgICAgfQorfQogCi0gICAgU2tBdXRvTG9ja1BpeGVscyBiaXRt
YXBMb2NrKGJpdG1hcCk7Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUoYml0bWFwLndpZHRoKCksIGJp
dG1hcC5oZWlnaHQoKSk7CitzdGF0aWMgYm9vbCBlbmNvZGVQaXhlbHMoY29uc3QgSW50U2l6ZSYg
aW5wdXRTaXplLCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcHJlbXVsdGlwbGllZCwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25lZCBjaGFy
Piogb3V0cHV0KQoreworICAgIEludFNpemUgaW1hZ2VTaXplKGlucHV0U2l6ZSk7CiAgICAgaW1h
Z2VTaXplLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKICAgICBKUEVHT3V0cHV0QnVmZmVyIGRlc3Rp
bmF0aW9uOwogICAgIGRlc3RpbmF0aW9uLm91dHB1dCA9IG91dHB1dDsKQEAgLTEyNiwxMiArMTM0
LDE0IEBAIGJvb2wgSlBFR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRt
YXAsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduCiAgICAganBlZ19zZXRfcXVhbGl0eSgmY2lu
Zm8sIHF1YWxpdHksIFRSVUUpOwogICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZvLCBUUlVF
KTsKIAotICAgIGNvbnN0IFNrUE1Db2xvciogcGl4ZWxzID0gc3RhdGljX2Nhc3Q8U2tQTUNvbG9y
Kj4oYml0bWFwLmdldFBpeGVscygpKTsKICAgICByb3cucmVzaXplKGNpbmZvLmltYWdlX3dpZHRo
ICogY2luZm8uaW5wdXRfY29tcG9uZW50cyk7CiAgICAgd2hpbGUgKGNpbmZvLm5leHRfc2Nhbmxp
bmUgPCBjaW5mby5pbWFnZV9oZWlnaHQpIHsKLSAgICAgICAgcHJlTXVsdGlwbGllZEJHUkF0b1JH
QihwaXhlbHMsIGNpbmZvLmltYWdlX3dpZHRoLCByb3cuZGF0YSgpKTsKKyAgICAgICAgaWYgKHBy
ZW11bHRpcGxpZWQpCisgICAgICAgICAgICBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCKHBpeGVscywg
Y2luZm8uaW1hZ2Vfd2lkdGgsIHJvdy5kYXRhKCkpOworICAgICAgICBlbHNlIAorICAgICAgICAg
ICAgUkdCQXRvUkdCKHBpeGVscywgY2luZm8uaW1hZ2Vfd2lkdGgsIHJvdy5kYXRhKCkpOwogICAg
ICAgICBqcGVnX3dyaXRlX3NjYW5saW5lcygmY2luZm8sIHJvdy5kYXRhU2xvdCgpLCAxKTsKLSAg
ICAgICAgcGl4ZWxzICs9IGNpbmZvLmltYWdlX3dpZHRoOworICAgICAgICBwaXhlbHMgKz0gY2lu
Zm8uaW1hZ2Vfd2lkdGggKiA0OwogICAgIH0KIAogICAgIGpwZWdfZmluaXNoX2NvbXByZXNzKCZj
aW5mbyk7CkBAIC0xMzksNCArMTQ5LDIyIEBAIGJvb2wgSlBFR0ltYWdlRW5jb2Rlcjo6ZW5jb2Rl
KGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlBFR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXAsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1
dCkKK3sKKyAgICBpZiAoYml0bWFwLmNvbmZpZygpICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPbmx5IHN1cHBvcnQgQVJHQiAzMiBicHAg
c2tpYSBiaXRtYXBzLgorCisgICAgU2tBdXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKGJpdG1hcCk7
CisgICAgSW50U2l6ZSBpbWFnZVNpemUoYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7
CisKKyAgICByZXR1cm4gZW5jb2RlUGl4ZWxzKGltYWdlU2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhciAqPihiaXRtYXAuZ2V0UGl4ZWxzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
dHJ1ZSwgcXVhbGl0eSwgb3V0cHV0KTsKK30KKworYm9vbCBKUEVHSW1hZ2VFbmNvZGVyOjplbmNv
ZGUoY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWdu
ZWQgY2hhcj4qIG91dHB1dCkKK3sKKyAgICByZXR1cm4gZW5jb2RlUGl4ZWxzKGltYWdlRGF0YS5z
aXplKCksIGltYWdlRGF0YS5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UsIHF1YWxpdHksIG91dHB1dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJz
L3NraWEvSlBFR0ltYWdlRW5jb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VFbmNvZGVyLmgKaW5kZXggZjJhYzUyZDBlYWMyZjBjNTc5
ZjAyYWNiYmE0MDlkOGRjNTU1MjQyZS4uNTQwODA5MTQ2Y2QzNjgwMTNjOTQzMWE1N2M4YTAzM2U2
Y2VlOTY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvc2tpYS9KUEVHSW1hZ2VFbmNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VFbmNvZGVyLmgKQEAgLTM3LDEwICszNywxMyBA
QCBjbGFzcyBTa0JpdG1hcDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURh
dGE7CisKIGNsYXNzIEpQRUdJbWFnZUVuY29kZXIgewogcHVibGljOgogICAgIC8vIEVuY29kZSB0
aGUgaW5wdXQgYml0bWFwIHdpdGggYSBjb21wcmVzc2lvbiBxdWFsaXR5IGluIFswLTEwMF0uCiAg
ICAgc3RhdGljIGJvb2wgZW5jb2RlKGNvbnN0IFNrQml0bWFwJiwgaW50IHF1YWxpdHksIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiopOworICAgIHN0YXRpYyBib29sIGVuY29kZShjb25zdCBJbWFnZURh
dGEmLCBpbnQgcXVhbGl0eSwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+Kik7CiAKICAgICAvLyBGb3Ig
Y2FsbGVyczogcHJvdmlkZSBhIHJlYXNvbmFibGUgY29tcHJlc3Npb24gcXVhbGl0eSBkZWZhdWx0
LgogICAgIGVudW0gUXVhbGl0eSB7IERlZmF1bHRDb21wcmVzc2lvblF1YWxpdHkgPSA5MiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9Q
TkdJbWFnZUVuY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCmluZGV4IDc4ZjczN2UzMGM4OThmMTlhMDFmMjE0
ZmQzYWIzNWY1ZjU5N2E4MTQuLmZkYmI0Y2U0MmM0NTUzYmEwMWYwYTNhNzYwN2RjNjk3ZmZlMTU1
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3Nr
aWEvUE5HSW1hZ2VFbmNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQTkdJbWFnZUVuY29kZXIuaCIKIAorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJTa0JpdG1h
cC5oIgogI2luY2x1ZGUgIlNrQ29sb3JQcml2LmgiCkBAIC00NiwxMSArNDcsMTIgQEAgc3RhdGlj
IHZvaWQgd3JpdGVPdXRwdXQocG5nX3N0cnVjdHAgcG5nLCBwbmdfYnl0ZXAgZGF0YSwgcG5nX3Np
emVfdCBzaXplKQogICAgIHN0YXRpY19jYXN0PFZlY3Rvcjx1bnNpZ25lZCBjaGFyPio+KHBuZy0+
aW9fcHRyKS0+YXBwZW5kKGRhdGEsIHNpemUpOwogfQogCi1zdGF0aWMgdm9pZCBwcmVNdWx0aXBs
aWVkQkdSQXRvUkdCQShjb25zdCBTa1BNQ29sb3IqIGlucHV0LCBpbnQgcGl4ZWxzLCB1bnNpZ25l
ZCBjaGFyKiBvdXRwdXQpCitzdGF0aWMgdm9pZCBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCQShjb25z
dCB2b2lkKiBwaXhlbHMsIGludCBwaXhlbENvdW50LCB1bnNpZ25lZCBjaGFyKiBvdXRwdXQpCiB7
CiAgICAgc3RhdGljIGNvbnN0IFNrVW5QcmVNdWx0aXBseTo6U2NhbGUqIHNjYWxlID0gU2tVblBy
ZU11bHRpcGx5OjpHZXRTY2FsZVRhYmxlKCk7CisgICAgY29uc3QgU2tQTUNvbG9yKiBpbnB1dCA9
IHN0YXRpY19jYXN0PGNvbnN0IFNrUE1Db2xvcio+KHBpeGVscyk7CiAKLSAgICBmb3IgKDsgcGl4
ZWxzLS0gPiAwOyArK2lucHV0KSB7CisgICAgZm9yICg7IHBpeGVsQ291bnQtLSA+IDA7ICsraW5w
dXQpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgYWxwaGEgPSBTa0dldFBhY2tlZEEzMigqaW5w
dXQpOwogICAgICAgICBpZiAoKGFscGhhICE9IDApICYmIChhbHBoYSAhPSAyNTUpKSB7CiAgICAg
ICAgICAgICAqb3V0cHV0KysgPSBTa1VuUHJlTXVsdGlwbHk6OkFwcGx5U2NhbGUoc2NhbGVbYWxw
aGFdLCBTa0dldFBhY2tlZFIzMigqaW5wdXQpKTsKQEAgLTY2LDEzICs2OCwxMCBAQCBzdGF0aWMg
dm9pZCBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCQShjb25zdCBTa1BNQ29sb3IqIGlucHV0LCBpbnQg
cGl4ZWxzLCB1bnNpZ25lZAogICAgIH0KIH0KIAotYm9vbCBQTkdJbWFnZUVuY29kZXI6OmVuY29k
ZShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkK
K3N0YXRpYyBib29sIGVuY29kZVBpeGVscyhjb25zdCBJbnRTaXplJiBpbnB1dFNpemUsIHVuc2ln
bmVkIGNoYXIqIHBpeGVscywgCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0
aXBsaWVkLCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKIHsKLSAgICBpZiAoYml0bWFw
LmNvbmZpZygpICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBPbmx5IHN1cHBvcnQgQVJHQiAzMiBicHAgc2tpYSBiaXRtYXBzLgotCi0gICAg
U2tBdXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKGJpdG1hcCk7Ci0gICAgSW50U2l6ZSBpbWFnZVNp
emUoYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBpbWFnZVNp
emUoaW5wdXRTaXplKTsKICAgICBpbWFnZVNpemUuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwogICAg
IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiByb3c7CiAKQEAgLTEwMCwxMiArOTksMTQgQEAgYm9vbCBQ
TkdJbWFnZUVuY29kZXI6OmVuY29kZShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBWZWN0b3I8dW5z
aWduZWQgY2hhcj4qIG91dHAKICAgICAgICAgICAgICAgICAgOCwgUE5HX0NPTE9SX1RZUEVfUkdC
X0FMUEhBLCAwLCAwLCAwKTsKICAgICBwbmdfd3JpdGVfaW5mbyhwbmcsIGluZm8pOwogCi0gICAg
Y29uc3QgU2tQTUNvbG9yKiBwaXhlbHMgPSBzdGF0aWNfY2FzdDxTa1BNQ29sb3IqPihiaXRtYXAu
Z2V0UGl4ZWxzKCkpOwotICAgIHJvdy5yZXNpemUoaW1hZ2VTaXplLndpZHRoKCkgKiBiaXRtYXAu
Ynl0ZXNQZXJQaXhlbCgpKTsKKyAgICByb3cucmVzaXplKGltYWdlU2l6ZS53aWR0aCgpICogc2l6
ZW9mKFNrUE1Db2xvcikpOwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VTaXplLmhlaWdo
dCgpOyArK3kpIHsKLSAgICAgICAgcHJlTXVsdGlwbGllZEJHUkF0b1JHQkEocGl4ZWxzLCBpbWFn
ZVNpemUud2lkdGgoKSwgcm93LmRhdGEoKSk7Ci0gICAgICAgIHBuZ193cml0ZV9yb3cocG5nLCBy
b3cuZGF0YSgpKTsKLSAgICAgICAgcGl4ZWxzICs9IGltYWdlU2l6ZS53aWR0aCgpOworICAgICAg
ICBpZiAocHJlbXVsdGlwbGllZCkgeworICAgICAgICAgICAgcHJlTXVsdGlwbGllZEJHUkF0b1JH
QkEocGl4ZWxzLCBpbWFnZVNpemUud2lkdGgoKSwgcm93LmRhdGEoKSk7CisgICAgICAgICAgICBw
bmdfd3JpdGVfcm93KHBuZywgcm93LmRhdGEoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcG5nX3dyaXRlX3JvdyhwbmcsIHBpeGVscyk7CisgICAgICAgIHBpeGVscyArPSBpbWFnZVNp
emUud2lkdGgoKSAqIDQ7CiAgICAgfQogCiAgICAgcG5nX3dyaXRlX2VuZChwbmcsIGluZm8pOwpA
QCAtMTEzLDQgKzExNCwxOSBAQCBib29sIFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXAsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cAogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBi
aXRtYXAsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQoreworICAgIGlmIChiaXRtYXAu
Y29uZmlnKCkgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQorICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIE9ubHkgc3VwcG9ydCBBUkdCIDMyIGJwcCBza2lhIGJpdG1hcHMuCisKKyAgICBT
a0F1dG9Mb2NrUGl4ZWxzIGJpdG1hcExvY2soYml0bWFwKTsKKyAgICBJbnRTaXplIGltYWdlU2l6
ZShiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsKKyAgICByZXR1cm4gZW5jb2RlUGl4
ZWxzKGltYWdlU2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGJpdG1hcC5nZXRQaXhl
bHMoKSksIHRydWUsIG91dHB1dCk7Cit9CisKK2Jvb2wgUE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUo
Y29uc3QgSW1hZ2VEYXRhJiBiaXRtYXAsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQor
eworICAgIHJldHVybiBlbmNvZGVQaXhlbHMoYml0bWFwLnNpemUoKSwgYml0bWFwLmRhdGEoKS0+
ZGF0YSgpLT5kYXRhKCksIGZhbHNlLCBvdXRwdXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9z
a2lhL1BOR0ltYWdlRW5jb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5j
b2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuaAppbmRleCBiOGRmZWMzYmIzYmQ1NDcwN2NiMDUz
MTBiODQwN2IzOGVhOTUwMGMyLi4wNjFkN2FjYTJjZWU4YThiMDNlZmM0MGUzNDYyNjMzNGVlMjJm
YmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9z
a2lhL1BOR0ltYWdlRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmgKQEAgLTM3LDEwICszNywxMyBAQCBjbGFz
cyBTa0JpdG1hcDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisK
IC8vIEludGVyZmFjZSBmb3IgZW5jb2RpbmcgUE5HIGRhdGEuIFRoaXMgaXMgYSB3cmFwcGVyIGFy
b3VuZCBsaWJwbmcuCiBjbGFzcyBQTkdJbWFnZUVuY29kZXIgewogcHVibGljOgogICAgIHN0YXRp
YyBib29sIGVuY29kZShjb25zdCBTa0JpdG1hcCYsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0
cHV0KTsKKyAgICBzdGF0aWMgYm9vbCBlbmNvZGUoY29uc3QgSW1hZ2VEYXRhJiwgVmVjdG9yPHVu
c2lnbmVkIGNoYXI+KiBvdXRwdXQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiMWUzOTY0NjI2NzFkMTU2MjlhYzIwYzRkMDI1Nzk2
NmU5ZDA2ZmQ0Li4wMWE0YzRkMzNlZGI4YTEzMjY3YjlkYjQ5ZTc3Mzg5OTgzMDQwOTk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTAzLTE0ICBKb2hu
IEJhdW1hbiAgPGpiYXVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vbi1wcmVtdWx0aXBsaWVkLWFscGhhIGNhbnZhcyBh
dHRyaWJ1dGUgaXMgaWdub3JlIGZvciB0b0RhdGFVUkwsIGRyYXdJbWFnZSwgdGV4SW1hZ2UyRAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMzgKKwor
ICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBhIHdlYmdsIGNvbnRleHQgaW50byBhbiBJ
bWFnZURhdGEuCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgICog
c3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDoKKwogMjAxMS0wMy0xMSAgRGF2aWQgTGV2
aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUm9sbG91dCB0aGUgY2hyb21pdW0g
ZGVwcyByb2xsIGFzIGl0IGFkZHMgYSBkZXBlbmRlbmN5IG9uIGEgaGVhZGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0u
Y3BwCmluZGV4IDNkOTM3YWMwMzkwMzc1M2Q3MDE4MzNiZmE4NjVhZWM2NWExNjllMWQuLjhkMTJj
NGQ1MWU1NTZmMGNlMzJlYjM2M2VkNzE4ODUwZDM1N2Y4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCkBA
IC0yMDAsNiArMjAwLDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29uCiAKICAgICBtX2ltcGwt
PnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCA0ICogbV9pbXBsLT53aWR0aCgpICogbV9pbXBs
LT5oZWlnaHQoKSk7CiAKKyAgICBpZiAoIW1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5w
cmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogbV9p
bXBsLT53aWR0aCgpICogbV9pbXBsLT5oZWlnaHQoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJ1ZmZlclNpemU7IGkgKz0gNCkgeworICAgICAgICAgICAgcGl4ZWxzW2kgKyAw
XSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwor
ICAgICAgICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAq
IHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6
bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICB9
CisgICAgfQorCiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXAucmVhZHlU
b0RyYXcoKSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGRyYXcgdGhlIHJlc2l6aW5nIGJpdG1h
cCBpbnRvIHRoZSBjYW52YXMncyBiYWNraW5nIHN0b3JlLgpAQCAtMjE4LDYgKzIyOCwyMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbgogI2VuZGlmCiB9CiAKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSgpCit7CisgICAgaWYgKG1faW1wbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0
aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9pbXBsLT53aWR0aCgp
LCBtX2ltcGwtPmhlaWdodCgpKSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VE
YXRhLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAq
IG1faW1wbC0+d2lkdGgoKSAqIG1faW1wbC0+aGVpZ2h0KCk7CisKKyAgICBtX2ltcGwtPnJlYWRC
YWNrRnJhbWVidWZmZXIocGl4ZWxzLCBidWZmZXJTaXplKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ld
LCBwaXhlbHNbaSArIDJdKTsKKworICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOworfQor
CiBib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50c0ludG9DYW52YXNCdWZmZXIo
KSBjb25zdAogewogICAgIC8vIElmIHRoZSBncHUgY29tcG9zaXRvciBpcyBvbiB0aGVuIHNraXAg
dGhlIHJlYWRiYWNrIGFuZCBzb2Z0d2FyZSByZW5kZXJpbmcgcGF0aC4KQEAgLTEwNTksNiArMTA4
Niw3IEBAIERFTEVHQVRFX1RPX0lOVEVSTkFMXzYodmVydGV4QXR0cmliUG9pbnRlciwgR0MzRHVp
bnQsIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEYm9vCiBERUxFR0FURV9UT19JTlRFUk5BTF80KHZp
ZXdwb3J0LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKIAogREVMRUdB
VEVfVE9fSU5URVJOQUxfMShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCopCitERUxFR0FURV9UT19JTlRFUk5BTF9SKHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhLCBQYXNzUmVmUHRyPEltYWdlRGF0YT4pCiAKIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCmlu
ZGV4IGM4ZjdjN2E3YTc0MWM0N2RjMzUyMzU5ZDYxYThjYTY3YTJlNDk0ODUuLmI1MTdlNjBiOGRm
OWViZjcxMmY2NTYyOThmZGQ1NjA1YjhlZDBlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgKQEAgLTY3LDYgKzY3
LDcgQEAgcHVibGljOgogICAgIEludFNpemUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsK
IAogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCopOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0ltYWdlRGF0YSgpOwogICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0
OwogCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>