<?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>50591</bug_id>
          
          <creation_ts>2010-12-06 14:42:31 -0800</creation_ts>
          <short_desc>Adopt new CG API for canvas</short_desc>
          <delta_ts>2010-12-13 12:36:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</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>
          <dependson>50717</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matthew Delaney">mdelaney7</reporter>
          <assigned_to name="Matthew Delaney">mdelaney7</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>charles-webkit</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>oliver</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>317855</commentid>
    <comment_count>0</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-12-06 14:42:31 -0800</bug_when>
    <thetext>Adopt new CG API for &lt;canvas&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319765</commentid>
    <comment_count>1</comment_count>
      <attachid>76131</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-12-09 16:11:02 -0800</bug_when>
    <thetext>Created attachment 76131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319778</commentid>
    <comment_count>2</comment_count>
      <attachid>76131</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-09 16:25:50 -0800</bug_when>
    <thetext>Comment on attachment 76131
Patch

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

r=me but please address command and/or file followup bugs.

&gt; WebCore/html/HTMLCanvasElement.cpp:374
&gt; +    m_imageBuffer = ImageBuffer::create(size, ColorSpaceDeviceRGB, true);

We try to avoid boolean params that are hard to understand at the call site. It&apos;s difficult to know what &quot;true&quot; means here. Enums are preferred.

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:56
&gt; +RetainPtr&lt;IOSurfaceRef&gt; createIOSurface(unsigned width, unsigned height)

Use IntSize.

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:62
&gt; +#if TARGET_RT_LITTLE_ENDIAN
&gt; +    unsigned pixelFormat = &apos;BGRA&apos;;
&gt; +#else
&gt; +    unsigned pixelFormat = 32;
&gt; +#endif

These seem like magic.

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:65
&gt; +    unsigned long bytesPerRow = IOSurfaceAlignProperty(kIOSurfaceBytesPerRow, width*bytesPerElement);
&gt; +    unsigned long allocSize = IOSurfaceAlignProperty(kIOSurfaceAllocSize, height*bytesPerRow);

Are these prone to overflow? What happens when someone tries to make a huge canvas?

Spaces around the * please.

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:90
&gt; +    RetainPtr&lt;IOSurfaceRef&gt; surface(AdoptCF, IOSurfaceCreate(dict.get()));
&gt; +    return surface;

You can just
return RetainPtr&lt;IOSurfaceRef&gt; surface(AdoptCF....)

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:146
&gt; +#if !defined(BUILDING_ON_TIGER) &amp;&amp; !defined(BUILDING_ON_LEOPARD) &amp;&amp; !defined(BUILDING_ON_SNOW_LEOPARD)
&gt; +    else {

Maybe ASSERT(! m_accelerateRendering) if on earlier systems. Or just force m_accelerateRendering to false.

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:205
&gt; +        RefPtr&lt;Image&gt; copy = copyImage();

You should add a comment about why always copying is OK.

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:224
&gt;          RefPtr&lt;Image&gt; copy = copyImage();

Ditto.

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:305
&gt; +                uint32_t pixel = ((uint32_t*)(srcRows + basex))[0]; // (aRGB)
&gt; +                unsigned char alpha = (pixel &amp; 0xff000000U) &gt;&gt; 24;
&gt; +                if (multiplied == Unmultiplied &amp;&amp; alpha) {
&gt; +                    pixel = ((pixel &amp; 0xff000000U)
&gt; +                          | (((((pixel &gt;&gt; 16) &amp; 255) * 255) / alpha))
&gt; +                          | (((((pixel &gt;&gt; 8) &amp; 255) * 255) / alpha) &lt;&lt; 8)
&gt; +                          | ((((pixel  &amp; 255) * 255) / alpha) &lt;&lt; 16));
&gt; +                } else
&gt; +                    pixel = ((pixel &amp; 0xff000000U)
&gt; +                          | ((pixel &gt;&gt; 16) &amp; 255)
&gt; +                          | (((pixel &gt;&gt; 8) &amp; 255) &lt;&lt; 8)
&gt; +                          | ((pixel &amp; 255) &lt;&lt; 16));
&gt; +                ((uint32_t*)(destRows + basex))[0] = pixel;
&gt; +            }

Does this work for little- and big-endian? Do we have tests that can be used to determine this?

&gt; WebCore/rendering/RenderLayerCompositor.cpp:307
&gt; +#if PLATFORM(MAC) &amp;&amp; PLATFORM(CA)
&gt; +            if (layer-&gt;renderer()-&gt;isCanvas()) {
&gt; +                HTMLCanvasElement* canvas = static_cast&lt;HTMLCanvasElement*&gt;(layer-&gt;renderer()-&gt;node());
&gt; +                if (canvas-&gt;renderingContext() &amp;&amp; canvas-&gt;renderingContext()-&gt;isAccelerated())
&gt; +                    layer-&gt;backing()-&gt;graphicsLayer()-&gt;setAcceleratesDrawing(true);
&gt; +            }
&gt; +#endif

We still need to do this elsewhere as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319867</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-09 19:00:31 -0800</bug_when>
    <thetext>Attachment 76131 did not build on chromium:
Build output: http://queues.webkit.org/results/6919033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319868</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-09 19:06:14 -0800</bug_when>
    <thetext>Attachment 76131 did not build on win:
Build output: http://queues.webkit.org/results/6935014</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320343</commentid>
    <comment_count>5</comment_count>
      <attachid>76243</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-12-10 12:59:32 -0800</bug_when>
    <thetext>Created attachment 76243
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320371</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-10 13:35:55 -0800</bug_when>
    <thetext>Attachment 76243 did not build on win:
Build output: http://queues.webkit.org/results/7021021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320420</commentid>
    <comment_count>7</comment_count>
      <attachid>76243</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-10 14:28:11 -0800</bug_when>
    <thetext>Comment on attachment 76243
Patch

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

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:56
&gt; +namespace {
&gt; +
&gt; +RetainPtr&lt;IOSurfaceRef&gt; createIOSurface(IntSize size)

Test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320421</commentid>
    <comment_count>8</comment_count>
      <attachid>76243</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-10 14:28:55 -0800</bug_when>
    <thetext>Comment on attachment 76243
Patch

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

&gt;&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:56
&gt;&gt; +RetainPtr&lt;IOSurfaceRef&gt; createIOSurface(IntSize size)
&gt; 
&gt; Test

Make this method static.

It should be #ifdeffed with the same #ifdef we use to enable the feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320504</commentid>
    <comment_count>9</comment_count>
      <attachid>76283</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-12-10 17:14:57 -0800</bug_when>
    <thetext>Created attachment 76283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320638</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-11 03:50:30 -0800</bug_when>
    <thetext>Attachment 76283 did not build on chromium:
Build output: http://queues.webkit.org/results/6938059</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320945</commentid>
    <comment_count>11</comment_count>
      <attachid>76354</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-12-12 23:26:50 -0800</bug_when>
    <thetext>Created attachment 76354
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321197</commentid>
    <comment_count>12</comment_count>
      <attachid>76354</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-13 10:09:29 -0800</bug_when>
    <thetext>Comment on attachment 76354
Patch

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

r=me with commenets addressed

&gt; WebCore/html/canvas/CanvasRenderingContext2D.cpp:148
&gt; +#if PLATFORM(MAC) &amp;&amp; PLATFORM(CA) &amp;&amp; !defined(BUILDING_ON_TIGER) &amp;&amp; !defined(BUILDING_ON_LEOPARD) &amp;&amp; !defined(BUILDING_ON_SNOW_LEOPARD)
&gt; +    return true;

Why not #if defined(USE_IOSURFACE)?

&gt; WebCore/platform/graphics/ImageBuffer.h:126
&gt; +        ImageBuffer(const IntSize&amp;, ColorSpace colorSpace, bool accelerateRendering, bool&amp; success);

I think the constructor should use RenderingMode. create methods almost always just pass their arguments directly to the constructor.

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:114
&gt;      success = false;  // Make early return mean failure.

You should assert that accelerateRendering is Unaccelerated if USE_IOSURFACE is not defined.

&gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:230
&gt;          RefPtr&lt;Image&gt; copy = copyImage();

Either add a comment to say why copying is OK, or file a bug to investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321204</commentid>
    <comment_count>13</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-12-13 10:14:43 -0800</bug_when>
    <thetext>Committed r73925: &lt;http://trac.webkit.org/changeset/73925&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321214</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-13 10:23:52 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/73925 might have broken Leopard Intel Release (Build) and Leopard Intel Debug (Build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321313</commentid>
    <comment_count>15</comment_count>
      <attachid>76419</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-12-13 12:12:59 -0800</bug_when>
    <thetext>Created attachment 76419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321315</commentid>
    <comment_count>16</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-12-13 12:13:51 -0800</bug_when>
    <thetext>New patch + http://trac.webkit.org/changeset/73933 should address all comments and fix all builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321317</commentid>
    <comment_count>17</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-12-13 12:15:48 -0800</bug_when>
    <thetext>
&gt; Why not #if defined(USE_IOSURFACE)?
Done.

&gt; &gt; WebCore/platform/graphics/ImageBuffer.h:126
&gt; &gt; +        ImageBuffer(const IntSize&amp;, ColorSpace colorSpace, bool accelerateRendering, bool&amp; success);
&gt; 
&gt; I think the constructor should use RenderingMode. create methods almost always just pass their arguments directly to the constructor.
Done.

&gt; 
&gt; &gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:114
&gt; &gt;      success = false;  // Make early return mean failure.
&gt; 
&gt; You should assert that accelerateRendering is Unaccelerated if USE_IOSURFACE is not defined.
&gt; 
Done.

&gt; &gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:230
&gt; &gt;          RefPtr&lt;Image&gt; copy = copyImage();
&gt; 
&gt; Either add a comment to say why copying is OK, or file a bug to investigate.
rdar://problem/8762683</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321319</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-13 12:20:42 -0800</bug_when>
    <thetext>(In reply to comment #17)

&gt; &gt; &gt; WebCore/platform/graphics/ImageBuffer.h:126
&gt; &gt; &gt; +        ImageBuffer(const IntSize&amp;, ColorSpace colorSpace, bool accelerateRendering, bool&amp; success);
&gt; &gt; 
&gt; &gt; I think the constructor should use RenderingMode. create methods almost always just pass their arguments directly to the constructor.
&gt; Done.

This was not done.

&gt; &gt; 
&gt; &gt; &gt; WebCore/platform/graphics/cg/ImageBufferCG.cpp:114
&gt; &gt; &gt;      success = false;  // Make early return mean failure.
&gt; &gt; 
&gt; &gt; You should assert that accelerateRendering is Unaccelerated if USE_IOSURFACE is not defined.
&gt; &gt; 
&gt; Done.

I don&apos;t see this assertion in the commit. I&apos;d expect it in the ImageBuffer ctor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321321</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-12-13 12:22:28 -0800</bug_when>
    <thetext>(In reply to comment #18)

&gt; This was not done.

&gt; I don&apos;t see this assertion in the commit. I&apos;d expect it in the ImageBuffer ctor.

I see these in the new patch. Please address review comments before committing next time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321332</commentid>
    <comment_count>20</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-12-13 12:36:00 -0800</bug_when>
    <thetext>Committed r73949: &lt;http://trac.webkit.org/changeset/73949&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76131</attachid>
            <date>2010-12-09 16:11:02 -0800</date>
            <delta_ts>2010-12-10 12:59:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50591-20101209161100.patch</filename>
            <type>text/plain</type>
            <size>39440</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzY1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMTItMDkgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZG9wdCBuZXcgQ0cgQVBJIGZvciBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTkxCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBBbGwg
Y3VycmVudCBsYXlvdXQgdGVzdHMgYXJlIHN1ZmZpY2llbnQuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDogQWRkIGluIGFjY2VsZXJhdGVSZW5kZXJpbmcgZmxhZyBmb3Ig
aW1hZ2VidWZmZXIgY3JlYXRpb24uCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6aXNBY2NlbGVyYXRlZCk6IEFsd2F5cyByZXR1cm4gdHJ1ZSBpZiB1c2luZyBDQSBvbiBu
ZXcgcGxhdGZvcm1zLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3VGV4dEludGVybmFsKTogVXNlIGFjY2VsZXJhdGVSZW5kZXJpbmcgZm9yIGltYWdlYnVm
ZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKTogUGx1bWIgdGhyb3VnaCBuZXcgZmxhZy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDog
VXBkYXRlIG1ldGhvZCBzaWcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHA6IFN3aXRjaCBvZmYgb2YgYWNjZWxlcmF0ZVJlbmRlcmluZyBmbGFnIGZvciBu
ZXcgYWNjZWxlcmF0ZWQgcGF0aHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhLmg6IEFkZCBpbiBzdXJmYWNlIHJlZgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOiBVcGRhdGUgbWV0aG9kIHNpZy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcDogXl4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6IF5eCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHA6IF5eCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHA6IF5eCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDogQWRkIG5ldyBtZXRo
b2Qgc2lncworICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1t
OiBeXgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOiBTZXQgYWNjZWxlcmF0ZXNE
cmF3aW5nIGZvciBjYW52YXMgYmFja2luZ3MuCisKIDIwMTAtMTItMDkgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBUcnkgYW5kIGZpeCB0aGUgbWFjIGJ1aWxkLgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTEyNDcsNiArMTI0Nyw4IEBAIF93a1NpZ25hbENGUmVhZFN0cmVhbUhhc0J5
dGVzCiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogX3dr
Q3JlYXRlQ1RUeXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlvbnMKK193a0NyZWF0
ZUNvbnRleHRXaXRoSU9TdXJmYWNlCitfd2tDcmVhdGVJbWFnZUlPU3VyZmFjZQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY4OSw2ICs2ODksNyBA
QAogCQkyMEQ2MjkyNjEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYy
OTI0MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwICovOyB9
OwogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2Mjky
NTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJ
CTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlE
MEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkyMjk4Q0NFNzEyQUQ4QkNBMDBDNDJFNTEgLyogSU9TdXJmYWNl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDIyOThDQ0U2MTJBRDhCQ0EwMEM0MkU1MSAvKiBJT1N1cmZhY2UuZnJhbWV3b3JrICovOyB9
OwogCQkyNEY1NEVBQzEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjRGNTRFQUEx
MDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAqLzsgfTsKIAkJMjRG
NTRFQUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVBQjEwMUZFOTE0MDAw
QUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9ICgpOyB9OyB9OwogCQkyNTQyRjREQTExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJ
bmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAq
LzsgfTsKQEAgLTY5NjIsNiArNjk2Myw3IEBACiAJCTIwRDYyOTI0MTI1MzY5MEIwMDA4MTU0MyAv
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQx
MEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMjI5OENDRTYxMkFEOEJDQTAwQzQyRTUxIC8qIElPU3VyZmFjZS5mcmFtZXdvcmsgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZy
YW1ld29yazsgbmFtZSA9IElPU3VyZmFjZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9JT1N1cmZhY2UuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0
ZT4iOyB9OwogCQkyNDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEY1NEVBQTEwMUZFOTE0MDAwQUU3NDEgLyogQXBw
bGljYXRpb25DYWNoZUhvc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjA4LDYgKzEyMjEwLDcgQEAKIAkJCQlGRDJE
QkYxMzEyQjA0OEEzMDBFRDk4QzYgLyogQXVkaW9Ub29sYm94LmZyYW1ld29yayBpbiBGcmFtZXdv
cmtzICovLAogCQkJCUZEMkRCRjE0MTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1VuaXQuZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJRkQyREJGMTUxMkIwNDhBMzAwRUQ5OEM2IC8qIENv
cmVBdWRpby5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkyMjk4Q0NFNzEyQUQ4QkNB
MDBDNDJFNTEgLyogSU9TdXJmYWNlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTIz
MDQsNiArMTIzMDcsNyBAQAogCQkJCUY1QzI4Njk0MDI4NDZEQ0QwMTg2MzVDQSAvKiBDYXJib24u
ZnJhbWV3b3JrICovLAogCQkJCUY1QzI4Njk1MDI4NDZEQ0QwMTg2MzVDQSAvKiBDb2NvYS5mcmFt
ZXdvcmsgKi8sCiAJCQkJMUFCMzNEQTQxMjU1MUUzMjAwMjQ0NTdBIC8qIElPS2l0LmZyYW1ld29y
ayAqLywKKwkJCQkyMjk4Q0NFNjEyQUQ4QkNBMDBDNDJFNTEgLyogSU9TdXJmYWNlLmZyYW1ld29y
ayAqLywKIAkJCQlGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrICovLAogCQkJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5
bGliICovLAogCQkJCTFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliICov
LApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzY0MSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
MCw3ICszNzAsMTEgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQog
ICAgIGlmICghc2l6ZS53aWR0aCgpIHx8ICFzaXplLmhlaWdodCgpKQogICAgICAgICByZXR1cm47
CiAKKyNpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKENBKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIHRydWUpOworI2Vsc2UKICAgICBt
X2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKTsKKyNlbmRpZgogICAgIC8v
IFRoZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlIE1heENhbnZhc0FyZWEgY2hlY2sgc2hvdWxkIHBy
ZXZlbnQgY29tbW9uIGNhc2VzCiAgICAgLy8gd2hlcmUgSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpIHJl
dHVybnMgMCwgaG93ZXZlciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24gbWVtb3J5LgogICAgIGlm
ICghbV9pbWFnZUJ1ZmZlcikKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDQsNyArMTQ0LDkgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp+Q2FudmFzUmVuZGVyaQog
CiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNpZiBQTEFURk9STShNQUMpICYm
IFBMQVRGT1JNKENBKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQorICAgIHJldHVybiB0cnVlOworI2VsaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
ICAgICByZXR1cm4gbV9jb250ZXh0M0Q7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKQEAgLTE4
MTksNyArMTgyMSwxMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJ
CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgcmVjdCBpcyBub3QgYmlnIGVub3VnaCBmb3IgbWl0ZXJz
IG9uIHN0cm9rZWQgdGV4dC4KICAgICAgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QodGV4dFJlY3QpOwogCisjaWYgUExBVEZPUk0oTUFDKSAmJiBQTEFURk9STShDQSkgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAgICAgT3duUHRy
PEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tSZWN0LnNp
emUoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgdHJ1ZSk7CisjZWxzZQogICAgICAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6
ZSgpKTsKKyNlbmRpZgogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4
dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTAgKzU0LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbWFnZUJ1ZmZlciA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRl
ciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCi0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdl
QnVmZmVyPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
ID0gQ29sb3JTcGFjZURldmljZVJHQikKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Ug
PSBDb2xvclNwYWNlRGV2aWNlUkdCLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZSkK
ICAgICAgICAgewogICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgY29sb3JTcGFj
ZSwgc3VjY2VzcykpOworICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWYobmV3IElt
YWdlQnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIGFjY2VsZXJhdGVSZW5kZXJpbmcsIHN1Y2Nlc3Mp
KTsKICAgICAgICAgICAgIGlmIChzdWNjZXNzKQogICAgICAgICAgICAgICAgIHJldHVybiBidWYu
cmVsZWFzZSgpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDQsNiArMTA0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwogCiAgICAg
ICAgIEludFNpemUgbV9zaXplOworICAgICAgICBib29sIG1fYWNjZWxlcmF0ZVJlbmRlcmluZzsK
ICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwogCiAjaWYgIVBMQVRG
T1JNKENHKQpAQCAtMTEzLDcgKzExNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2
ZW4gb3V0LXZhcmlhYmxlCiAgICAgICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBp
dCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IEludFNp
emUmLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpOworICAgICAgICBJbWFn
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2aXNpb24gNzM2NDEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEkK
IHsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENv
bG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgYm9vbCwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1f
ZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHJldmlzaW9uIDczNjQxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKyNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgpAQCAtNDIsMTAgKzQzLDU1IEBA
CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPG1hdGguaD4KIAorI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gY3Jl
YXRlSU9TdXJmYWNlKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisjaWYgVEFS
R0VUX1JUX0xJVFRMRV9FTkRJQU4KKyAgICB1bnNpZ25lZCBwaXhlbEZvcm1hdCA9ICdCR1JBJzsK
KyNlbHNlCisgICAgdW5zaWduZWQgcGl4ZWxGb3JtYXQgPSAzMjsKKyNlbmRpZgorICAgIHVuc2ln
bmVkIGJ5dGVzUGVyRWxlbWVudCA9IDQ7CisgICAgdW5zaWduZWQgbG9uZyBieXRlc1BlclJvdyA9
IElPU3VyZmFjZUFsaWduUHJvcGVydHkoa0lPU3VyZmFjZUJ5dGVzUGVyUm93LCB3aWR0aCpieXRl
c1BlckVsZW1lbnQpOworICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NTaXplID0gSU9TdXJmYWNlQWxp
Z25Qcm9wZXJ0eShrSU9TdXJmYWNlQWxsb2NTaXplLCBoZWlnaHQqYnl0ZXNQZXJSb3cpOworCisg
ICAgaWYgKCFieXRlc1BlclJvdyB8fCAhYWxsb2NTaXplKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGNvbnN0IHZvaWQgKmtleXNbNl07CisgICAgY29uc3Qgdm9pZCAqdmFsdWVzWzZdOworICAg
IGtleXNbMF0gPSBrSU9TdXJmYWNlV2lkdGg7CisgICAgdmFsdWVzWzBdID0gQ0ZOdW1iZXJDcmVh
dGUoMCwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKKyAgICBrZXlzWzFdID0ga0lPU3VyZmFj
ZUhlaWdodDsKKyAgICB2YWx1ZXNbMV0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmaGVpZ2h0KTsKKyAgICBrZXlzWzJdID0ga0lPU3VyZmFjZVBpeGVsRm9ybWF0OworICAg
IHZhbHVlc1syXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZwaXhlbEZv
cm1hdCk7CisgICAga2V5c1szXSA9IGtJT1N1cmZhY2VCeXRlc1BlckVsZW1lbnQ7CisgICAgdmFs
dWVzWzNdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJmJ5dGVzUGVyRWxl
bWVudCk7CisgICAga2V5c1s0XSA9IGtJT1N1cmZhY2VCeXRlc1BlclJvdzsKKyAgICB2YWx1ZXNb
NF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmJ5dGVzUGVyUm93KTsK
KyAgICBrZXlzWzVdID0ga0lPU3VyZmFjZUFsbG9jU2l6ZTsKKyAgICB2YWx1ZXNbNV0gPSBDRk51
bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmFsbG9jU2l6ZSk7CisKKyAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkaWN0ID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMs
IHZhbHVlcywgNiwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDY7IGkr
KykKKyAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlc1tpXSk7CisKKyAgICBSZXRhaW5QdHI8SU9TdXJm
YWNlUmVmPiBzdXJmYWNlKEFkb3B0Q0YsIElPU3VyZmFjZUNyZWF0ZShkaWN0LmdldCgpKSk7Cisg
ICAgcmV0dXJuIHN1cmZhY2U7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCiBzdGF0
aWMgdm9pZCByZWxlYXNlSW1hZ2VEYXRhKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qp
CiB7CiAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwpAQCAtNTMsMzIgKzk5
LDI3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VJbWFnZURhdGEodm9pZCosIGNvbnMKIAogSW1hZ2VC
dWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCiAgICAgOiBtX2RhdGEo
MCkKKyAgICAsIG1fc3VyZmFjZSgwKQogewogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1
Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29s
b3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgYm9vbCYg
c3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCisgICAgLCBt
X2FjY2VsZXJhdGVSZW5kZXJpbmcoYWNjZWxlcmF0ZVJlbmRlcmluZykKIHsKICAgICBzdWNjZXNz
ID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCiAgICAgaWYgKHNp
emUud2lkdGgoKSA8IDAgfHwgc2l6ZS5oZWlnaHQoKSA8IDApCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpOwotCi0gICAgLy8gUHJvdGVj
dCBhZ2FpbnN0IG92ZXJmbG93Ci0gICAgaWYgKGJ5dGVzUGVyUm93ID4gMHgzRkZGRkZGRikKKyAg
ICBpZiAoYnl0ZXNQZXJSb3cgPiAweDNGRkZGRkZGKSAvLyBQcm90ZWN0IGFnYWluc3Qgb3ZlcmZs
b3cKICAgICAgICAgcmV0dXJuOwogICAgIGJ5dGVzUGVyUm93ICo9IDQ7CiAgICAgbV9kYXRhLm1f
Ynl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdzsKLQogICAgIHNpemVfdCBkYXRhU2l6ZSA9IHNpemUu
aGVpZ2h0KCkgKiBieXRlc1BlclJvdzsKLSAgICBpZiAoIXRyeUZhc3RDYWxsb2Moc2l6ZS5oZWln
aHQoKSwgYnl0ZXNQZXJSb3cpLmdldFZhbHVlKG1fZGF0YS5tX2RhdGEpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQoKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihtX2RhdGEubV9kYXRh
KSAmIDIpID09IDApOwogCi0gICAgc3dpdGNoKGltYWdlQ29sb3JTcGFjZSkgeworICAgIHN3aXRj
aCAoaW1hZ2VDb2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNwYWNlRGV2aWNlUkdCOgogICAg
ICAgICBtX2RhdGEubV9jb2xvclNwYWNlID0gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOwogICAg
ICAgICBicmVhazsKQEAgLTkwLDE5ICsxMzEsMjkgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVy
KGNvbnN0IEludFNpemUmIAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX2RhdGEubV9i
aXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotICAgIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dChBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUo
bV9kYXRhLm1fZGF0YSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCA4LCBieXRlc1BlclJv
dywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZGF0YS5tX2NvbG9yU3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8p
KTsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7CisgICAgaWYgKCFtX2Fj
Y2VsZXJhdGVSZW5kZXJpbmcpIHsKKyAgICAgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKHNpemUuaGVp
Z2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShtX2RhdGEubV9kYXRhKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KG1fZGF0
YS5tX2RhdGEpICYgMikpOworCisgICAgICAgIG1fZGF0YS5tX2JpdG1hcEluZm8gPSBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisgICAgICAgIGNnQ29udGV4dC5hZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZShtX2RhdGEubV9kYXRhLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCksIDgsIGJ5dGVzUGVyUm93LCBtX2RhdGEubV9jb2xvclNwYWNlLCBtX2RhdGEubV9iaXRtYXBJ
bmZvKSk7CisgICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0
YS4KKyAgICAgICAgbV9kYXRhLm1fZGF0YVByb3ZpZGVyLmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJD
cmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEubV9kYXRhLCBkYXRhU2l6ZSwgcmVsZWFzZUltYWdlRGF0
YSkpOworICAgIH0KKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQorICAgIGVsc2UgeworICAgICAgICBtX2RhdGEubV9zdXJmYWNlID0gY3JlYXRlSU9TdXJmYWNl
KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGNnQ29udGV4dC5hZG9wdENG
KHdrQ3JlYXRlQ29udGV4dFdpdGhJT1N1cmZhY2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBtX2RhdGEubV9jb2xvclNwYWNlKSk7CisgICAgfQor
I2VuZGlmCiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKLQogICAgIG1fY29u
dGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4dChjZ0NvbnRleHQuZ2V0KCkpKTsKICAgICBtX2Nv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogICAgIG1fY29udGV4dC0+dHJhbnNsYXRl
KDAsIC1zaXplLmhlaWdodCgpKTsKICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAKLSAgICAvLyBD
cmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgbV9kYXRhLm1fZGF0
YVByb3ZpZGVyLmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEu
bV9kYXRhLCBkYXRhU2l6ZSwgcmVsZWFzZUltYWdlRGF0YSkpOwogfQogCiBJbWFnZUJ1ZmZlcjo6
fkltYWdlQnVmZmVyKCkKQEAgLTEyMiw3ICsxNzMsMTQgQEAgYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJh
d3NVc2luZ0NvcHkoKSBjb25zdAogUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJ
bWFnZSgpIGNvbnN0CiB7CiAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNz
ZWQgaW4gQ0dJbWFnZSBvbiBkZXN0cnVjdGlvbgotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCkpKTsKKyAgICBDR0ltYWdlUmVmIGN0eEltYWdlID0gMDsKKyAgICBpZiAoIW1fYWNjZWxlcmF0
ZVJlbmRlcmluZykKKyAgICAgICAgY3R4SW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIGVsc2UKKyAgICAgICAgY3R4SW1hZ2UgPSB3a0Ny
ZWF0ZUltYWdlSU9TdXJmYWNlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworI2VuZGlm
CisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY3R4SW1hZ2UpOwogfQogCiBzdGF0aWMg
Q0dJbWFnZVJlZiBjZ0ltYWdlKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEltYWdlQnVmZmVy
RGF0YSYgZGF0YSkKQEAgLTEzNCwzNCArMTkyLDUwIEBAIHN0YXRpYyBDR0ltYWdlUmVmIGNnSW1h
Z2UoY29uc3QgSW50U2l6ZSYKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewot
ICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKLSAgICAgICAgLy8gV2UncmUgZHJh
d2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgd2Ug
bmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgotICAgICAgICBSZWZQdHI8SW1h
Z2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKLSAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShj
b3B5LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVz
ZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgaWYgKCFtX2FjY2VsZXJhdGVSZW5kZXJpbmcpIHsKKyAg
ICAgICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgeworICAgICAgICAgICAgLy8gV2Un
cmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29y
aywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgorICAgICAgICAgICAg
UmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgICAgICBkZXN0Q29udGV4
dC0+ZHJhd0ltYWdlKGNvcHkuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKKyAgICAgICAgICAgIGRlc3RDb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2VGb3JSZW5kZXJpbmcuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IEJpdG1hcElt
YWdlOjpjcmVhdGUoY2dJbWFnZShtX3NpemUsIG1fZGF0YSkpOwotICAgICAgICBkZXN0Q29udGV4
dC0+ZHJhd0ltYWdlKGltYWdlRm9yUmVuZGVyaW5nLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAgICAgUmVmUHRy
PEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSA9IChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpID8gQ29sb3JTcGFjZURldmljZVJHQiA6IHN0
eWxlQ29sb3JTcGFjZTsKKyAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShjb3B5LmdldCgp
LCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7
CiAgICAgfQogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYg
KGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgewotICAgICAgICAvLyBXZSdyZSBkcmF3aW5nIGlu
dG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3ZSBuZWVkIHRv
IGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCisgICAgaWYgKCFtX2FjY2VsZXJhdGVSZW5k
ZXJpbmcpIHsKKyAgICAgICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgeworICAgICAg
ICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9y
IHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0Lgor
ICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgICAg
ICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKKyAgICAgICAgICAgIGltYWdl
Rm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZSgp
OwogICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKLSAgICB9
IGVsc2UgewotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKG1fc2l6ZSwgbV9kYXRhKSk7Ci0gICAgICAgIGltYWdlRm9y
UmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICB9CiB9CiAK
IHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
KEFkb3B0Q0YsIGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Cisg
ICAgaWYgKCFtX2FjY2VsZXJhdGVSZW5kZXJpbmcpCisgICAgICAgIGltYWdlLmFkb3B0Q0YoY2dJ
bWFnZShtX3NpemUsIG1fZGF0YSkpOworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCisgICAgZWxzZQorICAgICAgICBpbWFnZS5hZG9wdENGKHdrQ3JlYXRlSW1h
Z2VJT1N1cmZhY2UocGxhdGZvcm1Db250ZXh0KSk7CisjZW5kaWYKICAgICBDR0NvbnRleHRUcmFu
c2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0LCByZWN0LngoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdo
dCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQsIDEsIC0xKTsKICAg
ICBDR0NvbnRleHRDbGlwVG9NYXNrKHBsYXRmb3JtQ29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgcmVjdC5zaXplKCkpLCBpbWFnZS5nZXQoKSk7CkBAIC0xNzAsNyArMjQ0LDcgQEAgdm9p
ZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIAogfQogCiB0ZW1wbGF0ZSA8TXVs
dGlwbHkgbXVsdGlwbGllZD4KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBpbWFnZURhdGEsIGNvbnN0
IEludFNpemUmIHNpemUpCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJ
bnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCiB7CiAgICAgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7CiAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHJlc3VsdC0+ZGF0YSgpLT5k
YXRhKCktPmRhdGEoKTsKQEAgLTE5OSw0MyArMjczLDgwIEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAg
ICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdp
bnk7Ci0KLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzaXplLndpZHRoKCk7Cisg
ICAgCiAgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQot
ICAgIC8vIDo6Y3JlYXRlIGVuc3VyZXMgdGhhdCBhbGwgSW1hZ2VCdWZmZXJzIGhhdmUgdmFsaWQg
ZGF0YSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpdCBoZXJlLgotICAgIHVuc2lnbmVkIGNo
YXIqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbWFnZURhdGEu
bV9kYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwogICAgIHVu
c2lnbmVkIGNoYXIqIGRlc3RSb3dzID0gZGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsg
ZGVzdHggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBp
bnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNS
b3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICBpZiAobXVsdGlwbGllZCA9PSBVbm11bHRpcGxp
ZWQgJiYgYWxwaGEpIHsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93
c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jv
d3MgKyBiYXNleClbMF07CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKKyAgICB1bnNp
Z25lZCBjaGFyKiBzcmNSb3dzOworCisgICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKKyAg
ICAgICAgSU9TdXJmYWNlUmVmIHN1cmZhY2UgPSBpbWFnZURhdGEubV9zdXJmYWNlLmdldCgpOwor
ICAgICAgICBJT1N1cmZhY2VMb2NrKHN1cmZhY2UsIGtJT1N1cmZhY2VMb2NrUmVhZE9ubHksIDAp
OworICAgICAgICBzcmNCeXRlc1BlclJvdyA9IElPU3VyZmFjZUdldEJ5dGVzUGVyUm93KHN1cmZh
Y2UpOworICAgICAgICBzcmNSb3dzID0gKHVuc2lnbmVkIGNoYXIqKShJT1N1cmZhY2VHZXRCYXNl
QWRkcmVzcyhzdXJmYWNlKSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICog
NDsKKworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgeworICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAg
ICAgICBpbnQgYmFzZXggPSB4ICogNDsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBwaXhlbCA9
ICgodWludDMyX3QqKShzcmNSb3dzICsgYmFzZXgpKVswXTsgLy8gKGFSR0IpCisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IChwaXhlbCAmIDB4ZmYwMDAwMDBVKSA+PiAyNDsK
KyAgICAgICAgICAgICAgICBpZiAobXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQgJiYgYWxwaGEp
IHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgPSAoKHBpeGVsICYgMHhmZjAwMDAwMFUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCgoKChwaXhlbCA+PiAxNikgJiAyNTUpICogMjU1
KSAvIGFscGhhKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKCgoKHBpeGVsID4+IDgp
ICYgMjU1KSAqIDI1NSkgLyBhbHBoYSkgPDwgOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAoKCgocGl4ZWwgICYgMjU1KSAqIDI1NSkgLyBhbHBoYSkgPDwgMTYpKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWwgPSAoKHBpeGVsICYgMHhmZjAw
MDAwMFUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChwaXhlbCA+PiAxNikgJiAyNTUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCgocGl4ZWwgPj4gOCkgJiAyNTUpIDw8IDgp
CisgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChwaXhlbCAmIDI1NSkgPDwgMTYpKTsKKyAg
ICAgICAgICAgICAgICAoKHVpbnQzMl90KikoZGVzdFJvd3MgKyBiYXNleCkpWzBdID0gcGl4ZWw7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93Owor
ICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgICAgICB9CisgICAg
ICAgIElPU3VyZmFjZVVubG9jayhzdXJmYWNlLCBrSU9TdXJmYWNlTG9ja1JlYWRPbmx5LCAwKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBzcmNCeXRlc1BlclJvdyA9IDQgKiBzaXplLndpZHRoKCk7
CisgICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbWFn
ZURhdGEubV9kYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0Owor
CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CisgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgeworICAgICAgICAgICAgICAg
IGludCBiYXNleCA9IHggKiA0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEg
PSBzcmNSb3dzW2Jhc2V4ICsgM107CisgICAgICAgICAgICAgICAgaWYgKG11bHRpcGxpZWQgPT0g
VW5tdWx0aXBsaWVkICYmIGFscGhhKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxw
aGE7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1ti
YXNleCArIDJdICogMjU1KSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAg
ICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgfQotICAgICAgICBzcmNS
b3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJS
b3c7CiAgICAgfQorICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+
KHJlY3QsIG1fZGF0YSwgbV9zaXplKTsKKyAgICBpZiAobV9hY2NlbGVyYXRlUmVuZGVyaW5nKQor
ICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAg
ICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUs
IG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CiB9CiAKIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBj
b25zdAogewotICAgIHJldHVybiBnZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgbV9k
YXRhLCBtX3NpemUpOworICAgIGlmIChtX2FjY2VsZXJhdGVSZW5kZXJpbmcpCisgICAgICAgIENH
Q29udGV4dEZsdXNoKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBn
ZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxl
cmF0ZVJlbmRlcmluZyk7CiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgotdm9p
ZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0
YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNv
dXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgSW1hZ2VCdWZmZXJEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
YWNjZWxlcmF0ZVJlbmRlcmluZykKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4g
MCk7CiAgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTI2NCwzNSArMzc1
LDcwIEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY28KICAgICBpbnQg
bnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKIAogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0g
NCAqIHNvdXJjZS0+d2lkdGgoKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICog
c2l6ZS53aWR0aCgpOwotCiAgICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHNvdXJjZS0+ZGF0
YSgpLT5kYXRhKCktPmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbngg
KiA0OwotICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oaW1hZ2VEYXRhLm1fZGF0YSkgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3R4ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAg
aW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gc3Jj
Um93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgaWYgKG11bHRpcGxpZWQgPT0gVW5tdWx0aXBs
aWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
IChzcmNSb3dzW2Jhc2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFz
ZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKKyAgICB1bnNpZ25lZCBk
ZXN0Qnl0ZXNQZXJSb3c7CisgICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3M7CisKKyAgICBpZiAo
YWNjZWxlcmF0ZVJlbmRlcmluZykgeworICAgICAgICBJT1N1cmZhY2VSZWYgc3VyZmFjZSA9IGlt
YWdlRGF0YS5tX3N1cmZhY2UuZ2V0KCk7CisgICAgICAgIElPU3VyZmFjZUxvY2soc3VyZmFjZSwg
MCwgMCk7CisgICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IElPU3VyZmFjZUdldEJ5dGVzUGVyUm93
KHN1cmZhY2UpOworICAgICAgICBkZXN0Um93cyA9ICh1bnNpZ25lZCBjaGFyKikoSU9TdXJmYWNl
R2V0QmFzZUFkZHJlc3Moc3VyZmFjZSkpICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0
eCAqIDQ7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsr
eSkgeworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsK
KyAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKKyAgICAgICAgICAgICAgICB1aW50
MzJfdCBwaXhlbCA9ICgodWludDMyX3QqKShzcmNSb3dzICsgYmFzZXgpKVswXTsgLy8gKGFCR1Ip
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IChwaXhlbCAmIDB4ZmYwMDAw
MDBVKSA+PiAyNDsKKyAgICAgICAgICAgICAgICBpZiAobXVsdGlwbGllZCA9PSBVbm11bHRpcGxp
ZWQgJiYgYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsID0gKChwaXhl
bCAmIDB4ZmYwMDAwMDBVKQorICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgoKCgocGl4ZWwg
Pj4gMTYpICYgMjU1KSAqIGFscGhhICsgMjU0KSAvIDI1NSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgKCgoKChwaXhlbCA+PiA4KSAmIDI1NSkgKiBhbHBoYSArIDI1NCkgLyAyNTUpIDw8
IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCgoKHBpeGVsICYgMjU1KSAqIGFscGhh
ICsgMjU0KSAvIDI1NSkgPDwgMTYpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcGl4ZWwgPSAoKHBpeGVsICYgMHhmZjAwMDAwMFUpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgKChwaXhlbCA+PiAxNikgJiAyNTUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgKCgocGl4ZWwgPj4gOCkgJiAyNTUpIDw8IDgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgKChwaXhlbCAmIDI1NSkgPDwgMTYpKTsKKyAgICAgICAgICAgICAgICAoKHVpbnQz
Ml90KikoZGVzdFJvd3MgKyBiYXNleCkpWzBdID0gcGl4ZWw7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBzcmNSb3dz
ICs9IHNyY0J5dGVzUGVyUm93OworICAgICAgICB9CisgICAgICAgIElPU3VyZmFjZVVubG9jayhz
dXJmYWNlLCAwLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSA0
ICogc2l6ZS53aWR0aCgpOworICAgICAgICBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KGltYWdlRGF0YS5tX2RhdGEpICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cg
KyBkZXN0eCAqIDQ7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7
CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgeworICAg
ICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107CisgICAgICAgICAgICAgICAgaWYgKG11
bHRpcGxpZWQgPT0gVW5tdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkg
LyAyNTU7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93
c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PHVp
bnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3Jj
Qnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVy
Um93OwotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwogICAgIH0KIH0KIAogdm9p
ZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQog
ewotICAgIHB1dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVz
dFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CisgICAgaWYgKG1fYWNjZWxlcmF0ZVJlbmRlcmluZykK
KyAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgcHV0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9p
bnQsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOwogfQogCiB2b2lkIElt
YWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNlLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewot
ICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgbV9kYXRhLCBtX3NpemUpOworICAgIGlmIChtX2FjY2VsZXJhdGVSZW5kZXJpbmcpCisg
ICAgICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworICAg
IHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2lu
dCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCkBAIC0zMzIsNyArNDc4LDE0IEBAIFN0cmluZyBJ
bWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsK
IAotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZShBZG9wdENGLCBDR0JpdG1hcENvbnRl
eHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKQor
ICAgICAgICBpbWFnZS5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQorICAgIGVsc2UKKyAgICAgICAgaW1hZ2UuYWRvcHRDRih3a0NyZWF0ZUlt
YWdlSU9TdXJmYWNlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKKyNlbmRpZgorCiAg
ICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCkBAIC0zNjUsNSArNTE4
LDQgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaQogCiAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIG91dC5kYXRhKCkp
OwogfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhLmgJKHJldmlzaW9uIDczNjQxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CiAKK3R5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJT1N1cmZhY2VS
ZWY7CiB0eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UgKkNHQ29sb3JTcGFjZVJlZjsKIHR5cGVk
ZWYgc3RydWN0IENHRGF0YVByb3ZpZGVyICpDR0RhdGFQcm92aWRlclJlZjsKIHR5cGVkZWYgdWlu
dDMyX3QgQ0dCaXRtYXBJbmZvOwpAQCAtNDgsNiArNDksNyBAQCBwdWJsaWM6CiAgICAgQ0dCaXRt
YXBJbmZvIG1fYml0bWFwSW5mbzsKICAgICB1bnNpZ25lZCBtX2J5dGVzUGVyUm93OwogICAgIENH
Q29sb3JTcGFjZVJlZiBtX2NvbG9yU3BhY2U7CisgICAgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4g
bV9zdXJmYWNlOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAko
cmV2aXNpb24gNzM2NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdl
QnVmZmVySGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIEltYWdlQnVm
ZmVyRGF0YTo6fkltYWdlQnVmZmVyRGF0YSgpCiAgICAgbV9iaXRtYXAuVW5sb2NrKCk7CiB9CiAK
LUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUNvbG9y
U3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBib29sJiBzdWNjZXNzKQorSW1hZ2VCdWZmZXI6OkltYWdl
QnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3Bh
Y2UsIGJvb2wsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgOiBtX2RhdGEoc2l6ZSkKICAgICAsIG1fc2l6
ZShzaXplKQogewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZl
clF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
QnVmZmVyUXQuY3BwCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAg
SW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogICAgIG1faW1hZ2UgPSBT
dGlsbEltYWdlOjpjcmVhdGVGb3JSZW5kZXJpbmcoJm1fcGl4bWFwKTsKIH0KIAotSW1hZ2VCdWZm
ZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UsIGJvb2wmIHN1
Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29s
b3JTcGFjZSwgYm9vbCwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwg
bV9zaXplKHNpemUpCiB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNzM2NDEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjIsNyArNjIsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJ
CiB7CiB9CiAKLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBD
b2xvclNwYWNlLCBib29sJiBzdWNjZXNzKQorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0
IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UsIGJvb2wsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgOiBt
X2RhdGEoc2l6ZSkKICAgICAsIG1fc2l6ZShzaXplKQogewpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCShyZXZpc2lv
biA3MzY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJX
aW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgSW1hZ2VCdWZmZXJEYXRh
OjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogICAgIG1fYml0bWFwLT5zZXRIYXNBbHBoYSh0cnVl
KTsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1
ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGJvb2wsIGJv
b2wmIHN1Y2Nlc3MpCiAgICAgOiBtX2RhdGEoc2l6ZSkKICAgICAsIG1fc2l6ZShzaXplKQogewpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3Bw
CShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VC
dWZmZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgSW1hZ2VCdWZmZXJE
YXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBib29sJiBz
dWNjZXNzKSA6IAorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBDb2xv
clNwYWNlIGltYWdlQ29sb3JTcGFjZSwgYm9vbCwgYm9vbCYgc3VjY2VzcykgOiAKICAgICBtX2Rh
dGEoSW50U2l6ZSgpKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCShyZXZpc2lvbiA3MzY0MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
X2gKIAogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5o
PgorI2luY2x1ZGUgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KICNpbmNsdWRlIDxvYmpjL29iamMu
aD4KIAogdHlwZWRlZiBzdHJ1Y3QgX05TUmFuZ2UgTlNSYW5nZTsKQEAgLTE3OSw2ICsxODAsOSBA
QCBleHRlcm4gQ0ZJbmRleCAoKndrR2V0SHlwaGVuYXRpb25Mb2NhdGlvCiBleHRlcm4gQ1RMaW5l
UmVmICgqd2tDcmVhdGVDVExpbmVXaXRoVW5pQ2hhclByb3ZpZGVyKShjb25zdCBVbmlDaGFyKiAo
KnByb3ZpZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0
aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlD
aGFyKiBjaGFycywgdm9pZCopLCB2b2lkKik7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKIGV4dGVybiBDVFR5cGVzZXR0ZXJSZWYgKCp3a0NyZWF0ZUNUVHlw
ZXNldHRlcldpdGhVbmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zKShjb25zdCBVbmlDaGFyKiAoKnBy
b3ZpZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9u
YXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFy
KiBjaGFycywgdm9pZCopLCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpOworCitleHRl
cm4gQ0dDb250ZXh0UmVmICgqd2tDcmVhdGVDb250ZXh0V2l0aElPU3VyZmFjZSkoSU9TdXJmYWNl
UmVmIHN1cmZhY2UsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIENHQ29sb3JTcGFj
ZVJlZiBjb2xvclNwYWNlKTsKK2V4dGVybiBDR0ltYWdlUmVmICgqd2tDcmVhdGVJbWFnZUlPU3Vy
ZmFjZSkoQ0dDb250ZXh0UmVmIGNvbnRleHQpOwogI2VuZGlmCiAKIH0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbQkocmV2aXNpb24gNzM2
NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjIsNCArMTIyLDcgQEAgQ0ZJbmRleCAoKndrR2V0SHlwaGVuYXRp
b25Mb2NhdGlvbkJlZm9yZQogQ1RMaW5lUmVmICgqd2tDcmVhdGVDVExpbmVXaXRoVW5pQ2hhclBy
b3ZpZGVyKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENG
SW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZv
aWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFycywgdm9pZCopLCB2b2lkKik7CiAjaWYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKIENUVHlwZXNldHRlclJl
ZiAoKndrQ3JlYXRlQ1RUeXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlvbnMpKGNv
bnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY2hh
ckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAoKmRpc3Bv
c2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqLCBDRkRpY3Rpb25hcnlSZWYg
b3B0aW9ucyk7CisKK0NHQ29udGV4dFJlZiAoKndrQ3JlYXRlQ29udGV4dFdpdGhJT1N1cmZhY2Up
KElPU3VyZmFjZVJlZiBzdXJmYWNlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBD
R0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSk7CitDR0ltYWdlUmVmICgqd2tDcmVhdGVJbWFnZUlP
U3VyZmFjZSkoQ0dDb250ZXh0UmVmIGNvbnRleHQpOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY3
LDcgKzc2Nyw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWQKICAg
ICBpZiAocmVuZGVyZXIoKS0+aXNWaWRlbygpICYmIHRvUmVuZGVyVmlkZW8ocmVuZGVyZXIoKSkt
PnNob3VsZERpc3BsYXlWaWRlbygpKQogICAgICAgICByZXR1cm4gaGFzQm94RGVjb3JhdGlvbnNP
ckJhY2tncm91bmQocmVuZGVyZXIoKSk7CiAjZW5kaWYKLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKSB8
fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgUExB
VEZPUk0oQ0EpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisj
ZWxpZiBFTkFCTEUoM0RfQ0FOVkFTKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQog
ICAgIGlmIChpc0FjY2VsZXJhdGVkQ2FudmFzKHJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4g
aGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyZXIoKSk7CiAjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24g
NzM2NDEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTcsNiArMjk3LDE0IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVCYWNraW4KICAgICAgICAgICAgICAgICByZXBhaW50T25Db21wb3NpdGluZ0No
YW5nZShsYXllcik7CiAKICAgICAgICAgICAgIGxheWVyLT5lbnN1cmVCYWNraW5nKCk7CisKKyNp
ZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKENBKQorICAgICAgICAgICAgaWYgKGxheWVyLT5y
ZW5kZXJlcigpLT5pc0NhbnZhcygpKSB7CisgICAgICAgICAgICAgICAgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4obGF5ZXItPnJlbmRl
cmVyKCktPm5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy0+cmVuZGVyaW5nQ29u
dGV4dCgpICYmIGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpLT5pc0FjY2VsZXJhdGVkKCkpCisg
ICAgICAgICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nKCktPmdyYXBoaWNzTGF5ZXIoKS0+c2V0
QWNjZWxlcmF0ZXNEcmF3aW5nKHRydWUpOworICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAg
ICAgICBsYXllckNoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKSW5kZXg6
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzY1NikKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMTItMDkgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZG9wdCBuZXcgQ0cgQVBJIGZvciBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTkxCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJTeXN0ZW1JbnRlcmZhY2UubW06CisKIDIwMTAtMTItMDkgIERhdmlkIEh5YXR0ICA8aHlh
dHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4
OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5tbQko
cmV2aXNpb24gNzM2NDEpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlN5c3RlbUlu
dGVyZmFjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw4IEBAIHZvaWQgSW5pdFdl
YkNvcmVTeXN0ZW1JbnRlcmZhY2Uodm9pZCkKICAgICBJTklUKENyZWF0ZUNUTGluZVdpdGhVbmlD
aGFyUHJvdmlkZXIpOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCiAgICAgSU5JVChDcmVhdGVDVFR5cGVzZXR0ZXJXaXRoVW5pQ2hhclByb3ZpZGVyQW5kT3B0
aW9ucyk7CisgICAgSU5JVChDcmVhdGVDb250ZXh0V2l0aElPU3VyZmFjZSk7CisgICAgSU5JVChD
cmVhdGVJbWFnZUlPU3VyZmFjZSk7CiAjZW5kaWYKIAogICAgIGRpZEluaXQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76243</attachid>
            <date>2010-12-10 12:59:32 -0800</date>
            <delta_ts>2010-12-10 17:14:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50591-20101210125929.patch</filename>
            <type>text/plain</type>
            <size>39588</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzY1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMTItMDkgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZG9wdCBuZXcgQ0cgQVBJIGZvciBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTkxCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBBbGwg
Y3VycmVudCBsYXlvdXQgdGVzdHMgYXJlIHN1ZmZpY2llbnQuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDogQWRkIGluIGFjY2VsZXJhdGVSZW5kZXJpbmcgZmxhZyBmb3Ig
aW1hZ2VidWZmZXIgY3JlYXRpb24uCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6aXNBY2NlbGVyYXRlZCk6IEFsd2F5cyByZXR1cm4gdHJ1ZSBpZiB1c2luZyBDQSBvbiBu
ZXcgcGxhdGZvcm1zLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3VGV4dEludGVybmFsKTogVXNlIGFjY2VsZXJhdGVSZW5kZXJpbmcgZm9yIGltYWdlYnVm
ZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKTogUGx1bWIgdGhyb3VnaCBuZXcgZmxhZy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDog
VXBkYXRlIG1ldGhvZCBzaWcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHA6IFN3aXRjaCBvZmYgb2YgYWNjZWxlcmF0ZVJlbmRlcmluZyBmbGFnIGZvciBu
ZXcgYWNjZWxlcmF0ZWQgcGF0aHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhLmg6IEFkZCBpbiBzdXJmYWNlIHJlZgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOiBVcGRhdGUgbWV0aG9kIHNpZy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcDogXl4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6IF5eCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHA6IF5eCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHA6IF5eCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDogQWRkIG5ldyBtZXRo
b2Qgc2lncworICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1t
OiBeXgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOiBTZXQgYWNjZWxlcmF0ZXNE
cmF3aW5nIGZvciBjYW52YXMgYmFja2luZ3MuCisKIDIwMTAtMTItMDkgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBUcnkgYW5kIGZpeCB0aGUgbWFjIGJ1aWxkLgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTEyNDcsNiArMTI0Nyw4IEBAIF93a1NpZ25hbENGUmVhZFN0cmVhbUhhc0J5
dGVzCiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogX3dr
Q3JlYXRlQ1RUeXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlvbnMKK193a0NyZWF0
ZUNvbnRleHRXaXRoSU9TdXJmYWNlCitfd2tDcmVhdGVJbWFnZUlPU3VyZmFjZQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY4OSw2ICs2ODksNyBA
QAogCQkyMEQ2MjkyNjEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYy
OTI0MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwICovOyB9
OwogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2Mjky
NTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJ
CTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlE
MEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkyMjk4Q0NFNzEyQUQ4QkNBMDBDNDJFNTEgLyogSU9TdXJmYWNl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDIyOThDQ0U2MTJBRDhCQ0EwMEM0MkU1MSAvKiBJT1N1cmZhY2UuZnJhbWV3b3JrICovOyB9
OwogCQkyNEY1NEVBQzEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjRGNTRFQUEx
MDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAqLzsgfTsKIAkJMjRG
NTRFQUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVBQjEwMUZFOTE0MDAw
QUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9ICgpOyB9OyB9OwogCQkyNTQyRjREQTExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJ
bmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAq
LzsgfTsKQEAgLTY5NjIsNiArNjk2Myw3IEBACiAJCTIwRDYyOTI0MTI1MzY5MEIwMDA4MTU0MyAv
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQx
MEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMjI5OENDRTYxMkFEOEJDQTAwQzQyRTUxIC8qIElPU3VyZmFjZS5mcmFtZXdvcmsgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZy
YW1ld29yazsgbmFtZSA9IElPU3VyZmFjZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9JT1N1cmZhY2UuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0
ZT4iOyB9OwogCQkyNDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEY1NEVBQTEwMUZFOTE0MDAwQUU3NDEgLyogQXBw
bGljYXRpb25DYWNoZUhvc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjA4LDYgKzEyMjEwLDcgQEAKIAkJCQlGRDJE
QkYxMzEyQjA0OEEzMDBFRDk4QzYgLyogQXVkaW9Ub29sYm94LmZyYW1ld29yayBpbiBGcmFtZXdv
cmtzICovLAogCQkJCUZEMkRCRjE0MTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1VuaXQuZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJRkQyREJGMTUxMkIwNDhBMzAwRUQ5OEM2IC8qIENv
cmVBdWRpby5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkyMjk4Q0NFNzEyQUQ4QkNB
MDBDNDJFNTEgLyogSU9TdXJmYWNlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTIz
MDQsNiArMTIzMDcsNyBAQAogCQkJCUY1QzI4Njk0MDI4NDZEQ0QwMTg2MzVDQSAvKiBDYXJib24u
ZnJhbWV3b3JrICovLAogCQkJCUY1QzI4Njk1MDI4NDZEQ0QwMTg2MzVDQSAvKiBDb2NvYS5mcmFt
ZXdvcmsgKi8sCiAJCQkJMUFCMzNEQTQxMjU1MUUzMjAwMjQ0NTdBIC8qIElPS2l0LmZyYW1ld29y
ayAqLywKKwkJCQkyMjk4Q0NFNjEyQUQ4QkNBMDBDNDJFNTEgLyogSU9TdXJmYWNlLmZyYW1ld29y
ayAqLywKIAkJCQlGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrICovLAogCQkJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5
bGliICovLAogCQkJCTFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliICov
LApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzY0MSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
MCw3ICszNzAsMTEgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQog
ICAgIGlmICghc2l6ZS53aWR0aCgpIHx8ICFzaXplLmhlaWdodCgpKQogICAgICAgICByZXR1cm47
CiAKKyNpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKENBKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEFjY2VsZXJhdGVkKTsKKyNlbHNl
CiAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7CisjZW5kaWYK
ICAgICAvLyBUaGUgY29udmVydExvZ2ljYWxUb0RldmljZSBNYXhDYW52YXNBcmVhIGNoZWNrIHNo
b3VsZCBwcmV2ZW50IGNvbW1vbiBjYXNlcwogICAgIC8vIHdoZXJlIEltYWdlQnVmZmVyOjpjcmVh
dGUoKSByZXR1cm5zIDAsIGhvd2V2ZXIgd2UgY291bGQgc3RpbGwgYmUgbG93IG9uIG1lbW9yeS4K
ICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ0LDcgKzE0NCw5IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6fkNhbnZhc1Jl
bmRlcmkKIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmlzQWNjZWxlcmF0ZWQoKSBj
b25zdAogewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaWYgUExBVEZPUk0o
TUFDKSAmJiBQTEFURk9STShDQSkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1df
TEVPUEFSRCkKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbGlmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCiAgICAgcmV0dXJuIG1fY29udGV4dDNEOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xODE5LDcgKzE4MjEsMTEgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRy
YXdUZXh0SQogICAgICAgICAvLyBGSVhNRTogVGhlIHJlY3QgaXMgbm90IGJpZyBlbm91Z2ggZm9y
IG1pdGVycyBvbiBzdHJva2VkIHRleHQuCiAgICAgICAgIEludFJlY3QgbWFza1JlY3QgPSBlbmNs
b3NpbmdJbnRSZWN0KHRleHRSZWN0KTsKIAorI2lmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0o
Q0EpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNr
UmVjdC5zaXplKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEFjY2VsZXJhdGVkKTsKKyNlbHNlCiAg
ICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShtYXNrUmVjdC5zaXplKCkpOworI2VuZGlmCiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBt
YXNrSW1hZ2VDb250ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0KCk7CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwx
NCArNTAsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQcmVtdWx0aXBsaWVkLAog
ICAgICAgICBVbm11bHRpcGxpZWQKICAgICB9OworICAgIAorICAgIGVudW0gUmVuZGVyaW5nTW9k
ZSB7CisgICAgICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgICAgIEFjY2VsZXJhdGVkCisgICAgfTsK
IAogICAgIGNsYXNzIEltYWdlQnVmZmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24g
ZmFpbHVyZS4KLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShj
b25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlRGV2
aWNlUkdCKQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNv
bnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZp
Y2VSR0IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgT3du
UHRyPEltYWdlQnVmZmVyPiBidWYobmV3IEltYWdlQnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIHN1
Y2Nlc3MpKTsKKyAgICAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmKG5ldyBJbWFnZUJ1
ZmZlcihzaXplLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkLCBzdWNj
ZXNzKSk7CiAgICAgICAgICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgICAgICAgICByZXR1cm4g
YnVmLnJlbGVhc2UoKTsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTA0LDYgKzEwOSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKIAog
ICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVSZW5kZXJp
bmc7CiAgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKIAogI2lmICFQ
TEFURk9STShDRykKQEAgLTExMyw3ICsxMTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhl
IGdpdmVuIG91dC12YXJpYWJsZQogICAgICAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdo
ZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJ
bnRTaXplJiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBib29sJiBzdWNjZXNzKTsKKyAgICAgICAg
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nLCBib29sJiBzdWNjZXNzKTsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjksNyArNjksNyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25z
dCBJCiB7CiB9CiAKLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXpl
LCBDb2xvclNwYWNlLCBib29sJiBzdWNjZXNzKQorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNv
bnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UsIGJvb2wsIGJvb2wmIHN1Y2Nlc3MpCiAgICAg
OiBtX2RhdGEoc2l6ZSkKICAgICAsIG1fc2l6ZShzaXplKQogewpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiA3MzY0MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9B
cHBsaWNhdGlvblNlcnZpY2VzLmg+CisjaW5jbHVkZSA8SU9TdXJmYWNlL0lPU3VyZmFjZS5oPgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KQEAgLTQyLDEwICs0Myw1
NSBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAKKyNp
ZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSB7CisKK1JldGFpblB0cjxJT1N1cmZhY2VSZWY+
IGNyZWF0ZUlPU3VyZmFjZShJbnRTaXplIHNpemUpCit7CisgICAgdW5zaWduZWQgcGl4ZWxGb3Jt
YXQgPSAnQkdSQSc7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50ID0gNDsKKyAgICBpbnQg
d2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisK
KyAgICB1bnNpZ25lZCBsb25nIGJ5dGVzUGVyUm93ID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShr
SU9TdXJmYWNlQnl0ZXNQZXJSb3csIHNpemUud2lkdGgoKSAqIGJ5dGVzUGVyRWxlbWVudCk7Cisg
ICAgaWYgKCFieXRlc1BlclJvdyB8fCBieXRlc1BlclJvdyAhPSAoc2l6ZS53aWR0aCgpICogYnl0
ZXNQZXJFbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1bnNpZ25lZCBsb25nIGFs
bG9jU2l6ZSA9IElPU3VyZmFjZUFsaWduUHJvcGVydHkoa0lPU3VyZmFjZUFsbG9jU2l6ZSwgc2l6
ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93KTsKKyAgICBpZiAoIWFsbG9jU2l6ZSB8fCBhbGxvY1Np
emUgIT0gKHNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJvdykpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgY29uc3Qgdm9pZCAqa2V5c1s2XTsKKyAgICBjb25zdCB2b2lkICp2YWx1ZXNbNl07Cisg
ICAga2V5c1swXSA9IGtJT1N1cmZhY2VXaWR0aDsKKyAgICB2YWx1ZXNbMF0gPSBDRk51bWJlckNy
ZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOworICAgIGtleXNbMV0gPSBrSU9TdXJm
YWNlSGVpZ2h0OworICAgIHZhbHVlc1sxXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlcklu
dFR5cGUsICZoZWlnaHQpOworICAgIGtleXNbMl0gPSBrSU9TdXJmYWNlUGl4ZWxGb3JtYXQ7Cisg
ICAgdmFsdWVzWzJdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJnBpeGVs
Rm9ybWF0KTsKKyAgICBrZXlzWzNdID0ga0lPU3VyZmFjZUJ5dGVzUGVyRWxlbWVudDsKKyAgICB2
YWx1ZXNbM10gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmYnl0ZXNQZXJF
bGVtZW50KTsKKyAgICBrZXlzWzRdID0ga0lPU3VyZmFjZUJ5dGVzUGVyUm93OworICAgIHZhbHVl
c1s0XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYnl0ZXNQZXJSb3cp
OworICAgIGtleXNbNV0gPSBrSU9TdXJmYWNlQWxsb2NTaXplOworICAgIHZhbHVlc1s1XSA9IENG
TnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYWxsb2NTaXplKTsKKworICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3QoQWRvcHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KDAsIGtleXMsIHZhbHVlcywgNiwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NG
VHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCA2OyBpKyspCisgICAgICAgIENGUmVsZWFzZSh2YWx1ZXNbaV0pOworCisgICAgcmV0dXJu
IFJldGFpblB0cjxJT1N1cmZhY2VSZWY+KEFkb3B0Q0YsIElPU3VyZmFjZUNyZWF0ZShkaWN0Lmdl
dCgpKSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCiBzdGF0aWMgdm9pZCByZWxl
YXNlSW1hZ2VEYXRhKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpCiB7CiAgICAgZmFz
dEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwpAQCAtNTMsMzIgKzk5LDI3IEBAIHN0YXRp
YyB2b2lkIHJlbGVhc2VJbWFnZURhdGEodm9pZCosIGNvbnMKIAogSW1hZ2VCdWZmZXJEYXRhOjpJ
bWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCiAgICAgOiBtX2RhdGEoMCkKKyAgICAsIG1f
c3VyZmFjZSgwKQogewogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCitJbWFn
ZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBpbWFn
ZUNvbG9yU3BhY2UsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgYm9vbCYgc3VjY2VzcykKICAg
ICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2FjY2VsZXJhdGVS
ZW5kZXJpbmcoYWNjZWxlcmF0ZVJlbmRlcmluZykKIHsKICAgICBzdWNjZXNzID0gZmFsc2U7ICAv
LyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCiAgICAgaWYgKHNpemUud2lkdGgoKSA8
IDAgfHwgc2l6ZS5oZWlnaHQoKSA8IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVk
IGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpOwotCi0gICAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92
ZXJmbG93Ci0gICAgaWYgKGJ5dGVzUGVyUm93ID4gMHgzRkZGRkZGRikKKyAgICBpZiAoYnl0ZXNQ
ZXJSb3cgPiAweDNGRkZGRkZGKSAvLyBQcm90ZWN0IGFnYWluc3Qgb3ZlcmZsb3cKICAgICAgICAg
cmV0dXJuOwogICAgIGJ5dGVzUGVyUm93ICo9IDQ7CiAgICAgbV9kYXRhLm1fYnl0ZXNQZXJSb3cg
PSBieXRlc1BlclJvdzsKLQogICAgIHNpemVfdCBkYXRhU2l6ZSA9IHNpemUuaGVpZ2h0KCkgKiBi
eXRlc1BlclJvdzsKLSAgICBpZiAoIXRyeUZhc3RDYWxsb2Moc2l6ZS5oZWlnaHQoKSwgYnl0ZXNQ
ZXJSb3cpLmdldFZhbHVlKG1fZGF0YS5tX2RhdGEpKQotICAgICAgICByZXR1cm47CiAKLSAgICBB
U1NFUlQoKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihtX2RhdGEubV9kYXRhKSAmIDIpID09IDAp
OwotCi0gICAgc3dpdGNoKGltYWdlQ29sb3JTcGFjZSkgeworICAgIHN3aXRjaCAoaW1hZ2VDb2xv
clNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNwYWNlRGV2aWNlUkdCOgogICAgICAgICBtX2RhdGEu
bV9jb2xvclNwYWNlID0gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOwogICAgICAgICBicmVhazsK
QEAgLTkwLDkgKzEzMSwyNSBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6
ZSYgCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIG1fZGF0YS5tX2JpdG1hcEluZm8gPSBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7Ci0gICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gY2dDb250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEubV9kYXRh
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kYXRhLm1fY29sb3JTcGFjZSwgbV9kYXRhLm1fYml0bWFwSW5mbykpOworICAgIFJldGFp
blB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dDsKKyAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRl
cmluZykgeworICAgICAgICBpZiAoIXRyeUZhc3RDYWxsb2Moc2l6ZS5oZWlnaHQoKSwgYnl0ZXNQ
ZXJSb3cpLmdldFZhbHVlKG1fZGF0YS5tX2RhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHNpemVfdD4obV9kYXRhLm1fZGF0YSkgJiAy
KSk7CisKKyAgICAgICAgbV9kYXRhLm1fYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkTGFzdDsKKyAgICAgICAgY2dDb250ZXh0LmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKG1fZGF0YS5tX2RhdGEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQ
ZXJSb3csIG1fZGF0YS5tX2NvbG9yU3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8pKTsKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgorICAgICAgICBt
X2RhdGEubV9kYXRhUHJvdmlkZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KDAsIG1fZGF0YS5tX2RhdGEsIGRhdGFTaXplLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisgICAgfSBl
bHNlIHsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAg
ICAgICBtX2RhdGEubV9zdXJmYWNlID0gY3JlYXRlSU9TdXJmYWNlKHNpemUpOworICAgICAgICBj
Z0NvbnRleHQuYWRvcHRDRih3a0NyZWF0ZUNvbnRleHRXaXRoSU9TdXJmYWNlKG1fZGF0YS5tX3N1
cmZhY2UuZ2V0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgbV9kYXRhLm1fY29sb3JT
cGFjZSkpOworI2Vsc2UKKyAgICAgICAgbV9hY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8v
IEZvcmNlIHRvIGZhbHNlIG9uIG9sZGVyIHBsYXRmb3JtcworI2VuZGlmCisgICAgfQorCiAgICAg
aWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTAwLDkgKzE1Nyw2IEBAIElt
YWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICBtX2NvbnRleHQtPnNj
YWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogICAgIG1fY29udGV4dC0+dHJhbnNsYXRlKDAsIC1zaXpl
LmhlaWdodCgpKTsKICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAKLSAgICAvLyBDcmVhdGUgYSBs
aXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgbV9kYXRhLm1fZGF0YVByb3ZpZGVy
LmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEubV9kYXRhLCBk
YXRhU2l6ZSwgcmVsZWFzZUltYWdlRGF0YSkpOwogfQogCiBJbWFnZUJ1ZmZlcjo6fkltYWdlQnVm
ZmVyKCkKQEAgLTEyMiw3ICsxNzYsMTQgQEAgYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0Nv
cHkoKSBjb25zdAogUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNv
bnN0CiB7CiAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gQ0dJ
bWFnZSBvbiBkZXN0cnVjdGlvbgotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKKyAg
ICBDR0ltYWdlUmVmIGN0eEltYWdlID0gMDsKKyAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRlcmlu
ZykKKyAgICAgICAgY3R4SW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQorICAgIGVsc2UKKyAgICAgICAgY3R4SW1hZ2UgPSB3a0NyZWF0ZUltYWdl
SU9TdXJmYWNlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworI2VuZGlmCisgICAgcmV0
dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY3R4SW1hZ2UpOwogfQogCiBzdGF0aWMgQ0dJbWFnZVJl
ZiBjZ0ltYWdlKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgZGF0
YSkKQEAgLTEzNCwzNCArMTk1LDUwIEBAIHN0YXRpYyBDR0ltYWdlUmVmIGNnSW1hZ2UoY29uc3Qg
SW50U2l6ZSYKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29u
dGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewotICAgIGlmIChk
ZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKLSAgICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRv
IG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBj
b3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgotICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkg
PSBjb3B5SW1hZ2UoKTsKLSAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShjb3B5LmdldCgp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxp
dHlTY2FsZSk7CisgICAgaWYgKCFtX2FjY2VsZXJhdGVSZW5kZXJpbmcpIHsKKyAgICAgICAgaWYg
KGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgeworICAgICAgICAgICAgLy8gV2UncmUgZHJhd2lu
ZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgd2UgbmVl
ZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgorICAgICAgICAgICAgUmVmUHRyPElt
YWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0lt
YWdlKGNvcHkuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1h
Z2UobV9zaXplLCBtX2RhdGEpKTsKKyAgICAgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2Uo
aW1hZ2VGb3JSZW5kZXJpbmcuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IEJpdG1hcEltYWdlOjpjcmVh
dGUoY2dJbWFnZShtX3NpemUsIG1fZGF0YSkpOwotICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0lt
YWdlKGltYWdlRm9yUmVuZGVyaW5nLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBj
b3B5ID0gY29weUltYWdlKCk7CisgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IChkZXN0
Q29udGV4dCA9PSBjb250ZXh0KCkpID8gQ29sb3JTcGFjZURldmljZVJHQiA6IHN0eWxlQ29sb3JT
cGFjZTsKKyAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShjb3B5LmdldCgpLCBjb2xvclNw
YWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiAgICAgfQog
fQogCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKGRlc3RDb250
ZXh0ID09IGNvbnRleHQoKSkgewotICAgICAgICAvLyBXZSdyZSBkcmF3aW5nIGludG8gb3VyIG93
biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3ZSBuZWVkIHRvIGNvcHkgdGhl
IHNvdXJjZSBidWZmZXIgZmlyc3QuCisgICAgaWYgKCFtX2FjY2VsZXJhdGVSZW5kZXJpbmcpIHsK
KyAgICAgICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgeworICAgICAgICAgICAgLy8g
V2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8g
d29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgorICAgICAgICAg
ICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgICAgICBjb3B5LT5k
cmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKKyAgICAgICAgICAgIGltYWdlRm9yUmVuZGVy
aW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CiAgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZSgpOwogICAgICAg
ICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gQml0bWFwSW1hZ2U6OmNy
ZWF0ZShjZ0ltYWdlKG1fc2l6ZSwgbV9kYXRhKSk7Ci0gICAgICAgIGltYWdlRm9yUmVuZGVyaW5n
LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICB9CiB9CiAKIHZvaWQgSW1h
Z2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpIGNvbnN0CiB7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0Ys
IGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgaWYgKCFt
X2FjY2VsZXJhdGVSZW5kZXJpbmcpCisgICAgICAgIGltYWdlLmFkb3B0Q0YoY2dJbWFnZShtX3Np
emUsIG1fZGF0YSkpOworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCisgICAgZWxzZQorICAgICAgICBpbWFnZS5hZG9wdENGKHdrQ3JlYXRlSW1hZ2VJT1N1cmZh
Y2UocGxhdGZvcm1Db250ZXh0KSk7CisjZW5kaWYKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
cGxhdGZvcm1Db250ZXh0LCByZWN0LngoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKICAg
ICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQsIDEsIC0xKTsKICAgICBDR0NvbnRl
eHRDbGlwVG9NYXNrKHBsYXRmb3JtQ29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVj
dC5zaXplKCkpLCBpbWFnZS5nZXQoKSk7CkBAIC0xNzAsNyArMjQ3LDcgQEAgdm9pZCBJbWFnZUJ1
ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIAogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVs
dGlwbGllZD4KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUm
IHNpemUpCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBz
aXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCiB7CiAgICAgUGFzc1JlZlB0cjxJbWFnZURh
dGE+IHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7CiAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHJlc3VsdC0+ZGF0YSgpLT5kYXRhKCktPmRh
dGEoKTsKQEAgLTE5OSw0MyArMjc2LDc5IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFn
ZURhdGEoY29uc3QKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVuZHkg
PSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzaXplLndpZHRoKCk7CisgICAgCiAgICAg
dW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIC8vIDo6
Y3JlYXRlIGVuc3VyZXMgdGhhdCBhbGwgSW1hZ2VCdWZmZXJzIGhhdmUgdmFsaWQgZGF0YSwgc28g
d2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpdCBoZXJlLgotICAgIHVuc2lnbmVkIGNoYXIqIHNyY1Jv
d3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbWFnZURhdGEubV9kYXRhKSAr
IG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwogICAgIHVuc2lnbmVkIGNo
YXIqIGRlc3RSb3dzID0gZGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0
OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXgg
PSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4
ICsgM107Ci0gICAgICAgICAgICBpZiAobXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQgJiYgYWxw
aGEpIHsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0g
KiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dz
ICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNl
eClbMF07CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKKyAgICB1bnNpZ25lZCBjaGFy
KiBzcmNSb3dzOworCisgICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKKyAgICAgICAgSU9T
dXJmYWNlUmVmIHN1cmZhY2UgPSBpbWFnZURhdGEubV9zdXJmYWNlLmdldCgpOworICAgICAgICBJ
T1N1cmZhY2VMb2NrKHN1cmZhY2UsIGtJT1N1cmZhY2VMb2NrUmVhZE9ubHksIDApOworICAgICAg
ICBzcmNCeXRlc1BlclJvdyA9IElPU3VyZmFjZUdldEJ5dGVzUGVyUm93KHN1cmZhY2UpOworICAg
ICAgICBzcmNSb3dzID0gKHVuc2lnbmVkIGNoYXIqKShJT1N1cmZhY2VHZXRCYXNlQWRkcmVzcyhz
dXJmYWNlKSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CisgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgeworICAgICAgICAgICAg
ICAgIGludCBiYXNleCA9IHggKiA0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxw
aGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107CisgICAgICAgICAgICAgICAgaWYgKG11bHRpcGxpZWQg
PT0gVW5tdWx0aXBsaWVkICYmIGFscGhhKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1
KSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNy
Y1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOworICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwor
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07
CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OworICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAg
ICAgICB9CisgICAgICAgIElPU3VyZmFjZVVubG9jayhzdXJmYWNlLCBrSU9TdXJmYWNlTG9ja1Jl
YWRPbmx5LCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzcmNCeXRlc1BlclJvdyA9IDQgKiBz
aXplLndpZHRoKCk7CisgICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGNoYXIqPihpbWFnZURhdGEubV9kYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9y
aWdpbnggKiA0OworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dz
OyArK3kpIHsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsr
KSB7CisgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKKyAgICAgICAgICAgICAg
ICBpZiAobXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQgJiYgYWxwaGEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhh
OworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFz
ZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRl
c3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3Mg
KyBiYXNleClbMF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OworICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwogICAg
ICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3RS
b3dzICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICB9CisgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1h
Z2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUpOworICAgIGlmIChtX2Fj
Y2VsZXJhdGVSZW5kZXJpbmcpCisgICAgICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBnZXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihy
ZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9hY2NlbGVyYXRlUmVuZGVyaW5nKTsKIH0KIAogUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNv
bnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxQcmVt
dWx0aXBsaWVkPihyZWN0LCBtX2RhdGEsIG1fc2l6ZSk7CisgICAgaWYgKG1fYWNjZWxlcmF0ZVJl
bmRlcmluZykKKyAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgcmV0dXJuIGdldEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihyZWN0LCBtX2Rh
dGEsIG1fc2l6ZSwgbV9hY2NlbGVyYXRlUmVuZGVyaW5nKTsKIH0KIAogdGVtcGxhdGUgPE11bHRp
cGx5IG11bHRpcGxpZWQ+Ci12b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEltYWdl
QnVmZmVyRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhKiYgc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQogewogICAgIEFTU0VSVChz
b3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+
IDApOwpAQCAtMjY0LDM1ICszNzcsNjkgQEAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiYg
c291cmNlLCBjbwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwogCiAgICAgdW5zaWdu
ZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlLT53aWR0aCgpOwotICAgIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdyA9IDQgKiBzaXplLndpZHRoKCk7Ci0KICAgICB1bnNpZ25lZCBjaGFyKiBz
cmNSb3dzID0gc291cmNlLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5
dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3MgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbWFnZURhdGEubV9kYXRhKSArIGRlc3R5
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bnVtUm93czsgKyt5KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsg
eCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICBpZiAobXVs
dGlwbGllZCA9PSBVbm11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCAr
IDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyAr
IGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgp
WzBdOworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsKKyAgICB1bnNpZ25lZCBjaGFyKiBk
ZXN0Um93czsKKworICAgIGlmIChhY2NlbGVyYXRlUmVuZGVyaW5nKSB7CisgICAgICAgIElPU3Vy
ZmFjZVJlZiBzdXJmYWNlID0gaW1hZ2VEYXRhLm1fc3VyZmFjZS5nZXQoKTsKKyAgICAgICAgSU9T
dXJmYWNlTG9jayhzdXJmYWNlLCAwLCAwKTsKKyAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gSU9T
dXJmYWNlR2V0Qnl0ZXNQZXJSb3coc3VyZmFjZSk7CisgICAgICAgIGRlc3RSb3dzID0gKHVuc2ln
bmVkIGNoYXIqKShJT1N1cmZhY2VHZXRCYXNlQWRkcmVzcyhzdXJmYWNlKSkgKyBkZXN0eSAqIGRl
c3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IG51bUNvbHVtbnM7IHgrKykgeworICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0Owor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107
CisgICAgICAgICAgICAgICAgaWYgKG11bHRpcGxpZWQgPT0gVW5tdWx0aXBsaWVkICYmIGFscGhh
ICE9IDI1NSkgeworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93
c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dz
W2Jhc2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsK
KyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhd
OworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OworICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAg
ICAgICAgfQorICAgICAgICBJT1N1cmZhY2VVbmxvY2soc3VyZmFjZSwgMCwgMCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNpemUud2lkdGgoKTsKKyAgICAg
ICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbWFnZURhdGEu
bV9kYXRhKSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OworICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgeworICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAgICAgICBpbnQgYmFzZXgg
PSB4ICogNDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gc3JjUm93c1ti
YXNleCArIDNdOworICAgICAgICAgICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVubXVsdGlwbGll
ZCAmJiBhbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dz
ICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNl
eClbMF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7CisgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwogICAgICAgICB9
Ci0gICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjUm93cyAr
PSBzcmNCeXRlc1BlclJvdzsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVs
dGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBwdXRJbWFnZURhdGE8VW5t
dWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUp
OworICAgIGlmIChtX2FjY2VsZXJhdGVSZW5kZXJpbmcpCisgICAgICAgIENHQ29udGV4dEZsdXNo
KGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHB1dEltYWdlRGF0YTxVbm11bHRp
cGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSwgbV9h
Y2NlbGVyYXRlUmVuZGVyaW5nKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBwdXRJbWFnZURhdGE8UHJlbXVs
dGlwbGllZD4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplKTsK
KyAgICBpZiAobV9hY2NlbGVyYXRlUmVuZGVyaW5nKQorICAgICAgICBDR0NvbnRleHRGbHVzaChj
b250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlw
bGllZD4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBtX2Fj
Y2VsZXJhdGVSZW5kZXJpbmcpOwogfQogCiBzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdV
VEkoKQpAQCAtMzMyLDcgKzQ3OSwxNCBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChj
b25zdCBTdHJpCiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CiAKLSAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsK
KyAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRlcmluZykKKyAgICAgICAgaW1hZ2UuYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7
CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICBlbHNl
CisgICAgICAgIGltYWdlLmFkb3B0Q0Yod2tDcmVhdGVJbWFnZUlPU3VyZmFjZShjb250ZXh0KCkt
PnBsYXRmb3JtQ29udGV4dCgpKSk7CisjZW5kaWYKKwogICAgIGlmICghaW1hZ2UpCiAgICAgICAg
IHJldHVybiAiZGF0YTosIjsKIApAQCAtMzY1LDUgKzUxOSw0IEBAIFN0cmluZyBJbWFnZUJ1ZmZl
cjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkKIAogICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIs
IG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBvdXQuZGF0YSgpKTsKIH0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YS5oCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCit0eXBl
ZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOwogdHlwZWRlZiBzdHJ1Y3QgQ0dD
b2xvclNwYWNlICpDR0NvbG9yU3BhY2VSZWY7CiB0eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRl
ciAqQ0dEYXRhUHJvdmlkZXJSZWY7CiB0eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKQEAg
LTQ4LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIENHQml0bWFwSW5mbyBtX2JpdG1hcEluZm87CiAg
ICAgdW5zaWduZWQgbV9ieXRlc1BlclJvdzsKICAgICBDR0NvbG9yU3BhY2VSZWYgbV9jb2xvclNw
YWNlOworICAgIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IG1fc3VyZmFjZTsKIH07CiAKIH0gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlQnVmZmVySGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAJKHJldmlzaW9uIDczNjQxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRh
dGEoKQogICAgIG1fYml0bWFwLlVubG9jaygpOwogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwg
Ym9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBz
aXplLCBJbWFnZUNvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBib29sLCBib29sJiBzdWNjZXNz
KQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkocmV2aXNpb24g
NzM2NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VC
dWZmZXJEYXRhKGNvbnN0IEkKICAgICBtX2ltYWdlID0gU3RpbGxJbWFnZTo6Y3JlYXRlRm9yUmVu
ZGVyaW5nKCZtX3BpeG1hcCk7CiB9CiAKLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJ
bnRTaXplJiBzaXplLCBDb2xvclNwYWNlLCBib29sJiBzdWNjZXNzKQorSW1hZ2VCdWZmZXI6Oklt
YWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UsIGJvb2wsIGJvb2wmIHN1
Y2Nlc3MpCiAgICAgOiBtX2RhdGEoc2l6ZSkKICAgICAsIG1fc2l6ZShzaXplKQogewpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5j
cHAJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgSW1hZ2VC
dWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgYm9vbCYgc3VjY2Vz
cykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNw
YWNlLCBib29sLCBib29sJiBzdWNjZXNzKQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3Np
emUoc2l6ZSkKIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VC
dWZmZXJXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAkocmV2aXNpb24gNzM2NDEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw3ICs3Miw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0
IEkKICAgICBtX2JpdG1hcC0+c2V0SGFzQWxwaGEodHJ1ZSk7CiB9CiAKLUltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGJv
b2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBib29sLCBib29sJiBzdWNjZXNzKQogICAgIDogbV9k
YXRhKHNpemUpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkocmV2aXNpb24gNzM2NDEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNv
bnN0IEkKIHsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBD
b2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykgOiAKK0ltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2Us
IGJvb2wsIGJvb2wmIHN1Y2Nlc3MpIDogCiAgICAgbV9kYXRhKEludFNpemUoKSkKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaAkocmV2aXNpb24gNzM2NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNkZWZpbmUgV2ViQ29yZVN5c3RlbUludGVyZmFjZV9oCiAKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbmNsdWRlIDxJT1N1cmZhY2Uv
SU9TdXJmYWNlLmg+CiAjaW5jbHVkZSA8b2JqYy9vYmpjLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9O
U1JhbmdlIE5TUmFuZ2U7CkBAIC0xNzksNiArMTgwLDkgQEAgZXh0ZXJuIENGSW5kZXggKCp3a0dl
dEh5cGhlbmF0aW9uTG9jYXRpbwogZXh0ZXJuIENUTGluZVJlZiAoKndrQ3JlYXRlQ1RMaW5lV2l0
aFVuaUNoYXJQcm92aWRlcikoY29uc3QgVW5pQ2hhciogKCpwcm92aWRlKShDRkluZGV4IHN0cmlu
Z0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywg
dm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hhcnMsIHZvaWQqKSwgdm9p
ZCopOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiBleHRl
cm4gQ1RUeXBlc2V0dGVyUmVmICgqd2tDcmVhdGVDVFR5cGVzZXR0ZXJXaXRoVW5pQ2hhclByb3Zp
ZGVyQW5kT3B0aW9ucykoY29uc3QgVW5pQ2hhciogKCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0lu
ZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9p
ZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCos
IENGRGljdGlvbmFyeVJlZiBvcHRpb25zKTsKKworZXh0ZXJuIENHQ29udGV4dFJlZiAoKndrQ3Jl
YXRlQ29udGV4dFdpdGhJT1N1cmZhY2UpKElPU3VyZmFjZVJlZiBzdXJmYWNlLCB1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSk7CitleHRl
cm4gQ0dJbWFnZVJlZiAoKndrQ3JlYXRlSW1hZ2VJT1N1cmZhY2UpKENHQ29udGV4dFJlZiBjb250
ZXh0KTsKICNlbmRpZgogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTIyLDQg
KzEyMiw3IEBAIENGSW5kZXggKCp3a0dldEh5cGhlbmF0aW9uTG9jYXRpb25CZWZvcmUKIENUTGlu
ZVJlZiAoKndrQ3JlYXRlQ1RMaW5lV2l0aFVuaUNoYXJQcm92aWRlcikoY29uc3QgVW5pQ2hhciog
KCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGlj
dGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5p
Q2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCopOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpCiBDVFR5cGVzZXR0ZXJSZWYgKCp3a0NyZWF0ZUNUVHlwZXNldHRl
cldpdGhVbmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zKShjb25zdCBVbmlDaGFyKiAoKnByb3ZpZGUp
KENGSW5kZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5UmVm
KiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBjaGFy
cywgdm9pZCopLCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpOworCitDR0NvbnRleHRS
ZWYgKCp3a0NyZWF0ZUNvbnRleHRXaXRoSU9TdXJmYWNlKShJT1N1cmZhY2VSZWYgc3VyZmFjZSwg
dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3Bh
Y2UpOworQ0dJbWFnZVJlZiAoKndrQ3JlYXRlSW1hZ2VJT1N1cmZhY2UpKENHQ29udGV4dFJlZiBj
b250ZXh0KTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2Nyw3ICs3NjcsOCBAQCBib29sIFJlbmRl
ckxheWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkCiAgICAgaWYgKHJlbmRlcmVyKCktPmlzVmlk
ZW8oKSAmJiB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpLT5zaG91bGREaXNwbGF5VmlkZW8oKSkK
ICAgICAgICAgcmV0dXJuIGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKHJlbmRlcmVyKCkp
OwogI2VuZGlmCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKKyNpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKENBKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2VsaWYgRU5BQkxFKDNEX0NBTlZBUykg
fHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAoaXNBY2NlbGVyYXRlZENh
bnZhcyhyZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIGhhc0JveERlY29yYXRpb25zT3JCYWNr
Z3JvdW5kKHJlbmRlcmVyKCkpOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDYg
KzI5NywxNCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luCiAgICAg
ICAgICAgICAgICAgcmVwYWludE9uQ29tcG9zaXRpbmdDaGFuZ2UobGF5ZXIpOwogCiAgICAgICAg
ICAgICBsYXllci0+ZW5zdXJlQmFja2luZygpOworCisjaWYgUExBVEZPUk0oTUFDKSAmJiBQTEFU
Rk9STShDQSkKKyAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS0+aXNDYW52YXMoKSkg
eworICAgICAgICAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2Fz
dDxIVE1MQ2FudmFzRWxlbWVudCo+KGxheWVyLT5yZW5kZXJlcigpLT5ub2RlKCkpOworICAgICAg
ICAgICAgICAgIGlmIChjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSAmJiBjYW52YXMtPnJlbmRl
cmluZ0NvbnRleHQoKS0+aXNBY2NlbGVyYXRlZCgpKQorICAgICAgICAgICAgICAgICAgICBsYXll
ci0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCktPnNldEFjY2VsZXJhdGVzRHJhd2luZyh0cnVl
KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgbGF5ZXJDaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzM2NTYpCisrKyBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEw
LTEyLTA5ICBNYXR0aGV3IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRvcHQgbmV3IENHIEFQSSBm
b3IgY2FudmFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MDU5MQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1t
OgorCiAyMDEwLTEyLTA5ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDczNjQxKQorKysgV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEyMSw2ICsxMjEsOCBAQCB2b2lkIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKHZv
aWQpCiAgICAgSU5JVChDcmVhdGVDVExpbmVXaXRoVW5pQ2hhclByb3ZpZGVyKTsKICNpZiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIElOSVQoQ3JlYXRlQ1RU
eXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlvbnMpOworICAgIElOSVQoQ3JlYXRl
Q29udGV4dFdpdGhJT1N1cmZhY2UpOworICAgIElOSVQoQ3JlYXRlSW1hZ2VJT1N1cmZhY2UpOwog
I2VuZGlmCiAKICAgICBkaWRJbml0ID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76283</attachid>
            <date>2010-12-10 17:14:57 -0800</date>
            <delta_ts>2010-12-12 23:26:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50591-20101210171455.patch</filename>
            <type>text/plain</type>
            <size>39397</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzY1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMTItMDkgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZG9wdCBuZXcgQ0cgQVBJIGZvciBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTkxCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBBbGwg
Y3VycmVudCBsYXlvdXQgdGVzdHMgYXJlIHN1ZmZpY2llbnQuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDogQWRkIGluIGFjY2VsZXJhdGVSZW5kZXJpbmcgZmxhZyBmb3Ig
aW1hZ2VidWZmZXIgY3JlYXRpb24uCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6aXNBY2NlbGVyYXRlZCk6IEFsd2F5cyByZXR1cm4gdHJ1ZSBpZiB1c2luZyBDQSBvbiBu
ZXcgcGxhdGZvcm1zLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3VGV4dEludGVybmFsKTogVXNlIGFjY2VsZXJhdGVSZW5kZXJpbmcgZm9yIGltYWdlYnVm
ZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKTogUGx1bWIgdGhyb3VnaCBuZXcgZmxhZy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDog
VXBkYXRlIG1ldGhvZCBzaWcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHA6IFN3aXRjaCBvZmYgb2YgYWNjZWxlcmF0ZVJlbmRlcmluZyBmbGFnIGZvciBu
ZXcgYWNjZWxlcmF0ZWQgcGF0aHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhLmg6IEFkZCBpbiBzdXJmYWNlIHJlZgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOiBVcGRhdGUgbWV0aG9kIHNpZy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcDogXl4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6IF5eCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHA6IF5eCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHA6IF5eCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDogQWRkIG5ldyBtZXRo
b2Qgc2lncworICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1t
OiBeXgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOiBTZXQgYWNjZWxlcmF0ZXNE
cmF3aW5nIGZvciBjYW52YXMgYmFja2luZ3MuCisKIDIwMTAtMTItMDkgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBUcnkgYW5kIGZpeCB0aGUgbWFjIGJ1aWxkLgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTEyNDcsNiArMTI0Nyw4IEBAIF93a1NpZ25hbENGUmVhZFN0cmVhbUhhc0J5
dGVzCiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogX3dr
Q3JlYXRlQ1RUeXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlvbnMKK193a0lPU3Vy
ZmFjZUNvbnRleHRDcmVhdGUKK193a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZQogI2VuZGlm
CiAKICNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY4OSw2ICs2ODks
NyBAQAogCQkyMEQ2MjkyNjEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIw
RDYyOTI0MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwICov
OyB9OwogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2
MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07
CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAw
MDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkyMjk4Q0NFNzEyQUQ4QkNBMDBDNDJFNTEgLyogSU9TdXJm
YWNlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDIyOThDQ0U2MTJBRDhCQ0EwMEM0MkU1MSAvKiBJT1N1cmZhY2UuZnJhbWV3b3JrICov
OyB9OwogCQkyNEY1NEVBQzEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjRGNTRF
QUExMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAqLzsgfTsKIAkJ
MjRGNTRFQUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVBQjEwMUZFOTE0
MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9ICgpOyB9OyB9OwogCQkyNTQyRjREQTExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1
cmVJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNw
cCAqLzsgfTsKQEAgLTY5NjIsNiArNjk2Myw3IEBACiAJCTIwRDYyOTI0MTI1MzY5MEIwMDA4MTU0
MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4
NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMjI5OENDRTYxMkFEOEJDQTAwQzQyRTUxIC8qIElPU3VyZmFjZS5mcmFtZXdvcmsg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVy
LmZyYW1ld29yazsgbmFtZSA9IElPU3VyZmFjZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xp
YnJhcnkvRnJhbWV3b3Jrcy9JT1N1cmZhY2UuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNv
bHV0ZT4iOyB9OwogCQkyNDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEY1NEVBQTEwMUZFOTE0MDAwQUU3NDEgLyog
QXBwbGljYXRpb25DYWNoZUhvc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjA4LDYgKzEyMjEwLDcgQEAKIAkJCQlG
RDJEQkYxMzEyQjA0OEEzMDBFRDk4QzYgLyogQXVkaW9Ub29sYm94LmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovLAogCQkJCUZEMkRCRjE0MTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1VuaXQuZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJRkQyREJGMTUxMkIwNDhBMzAwRUQ5OEM2IC8q
IENvcmVBdWRpby5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkyMjk4Q0NFNzEyQUQ4
QkNBMDBDNDJFNTEgLyogSU9TdXJmYWNlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MTIzMDQsNiArMTIzMDcsNyBAQAogCQkJCUY1QzI4Njk0MDI4NDZEQ0QwMTg2MzVDQSAvKiBDYXJi
b24uZnJhbWV3b3JrICovLAogCQkJCUY1QzI4Njk1MDI4NDZEQ0QwMTg2MzVDQSAvKiBDb2NvYS5m
cmFtZXdvcmsgKi8sCiAJCQkJMUFCMzNEQTQxMjU1MUUzMjAwMjQ0NTdBIC8qIElPS2l0LmZyYW1l
d29yayAqLywKKwkJCQkyMjk4Q0NFNjEyQUQ4QkNBMDBDNDJFNTEgLyogSU9TdXJmYWNlLmZyYW1l
d29yayAqLywKIAkJCQlGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUu
ZnJhbWV3b3JrICovLAogCQkJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3Jl
LmR5bGliICovLAogCQkJCTFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGli
ICovLApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzY0MSkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3MCw3ICszNzAsMTEgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZm
ZQogICAgIGlmICghc2l6ZS53aWR0aCgpIHx8ICFzaXplLmhlaWdodCgpKQogICAgICAgICByZXR1
cm47CiAKKyNpZiBkZWZpbmVkKFVTRV9JT1NVUkZBQ0UpCisgICAgbV9pbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQWNjZWxlcmF0ZWQp
OworI2Vsc2UKICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKTsK
KyNlbmRpZgogICAgIC8vIFRoZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlIE1heENhbnZhc0FyZWEg
Y2hlY2sgc2hvdWxkIHByZXZlbnQgY29tbW9uIGNhc2VzCiAgICAgLy8gd2hlcmUgSW1hZ2VCdWZm
ZXI6OmNyZWF0ZSgpIHJldHVybnMgMCwgaG93ZXZlciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24g
bWVtb3J5LgogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDczNjQxKQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDkgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp+
Q2FudmFzUmVuZGVyaQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNBY2NlbGVy
YXRlZCgpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNpZiBQ
TEFURk9STShNQUMpICYmIFBMQVRGT1JNKENBKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQorICAgIHJldHVybiB0cnVlOworI2VsaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKICAgICByZXR1cm4gbV9jb250ZXh0M0Q7CiAjZWxzZQogICAgIHJldHVy
biBmYWxzZTsKQEAgLTE4MTksNyArMTgyMSwxMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZHJhd1RleHRJCiAgICAgICAgIC8vIEZJWE1FOiBUaGUgcmVjdCBpcyBub3QgYmlnIGVu
b3VnaCBmb3IgbWl0ZXJzIG9uIHN0cm9rZWQgdGV4dC4KICAgICAgICAgSW50UmVjdCBtYXNrUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3QpOwogCisjaWYgZGVmaW5lZChVU0VfSU9TVVJG
QUNFKQorICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBBY2NlbGVyYXRl
ZCk7CisjZWxzZQogICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpKTsKKyNlbmRpZgogCiAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiA3MzY0
MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNiArMzksMTAgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBQTEFURk9S
TShDQSkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkpCisjZGVm
aW5lIFVTRV9JT1NVUkZBQ0UgMQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKQEAgLTUwLDE0ICs1NCwxOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFByZW11bHRpcGxpZWQsCiAgICAgICAgIFVubXVsdGlwbGllZAogICAg
IH07CisgICAgCisgICAgZW51bSBSZW5kZXJpbmdNb2RlIHsKKyAgICAgICAgVW5hY2NlbGVyYXRl
ZCwKKyAgICAgICAgQWNjZWxlcmF0ZWQKKyAgICB9OwogCiAgICAgY2xhc3MgSW1hZ2VCdWZmZXIg
OiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgLy8gV2lsbCByZXR1
cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgotICAgICAgICBzdGF0aWMg
UGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0IpCisgICAgICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURldmljZVJHQiwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZCkKICAgICAgICAgewogICAgICAgICAgICAgYm9vbCBz
dWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZihuZXcg
SW1hZ2VCdWZmZXIoc2l6ZSwgY29sb3JTcGFjZSwgc3VjY2VzcykpOworICAgICAgICAgICAgT3du
UHRyPEltYWdlQnVmZmVyPiBidWYobmV3IEltYWdlQnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIHJl
bmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQsIHN1Y2Nlc3MpKTsKICAgICAgICAgICAgIGlmIChz
dWNjZXNzKQogICAgICAgICAgICAgICAgIHJldHVybiBidWYucmVsZWFzZSgpOwogICAgICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0xMDQsNiArMTEzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwogCiAgICAgICAgIEludFNpemUgbV9zaXplOwor
ICAgICAgICBib29sIG1fYWNjZWxlcmF0ZVJlbmRlcmluZzsKICAgICAgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gbV9jb250ZXh0OwogCiAjaWYgIVBMQVRGT1JNKENHKQpAQCAtMTEzLDcgKzEy
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBUaGlzIGNvbnN0cnVjdG9y
IHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCiAgICAg
ICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIGZhaWx1
cmUuCi0gICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGJvb2wmIHN1Y2Nlc3MpOworICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXpl
JiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGJvb2wm
IHN1Y2Nlc3MpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAkocmV2aXNpb24gNzM2NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIEltYWdl
QnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEkKIHsKIH0KIAotSW1hZ2VCdWZmZXI6
OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nl
c3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JT
cGFjZSwgYm9vbCwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9z
aXplKHNpemUpCiB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDU3
IEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPG1hdGguaD4KIAorI2lm
IGRlZmluZWQoVVNFX0lPU1VSRkFDRSkKKyNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pCisjaW5j
bHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIGRlZmluZWQoVVNFX0lPU1VSRkFD
RSkKK3N0YXRpYyBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBjcmVhdGVJT1N1cmZhY2UoSW50U2l6
ZSBzaXplKQoreworICAgIHVuc2lnbmVkIHBpeGVsRm9ybWF0ID0gJ0JHUkEnOworICAgIHVuc2ln
bmVkIGJ5dGVzUGVyRWxlbWVudCA9IDQ7CisgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwor
ICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgdW5zaWduZWQgbG9uZyBieXRl
c1BlclJvdyA9IElPU3VyZmFjZUFsaWduUHJvcGVydHkoa0lPU3VyZmFjZUJ5dGVzUGVyUm93LCBz
aXplLndpZHRoKCkgKiBieXRlc1BlckVsZW1lbnQpOworICAgIGlmICghYnl0ZXNQZXJSb3cgfHwg
Ynl0ZXNQZXJSb3cgIT0gKHNpemUud2lkdGgoKSAqIGJ5dGVzUGVyRWxlbWVudCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgdW5zaWduZWQgbG9uZyBhbGxvY1NpemUgPSBJT1N1cmZhY2VBbGln
blByb3BlcnR5KGtJT1N1cmZhY2VBbGxvY1NpemUsIHNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJv
dyk7CisgICAgaWYgKCFhbGxvY1NpemUgfHwgYWxsb2NTaXplICE9IChzaXplLmhlaWdodCgpICog
Ynl0ZXNQZXJSb3cpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IHZvaWQgKmtleXNb
Nl07CisgICAgY29uc3Qgdm9pZCAqdmFsdWVzWzZdOworICAgIGtleXNbMF0gPSBrSU9TdXJmYWNl
V2lkdGg7CisgICAgdmFsdWVzWzBdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlw
ZSwgJndpZHRoKTsKKyAgICBrZXlzWzFdID0ga0lPU3VyZmFjZUhlaWdodDsKKyAgICB2YWx1ZXNb
MV0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKKyAgICBr
ZXlzWzJdID0ga0lPU3VyZmFjZVBpeGVsRm9ybWF0OworICAgIHZhbHVlc1syXSA9IENGTnVtYmVy
Q3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZwaXhlbEZvcm1hdCk7CisgICAga2V5c1szXSA9
IGtJT1N1cmZhY2VCeXRlc1BlckVsZW1lbnQ7CisgICAgdmFsdWVzWzNdID0gQ0ZOdW1iZXJDcmVh
dGUoMCwga0NGTnVtYmVySW50VHlwZSwgJmJ5dGVzUGVyRWxlbWVudCk7CisgICAga2V5c1s0XSA9
IGtJT1N1cmZhY2VCeXRlc1BlclJvdzsKKyAgICB2YWx1ZXNbNF0gPSBDRk51bWJlckNyZWF0ZSgw
LCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmJ5dGVzUGVyUm93KTsKKyAgICBrZXlzWzVdID0ga0lPU3Vy
ZmFjZUFsbG9jU2l6ZTsKKyAgICB2YWx1ZXNbNV0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1i
ZXJMb25nVHlwZSwgJmFsbG9jU2l6ZSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBkaWN0KEFkb3B0Q0YsIENGRGljdGlvbmFyeUNyZWF0ZSgwLCBrZXlzLCB2YWx1ZXMsIDYsICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAgICBD
RlJlbGVhc2UodmFsdWVzW2ldKTsKKworICAgIHJldHVybiBSZXRhaW5QdHI8SU9TdXJmYWNlUmVm
PihBZG9wdENGLCBJT1N1cmZhY2VDcmVhdGUoZGljdC5nZXQoKSkpOworfQorI2VuZGlmCisKIHN0
YXRpYyB2b2lkIHJlbGVhc2VJbWFnZURhdGEodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCkKIHsKICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CkBAIC01MywzMiAr
MTAwLDI5IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VJbWFnZURhdGEodm9pZCosIGNvbnMKIAogSW1h
Z2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCiAgICAgOiBtX2Rh
dGEoMCkKKyNpZiBkZWZpbmVkKFVTRV9JT1NVUkZBQ0UpCisgICAgLCBtX3N1cmZhY2UoMCkKKyNl
bmRpZgogewogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZl
cjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9y
U3BhY2UsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgYm9vbCYgc3VjY2VzcykKICAgICA6IG1f
ZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2FjY2VsZXJhdGVSZW5kZXJp
bmcoYWNjZWxlcmF0ZVJlbmRlcmluZykKIHsKICAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtl
IGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCiAgICAgaWYgKHNpemUud2lkdGgoKSA8IDAgfHwg
c2l6ZS5oZWlnaHQoKSA8IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGJ5dGVz
UGVyUm93ID0gc2l6ZS53aWR0aCgpOwotCi0gICAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93
Ci0gICAgaWYgKGJ5dGVzUGVyUm93ID4gMHgzRkZGRkZGRikKKyAgICBpZiAoYnl0ZXNQZXJSb3cg
PiAweDNGRkZGRkZGKSAvLyBQcm90ZWN0IGFnYWluc3Qgb3ZlcmZsb3cKICAgICAgICAgcmV0dXJu
OwogICAgIGJ5dGVzUGVyUm93ICo9IDQ7CiAgICAgbV9kYXRhLm1fYnl0ZXNQZXJSb3cgPSBieXRl
c1BlclJvdzsKLQogICAgIHNpemVfdCBkYXRhU2l6ZSA9IHNpemUuaGVpZ2h0KCkgKiBieXRlc1Bl
clJvdzsKLSAgICBpZiAoIXRyeUZhc3RDYWxsb2Moc2l6ZS5oZWlnaHQoKSwgYnl0ZXNQZXJSb3cp
LmdldFZhbHVlKG1fZGF0YS5tX2RhdGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
KHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihtX2RhdGEubV9kYXRhKSAmIDIpID09IDApOwogCi0g
ICAgc3dpdGNoKGltYWdlQ29sb3JTcGFjZSkgeworICAgIHN3aXRjaCAoaW1hZ2VDb2xvclNwYWNl
KSB7CiAgICAgY2FzZSBDb2xvclNwYWNlRGV2aWNlUkdCOgogICAgICAgICBtX2RhdGEubV9jb2xv
clNwYWNlID0gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOwogICAgICAgICBicmVhazsKQEAgLTkw
LDkgKzEzNCwyNSBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIG1fZGF0YS5tX2JpdG1hcEluZm8gPSBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7Ci0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dD
b250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEubV9kYXRhLCBzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9k
YXRhLm1fY29sb3JTcGFjZSwgbV9kYXRhLm1fYml0bWFwSW5mbykpOworICAgIFJldGFpblB0cjxD
R0NvbnRleHRSZWY+IGNnQ29udGV4dDsKKyAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRlcmluZykg
eworICAgICAgICBpZiAoIXRyeUZhc3RDYWxsb2Moc2l6ZS5oZWlnaHQoKSwgYnl0ZXNQZXJSb3cp
LmdldFZhbHVlKG1fZGF0YS5tX2RhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBB
U1NFUlQoIShyZWludGVycHJldF9jYXN0PHNpemVfdD4obV9kYXRhLm1fZGF0YSkgJiAyKSk7CisK
KyAgICAgICAgbV9kYXRhLm1fYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVk
TGFzdDsKKyAgICAgICAgY2dDb250ZXh0LmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1f
ZGF0YS5tX2RhdGEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3cs
IG1fZGF0YS5tX2NvbG9yU3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8pKTsKKyAgICAgICAgLy8g
Q3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgorICAgICAgICBtX2RhdGEu
bV9kYXRhUHJvdmlkZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1f
ZGF0YS5tX2RhdGEsIGRhdGFTaXplLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisgICAgfSBlbHNlIHsK
KyNpZiBkZWZpbmVkKFVTRV9JT1NVUkZBQ0UpCisgICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBj
cmVhdGVJT1N1cmZhY2Uoc2l6ZSk7CisgICAgICAgIGNnQ29udGV4dC5hZG9wdENGKHdrSU9TdXJm
YWNlQ29udGV4dENyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCksIG1fZGF0YS5tX2NvbG9yU3BhY2UpKTsKKyNlbHNlCisgICAgICAgIG1fYWNj
ZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOyAvLyBGb3JjZSB0byBmYWxzZSBvbiBvbGRlciBwbGF0
Zm9ybXMKKyNlbmRpZgorICAgIH0KKwogICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1
cm47CiAKQEAgLTEwMCw5ICsxNjAsNiBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
SW50U2l6ZSYgCiAgICAgbV9jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKICAgICBt
X2NvbnRleHQtPnRyYW5zbGF0ZSgwLCAtc2l6ZS5oZWlnaHQoKSk7CiAgICAgc3VjY2VzcyA9IHRy
dWU7Ci0gICAgCi0gICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRh
LgotICAgIG1fZGF0YS5tX2RhdGFQcm92aWRlci5hZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
V2l0aERhdGEoMCwgbV9kYXRhLm1fZGF0YSwgZGF0YVNpemUsIHJlbGVhc2VJbWFnZURhdGEpKTsK
IH0KIAogSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCkBAIC0xMjIsNyArMTc5LDE0IEBAIGJv
b2wgSW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KCkgY29uc3QKIFBhc3NSZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBjb25zdAogewogICAgIC8vIEJpdG1hcEltYWdlIHdp
bGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIENHSW1hZ2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICByZXR1
cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgQ0dJbWFnZVJlZiBjdHhJbWFnZSA9IDA7Cisg
ICAgaWYgKCFtX2FjY2VsZXJhdGVSZW5kZXJpbmcpCisgICAgICAgIGN0eEltYWdlID0gQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CisjaWYg
ZGVmaW5lZChVU0VfSU9TVVJGQUNFKQorICAgIGVsc2UKKyAgICAgICAgY3R4SW1hZ2UgPSB3a0lP
U3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsK
KyNlbmRpZgorICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGN0eEltYWdlKTsKIH0KIAog
c3RhdGljIENHSW1hZ2VSZWYgY2dJbWFnZShjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbWFn
ZUJ1ZmZlckRhdGEmIGRhdGEpCkBAIC0xMzQsMzQgKzE5OCw1MCBAQCBzdGF0aWMgQ0dJbWFnZVJl
ZiBjZ0ltYWdlKGNvbnN0IEludFNpemUmCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogZGVzdENvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2Fs
ZSkKIHsKLSAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7Ci0gICAgICAgIC8vIFdl
J3JlIGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdv
cmssIHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KLSAgICAgICAgUmVm
UHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7Ci0gICAgICAgIGRlc3RDb250ZXh0LT5kcmF3
SW1hZ2UoY29weS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5n
KSB7CisgICAgICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKKyAgICAgICAgICAg
IC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlz
IHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KKyAgICAg
ICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZSgpOworICAgICAgICAgICAgZGVz
dENvbnRleHQtPmRyYXdJbWFnZShjb3B5LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gQml0bWFwSW1h
Z2U6OmNyZWF0ZShjZ0ltYWdlKG1fc2l6ZSwgbV9kYXRhKSk7CisgICAgICAgICAgICBkZXN0Q29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlRm9yUmVuZGVyaW5nLmdldCgpLCBzdHlsZUNvbG9yU3BhY2Us
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAgICAgfQog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBC
aXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKLSAgICAgICAgZGVz
dENvbnRleHQtPmRyYXdJbWFnZShpbWFnZUZvclJlbmRlcmluZy5nZXQoKSwgc3R5bGVDb2xvclNw
YWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAg
IFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZSgpOworICAgICAgICBDb2xvclNwYWNlIGNv
bG9yU3BhY2UgPSAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSA/IENvbG9yU3BhY2VEZXZpY2VS
R0IgOiBzdHlsZUNvbG9yU3BhY2U7CisgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoY29w
eS5nZXQoKSwgY29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5
U2NhbGUpOwogICAgIH0KIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewot
ICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKLSAgICAgICAgLy8gV2UncmUgZHJh
d2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgd2Ug
bmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0LgorICAgIGlmICghbV9hY2NlbGVy
YXRlUmVuZGVyaW5nKSB7CisgICAgICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsK
KyAgICAgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9y
ZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBm
aXJzdC4KKyAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZSgpOworICAg
ICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKG1fc2l6ZSwgbV9kYXRhKSk7CisgICAgICAgICAg
ICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgewogICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5
SW1hZ2UoKTsKICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9
IEJpdG1hcEltYWdlOjpjcmVhdGUoY2dJbWFnZShtX3NpemUsIG1fZGF0YSkpOwotICAgICAgICBp
bWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAg
fQogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBpbWFnZShBZG9wdENGLCBjZ0ltYWdlKG1fc2l6ZSwgbV9kYXRhKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICBDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0ID0g
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGlt
YWdlOworICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKQorICAgICAgICBpbWFnZS5hZG9w
dENGKGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKKyNpZiBkZWZpbmVkKFVTRV9JT1NVUkZBQ0Up
CisgICAgZWxzZQorICAgICAgICBpbWFnZS5hZG9wdENGKHdrSU9TdXJmYWNlQ29udGV4dENyZWF0
ZUltYWdlKHBsYXRmb3JtQ29udGV4dCkpOworI2VuZGlmCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKHBsYXRmb3JtQ29udGV4dCwgcmVjdC54KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7
CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0LCAxLCAtMSk7CiAgICAgQ0dD
b250ZXh0Q2xpcFRvTWFzayhwbGF0Zm9ybUNvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IHJlY3Quc2l6ZSgpKSwgaW1hZ2UuZ2V0KCkpOwpAQCAtMTcwLDcgKzI1MCw3IEBAIHZvaWQgSW1h
Z2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiAKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5
IG11bHRpcGxpZWQ+Ci1QYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRT
aXplJiBzaXplKQorUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQogewogICAgIFBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiByZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOwogICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSByZXN1bHQtPmRhdGEoKS0+ZGF0YSgp
LT5kYXRhKCk7CkBAIC0xOTksNDMgKzI3OSw4MyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0
SW1hZ2VEYXRhKGNvbnN0CiAgICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBl
bmR5ID0gc2l6ZS5oZWlnaHQoKTsKICAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBvcmlnaW55Owot
Ci0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2l6ZS53aWR0aCgpOworICAgIAog
ICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0KLSAgICAv
LyA6OmNyZWF0ZSBlbnN1cmVzIHRoYXQgYWxsIEltYWdlQnVmZmVycyBoYXZlIHZhbGlkIGRhdGEs
IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgaXQgaGVyZS4KLSAgICB1bnNpZ25lZCBjaGFyKiBz
cmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VEYXRhLm1fZGF0
YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICB1bnNpZ25l
ZCBjaGFyKiBkZXN0Um93cyA9IGRhdGEgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4
ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50IGJh
c2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gc3JjUm93c1ti
YXNleCArIDNdOwotICAgICAgICAgICAgaWYgKG11bHRpcGxpZWQgPT0gVW5tdWx0aXBsaWVkICYm
IGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFz
ZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0
Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsg
YmFzZXgpWzBdOworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7CisgICAgdW5zaWduZWQg
Y2hhciogc3JjUm93czsKKworICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgeworICAgICAg
ICBzcmNCeXRlc1BlclJvdyA9IDQgKiBzaXplLndpZHRoKCk7CisgICAgICAgIHNyY1Jvd3MgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbWFnZURhdGEubV9kYXRhKSArIG9yaWdp
bnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OworICAgICAgICAKKyAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKKyAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7CisgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0g
eCAqIDQ7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IHNyY1Jvd3NbYmFz
ZXggKyAzXTsKKyAgICAgICAgICAgICAgICBpZiAobXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQg
JiYgYWxwaGEpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jv
d3NbYmFzZXhdICogMjU1KSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAy
NTUpIC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBh
bHBoYTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAgICAgICAgZGVzdFJvd3Mg
Kz0gZGVzdEJ5dGVzUGVyUm93OwogICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0
ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9IGVs
c2UgeworI2lmIGRlZmluZWQoVVNFX0lPU1VSRkFDRSkKKyAgICAgICAgSU9TdXJmYWNlUmVmIHN1
cmZhY2UgPSBpbWFnZURhdGEubV9zdXJmYWNlLmdldCgpOworICAgICAgICBJT1N1cmZhY2VMb2Nr
KHN1cmZhY2UsIGtJT1N1cmZhY2VMb2NrUmVhZE9ubHksIDApOworICAgICAgICBzcmNCeXRlc1Bl
clJvdyA9IElPU3VyZmFjZUdldEJ5dGVzUGVyUm93KHN1cmZhY2UpOworICAgICAgICBzcmNSb3dz
ID0gKHVuc2lnbmVkIGNoYXIqKShJT1N1cmZhY2VHZXRCYXNlQWRkcmVzcyhzdXJmYWNlKSkgKyBv
cmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKKyAgICAgICAgCisgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CisgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgeworICAgICAgICAgICAgICAgIGludCBiYXNl
eCA9IHggKiA0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNSb3dz
W2Jhc2V4ICsgM107CisgICAgICAgICAgICAgICAgaWYgKG11bHRpcGxpZWQgPT0gVW5tdWx0aXBs
aWVkICYmIGFscGhhKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChz
cmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhd
ICogMjU1KSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOworICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOworICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07CisgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93Owor
ICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgICAgICB9CisgICAg
ICAgIElPU3VyZmFjZVVubG9jayhzdXJmYWNlLCBrSU9TdXJmYWNlTG9ja1JlYWRPbmx5LCAwKTsK
KyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCiAgICAgfQorICAg
IAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1
ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHJlY3QsIG1fZGF0YSwg
bV9zaXplKTsKKyAgICBpZiAobV9hY2NlbGVyYXRlUmVuZGVyaW5nKQorICAgICAgICBDR0NvbnRl
eHRGbHVzaChjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICByZXR1cm4gZ2V0SW1h
Z2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJl
bmRlcmluZyk7CiB9CiAKIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAgIHJl
dHVybiBnZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUpOwor
ICAgIGlmIChtX2FjY2VsZXJhdGVSZW5kZXJpbmcpCisgICAgICAgIENHQ29udGV4dEZsdXNoKGNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBnZXRJbWFnZURhdGE8UHJl
bXVsdGlwbGllZD4ocmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7
CiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgotdm9pZCBwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhKiYgc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3ZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW1hZ2VCdWZmZXJE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZykKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNTRVJU
KHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTI2NCwzNSArMzg0LDczIEBAIHZvaWQgcHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNvdXJjZSwgY28KICAgICBpbnQgbnVtUm93cyA9IGVuZHkg
LSBkZXN0eTsKIAogICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZS0+d2lk
dGgoKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc2l6ZS53aWR0aCgpOwot
CiAgICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRhKCktPmRh
dGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotICAgIHVuc2ln
bmVkIGNoYXIqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1h
Z2VEYXRhLm1fZGF0YSkgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAq
IDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNd
OwotICAgICAgICAgICAgaWYgKG11bHRpcGxpZWQgPT0gVW5tdWx0aXBsaWVkICYmIGFscGhhICE9
IDI1NSkgewotICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4
XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7
CisgICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3M7CisKKyAgICBpZiAoIWFjY2VsZXJhdGVSZW5k
ZXJpbmcpIHsKKyAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNpemUud2lkdGgoKTsKKyAg
ICAgICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbWFnZURh
dGEubV9kYXRhKSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OworICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgeworICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAgICAgICBpbnQgYmFz
ZXggPSB4ICogNDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gc3JjUm93
c1tiYXNleCArIDNdOworICAgICAgICAgICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVubXVsdGlw
bGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9
IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RS
b3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBi
YXNleClbMF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0
ZXNQZXJSb3c7CisgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyNpZiBkZWZpbmVkKFVTRV9JT1NVUkZBQ0UpCisgICAgICAgIElP
U3VyZmFjZVJlZiBzdXJmYWNlID0gaW1hZ2VEYXRhLm1fc3VyZmFjZS5nZXQoKTsKKyAgICAgICAg
SU9TdXJmYWNlTG9jayhzdXJmYWNlLCAwLCAwKTsKKyAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0g
SU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3coc3VyZmFjZSk7CisgICAgICAgIGRlc3RSb3dzID0gKHVu
c2lnbmVkIGNoYXIqKShJT1N1cmZhY2VHZXRCYXNlQWRkcmVzcyhzdXJmYWNlKSkgKyBkZXN0eSAq
IGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IG51bUNvbHVtbnM7IHgrKykgeworICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsg
M107CisgICAgICAgICAgICAgICAgaWYgKG11bHRpcGxpZWQgPT0gVW5tdWx0aXBsaWVkICYmIGFs
cGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3Jj
Um93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNS
b3dzW2Jhc2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFz
ZXhdOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdFJvd3MgKz0g
ZGVzdEJ5dGVzUGVyUm93OworICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsK
ICAgICAgICAgfQotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
IHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIElPU3VyZmFjZVVubG9jayhzdXJm
YWNlLCAwLCAwKTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlm
CiAgICAgfQogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
SW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNl
LCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplKTsKKyAgICBpZiAobV9hY2Nl
bGVyYXRlUmVuZGVyaW5nKQorICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICBwdXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNv
dXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmlu
Zyk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1h
Z2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwg
c291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CisgICAgaWYgKG1fYWNjZWxl
cmF0ZVJlbmRlcmluZykKKyAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291
cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSwgbV9hY2NlbGVyYXRlUmVuZGVyaW5n
KTsKIH0KIAogc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKQEAgLTMzMiw3ICs0
OTAsMTQgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaQogewogICAg
IEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNv
ZGluZyhtaW1lVHlwZSkpOwogCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0
Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCkpKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgaWYgKCFtX2FjY2Vs
ZXJhdGVSZW5kZXJpbmcpCisgICAgICAgIGltYWdlLmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlSW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSkpOworI2lmIGRlZmluZWQoVVNF
X0lPU1VSRkFDRSkKKyAgICBlbHNlCisgICAgICAgIGltYWdlLmFkb3B0Q0Yod2tJT1N1cmZhY2VD
b250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSkpOworI2VuZGlm
CisKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CiAKQEAgLTM2NSw1
ICs1MzAsNCBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpCiAKICAg
ICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgb3V0LmRh
dGEoKSk7CiB9Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGEuaAkocmV2aXNpb24gNzM2NDEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAordHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZhY2UgKklPU3Vy
ZmFjZVJlZjsKIHR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwog
dHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwogdHlwZWRl
ZiB1aW50MzJfdCBDR0JpdG1hcEluZm87CkBAIC00OCw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICBD
R0JpdG1hcEluZm8gbV9iaXRtYXBJbmZvOwogICAgIHVuc2lnbmVkIG1fYnl0ZXNQZXJSb3c7CiAg
ICAgQ0dDb2xvclNwYWNlUmVmIG1fY29sb3JTcGFjZTsKKyAgICBSZXRhaW5QdHI8SU9TdXJmYWNl
UmVmPiBtX3N1cmZhY2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3Uu
Y3BwCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SW1hZ2VCdWZmZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSW1h
Z2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKICAgICBtX2JpdG1hcC5VbmxvY2soKTsK
IH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdl
Q29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29s
b3JTcGFjZSwgYm9vbCwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwg
bV9zaXplKHNpemUpCiB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
QnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAs
NyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiAgICAgbV9pbWFn
ZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9waXhtYXApOwogfQogCi1JbWFn
ZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgYm9v
bCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXpl
LCBDb2xvclNwYWNlLCBib29sLCBib29sJiBzdWNjZXNzKQogICAgIDogbV9kYXRhKHNpemUpCiAg
ICAgLCBtX3NpemUoc2l6ZSkKIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNv
bnN0IEkKIHsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNp
emUsIENvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgYm9vbCwgYm9vbCYgc3VjY2VzcykKICAg
ICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHJl
dmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1
ZmZlcldpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBJbWFnZUJ1ZmZl
ckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiAgICAgbV9iaXRtYXAtPnNldEhhc0FscGhh
KHRydWUpOwogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBib29sJiBzdWNjZXNzKQorSW1hZ2VCdWZmZXI6Oklt
YWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgYm9v
bCwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUp
CiB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJX
eC5jcHAJKHJldmlzaW9uIDczNjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBJbWFnZUJ1
ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiB7CiB9CiAKLUltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJv
b2wmIHN1Y2Nlc3MpIDogCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYs
IENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBib29sLCBib29sJiBzdWNjZXNzKSA6IAogICAg
IG1fZGF0YShJbnRTaXplKCkpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgJKHJldmlzaW9uIDcz
NjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFdlYkNvcmVTeXN0ZW1JbnRl
cmZhY2VfaAogCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmg+CisjaW5jbHVkZSA8SU9TdXJmYWNlL0lPU3VyZmFjZS5oPgogI2luY2x1ZGUgPG9iamMv
b2JqYy5oPgogCiB0eXBlZGVmIHN0cnVjdCBfTlNSYW5nZSBOU1JhbmdlOwpAQCAtMTc5LDYgKzE4
MCw5IEBAIGV4dGVybiBDRkluZGV4ICgqd2tHZXRIeXBoZW5hdGlvbkxvY2F0aW8KIGV4dGVybiBD
VExpbmVSZWYgKCp3a0NyZWF0ZUNUTGluZVdpdGhVbmlDaGFyUHJvdmlkZXIpKGNvbnN0IFVuaUNo
YXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY2hhckNvdW50LCBD
RkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAoKmRpc3Bvc2UpKGNvbnN0
IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqKTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQogZXh0ZXJuIENUVHlwZXNldHRlclJlZiAoKndrQ3JlYXRl
Q1RUeXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlvbnMpKGNvbnN0IFVuaUNoYXIq
ICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJbmRleCwgQ0ZJbmRleCogY2hhckNvdW50LCBDRkRp
Y3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZvaWQqKSwgdm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVu
aUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQqLCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9ucyk7CisK
K2V4dGVybiBDR0NvbnRleHRSZWYgKCp3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGUpKElPU3VyZmFj
ZVJlZiBzdXJmYWNlLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBDR0NvbG9yU3Bh
Y2VSZWYgY29sb3JTcGFjZSk7CitleHRlcm4gQ0dJbWFnZVJlZiAoKndrSU9TdXJmYWNlQ29udGV4
dENyZWF0ZUltYWdlKShDR0NvbnRleHRSZWYgY29udGV4dCk7CiAjZW5kaWYKIAogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tCShyZXZp
c2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZh
Y2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMiw0ICsxMjIsNyBAQCBDRkluZGV4ICgqd2tHZXRI
eXBoZW5hdGlvbkxvY2F0aW9uQmVmb3JlCiBDVExpbmVSZWYgKCp3a0NyZWF0ZUNUTGluZVdpdGhV
bmlDaGFyUHJvdmlkZXIpKGNvbnN0IFVuaUNoYXIqICgqcHJvdmlkZSkoQ0ZJbmRleCBzdHJpbmdJ
bmRleCwgQ0ZJbmRleCogY2hhckNvdW50LCBDRkRpY3Rpb25hcnlSZWYqIGF0dHJpYnV0ZXMsIHZv
aWQqKSwgdm9pZCAoKmRpc3Bvc2UpKGNvbnN0IFVuaUNoYXIqIGNoYXJzLCB2b2lkKiksIHZvaWQq
KTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogQ1RUeXBl
c2V0dGVyUmVmICgqd2tDcmVhdGVDVFR5cGVzZXR0ZXJXaXRoVW5pQ2hhclByb3ZpZGVyQW5kT3B0
aW9ucykoY29uc3QgVW5pQ2hhciogKCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0luZGV4LCBDRklu
ZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lk
ICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCosIENGRGljdGlv
bmFyeVJlZiBvcHRpb25zKTsKKworQ0dDb250ZXh0UmVmICgqd2tJT1N1cmZhY2VDb250ZXh0Q3Jl
YXRlKShJT1N1cmZhY2VSZWYgc3VyZmFjZSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCwgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UpOworQ0dJbWFnZVJlZiAoKndrSU9TdXJmYWNl
Q29udGV4dENyZWF0ZUltYWdlKShDR0NvbnRleHRSZWYgY29udGV4dCk7CiAjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gNzM2NDEp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NjcsNyArNzY3LDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRhaW5z
UGFpbnRlZAogICAgIGlmIChyZW5kZXJlcigpLT5pc1ZpZGVvKCkgJiYgdG9SZW5kZXJWaWRlbyhy
ZW5kZXJlcigpKS0+c2hvdWxkRGlzcGxheVZpZGVvKCkpCiAgICAgICAgIHJldHVybiBoYXNCb3hE
ZWNvcmF0aW9uc09yQmFja2dyb3VuZChyZW5kZXJlcigpKTsKICNlbmRpZgotI2lmIEVOQUJMRSgz
RF9DQU5WQVMpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaWYgUExBVEZPUk0o
TUFDKSAmJiBQTEFURk9STShDQSkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1df
TEVPUEFSRCkKKyNlbGlmIEVOQUJMRSgzRF9DQU5WQVMpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRDYW52YXMocmVuZGVyZXIoKSkpCiAgICAg
ICAgIHJldHVybiBoYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZChyZW5kZXJlcigpKTsKICNl
bmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw2ICsyOTcsMTQgQEAgYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbgogICAgICAgICAgICAgICAgIHJlcGFpbnRPbkNv
bXBvc2l0aW5nQ2hhbmdlKGxheWVyKTsKIAogICAgICAgICAgICAgbGF5ZXItPmVuc3VyZUJhY2tp
bmcoKTsKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0oQ0EpCisgICAgICAgICAgICBp
ZiAobGF5ZXItPnJlbmRlcmVyKCktPmlzQ2FudmFzKCkpIHsKKyAgICAgICAgICAgICAgICBIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihs
YXllci0+cmVuZGVyZXIoKS0+bm9kZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FudmFzLT5y
ZW5kZXJpbmdDb250ZXh0KCkgJiYgY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCktPmlzQWNjZWxl
cmF0ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmcoKS0+Z3JhcGhpY3NM
YXllcigpLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcodHJ1ZSk7CisgICAgICAgICAgICB9CisjZW5k
aWYKICAgICAgICAgICAgIGxheWVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNjU2KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMC0xMi0wOSAgTWF0dGhldyBEZWxhbmV5
ICA8bWRlbGFuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkb3B0IG5ldyBDRyBBUEkgZm9yIGNhbnZhcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1OTEKKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5tbToKKwogMjAxMC0xMi0wOSAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5z
dGVpbi4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50
ZXJmYWNlLm1tCShyZXZpc2lvbiA3MzY0MSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViU3lzdGVtSW50ZXJmYWNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDggQEAg
dm9pZCBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSh2b2lkKQogICAgIElOSVQoQ3JlYXRlQ1RM
aW5lV2l0aFVuaUNoYXJQcm92aWRlcik7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKICAgICBJTklUKENyZWF0ZUNUVHlwZXNldHRlcldpdGhVbmlDaGFyUHJv
dmlkZXJBbmRPcHRpb25zKTsKKyAgICBJTklUKElPU3VyZmFjZUNvbnRleHRDcmVhdGUpOworICAg
IElOSVQoSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKTsKICNlbmRpZgogCiAgICAgZGlkSW5p
dCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76354</attachid>
            <date>2010-12-12 23:26:50 -0800</date>
            <delta_ts>2010-12-13 12:12:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50591-20101212232645.patch</filename>
            <type>text/plain</type>
            <size>39552</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3Mzg3OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMTItMDkgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZG9wdCBuZXcgQ0cgQVBJIGZvciBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTkxCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBBbGwg
Y3VycmVudCBsYXlvdXQgdGVzdHMgYXJlIHN1ZmZpY2llbnQuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDogQWRkIGluIGFjY2VsZXJhdGVSZW5kZXJpbmcgZmxhZyBmb3Ig
aW1hZ2VidWZmZXIgY3JlYXRpb24uCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6aXNBY2NlbGVyYXRlZCk6IEFsd2F5cyByZXR1cm4gdHJ1ZSBpZiB1c2luZyBDQSBvbiBu
ZXcgcGxhdGZvcm1zLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3VGV4dEludGVybmFsKTogVXNlIGFjY2VsZXJhdGVSZW5kZXJpbmcgZm9yIGltYWdlYnVm
ZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKTogUGx1bWIgdGhyb3VnaCBuZXcgZmxhZy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDog
VXBkYXRlIG1ldGhvZCBzaWcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHA6IFN3aXRjaCBvZmYgb2YgYWNjZWxlcmF0ZVJlbmRlcmluZyBmbGFnIGZvciBu
ZXcgYWNjZWxlcmF0ZWQgcGF0aHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhLmg6IEFkZCBpbiBzdXJmYWNlIHJlZgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOiBVcGRhdGUgbWV0aG9kIHNpZy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcDogXl4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6IF5eCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHA6IF5eCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHA6IF5eCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDogQWRkIG5ldyBtZXRo
b2Qgc2lncworICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1t
OiBeXgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOiBTZXQgYWNjZWxlcmF0ZXNE
cmF3aW5nIGZvciBjYW52YXMgYmFja2luZ3MuCisKIDIwMTAtMTItMTIgIFBoaWxpcHBlIE5vcm1h
bmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Bl
ei4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzM4NzkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjU0LDYgKzEyNTQsOCBAQCBfd2tTaWduYWxDRlJlYWRTdHJl
YW1IYXNCeXRlcwogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKIF93a0NyZWF0ZUNUVHlwZXNldHRlcldpdGhVbmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zCitf
d2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlCitfd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKDNEX1JFTkRFUklORykKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3Mzg3OSkKKysrIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02ODks
NiArNjg5LDcgQEAKIAkJMjBENjI5MjYxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyMEQ2MjkyNDEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmNwcCAqLzsgfTsKIAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
ICovOyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0NDEw
RDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjI5OENDRTcxMkFEOEJDQTAwQzQyRTUxIC8q
IElPU3VyZmFjZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMjk4Q0NFNjEyQUQ4QkNBMDBDNDJFNTEgLyogSU9TdXJmYWNlLmZyYW1l
d29yayAqLzsgfTsKIAkJMjRGNTRFQUMxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI0RjU0RUFBMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi87
IH07CiAJCTI0RjU0RUFEMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjRGNTRFQUIx
MDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8qIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI1NDJGNEQ4MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGlj
YXRvci5jcHAgKi87IH07CkBAIC02OTcwLDYgKzY5NzEsNyBAQAogCQkyMEQ2MjkyNDEyNTM2OTBC
MDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTIyOThDQ0U2MTJBRDhCQ0EwMEM0MkU1MSAvKiBJT1N1cmZhY2UuZnJh
bWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
d3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBJT1N1cmZhY2UuZnJhbWV3b3JrOyBwYXRoID0gL1N5
c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9TdXJmYWNlLmZyYW1ld29yazsgc291cmNlVHJlZSA9
ICI8YWJzb2x1dGU+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFu
Z2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hhbmdlRXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjRGNTRFQUExMDFGRTkxNDAwMEFF
NzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMjRGNTRFQUIxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGVI
b3N0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjIyNSw2ICsxMjIyNyw3IEBA
CiAJCQkJRkQyREJGMTMxMkIwNDhBMzAwRUQ5OEM2IC8qIEF1ZGlvVG9vbGJveC5mcmFtZXdvcmsg
aW4gRnJhbWV3b3JrcyAqLywKIAkJCQlGRDJEQkYxNDEyQjA0OEEzMDBFRDk4QzYgLyogQXVkaW9V
bml0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJCUZEMkRCRjE1MTJCMDQ4QTMwMEVE
OThDNiAvKiBDb3JlQXVkaW8uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMjI5OEND
RTcxMkFEOEJDQTAwQzQyRTUxIC8qIElPU3VyZmFjZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTEyMzIxLDYgKzEyMzI0LDcgQEAKIAkJCQlGNUMyODY5NDAyODQ2RENEMDE4NjM1Q0Eg
LyogQ2FyYm9uLmZyYW1ld29yayAqLywKIAkJCQlGNUMyODY5NTAyODQ2RENEMDE4NjM1Q0EgLyog
Q29jb2EuZnJhbWV3b3JrICovLAogCQkJCTFBQjMzREE0MTI1NTFFMzIwMDI0NDU3QSAvKiBJT0tp
dC5mcmFtZXdvcmsgKi8sCisJCQkJMjI5OENDRTYxMkFEOEJDQTAwQzQyRTUxIC8qIElPU3VyZmFj
ZS5mcmFtZXdvcmsgKi8sCiAJCQkJRjgyMTYyOTkwMjlGNEZCNTAxMDAwMTMxIC8qIEphdmFTY3Jp
cHRDb3JlLmZyYW1ld29yayAqLywKIAkJCQk5M0YxRDMxQTA1NThDQzVDMDA4MjFCQzAgLyogbGli
aWN1Y29yZS5keWxpYiAqLywKIAkJCQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2Jq
Yy5keWxpYiAqLywKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24g
NzM4NzkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzIsNyArMzcyLDExIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmUKICAgICBpZiAoIXNpemUud2lkdGgoKSB8fCAhc2l6ZS5oZWlnaHQoKSkKICAgICAg
ICAgcmV0dXJuOwogCisjaWYgZGVmaW5lZChVU0VfSU9TVVJGQUNFKQorICAgIG1faW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEFjY2Vs
ZXJhdGVkKTsKKyNlbHNlCiAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
c2l6ZSk7CisjZW5kaWYKICAgICAvLyBUaGUgY29udmVydExvZ2ljYWxUb0RldmljZSBNYXhDYW52
YXNBcmVhIGNoZWNrIHNob3VsZCBwcmV2ZW50IGNvbW1vbiBjYXNlcwogICAgIC8vIHdoZXJlIElt
YWdlQnVmZmVyOjpjcmVhdGUoKSByZXR1cm5zIDAsIGhvd2V2ZXIgd2UgY291bGQgc3RpbGwgYmUg
bG93IG9uIG1lbW9yeS4KICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCkluZGV4OiBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA3
Mzg3OSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw5IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6fkNhbnZhc1JlbmRlcmkKIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Omlz
QWNjZWxlcmF0ZWQoKSBjb25zdAogewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
CisjaWYgUExBVEZPUk0oTUFDKSAmJiBQTEFURk9STShDQSkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbGlmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgcmV0dXJuIG1fY29udGV4dDNEOwogI2Vsc2UKICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xODE5LDcgKzE4MjEsMTEgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICAvLyBGSVhNRTogVGhlIHJlY3QgaXMgbm90
IGJpZyBlbm91Z2ggZm9yIG1pdGVycyBvbiBzdHJva2VkIHRleHQuCiAgICAgICAgIEludFJlY3Qg
bWFza1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KTsKIAorI2lmIGRlZmluZWQoVVNF
X0lPU1VSRkFDRSkKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQWNj
ZWxlcmF0ZWQpOworI2Vsc2UKICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2Ug
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSk7CisjZW5kaWYKIAogICAgICAg
ICBHcmFwaGljc0NvbnRleHQqIG1hc2tJbWFnZUNvbnRleHQgPSBtYXNrSW1hZ2UtPmNvbnRleHQo
KTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNp
b24gNzM4NzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDEwIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCisjaWYgKFBMQVRGT1JNKE1BQykgJiYg
UExBVEZPUk0oQ0EpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
KQorI2RlZmluZSBVU0VfSU9TVVJGQUNFIDEKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC01MSwxMyArNTUsMTggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBVbm11bHRpcGxpZWQKICAgICB9OwogCisgICAgZW51bSBS
ZW5kZXJpbmdNb2RlIHsKKyAgICAgICAgVW5hY2NlbGVyYXRlZCwKKyAgICAgICAgQWNjZWxlcmF0
ZWQKKyAgICB9OworCiAgICAgY2xhc3MgSW1hZ2VCdWZmZXIgOiBwdWJsaWMgTm9uY29weWFibGUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24g
YWxsb2NhdGlvbiBmYWlsdXJlLgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IENv
bG9yU3BhY2VEZXZpY2VSR0IpCisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlQnVmZmVy
PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29s
b3JTcGFjZURldmljZVJHQiwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVy
YXRlZCkKICAgICAgICAgewogICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
ICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgY29s
b3JTcGFjZSwgc3VjY2VzcykpOworICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWYo
bmV3IEltYWdlQnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUgPT0gQWNjZWxl
cmF0ZWQsIHN1Y2Nlc3MpKTsKICAgICAgICAgICAgIGlmIChzdWNjZXNzKQogICAgICAgICAgICAg
ICAgIHJldHVybiBidWYucmVsZWFzZSgpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDQs
NiArMTEzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbWFnZUJ1ZmZlckRhdGEg
bV9kYXRhOwogCiAgICAgICAgIEludFNpemUgbV9zaXplOworICAgICAgICBib29sIG1fYWNjZWxl
cmF0ZVJlbmRlcmluZzsKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0
OwogCiAjaWYgIVBMQVRGT1JNKENHKQpAQCAtMTEzLDcgKzEyMyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nl
c3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCiAgICAgICAgIC8vIHNvIHRoYXQgY3JlYXRl
KCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgICAgIEltYWdlQnVm
ZmVyKGNvbnN0IEludFNpemUmLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3Mp
OworICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2aXNpb24gNzM4NzkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZm
ZXJEYXRhKGNvbnN0IEkKIHsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IElu
dFNpemUmIHNpemUsIENvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgYm9vbCwgYm9vbCYgc3Vj
Y2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHJldmlz
aW9uIDczODc5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDU3IEBACiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgogI2luY2x1ZGUgPG1hdGguaD4KIAorI2lmIGRlZmluZWQoVVNFX0lPU1VSRkFD
RSkKKyNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorI2lmIGRlZmluZWQoVVNFX0lPU1VSRkFDRSkKK3N0YXRpYyBSZXRhaW5QdHI8
SU9TdXJmYWNlUmVmPiBjcmVhdGVJT1N1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAg
ICB1bnNpZ25lZCBwaXhlbEZvcm1hdCA9ICdCR1JBJzsKKyAgICB1bnNpZ25lZCBieXRlc1BlckVs
ZW1lbnQgPSA0OworICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0
ID0gc2l6ZS5oZWlnaHQoKTsKKworICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJSb3cgPSBJT1N1
cmZhY2VBbGlnblByb3BlcnR5KGtJT1N1cmZhY2VCeXRlc1BlclJvdywgc2l6ZS53aWR0aCgpICog
Ynl0ZXNQZXJFbGVtZW50KTsKKyAgICBpZiAoIWJ5dGVzUGVyUm93IHx8IGJ5dGVzUGVyUm93ICE9
IChzaXplLndpZHRoKCkgKiBieXRlc1BlckVsZW1lbnQpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NTaXplID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShrSU9T
dXJmYWNlQWxsb2NTaXplLCBzaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3cpOworICAgIGlmICgh
YWxsb2NTaXplIHx8IGFsbG9jU2l6ZSAhPSAoc2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93KSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCB2b2lkICprZXlzWzZdOworICAgIGNvbnN0
IHZvaWQgKnZhbHVlc1s2XTsKKyAgICBrZXlzWzBdID0ga0lPU3VyZmFjZVdpZHRoOworICAgIHZh
bHVlc1swXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZ3aWR0aCk7Cisg
ICAga2V5c1sxXSA9IGtJT1N1cmZhY2VIZWlnaHQ7CisgICAgdmFsdWVzWzFdID0gQ0ZOdW1iZXJD
cmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJmhlaWdodCk7CisgICAga2V5c1syXSA9IGtJT1N1
cmZhY2VQaXhlbEZvcm1hdDsKKyAgICB2YWx1ZXNbMl0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZO
dW1iZXJJbnRUeXBlLCAmcGl4ZWxGb3JtYXQpOworICAgIGtleXNbM10gPSBrSU9TdXJmYWNlQnl0
ZXNQZXJFbGVtZW50OworICAgIHZhbHVlc1szXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJl
ckludFR5cGUsICZieXRlc1BlckVsZW1lbnQpOworICAgIGtleXNbNF0gPSBrSU9TdXJmYWNlQnl0
ZXNQZXJSb3c7CisgICAgdmFsdWVzWzRdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyTG9u
Z1R5cGUsICZieXRlc1BlclJvdyk7CisgICAga2V5c1s1XSA9IGtJT1N1cmZhY2VBbGxvY1NpemU7
CisgICAgdmFsdWVzWzVdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyTG9uZ1R5cGUsICZh
bGxvY1NpemUpOworCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGljdChBZG9wdENG
LCBDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCA2LCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICAgICAgQ0ZSZWxlYXNlKHZhbHVl
c1tpXSk7CisKKyAgICByZXR1cm4gUmV0YWluUHRyPElPU3VyZmFjZVJlZj4oQWRvcHRDRiwgSU9T
dXJmYWNlQ3JlYXRlKGRpY3QuZ2V0KCkpKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCByZWxl
YXNlSW1hZ2VEYXRhKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpCiB7CiAgICAgZmFz
dEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwpAQCAtNTMsMzIgKzEwMCwyOSBAQCBzdGF0
aWMgdm9pZCByZWxlYXNlSW1hZ2VEYXRhKHZvaWQqLCBjb25zCiAKIEltYWdlQnVmZmVyRGF0YTo6
SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmKQogICAgIDogbV9kYXRhKDApCisjaWYgZGVm
aW5lZChVU0VfSU9TVVJGQUNFKQorICAgICwgbV9zdXJmYWNlKDApCisjZW5kaWYKIHsKIH0KIAot
SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2Ug
aW1hZ2VDb2xvclNwYWNlLCBib29sJiBzdWNjZXNzKQorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVy
KGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBib29sIGFj
Y2VsZXJhdGVSZW5kZXJpbmcsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgOiBtX2RhdGEoc2l6ZSkKICAg
ICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9hY2NlbGVyYXRlUmVuZGVyaW5nKGFjY2VsZXJhdGVS
ZW5kZXJpbmcpCiB7CiAgICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8gTWFrZSBlYXJseSByZXR1cm4g
bWVhbiBmYWlsdXJlLgogICAgIGlmIChzaXplLndpZHRoKCkgPCAwIHx8IHNpemUuaGVpZ2h0KCkg
PCAwKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IHNpemUu
d2lkdGgoKTsKLQotICAgIC8vIFByb3RlY3QgYWdhaW5zdCBvdmVyZmxvdwotICAgIGlmIChieXRl
c1BlclJvdyA+IDB4M0ZGRkZGRkYpCisgICAgaWYgKGJ5dGVzUGVyUm93ID4gMHgzRkZGRkZGRikg
Ly8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93CiAgICAgICAgIHJldHVybjsKICAgICBieXRlc1Bl
clJvdyAqPSA0OwogICAgIG1fZGF0YS5tX2J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3c7Ci0KICAg
ICBzaXplX3QgZGF0YVNpemUgPSBzaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7Ci0gICAgaWYg
KCF0cnlGYXN0Q2FsbG9jKHNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShtX2Rh
dGEubV9kYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKChyZWludGVycHJldF9j
YXN0PHNpemVfdD4obV9kYXRhLm1fZGF0YSkgJiAyKSA9PSAwKTsKIAotICAgIHN3aXRjaChpbWFn
ZUNvbG9yU3BhY2UpIHsKKyAgICBzd2l0Y2ggKGltYWdlQ29sb3JTcGFjZSkgewogICAgIGNhc2Ug
Q29sb3JTcGFjZURldmljZVJHQjoKICAgICAgICAgbV9kYXRhLm1fY29sb3JTcGFjZSA9IGRldmlj
ZVJHQkNvbG9yU3BhY2VSZWYoKTsKICAgICAgICAgYnJlYWs7CkBAIC05MCw5ICsxMzQsMjUgQEAg
SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIAogICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICBtX2RhdGEubV9iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRMYXN0OwotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dChBZG9wdENG
LCBDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLm1fZGF0YSwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS5tX2NvbG9yU3Bh
Y2UsIG1fZGF0YS5tX2JpdG1hcEluZm8pKTsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBj
Z0NvbnRleHQ7CisgICAgaWYgKCFtX2FjY2VsZXJhdGVSZW5kZXJpbmcpIHsKKyAgICAgICAgaWYg
KCF0cnlGYXN0Q2FsbG9jKHNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShtX2Rh
dGEubV9kYXRhKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRl
cnByZXRfY2FzdDxzaXplX3Q+KG1fZGF0YS5tX2RhdGEpICYgMikpOworCisgICAgICAgIG1fZGF0
YS5tX2JpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisgICAgICAg
IGNnQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEubV9kYXRhLCBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LCBtX2RhdGEubV9jb2xv
clNwYWNlLCBtX2RhdGEubV9iaXRtYXBJbmZvKSk7CisgICAgICAgIC8vIENyZWF0ZSBhIGxpdmUg
aW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KKyAgICAgICAgbV9kYXRhLm1fZGF0YVByb3ZpZGVy
LmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEubV9kYXRhLCBk
YXRhU2l6ZSwgcmVsZWFzZUltYWdlRGF0YSkpOworICAgIH0gZWxzZSB7CisjaWYgZGVmaW5lZChV
U0VfSU9TVVJGQUNFKQorICAgICAgICBtX2RhdGEubV9zdXJmYWNlID0gY3JlYXRlSU9TdXJmYWNl
KHNpemUpOworICAgICAgICBjZ0NvbnRleHQuYWRvcHRDRih3a0lPU3VyZmFjZUNvbnRleHRDcmVh
dGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBt
X2RhdGEubV9jb2xvclNwYWNlKSk7CisjZWxzZQorICAgICAgICBtX2FjY2VsZXJhdGVSZW5kZXJp
bmcgPSBmYWxzZTsgLy8gRm9yY2UgdG8gZmFsc2Ugb24gb2xkZXIgcGxhdGZvcm1zCisjZW5kaWYK
KyAgICB9CisKICAgICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDAs
OSArMTYwLDYgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIAogICAg
IG1fY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAgbV9jb250ZXh0LT50cmFu
c2xhdGUoMCwgLXNpemUuaGVpZ2h0KCkpOwogICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgIAotICAg
IC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICBtX2RhdGEu
bV9kYXRhUHJvdmlkZXIuYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1f
ZGF0YS5tX2RhdGEsIGRhdGFTaXplLCByZWxlYXNlSW1hZ2VEYXRhKSk7CiB9CiAKIEltYWdlQnVm
ZmVyOjp+SW1hZ2VCdWZmZXIoKQpAQCAtMTIyLDcgKzE3OSwxNCBAQCBib29sIEltYWdlQnVmZmVy
OjpkcmF3c1VzaW5nQ29weSgpIGNvbnN0CiBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6
Y29weUltYWdlKCkgY29uc3QKIHsKICAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhl
IHBhc3NlZCBpbiBDR0ltYWdlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJuIEJpdG1hcEltYWdl
OjpjcmVhdGUoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKSkpOworICAgIENHSW1hZ2VSZWYgY3R4SW1hZ2UgPSAwOworICAgIGlmICghbV9hY2Nl
bGVyYXRlUmVuZGVyaW5nKQorICAgICAgICBjdHhJbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0
ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworI2lmIGRlZmluZWQoVVNFX0lP
U1VSRkFDRSkKKyAgICBlbHNlCisgICAgICAgIGN0eEltYWdlID0gd2tJT1N1cmZhY2VDb250ZXh0
Q3JlYXRlSW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjdHhJbWFnZSk7CiB9CiAKIHN0YXRpYyBDR0ltYWdl
UmVmIGNnSW1hZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBk
YXRhKQpAQCAtMTM0LDM0ICsxOTgsNTAgQEAgc3RhdGljIENHSW1hZ2VSZWYgY2dJbWFnZShjb25z
dCBJbnRTaXplJgogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RD
b250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICBD
b21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7Ci0gICAgaWYg
KGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgewotICAgICAgICAvLyBXZSdyZSBkcmF3aW5nIGlu
dG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3ZSBuZWVkIHRv
IGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gY29w
eSA9IGNvcHlJbWFnZSgpOwotICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKGNvcHkuZ2V0
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVh
bGl0eVNjYWxlKTsKKyAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRlcmluZykgeworICAgICAgICBp
ZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7CisgICAgICAgICAgICAvLyBXZSdyZSBkcmF3
aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3ZSBu
ZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCisgICAgICAgICAgICBSZWZQdHI8
SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKKyAgICAgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3
SW1hZ2UoY29weS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IEJpdG1hcEltYWdlOjpjcmVhdGUoY2dJ
bWFnZShtX3NpemUsIG1fZGF0YSkpOworICAgICAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFn
ZShpbWFnZUZvclJlbmRlcmluZy5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gQml0bWFwSW1hZ2U6OmNy
ZWF0ZShjZ0ltYWdlKG1fc2l6ZSwgbV9kYXRhKSk7Ci0gICAgICAgIGRlc3RDb250ZXh0LT5kcmF3
SW1hZ2UoaW1hZ2VGb3JSZW5kZXJpbmcuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAgICBSZWZQdHI8SW1hZ2U+
IGNvcHkgPSBjb3B5SW1hZ2UoKTsKKyAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gKGRl
c3RDb250ZXh0ID09IGNvbnRleHQoKSkgPyBDb2xvclNwYWNlRGV2aWNlUkdCIDogc3R5bGVDb2xv
clNwYWNlOworICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKGNvcHkuZ2V0KCksIGNvbG9y
U3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKICAgICB9
CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAoZGVzdENv
bnRleHQgPT0gY29udGV4dCgpKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIg
b3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0
aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KKyAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRlcmluZykg
eworICAgICAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7CisgICAgICAgICAgICAv
LyBXZSdyZSBkcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0
byB3b3JrLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCisgICAgICAg
ICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKKyAgICAgICAgICAgIGNvcHkt
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IEJpdG1hcEltYWdlOjpj
cmVhdGUoY2dJbWFnZShtX3NpemUsIG1fZGF0YSkpOworICAgICAgICAgICAgaW1hZ2VGb3JSZW5k
ZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKICAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CiAgICAg
ICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJbWFnZTo6
Y3JlYXRlKGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKLSAgICAgICAgaW1hZ2VGb3JSZW5kZXJp
bmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogICAgIH0KIH0KIAogdm9pZCBJ
bWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkgY29uc3QKIHsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRvcHRD
RiwgY2dJbWFnZShtX3NpemUsIG1fZGF0YSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBpZiAo
IW1fYWNjZWxlcmF0ZVJlbmRlcmluZykKKyAgICAgICAgaW1hZ2UuYWRvcHRDRihjZ0ltYWdlKG1f
c2l6ZSwgbV9kYXRhKSk7CisjaWYgZGVmaW5lZChVU0VfSU9TVVJGQUNFKQorICAgIGVsc2UKKyAg
ICAgICAgaW1hZ2UuYWRvcHRDRih3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZShwbGF0Zm9y
bUNvbnRleHQpKTsKKyNlbmRpZgogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHQsIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4
dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCwgMSwgLTEpOwogICAgIENHQ29udGV4dENsaXBUb01h
c2socGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSks
IGltYWdlLmdldCgpKTsKQEAgLTE3MCw3ICsyNTAsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpjbGlw
KEdyYXBoaWNzQ29udGV4dCogCiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgot
UGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbWFnZUJ1ZmZlckRhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1Bh
c3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgSW1hZ2VCdWZmZXJEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
YWNjZWxlcmF0ZVJlbmRlcmluZykKIHsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcmVzdWx0
ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICB1
bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOwpAQCAt
MTk5LDQzICsyNzksODMgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25z
dAogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgZW5keSA9IHNpemUuaGVp
Z2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKLQotICAgIHVuc2lnbmVk
IHNyY0J5dGVzUGVyUm93ID0gNCAqIHNpemUud2lkdGgoKTsKKyAgICAKICAgICB1bnNpZ25lZCBk
ZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotCi0gICAgLy8gOjpjcmVhdGUgZW5z
dXJlcyB0aGF0IGFsbCBJbWFnZUJ1ZmZlcnMgaGF2ZSB2YWxpZCBkYXRhLCBzbyB3ZSBkb24ndCBu
ZWVkIHRvIGNoZWNrIGl0IGhlcmUuCi0gICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGltYWdlRGF0YS5tX2RhdGEpICsgb3JpZ2lueSAq
IHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7CiAgICAgdW5zaWduZWQgY2hhciogZGVzdFJv
d3MgPSBkYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0Owot
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAg
ICAgICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCAmJiBhbHBoYSkgewotICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFz
ZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClb
MF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKKwor
ICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93OworICAgIHVuc2lnbmVkIGNoYXIqIHNyY1Jvd3M7
CisKKyAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKKyAgICAgICAgc3JjQnl0ZXNQZXJS
b3cgPSA0ICogc2l6ZS53aWR0aCgpOworICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VEYXRhLm1fZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQ
ZXJSb3cgKyBvcmlnaW54ICogNDsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbnVtUm93czsgKyt5KSB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNv
bHVtbnM7IHgrKykgeworICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107CisgICAg
ICAgICAgICAgICAgaWYgKG11bHRpcGxpZWQgPT0gVW5tdWx0aXBsaWVkICYmIGFscGhhKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1
NSkgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PihzcmNSb3dzICsgYmFzZXgpWzBdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3JjUm93
cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1Bl
clJvdzsKICAgICAgICAgfQotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgfSBlbHNlIHsKKyNpZiBkZWZp
bmVkKFVTRV9JT1NVUkZBQ0UpCisgICAgICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlID0gaW1hZ2VE
YXRhLm1fc3VyZmFjZS5nZXQoKTsKKyAgICAgICAgSU9TdXJmYWNlTG9jayhzdXJmYWNlLCBrSU9T
dXJmYWNlTG9ja1JlYWRPbmx5LCAwKTsKKyAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBJT1N1cmZh
Y2VHZXRCeXRlc1BlclJvdyhzdXJmYWNlKTsKKyAgICAgICAgc3JjUm93cyA9ICh1bnNpZ25lZCBj
aGFyKikoSU9TdXJmYWNlR2V0QmFzZUFkZHJlc3Moc3VyZmFjZSkpICsgb3JpZ2lueSAqIHNyY0J5
dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG51bVJvd3M7ICsreSkgeworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBu
dW1Db2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwor
ICAgICAgICAgICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCAmJiBhbHBoYSkg
eworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCAr
IDJdICogMjU1KSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBo
YTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOworICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAgICAgIGRl
c3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICAgICAgfQorICAgICAgICBJT1N1cmZhY2VV
bmxvY2soc3VyZmFjZSwga0lPU3VyZmFjZUxvY2tSZWFkT25seSwgMCk7CisjZWxzZQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgogICAgIH0KKyAgICAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAgIHJldHVy
biBnZXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihyZWN0LCBtX2RhdGEsIG1fc2l6ZSk7CisgICAg
aWYgKG1fYWNjZWxlcmF0ZVJlbmRlcmluZykKKyAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIGdldEltYWdlRGF0YTxVbm11bHRp
cGxpZWQ+KHJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOwogfQog
CiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhPFByZW11bHRpcGxpZWQ+KHJlY3QsIG1fZGF0YSwgbV9zaXplKTsKKyAgICBpZiAobV9hY2Nl
bGVyYXRlUmVuZGVyaW5nKQorICAgICAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHJl
Y3QsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOwogfQogCiB0ZW1wbGF0
ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KLXZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSomIHNv
dXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgSW1hZ2VCdWZmZXJEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCit2b2lk
IHB1dEltYWdlRGF0YShJbWFnZURhdGEqJiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEltYWdlQnVmZmVyRGF0YSYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCiB7CiAgICAg
QVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwogICAgIEFTU0VSVChzb3VyY2VSZWN0Lmhl
aWdodCgpID4gMCk7CkBAIC0yNjQsMzUgKzM4NCw3MyBAQCB2b2lkIHB1dEltYWdlRGF0YShJbWFn
ZURhdGEqJiBzb3VyY2UsIGNvCiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKICAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2UtPndpZHRoKCk7Ci0gICAgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNpemUud2lkdGgoKTsKLQogICAgIHVuc2lnbmVk
IGNoYXIqIHNyY1Jvd3MgPSBzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCkgKyBvcmlnaW55
ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0
Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGltYWdlRGF0YS5tX2RhdGEp
ICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1D
b2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAg
IGlmIChtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dz
W2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRl
c3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3Mg
KyBiYXNleClbMF07CisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OworICAgIHVuc2lnbmVk
IGNoYXIqIGRlc3RSb3dzOworCisgICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7CisgICAg
ICAgIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzaXplLndpZHRoKCk7CisgICAgICAgIGRlc3RSb3dz
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VEYXRhLm1fZGF0YSkgKyBk
ZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKKyAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
bnVtQ29sdW1uczsgeCsrKSB7CisgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsK
KyAgICAgICAgICAgICAgICBpZiAobXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQgJiYgYWxwaGEg
IT0gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dz
W2Jhc2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7
CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNl
eCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVsw
XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAg
ICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisjaWYgZGVmaW5lZChVU0VfSU9TVVJGQUNFKQorICAgICAgICBJT1N1cmZhY2VSZWYgc3Vy
ZmFjZSA9IGltYWdlRGF0YS5tX3N1cmZhY2UuZ2V0KCk7CisgICAgICAgIElPU3VyZmFjZUxvY2so
c3VyZmFjZSwgMCwgMCk7CisgICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IElPU3VyZmFjZUdldEJ5
dGVzUGVyUm93KHN1cmZhY2UpOworICAgICAgICBkZXN0Um93cyA9ICh1bnNpZ25lZCBjaGFyKiko
SU9TdXJmYWNlR2V0QmFzZUFkZHJlc3Moc3VyZmFjZSkpICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJS
b3cgKyBkZXN0eCAqIDQ7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51
bVJvd3M7ICsreSkgeworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5z
OyB4KyspIHsKKyAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOworICAgICAgICAg
ICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsK
KyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAy
XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleF0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07CisgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07CisgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJv
dzsKKyAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CiAgICAgICAgIH0KLSAg
ICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBzcmNSb3dzICs9IHNy
Y0J5dGVzUGVyUm93OworICAgICAgICBJT1N1cmZhY2VVbmxvY2soc3VyZmFjZSwgMCwgMCk7Cisj
ZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgogICAgIH0KIH0KIAog
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291
cmNlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
KQogewotICAgIHB1dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwg
ZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CisgICAgaWYgKG1fYWNjZWxlcmF0ZVJlbmRlcmlu
ZykKKyAgICAgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgcHV0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0
UG9pbnQsIG1fZGF0YSwgbV9zaXplLCBtX2FjY2VsZXJhdGVSZW5kZXJpbmcpOwogfQogCiB2b2lk
IEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQog
ewotICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRl
c3RQb2ludCwgbV9kYXRhLCBtX3NpemUpOworICAgIGlmIChtX2FjY2VsZXJhdGVSZW5kZXJpbmcp
CisgICAgICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgbV9kYXRhLCBtX3NpemUsIG1fYWNjZWxlcmF0ZVJlbmRlcmluZyk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCkBAIC0zMzIsNyArNDkwLDE0IEBAIFN0cmlu
ZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkKIHsKICAgICBBU1NFUlQoTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUp
KTsKIAotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZShBZG9wdENGLCBDR0JpdG1hcENv
bnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5n
KQorICAgICAgICBpbWFnZS5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKKyNpZiBkZWZpbmVkKFVTRV9JT1NVUkZBQ0UpCisg
ICAgZWxzZQorICAgICAgICBpbWFnZS5hZG9wdENGKHdrSU9TdXJmYWNlQ29udGV4dENyZWF0ZUlt
YWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKKyNlbmRpZgorCiAgICAgaWYgKCFp
bWFnZSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCkBAIC0zNjQsNSArNTI5LDQgQEAgU3Ry
aW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaQogCiAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIG91dCk7CiB9Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckRhdGEuaAkocmV2aXNpb24gNzM4NzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
IAordHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZhY2UgKklPU3VyZmFjZVJlZjsKIHR5cGVkZWYgc3Ry
dWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwogdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRh
UHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwogdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcElu
Zm87CkBAIC00OCw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICBDR0JpdG1hcEluZm8gbV9iaXRtYXBJ
bmZvOwogICAgIHVuc2lnbmVkIG1fYnl0ZXNQZXJSb3c7CiAgICAgQ0dDb2xvclNwYWNlUmVmIG1f
Y29sb3JTcGFjZTsKKyAgICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBtX3N1cmZhY2U7CiB9Owog
CiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCShyZXZpc2lvbiA3Mzg3OSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VC
dWZmZXJEYXRhKCkKICAgICBtX2JpdG1hcC5VbmxvY2soKTsKIH0KIAotSW1hZ2VCdWZmZXI6Oklt
YWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQ29sb3JTcGFjZSBpbWFnZUNvbG9y
U3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgYm9vbCwgYm9vbCYg
c3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJl
dmlzaW9uIDczODc5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZl
clF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6
OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiAgICAgbV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0
ZUZvclJlbmRlcmluZygmbV9waXhtYXApOwogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVm
ZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlLCBib29sLCBi
b29sJiBzdWNjZXNzKQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZl
clNraWEuY3BwCShyZXZpc2lvbiA3Mzg3OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBA
IEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEkKIHsKIH0KIAotSW1hZ2VC
dWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UsIGJvb2wm
IHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Q29sb3JTcGFjZSwgYm9vbCwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAg
ICwgbV9zaXplKHNpemUpCiB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L0ltYWdlQnVmZmVyV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHJldmlzaW9uIDczODc5KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0
YShjb25zdCBJCiAgICAgbV9iaXRtYXAtPnNldEhhc0FscGhhKHRydWUpOwogfQogCi1JbWFnZUJ1
ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBib29sJiBzdWNjZXNzKQorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNp
emUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgYm9vbCwgYm9vbCYgc3VjY2VzcykKICAg
ICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHJldmlzaW9uIDczODc5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YShjb25zdCBJCiB7CiB9CiAKLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRT
aXplJiwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpIDogCitJbWFn
ZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIENvbG9yU3BhY2UgaW1hZ2VDb2xv
clNwYWNlLCBib29sLCBib29sJiBzdWNjZXNzKSA6IAogICAgIG1fZGF0YShJbnRTaXplKCkpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgJKHJldmlzaW9uIDczODc5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSwxMCBAQAogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2
aWNlcy5oPgogI2luY2x1ZGUgPG9iamMvb2JqYy5oPgogCisjaWYgUExBVEZPUk0oTUFDKSAmJiBQ
TEFURk9STShDQSkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
KyNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+CisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1
Y3QgX05TUmFuZ2UgTlNSYW5nZTsKIAogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19D
R0dFT01FVFJZX1RZUEVTCkBAIC0xNzksNiArMTgzLDkgQEAgZXh0ZXJuIENGSW5kZXggKCp3a0dl
dEh5cGhlbmF0aW9uTG9jYXRpbwogZXh0ZXJuIENUTGluZVJlZiAoKndrQ3JlYXRlQ1RMaW5lV2l0
aFVuaUNoYXJQcm92aWRlcikoY29uc3QgVW5pQ2hhciogKCpwcm92aWRlKShDRkluZGV4IHN0cmlu
Z0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywg
dm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hhcnMsIHZvaWQqKSwgdm9p
ZCopOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiBleHRl
cm4gQ1RUeXBlc2V0dGVyUmVmICgqd2tDcmVhdGVDVFR5cGVzZXR0ZXJXaXRoVW5pQ2hhclByb3Zp
ZGVyQW5kT3B0aW9ucykoY29uc3QgVW5pQ2hhciogKCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0lu
ZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENGRGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9p
ZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3QgVW5pQ2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCos
IENGRGljdGlvbmFyeVJlZiBvcHRpb25zKTsKKworZXh0ZXJuIENHQ29udGV4dFJlZiAoKndrSU9T
dXJmYWNlQ29udGV4dENyZWF0ZSkoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlKTsKK2V4dGVybiBD
R0ltYWdlUmVmICgqd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UpKENHQ29udGV4dFJlZiBj
b250ZXh0KTsKICNlbmRpZgogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDczODc5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTIy
LDQgKzEyMiw3IEBAIENGSW5kZXggKCp3a0dldEh5cGhlbmF0aW9uTG9jYXRpb25CZWZvcmUKIENU
TGluZVJlZiAoKndrQ3JlYXRlQ1RMaW5lV2l0aFVuaUNoYXJQcm92aWRlcikoY29uc3QgVW5pQ2hh
ciogKCpwcm92aWRlKShDRkluZGV4IHN0cmluZ0luZGV4LCBDRkluZGV4KiBjaGFyQ291bnQsIENG
RGljdGlvbmFyeVJlZiogYXR0cmlidXRlcywgdm9pZCopLCB2b2lkICgqZGlzcG9zZSkoY29uc3Qg
VW5pQ2hhciogY2hhcnMsIHZvaWQqKSwgdm9pZCopOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9TTk9XX0xFT1BBUkQpCiBDVFR5cGVzZXR0ZXJSZWYgKCp3a0NyZWF0ZUNUVHlwZXNl
dHRlcldpdGhVbmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zKShjb25zdCBVbmlDaGFyKiAoKnByb3Zp
ZGUpKENGSW5kZXggc3RyaW5nSW5kZXgsIENGSW5kZXgqIGNoYXJDb3VudCwgQ0ZEaWN0aW9uYXJ5
UmVmKiBhdHRyaWJ1dGVzLCB2b2lkKiksIHZvaWQgKCpkaXNwb3NlKShjb25zdCBVbmlDaGFyKiBj
aGFycywgdm9pZCopLCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpOworCitDR0NvbnRl
eHRSZWYgKCp3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGUpKElPU3VyZmFjZVJlZiBzdXJmYWNlLCB1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFj
ZSk7CitDR0ltYWdlUmVmICgqd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UpKENHQ29udGV4
dFJlZiBjb250ZXh0KTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCShyZXZpc2lvbiA3Mzg3OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2Nyw3ICs3NjcsOCBAQCBib29s
IFJlbmRlckxheWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkCiAgICAgaWYgKHJlbmRlcmVyKCkt
PmlzVmlkZW8oKSAmJiB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpLT5zaG91bGREaXNwbGF5Vmlk
ZW8oKSkKICAgICAgICAgcmV0dXJuIGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKHJlbmRl
cmVyKCkpOwogI2VuZGlmCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykgfHwgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKKyNpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKENBKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2VsaWYgRU5BQkxFKDNEX0NB
TlZBUykgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAoaXNBY2NlbGVy
YXRlZENhbnZhcyhyZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIGhhc0JveERlY29yYXRpb25z
T3JCYWNrZ3JvdW5kKHJlbmRlcmVyKCkpOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDczODc5KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjk3LDYgKzI5NywxNCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2lu
CiAgICAgICAgICAgICAgICAgcmVwYWludE9uQ29tcG9zaXRpbmdDaGFuZ2UobGF5ZXIpOwogCiAg
ICAgICAgICAgICBsYXllci0+ZW5zdXJlQmFja2luZygpOworCisjaWYgUExBVEZPUk0oTUFDKSAm
JiBQTEFURk9STShDQSkKKyAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS0+aXNDYW52
YXMoKSkgeworICAgICAgICAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0
aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGxheWVyLT5yZW5kZXJlcigpLT5ub2RlKCkpOwor
ICAgICAgICAgICAgICAgIGlmIChjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSAmJiBjYW52YXMt
PnJlbmRlcmluZ0NvbnRleHQoKS0+aXNBY2NlbGVyYXRlZCgpKQorICAgICAgICAgICAgICAgICAg
ICBsYXllci0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCktPnNldEFjY2VsZXJhdGVzRHJhd2lu
Zyh0cnVlKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgbGF5ZXJDaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzM4Nzkp
CisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDEwLTEyLTA5ICBNYXR0aGV3IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRvcHQgbmV3IENH
IEFQSSBmb3IgY2FudmFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDU5MQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJm
YWNlLm1tOgorCiAyMDEwLTEyLTA5ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGEgYnVnIHVuY292ZXJlZCBieSBjbGFuZysrLgpJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlz
aW9uIDczODc5KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZh
Y2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCB2b2lkIEluaXRXZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlKHZvaWQpCiAgICAgSU5JVChDcmVhdGVDVExpbmVXaXRoVW5pQ2hhclBy
b3ZpZGVyKTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQog
ICAgIElOSVQoQ3JlYXRlQ1RUeXBlc2V0dGVyV2l0aFVuaUNoYXJQcm92aWRlckFuZE9wdGlvbnMp
OworICAgIElOSVQoSU9TdXJmYWNlQ29udGV4dENyZWF0ZSk7CisgICAgSU5JVChJT1N1cmZhY2VD
b250ZXh0Q3JlYXRlSW1hZ2UpOwogI2VuZGlmCiAKICAgICBkaWRJbml0ID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76419</attachid>
            <date>2010-12-13 12:12:59 -0800</date>
            <delta_ts>2010-12-13 12:24:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50591-20101213121258.patch</filename>
            <type>text/plain</type>
            <size>8460</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3Mzk0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMTItMTMgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZG9wdCBuZXcgQ0cgQVBJIGZvciBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTkxCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIG5lY2Vz
c2FyeS4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL1dlYkNvcmUueGNjb25maWc6IEFkZGlu
ZyBJT1N1cmZhY2UgZnJhbWV3b3JrIGxpbmsuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDogVXNpbmcgbmV3IElPU3VyZmFjZSBkZWYuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDogUHVzaGluZyBSZW5kZXJpbmdNb2Rl
IGVudW0gZG93biBpbnRvIGNvbnN0cnVjdG9yLiBTYW1lIGZvciBiZWxvdyB2dnYuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDEwLTEyLTEzICBZdXJ5IFNlbWlraGF0
c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJvbGxvdXQg
NzM5MTQsIDczOTE1LCA3MzkxNywgNzM5MjAgYW5kIDczOTIxLgpJbmRleDogV2ViQ29yZS9Db25m
aWd1cmF0aW9ucy9XZWJDb3JlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ29uZmln
dXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZwkocmV2aXNpb24gNzM5MzQpCisrKyBXZWJDb3JlL0Nv
bmZpZ3VyYXRpb25zL1dlYkNvcmUueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1
LDcgQEAgT1RIRVJfTERGTEFHUyA9ICQoT1RIRVJfTERGTEFHU18kKFJFQUxfUAogT1RIRVJfTERG
TEFHU19pcGhvbmVvcyA9ICQoT1RIRVJfTERGTEFHU19CQVNFKSAtZnJhbWV3b3JrIENGTmV0d29y
ayAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFt
ZXdvcmsgQ29yZVRleHQgLWZyYW1ld29yayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgR3JhcGhpY3NT
ZXJ2aWNlcyAtZnJhbWV3b3JrIEltYWdlSU8gLWZyYW1ld29yayBRdWFydHpDb3JlOwogT1RIRVJf
TERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAkKE9USEVSX0xERkxBR1NfaXBob25lb3MpOwogT1RI
RVJfTERGTEFHU19tYWNvc3ggPSAkKE9USEVSX0xERkxBR1NfQkFTRSkgLXN1Yl9saWJyYXJ5IGxp
Ym9iamMgLXVtYnJlbGxhIFdlYktpdCAkKFdFQktJVDJfTERGTEFHUykgJChPVEhFUl9MREZMQUdT
X21hY29zeF8kKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SKSk7Ci1PVEhFUl9MREZMQUdT
X21hY29zeF8xMDcwID0gLVhsaW5rZXIgLW9iamNfZ2NfY29tcGFjdGlvbjsKK09USEVSX0xERkxB
R1NfbWFjb3N4XzEwNzAgPSAtWGxpbmtlciAtb2JqY19nY19jb21wYWN0aW9uIC1mcmFtZXdvcmsg
SU9TdXJmYWNlOwogCiBQUk9EVUNUSU9OX0ZSQU1FV09SS1NfRElSID0gJChQUk9EVUNUSU9OX0ZS
QU1FV09SS1NfRElSXyQoUkVBTF9QTEFURk9STV9OQU1FKSk7CiBQUk9EVUNUSU9OX0ZSQU1FV09S
S1NfRElSX2lwaG9uZW9zID0gJChTREtST09UKSQoU1lTVEVNX0xJQlJBUllfRElSKS9Qcml2YXRl
RnJhbWV3b3JrczsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDczOTM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyAr
MTQ0LDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp+Q2FudmFzUmVuZGVyaQogCiBib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0jaWYg
UExBVEZPUk0oTUFDKSAmJiBQTEFURk9STShDQSkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKKyNpZiBkZWZpbmVkKFVTRV9JT1NVUkZBQ0UpCiAgICAgcmV0dXJu
IHRydWU7CiAjZWxpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIHJldHVybiBt
X2NvbnRleHQzRDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJ
KHJldmlzaW9uIDczOTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBJbnRT
aXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlRGV2aWNlUkdCLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkKQogICAgICAgICB7CiAg
ICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gYnVmKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCBjb2xvclNwYWNlLCByZW5kZXJpbmdN
b2RlID09IEFjY2VsZXJhdGVkLCBzdWNjZXNzKSk7CisgICAgICAgICAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IGJ1ZihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9k
ZSwgc3VjY2VzcykpOwogICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGJ1Zi5yZWxlYXNlKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTEyMyw3ICsx
MjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3Rv
ciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQogICAg
ICAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWls
dXJlLgotICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGJvb2wmIHN1Y2Nlc3MpOworICAgICAg
ICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2aXNpb24gNzM5MzQpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRh
KGNvbnN0IEkKIHsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUm
IHNpemUsIENvbG9yU3BhY2UsIGJvb2wsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwg
Ym9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAJKHJldmlzaW9uIDczOTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDExICsxMDYsMTQgQEAgSW1hZ2VC
dWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3Bh
Y2UsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlIGltYWdlQ29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBib29sJiBzdWNjZXNzKQogICAgIDog
bV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fYWNjZWxlcmF0ZVJlbmRl
cmluZyhhY2NlbGVyYXRlUmVuZGVyaW5nKQorICAgICwgbV9hY2NlbGVyYXRlUmVuZGVyaW5nKHJl
bmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQpCiB7CisjaWYgIWRlZmluZWQoVVNFX0lPU1VSRkFD
RSkKKyAgICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKTsKKyNlbmRpZgog
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsgIC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4K
ICAgICBpZiAoc2l6ZS53aWR0aCgpIDwgMCB8fCBzaXplLmhlaWdodCgpIDwgMCkKICAgICAgICAg
cmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZl
ckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlQnVmZmVySGFpa3UuY3BwCShyZXZpc2lvbiA3MzkzNCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKICAgICBt
X2JpdG1hcC5VbmxvY2soKTsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IElu
dFNpemUmIHNpemUsIEltYWdlQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wsIGJvb2wm
IHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
SW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3Vj
Y2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlz
aW9uIDczOTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6Oklt
YWdlQnVmZmVyRGF0YShjb25zdCBJCiAgICAgbV9pbWFnZSA9IFN0aWxsSW1hZ2U6OmNyZWF0ZUZv
clJlbmRlcmluZygmbV9waXhtYXApOwogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgYm9vbCwgYm9vbCYgc3VjY2VzcykKK0ltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlLCBSZW5k
ZXJpbmdNb2RlLCBib29sJiBzdWNjZXNzKQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3Np
emUoc2l6ZSkKIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA3MzkzNCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEkKIHsK
IH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9y
U3BhY2UsIGJvb2wsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2Vz
cykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5j
cHAJKHJldmlzaW9uIDczOTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9J
bWFnZUJ1ZmZlcldpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBJbWFn
ZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiAgICAgbV9iaXRtYXAtPnNldEhh
c0FscGhhKHRydWUpOwogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBib29sLCBib29sJiBzdWNjZXNzKQorSW1h
Z2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXpl
KQogICAgICwgbV9zaXplKHNpemUpCiB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHJldmlzaW9uIDczOTM0KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiB7
CiB9CiAKLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgQ29sb3JTcGFj
ZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wsIGJvb2wmIHN1Y2Nlc3MpIDogCitJbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlLCBib29sJiBzdWNjZXNzKSA6IAogICAgIG1fZGF0YShJbnRTaXplKCkpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
</data>
<flag name="review"
          id="67361"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>