<?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>43398</bug_id>
          
          <creation_ts>2010-08-02 19:08:42 -0700</creation_ts>
          <short_desc>Port Chromium&apos;s accelerated compositing to Mac OS X</short_desc>
          <delta_ts>2010-09-08 12:10:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>thakis</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>259252</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-02 19:08:42 -0700</bug_when>
    <thetext>The Chromium port of the accelerated compositing feature needs to be ported to Mac OS X.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259258</commentid>
    <comment_count>1</comment_count>
      <attachid>63289</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-02 19:28:49 -0700</bug_when>
    <thetext>Created attachment 63289
Patch

From the ChangeLog:

Fixed compilation problems with gcc. Ported to Core Graphics and adjusted scrolling and incremental updating code, taking into account lower-left coordinate system origin. Added WebGLES2Context::resizeOnscreenContent, needed on Mac OS X to report window size changes. Sent resize notifications to WebGLES2Context.

Note that this patch must land after http://codereview.chromium.org/3067026 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259259</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-02 19:30:51 -0700</bug_when>
    <thetext>Attachment 63289 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:855:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259264</commentid>
    <comment_count>3</comment_count>
      <attachid>63292</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-02 19:37:58 -0700</bug_when>
    <thetext>Created attachment 63292
Revised patch

Fixed style error in previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259296</commentid>
    <comment_count>4</comment_count>
      <attachid>63292</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-02 23:25:24 -0700</bug_when>
    <thetext>Comment on attachment 63292
Revised patch

WebCore/platform/graphics/chromium/LayerChromium.cpp:190
 +      OwnPtr&lt;GraphicsContext&gt; graphicsContext(new GraphicsContext(contextCG.get()));
nit: why not just allocate this GraphicsContext on the stack?

WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:254
 +      m_rootLayerCGContext = RetainPtr&lt;CGContextRef&gt;(AdoptCF, 0);
nit: you can also write m_rootLayerCGContext.adoptCF(0), which I think is more conventional.

WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:117
 +          colorSpace = RetainPtr&lt;CGColorSpaceRef&gt;(AdoptCF, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGBLinear));
colorSpace.adoptCF(CGColorSpaceCreateWithName(...));

WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:260
 +      m_rootLayerCGContext = RetainPtr&lt;CGContextRef&gt;(AdoptCF, CGBitmapContextCreate(m_rootLayerBackingStore.data(),
ditto

WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:390
 +          scrolledLayerMatrix.translate3d((int)floorf(0.5 * visibleRect.width() + 0.5) - scrollDelta.x(),
nit: slightly unfortunate to copy/paste this fairly intricate statement.
you could just use a local variable that has a value of either +1 or -1
and include that local variable in the final expression.

WebKit/chromium/public/WebGLES2Context.h:64
 +  #if defined(__APPLE__)
is this the best define, or would it make sense to use WEBKIT_USING_CG instead?
would this code make sense if CG were used on other platforms (hypothetically
speaking).

WebKit/chromium/src/WebViewImpl.cpp:915
 +  #if OS(DARWIN)
DARWIN or CG?

WebKit/chromium/src/WebViewImpl.cpp:2230
 +  #if OS(DARWIN)
ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259767</commentid>
    <comment_count>5</comment_count>
      <attachid>63396</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-03 17:42:57 -0700</bug_when>
    <thetext>Created attachment 63396
Revised patch

Addressed review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259770</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-03 17:49:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 63292 [details])
&gt; WebCore/platform/graphics/chromium/LayerChromium.cpp:190
&gt;  +      OwnPtr&lt;GraphicsContext&gt; graphicsContext(new GraphicsContext(contextCG.get()));
&gt; nit: why not just allocate this GraphicsContext on the stack?

Done. I had just copied code from earlier in the file.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:254
&gt;  +      m_rootLayerCGContext = RetainPtr&lt;CGContextRef&gt;(AdoptCF, 0);
&gt; nit: you can also write m_rootLayerCGContext.adoptCF(0), which I think is more conventional.

Done.

&gt; WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:117
&gt;  +          colorSpace = RetainPtr&lt;CGColorSpaceRef&gt;(AdoptCF, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGBLinear));
&gt; colorSpace.adoptCF(CGColorSpaceCreateWithName(...));

Done.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:260
&gt;  +      m_rootLayerCGContext = RetainPtr&lt;CGContextRef&gt;(AdoptCF, CGBitmapContextCreate(m_rootLayerBackingStore.data(),
&gt; ditto

Done.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:390
&gt;  +          scrolledLayerMatrix.translate3d((int)floorf(0.5 * visibleRect.width() + 0.5) - scrollDelta.x(),
&gt; nit: slightly unfortunate to copy/paste this fairly intricate statement.
&gt; you could just use a local variable that has a value of either +1 or -1
&gt; and include that local variable in the final expression.

Good idea. Done.

&gt; WebKit/chromium/public/WebGLES2Context.h:64
&gt;  +  #if defined(__APPLE__)
&gt; is this the best define, or would it make sense to use WEBKIT_USING_CG instead?
&gt; would this code make sense if CG were used on other platforms (hypothetically
&gt; speaking).

The associated #ifdef on the Chrome side is OS_MACOSX, so I think we should use this #ifdef here rather than WEBKIT_USING_CG.

&gt; WebKit/chromium/src/WebViewImpl.cpp:915
&gt;  +  #if OS(DARWIN)
&gt; DARWIN or CG?
&gt; 
&gt; WebKit/chromium/src/WebViewImpl.cpp:2230
&gt;  +  #if OS(DARWIN)
&gt; ditto

In both of these cases again the associated #ifdef in Chrome is OS_MACOSX, so I think this is the right #if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259850</commentid>
    <comment_count>7</comment_count>
      <attachid>63396</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-03 20:38:41 -0700</bug_when>
    <thetext>Comment on attachment 63396
Revised patch

ok. I have no strong feelings with DARWIN vs. USING_WEBKIT_CG. If fishd objects, then we can change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260099</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-04 10:48:25 -0700</bug_when>
    <thetext>Committed r64656: &lt;http://trac.webkit.org/changeset/64656&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275548</commentid>
    <comment_count>9</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2010-09-07 19:30:43 -0700</bug_when>
    <thetext>&gt;  107     RetainPtr&lt;CGColorSpaceRef&gt; colorSpace(AdoptCF, CGImageGetColorSpace(cgImage));

I think this is wrong: &quot;CGImageGetColorSpace&quot; doesn&apos;t contain &quot;Copy&quot; or &quot;Create&quot;, so you&apos;re not supposed to release it. I&apos;ll send out a patch to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275625</commentid>
    <comment_count>10</comment_count>
      <attachid>63396</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-07 23:19:10 -0700</bug_when>
    <thetext>Comment on attachment 63396
Revised patch

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

&gt; WebKit/chromium/public/WebGLES2Context.h:65
&gt; +    virtual void resizeOnscreenContent(const WebSize&amp;) = 0;
nit: the first part of the comment is redundant with the use of the
__APPLE__ macro.  one thing that would be helpful to know is whether
this method does its work synchronously or not.  i notice that the
call to this function happens before we have actually generated new
pixels.  has consideration been given to how we will synchronize
&quot;re-compositing&quot; and &quot;re-sizing&quot; so that if things are fast that
resizing will be smooth without tearing along the edges?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275941</commentid>
    <comment_count>11</comment_count>
      <attachid>63396</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-08 11:05:15 -0700</bug_when>
    <thetext>Comment on attachment 63396
Revised patch

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

&gt; WebKit/chromium/public/WebGLES2Context.h:65
&gt; +    virtual void resizeOnscreenContent(const WebSize&amp;) = 0;
This method does its work asynchronously with respect to the renderer, but serially with respect to other graphics calls issued from the renderer. It is required that it runs before we perform the next render cycle because that render occurs into the backing store which is reallocated by this method. More work will be needed to make resizing work well on Mac OS X. See http://crbug.com/53165 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275968</commentid>
    <comment_count>12</comment_count>
      <attachid>63396</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-08 11:52:45 -0700</bug_when>
    <thetext>Comment on attachment 63396
Revised patch

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

&gt; WebKit/chromium/public/WebGLES2Context.h:65
&gt; +    virtual void resizeOnscreenContent(const WebSize&amp;) = 0;
OK, that makes sense.  My next question:  why does our OSX port need to be different in this respect?  On Windows at least, I think the resize of the native widget happens before we call WebViewImpl::resize().  Why can&apos;t we do the same on OSX?  Why does this need to round-trip through WebViewImpl::resize(), which is an API call?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275977</commentid>
    <comment_count>13</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-08 12:10:14 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 63396 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=63396&amp;action=prettypatch
&gt; 
&gt; &gt; WebKit/chromium/public/WebGLES2Context.h:65
&gt; &gt; +    virtual void resizeOnscreenContent(const WebSize&amp;) = 0;
&gt; OK, that makes sense.  My next question:  why does our OSX port need to be different in this respect?  On Windows at least, I think the resize of the native widget happens before we call WebViewImpl::resize().  Why can&apos;t we do the same on OSX?  Why does this need to round-trip through WebViewImpl::resize(), which is an API call?

In the Mac port of the compositor we manage the backing store into which the compositor renders, because there is no such concept as sharing window handles or XIDs across processes. This is the fundamental difference between the Mac port and the Windows/Linux ports and why this must be done with an API call which trampolines over to the GPU process, getting it to reallocate its IOSurface and sending the browser a notification of this fact.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63289</attachid>
            <date>2010-08-02 19:28:49 -0700</date>
            <delta_ts>2010-08-02 19:37:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>compositor.patch</filename>
            <type>text/plain</type>
            <size>24957</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDUyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDgtMDIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBv
cnQgQ2hyb21pdW0ncyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB0byBNYWMgT1MgWAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMzOTgKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIFRlc3RlZCBtYW51YWxseSB3aXRoIENTUyAzRCBhbmQgV2ViR0wgdGVz
dHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJCb3JkZXJDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgIC0gRml4
ZWQgY29tcGlsYXRpb24gcHJvYmxlbXMgd2l0aCBnY2MuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKToKKyAgICAgICAgIC0g
QWRkZWQgQ29yZSBHcmFwaGljcyBwb3J0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICAtIEZpeGVkIGNvbXBpbGF0aW9uIHByb2JsZW1z
IHdpdGggZ2NjIHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgb3JkZXIgb2Yg
bWVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJl
UmVjdCk6CisgICAgICAgICAtIFBvcnRlZCB0byBDb3JlIEdyYXBoaWNzLCBhZGp1c3RpbmcgZm9y
IGxvd2VyLWxlZnQgY29vcmRpbmF0ZQorICAgICAgICAgICBzeXN0ZW0gb3JpZ2luLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJD
aHJvbWl1bSk6CisgICAgICAgICAtIEZpeGVkIGNvbXBpbGF0aW9uIHByb2JsZW1zIHdpdGggZ2Nj
IHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgb3JkZXIgb2YgbWVtYmVycy4K
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Um9vdExheWVyQ2Fu
dmFzU2l6ZSk6CisgICAgICAgICAtIFBvcnRlZCB0byBDb3JlIEdyYXBoaWNzLgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgIC0g
QWRkZWQgbW9yZSBkZWJ1Zy1vbmx5IGVycm9yIGNhbGxzIGR1cmluZyBkcmF3aW5nIHBoYXNlLgor
ICAgICAgICAgICBBZGp1c3RlZCBzY3JvbGxpbmcgYW5kIGluY3JlbWVudGFsIHVwZGF0aW5nIGNv
ZGUgZm9yIENvcmUKKyAgICAgICAgICAgR3JhcGhpY3MnIGxvd2VyLWxlZnQgY29vcmRpbmF0ZSBz
eXN0ZW0gb3JpZ2luLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
bml0aWFsaXplU2hhcmVkR0xPYmplY3RzKToKKyAgICAgICAgIC0gUmVtb3ZlZCBjb2xvciBjaGFu
bmVsIHN3aXp6bGluZyBpbiBDb3JlIEdyYXBoaWNzIHBvcnQuIEZpeGVkCisgICAgICAgICAgIHBy
ZWV4aXN0aW5nIGJ1ZyBpbiBpbml0aWFsaXphdGlvbiBjaGVjayBvZiBtX3Jvb3RMYXllclRleHR1
cmVJZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaDoKKyAgICAgICAgIC0gQWRkZWQgbmVlZGVkIGRhdGEgbWVtYmVycyBmb3IgQ29y
ZSBHcmFwaGljcyBwb3J0LgorCiAyMDEwLTA4LTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA2NDUxNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgdm9pZCBzZXRMYXllckJvcmRlckNvbG9yKExh
eWVyQ2hyCiAKIHN0YXRpYyB2b2lkIGNsZWFyQm9yZGVyQ29sb3IoTGF5ZXJDaHJvbWl1bSYgbGF5
ZXIpCiB7Ci0gICAgbGF5ZXIuc2V0Qm9yZGVyQ29sb3IoMCk7CisgICAgbGF5ZXIuc2V0Qm9yZGVy
Q29sb3Ioc3RhdGljX2Nhc3Q8UkdCQTMyPigwKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldExheWVy
QmFja2dyb3VuZENvbG9yKExheWVyQ2hyb21pdW0mIGxheWVyLCBjb25zdCBDb2xvciYgY29sb3Ip
CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyB2b2lkIHNldExheWVyQmFja2dyb3VuZENvbG9yKExh
eWUKIAogc3RhdGljIHZvaWQgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcihMYXllckNocm9taXVt
JiBsYXllcikKIHsKLSAgICBsYXllci5zZXRCYWNrZ3JvdW5kQ29sb3IoMCk7CisgICAgbGF5ZXIu
c2V0QmFja2dyb3VuZENvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOwogfQogCiBHcmFwaGlj
c0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gR3JhcGhpY3NMYXllcjo6
Y29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDY0NTE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxMyBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJ
bWFnZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBJbWFnZUxheWVyQ2hy
b21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQpAQCAtODIsNiArODks
NDMgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVDbwogICAgICAgICBw
aXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMoKTsKICAgICAgICAgYml0bWFwU2l6ZSA9IElu
dFNpemUoc2tpYUJpdG1hcC0+d2lkdGgoKSwgc2tpYUJpdG1hcC0+aGVpZ2h0KCkpOwogICAgIH0K
KyNlbGlmIFBMQVRGT1JNKENHKQorICAgIC8vIE5hdGl2ZUltYWdlUHRyIGlzIGEgQ0dJbWFnZVJl
ZiBvbiBNYWMgT1MgWC4KKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBtX2NvbnRlbnRzOworICAg
IGludCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKTsKKyAgICBpbnQgaGVpZ2h0ID0g
Q0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKTsKKyAgICByZXF1aXJlZFRleHR1cmVTaXplID0gSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBiaXRtYXBTaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6
ZTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGdldCByaWQgb2YgdGhpcyB0ZW1wb3JhcnkgY29w
eSB3aGVyZSBwb3NzaWJsZS4KKyAgICBpbnQgdGVtcFJvd0J5dGVzID0gd2lkdGggKiA0OworICAg
IFZlY3Rvcjx1aW50OF90PiB0ZW1wVmVjdG9yOworICAgIHRlbXBWZWN0b3IucmVzaXplKGhlaWdo
dCAqIHRlbXBSb3dCeXRlcyk7CisgICAgLy8gTm90ZSB3ZSBkbyBub3QgemVybyB0aGlzIHZlY3Rv
ciBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8KKyAgICAvLyBjb21wbGV0ZWx5IG92ZXJ3cml0ZSBpdHMg
Y29udGVudHMgd2l0aCB0aGUgaW1hZ2UgYmVsb3cuCisgICAgLy8gVHJ5IHRvIHJldXNlIHRoZSBj
b2xvciBzcGFjZSBmcm9tIHRoZSBpbWFnZSB0byBwcmVzZXJ2ZSBpdHMgY29sb3JzLgorICAgIC8v
IFNvbWUgaW1hZ2VzIHVzZSBhIGNvbG9yIHNwYWNlIChzdWNoIGFzIGluZGV4ZWQpIHVuc3VwcG9y
dGVkIGJ5IHRoZSBiaXRtYXAgY29udGV4dC4KKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVm
PiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHSW1hZ2VHZXRDb2xvclNwYWNlKGNnSW1hZ2UpKTsKKyAg
ICBDR0NvbG9yU3BhY2VNb2RlbCBjb2xvclNwYWNlTW9kZWwgPSBDR0NvbG9yU3BhY2VHZXRNb2Rl
bChjb2xvclNwYWNlLmdldCgpKTsKKyAgICBzd2l0Y2ggKGNvbG9yU3BhY2VNb2RlbCkgeworICAg
IGNhc2Uga0NHQ29sb3JTcGFjZU1vZGVsTW9ub2Nocm9tZToKKyAgICBjYXNlIGtDR0NvbG9yU3Bh
Y2VNb2RlbFJHQjoKKyAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2RlbENNWUs6CisgICAgY2FzZSBr
Q0dDb2xvclNwYWNlTW9kZWxMYWI6CisgICAgY2FzZSBrQ0dDb2xvclNwYWNlTW9kZWxEZXZpY2VO
OgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBjb2xvclNwYWNlID0gUmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4oQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5h
bWUoa0NHQ29sb3JTcGFjZUdlbmVyaWNSR0JMaW5lYXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHRlbXBDb250ZXh0KEFkb3B0Q0YsIENHQml0
bWFwQ29udGV4dENyZWF0ZSh0ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgs
IGhlaWdodCwgOCwgdGVtcFJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUodGVtcENvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkp
OworICAgIENHQ29udGV4dERyYXdJbWFnZSh0ZW1wQ29udGV4dC5nZXQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Pih3aWR0aCks
IHN0YXRpY19jYXN0PENHRmxvYXQ+KGhlaWdodCkpLAorICAgICAgICAgICAgICAgICAgICAgICBj
Z0ltYWdlKTsKKyAgICBwaXhlbHMgPSB0ZW1wVmVjdG9yLmRhdGEoKTsKICNlbHNlCiAjZXJyb3Ig
Ik5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCShyZXZpc2lvbiA2NDUxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDI2ICs1NiwyNiBAQCBQ
YXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06CiB9CiAKIExheWVyQ2hyb21p
dW06OkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKLSAgICA6IG1f
bmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFsc2UpCi0gICAgLCBtX293bmVyKG93bmVyKQor
ICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAgICAs
IG1fc3VwZXJsYXllcigwKQorICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKKyAgICAsIG1f
YmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCisgICAgLCBtX2JvcmRlckNvbG9yKDAsIDAsIDAs
IDApCiAgICAgLCBtX2xheWVyUmVuZGVyZXIoMCkKKyAgICAsIG1fZWRnZUFudGlhbGlhc2luZ01h
c2soMCkKKyAgICAsIG1fb3BhY2l0eSgxLjApCisgICAgLCBtX3pQb3NpdGlvbigwLjApCisgICAg
LCBtX2FuY2hvclBvaW50WigwKQogICAgICwgbV9ib3JkZXJXaWR0aCgwKQogICAgICwgbV9hbGxv
Y2F0ZWRUZXh0dXJlSWQoMCkKLSAgICAsIG1fYm9yZGVyQ29sb3IoMCwgMCwgMCwgMCkKLSAgICAs
IG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCi0gICAgLCBtX2FuY2hvclBvaW50KDAuNSwg
MC41KQotICAgICwgbV9hbmNob3JQb2ludFooMCkKICAgICAsIG1fY2xlYXJzQ29udGV4dChmYWxz
ZSkKICAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKLSAgICAsIG1fZWRnZUFudGlhbGlhc2luZ01h
c2soMCkKICAgICAsIG1faGlkZGVuKGZhbHNlKQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNl
KQotICAgICwgbV9vcGFjaXR5KDEuMCkKICAgICAsIG1fb3BhcXVlKHRydWUpCi0gICAgLCBtX3pQ
b3NpdGlvbigwLjApCiAgICAgLCBtX2dlb21ldHJ5RmxpcHBlZChmYWxzZSkKLSAgICAsIG1fY29u
dGVudHNEaXJ0eShmYWxzZSkKKyAgICAsIG1fbmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFs
c2UpCiB7CiB9CiAKQEAgLTE2Miw2ICsxNjIsNDAgQEAgdm9pZCBMYXllckNocm9taXVtOjp1cGRh
dGVUZXh0dXJlQ29udGVudAogICAgICAgICBwaXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMo
KTsKICAgICAgICAgYml0bWFwU2l6ZSA9IEludFNpemUoc2tpYUJpdG1hcC0+d2lkdGgoKSwgc2tp
YUJpdG1hcC0+aGVpZ2h0KCkpOwogICAgIH0KKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIHJlcXVp
cmVkVGV4dHVyZVNpemUgPSBtX2JvdW5kczsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9p
bnQoMCwgMCksIG1fYm91bmRzKTsKKworICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJl
IHJlYWxsb2NhdGVkIHRoZW4gd2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQorICAgIC8vIGNvbnRl
bnRzIG9mIHRoZSBsYXllci4KKyAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9j
YXRlZFRleHR1cmVTaXplKQorICAgICAgICBkaXJ0eVJlY3QgPSBib3VuZHNSZWN0OworICAgIGVs
c2UgeworICAgICAgICAvLyBDbGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxh
eWVyIHRvIGF2b2lkIGRyYXdpbmcgb3V0c2lkZQorICAgICAgICAvLyB0aGUgYm91bmRzIG9mIHRo
ZSBiYWNraW5nIHRleHR1cmUuCisgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoYm91bmRzUmVj
dCk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7CisgICAgaW50IHJv
d0J5dGVzID0gNCAqIGRpcnR5UmVjdC53aWR0aCgpOworICAgIHRlbXBWZWN0b3IucmVzaXplKHJv
d0J5dGVzICogZGlydHlSZWN0LmhlaWdodCgpKTsKKyAgICBtZW1zZXQodGVtcFZlY3Rvci5kYXRh
KCksIDAsIHRlbXBWZWN0b3Iuc2l6ZSgpKTsKKyAgICAvLyBGSVhNRTogdW5zdXJlIHdoZXRoZXIg
dGhpcyBpcyB0aGUgYmVzdCBjb2xvciBzcGFjZSBjaG9pY2UuCisgICAgUmV0YWluUHRyPENHQ29s
b3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFt
ZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQkxpbmVhcikpOworICAgIFJldGFpblB0cjxDR0NvbnRl
eHRSZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUodGVtcFZlY3Rv
ci5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdo
dCgpLCA4LCByb3dCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKworICAgIE93blB0cjxHcmFw
aGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dChuZXcgR3JhcGhpY3NDb250ZXh0KGNvbnRleHRD
Ry5nZXQoKSkpOworCisgICAgLy8gVHJhbnNsYXRlIHRoZSBncmFwaGljcyBjb250eHQgaW50byB0
aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGRpcnR5IHJlY3QuCisgICAgZ3JhcGhpY3NDb250
ZXh0LT50cmFuc2xhdGUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKworICAgIG1f
b3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpncmFwaGljc0NvbnRleHQsIGRpcnR5
UmVjdCk7CisKKyAgICBwaXhlbHMgPSB0ZW1wVmVjdG9yLmRhdGEoKTsKKyAgICBiaXRtYXBTaXpl
ID0gZGlydHlSZWN0LnNpemUoKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZv
ciB5b3VyIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAtMTg3LDcgKzIyMSwxNyBAQCB2b2lkIExheWVy
Q2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KHZvCiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNT
RVJUKHVwZGF0ZVJlY3Qud2lkdGgoKSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLndpZHRoKCkg
JiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdodCgp
KTsKICAgICAgICAgQVNTRVJUKHVwZGF0ZVJlY3Qud2lkdGgoKSA9PSBiaXRtYXBTaXplLndpZHRo
KCkgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA9PSBiaXRtYXBTaXplLmhlaWdodCgpKTsKKyNpZiBQ
TEFURk9STShDRykKKyAgICAgICAgLy8gVGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBp
biBDb3JlIEdyYXBoaWNzJyBjb29yZGluYXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZv
ciB0aGlzIGhlcmUuCisgICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC54KCksIG1fYWxsb2NhdGVkVGV4dHVy
ZVNpemUuaGVpZ2h0KCkgLSB1cGRhdGVSZWN0LmhlaWdodCgpIC0gdXBkYXRlUmVjdC55KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVp
Z2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCBwaXhlbHMpOworI2VsaWYgUExBVEZPUk0oU0tJQSkKICAgICAgICAgZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRl
UmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBwaXhlbHMpOworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIg
cGxhdGZvcm0uIgorI2VuZGlmCiAgICAgfQogCiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9h
dFNpemUoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA2NDUxNikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDE3IEBACiAjaWYgUExBVEZPUk0o
U0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCisjZWxpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q0dCaXRtYXBDb250ZXh0Lmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgV1RGTG9nQ2hhbm5l
bCBMb2dMYXllclJlbmRlcmVyID0geyAweDAwMDAwMDAwLCAiTGF5ZXJSZW5kZXJlciIsIFdURkxv
Z0NoYW5uZWxPbiB9OworI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGNoZWNrR0xFcnJvcigpCiB7CkBA
IC0xOTUsMTIgKzE5OSwxMiBAQCBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5
ZXJSCiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBh
c3NPd25QdHI8R0xFUzJDb250ZXh0PiBnbGVzMkNvbnRleHQpCi0gICAgOiBtX3Jvb3RMYXllcigw
KQotICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCisgICAgOiBtX3Jvb3RMYXllclRleHR1cmVX
aWR0aCgwKQorICAgICwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KDApCiAgICAgLCBtX3Bvc2l0
aW9uTG9jYXRpb24oMCkKICAgICAsIG1fdGV4Q29vcmRMb2NhdGlvbigxKQotICAgICwgbV9yb290
TGF5ZXJUZXh0dXJlV2lkdGgoMCkKLSAgICAsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCgwKQor
ICAgICwgbV9yb290TGF5ZXIoMCkKKyAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwg
bV9zY3JvbGxQb3NpdGlvbihJbnRQb2ludCgtMSwgLTEpKQogICAgICwgbV9jdXJyZW50U2hhZGVy
UHJvZ3JhbVR5cGUoTnVtU2hhZGVyUHJvZ3JhbVR5cGVzKQogICAgICwgbV9nbGVzMkNvbnRleHQo
Z2xlczJDb250ZXh0KQpAQCAtMjQ1LDYgKzI0OSwxOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6c2V0Um9vdExheWVyCiAgICAgbV9yb290TGF5ZXJTa2lhQ29udGV4dC0+c2V0RHJhd2lu
Z1RvSW1hZ2VCdWZmZXIodHJ1ZSk7CiAjZW5kaWYKICAgICBtX3Jvb3RMYXllckdyYXBoaWNzQ29u
dGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCo+KG1fcm9vdExheWVyU2tpYUNvbnRleHQuZ2V0KCkpKTsKKyNlbGlmIFBMQVRG
T1JNKENHKQorICAgIC8vIFJlbGVhc2UgdGhlIHByZXZpb3VzIENHQml0bWFwQ29udGV4dCBiZWZv
cmUgcmVhbGxvY2F0aW5nIHRoZSBiYWNraW5nIHN0b3JlIGFzIGEgcHJlY2F1dGlvbi4KKyAgICBt
X3Jvb3RMYXllckNHQ29udGV4dCA9IFJldGFpblB0cjxDR0NvbnRleHRSZWY+KEFkb3B0Q0YsIDAp
OworICAgIGludCByb3dCeXRlcyA9IDQgKiBzaXplLndpZHRoKCk7CisgICAgbV9yb290TGF5ZXJC
YWNraW5nU3RvcmUucmVzaXplKHJvd0J5dGVzICogc2l6ZS5oZWlnaHQoKSk7CisgICAgbWVtc2V0
KG1fcm9vdExheWVyQmFja2luZ1N0b3JlLmRhdGEoKSwgMCwgbV9yb290TGF5ZXJCYWNraW5nU3Rv
cmUuc2l6ZSgpKTsKKyAgICAvLyBGSVhNRTogdW5zdXJlIHdoZXRoZXIgdGhpcyBpcyB0aGUgYmVz
dCBjb2xvciBzcGFjZSBjaG9pY2UuCisgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29s
b3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNl
R2VuZXJpY1JHQkxpbmVhcikpOworICAgIG1fcm9vdExheWVyQ0dDb250ZXh0ID0gUmV0YWluUHRy
PENHQ29udGV4dFJlZj4oQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fcm9vdExheWVy
QmFja2luZ1N0b3JlLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCksIDgsIHJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQgPSBu
ZXcgR3JhcGhpY3NDb250ZXh0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKTsKICNlbHNlCiAj
ZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAt
MzA0LDM0ICszMjEsNTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMo
YwogICAgIC8vIGFuZCB2aWV3cG9ydC4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAorICAg
IGNoZWNrR0xFcnJvcigpOworCiAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Jv
b3RMYXllclRleHR1cmVJZCk7CiAKLSAgICB1bnNpZ25lZCB2aXNpYmxlUmVjdFdpZHRoID0gdmlz
aWJsZVJlY3Qud2lkdGgoKTsKLSAgICB1bnNpZ25lZCB2aXNpYmxlUmVjdEhlaWdodCA9IHZpc2li
bGVSZWN0LmhlaWdodCgpOworICAgIGNoZWNrR0xFcnJvcigpOworCisgICAgaW50IHZpc2libGVS
ZWN0V2lkdGggPSB2aXNpYmxlUmVjdC53aWR0aCgpOworICAgIGludCB2aXNpYmxlUmVjdEhlaWdo
dCA9IHZpc2libGVSZWN0LmhlaWdodCgpOwogICAgIGlmICh2aXNpYmxlUmVjdFdpZHRoICE9IG1f
cm9vdExheWVyVGV4dHVyZVdpZHRoIHx8IHZpc2libGVSZWN0SGVpZ2h0ICE9IG1fcm9vdExheWVy
VGV4dHVyZUhlaWdodCkgewogICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCA9IHZpc2li
bGVSZWN0LndpZHRoKCk7CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCA9IHZpc2li
bGVSZWN0LmhlaWdodCgpOwogCiAgICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0
cml4KDAsIHZpc2libGVSZWN0V2lkdGggKyAwLjUsIHZpc2libGVSZWN0SGVpZ2h0ICsgMC41LCAw
LCAtMTAwMCwgMTAwMCk7CiAgICAgICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBH
TF9SR0JBLCBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0
LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgICAgICBjaGVja0dMRXJy
b3IoKTsKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUg
dmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCiAgICAgZ2xWaWV3cG9ydCgw
LCAwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhlaWdodCk7CiAKKyAgICBjaGVja0dM
RXJyb3IoKTsKKwogICAgIC8vIFRoZSBsYXllciwgc2Nyb2xsIGFuZCBkZWJ1ZyBib3JkZXIgc2hh
ZGVycyBhbGwgdXNlIHRoZSBzYW1lIHZlcnRleCBhdHRyaWJ1dGVzCiAgICAgLy8gc28gd2UgY2Fu
IGJpbmQgdGhlbSBvbmx5IG9uY2UuCiAgICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwg
bV9xdWFkVmJvSWRzW1ZlcnRpY2VzXSk7CisgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgZ2xCaW5k
QnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX3F1YWRWYm9JZHNbTGF5ZXJFbGVtZW50
c10pOworICAgIGNoZWNrR0xFcnJvcigpOwogICAgIEdMdWludCBvZmZzZXQgPSAwOwogICAgIGds
VmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRpb24sIDMsIEdMX0ZMT0FULCBHTF9G
QUxTRSwgNSAqIHNpemVvZihHTGZsb2F0KSwgKEdMdm9pZCopKG9mZnNldCkpOworICAgIGNoZWNr
R0xFcnJvcigpOwogICAgIG9mZnNldCArPSAzICogc2l6ZW9mKEdMZmxvYXQpOwogICAgIGdsVmVy
dGV4QXR0cmliUG9pbnRlcihtX3RleENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxT
RSwgNSAqIHNpemVvZihHTGZsb2F0KSwgKEdMdm9pZCopKG9mZnNldCkpOworICAgIGNoZWNrR0xF
cnJvcigpOwogICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9u
KTsKKyAgICBjaGVja0dMRXJyb3IoKTsKICAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1f
dGV4Q29vcmRMb2NhdGlvbik7CisgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBjaGVja0dMRXJyb3IoKTsKICAgICBnbERpc2FibGUoR0xf
REVQVEhfVEVTVCk7CisgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgZ2xEaXNhYmxlKEdMX0NVTExf
RkFDRSk7CisgICAgY2hlY2tHTEVycm9yKCk7CiAKICAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9
PSBJbnRQb2ludCgtMSwgLTEpKQogICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9z
aXRpb247CkBAIC0zNDYsMTUgKzM4MCwyNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0xheWVycyhjCiAgICAgICAgIC8vIHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4
cG9zZWQgYXJlYSBpcyBzdWJlc3F1ZW50bHkgZmlsbGVkIGFzIHVzdWFsIHdpdGgKICAgICAgICAg
Ly8gdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVSZWN0LgogICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBzY3JvbGxlZExheWVyTWF0cml4OworI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgICAg
IHNjcm9sbGVkTGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoKGludClmbG9vcmYoMC41ICogdmlzaWJs
ZVJlY3Qud2lkdGgoKSArIDAuNSkgLSBzY3JvbGxEZWx0YS54KCksCiAgICAgICAgICAgICAoaW50
KWZsb29yZigwLjUgKiB2aXNpYmxlUmVjdC5oZWlnaHQoKSArIDAuNSkgKyBzY3JvbGxEZWx0YS55
KCksIDApOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIC8vIEJlY2F1c2UgdGhlIGNvbnRl
bnRzIG9mIHRoZSBPcGVuR0wgdGV4dHVyZSBhcmUgaW52ZXJ0ZWQKKyAgICAgICAgLy8gdmVydGlj
YWxseSBjb21wYXJlZCB0byB0aGUgU2tpYSBiYWNrZW5kLCB3ZSBuZWVkIHRvIG1vdmUKKyAgICAg
ICAgLy8gdGhlIGJhY2tpbmcgc3RvcmUgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4KKyAgICAg
ICAgc2Nyb2xsZWRMYXllck1hdHJpeC50cmFuc2xhdGUzZCgoaW50KWZsb29yZigwLjUgKiB2aXNp
YmxlUmVjdC53aWR0aCgpICsgMC41KSAtIHNjcm9sbERlbHRhLngoKSwKKyAgICAgICAgICAgIChp
bnQpZmxvb3JmKDAuNSAqIHZpc2libGVSZWN0LmhlaWdodCgpICsgMC41KSAtIHNjcm9sbERlbHRh
LnkoKSwgMCk7CisjZWxzZQorI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0
Zm9ybS4iCisjZW5kaWYKICAgICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC5zY2FsZTNkKDEsIC0x
LCAxKTsKIAogICAgICAgICAvLyBTd2l0Y2ggc2hhZGVycyB0byBhdm9pZCBSR0Igc3dpenpsaW5n
LgogICAgICAgICB1c2VTaGFkZXJQcm9ncmFtKFNjcm9sbExheWVyUHJvZ3JhbSk7CiAgICAgICAg
IGdsVW5pZm9ybTFpKG1fc2hhZGVyUHJvZ3JhbXNbU2Nyb2xsTGF5ZXJQcm9ncmFtXS5tX3NhbXBs
ZXJMb2NhdGlvbiwgMCk7CisgICAgICAgIGNoZWNrR0xFcnJvcigpOwogCiAgICAgICAgIGRyYXdU
ZXh0dXJlZFF1YWQoc2Nyb2xsZWRMYXllck1hdHJpeCwgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCksIDEpOworICAgICAgICBjaGVja0dMRXJyb3IoKTsKIAogICAgICAg
ICBnbENvcHlUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAsIGNvbnRl
bnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKIApAQCAtMzgxLDMxICs0Mjcs
NTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoYwogICAgICAgICAv
LyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVy
IHRleHR1cmUuCiAgICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB1cGRh
dGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVj
dC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKICAgICAgICAg
Y2hlY2tHTEVycm9yKCk7CisjZWxpZiBQTEFURk9STShDRykKKyAgICAgICAgLy8gR2V0IHRoZSBj
b250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
aW50PihDR0JpdG1hcENvbnRleHRHZXRXaWR0aChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkp
ID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4
dEdldEhlaWdodChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkpID09IHVwZGF0ZVJlY3QuaGVp
Z2h0KCkpOworICAgICAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RMYXllckJhY2tpbmdTdG9yZS5k
YXRhKCk7CisKKyAgICAgICAgY2hlY2tHTEVycm9yKCk7CisgICAgICAgIC8vIENvcHkgdGhlIGNv
bnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAg
ICAgICAgLy8gVGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNz
JyBjb29yZGluYXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCisg
ICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdXBkYXRlUmVjdC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0
ZVJlY3QueSgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgICAgIGNo
ZWNrR0xFcnJvcigpOwogI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQor
I2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKICAg
ICB9CiAKICAgICBnbENsZWFyQ29sb3IoMCwgMCwgMSwgMSk7CisgICAgY2hlY2tHTEVycm9yKCk7
CiAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCk7
CisgICAgY2hlY2tHTEVycm9yKCk7CiAKICAgICAvLyBSZW5kZXIgdGhlIHJvb3QgbGF5ZXIgdXNp
bmcgYSBxdWFkIHRoYXQgdGFrZXMgdXAgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEgb2YgdGhlIHdp
bmRvdy4KICAgICB1c2VTaGFkZXJQcm9ncmFtKENvbnRlbnRMYXllclByb2dyYW0pOworICAgIGNo
ZWNrR0xFcnJvcigpOwogICAgIGdsVW5pZm9ybTFpKG1fc2FtcGxlckxvY2F0aW9uLCAwKTsKKyAg
ICBjaGVja0dMRXJyb3IoKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck1hdHJpeDsK
ICAgICBsYXllck1hdHJpeC50cmFuc2xhdGUzZCh2aXNpYmxlUmVjdC53aWR0aCgpIC8gMiwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCkgLyAyLCAwKTsKICAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyTWF0
cml4LCB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSk7CisgICAg
Y2hlY2tHTEVycm9yKCk7CiAKICAgICAvLyBJZiBjdWxsaW5nIGlzIGVuYWJsZWQgdGhlbiB3ZSB3
aWxsIGN1bGwgdGhlIGJhY2tmYWNlLgogICAgIGdsQ3VsbEZhY2UoR0xfQkFDSyk7CisgICAgY2hl
Y2tHTEVycm9yKCk7CiAgICAgLy8gVGhlIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIGlzIHNldHVw
IHN1Y2ggdGhhdCBZIHN0YXJ0cyBhdCB6ZXJvIGFuZAogICAgIC8vIGluY3JlYXNlcyBnb2luZyBk
b3duIHRoZSBwYWdlIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSB3aW5kaW5nIG9yZGVyIG9mCiAg
ICAgLy8gZnJvbnQgZmFjaW5nIHRyaWFuZ2xlcy4KICAgICBnbEZyb250RmFjZShHTF9DVyk7Cisg
ICAgY2hlY2tHTEVycm9yKCk7CiAKICAgICAvLyBUaGUgc2hhZGVyIHVzZWQgdG8gcmVuZGVyIGxh
eWVycyByZXR1cm5zIHByZS1tdWx0aXBsaWVkIGFscGhhIGNvbG9ycwogICAgIC8vIHNvIHdlIG5l
ZWQgdG8gc2VuZCB0aGUgYmxlbmRpbmcgbW9kZSBhcHByb3ByaWF0ZWx5LgogICAgIGdsRW5hYmxl
KEdMX0JMRU5EKTsKKyAgICBjaGVja0dMRXJyb3IoKTsKICAgICBnbEJsZW5kRnVuYyhHTF9PTkUs
IEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOwogCiAgICAgY2hlY2tHTEVycm9yKCk7CkBAIC02Njgs
NiArNzM1LDkgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaAogICAg
ICAgICAiICBnbF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247IFxuIgogICAgICAgICAi
ICB2X3RleENvb3JkID0gYV90ZXhDb29yZDsgICBcbiIKICAgICAgICAgIn0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iOworICAgIC8vIE5vdGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBTa2lh
IGFuZCBDb3JlIEdyYXBoaWNzIHZlcnNpb25zOgorICAgIC8vICAtIFNraWEgdXNlcyBCR1JBIGFu
ZCBvcmlnaW4gaXMgdXBwZXIgbGVmdAorICAgIC8vICAtIENvcmUgR3JhcGhpY3MgdXNlcyBSR0JB
IGFuZCBvcmlnaW4gaXMgbG93ZXIgbGVmdAogICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJTdHJpbmdb
XSA9CiAgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCiAgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCkBAIC02NzUsOCArNzQ1LDE1IEBAIGJvb2wgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInZvaWQgbWFpbigp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyNp
ZiBQTEFURk9STShTS0lBKQogICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHNf
dGV4dHVyZSwgdl90ZXhDb29yZCk7IFxuIgogICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0
KHRleENvbG9yLnosIHRleENvbG9yLnksIHRleENvbG9yLngsIHRleENvbG9yLncpICogYWxwaGE7
IFxuIgorI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0
dXJlMkQoc190ZXh0dXJlLCB2ZWMyKHZfdGV4Q29vcmQueCwgMS4wIC0gdl90ZXhDb29yZC55KSk7
IFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRleENvbG9y
LnksIHRleENvbG9yLnosIHRleENvbG9yLncpICogYWxwaGE7IFxuIgorI2Vsc2UKKyNlcnJvciAi
TmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgorI2VuZGlmCiAgICAgICAgICJ9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwog
CiAgICAgLy8gRnJhZ21lbnQgc2hhZGVyIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgc2Nyb2xsZWQg
cm9vdCBsYXllciBxdWFkLiBJdCBkaWZmZXJzCkBAIC03NzUsNyArODUyLDcgQEAgYm9vbCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaAogCiAgICAgLy8gQ3JlYXRlIGEgdGV4dHVy
ZSBvYmplY3QgdG8gaG9sZCB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIuCiAgICAgbV9y
b290TGF5ZXJUZXh0dXJlSWQgPSBjcmVhdGVMYXllclRleHR1cmUoKTsKLSAgICBpZiAobV9yb290
TGF5ZXJUZXh0dXJlSWQgPT0gLTEpIHsKKyAgICBpZiAobV9yb290TGF5ZXJUZXh0dXJlSWQgPT0g
MCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGV4dHVyZSBmb3Igcm9v
dCBsYXllciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCShyZXZpc2lvbiA2NDUxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDExIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKKyNpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250
ZXh0Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgR0xFUzJDb250ZXh0OwpAQCAtMTQ1LDcgKzE1MCwxMiBAQCBwcml2
YXRlOgogICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9yb290TGF5ZXJDYW52YXM7
CiAgICAgT3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+IG1fcm9vdExheWVyU2tpYUNvbnRleHQ7
CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQ7
CisjZWxpZiBQTEFURk9STShDRykKKyAgICBWZWN0b3I8dWludDhfdD4gbV9yb290TGF5ZXJCYWNr
aW5nU3RvcmU7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gbV9yb290TGF5ZXJDR0NvbnRl
eHQ7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9yb290TGF5ZXJHcmFwaGljc0NvbnRl
eHQ7CiAjZW5kaWYKKwogICAgIEludFNpemUgbV9yb290TGF5ZXJDYW52YXNTaXplOwogCiAgICAg
T3duUHRyPEdMRVMyQ29udGV4dD4gbV9nbGVzMkNvbnRleHQ7CkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY0NTIzKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIxIEBACisyMDEwLTA4LTAyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQb3J0IENocm9taXVtJ3MgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgdG8gTWFjIE9TIFgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzk4CisKKyAg
ICAgICAgKiBwdWJsaWMvV2ViR0xFUzJDb250ZXh0Lmg6CisgICAgICAgICAtIEFkZGVkIHJlc2l6
ZU9uc2NyZWVuQ29udGVudCwgbmVlZGVkIG9uIE1hYyBPUyBYIHRvIHJlcG9ydAorICAgICAgICAg
ICB3aW5kb3cgc2l6ZSBjaGFuZ2VzLgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpemUpOgorICAgICAgICAgLSBTZW5kIHJl
c2l6ZSBub3RpZmljYXRpb24gdG8gdGhlIFdlYkdMRVMyQ29udGV4dC4KKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgIC0gUG9y
dGVkIHRvIENvcmUgR3JhcGhpY3MuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpnbGVz
MkNvbnRleHQpOgorICAgICAgICAgLSBBZGRlZCBpbml0aWFsIHNpemUgbm90aWZpY2F0aW9uIHVw
b24gY29udGV4dCBjcmVhdGlvbi4KKwogMjAxMC0wNy0yNyAgTHVpeiBBZ29zdGluaSAgPGx1aXou
YWdvc3RpbmlAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNo
ZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdMRVMyQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR0xFUzJDb250ZXh0LmgJKHJldmlz
aW9uIDY0NTE2KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHTEVTMkNvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsMTIgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJu
cyB0aGUgSUQgb2YgdGhlIHRleHR1cmUgdXNlZCBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZyBpbiB0
aGUgY29udGV4dCBvZiB0aGUgcGFyZW50LgogICAgIHZpcnR1YWwgdW5zaWduZWQgZ2V0T2Zmc2Ny
ZWVuQ29udGVudFBhcmVudFRleHR1cmVJZCgpID0gMDsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb24gaXMgdXNlZCBvbmx5IG9uIE1hYyBPUyBYIGFuZCBpcyBuZWVkZWQKKyAgICAvLyBp
biBvcmRlciB0byByZXBvcnQgd2luZG93IHNpemUgY2hhbmdlcy4KKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplT25zY3JlZW5Db250ZW50KGNvbnN0IFdlYlNp
emUmKSA9IDA7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDY0NTE2KQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMSw2ICs5MTEs
MTMgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIAogICAgICAgICBX
ZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CiAg
ICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiAgICAgfQor
CisjaWYgT1MoREFSV0lOKQorICAgIGlmIChtX2dsZXMyQ29udGV4dCkgeworICAgICAgICBtX2ds
ZXMyQ29udGV4dC0+cmVzaXplT25zY3JlZW5Db250ZW50KFdlYlNpemUoc3RkOjptYXgoMSwgbV9z
aXplLndpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKSk7CisgICAgfQorI2VuZGlmCiB9
CiAKIHZvaWQgV2ViVmlld0ltcGw6OmxheW91dCgpCkBAIC0yMTU0LDYgKzIxNjEsMjIgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudAogICAgICAgICByb290TGF5ZXJD
b250ZXh0LT5yZXN0b3JlKCk7CiAKICAgICAgICAgcGxhdGZvcm1DYW52YXMtPnJlc3RvcmUoKTsK
KyNlbGlmIFBMQVRGT1JNKENHKQorICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcm9v
dExheWVyQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICAgICAgQ0dDb250ZXh0U2F2
ZUdTdGF0ZShjZ0NvbnRleHQpOworCisgICAgICAgIC8vIEJyaW5nIHRoZSBDb3JlR3JhcGhpY3Mg
Y29udGV4dCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KKyAg
ICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgLXJlY3QueCwgLXJlY3QueSk7
CisKKyAgICAgICAgcm9vdExheWVyQ29udGV4dC0+c2F2ZSgpOworCisgICAgICAgIHdlYmZyYW1l
LT5wYWludFdpdGhDb250ZXh0KCpyb290TGF5ZXJDb250ZXh0LCByZWN0KTsKKyAgICAgICAgcm9v
dExheWVyQ29udGV4dC0+cmVzdG9yZSgpOworCisgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3Rh
dGUoY2dDb250ZXh0KTsKKyNlbHNlCisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0K
ICNlbmRpZgogICAgIH0KIH0KQEAgLTIyMDMsNiArMjIyNiwxMSBAQCBXZWJHTEVTMkNvbnRleHQq
IFdlYlZpZXdJbXBsOjpnbGVzMkNvbnRlCiAgICAgICAgICAgICBtX2dsZXMyQ29udGV4dC5jbGVh
cigpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKworI2lmIE9TKERBUldJTikK
KyAgICAgICAgbV9nbGVzMkNvbnRleHQtPnJlc2l6ZU9uc2NyZWVuQ29udGVudChXZWJTaXplKHN0
ZDo6bWF4KDEsIG1fc2l6ZS53aWR0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heCgxLCBtX3NpemUuaGVpZ2h0KSkpOworI2Vu
ZGlmCiAgICAgfQogICAgIHJldHVybiBtX2dsZXMyQ29udGV4dC5nZXQoKTsKIH0K
</data>
<flag name="commit-queue"
          id="51611"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63292</attachid>
            <date>2010-08-02 19:37:58 -0700</date>
            <delta_ts>2010-08-03 17:42:57 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>compositor.patch</filename>
            <type>text/plain</type>
            <size>24953</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDUyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDgtMDIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBv
cnQgQ2hyb21pdW0ncyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB0byBNYWMgT1MgWAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMzOTgKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIFRlc3RlZCBtYW51YWxseSB3aXRoIENTUyAzRCBhbmQgV2ViR0wgdGVz
dHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJCb3JkZXJDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgIC0gRml4
ZWQgY29tcGlsYXRpb24gcHJvYmxlbXMgd2l0aCBnY2MuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKToKKyAgICAgICAgIC0g
QWRkZWQgQ29yZSBHcmFwaGljcyBwb3J0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICAtIEZpeGVkIGNvbXBpbGF0aW9uIHByb2JsZW1z
IHdpdGggZ2NjIHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgb3JkZXIgb2Yg
bWVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJl
UmVjdCk6CisgICAgICAgICAtIFBvcnRlZCB0byBDb3JlIEdyYXBoaWNzLCBhZGp1c3RpbmcgZm9y
IGxvd2VyLWxlZnQgY29vcmRpbmF0ZQorICAgICAgICAgICBzeXN0ZW0gb3JpZ2luLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJD
aHJvbWl1bSk6CisgICAgICAgICAtIEZpeGVkIGNvbXBpbGF0aW9uIHByb2JsZW1zIHdpdGggZ2Nj
IHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgb3JkZXIgb2YgbWVtYmVycy4K
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Um9vdExheWVyQ2Fu
dmFzU2l6ZSk6CisgICAgICAgICAtIFBvcnRlZCB0byBDb3JlIEdyYXBoaWNzLgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgIC0g
QWRkZWQgbW9yZSBkZWJ1Zy1vbmx5IGVycm9yIGNhbGxzIGR1cmluZyBkcmF3aW5nIHBoYXNlLgor
ICAgICAgICAgICBBZGp1c3RlZCBzY3JvbGxpbmcgYW5kIGluY3JlbWVudGFsIHVwZGF0aW5nIGNv
ZGUgZm9yIENvcmUKKyAgICAgICAgICAgR3JhcGhpY3MnIGxvd2VyLWxlZnQgY29vcmRpbmF0ZSBz
eXN0ZW0gb3JpZ2luLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
bml0aWFsaXplU2hhcmVkR0xPYmplY3RzKToKKyAgICAgICAgIC0gUmVtb3ZlZCBjb2xvciBjaGFu
bmVsIHN3aXp6bGluZyBpbiBDb3JlIEdyYXBoaWNzIHBvcnQuIEZpeGVkCisgICAgICAgICAgIHBy
ZWV4aXN0aW5nIGJ1ZyBpbiBpbml0aWFsaXphdGlvbiBjaGVjayBvZiBtX3Jvb3RMYXllclRleHR1
cmVJZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaDoKKyAgICAgICAgIC0gQWRkZWQgbmVlZGVkIGRhdGEgbWVtYmVycyBmb3IgQ29y
ZSBHcmFwaGljcyBwb3J0LgorCiAyMDEwLTA4LTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA2NDUxNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgdm9pZCBzZXRMYXllckJvcmRlckNvbG9yKExh
eWVyQ2hyCiAKIHN0YXRpYyB2b2lkIGNsZWFyQm9yZGVyQ29sb3IoTGF5ZXJDaHJvbWl1bSYgbGF5
ZXIpCiB7Ci0gICAgbGF5ZXIuc2V0Qm9yZGVyQ29sb3IoMCk7CisgICAgbGF5ZXIuc2V0Qm9yZGVy
Q29sb3Ioc3RhdGljX2Nhc3Q8UkdCQTMyPigwKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldExheWVy
QmFja2dyb3VuZENvbG9yKExheWVyQ2hyb21pdW0mIGxheWVyLCBjb25zdCBDb2xvciYgY29sb3Ip
CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyB2b2lkIHNldExheWVyQmFja2dyb3VuZENvbG9yKExh
eWUKIAogc3RhdGljIHZvaWQgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcihMYXllckNocm9taXVt
JiBsYXllcikKIHsKLSAgICBsYXllci5zZXRCYWNrZ3JvdW5kQ29sb3IoMCk7CisgICAgbGF5ZXIu
c2V0QmFja2dyb3VuZENvbG9yKHN0YXRpY19jYXN0PFJHQkEzMj4oMCkpOwogfQogCiBHcmFwaGlj
c0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gR3JhcGhpY3NMYXllcjo6
Y29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDY0NTE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxMyBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJ
bWFnZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBJbWFnZUxheWVyQ2hy
b21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQpAQCAtODIsNiArODks
NDMgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVDbwogICAgICAgICBw
aXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMoKTsKICAgICAgICAgYml0bWFwU2l6ZSA9IElu
dFNpemUoc2tpYUJpdG1hcC0+d2lkdGgoKSwgc2tpYUJpdG1hcC0+aGVpZ2h0KCkpOwogICAgIH0K
KyNlbGlmIFBMQVRGT1JNKENHKQorICAgIC8vIE5hdGl2ZUltYWdlUHRyIGlzIGEgQ0dJbWFnZVJl
ZiBvbiBNYWMgT1MgWC4KKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBtX2NvbnRlbnRzOworICAg
IGludCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKTsKKyAgICBpbnQgaGVpZ2h0ID0g
Q0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKTsKKyAgICByZXF1aXJlZFRleHR1cmVTaXplID0gSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBiaXRtYXBTaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6
ZTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGdldCByaWQgb2YgdGhpcyB0ZW1wb3JhcnkgY29w
eSB3aGVyZSBwb3NzaWJsZS4KKyAgICBpbnQgdGVtcFJvd0J5dGVzID0gd2lkdGggKiA0OworICAg
IFZlY3Rvcjx1aW50OF90PiB0ZW1wVmVjdG9yOworICAgIHRlbXBWZWN0b3IucmVzaXplKGhlaWdo
dCAqIHRlbXBSb3dCeXRlcyk7CisgICAgLy8gTm90ZSB3ZSBkbyBub3QgemVybyB0aGlzIHZlY3Rv
ciBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8KKyAgICAvLyBjb21wbGV0ZWx5IG92ZXJ3cml0ZSBpdHMg
Y29udGVudHMgd2l0aCB0aGUgaW1hZ2UgYmVsb3cuCisgICAgLy8gVHJ5IHRvIHJldXNlIHRoZSBj
b2xvciBzcGFjZSBmcm9tIHRoZSBpbWFnZSB0byBwcmVzZXJ2ZSBpdHMgY29sb3JzLgorICAgIC8v
IFNvbWUgaW1hZ2VzIHVzZSBhIGNvbG9yIHNwYWNlIChzdWNoIGFzIGluZGV4ZWQpIHVuc3VwcG9y
dGVkIGJ5IHRoZSBiaXRtYXAgY29udGV4dC4KKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVm
PiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHSW1hZ2VHZXRDb2xvclNwYWNlKGNnSW1hZ2UpKTsKKyAg
ICBDR0NvbG9yU3BhY2VNb2RlbCBjb2xvclNwYWNlTW9kZWwgPSBDR0NvbG9yU3BhY2VHZXRNb2Rl
bChjb2xvclNwYWNlLmdldCgpKTsKKyAgICBzd2l0Y2ggKGNvbG9yU3BhY2VNb2RlbCkgeworICAg
IGNhc2Uga0NHQ29sb3JTcGFjZU1vZGVsTW9ub2Nocm9tZToKKyAgICBjYXNlIGtDR0NvbG9yU3Bh
Y2VNb2RlbFJHQjoKKyAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2RlbENNWUs6CisgICAgY2FzZSBr
Q0dDb2xvclNwYWNlTW9kZWxMYWI6CisgICAgY2FzZSBrQ0dDb2xvclNwYWNlTW9kZWxEZXZpY2VO
OgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBjb2xvclNwYWNlID0gUmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4oQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5h
bWUoa0NHQ29sb3JTcGFjZUdlbmVyaWNSR0JMaW5lYXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHRlbXBDb250ZXh0KEFkb3B0Q0YsIENHQml0
bWFwQ29udGV4dENyZWF0ZSh0ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgs
IGhlaWdodCwgOCwgdGVtcFJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUodGVtcENvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkp
OworICAgIENHQ29udGV4dERyYXdJbWFnZSh0ZW1wQ29udGV4dC5nZXQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Pih3aWR0aCks
IHN0YXRpY19jYXN0PENHRmxvYXQ+KGhlaWdodCkpLAorICAgICAgICAgICAgICAgICAgICAgICBj
Z0ltYWdlKTsKKyAgICBwaXhlbHMgPSB0ZW1wVmVjdG9yLmRhdGEoKTsKICNlbHNlCiAjZXJyb3Ig
Ik5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCShyZXZpc2lvbiA2NDUxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDI2ICs1NiwyNiBAQCBQ
YXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06CiB9CiAKIExheWVyQ2hyb21p
dW06OkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKLSAgICA6IG1f
bmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFsc2UpCi0gICAgLCBtX293bmVyKG93bmVyKQor
ICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAgICAs
IG1fc3VwZXJsYXllcigwKQorICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKKyAgICAsIG1f
YmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCisgICAgLCBtX2JvcmRlckNvbG9yKDAsIDAsIDAs
IDApCiAgICAgLCBtX2xheWVyUmVuZGVyZXIoMCkKKyAgICAsIG1fZWRnZUFudGlhbGlhc2luZ01h
c2soMCkKKyAgICAsIG1fb3BhY2l0eSgxLjApCisgICAgLCBtX3pQb3NpdGlvbigwLjApCisgICAg
LCBtX2FuY2hvclBvaW50WigwKQogICAgICwgbV9ib3JkZXJXaWR0aCgwKQogICAgICwgbV9hbGxv
Y2F0ZWRUZXh0dXJlSWQoMCkKLSAgICAsIG1fYm9yZGVyQ29sb3IoMCwgMCwgMCwgMCkKLSAgICAs
IG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCi0gICAgLCBtX2FuY2hvclBvaW50KDAuNSwg
MC41KQotICAgICwgbV9hbmNob3JQb2ludFooMCkKICAgICAsIG1fY2xlYXJzQ29udGV4dChmYWxz
ZSkKICAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKLSAgICAsIG1fZWRnZUFudGlhbGlhc2luZ01h
c2soMCkKICAgICAsIG1faGlkZGVuKGZhbHNlKQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNl
KQotICAgICwgbV9vcGFjaXR5KDEuMCkKICAgICAsIG1fb3BhcXVlKHRydWUpCi0gICAgLCBtX3pQ
b3NpdGlvbigwLjApCiAgICAgLCBtX2dlb21ldHJ5RmxpcHBlZChmYWxzZSkKLSAgICAsIG1fY29u
dGVudHNEaXJ0eShmYWxzZSkKKyAgICAsIG1fbmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFs
c2UpCiB7CiB9CiAKQEAgLTE2Miw2ICsxNjIsNDAgQEAgdm9pZCBMYXllckNocm9taXVtOjp1cGRh
dGVUZXh0dXJlQ29udGVudAogICAgICAgICBwaXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMo
KTsKICAgICAgICAgYml0bWFwU2l6ZSA9IEludFNpemUoc2tpYUJpdG1hcC0+d2lkdGgoKSwgc2tp
YUJpdG1hcC0+aGVpZ2h0KCkpOwogICAgIH0KKyNlbGlmIFBMQVRGT1JNKENHKQorICAgIHJlcXVp
cmVkVGV4dHVyZVNpemUgPSBtX2JvdW5kczsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9p
bnQoMCwgMCksIG1fYm91bmRzKTsKKworICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJl
IHJlYWxsb2NhdGVkIHRoZW4gd2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQorICAgIC8vIGNvbnRl
bnRzIG9mIHRoZSBsYXllci4KKyAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9j
YXRlZFRleHR1cmVTaXplKQorICAgICAgICBkaXJ0eVJlY3QgPSBib3VuZHNSZWN0OworICAgIGVs
c2UgeworICAgICAgICAvLyBDbGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxh
eWVyIHRvIGF2b2lkIGRyYXdpbmcgb3V0c2lkZQorICAgICAgICAvLyB0aGUgYm91bmRzIG9mIHRo
ZSBiYWNraW5nIHRleHR1cmUuCisgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoYm91bmRzUmVj
dCk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7CisgICAgaW50IHJv
d0J5dGVzID0gNCAqIGRpcnR5UmVjdC53aWR0aCgpOworICAgIHRlbXBWZWN0b3IucmVzaXplKHJv
d0J5dGVzICogZGlydHlSZWN0LmhlaWdodCgpKTsKKyAgICBtZW1zZXQodGVtcFZlY3Rvci5kYXRh
KCksIDAsIHRlbXBWZWN0b3Iuc2l6ZSgpKTsKKyAgICAvLyBGSVhNRTogdW5zdXJlIHdoZXRoZXIg
dGhpcyBpcyB0aGUgYmVzdCBjb2xvciBzcGFjZSBjaG9pY2UuCisgICAgUmV0YWluUHRyPENHQ29s
b3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFt
ZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQkxpbmVhcikpOworICAgIFJldGFpblB0cjxDR0NvbnRl
eHRSZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUodGVtcFZlY3Rv
ci5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdo
dCgpLCA4LCByb3dCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKworICAgIE93blB0cjxHcmFw
aGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dChuZXcgR3JhcGhpY3NDb250ZXh0KGNvbnRleHRD
Ry5nZXQoKSkpOworCisgICAgLy8gVHJhbnNsYXRlIHRoZSBncmFwaGljcyBjb250eHQgaW50byB0
aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGRpcnR5IHJlY3QuCisgICAgZ3JhcGhpY3NDb250
ZXh0LT50cmFuc2xhdGUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKworICAgIG1f
b3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpncmFwaGljc0NvbnRleHQsIGRpcnR5
UmVjdCk7CisKKyAgICBwaXhlbHMgPSB0ZW1wVmVjdG9yLmRhdGEoKTsKKyAgICBiaXRtYXBTaXpl
ID0gZGlydHlSZWN0LnNpemUoKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZv
ciB5b3VyIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAtMTg3LDcgKzIyMSwxNyBAQCB2b2lkIExheWVy
Q2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KHZvCiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNT
RVJUKHVwZGF0ZVJlY3Qud2lkdGgoKSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLndpZHRoKCkg
JiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA8PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdodCgp
KTsKICAgICAgICAgQVNTRVJUKHVwZGF0ZVJlY3Qud2lkdGgoKSA9PSBiaXRtYXBTaXplLndpZHRo
KCkgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA9PSBiaXRtYXBTaXplLmhlaWdodCgpKTsKKyNpZiBQ
TEFURk9STShDRykKKyAgICAgICAgLy8gVGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBp
biBDb3JlIEdyYXBoaWNzJyBjb29yZGluYXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZv
ciB0aGlzIGhlcmUuCisgICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC54KCksIG1fYWxsb2NhdGVkVGV4dHVy
ZVNpemUuaGVpZ2h0KCkgLSB1cGRhdGVSZWN0LmhlaWdodCgpIC0gdXBkYXRlUmVjdC55KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVp
Z2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCBwaXhlbHMpOworI2VsaWYgUExBVEZPUk0oU0tJQSkKICAgICAgICAgZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRl
UmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBwaXhlbHMpOworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIg
cGxhdGZvcm0uIgorI2VuZGlmCiAgICAgfQogCiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9h
dFNpemUoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA2NDUxNikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDE3IEBACiAjaWYgUExBVEZPUk0o
U0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCisjZWxpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q0dCaXRtYXBDb250ZXh0Lmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgV1RGTG9nQ2hhbm5l
bCBMb2dMYXllclJlbmRlcmVyID0geyAweDAwMDAwMDAwLCAiTGF5ZXJSZW5kZXJlciIsIFdURkxv
Z0NoYW5uZWxPbiB9OworI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGNoZWNrR0xFcnJvcigpCiB7CkBA
IC0xOTUsMTIgKzE5OSwxMiBAQCBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5
ZXJSCiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBh
c3NPd25QdHI8R0xFUzJDb250ZXh0PiBnbGVzMkNvbnRleHQpCi0gICAgOiBtX3Jvb3RMYXllcigw
KQotICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCisgICAgOiBtX3Jvb3RMYXllclRleHR1cmVX
aWR0aCgwKQorICAgICwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KDApCiAgICAgLCBtX3Bvc2l0
aW9uTG9jYXRpb24oMCkKICAgICAsIG1fdGV4Q29vcmRMb2NhdGlvbigxKQotICAgICwgbV9yb290
TGF5ZXJUZXh0dXJlV2lkdGgoMCkKLSAgICAsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCgwKQor
ICAgICwgbV9yb290TGF5ZXIoMCkKKyAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwg
bV9zY3JvbGxQb3NpdGlvbihJbnRQb2ludCgtMSwgLTEpKQogICAgICwgbV9jdXJyZW50U2hhZGVy
UHJvZ3JhbVR5cGUoTnVtU2hhZGVyUHJvZ3JhbVR5cGVzKQogICAgICwgbV9nbGVzMkNvbnRleHQo
Z2xlczJDb250ZXh0KQpAQCAtMjQ1LDYgKzI0OSwxOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6c2V0Um9vdExheWVyCiAgICAgbV9yb290TGF5ZXJTa2lhQ29udGV4dC0+c2V0RHJhd2lu
Z1RvSW1hZ2VCdWZmZXIodHJ1ZSk7CiAjZW5kaWYKICAgICBtX3Jvb3RMYXllckdyYXBoaWNzQ29u
dGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCo+KG1fcm9vdExheWVyU2tpYUNvbnRleHQuZ2V0KCkpKTsKKyNlbGlmIFBMQVRG
T1JNKENHKQorICAgIC8vIFJlbGVhc2UgdGhlIHByZXZpb3VzIENHQml0bWFwQ29udGV4dCBiZWZv
cmUgcmVhbGxvY2F0aW5nIHRoZSBiYWNraW5nIHN0b3JlIGFzIGEgcHJlY2F1dGlvbi4KKyAgICBt
X3Jvb3RMYXllckNHQ29udGV4dCA9IFJldGFpblB0cjxDR0NvbnRleHRSZWY+KEFkb3B0Q0YsIDAp
OworICAgIGludCByb3dCeXRlcyA9IDQgKiBzaXplLndpZHRoKCk7CisgICAgbV9yb290TGF5ZXJC
YWNraW5nU3RvcmUucmVzaXplKHJvd0J5dGVzICogc2l6ZS5oZWlnaHQoKSk7CisgICAgbWVtc2V0
KG1fcm9vdExheWVyQmFja2luZ1N0b3JlLmRhdGEoKSwgMCwgbV9yb290TGF5ZXJCYWNraW5nU3Rv
cmUuc2l6ZSgpKTsKKyAgICAvLyBGSVhNRTogdW5zdXJlIHdoZXRoZXIgdGhpcyBpcyB0aGUgYmVz
dCBjb2xvciBzcGFjZSBjaG9pY2UuCisgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29s
b3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNl
R2VuZXJpY1JHQkxpbmVhcikpOworICAgIG1fcm9vdExheWVyQ0dDb250ZXh0ID0gUmV0YWluUHRy
PENHQ29udGV4dFJlZj4oQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fcm9vdExheWVy
QmFja2luZ1N0b3JlLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCksIDgsIHJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQgPSBu
ZXcgR3JhcGhpY3NDb250ZXh0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKTsKICNlbHNlCiAj
ZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAt
MzA0LDM0ICszMjEsNTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMo
YwogICAgIC8vIGFuZCB2aWV3cG9ydC4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAorICAg
IGNoZWNrR0xFcnJvcigpOworCiAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Jv
b3RMYXllclRleHR1cmVJZCk7CiAKLSAgICB1bnNpZ25lZCB2aXNpYmxlUmVjdFdpZHRoID0gdmlz
aWJsZVJlY3Qud2lkdGgoKTsKLSAgICB1bnNpZ25lZCB2aXNpYmxlUmVjdEhlaWdodCA9IHZpc2li
bGVSZWN0LmhlaWdodCgpOworICAgIGNoZWNrR0xFcnJvcigpOworCisgICAgaW50IHZpc2libGVS
ZWN0V2lkdGggPSB2aXNpYmxlUmVjdC53aWR0aCgpOworICAgIGludCB2aXNpYmxlUmVjdEhlaWdo
dCA9IHZpc2libGVSZWN0LmhlaWdodCgpOwogICAgIGlmICh2aXNpYmxlUmVjdFdpZHRoICE9IG1f
cm9vdExheWVyVGV4dHVyZVdpZHRoIHx8IHZpc2libGVSZWN0SGVpZ2h0ICE9IG1fcm9vdExheWVy
VGV4dHVyZUhlaWdodCkgewogICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCA9IHZpc2li
bGVSZWN0LndpZHRoKCk7CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCA9IHZpc2li
bGVSZWN0LmhlaWdodCgpOwogCiAgICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0
cml4KDAsIHZpc2libGVSZWN0V2lkdGggKyAwLjUsIHZpc2libGVSZWN0SGVpZ2h0ICsgMC41LCAw
LCAtMTAwMCwgMTAwMCk7CiAgICAgICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBH
TF9SR0JBLCBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0
LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgICAgICBjaGVja0dMRXJy
b3IoKTsKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUg
dmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCiAgICAgZ2xWaWV3cG9ydCgw
LCAwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhlaWdodCk7CiAKKyAgICBjaGVja0dM
RXJyb3IoKTsKKwogICAgIC8vIFRoZSBsYXllciwgc2Nyb2xsIGFuZCBkZWJ1ZyBib3JkZXIgc2hh
ZGVycyBhbGwgdXNlIHRoZSBzYW1lIHZlcnRleCBhdHRyaWJ1dGVzCiAgICAgLy8gc28gd2UgY2Fu
IGJpbmQgdGhlbSBvbmx5IG9uY2UuCiAgICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwg
bV9xdWFkVmJvSWRzW1ZlcnRpY2VzXSk7CisgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgZ2xCaW5k
QnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX3F1YWRWYm9JZHNbTGF5ZXJFbGVtZW50
c10pOworICAgIGNoZWNrR0xFcnJvcigpOwogICAgIEdMdWludCBvZmZzZXQgPSAwOwogICAgIGds
VmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRpb24sIDMsIEdMX0ZMT0FULCBHTF9G
QUxTRSwgNSAqIHNpemVvZihHTGZsb2F0KSwgKEdMdm9pZCopKG9mZnNldCkpOworICAgIGNoZWNr
R0xFcnJvcigpOwogICAgIG9mZnNldCArPSAzICogc2l6ZW9mKEdMZmxvYXQpOwogICAgIGdsVmVy
dGV4QXR0cmliUG9pbnRlcihtX3RleENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxT
RSwgNSAqIHNpemVvZihHTGZsb2F0KSwgKEdMdm9pZCopKG9mZnNldCkpOworICAgIGNoZWNrR0xF
cnJvcigpOwogICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9u
KTsKKyAgICBjaGVja0dMRXJyb3IoKTsKICAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1f
dGV4Q29vcmRMb2NhdGlvbik7CisgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBjaGVja0dMRXJyb3IoKTsKICAgICBnbERpc2FibGUoR0xf
REVQVEhfVEVTVCk7CisgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgZ2xEaXNhYmxlKEdMX0NVTExf
RkFDRSk7CisgICAgY2hlY2tHTEVycm9yKCk7CiAKICAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9
PSBJbnRQb2ludCgtMSwgLTEpKQogICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9z
aXRpb247CkBAIC0zNDYsMTUgKzM4MCwyNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0xheWVycyhjCiAgICAgICAgIC8vIHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4
cG9zZWQgYXJlYSBpcyBzdWJlc3F1ZW50bHkgZmlsbGVkIGFzIHVzdWFsIHdpdGgKICAgICAgICAg
Ly8gdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVSZWN0LgogICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBzY3JvbGxlZExheWVyTWF0cml4OworI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgICAg
IHNjcm9sbGVkTGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoKGludClmbG9vcmYoMC41ICogdmlzaWJs
ZVJlY3Qud2lkdGgoKSArIDAuNSkgLSBzY3JvbGxEZWx0YS54KCksCiAgICAgICAgICAgICAoaW50
KWZsb29yZigwLjUgKiB2aXNpYmxlUmVjdC5oZWlnaHQoKSArIDAuNSkgKyBzY3JvbGxEZWx0YS55
KCksIDApOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIC8vIEJlY2F1c2UgdGhlIGNvbnRl
bnRzIG9mIHRoZSBPcGVuR0wgdGV4dHVyZSBhcmUgaW52ZXJ0ZWQKKyAgICAgICAgLy8gdmVydGlj
YWxseSBjb21wYXJlZCB0byB0aGUgU2tpYSBiYWNrZW5kLCB3ZSBuZWVkIHRvIG1vdmUKKyAgICAg
ICAgLy8gdGhlIGJhY2tpbmcgc3RvcmUgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4KKyAgICAg
ICAgc2Nyb2xsZWRMYXllck1hdHJpeC50cmFuc2xhdGUzZCgoaW50KWZsb29yZigwLjUgKiB2aXNp
YmxlUmVjdC53aWR0aCgpICsgMC41KSAtIHNjcm9sbERlbHRhLngoKSwKKyAgICAgICAgICAgIChp
bnQpZmxvb3JmKDAuNSAqIHZpc2libGVSZWN0LmhlaWdodCgpICsgMC41KSAtIHNjcm9sbERlbHRh
LnkoKSwgMCk7CisjZWxzZQorI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0
Zm9ybS4iCisjZW5kaWYKICAgICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC5zY2FsZTNkKDEsIC0x
LCAxKTsKIAogICAgICAgICAvLyBTd2l0Y2ggc2hhZGVycyB0byBhdm9pZCBSR0Igc3dpenpsaW5n
LgogICAgICAgICB1c2VTaGFkZXJQcm9ncmFtKFNjcm9sbExheWVyUHJvZ3JhbSk7CiAgICAgICAg
IGdsVW5pZm9ybTFpKG1fc2hhZGVyUHJvZ3JhbXNbU2Nyb2xsTGF5ZXJQcm9ncmFtXS5tX3NhbXBs
ZXJMb2NhdGlvbiwgMCk7CisgICAgICAgIGNoZWNrR0xFcnJvcigpOwogCiAgICAgICAgIGRyYXdU
ZXh0dXJlZFF1YWQoc2Nyb2xsZWRMYXllck1hdHJpeCwgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCksIDEpOworICAgICAgICBjaGVja0dMRXJyb3IoKTsKIAogICAgICAg
ICBnbENvcHlUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAsIGNvbnRl
bnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKIApAQCAtMzgxLDMxICs0Mjcs
NTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoYwogICAgICAgICAv
LyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVy
IHRleHR1cmUuCiAgICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB1cGRh
dGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVj
dC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKICAgICAgICAg
Y2hlY2tHTEVycm9yKCk7CisjZWxpZiBQTEFURk9STShDRykKKyAgICAgICAgLy8gR2V0IHRoZSBj
b250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
aW50PihDR0JpdG1hcENvbnRleHRHZXRXaWR0aChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkp
ID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4
dEdldEhlaWdodChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkpID09IHVwZGF0ZVJlY3QuaGVp
Z2h0KCkpOworICAgICAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RMYXllckJhY2tpbmdTdG9yZS5k
YXRhKCk7CisKKyAgICAgICAgY2hlY2tHTEVycm9yKCk7CisgICAgICAgIC8vIENvcHkgdGhlIGNv
bnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAg
ICAgICAgLy8gVGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNz
JyBjb29yZGluYXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCisg
ICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdXBkYXRlUmVjdC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0
ZVJlY3QueSgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgICAgIGNo
ZWNrR0xFcnJvcigpOwogI2Vsc2UKLSNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQor
I2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKICAg
ICB9CiAKICAgICBnbENsZWFyQ29sb3IoMCwgMCwgMSwgMSk7CisgICAgY2hlY2tHTEVycm9yKCk7
CiAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCk7
CisgICAgY2hlY2tHTEVycm9yKCk7CiAKICAgICAvLyBSZW5kZXIgdGhlIHJvb3QgbGF5ZXIgdXNp
bmcgYSBxdWFkIHRoYXQgdGFrZXMgdXAgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEgb2YgdGhlIHdp
bmRvdy4KICAgICB1c2VTaGFkZXJQcm9ncmFtKENvbnRlbnRMYXllclByb2dyYW0pOworICAgIGNo
ZWNrR0xFcnJvcigpOwogICAgIGdsVW5pZm9ybTFpKG1fc2FtcGxlckxvY2F0aW9uLCAwKTsKKyAg
ICBjaGVja0dMRXJyb3IoKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck1hdHJpeDsK
ICAgICBsYXllck1hdHJpeC50cmFuc2xhdGUzZCh2aXNpYmxlUmVjdC53aWR0aCgpIC8gMiwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCkgLyAyLCAwKTsKICAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyTWF0
cml4LCB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSk7CisgICAg
Y2hlY2tHTEVycm9yKCk7CiAKICAgICAvLyBJZiBjdWxsaW5nIGlzIGVuYWJsZWQgdGhlbiB3ZSB3
aWxsIGN1bGwgdGhlIGJhY2tmYWNlLgogICAgIGdsQ3VsbEZhY2UoR0xfQkFDSyk7CisgICAgY2hl
Y2tHTEVycm9yKCk7CiAgICAgLy8gVGhlIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIGlzIHNldHVw
IHN1Y2ggdGhhdCBZIHN0YXJ0cyBhdCB6ZXJvIGFuZAogICAgIC8vIGluY3JlYXNlcyBnb2luZyBk
b3duIHRoZSBwYWdlIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSB3aW5kaW5nIG9yZGVyIG9mCiAg
ICAgLy8gZnJvbnQgZmFjaW5nIHRyaWFuZ2xlcy4KICAgICBnbEZyb250RmFjZShHTF9DVyk7Cisg
ICAgY2hlY2tHTEVycm9yKCk7CiAKICAgICAvLyBUaGUgc2hhZGVyIHVzZWQgdG8gcmVuZGVyIGxh
eWVycyByZXR1cm5zIHByZS1tdWx0aXBsaWVkIGFscGhhIGNvbG9ycwogICAgIC8vIHNvIHdlIG5l
ZWQgdG8gc2VuZCB0aGUgYmxlbmRpbmcgbW9kZSBhcHByb3ByaWF0ZWx5LgogICAgIGdsRW5hYmxl
KEdMX0JMRU5EKTsKKyAgICBjaGVja0dMRXJyb3IoKTsKICAgICBnbEJsZW5kRnVuYyhHTF9PTkUs
IEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOwogCiAgICAgY2hlY2tHTEVycm9yKCk7CkBAIC02Njgs
NiArNzM1LDkgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaAogICAg
ICAgICAiICBnbF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247IFxuIgogICAgICAgICAi
ICB2X3RleENvb3JkID0gYV90ZXhDb29yZDsgICBcbiIKICAgICAgICAgIn0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iOworICAgIC8vIE5vdGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBTa2lh
IGFuZCBDb3JlIEdyYXBoaWNzIHZlcnNpb25zOgorICAgIC8vICAtIFNraWEgdXNlcyBCR1JBIGFu
ZCBvcmlnaW4gaXMgdXBwZXIgbGVmdAorICAgIC8vICAtIENvcmUgR3JhcGhpY3MgdXNlcyBSR0JB
IGFuZCBvcmlnaW4gaXMgbG93ZXIgbGVmdAogICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJTdHJpbmdb
XSA9CiAgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCiAgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCkBAIC02NzUsOCArNzQ1LDE1IEBAIGJvb2wgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInZvaWQgbWFpbigp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyNp
ZiBQTEFURk9STShTS0lBKQogICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHNf
dGV4dHVyZSwgdl90ZXhDb29yZCk7IFxuIgogICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0
KHRleENvbG9yLnosIHRleENvbG9yLnksIHRleENvbG9yLngsIHRleENvbG9yLncpICogYWxwaGE7
IFxuIgorI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0
dXJlMkQoc190ZXh0dXJlLCB2ZWMyKHZfdGV4Q29vcmQueCwgMS4wIC0gdl90ZXhDb29yZC55KSk7
IFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRleENvbG9y
LnksIHRleENvbG9yLnosIHRleENvbG9yLncpICogYWxwaGE7IFxuIgorI2Vsc2UKKyNlcnJvciAi
TmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgorI2VuZGlmCiAgICAgICAgICJ9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwog
CiAgICAgLy8gRnJhZ21lbnQgc2hhZGVyIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgc2Nyb2xsZWQg
cm9vdCBsYXllciBxdWFkLiBJdCBkaWZmZXJzCkBAIC03NzUsNyArODUyLDcgQEAgYm9vbCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaAogCiAgICAgLy8gQ3JlYXRlIGEgdGV4dHVy
ZSBvYmplY3QgdG8gaG9sZCB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIuCiAgICAgbV9y
b290TGF5ZXJUZXh0dXJlSWQgPSBjcmVhdGVMYXllclRleHR1cmUoKTsKLSAgICBpZiAobV9yb290
TGF5ZXJUZXh0dXJlSWQgPT0gLTEpIHsKKyAgICBpZiAoIW1fcm9vdExheWVyVGV4dHVyZUlkKSB7
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0ZXh0dXJlIGZvciByb290IGxh
eWVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgJKHJldmlzaW9uIDY0NTE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIs
MTEgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAorI2lmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBHTEVTMkNvbnRleHQ7CkBAIC0xNDUsNyArMTUwLDEyIEBAIHByaXZhdGU6
CiAgICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZhczsKICAg
ICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gbV9yb290TGF5ZXJTa2lhQ29udGV4dDsKICAg
ICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4dDsKKyNl
bGlmIFBMQVRGT1JNKENHKQorICAgIFZlY3Rvcjx1aW50OF90PiBtX3Jvb3RMYXllckJhY2tpbmdT
dG9yZTsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBtX3Jvb3RMYXllckNHQ29udGV4dDsK
KyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4dDsK
ICNlbmRpZgorCiAgICAgSW50U2l6ZSBtX3Jvb3RMYXllckNhbnZhc1NpemU7CiAKICAgICBPd25Q
dHI8R0xFUzJDb250ZXh0PiBtX2dsZXMyQ29udGV4dDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNp
b24gNjQ1MjMpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDgtMDIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBv
cnQgQ2hyb21pdW0ncyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB0byBNYWMgT1MgWAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMzOTgKKworICAgICAg
ICAqIHB1YmxpYy9XZWJHTEVTMkNvbnRleHQuaDoKKyAgICAgICAgIC0gQWRkZWQgcmVzaXplT25z
Y3JlZW5Db250ZW50LCBuZWVkZWQgb24gTWFjIE9TIFggdG8gcmVwb3J0CisgICAgICAgICAgIHdp
bmRvdyBzaXplIGNoYW5nZXMuCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlc2l6ZSk6CisgICAgICAgICAtIFNlbmQgcmVzaXpl
IG5vdGlmaWNhdGlvbiB0byB0aGUgV2ViR0xFUzJDb250ZXh0LgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMpOgorICAgICAgICAgLSBQb3J0ZWQg
dG8gQ29yZSBHcmFwaGljcy4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmdsZXMyQ29u
dGV4dCk6CisgICAgICAgICAtIEFkZGVkIGluaXRpYWwgc2l6ZSBub3RpZmljYXRpb24gdXBvbiBj
b250ZXh0IGNyZWF0aW9uLgorCiAyMDEwLTA3LTI3ICBMdWl6IEFnb3N0aW5pICA8bHVpei5hZ29z
dGluaUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR0xFUzJDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHTEVTMkNvbnRleHQuaAkocmV2aXNpb24g
NjQ1MTYpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdMRVMyQ29udGV4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRo
ZSBJRCBvZiB0aGUgdGV4dHVyZSB1c2VkIGZvciBvZmZzY3JlZW4gcmVuZGVyaW5nIGluIHRoZSBj
b250ZXh0IG9mIHRoZSBwYXJlbnQuCiAgICAgdmlydHVhbCB1bnNpZ25lZCBnZXRPZmZzY3JlZW5D
b250ZW50UGFyZW50VGV4dHVyZUlkKCkgPSAwOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5j
dGlvbiBpcyB1c2VkIG9ubHkgb24gTWFjIE9TIFggYW5kIGlzIG5lZWRlZAorICAgIC8vIGluIG9y
ZGVyIHRvIHJlcG9ydCB3aW5kb3cgc2l6ZSBjaGFuZ2VzLgorI2lmIGRlZmluZWQoX19BUFBMRV9f
KQorICAgIHZpcnR1YWwgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgV2ViU2l6ZSYp
ID0gMDsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gNjQ1MTYpCisrKyBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTExLDYgKzkxMSwxMyBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYgCiAgICAgICAgIFdlYlJl
Y3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKICAgICAg
ICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKICAgICB9CisKKyNp
ZiBPUyhEQVJXSU4pCisgICAgaWYgKG1fZ2xlczJDb250ZXh0KSB7CisgICAgICAgIG1fZ2xlczJD
b250ZXh0LT5yZXNpemVPbnNjcmVlbkNvbnRlbnQoV2ViU2l6ZShzdGQ6Om1heCgxLCBtX3NpemUu
d2lkdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpKTsKKyAgICB9CisjZW5kaWYKIH0KIAog
dm9pZCBXZWJWaWV3SW1wbDo6bGF5b3V0KCkKQEAgLTIxNTQsNiArMjE2MSwyMiBAQCB2b2lkIFdl
YlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50CiAgICAgICAgIHJvb3RMYXllckNvbnRl
eHQtPnJlc3RvcmUoKTsKIAogICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+cmVzdG9yZSgpOworI2Vs
aWYgUExBVEZPUk0oQ0cpCisgICAgICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSByb290TGF5
ZXJDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgICAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNnQ29udGV4dCk7CisKKyAgICAgICAgLy8gQnJpbmcgdGhlIENvcmVHcmFwaGljcyBjb250
ZXh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgorICAgICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCAtcmVjdC54LCAtcmVjdC55KTsKKwor
ICAgICAgICByb290TGF5ZXJDb250ZXh0LT5zYXZlKCk7CisKKyAgICAgICAgd2ViZnJhbWUtPnBh
aW50V2l0aENvbnRleHQoKnJvb3RMYXllckNvbnRleHQsIHJlY3QpOworICAgICAgICByb290TGF5
ZXJDb250ZXh0LT5yZXN0b3JlKCk7CisKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShj
Z0NvbnRleHQpOworI2Vsc2UKKyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQogI2Vu
ZGlmCiAgICAgfQogfQpAQCAtMjIwMyw2ICsyMjI2LDExIEBAIFdlYkdMRVMyQ29udGV4dCogV2Vi
Vmlld0ltcGw6OmdsZXMyQ29udGUKICAgICAgICAgICAgIG1fZ2xlczJDb250ZXh0LmNsZWFyKCk7
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQorCisjaWYgT1MoREFSV0lOKQorICAg
ICAgICBtX2dsZXMyQ29udGV4dC0+cmVzaXplT25zY3JlZW5Db250ZW50KFdlYlNpemUoc3RkOjpt
YXgoMSwgbV9zaXplLndpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKSk7CisjZW5kaWYK
ICAgICB9CiAgICAgcmV0dXJuIG1fZ2xlczJDb250ZXh0LmdldCgpOwogfQo=
</data>
<flag name="review"
          id="51614"
          type_id="1"
          status="-"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="51615"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63396</attachid>
            <date>2010-08-03 17:42:57 -0700</date>
            <delta_ts>2010-09-08 11:52:45 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>compositor.patch</filename>
            <type>text/plain</type>
            <size>24785</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDYwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDgtMDIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBv
cnQgQ2hyb21pdW0ncyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB0byBNYWMgT1MgWAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMzOTgKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIFRlc3RlZCBtYW51YWxseSB3aXRoIENTUyAzRCBhbmQgV2ViR0wgdGVz
dHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJCb3JkZXJDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgIC0gRml4
ZWQgY29tcGlsYXRpb24gcHJvYmxlbXMgd2l0aCBnY2MuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKToKKyAgICAgICAgIC0g
QWRkZWQgQ29yZSBHcmFwaGljcyBwb3J0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICAtIEZpeGVkIGNvbXBpbGF0aW9uIHByb2JsZW1z
IHdpdGggZ2NjIHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgb3JkZXIgb2Yg
bWVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJl
UmVjdCk6CisgICAgICAgICAtIFBvcnRlZCB0byBDb3JlIEdyYXBoaWNzLCBhZGp1c3RpbmcgZm9y
IGxvd2VyLWxlZnQgY29vcmRpbmF0ZQorICAgICAgICAgICBzeXN0ZW0gb3JpZ2luLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJD
aHJvbWl1bSk6CisgICAgICAgICAtIEZpeGVkIGNvbXBpbGF0aW9uIHByb2JsZW1zIHdpdGggZ2Nj
IHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgb3JkZXIgb2YgbWVtYmVycy4K
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Um9vdExheWVyQ2Fu
dmFzU2l6ZSk6CisgICAgICAgICAtIFBvcnRlZCB0byBDb3JlIEdyYXBoaWNzLgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgIC0g
QWRkZWQgbW9yZSBkZWJ1Zy1vbmx5IGVycm9yIGNhbGxzIGR1cmluZyBkcmF3aW5nIHBoYXNlLgor
ICAgICAgICAgICBBZGp1c3RlZCBzY3JvbGxpbmcgYW5kIGluY3JlbWVudGFsIHVwZGF0aW5nIGNv
ZGUgZm9yIENvcmUKKyAgICAgICAgICAgR3JhcGhpY3MnIGxvd2VyLWxlZnQgY29vcmRpbmF0ZSBz
eXN0ZW0gb3JpZ2luLgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
bml0aWFsaXplU2hhcmVkR0xPYmplY3RzKToKKyAgICAgICAgIC0gUmVtb3ZlZCBjb2xvciBjaGFu
bmVsIHN3aXp6bGluZyBpbiBDb3JlIEdyYXBoaWNzIHBvcnQuIEZpeGVkCisgICAgICAgICAgIHBy
ZWV4aXN0aW5nIGJ1ZyBpbiBpbml0aWFsaXphdGlvbiBjaGVjayBvZiBtX3Jvb3RMYXllclRleHR1
cmVJZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaDoKKyAgICAgICAgIC0gQWRkZWQgbmVlZGVkIGRhdGEgbWVtYmVycyBmb3IgQ29y
ZSBHcmFwaGljcyBwb3J0LgorCiAyMDEwLTA4LTAzICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0
ZWluQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGJ1aWxkIGJ5IGFkZGluZyB0aGUgbmVl
ZGVkIE1hdGhNTCBzb3VyY2UgZmlsZXMgdG8gV2ViQ29yZSdzIHZjcHJvai4KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDY0NjA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyB2b2lkIHNldExheWVyQm9yZGVyQ29sb3IoTGF5ZXJD
aHIKIAogc3RhdGljIHZvaWQgY2xlYXJCb3JkZXJDb2xvcihMYXllckNocm9taXVtJiBsYXllcikK
IHsKLSAgICBsYXllci5zZXRCb3JkZXJDb2xvcigwKTsKKyAgICBsYXllci5zZXRCb3JkZXJDb2xv
cihzdGF0aWNfY2FzdDxSR0JBMzI+KDApKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0TGF5ZXJCYWNr
Z3JvdW5kQ29sb3IoTGF5ZXJDaHJvbWl1bSYgbGF5ZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAg
LTc5LDcgKzc5LDcgQEAgc3RhdGljIHZvaWQgc2V0TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoTGF5ZQog
CiBzdGF0aWMgdm9pZCBjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKExheWVyQ2hyb21pdW0mIGxh
eWVyKQogewotICAgIGxheWVyLnNldEJhY2tncm91bmRDb2xvcigwKTsKKyAgICBsYXllci5zZXRC
YWNrZ3JvdW5kQ29sb3Ioc3RhdGljX2Nhc3Q8UkdCQTMyPigwKSk7CiB9CiAKIEdyYXBoaWNzTGF5
ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBHcmFwaGljc0xheWVyOjpjb21w
b3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24oKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAko
cmV2aXNpb24gNjQ2MDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDEzIEBACiAj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShD
RykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+CisjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdl
Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogUGFzc1JlZlB0cjxJbWFnZUxheWVyQ2hyb21pdW0+IEltYWdlTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCkBAIC04Miw2ICs4OSw0MyBA
QCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvCiAgICAgICAgIHBpeGVs
cyA9IHNraWFCaXRtYXAtPmdldFBpeGVscygpOwogICAgICAgICBiaXRtYXBTaXplID0gSW50U2l6
ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CiAgICAgfQorI2Vs
aWYgUExBVEZPUk0oQ0cpCisgICAgLy8gTmF0aXZlSW1hZ2VQdHIgaXMgYSBDR0ltYWdlUmVmIG9u
IE1hYyBPUyBYLgorICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IG1fY29udGVudHM7CisgICAgaW50
IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOworICAgIGludCBoZWlnaHQgPSBDR0lt
YWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOworICAgIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpOworICAgIGJpdG1hcFNpemUgPSByZXF1aXJlZFRleHR1cmVTaXplOwor
ICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGlzIHRlbXBvcmFyeSBjb3B5IHdo
ZXJlIHBvc3NpYmxlLgorICAgIGludCB0ZW1wUm93Qnl0ZXMgPSB3aWR0aCAqIDQ7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7CisgICAgdGVtcFZlY3Rvci5yZXNpemUoaGVpZ2h0ICog
dGVtcFJvd0J5dGVzKTsKKyAgICAvLyBOb3RlIHdlIGRvIG5vdCB6ZXJvIHRoaXMgdmVjdG9yIHNp
bmNlIHdlIGFyZSBnb2luZyB0bworICAgIC8vIGNvbXBsZXRlbHkgb3ZlcndyaXRlIGl0cyBjb250
ZW50cyB3aXRoIHRoZSBpbWFnZSBiZWxvdy4KKyAgICAvLyBUcnkgdG8gcmV1c2UgdGhlIGNvbG9y
IHNwYWNlIGZyb20gdGhlIGltYWdlIHRvIHByZXNlcnZlIGl0cyBjb2xvcnMuCisgICAgLy8gU29t
ZSBpbWFnZXMgdXNlIGEgY29sb3Igc3BhY2UgKHN1Y2ggYXMgaW5kZXhlZCkgdW5zdXBwb3J0ZWQg
YnkgdGhlIGJpdG1hcCBjb250ZXh0LgorICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNv
bG9yU3BhY2UoQWRvcHRDRiwgQ0dJbWFnZUdldENvbG9yU3BhY2UoY2dJbWFnZSkpOworICAgIENH
Q29sb3JTcGFjZU1vZGVsIGNvbG9yU3BhY2VNb2RlbCA9IENHQ29sb3JTcGFjZUdldE1vZGVsKGNv
bG9yU3BhY2UuZ2V0KCkpOworICAgIHN3aXRjaCAoY29sb3JTcGFjZU1vZGVsKSB7CisgICAgY2Fz
ZSBrQ0dDb2xvclNwYWNlTW9kZWxNb25vY2hyb21lOgorICAgIGNhc2Uga0NHQ29sb3JTcGFjZU1v
ZGVsUkdCOgorICAgIGNhc2Uga0NHQ29sb3JTcGFjZU1vZGVsQ01ZSzoKKyAgICBjYXNlIGtDR0Nv
bG9yU3BhY2VNb2RlbExhYjoKKyAgICBjYXNlIGtDR0NvbG9yU3BhY2VNb2RlbERldmljZU46Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbG9yU3BhY2UuYWRvcHRDRihD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQkxpbmVhcikp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gdGVt
cENvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHRlbXBWZWN0b3IuZGF0YSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCA4LCB0ZW1wUm93Qnl0ZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdCkpOworICAgIENHQ29udGV4dFNldEJsZW5kTW9kZSh0ZW1wQ29udGV4dC5n
ZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRlbXBDb250
ZXh0LmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICBDR1JlY3RNYWtlKDAsIDAsIHN0YXRp
Y19jYXN0PENHRmxvYXQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oaGVpZ2h0KSksCisg
ICAgICAgICAgICAgICAgICAgICAgIGNnSW1hZ2UpOworICAgIHBpeGVscyA9IHRlbXBWZWN0b3Iu
ZGF0YSgpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZv
cm0uIgogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDY0NjA4KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMjYgKzU2LDI2IEBAIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJv
bWl1bToKIH0KIAogTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKQotICAgIDogbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShmYWxzZSkK
LSAgICAsIG1fb3duZXIob3duZXIpCisgICAgOiBtX293bmVyKG93bmVyKQorICAgICwgbV9jb250
ZW50c0RpcnR5KGZhbHNlKQogICAgICwgbV9zdXBlcmxheWVyKDApCisgICAgLCBtX2FuY2hvclBv
aW50KDAuNSwgMC41KQorICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKKyAgICAs
IG1fYm9yZGVyQ29sb3IoMCwgMCwgMCwgMCkKICAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQorICAg
ICwgbV9lZGdlQW50aWFsaWFzaW5nTWFzaygwKQorICAgICwgbV9vcGFjaXR5KDEuMCkKKyAgICAs
IG1felBvc2l0aW9uKDAuMCkKKyAgICAsIG1fYW5jaG9yUG9pbnRaKDApCiAgICAgLCBtX2JvcmRl
cldpZHRoKDApCiAgICAgLCBtX2FsbG9jYXRlZFRleHR1cmVJZCgwKQotICAgICwgbV9ib3JkZXJD
b2xvcigwLCAwLCAwLCAwKQotICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKLSAg
ICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCi0gICAgLCBtX2FuY2hvclBvaW50WigwKQogICAg
ICwgbV9jbGVhcnNDb250ZXh0KGZhbHNlKQogICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQotICAg
ICwgbV9lZGdlQW50aWFsaWFzaW5nTWFzaygwKQogICAgICwgbV9oaWRkZW4oZmFsc2UpCiAgICAg
LCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCi0gICAgLCBtX29wYWNpdHkoMS4wKQogICAgICwgbV9v
cGFxdWUodHJ1ZSkKLSAgICAsIG1felBvc2l0aW9uKDAuMCkKICAgICAsIG1fZ2VvbWV0cnlGbGlw
cGVkKGZhbHNlKQotICAgICwgbV9jb250ZW50c0RpcnR5KGZhbHNlKQorICAgICwgbV9uZWVkc0Rp
c3BsYXlPbkJvdW5kc0NoYW5nZShmYWxzZSkKIHsKIH0KIApAQCAtMTYyLDYgKzE2Miw0MCBAQCB2
b2lkIExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVDb250ZW50CiAgICAgICAgIHBpeGVscyA9
IHNraWFCaXRtYXAtPmdldFBpeGVscygpOwogICAgICAgICBiaXRtYXBTaXplID0gSW50U2l6ZShz
a2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CiAgICAgfQorI2VsaWYg
UExBVEZPUk0oQ0cpCisgICAgcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IG1fYm91bmRzOworICAgIElu
dFJlY3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgbV9ib3VuZHMpOworCisgICAgLy8gSWYg
dGhlIHRleHR1cmUgbmVlZHMgdG8gYmUgcmVhbGxvY2F0ZWQgdGhlbiB3ZSBtdXN0IHJlZHJhdyB0
aGUgZW50aXJlCisgICAgLy8gY29udGVudHMgb2YgdGhlIGxheWVyLgorICAgIGlmIChyZXF1aXJl
ZFRleHR1cmVTaXplICE9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUpCisgICAgICAgIGRpcnR5UmVj
dCA9IGJvdW5kc1JlY3Q7CisgICAgZWxzZSB7CisgICAgICAgIC8vIENsaXAgdGhlIGRpcnR5UmVj
dCB0byB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIgdG8gYXZvaWQgZHJhd2luZyBvdXRzaWRlCisgICAg
ICAgIC8vIHRoZSBib3VuZHMgb2YgdGhlIGJhY2tpbmcgdGV4dHVyZS4KKyAgICAgICAgZGlydHlS
ZWN0LmludGVyc2VjdChib3VuZHNSZWN0KTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4g
dGVtcFZlY3RvcjsKKyAgICBpbnQgcm93Qnl0ZXMgPSA0ICogZGlydHlSZWN0LndpZHRoKCk7Cisg
ICAgdGVtcFZlY3Rvci5yZXNpemUocm93Qnl0ZXMgKiBkaXJ0eVJlY3QuaGVpZ2h0KCkpOworICAg
IG1lbXNldCh0ZW1wVmVjdG9yLmRhdGEoKSwgMCwgdGVtcFZlY3Rvci5zaXplKCkpOworICAgIC8v
IEZJWE1FOiB1bnN1cmUgd2hldGhlciB0aGlzIGlzIHRoZSBiZXN0IGNvbG9yIHNwYWNlIGNob2lj
ZS4KKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENH
Q29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VHZW5lcmljUkdCTGluZWFyKSk7
CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4dENHKEFkb3B0Q0YsIENHQml0bWFw
Q29udGV4dENyZWF0ZSh0ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnR5UmVjdC53
aWR0aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIDgsIHJvd0J5dGVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s
b3JTcGFjZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCkpOworCisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0Q0cuZ2V0
KCkpOworCisgICAgLy8gVHJhbnNsYXRlIHRoZSBncmFwaGljcyBjb250eHQgaW50byB0aGUgY29v
cmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGRpcnR5IHJlY3QuCisgICAgZ3JhcGhpY3NDb250ZXh0LnRy
YW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworCisgICAgbV9vd25lci0+
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOwor
CisgICAgcGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7CisgICAgYml0bWFwU2l6ZSA9IGRpcnR5
UmVjdC5zaXplKCk7CiAjZWxzZQogI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBw
bGF0Zm9ybS4iCiAjZW5kaWYKQEAgLTE4Nyw3ICsyMjEsMTcgQEAgdm9pZCBMYXllckNocm9taXVt
Ojp1cGRhdGVUZXh0dXJlUmVjdCh2bwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVCh1cGRh
dGVSZWN0LndpZHRoKCkgPD0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZS53aWR0aCgpICYmIHVwZGF0
ZVJlY3QuaGVpZ2h0KCkgPD0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAgICAg
ICAgIEFTU0VSVCh1cGRhdGVSZWN0LndpZHRoKCkgPT0gYml0bWFwU2l6ZS53aWR0aCgpICYmIHVw
ZGF0ZVJlY3QuaGVpZ2h0KCkgPT0gYml0bWFwU2l6ZS5oZWlnaHQoKSk7CisjaWYgUExBVEZPUk0o
Q0cpCisgICAgICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBH
cmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBo
ZXJlLgorICAgICAgICBnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhl
aWdodCgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSAtIHVwZGF0ZVJlY3QueSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxz
KTsKKyNlbGlmIFBMQVRGT1JNKFNLSUEpCiAgICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lk
dGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4
ZWxzKTsKKyNlbHNlCisjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3Jt
LiIKKyNlbmRpZgogICAgIH0KIAogICAgIG1fZGlydHlSZWN0LnNldFNpemUoRmxvYXRTaXplKCkp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNjQ2MDgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDEzICs0MiwxNyBAQAogI2lmIFBMQVRGT1JNKFNLSUEpCiAj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tp
YS5oIgorI2VsaWYgUExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFw
Q29udGV4dC5oPgogI2VuZGlmCiAKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCisjaWZuZGVmIE5ERUJVRwogc3RhdGljIFdURkxvZ0NoYW5uZWwgTG9nTGF5
ZXJSZW5kZXJlciA9IHsgMHgwMDAwMDAwMCwgIkxheWVyUmVuZGVyZXIiLCBXVEZMb2dDaGFubmVs
T24gfTsKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBjaGVja0dMRXJyb3IoKQogewpAQCAtMTk1LDEy
ICsxOTksMTIgQEAgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUgogfQog
CiBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzT3duUHRy
PEdMRVMyQ29udGV4dD4gZ2xlczJDb250ZXh0KQotICAgIDogbV9yb290TGF5ZXIoMCkKLSAgICAs
IG1fbmVlZHNEaXNwbGF5KGZhbHNlKQorICAgIDogbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkK
KyAgICAsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCgwKQogICAgICwgbV9wb3NpdGlvbkxvY2F0
aW9uKDApCiAgICAgLCBtX3RleENvb3JkTG9jYXRpb24oMSkKLSAgICAsIG1fcm9vdExheWVyVGV4
dHVyZVdpZHRoKDApCi0gICAgLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQoMCkKKyAgICAsIG1f
cm9vdExheWVyKDApCisgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fc2Nyb2xs
UG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkKICAgICAsIG1fY3VycmVudFNoYWRlclByb2dyYW1U
eXBlKE51bVNoYWRlclByb2dyYW1UeXBlcykKICAgICAsIG1fZ2xlczJDb250ZXh0KGdsZXMyQ29u
dGV4dCkKQEAgLTI0NSw2ICsyNDksMTkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNl
dFJvb3RMYXllcgogICAgIG1fcm9vdExheWVyU2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdl
QnVmZmVyKHRydWUpOwogI2VuZGlmCiAgICAgbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQgPSBu
ZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqPihtX3Jvb3RMYXllclNraWFDb250ZXh0LmdldCgpKSk7CisjZWxpZiBQTEFURk9STShDRykK
KyAgICAvLyBSZWxlYXNlIHRoZSBwcmV2aW91cyBDR0JpdG1hcENvbnRleHQgYmVmb3JlIHJlYWxs
b2NhdGluZyB0aGUgYmFja2luZyBzdG9yZSBhcyBhIHByZWNhdXRpb24uCisgICAgbV9yb290TGF5
ZXJDR0NvbnRleHQuYWRvcHRDRigwKTsKKyAgICBpbnQgcm93Qnl0ZXMgPSA0ICogc2l6ZS53aWR0
aCgpOworICAgIG1fcm9vdExheWVyQmFja2luZ1N0b3JlLnJlc2l6ZShyb3dCeXRlcyAqIHNpemUu
aGVpZ2h0KCkpOworICAgIG1lbXNldChtX3Jvb3RMYXllckJhY2tpbmdTdG9yZS5kYXRhKCksIDAs
IG1fcm9vdExheWVyQmFja2luZ1N0b3JlLnNpemUoKSk7CisgICAgLy8gRklYTUU6IHVuc3VyZSB3
aGV0aGVyIHRoaXMgaXMgdGhlIGJlc3QgY29sb3Igc3BhY2UgY2hvaWNlLgorICAgIFJldGFpblB0
cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRl
V2l0aE5hbWUoa0NHQ29sb3JTcGFjZUdlbmVyaWNSR0JMaW5lYXIpKTsKKyAgICBtX3Jvb3RMYXll
ckNHQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX3Jvb3RMYXllckJhY2tp
bmdTdG9yZS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCA4LCByb3dCeXRlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2xvclNwYWNlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgIG1f
cm9vdExheWVyR3JhcGhpY3NDb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29udGV4dChtX3Jvb3RMYXll
ckNHQ29udGV4dC5nZXQoKSk7CiAjZWxzZQogI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3Ig
eW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKQEAgLTMwNCwzNCArMzIxLDUxIEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGMKICAgICAvLyBhbmQgdmlld3BvcnQuCiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAKKyAgICBjaGVja0dMRXJyb3IoKTsKKwogICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpOwogCi0gICAgdW5z
aWduZWQgdmlzaWJsZVJlY3RXaWR0aCA9IHZpc2libGVSZWN0LndpZHRoKCk7Ci0gICAgdW5zaWdu
ZWQgdmlzaWJsZVJlY3RIZWlnaHQgPSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKKyAgICBjaGVja0dM
RXJyb3IoKTsKKworICAgIGludCB2aXNpYmxlUmVjdFdpZHRoID0gdmlzaWJsZVJlY3Qud2lkdGgo
KTsKKyAgICBpbnQgdmlzaWJsZVJlY3RIZWlnaHQgPSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKICAg
ICBpZiAodmlzaWJsZVJlY3RXaWR0aCAhPSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCB8fCB2aXNp
YmxlUmVjdEhlaWdodCAhPSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpIHsKICAgICAgICAgbV9y
b290TGF5ZXJUZXh0dXJlV2lkdGggPSB2aXNpYmxlUmVjdC53aWR0aCgpOwogICAgICAgICBtX3Jv
b3RMYXllclRleHR1cmVIZWlnaHQgPSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKIAogICAgICAgICBt
X3Byb2plY3Rpb25NYXRyaXggPSBvcnRob01hdHJpeCgwLCB2aXNpYmxlUmVjdFdpZHRoICsgMC41
LCB2aXNpYmxlUmVjdEhlaWdodCArIDAuNSwgMCwgLTEwMDAsIDEwMDApOwogICAgICAgICBnbFRl
eEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV9yb290TGF5ZXJUZXh0dXJlV2lk
dGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgMCk7CisKKyAgICAgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIEdM
IHZpZXdwb3J0IGNvdmVycyB0aGUgZW50aXJlIHZpc2libGUgYXJlYSwgaW5jbHVkaW5nIHRoZSBz
Y3JvbGxiYXJzLgogICAgIGdsVmlld3BvcnQoMCwgMCwgdmlzaWJsZVJlY3RXaWR0aCwgdmlzaWJs
ZVJlY3RIZWlnaHQpOwogCisgICAgY2hlY2tHTEVycm9yKCk7CisKICAgICAvLyBUaGUgbGF5ZXIs
IHNjcm9sbCBhbmQgZGVidWcgYm9yZGVyIHNoYWRlcnMgYWxsIHVzZSB0aGUgc2FtZSB2ZXJ0ZXgg
YXR0cmlidXRlcwogICAgIC8vIHNvIHdlIGNhbiBiaW5kIHRoZW0gb25seSBvbmNlLgogICAgIGds
QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fcXVhZFZib0lkc1tWZXJ0aWNlc10pOworICAg
IGNoZWNrR0xFcnJvcigpOwogICAgIGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZF
UiwgbV9xdWFkVmJvSWRzW0xheWVyRWxlbWVudHNdKTsKKyAgICBjaGVja0dMRXJyb3IoKTsKICAg
ICBHTHVpbnQgb2Zmc2V0ID0gMDsKICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlv
bkxvY2F0aW9uLCAzLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDUgKiBzaXplb2YoR0xmbG9hdCksIChH
THZvaWQqKShvZmZzZXQpKTsKKyAgICBjaGVja0dMRXJyb3IoKTsKICAgICBvZmZzZXQgKz0gMyAq
IHNpemVvZihHTGZsb2F0KTsKICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobV90ZXhDb29yZExv
Y2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDUgKiBzaXplb2YoR0xmbG9hdCksIChHTHZv
aWQqKShvZmZzZXQpKTsKKyAgICBjaGVja0dMRXJyb3IoKTsKICAgICBnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KG1fcG9zaXRpb25Mb2NhdGlvbik7CisgICAgY2hlY2tHTEVycm9yKCk7CiAgICAg
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3RleENvb3JkTG9jYXRpb24pOworICAgIGNoZWNr
R0xFcnJvcigpOwogICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgY2hlY2tH
TEVycm9yKCk7CiAgICAgZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpOworICAgIGNoZWNrR0xFcnJv
cigpOwogICAgIGdsRGlzYWJsZShHTF9DVUxMX0ZBQ0UpOworICAgIGNoZWNrR0xFcnJvcigpOwog
CiAgICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0gSW50UG9pbnQoLTEsIC0xKSkKICAgICAgICAg
bV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwpAQCAtMzQ2LDE1ICszODAsMjggQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoYwogICAgICAgICAvLyByb290
IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEgaXMgc3ViZXNxdWVudGx5IGZp
bGxlZCBhcyB1c3VhbCB3aXRoCiAgICAgICAgIC8vIHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRl
UmVjdC4KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsZWRMYXllck1hdHJpeDsK
KyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGY7Cisj
ZWxpZiBQTEFURk9STShDRykKKyAgICAgICAgLy8gQmVjYXVzZSB0aGUgY29udGVudHMgb2YgdGhl
IE9wZW5HTCB0ZXh0dXJlIGFyZSBpbnZlcnRlZAorICAgICAgICAvLyB2ZXJ0aWNhbGx5IGNvbXBh
cmVkIHRvIHRoZSBTa2lhIGJhY2tlbmQsIHdlIG5lZWQgdG8gbW92ZQorICAgICAgICAvLyB0aGUg
YmFja2luZyBzdG9yZSBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLgorICAgICAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IC0xLjBmOworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9y
IHlvdXIgcGxhdGZvcm0uIgorI2VuZGlmCisKICAgICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC50
cmFuc2xhdGUzZCgoaW50KWZsb29yZigwLjUgKiB2aXNpYmxlUmVjdC53aWR0aCgpICsgMC41KSAt
IHNjcm9sbERlbHRhLngoKSwKLSAgICAgICAgICAgIChpbnQpZmxvb3JmKDAuNSAqIHZpc2libGVS
ZWN0LmhlaWdodCgpICsgMC41KSArIHNjcm9sbERlbHRhLnkoKSwgMCk7CisgICAgICAgICAgICAo
aW50KWZsb29yZigwLjUgKiB2aXNpYmxlUmVjdC5oZWlnaHQoKSArIDAuNSkgKyBzY2FsZUZhY3Rv
ciAqIHNjcm9sbERlbHRhLnkoKSwgMCk7CiAgICAgICAgIHNjcm9sbGVkTGF5ZXJNYXRyaXguc2Nh
bGUzZCgxLCAtMSwgMSk7CiAKICAgICAgICAgLy8gU3dpdGNoIHNoYWRlcnMgdG8gYXZvaWQgUkdC
IHN3aXp6bGluZy4KICAgICAgICAgdXNlU2hhZGVyUHJvZ3JhbShTY3JvbGxMYXllclByb2dyYW0p
OwogICAgICAgICBnbFVuaWZvcm0xaShtX3NoYWRlclByb2dyYW1zW1Njcm9sbExheWVyUHJvZ3Jh
bV0ubV9zYW1wbGVyTG9jYXRpb24sIDApOworICAgICAgICBjaGVja0dMRXJyb3IoKTsKIAogICAg
ICAgICBkcmF3VGV4dHVyZWRRdWFkKHNjcm9sbGVkTGF5ZXJNYXRyaXgsIHZpc2libGVSZWN0Lndp
ZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpLCAxKTsKKyAgICAgICAgY2hlY2tHTEVycm9yKCk7
CiAKICAgICAgICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCAwLCAwLCAw
LCAwLCBjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSk7CiAKQEAgLTM4
MSwzMSArNDI4LDUyIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGMK
ICAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUg
cm9vdCBsYXllciB0ZXh0dXJlLgogICAgICAgICBnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCks
IHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7
CiAgICAgICAgIGNoZWNrR0xFcnJvcigpOworI2VsaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIC8v
IEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJDR0NvbnRl
eHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihDR0Jp
dG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRh
dGVSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNr
aW5nU3RvcmUuZGF0YSgpOworCisgICAgICAgIGNoZWNrR0xFcnJvcigpOworICAgICAgICAvLyBD
b3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRl
eHR1cmUuCisgICAgICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQgaW4gQ29y
ZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBmb3IgdGhp
cyBoZXJlLgorICAgICAgICBnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXllclRleHR1cmVIZWln
aHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwor
ICAgICAgICBjaGVja0dMRXJyb3IoKTsKICNlbHNlCi0jZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIg
cGxhdGZvcm0KKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgog
I2VuZGlmCiAgICAgfQogCiAgICAgZ2xDbGVhckNvbG9yKDAsIDAsIDEsIDEpOworICAgIGNoZWNr
R0xFcnJvcigpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JV
RkZFUl9CSVQpOworICAgIGNoZWNrR0xFcnJvcigpOwogCiAgICAgLy8gUmVuZGVyIHRoZSByb290
IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVh
IG9mIHRoZSB3aW5kb3cuCiAgICAgdXNlU2hhZGVyUHJvZ3JhbShDb250ZW50TGF5ZXJQcm9ncmFt
KTsKKyAgICBjaGVja0dMRXJyb3IoKTsKICAgICBnbFVuaWZvcm0xaShtX3NhbXBsZXJMb2NhdGlv
biwgMCk7CisgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5
ZXJNYXRyaXg7CiAgICAgbGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QodmlzaWJsZVJlY3Qud2lkdGgo
KSAvIDIsIHZpc2libGVSZWN0LmhlaWdodCgpIC8gMiwgMCk7CiAgICAgZHJhd1RleHR1cmVkUXVh
ZChsYXllck1hdHJpeCwgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCks
IDEpOworICAgIGNoZWNrR0xFcnJvcigpOwogCiAgICAgLy8gSWYgY3VsbGluZyBpcyBlbmFibGVk
IHRoZW4gd2Ugd2lsbCBjdWxsIHRoZSBiYWNrZmFjZS4KICAgICBnbEN1bGxGYWNlKEdMX0JBQ0sp
OworICAgIGNoZWNrR0xFcnJvcigpOwogICAgIC8vIFRoZSBvcnRob2dyYXBoaWMgcHJvamVjdGlv
biBpcyBzZXR1cCBzdWNoIHRoYXQgWSBzdGFydHMgYXQgemVybyBhbmQKICAgICAvLyBpbmNyZWFz
ZXMgZ29pbmcgZG93biB0aGUgcGFnZSBzbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgd2luZGluZyBv
cmRlciBvZgogICAgIC8vIGZyb250IGZhY2luZyB0cmlhbmdsZXMuCiAgICAgZ2xGcm9udEZhY2Uo
R0xfQ1cpOworICAgIGNoZWNrR0xFcnJvcigpOwogCiAgICAgLy8gVGhlIHNoYWRlciB1c2VkIHRv
IHJlbmRlciBsYXllcnMgcmV0dXJucyBwcmUtbXVsdGlwbGllZCBhbHBoYSBjb2xvcnMKICAgICAv
LyBzbyB3ZSBuZWVkIHRvIHNlbmQgdGhlIGJsZW5kaW5nIG1vZGUgYXBwcm9wcmlhdGVseS4KICAg
ICBnbEVuYWJsZShHTF9CTEVORCk7CisgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgZ2xCbGVuZEZ1
bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKIAogICAgIGNoZWNrR0xFcnJvcigp
OwpAQCAtNjY4LDYgKzczNiw5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2gKICAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBtYXRyaXggKiBhX3Bvc2l0aW9uOyBcbiIK
ICAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFfdGV4Q29vcmQ7ICAgXG4iCiAgICAgICAgICJ9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKyAgICAvLyBOb3RlIGRpZmZlcmVuY2VzIGJl
dHdlZW4gU2tpYSBhbmQgQ29yZSBHcmFwaGljcyB2ZXJzaW9uczoKKyAgICAvLyAgLSBTa2lhIHVz
ZXMgQkdSQSBhbmQgb3JpZ2luIGlzIHVwcGVyIGxlZnQKKyAgICAvLyAgLSBDb3JlIEdyYXBoaWNz
IHVzZXMgUkdCQSBhbmQgb3JpZ2luIGlzIGxvd2VyIGxlZnQKICAgICBjaGFyIGZyYWdtZW50U2hh
ZGVyU3RyaW5nW10gPQogICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIgogICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgpAQCAtNjc1LDggKzc0NiwxNSBAQCBib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoCiAgICAgICAgICJ1bmlmb3JtIGZs
b2F0IGFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICJ2
b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAg
ICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisjaWYgUExBVEZPUk0oU0tJQSkKICAgICAgICAgIiAgdmVjNCB0ZXhDb2xvciA9IHRl
eHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQpOyBcbiIKICAgICAgICAgIiAgZ2xfRnJhZ0Nv
bG9yID0gdmVjNCh0ZXhDb2xvci56LCB0ZXhDb2xvci55LCB0ZXhDb2xvci54LCB0ZXhDb2xvci53
KSAqIGFscGhhOyBcbiIKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgICAgICAiICB2ZWM0IHRleENv
bG9yID0gdGV4dHVyZTJEKHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIDEuMCAtIHZfdGV4
Q29vcmQueSkpOyBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54
LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKKyNlbHNl
CisjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKKyNlbmRpZgog
ICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIjsKIAogICAgIC8vIEZyYWdtZW50IHNoYWRlciB1c2VkIGZvciByZW5kZXJpbmcgdGhl
IHNjcm9sbGVkIHJvb3QgbGF5ZXIgcXVhZC4gSXQgZGlmZmVycwpAQCAtNzc1LDcgKzg1Myw3IEBA
IGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKIAogICAgIC8vIENyZWF0
ZSBhIHRleHR1cmUgb2JqZWN0IHRvIGhvbGQgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVy
LgogICAgIG1fcm9vdExheWVyVGV4dHVyZUlkID0gY3JlYXRlTGF5ZXJUZXh0dXJlKCk7Ci0gICAg
aWYgKG1fcm9vdExheWVyVGV4dHVyZUlkID09IC0xKSB7CisgICAgaWYgKCFtX3Jvb3RMYXllclRl
eHR1cmVJZCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGV4dHVyZSBm
b3Igcm9vdCBsYXllciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2NDYwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDYgKzQyLDExIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKKyNpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q0dDb250ZXh0Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR0xFUzJDb250ZXh0OwpAQCAtMTQ1LDcgKzE1MCwxMiBA
QCBwcml2YXRlOgogICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9yb290TGF5ZXJD
YW52YXM7CiAgICAgT3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+IG1fcm9vdExheWVyU2tpYUNv
bnRleHQ7CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9yb290TGF5ZXJHcmFwaGljc0Nv
bnRleHQ7CisjZWxpZiBQTEFURk9STShDRykKKyAgICBWZWN0b3I8dWludDhfdD4gbV9yb290TGF5
ZXJCYWNraW5nU3RvcmU7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gbV9yb290TGF5ZXJD
R0NvbnRleHQ7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9yb290TGF5ZXJHcmFwaGlj
c0NvbnRleHQ7CiAjZW5kaWYKKwogICAgIEludFNpemUgbV9yb290TGF5ZXJDYW52YXNTaXplOwog
CiAgICAgT3duUHRyPEdMRVMyQ29udGV4dD4gbV9nbGVzMkNvbnRleHQ7CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY0NjA4KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEwLTA4LTAyICBLZW5uZXRoIFJ1c3NlbGwgIDxr
YnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBQb3J0IENocm9taXVtJ3MgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgdG8gTWFjIE9T
IFgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzk4
CisKKyAgICAgICAgKiBwdWJsaWMvV2ViR0xFUzJDb250ZXh0Lmg6CisgICAgICAgICAtIEFkZGVk
IHJlc2l6ZU9uc2NyZWVuQ29udGVudCwgbmVlZGVkIG9uIE1hYyBPUyBYIHRvIHJlcG9ydAorICAg
ICAgICAgICB3aW5kb3cgc2l6ZSBjaGFuZ2VzLgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpemUpOgorICAgICAgICAgLSBT
ZW5kIHJlc2l6ZSBub3RpZmljYXRpb24gdG8gdGhlIFdlYkdMRVMyQ29udGV4dC4KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAg
IC0gUG9ydGVkIHRvIENvcmUgR3JhcGhpY3MuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpnbGVzMkNvbnRleHQpOgorICAgICAgICAgLSBBZGRlZCBpbml0aWFsIHNpemUgbm90aWZpY2F0
aW9uIHVwb24gY29udGV4dCBjcmVhdGlvbi4KKwogMjAxMC0wOC0wMyAgSmFtZXMgUm9iaW5zb24g
IDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hl
ci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR0xFUzJDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHTEVTMkNvbnRleHQuaAkocmV2aXNp
b24gNjQ2MDgpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdMRVMyQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5z
IHRoZSBJRCBvZiB0aGUgdGV4dHVyZSB1c2VkIGZvciBvZmZzY3JlZW4gcmVuZGVyaW5nIGluIHRo
ZSBjb250ZXh0IG9mIHRoZSBwYXJlbnQuCiAgICAgdmlydHVhbCB1bnNpZ25lZCBnZXRPZmZzY3Jl
ZW5Db250ZW50UGFyZW50VGV4dHVyZUlkKCkgPSAwOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBm
dW5jdGlvbiBpcyB1c2VkIG9ubHkgb24gTWFjIE9TIFggYW5kIGlzIG5lZWRlZAorICAgIC8vIGlu
IG9yZGVyIHRvIHJlcG9ydCB3aW5kb3cgc2l6ZSBjaGFuZ2VzLgorI2lmIGRlZmluZWQoX19BUFBM
RV9fKQorICAgIHZpcnR1YWwgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgV2ViU2l6
ZSYpID0gMDsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gNjQ2MDgpCisrKyBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTExLDYgKzkxMSwx
MyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYgCiAgICAgICAgIFdl
YlJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKICAg
ICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKICAgICB9CisK
KyNpZiBPUyhEQVJXSU4pCisgICAgaWYgKG1fZ2xlczJDb250ZXh0KSB7CisgICAgICAgIG1fZ2xl
czJDb250ZXh0LT5yZXNpemVPbnNjcmVlbkNvbnRlbnQoV2ViU2l6ZShzdGQ6Om1heCgxLCBtX3Np
emUud2lkdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptYXgoMSwgbV9zaXplLmhlaWdodCkpKTsKKyAgICB9CisjZW5kaWYKIH0K
IAogdm9pZCBXZWJWaWV3SW1wbDo6bGF5b3V0KCkKQEAgLTIxNTQsNiArMjE2MSwyMiBAQCB2b2lk
IFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50CiAgICAgICAgIHJvb3RMYXllckNv
bnRleHQtPnJlc3RvcmUoKTsKIAogICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+cmVzdG9yZSgpOwor
I2VsaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSByb290
TGF5ZXJDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgICAgICBDR0NvbnRleHRTYXZl
R1N0YXRlKGNnQ29udGV4dCk7CisKKyAgICAgICAgLy8gQnJpbmcgdGhlIENvcmVHcmFwaGljcyBj
b250ZXh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgorICAg
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCAtcmVjdC54LCAtcmVjdC55KTsK
KworICAgICAgICByb290TGF5ZXJDb250ZXh0LT5zYXZlKCk7CisKKyAgICAgICAgd2ViZnJhbWUt
PnBhaW50V2l0aENvbnRleHQoKnJvb3RMYXllckNvbnRleHQsIHJlY3QpOworICAgICAgICByb290
TGF5ZXJDb250ZXh0LT5yZXN0b3JlKCk7CisKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjZ0NvbnRleHQpOworI2Vsc2UKKyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQog
I2VuZGlmCiAgICAgfQogfQpAQCAtMjIwMyw2ICsyMjI2LDExIEBAIFdlYkdMRVMyQ29udGV4dCog
V2ViVmlld0ltcGw6OmdsZXMyQ29udGUKICAgICAgICAgICAgIG1fZ2xlczJDb250ZXh0LmNsZWFy
KCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQorCisjaWYgT1MoREFSV0lOKQor
ICAgICAgICBtX2dsZXMyQ29udGV4dC0+cmVzaXplT25zY3JlZW5Db250ZW50KFdlYlNpemUoc3Rk
OjptYXgoMSwgbV9zaXplLndpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDEsIG1fc2l6ZS5oZWlnaHQpKSk7CisjZW5k
aWYKICAgICB9CiAgICAgcmV0dXJuIG1fZ2xlczJDb250ZXh0LmdldCgpOwogfQo=
</data>
<flag name="review"
          id="51738"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="51739"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>