<?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>111679</bug_id>
          
          <creation_ts>2013-03-06 21:19:17 -0800</creation_ts>
          <short_desc>Need API to draw custom overhang area</short_desc>
          <delta_ts>2013-03-07 17:01:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>bdakin</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>849705</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-03-06 21:19:17 -0800</bug_when>
    <thetext>We need API that allows a client to set an image that it wants to draw into the top of bottom overhang area.

Patch forthcoming.

&lt;rdar://problem/13291415&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849709</commentid>
    <comment_count>1</comment_count>
      <attachid>191914</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-03-06 21:31:40 -0800</bug_when>
    <thetext>Created attachment 191914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849727</commentid>
    <comment_count>2</comment_count>
      <attachid>191914</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-06 21:51:15 -0800</bug_when>
    <thetext>Comment on attachment 191914
Patch

Attachment 191914 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/16986147</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849733</commentid>
    <comment_count>3</comment_count>
      <attachid>191914</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-03-06 21:57:49 -0800</bug_when>
    <thetext>Comment on attachment 191914
Patch

Attachment 191914 did not pass efl-ews (efl):
Output: http://webkit-commit-queue.appspot.com/results/17006062</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849775</commentid>
    <comment_count>4</comment_count>
      <attachid>191914</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-06 23:17:18 -0800</bug_when>
    <thetext>Comment on attachment 191914
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        No new tests (OOPS!).

You should say a bit more here about what these overhang areas are intended for.

&gt; Source/WebCore/page/ChromeClient.h:228
&gt; +    virtual bool wantsTopOverhangImage() const;

This talks about images, but the setUp function talks about layers. Confusing.

&gt; Source/WebCore/page/ChromeClient.h:229
&gt; +    virtual void setUpTopOverhangAreaLayer(GraphicsLayer*);

setupFoo seems slightly more common than setUpFoo in the codebase.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1586
&gt; +    if (m_layerForTopOverhangArea || (!m_renderView-&gt;document()-&gt;ownerElement() &amp;&amp; page()-&gt;chrome()-&gt;client()-&gt;wantsTopOverhangImage()))
&gt; +        updateLayerForTopOverhangArea();

Why check !m_renderView-&gt;document()-&gt;ownerElement() &amp;&amp; page()-&gt;chrome()-&gt;client()-&gt;wantsTopOverhangImage()) again here. Won&apos;t you only have an overhang layer if the client wants one?

You could just call updateLayerForTopOverhangArea() unconditionally, and have it return early if there isn&apos;t a layer.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2435
&gt; +    ASSERT(!m_renderView-&gt;document()-&gt;ownerElement());

I really wish we just said foo-&gt;isMainFrame() rather than doing this obscure check everywhere.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2534
&gt; +    if (!m_renderView-&gt;document()-&gt;ownerElement()) {
&gt; +        if (page()-&gt;chrome()-&gt;client()-&gt;wantsTopOverhangImage() &amp;&amp; !m_layerForTopOverhangArea)
&gt; +            updateLayerForTopOverhangArea();
&gt; +        else if (m_layerForTopOverhangArea) {
&gt; +            m_layerForTopOverhangArea-&gt;removeFromParent();
&gt; +            m_layerForTopOverhangArea = nullptr;
&gt; +        }

I don&apos;t really like how the layer creation code is separated from the clearing code. There should be one function that makes or deletes the layer, and that should be the only function to call wantsTopOverhangImage().

I think the flow control is also wrong here.

if (page()-&gt;chrome()-&gt;client()-&gt;wantsTopOverhangImage() &amp;&amp; !m_layerForTopOverhangArea)
  do A
else if (m_layerForTopOverhangArea)
  do B

You&apos;ll do B when wantsTopOverhangImage() is true and you have a layer. And that clears the layer, which seems wrong.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebChromeClientMac.mm:51
&gt; +    layer-&gt;platformLayer().contents = [[(id)cgImage.get() retain] autorelease];

You should be able to just do layer.contents = (id)cgImage.get().

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1392
&gt; +    frameView-&gt;forceLayout();

Ouch! I think we should find a less sledgehammer approach to get RLC to make the overhang layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850530</commentid>
    <comment_count>5</comment_count>
      <attachid>192093</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-03-07 15:25:25 -0800</bug_when>
    <thetext>Created attachment 192093
Patch

Simon and I discussed in person and came up with this slightly different approach which avoids the ChromeClient entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850615</commentid>
    <comment_count>6</comment_count>
      <attachid>192093</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-07 16:35:23 -0800</bug_when>
    <thetext>Comment on attachment 192093
Patch

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

r+ but I&apos;d like to see the position/anchor point stuff resolved.

&gt; Source/WebCore/page/FrameView.cpp:871
&gt; +    return renderView-&gt;compositor()-&gt;updateLayerForTopOverhangArea(wantsLayer);

This should be #ifdeffed for ACCELERATED_COMPOSITING, and even then probably with a null-check on the compositor.

&gt; Source/WebCore/page/FrameView.cpp:879
&gt; +    return renderView-&gt;compositor()-&gt;updateLayerForBottomOverhangArea(wantsLayer);

Ditto.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:796
&gt; +    layer-&gt;setPosition(FloatPoint(0, -image-&gt;size().height()));

If you set the anchor point to (0,1) then the position here should be (0,0)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850658</commentid>
    <comment_count>7</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2013-03-07 17:01:20 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/145156</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191914</attachid>
            <date>2013-03-06 21:31:40 -0800</date>
            <delta_ts>2013-03-07 15:25:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>22204</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAzLTA2ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVkIEFQSSB0byBkcmF3IGN1c3Rv
bSBvdmVyaGFuZyBhcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTE2NzkKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTMyOTE0MTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgTmV3IENocm9t
ZUNsaWVudCBmdW5jdGlvbnMgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgY2xpZW50IHdhbnRzIGEg
dG9wIG9yIGJvdHRvbSAKKyAgICAgICAgb3ZlcmhhbmcgaW1hZ2UgYW5kIHRvIHNldCB1cCB0aGUg
bGF5ZXJzIHdpdGggdGhvc2UgaW1hZ2VzLgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAg
ICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
d2FudHNUb3BPdmVyaGFuZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
c2V0VXBUb3BPdmVyaGFuZ0FyZWFMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGll
bnQ6OndhbnRzQm90dG9tT3ZlcmhhbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnQ6OnNldFVwQm90dG9tT3ZlcmhhbmdBcmVhTGF5ZXIpOgorICAgICAgICAqIHBhZ2UvQ2hy
b21lQ2xpZW50Lmg6CisgICAgICAgIChDaHJvbWVDbGllbnQpOgorCisgICAgICAgIFJlbmRlckxh
eWVyQ29tcG9zaXRvciB0cmFja3MgdHdvIG5ldyBHcmFwaGljc0xheWVycyAtLSBtX2xheWVyRm9y
VG9wT3ZlcmhhbmdBcmVhIAorICAgICAgICBhbmQgbV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJl
YS4gVXBkYXRlIHRoZW0gd2hlbmV2ZXIgd2UgdXBkYXRlIHRoZSBzaGFkb3cgbGF5ZXIuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RMYXllclBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JUb3BP
dmVyaGFuZ0FyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1
cGRhdGVMYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXBvcnRNZW1vcnlVc2FnZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAoUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yKToKKwogMjAxMy0wMy0wNiAgUGhpbGlwcGUgTGlhcmQgIDxwbGlh
cmRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1ha2UgUnVsZURhdGEgc3VwcG9ydCB1cCB0byA4
MTkxIHNlbGVjdG9ycwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE0NTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUs
NyArMTc1LDExIEBAIF9fWk43V2ViQ29yZTExVVJMV2l0aERhdGFFUDZOU0RhdGFQNU5TVVIKIF9f
Wk43V2ViQ29yZTExbWVtb3J5Q2FjaGVFdgogX19aTjdXZWJDb3JlMTFzdGFydE9mV29yZEVSS05T
XzE1VmlzaWJsZVBvc2l0aW9uRU5TXzlFV29yZFNpZGVFCiBfX1pON1dlYkNvcmUxMXdyaXRlVG9G
aWxlRWlQS2NpCitfX1pOSzdXZWJDb3JlMTJDaHJvbWVDbGllbnQyMXdhbnRzVG9wT3ZlcmhhbmdJ
bWFnZUV2CiBfX1pON1dlYkNvcmUxMkNocm9tZUNsaWVudDIzcGFpbnRDdXN0b21PdmVyaGFuZ0Fy
ZWFFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN0ludFJlY3RFUzVfUzVfCitfX1pOSzdXZWJD
b3JlMTJDaHJvbWVDbGllbnQyNHdhbnRzQm90dG9tT3ZlcmhhbmdJbWFnZUV2CitfX1pON1dlYkNv
cmUxMkNocm9tZUNsaWVudDI1c2V0VXBUb3BPdmVyaGFuZ0FyZWFMYXllckVQTlNfMTNHcmFwaGlj
c0xheWVyRQorX19aTjdXZWJDb3JlMTJDaHJvbWVDbGllbnQyOHNldFVwQm90dG9tT3ZlcmhhbmdB
cmVhTGF5ZXJFUE5TXzEzR3JhcGhpY3NMYXllckUKICNpZiBFTkFCTEUoQ1NTM19DT05ESVRJT05B
TF9SVUxFUykKIF9fWk43V2ViQ29yZTEyRE9NV2luZG93Q1NTNmNyZWF0ZUV2CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAJKHJldmlzaW9uIDE0NTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU2LDYgKzU1NiwyNCBAQCBi
b29sIENocm9tZUNsaWVudDo6cGFpbnRDdXN0b21PdmVyaGFuZ0FyCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitib29sIENocm9tZUNsaWVudDo6d2FudHNUb3BPdmVyaGFuZ0ltYWdlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpzZXRVcFRvcE92
ZXJoYW5nQXJlYUxheWVyKEdyYXBoaWNzTGF5ZXIqKQoreworfQorCitib29sIENocm9tZUNsaWVu
dDo6d2FudHNCb3R0b21PdmVyaGFuZ0ltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpzZXRVcEJvdHRvbU92ZXJoYW5nQXJlYUxheWVyKEdy
YXBoaWNzTGF5ZXIqKQoreworfQorCiBib29sIENocm9tZTo6c2VsZWN0SXRlbVdyaXRpbmdEaXJl
Y3Rpb25Jc05hdHVyYWwoKQogewogICAgIHJldHVybiBtX2NsaWVudC0+c2VsZWN0SXRlbVdyaXRp
bmdEaXJlY3Rpb25Jc05hdHVyYWwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAkocmV2aXNpb24gMTQ1MDM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRDdXN0b21PdmVyaGFuZ0FyZWEoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0Jik7CiAKKyAgICB2aXJ0dWFs
IGJvb2wgd2FudHNUb3BPdmVyaGFuZ0ltYWdlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNl
dFVwVG9wT3ZlcmhhbmdBcmVhTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgYm9v
bCB3YW50c0JvdHRvbU92ZXJoYW5nSW1hZ2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VXBCb3R0b21PdmVyaGFuZ0FyZWFMYXllcihHcmFwaGljc0xheWVyKik7CisKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q29sb3JDaG9vc2VyPiBj
cmVhdGVDb2xvckNob29zZXIoQ29sb3JDaG9vc2VyQ2xpZW50KiwgY29uc3QgQ29sb3ImKSA9IDA7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxNDUwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4
MSw2ICsxNTgxLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVSb290TGEK
ICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5zZXRVcENvbnRlbnRTaGFkb3dM
YXllcihtX2NvbnRlbnRTaGFkb3dMYXllci5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CisKKyAg
ICBpZiAobV9sYXllckZvclRvcE92ZXJoYW5nQXJlYSB8fCAoIW1fcmVuZGVyVmlldy0+ZG9jdW1l
bnQoKS0+b3duZXJFbGVtZW50KCkgJiYgcGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPndhbnRz
VG9wT3ZlcmhhbmdJbWFnZSgpKSkKKyAgICAgICAgdXBkYXRlTGF5ZXJGb3JUb3BPdmVyaGFuZ0Fy
ZWEoKTsKKworICAgIGlmIChtX2xheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhIHx8ICghbV9yZW5k
ZXJWaWV3LT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSAmJiBwYWdlKCktPmNocm9tZSgpLT5j
bGllbnQoKS0+d2FudHNCb3R0b21PdmVyaGFuZ0ltYWdlKCkpKQorICAgICAgICB1cGRhdGVMYXll
ckZvckJvdHRvbU92ZXJoYW5nQXJlYSgpOwogI2VuZGlmCiB9CiAKQEAgLTI0MjMsNiArMjQyOSw0
MSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb250CiAKICAgICByZXR1
cm4gZmFsc2U7CiB9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckZv
clRvcE92ZXJoYW5nQXJlYSgpCit7CisgICAgQVNTRVJUKCFtX3JlbmRlclZpZXctPmRvY3VtZW50
KCktPm93bmVyRWxlbWVudCgpKTsKKyAgICBBU1NFUlQocGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50
KCktPndhbnRzVG9wT3ZlcmhhbmdJbWFnZSgpKTsKKworICAgIGlmICghbV9sYXllckZvclRvcE92
ZXJoYW5nQXJlYSkgeworICAgICAgICBtX2xheWVyRm9yVG9wT3ZlcmhhbmdBcmVhID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksIHRoaXMpOworI2lmbmRlZiBO
REVCVUcKKyAgICAgICAgbV9sYXllckZvclRvcE92ZXJoYW5nQXJlYS0+c2V0TmFtZSgidG9wIG92
ZXJoYW5nIGFyZWEiKTsKKyNlbmRpZgorICAgICAgICBtX3Njcm9sbExheWVyLT5hZGRDaGlsZEJl
bG93KG1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEuZ2V0KCksIG1fcm9vdENvbnRlbnRMYXllci5n
ZXQoKSk7CisgICAgfQorCisgICAgdGhpcy0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPnNl
dFVwVG9wT3ZlcmhhbmdBcmVhTGF5ZXIobV9sYXllckZvclRvcE92ZXJoYW5nQXJlYS5nZXQoKSk7
CisgICAgbV9sYXllckZvclRvcE92ZXJoYW5nQXJlYS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgw
LCAtbV9sYXllckZvclRvcE92ZXJoYW5nQXJlYS0+c2l6ZSgpLmhlaWdodCgpKSk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckZvckJvdHRvbU92ZXJoYW5nQXJl
YSgpCit7CisgICAgQVNTRVJUKCFtX3JlbmRlclZpZXctPmRvY3VtZW50KCktPm93bmVyRWxlbWVu
dCgpKTsKKyAgICBBU1NFUlQocGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPndhbnRzQm90dG9t
T3ZlcmhhbmdJbWFnZSgpKTsKKworICAgIGlmICghbV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJl
YSkgeworICAgICAgICBtX2xheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhID0gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksIHRoaXMpOworI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgbV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYS0+c2V0TmFtZSgiYm90dG9tIG92
ZXJoYW5nIGFyZWEiKTsKKyNlbmRpZgorICAgICAgICBtX3Njcm9sbExheWVyLT5hZGRDaGlsZEJl
bG93KG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEuZ2V0KCksIG1fcm9vdENvbnRlbnRMYXll
ci5nZXQoKSk7CisgICAgfQorCisgICAgdGhpcy0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCkt
PnNldFVwQm90dG9tT3ZlcmhhbmdBcmVhTGF5ZXIobV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJl
YS5nZXQoKSk7CisgICAgbV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYS0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludCgwLCBtX3Jvb3RDb250ZW50TGF5ZXItPnNpemUoKS5oZWlnaHQoKSkpOworfQor
CiAjZW5kaWYKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnZpZXdIYXNUcmFuc3BhcmVu
dEJhY2tncm91bmQoQ29sb3IqIGJhY2tncm91bmRDb2xvcikgY29uc3QKQEAgLTI0ODMsNiArMjUy
NCwyMiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlT3ZlcmZsCiAgICAgICAg
IG1fY29udGVudFNoYWRvd0xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgICAgIG1fY29u
dGVudFNoYWRvd0xheWVyID0gbnVsbHB0cjsKICAgICB9CisKKyAgICBpZiAoIW1fcmVuZGVyVmll
dy0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKHBhZ2UoKS0+Y2hy
b21lKCktPmNsaWVudCgpLT53YW50c1RvcE92ZXJoYW5nSW1hZ2UoKSAmJiAhbV9sYXllckZvclRv
cE92ZXJoYW5nQXJlYSkKKyAgICAgICAgICAgIHVwZGF0ZUxheWVyRm9yVG9wT3ZlcmhhbmdBcmVh
KCk7CisgICAgICAgIGVsc2UgaWYgKG1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEpIHsKKyAgICAg
ICAgICAgIG1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEtPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAg
ICAgICAgICAgIG1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEgPSBudWxscHRyOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT53YW50c0JvdHRvbU92
ZXJoYW5nSW1hZ2UoKSAmJiAhbV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYSkKKyAgICAgICAg
ICAgIHVwZGF0ZUxheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhKCk7CisgICAgICAgIGVsc2UgaWYg
KG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEpIHsKKyAgICAgICAgICAgIG1fbGF5ZXJGb3JC
b3R0b21PdmVyaGFuZ0FyZWEtPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgICAgIG1fbGF5
ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEgPSBudWxscHRyOworICAgICAgICB9CisgICAgfQogI2Vu
ZGlmCiAKICAgICBpZiAocmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSkgewpAQCAt
MzAyOCw2ICszMDg1LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcG9ydE1lbW9y
eQogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICBpbmZvLmFkZE1lbWJlcihtX2xheWVy
Rm9yT3ZlcmhhbmdBcmVhcywgImxheWVyRm9yT3ZlcmhhbmdBcmVhcyIpOwogICAgIGluZm8uYWRk
TWVtYmVyKG1fY29udGVudFNoYWRvd0xheWVyLCAiY29udGVudFNoYWRvd0xheWVyIik7CisgICAg
aW5mby5hZGRNZW1iZXIobV9sYXllckZvclRvcE92ZXJoYW5nQXJlYSwgImxheWVyRm9yVG9wT3Zl
cmhhbmdBcmVhIik7CisgICAgaW5mby5hZGRNZW1iZXIobV9sYXllckZvckJvdHRvbU92ZXJoYW5n
QXJlYSwgImxheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhIik7CiAjZW5kaWYKICAgICBpbmZvLmFk
ZE1lbWJlcihtX2xheWVyVXBkYXRlciwgImxheWVyVXBkYXRlciIpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNp
b24gMTQ1MDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDkgQEAgcHJpdmF0ZToKICNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgYm9vbCByZXF1aXJlc092ZXJoYW5nQXJlYXNMYXll
cigpIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNDb250ZW50U2hhZG93TGF5ZXIoKSBjb25zdDsK
KworICAgIHZvaWQgdXBkYXRlTGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEoKTsKKyAgICB2b2lkIHVw
ZGF0ZUxheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhKCk7CiAjZW5kaWYKIAogI2lmICFMT0dfRElT
QUJMRUQKQEAgLTQyMiw2ICs0MjUsOCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9sYXllckZvck92ZXJoYW5nQXJlYXM7
CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fY29udGVudFNoYWRvd0xheWVyOworICAgIE93
blB0cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9yVG9wT3ZlcmhhbmdBcmVhOworICAgIE93blB0
cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhOwogI2VuZGlmCiAK
ICAgICBPd25QdHI8R3JhcGhpY3NMYXllclVwZGF0ZXI+IG1fbGF5ZXJVcGRhdGVyOyAvLyBVcGRh
dGVzIHRpbGVkIGxheWVyIHZpc2libGUgYXJlYSBwZXJpb2RpY2FsbHkgd2hpbGUgYW5pbWF0aW9u
cyBhcmUgcnVubmluZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTAzNSkKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDEz
LTAzLTA2ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVkIEFQ
SSB0byBkcmF3IGN1c3RvbSBvdmVyaGFuZyBhcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE2NzkKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5n
LQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyOTE0MTU+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG5ldyBBUEkgaXMgV0tCdW5kbGVQYWdl
U2V0VG9wT3ZlcmhhbmdJbWFnZSgpIGFuZCAKKyAgICAgICAgV0tCdW5kbGVQYWdlU2V0Qm90dG9t
T3ZlcmhhbmdJbWFnZSgpLiBXaGVuIHRoZSBBUEkgaXMgY2FsbGVkLCBXZWJQYWdlIHN0b3JlIHRo
ZSAKKyAgICAgICAgaW1hZ2VzIGFuZCAgZm9yY2VzIGEgbGF5b3V0IHNvIHRoYXQgdGhleSB3aWxs
IGJlIGludGVncmF0ZWQgaW50byB0aGUgbGF5ZXIgdHJlZS4gCisgICAgICAgIFdoZW4gaXQgaXMg
cmVhZHksIFJlbmRlckxheWVyQ29tcG9zaXRvciB3aWxsIGNhbGwgdGhyb3VnaCB0aGUgQ2hyb21l
Q2xpZW50IHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcyBhbiBvdmVyaGFu
ZyBpbWFnZSwgYW5kIHRoZW4gaXQgd2lsbCB1c2UgdGhlIGNsaWVudCB0byAKKyAgICAgICAgZmls
bCBhIEdyYXBoaWNzTGF5ZXIgd2l0aCB0aGF0IGltYWdlLgorCisgICAgICAgICogV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdLQnVuZGxlUGFnZVNldFRv
cE92ZXJoYW5nSW1hZ2UpOgorICAgICAgICAoV0tCdW5kbGVQYWdlU2V0Qm90dG9tT3ZlcmhhbmdJ
bWFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L21hYy9XZWJDaHJvbWVDbGllbnRNYWMubW06IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojp3YW50c1RvcE92
ZXJoYW5nSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnNldFVwVG9w
T3ZlcmhhbmdBcmVhTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6Ondh
bnRzQm90dG9tT3ZlcmhhbmdJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVu
dDo6c2V0VXBCb3R0b21PdmVyaGFuZ0FyZWFMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRUb3BPdmVy
aGFuZ0ltYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Qm90dG9tT3ZlcmhhbmdJ
bWFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6dG9wT3ZlcmhhbmdJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OmJvdHRvbU92ZXJoYW5nSW1hZ2UpOgorCiAyMDEzLTAzLTA2ICBHeXV5b3VuZyBLaW0g
IDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBFbmFibGUg
aW50ZXJhY3RpdmUgZm9ybSB2YWxpZGF0aW9uIGZvciBlbWFpbCBhbmQgdXJsIGlucHV0IHR5cGUg
dmFsaWRhdGlvbgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ1MDM0KQorKysgU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NzksNiAr
NTc5LDcgQEAKIAkJOTM5MUYyQ0ExMjFCNjc5QTAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzkxRjI4NDEyMUIzOEY1MDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5t
bSAqLzsgfTsKIAkJOTM5MUYyQ0IxMjFCNjdBRDAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzOTFGMjgzMTIxQjM4RjUwMEVCRjdFOCAvKiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lmgg
Ki87IH07CiAJCTkzOUFFNzY2MTMxNkU5OUMwMEFFMDZBNiAvKiBXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5
QUU3NjUxMzE2RTk5QzAwQUUwNkE2IC8qIFdlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgKi87IH07
CisJCTkzRDFFQUI5MTZFODVBNDEwMDM1OERCOSAvKiBXZWJDaHJvbWVDbGllbnRNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0QxRUFCODE2RTg1
QTQxMDAzNThEQjkgLyogV2ViQ2hyb21lQ2xpZW50TWFjLm1tICovOyB9OwogCQk5M0ZDNjdCRDEy
RDNDQ0YyMDBBNjA2MTAgLyogRGVjb2RlckFkYXB0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGQzY3OUQxMkQzQ0M3NDAwQTYwNjEwIC8qIERl
Y29kZXJBZGFwdGVyLmNwcCAqLzsgfTsKIAkJOTNGQzY3QkUxMkQzQ0NGMjAwQTYwNjEwIC8qIERl
Y29kZXJBZGFwdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0ZDNjc5RTEyRDNDQzc0MDBBNjA2MTAgLyogRGVjb2RlckFkYXB0ZXIuaCAqLzsgfTsK
IAkJOTNGQzY3QkYxMkQzQ0NGMjAwQTYwNjEwIC8qIEVuY29kZXJBZGFwdGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRkM2NzlGMTJEM0NDNzQw
MEE2MDYxMCAvKiBFbmNvZGVyQWRhcHRlci5jcHAgKi87IH07CkBAIC0xOTk0LDYgKzE5OTUsNyBA
QAogCQk5MzkxRjI4MzEyMUIzOEY1MDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOTFGMjg0MTIxQjM4RjUw
MEVCRjdFOCAvKiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5QUU3NjUxMzE2RTk5QzAwQUUwNkE2IC8qIFdl
YkNvcmVBcmd1bWVudENvZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5M0QxRUFCODE2RTg1QTQxMDAzNThEQjkgLyogV2ViQ2hyb21lQ2xpZW50TWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ2hyb21lQ2xpZW50TWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0ZDNjc5RDEyRDNDQzc0MDBBNjA2
MTAgLyogRGVjb2RlckFkYXB0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRGVjb2RlckFkYXB0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0ZDNjc5RTEyRDNDQzc0MDBBNjA2MTAgLyogRGVjb2RlckFkYXB0ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjb2RlckFkYXB0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNGQzY3OUYxMkQzQ0M3NDAwQTYwNjEwIC8qIEVuY29kZXJBZGFwdGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVuY29kZXJBZGFwdGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQwNzcsNiArNDA3OSw3IEBACiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUNFREExMkRGMTUyQ0NBRTgwMEQ5
RTA4RCAvKiBXZWJBbHRlcm5hdGl2ZVRleHRDbGllbnQuY3BwICovLAorCQkJCTkzRDFFQUI4MTZF
ODVBNDEwMDM1OERCOSAvKiBXZWJDaHJvbWVDbGllbnRNYWMubW0gKi8sCiAJCQkJNTEwMjFFOUIx
MkIxNjc4ODAwNUMwMzNDIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50TWFjLm1tICovLAogCQkJCUM1
NTRGRkEyMTJFNEU4RUEwMDJGMjJDMCAvKiBXZWJEcmFnQ2xpZW50TWFjLm1tICovLAogCQkJCUM1
MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gKi8sCkBAIC02
ODMyLDYgKzY4MzUsNyBAQAogCQkJCUUxNzA4NzcwMTZENkNGRTUwMEY5OTIyNiAvKiBCbG9iUmVn
aXN0cmF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTRBOTU0OTE2RTAxNkE0MDA2
OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTE3OThDNzkxNkU2ODE4ODAwMjQwMTM5IC8qIE5ldHdvcmtCbG9iUmVnaXN0cnku
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNEMUVBQjkxNkU4NUE0MTAwMzU4REI5IC8qIFdlYkNo
cm9tZUNsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlLmNwcAkocmV2aXNpb24gMTQ1MDM0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDMsNiArMzAzLDE2IEBAIHZvaWQgV0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJsYXlX
aXQKICAgICB0b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdl
T3ZlcmxheVJlZiksIHRydWUpOwogfQogCit2b2lkIFdLQnVuZGxlUGFnZVNldFRvcE92ZXJoYW5n
SW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLSW1hZ2VSZWYgaW1hZ2UpCit7CisgICAgdG9J
bXBsKHBhZ2UpLT5zZXRUb3BPdmVyaGFuZ0ltYWdlKHRvSW1wbChpbWFnZSkpOworfQorCit2b2lk
IFdLQnVuZGxlUGFnZVNldEJvdHRvbU92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2Us
IFdLSW1hZ2VSZWYgaW1hZ2UpCit7CisgICAgdG9JbXBsKHBhZ2UpLT5zZXRCb3R0b21PdmVyaGFu
Z0ltYWdlKHRvSW1wbChpbWFnZSkpOworfQorCiBib29sIFdLQnVuZGxlUGFnZUhhc0xvY2FsRGF0
YUZvclVSTChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tVUkxSZWYgdXJsUmVmKQogewogICAg
IHJldHVybiB0b0ltcGwocGFnZVJlZiktPmhhc0xvY2FsRGF0YUZvclVSTChXZWJDb3JlOjpLVVJM
KFdlYkNvcmU6OktVUkwoKSwgdG9XVEZTdHJpbmcodXJsUmVmKSkpOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZS5oCShyZXZpc2lvbiAxNDUwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MjUsNiArNDI1LDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlVW5pbnN0YWxs
UGFnZQogV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlSW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFu
aW1hdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdl
T3ZlcmxheSk7CiBXS19FWFBPUlQgdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3Zlcmxh
eVdpdGhBbmltYXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlUGFnZU92ZXJsYXlS
ZWYgcGFnZU92ZXJsYXkpOwogCitXS19FWFBPUlQgdm9pZCBXS0J1bmRsZVBhZ2VTZXRUb3BPdmVy
aGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0ltYWdlUmVmIGltYWdlKTsKK1dLX0VY
UE9SVCB2b2lkIFdLQnVuZGxlUGFnZVNldEJvdHRvbU92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdl
UmVmIHBhZ2UsIFdLSW1hZ2VSZWYgaW1hZ2UpOworCiBXS19FWFBPUlQgYm9vbCBXS0J1bmRsZVBh
Z2VIYXNMb2NhbERhdGFGb3JVUkwoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHVybCk7
CiBXS19FWFBPUlQgYm9vbCBXS0J1bmRsZVBhZ2VDYW5IYW5kbGVSZXF1ZXN0KFdLVVJMUmVxdWVz
dFJlZiByZXF1ZXN0KTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiAxNDUw
MzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNiArMTUzLDExIEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOwogCisgICAgdmlydHVh
bCBib29sIHdhbnRzVG9wT3ZlcmhhbmdJbWFnZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRVcFRvcE92ZXJoYW5nQXJlYUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgd2FudHNCb3R0b21PdmVyaGFuZ0ltYWdlKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFVwQm90dG9tT3ZlcmhhbmdBcmVh
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIE9WRVJSSURFOworCiAjaWYgRU5BQkxFKElO
UFVUX1RZUEVfQ09MT1IpCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNvbG9yQ2hv
b3Nlcj4gY3JlYXRlQ29sb3JDaG9vc2VyKFdlYkNvcmU6OkNvbG9yQ2hvb3NlckNsaWVudCosIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgT1ZFUlJJREU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkNocm9tZUNsaWVudE1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21h
Yy9XZWJDaHJvbWVDbGllbnRNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJDaHJvbWVDbGllbnRNYWMubW0JKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIldlYkNocm9tZUNsaWVudC5oIgorCisjaW1wb3J0ICJXZWJGcmFtZS5oIgorI2lt
cG9ydCAiV2ViSW1hZ2UuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NMYXllci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50Ojp3YW50c1RvcE92ZXJoYW5nSW1hZ2Uo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UtPnRvcE92ZXJoYW5nSW1hZ2UoKTsKK30KKwor
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFVwVG9wT3ZlcmhhbmdBcmVhTGF5ZXIoR3JhcGhpY3NM
YXllciogbGF5ZXIpCit7CisgICAgQVNTRVJUKHdhbnRzVG9wT3ZlcmhhbmdJbWFnZSgpKTsKKwor
ICAgIFdlYkltYWdlKiBpbWFnZSA9IG1fcGFnZS0+dG9wT3ZlcmhhbmdJbWFnZSgpOworICAgIGxh
eWVyLT5zZXRTaXplKGltYWdlLT5zaXplKCkpOworICAgIAorICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBjZ0ltYWdlID0gaW1hZ2UtPmJpdG1hcCgpLT5tYWtlQ0dJbWFnZUNvcHkoKTsKKyAgICBs
YXllci0+cGxhdGZvcm1MYXllcigpLmNvbnRlbnRzID0gW1soaWQpY2dJbWFnZS5nZXQoKSByZXRh
aW5dIGF1dG9yZWxlYXNlXTsKK30KKworYm9vbCBXZWJDaHJvbWVDbGllbnQ6OndhbnRzQm90dG9t
T3ZlcmhhbmdJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS0+Ym90dG9tT3Zlcmhh
bmdJbWFnZSgpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0VXBCb3R0b21PdmVyaGFu
Z0FyZWFMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBBU1NFUlQod2FudHNCb3R0
b21PdmVyaGFuZ0ltYWdlKCkpOworCisgICAgV2ViSW1hZ2UqIGltYWdlID0gbV9wYWdlLT5ib3R0
b21PdmVyaGFuZ0ltYWdlKCk7CisgICAgbGF5ZXItPnNldFNpemUoaW1hZ2UtPnNpemUoKSk7CisK
KyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IGltYWdlLT5iaXRtYXAoKS0+bWFr
ZUNHSW1hZ2VDb3B5KCk7CisgICAgbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS5jb250ZW50cyA9IFtb
KGlkKWNnSW1hZ2UuZ2V0KCkgcmV0YWluXSBhdXRvcmVsZWFzZV07Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkocmV2aXNpb24gMTQ1MDM0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgyLDYgKzEzODIsMjYg
QEAgdm9pZCBXZWJQYWdlOjp1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlTwogICAgIG1fZHJhd2lu
Z0FyZWEtPmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c2V0
VG9wT3ZlcmhhbmdJbWFnZShQYXNzUmVmUHRyPFdlYkltYWdlPiBpbWFnZSkKK3sKKyAgICBtX3Rv
cE92ZXJoYW5nSW1hZ2UgPSBpbWFnZTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9t
YWluRnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAg
ICAgIHJldHVybjsKKyAgICBmcmFtZVZpZXctPmZvcmNlTGF5b3V0KCk7Cit9CisKK3ZvaWQgV2Vi
UGFnZTo6c2V0Qm90dG9tT3ZlcmhhbmdJbWFnZShQYXNzUmVmUHRyPFdlYkltYWdlPiBpbWFnZSkK
K3sKKyAgICBtX2JvdHRvbU92ZXJoYW5nSW1hZ2UgPSBpbWFnZTsKKworICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCFm
cmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBmcmFtZVZpZXctPmZvcmNlTGF5b3V0KCk7
Cit9CisKIHN0YXRpYyBJbWFnZU9wdGlvbnMgc25hcHNob3RPcHRpb25zVG9JbWFnZU9wdGlvbnMo
U25hcHNob3RPcHRpb25zIHNuYXBzaG90T3B0aW9ucykKIHsKICAgICB1bnNpZ25lZCBpbWFnZU9w
dGlvbnMgPSAwOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCShyZXZpc2lvbiAxNDUwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDExIEBAIHB1Ymxp
YzoKICAgICBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpOwogICAgIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOwogCisgICAgV2ViSW1hZ2UqIHRvcE92ZXJoYW5nSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX3RvcE92ZXJoYW5nSW1hZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFRvcE92
ZXJoYW5nSW1hZ2UoUGFzc1JlZlB0cjxXZWJJbWFnZT4pOworICAgIFdlYkltYWdlKiBib3R0b21P
dmVyaGFuZ0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b21PdmVyaGFuZ0ltYWdlLmdldCgp
OyB9CisgICAgdm9pZCBzZXRCb3R0b21PdmVyaGFuZ0ltYWdlKFBhc3NSZWZQdHI8V2ViSW1hZ2U+
KTsKKwogICAgIFBhc3NSZWZQdHI8V2ViSW1hZ2U+IHNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnMo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGRvdWJsZSBzY2FsZUZhY3RvciwgU25hcHNob3RPcHRp
b25zKTsKIAogICAgIHN0YXRpYyBjb25zdCBXZWJFdmVudCogY3VycmVudEV2ZW50KCk7CkBAIC05
NTgsNiArOTYzLDkgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGlu
Z0hhc2g+IG1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uczsKICAgICBXZWJDb3Jl
OjpDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKKworICAgIFJlZlB0cjxXZWJJbWFnZT4gbV90b3BP
dmVyaGFuZ0ltYWdlOworICAgIFJlZlB0cjxXZWJJbWFnZT4gbV9ib3R0b21PdmVyaGFuZ0ltYWdl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="212997"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="213004"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192093</attachid>
            <date>2013-03-07 15:25:25 -0800</date>
            <delta_ts>2013-03-07 16:35:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>13926</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTE0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEzLTAzLTA3ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVkIEFQSSB0byBkcmF3IGN1c3Rv
bSBvdmVyaGFuZyBhcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTE2NzkKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTMyOTE0MTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyB3aWxsIGFsbG93IGNsaWVudHMgdG8gcHV0IGN1c3RvbSBpbWFn
ZXMgaW50byB0aGUgdG9wIG9yIGJvdHRvbSBvdmVyaGFuZyBhcmVhLgorCisgICAgICAgIE5ldyBG
cmFtZVZpZXcgQVBJIHRha2VzIGEgYm9vbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNsaWVudCB3
YW50cyBhIHRvcC9ib3R0b20gCisgICAgICAgIG92ZXJoYW5nIGxheWVyLiBJZiB0aGUgYm9vbCBp
cyB0cnVlLCB0aGUgb3ZlcmhhbmcgbGF5ZXIgd2lsbCBiZSByZXR1cm5lZC4gCisgICAgICAgICog
V2ViQ29yZS5leHAuaW46CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRXYW50c0xheWVyRm9yVG9wT3ZlckhhbmdBcmVhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0V2FudHNMYXllckZvckJvdHRvbU92ZXJIYW5n
QXJlYSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKEZyYW1lVmlldyk6
CisKKyAgICAgICAgS2VlcCBtZW1iZXIgdmFyaWFibGVzIGZvciB0aGUgdG9wIGFuZCBib3R0b20g
b3ZlcmhhbmcgbGF5ZXJzLiBDcmVhdGUgdGhlbSBpZiAKKyAgICAgICAgbmVjZXNzYXJ5LCBhbmQg
dXBkYXRlIHRoZW0gaWYgdGhlIHJvb3QgbGF5ZXIgY2hhbmdlcy4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlUm9vdExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckZvclRvcE92ZXJoYW5nQXJlYSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyRm9y
Qm90dG9tT3ZlcmhhbmdBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKFJlbmRlckxheWVyQ29tcG9zaXRvcik6CisKIDIwMTMt
MDMtMDcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgRm9y
bURhdGEgc2hvdWxkIGFsbG93IHNldHRpbmcgZmlsZW5hbWUgdG8gZW1wdHkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNDUxMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTU0MSw2ICsxNTQxLDggQEAgX19aTks3V2ViQ29y
ZTlGcmFtZVZpZXcyMGlzU29mdHdhcmVSZW5kZQogX19aTks3V2ViQ29yZTlGcmFtZVZpZXcyM2Rv
Y3VtZW50QmFja2dyb3VuZENvbG9yRXYKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3Mjd3aW5kb3dD
bGlwUmVjdEZvckZyYW1lT3duZXJFUEtOU18yMUhUTUxGcmFtZU93bmVyRWxlbWVudEViCiBfX1pO
SzdXZWJDb3JlOUZyYW1lVmlldzI4aXNFbmNsb3NlZEluQ29tcG9zaXRpbmdMYXllckV2CitfX1pO
SzdXZWJDb3JlOUZyYW1lVmlldzMxc2V0V2FudHNMYXllckZvclRvcE92ZXJIYW5nQXJlYUViCitf
X1pOSzdXZWJDb3JlOUZyYW1lVmlldzM0c2V0V2FudHNMYXllckZvckJvdHRvbU92ZXJIYW5nQXJl
YUViCiBfX1pOSzdXZWJDb3JlOVBhZ2VDYWNoZTEwZnJhbWVDb3VudEV2CiBfX1pUVk43V2ViQ29y
ZTEyQ2hyb21lQ2xpZW50RQogX19aVFZON1dlYkNvcmUxNExvYWRlclN0cmF0ZWd5RQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTQ1MTA5KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjIsNiArODYyLDIy
IEBAIEdyYXBoaWNzTGF5ZXIqIEZyYW1lVmlldzo6bGF5ZXJGb3JPdmVyaGEKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS0+bGF5ZXJGb3JPdmVy
aGFuZ0FyZWFzKCk7CiB9CisKK0dyYXBoaWNzTGF5ZXIqIEZyYW1lVmlldzo6c2V0V2FudHNMYXll
ckZvclRvcE92ZXJIYW5nQXJlYShib29sIHdhbnRzTGF5ZXIpIGNvbnN0Cit7CisgICAgUmVuZGVy
VmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKTsKKyAgICBpZiAoIXJlbmRlclZp
ZXcpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiByZW5kZXJWaWV3LT5jb21wb3NpdG9y
KCktPnVwZGF0ZUxheWVyRm9yVG9wT3ZlcmhhbmdBcmVhKHdhbnRzTGF5ZXIpOworfQorCitHcmFw
aGljc0xheWVyKiBGcmFtZVZpZXc6OnNldFdhbnRzTGF5ZXJGb3JCb3R0b21PdmVySGFuZ0FyZWEo
Ym9vbCB3YW50c0xheWVyKSBjb25zdAoreworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0
aGlzLT5yZW5kZXJWaWV3KCk7CisgICAgaWYgKCFyZW5kZXJWaWV3KQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLT51cGRhdGVMYXllckZvckJv
dHRvbU92ZXJoYW5nQXJlYSh3YW50c0xheWVyKTsKK30KICNlbmRpZgogCiBib29sIEZyYW1lVmll
dzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0ZyYW1lKEZyYW1lKiByb290RnJhbWVGb3JG
bHVzaCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTQ1MTA5KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDYg
KzM5OSwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBP
VkVSUklERTsKIAorI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBHcmFwaGljc0xheWVy
KiBzZXRXYW50c0xheWVyRm9yVG9wT3ZlckhhbmdBcmVhKGJvb2wpIGNvbnN0OworICAgIEdyYXBo
aWNzTGF5ZXIqIHNldFdhbnRzTGF5ZXJGb3JCb3R0b21PdmVySGFuZ0FyZWEoYm9vbCkgY29uc3Q7
CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zh
c3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9T
Y3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
Q29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShy
ZXZpc2lvbiAxNDUxMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4Myw2ICsxNTgzLDkgQEAgdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RMYQogICAgICAgICAgICAgU2Nyb2xsYmFy
VGhlbWU6OnRoZW1lKCktPnNldFVwQ29udGVudFNoYWRvd0xheWVyKG1fY29udGVudFNoYWRvd0xh
eWVyLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHVwZGF0ZUxheWVyRm9yVG9wT3Zl
cmhhbmdBcmVhKG1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEpOworICAgIHVwZGF0ZUxheWVyRm9y
Qm90dG9tT3ZlcmhhbmdBcmVhKG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEpOwogI2VuZGlm
CiB9CiAKQEAgLTI0MjUsNiArMjQyOCw1OCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
cmVxdWlyZXNDb250CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CisKK0dyYXBoaWNzTGF5ZXIqIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEoYm9vbCB3
YW50c0xheWVyKQoreworICAgIGlmIChtX3JlbmRlclZpZXctPmRvY3VtZW50KCktPm93bmVyRWxl
bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghd2FudHNMYXllcikgeworICAg
ICAgICBpZiAobV9sYXllckZvclRvcE92ZXJoYW5nQXJlYSkgeworICAgICAgICAgICAgbV9sYXll
ckZvclRvcE92ZXJoYW5nQXJlYS0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgICAgICAgICAgbV9s
YXllckZvclRvcE92ZXJoYW5nQXJlYSA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFtX2xheWVyRm9yVG9wT3ZlcmhhbmdBcmVhKSB7Cisg
ICAgICAgIG1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUo
Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBt
X2xheWVyRm9yVG9wT3ZlcmhhbmdBcmVhLT5zZXROYW1lKCJ0b3Agb3ZlcmhhbmcgYXJlYSIpOwor
I2VuZGlmCisgICAgICAgIG1fc2Nyb2xsTGF5ZXItPmFkZENoaWxkQmVsb3cobV9sYXllckZvclRv
cE92ZXJoYW5nQXJlYS5nZXQoKSwgbV9yb290Q29udGVudExheWVyLmdldCgpKTsKKyAgICB9CisK
KyAgICBtX2xheWVyRm9yVG9wT3ZlcmhhbmdBcmVhLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
M0QoMCwgMSwgMCkpOworICAgIHJldHVybiBtX2xheWVyRm9yVG9wT3ZlcmhhbmdBcmVhLmdldCgp
OworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVy
Rm9yQm90dG9tT3ZlcmhhbmdBcmVhKGJvb2wgd2FudHNMYXllcikKK3sKKyAgICBpZiAobV9yZW5k
ZXJWaWV3LT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoIXdhbnRzTGF5ZXIpIHsKKyAgICAgICAgaWYgKG1fbGF5ZXJGb3JCb3R0b21PdmVy
aGFuZ0FyZWEpIHsKKyAgICAgICAgICAgIG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEtPnJl
bW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgICAgIG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0Fy
ZWEgPSBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IGlmICghbV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYSkgeworICAgICAgICBtX2xheWVyRm9y
Qm90dG9tT3ZlcmhhbmdBcmVhID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCksIHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgbV9sYXllckZvckJvdHRv
bU92ZXJoYW5nQXJlYS0+c2V0TmFtZSgiYm90dG9tIG92ZXJoYW5nIGFyZWEiKTsKKyNlbmRpZgor
ICAgICAgICBtX3Njcm9sbExheWVyLT5hZGRDaGlsZEJlbG93KG1fbGF5ZXJGb3JCb3R0b21PdmVy
aGFuZ0FyZWEuZ2V0KCksIG1fcm9vdENvbnRlbnRMYXllci5nZXQoKSk7CisgICAgfQorCisgICAg
bV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNE
KDAsIDAsIDApKTsKKyAgICBtX2xheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhLT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KDAsIG1fcm9vdENvbnRlbnRMYXllci0+c2l6ZSgpLmhlaWdodCgpKSk7Cisg
ICAgcmV0dXJuIG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEuZ2V0KCk7Cit9CisKICNlbmRp
ZgogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dmlld0hhc1RyYW5zcGFyZW50QmFja2dy
b3VuZChDb2xvciogYmFja2dyb3VuZENvbG9yKSBjb25zdApAQCAtMzAzMCw2ICszMDg1LDggQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcG9ydE1lbW9yeQogI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKICAgICBpbmZvLmFkZE1lbWJlcihtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcywg
ImxheWVyRm9yT3ZlcmhhbmdBcmVhcyIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fY29udGVudFNo
YWRvd0xheWVyLCAiY29udGVudFNoYWRvd0xheWVyIik7CisgICAgaW5mby5hZGRNZW1iZXIobV9s
YXllckZvclRvcE92ZXJoYW5nQXJlYSwgImxheWVyRm9yVG9wT3ZlcmhhbmdBcmVhIik7CisgICAg
aW5mby5hZGRNZW1iZXIobV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYSwgImxheWVyRm9yQm90
dG9tT3ZlcmhhbmdBcmVhIik7CiAjZW5kaWYKICAgICBpbmZvLmFkZE1lbWJlcihtX2xheWVyVXBk
YXRlciwgImxheWVyVXBkYXRlciIpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gMTQ1MTA5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTQsNiArMjU0LDkgQEAgcHVibGljOgogICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllckZvclNjcm9sbENvcm5lci5n
ZXQoKTsgfQogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICBHcmFwaGljc0xheWVyKiBs
YXllckZvck92ZXJoYW5nQXJlYXMoKSBjb25zdCB7IHJldHVybiBtX2xheWVyRm9yT3ZlcmhhbmdB
cmVhcy5nZXQoKTsgfQorCisgICAgR3JhcGhpY3NMYXllciogdXBkYXRlTGF5ZXJGb3JUb3BPdmVy
aGFuZ0FyZWEoYm9vbCB3YW50c0xheWVyKTsKKyAgICBHcmFwaGljc0xheWVyKiB1cGRhdGVMYXll
ckZvckJvdHRvbU92ZXJoYW5nQXJlYShib29sIHdhbnRzTGF5ZXIpOwogI2VuZGlmCiAKICAgICB2
b2lkIHVwZGF0ZVZpZXdwb3J0Q29uc3RyYWludFN0YXR1cyhSZW5kZXJMYXllciopOwpAQCAtNDIy
LDYgKzQyNSw4IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIE93
blB0cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhczsKICAgICBPd25QdHI8
R3JhcGhpY3NMYXllcj4gbV9jb250ZW50U2hhZG93TGF5ZXI7CisgICAgT3duUHRyPEdyYXBoaWNz
TGF5ZXI+IG1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWE7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5
ZXI+IG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWE7CiAjZW5kaWYKIAogICAgIE93blB0cjxH
cmFwaGljc0xheWVyVXBkYXRlcj4gbV9sYXllclVwZGF0ZXI7IC8vIFVwZGF0ZXMgdGlsZWQgbGF5
ZXIgdmlzaWJsZSBhcmVhIHBlcmlvZGljYWxseSB3aGlsZSBhbmltYXRpb25zIGFyZSBydW5uaW5n
LgpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ1MTQzKQorKysgU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTMtMDMtMDcgIEJldGgg
RGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIE5lZWQgQVBJIHRvIGRyYXcgY3Vz
dG9tIG92ZXJoYW5nIGFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMTY3OQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8xMzI5MTQxNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGUgbmV3IEFQSSBpcyBXS0J1bmRsZVBhZ2VTZXRUb3BPdmVyaGFu
Z0ltYWdlKCkgYW5kIAorICAgICAgICBXS0J1bmRsZVBhZ2VTZXRCb3R0b21PdmVyaGFuZ0ltYWdl
KCkuIFdoZW4gdGhlIEFQSSBpcyBjYWxsZWQsIFdlYlBhZ2Ugd2lsbCBnZXQgCisgICAgICAgIEdy
YXBoaWNzTGF5ZXJzIGZvciB0aGUgYXBwcm9wcmlhdGUgYXJlYSBmcm9tIEZyYW1lVmlldywgYW5k
IHRoZW4gc2V0IHRoZSBpbWFnZSBhcyAKKyAgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXll
ci4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlLmNwcDoKKyAgICAgICAgKFdLQnVuZGxlUGFnZVNldFRvcE92ZXJoYW5nSW1hZ2UpOgorICAg
ICAgICAoV0tCdW5kbGVQYWdlU2V0Qm90dG9tT3ZlcmhhbmdJbWFnZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAoV2ViUGFnZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpzZXRUb3BPdmVyaGFuZ0ltYWdlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldEJvdHRvbU92ZXJoYW5nSW1hZ2UpOgorCiAyMDEzLTAz
LTA3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
IGEgZGlkRm9jdXNUZXh0RmllbGQgY2FsbGJhY2sgdG8gdGhlIGluamVjdGVkIGJ1bmRsZSBmb3Jt
IGNsaWVudApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAkocmV2aXNpb24gMTQ1
MTA5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsNiArMzAzLDI2IEBAIHZvaWQg
V0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJsYXlXaXQKICAgICB0b0ltcGwocGFnZVJlZikt
PnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIHRydWUpOwogfQog
Cit2b2lkIFdLQnVuZGxlUGFnZVNldFRvcE92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLSW1hZ2VSZWYgaW1hZ2UpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHRvSW1wbChw
YWdlKS0+c2V0VG9wT3ZlcmhhbmdJbWFnZSh0b0ltcGwoaW1hZ2UpKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHBhZ2UpOworICAgIFVOVVNFRF9QQVJBTShpbWFnZSk7CisjZW5kaWYKK30KKwor
dm9pZCBXS0J1bmRsZVBhZ2VTZXRCb3R0b21PdmVyaGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBw
YWdlLCBXS0ltYWdlUmVmIGltYWdlKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB0b0ltcGwo
cGFnZSktPnNldEJvdHRvbU92ZXJoYW5nSW1hZ2UodG9JbXBsKGltYWdlKSk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShwYWdlKTsKKyAgICBVTlVTRURfUEFSQU0oaW1hZ2UpOworI2VuZGlmCit9
CisKIGJvb2wgV0tCdW5kbGVQYWdlSGFzTG9jYWxEYXRhRm9yVVJMKFdLQnVuZGxlUGFnZVJlZiBw
YWdlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7CiAgICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+
aGFzTG9jYWxEYXRhRm9yVVJMKFdlYkNvcmU6OktVUkwoV2ViQ29yZTo6S1VSTCgpLCB0b1dURlN0
cmluZyh1cmxSZWYpKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmgJKHJldmlzaW9u
IDE0NTEwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw2ICs0MjUsOSBAQCBXS19F
WFBPUlQgdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlCiBXS19FWFBPUlQgdm9pZCBXS0J1
bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBw
YWdlLCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5KTsKIFdLX0VYUE9SVCB2b2lk
IFdLQnVuZGxlUGFnZVVuaW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbihXS0J1bmRsZVBh
Z2VSZWYgcGFnZSwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheSk7CiAKK1dLX0VY
UE9SVCB2b2lkIFdLQnVuZGxlUGFnZVNldFRvcE92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLSW1hZ2VSZWYgaW1hZ2UpOworV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlU2V0
Qm90dG9tT3ZlcmhhbmdJbWFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tJbWFnZVJlZiBpbWFn
ZSk7CisKIFdLX0VYUE9SVCBib29sIFdLQnVuZGxlUGFnZUhhc0xvY2FsRGF0YUZvclVSTChXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgdXJsKTsKIFdLX0VYUE9SVCBib29sIFdLQnVuZGxl
UGFnZUNhbkhhbmRsZVJlcXVlc3QoV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QpOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE0
NTEwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1NCw2ICszNTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVQ
bHVnaW5zQWN0aXZlQW5kRm9jdXNlZFN0YXRlKCk7CiAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV93aW5k
b3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXM7IH0KICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3RnJh
bWVJbldpbmRvd0Nvb3JkaW5hdGVzOyB9CisKKyAgICB2b2lkIHNldFRvcE92ZXJoYW5nSW1hZ2Uo
UGFzc1JlZlB0cjxXZWJJbWFnZT4pOworICAgIHZvaWQgc2V0Qm90dG9tT3ZlcmhhbmdJbWFnZShQ
YXNzUmVmUHRyPFdlYkltYWdlPik7CiAjZW5kaWYKIAogICAgIGJvb2wgd2luZG93SXNGb2N1c2Vk
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAxNDUxMDkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbXBvcnQgIldlYkV2ZW50LmgiCiAjaW1wb3J0ICJXZWJFdmVudENv
bnZlcnNpb24uaCIKICNpbXBvcnQgIldlYkZyYW1lLmgiCisjaW1wb3J0ICJXZWJJbWFnZS5oIgog
I2ltcG9ydCAiV2ViSW5zcGVjdG9yLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5o
IgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNTdG9yZS5oIgpAQCAtNzgxLDYgKzc4MiwzOSBAQCB2
b2lkIFdlYlBhZ2U6OnNldExheWVySG9zdGluZ01vZGUoTGF5ZXJICiAgICAgICAgICgqaXQpLT5z
ZXRMYXllckhvc3RpbmdNb2RlKGxheWVySG9zdGluZ01vZGUpOwogfQogCit2b2lkIFdlYlBhZ2U6
OnNldFRvcE92ZXJoYW5nSW1hZ2UoUGFzc1JlZlB0cjxXZWJJbWFnZT4gaW1hZ2UpCit7CisgICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKTsK
KyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBmcmFtZVZpZXctPnNldFdhbnRzTGF5ZXJGb3JUb3BPdmVySGFuZ0FyZWEoaW1h
Z2UuZ2V0KCkpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVy
LT5zZXRTaXplKGltYWdlLT5zaXplKCkpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KDAsIC1pbWFnZS0+c2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY2dJbWFnZSA9IGltYWdlLT5iaXRtYXAoKS0+bWFrZUNHSW1hZ2VDb3B5KCk7CisgICAg
bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS5jb250ZW50cyA9KGlkKWNnSW1hZ2UuZ2V0KCk7Cit9CisK
K3ZvaWQgV2ViUGFnZTo6c2V0Qm90dG9tT3ZlcmhhbmdJbWFnZShQYXNzUmVmUHRyPFdlYkltYWdl
PiBpbWFnZSkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fbWFpbkZyYW1lLT5jb3Jl
RnJhbWUoKS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisK
KyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGZyYW1lVmlldy0+c2V0V2FudHNMYXllckZvckJv
dHRvbU92ZXJIYW5nQXJlYShpbWFnZS5nZXQoKSk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbGF5ZXItPnNldFNpemUoaW1hZ2UtPnNpemUoKSk7CisgICAgCisgICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBpbWFnZS0+Yml0bWFwKCktPm1ha2VDR0lt
YWdlQ29weSgpOworICAgIGxheWVyLT5wbGF0Zm9ybUxheWVyKCkuY29udGVudHMgPShpZCljZ0lt
YWdlLmdldCgpOworfQorCiB2b2lkIFdlYlBhZ2U6OmNvbXB1dGVQYWdlc0ZvclByaW50aW5nUERG
RG9jdW1lbnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIFZl
Y3RvcjxJbnRSZWN0PiYgcmVzdWx0UGFnZVJlY3RzKQogewogICAgIEFTU0VSVChyZXN1bHRQYWdl
UmVjdHMuaXNFbXB0eSgpKTsK
</data>
<flag name="review"
          id="213219"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>