<?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>72921</bug_id>
          
          <creation_ts>2011-11-21 17:33:48 -0800</creation_ts>
          <short_desc>[chromium] Support Core Animation plugins in compositor</short_desc>
          <delta_ts>2011-11-22 18:02:09 -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>Plug-ins</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>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>senorblanco</cc>
    
    <cc>thakis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>507330</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-21 17:33:48 -0800</bug_when>
    <thetext>In http://crbug.com/38967 it is desired to render Mac plugins using the Core Animation drawing model via the compositor rather than the current direct-to-screen rendering path. In order to support this, a few changes are needed:

  - The renderer needs to be able to transmit the IOSurface ID and its parameters to the WebPluginContainer.
  - The compositor needs support for ARB_texture_rectangle textures, since that is the only type compatible with IOSurfaces.
  - The compositor needs access to an entry point binding the IOSurface to a texture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507348</commentid>
    <comment_count>1</comment_count>
      <attachid>116163</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-21 18:20:46 -0800</bug_when>
    <thetext>Created attachment 116163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507350</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-21 18:25:18 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507661</commentid>
    <comment_count>3</comment_count>
      <attachid>116163</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-11-22 10:10:30 -0800</bug_when>
    <thetext>Comment on attachment 116163
Patch

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

Comments for WebKit API changes only:

&gt; Source/WebKit/chromium/public/WebPluginContainer.h:68
&gt; +    virtual void acceleratedPluginAllocatedIOSurface(int width,

how about naming it something shorter, like: didAllocateIOSurface.  do you want to use WebSize for the width/height params?  (doesn&apos;t matter)

given that this method is called instead of setBackingTextureId, perhaps we should give this function a name that looks similar.
setBackingIOSurfaceId.

should we consider renaming commitBackingTexture since it also gets called when there isn&apos;t a backing texture but an IOSurface instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507771</commentid>
    <comment_count>4</comment_count>
      <attachid>116163</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-11-22 12:51:37 -0800</bug_when>
    <thetext>Comment on attachment 116163
Patch

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

Will wait on Nat for approval of the compositor changes.

&gt; Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp:314
&gt; +String FragmentShaderRGBATexRectFlipAlpha::getShaderString() const

Nit:  To make it clear that it&apos;s Y being flipped, not alpha, perhaps this should be called TexRectFlipYAlpha or TexRectYFlipAlpha or (my preference)  TexRectAlphaFlipY.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507774</commentid>
    <comment_count>5</comment_count>
      <attachid>116163</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-22 13:00:30 -0800</bug_when>
    <thetext>Comment on attachment 116163
Patch

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

Cool. Comments about threaded compositing mode?

/me is really sad at the messy state of affairs for multiprocess surface sharing. We have a different solution for every platform and its a nightmare. I really wish we could have someone try to take what Daneil started to try to create, which was a generic mechanism, and get it landed.

&gt; Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:99
&gt; +    pluginLayer-&gt;setIOSurfaceProperties(m_ioSurfaceWidth, m_ioSurfaceHeight, m_ioSurfaceId);

That this is not 2-buffered means we will see corruption in threaded compositing mode. Is that okay?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507798</commentid>
    <comment_count>6</comment_count>
      <attachid>116163</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-22 13:40:41 -0800</bug_when>
    <thetext>Comment on attachment 116163
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp:314
&gt;&gt; +String FragmentShaderRGBATexRectFlipAlpha::getShaderString() const
&gt; 
&gt; Nit:  To make it clear that it&apos;s Y being flipped, not alpha, perhaps this should be called TexRectFlipYAlpha or TexRectYFlipAlpha or (my preference)  TexRectAlphaFlipY.

Here I&apos;m just following the existing naming convention for the other shaders -- e.g., FragmentShaderRGBATexFlipAlpha. I&apos;m happy to rename them all, but in a subsequent patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507803</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-22 13:45:58 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 116163 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116163&amp;action=review
&gt; 
&gt; Cool. Comments about threaded compositing mode?
&gt; 
&gt; /me is really sad at the messy state of affairs for multiprocess surface sharing. We have a different solution for every platform and its a nightmare. I really wish we could have someone try to take what Daneil started to try to create, which was a generic mechanism, and get it landed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:99
&gt; &gt; +    pluginLayer-&gt;setIOSurfaceProperties(m_ioSurfaceWidth, m_ioSurfaceHeight, m_ioSurfaceId);
&gt; 
&gt; That this is not 2-buffered means we will see corruption in threaded compositing mode. Is that okay?

IOSurfaces seem to be implicitly double-buffered between processes. We haven&apos;t ever seen tearing or incomplete rendering results when using them for displaying the compositor&apos;s output. I am pretty sure the usage here is OK, and that if there were a problem it would already be manifesting in the single-threaded compositor.

There is a problem with occasional display of garbage during live resizing of plugins which I haven&apos;t yet been able to completely solve, despite several attempts. It&apos;s a rare issue so I&apos;m leaving it for subsequent work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507818</commentid>
    <comment_count>8</comment_count>
      <attachid>116163</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-11-22 14:30:23 -0800</bug_when>
    <thetext>Comment on attachment 116163
Patch

I don&apos;t see any major objections from other reviewers, so r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507821</commentid>
    <comment_count>9</comment_count>
      <attachid>116277</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-22 14:42:00 -0800</bug_when>
    <thetext>Created attachment 116277
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507823</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-22 14:42:38 -0800</bug_when>
    <thetext>Renamed acceleratedPluginAllocatedIOSurface to setBackingIOSurfaceId based on fishd&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507829</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-22 14:57:48 -0800</bug_when>
    <thetext>Submitting to cq assuming that senorblanco&apos;s r+ on previous patch carries over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507855</commentid>
    <comment_count>12</comment_count>
      <attachid>116277</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-11-22 16:06:49 -0800</bug_when>
    <thetext>Comment on attachment 116277
Patch

I don&apos;t think it does carry over.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507887</commentid>
    <comment_count>13</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-22 17:59:37 -0800</bug_when>
    <thetext>The commit queue is stuck for reasons orthogonal to this patch so I&apos;m going to land it by hand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507888</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-22 18:01:16 -0800</bug_when>
    <thetext>Committed r101035: &lt;http://trac.webkit.org/changeset/101035&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116163</attachid>
            <date>2011-11-21 18:20:46 -0800</date>
            <delta_ts>2011-11-22 14:41:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72921-20111121182045.patch</filename>
            <type>text/plain</type>
            <size>33323</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDk3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDExLTExLTIxICBLZW5uZXRo
IFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFN1cHBvcnQg
Q29yZSBBbmltYXRpb24gcGx1Z2lucyBpbiBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkyMQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgdG8gUGx1Z2luTGF5ZXJD
aHJvbWl1bSBhbmQgQ0NQbHVnaW5MYXllckltcGwgZm9yCisgICAgICAgIHVzaW5nIGFuIElPU3Vy
ZmFjZSBhcyB0aGUgYmFja2luZyBzdG9yZSBmb3IgYSBwbHVnaW4uIEFkZGVkIG1pbmltYWwKKyAg
ICAgICAgQVJCX3RleHR1cmVfcmVjdGFuZ2xlIHN1cHBvcnQgdG8gRXh0ZW5zaW9uczNELmggYW5k
IGEgQ2hyb21pdW0tCisgICAgICAgIHNwZWNpZmljIGV4dGVuc2lvbiBmb3IgYmluZGluZyBhbiBJ
T1N1cmZhY2UgdG8gYSB0ZXh0dXJlLgorCisgICAgICAgIFRoZXNlIGNoYW5nZXMgdGhlbXNlbHZl
cyBkbyBub3QgaGF2ZSBhbnkgZWZmZWN0LiBBIGZvbGxvdy1vbgorICAgICAgICBDaHJvbWl1bSBD
TCB3aWxsIG1ha2UgdGhlIHN3aXRjaCB0byB0aGlzIG5ldyBjb2RlIHBhdGguCisKKyAgICAgICAg
VGVzdGVkIG1hbnVhbGx5IGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgQ2hyb21pdW0gc2lkZSBj
aGFuZ2VzOworICAgICAgICBDaHJvbWl1bSdzIER1bXBSZW5kZXJUcmVlIHBvcnQgZG9lcyBub3Qg
c3VwcG9ydCBDb3JlIEFuaW1hdGlvbgorICAgICAgICBwbHVnaW5zLiBSYW4gdmlkZW8gYW5kIFN0
YWdlM0QgaW4gRmxhc2gsIGFuZCBVbml0eSAzRCBjb250ZW50LCB0bworICAgICAgICB2ZXJpZnku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclRl
eFJlY3RQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
cGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpzZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmdldElPU3VyZmFjZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0RmxpcEFs
cGhhOjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRTaGFkZXJS
R0JBVGV4UmVjdEFscGhhOjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwOgorICAgICAgICAoUGx1Z2lu
UHJvZ3JhbUJpbmRpbmc6OlRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGluZzo6c2V0KToKKyAg
ICAgICAgKFBsdWdpblByb2dyYW1CaW5kaW5nOjpUZXhUcmFuc2Zvcm1QbHVnaW5Qcm9ncmFtQmlu
ZGluZzo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpDQ1BsdWdp
bkxheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6fkNDUGx1
Z2luTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpzZXRJT1N1cmZhY2VQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpjbGVhbnVwUmVz
b3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdp
bkxheWVySW1wbC5oOgorCiAyMDExLTExLTIxICBSYWtlc2ggS04gIDxyYWtlc2gua25AbW90b3Jv
bGEuY29tPgogCiAgICAgICAgIE5lZWQgc3VwcG9ydCBmb3IgZGlybmFtZSBhdHRyaWJ1dGUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5o
CShyZXZpc2lvbiAxMDA5NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9F
eHRlbnNpb25zM0QuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTAgQEAgcHVibGljOgog
ICAgIC8vICAgR0xfT0VTX3JnYjhfcmdiYTgKICAgICAvLyAgIEdMX09FU192ZXJ0ZXhfYXJyYXlf
b2JqZWN0CiAgICAgLy8gICBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UKKyAgICAv
LyAgIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSAob25seSB0aGUgc3Vic2V0IHJlcXVpcmVkIHRv
CisgICAgLy8gICAgIGltcGxlbWVudCBJT1N1cmZhY2UgYmluZGluZzsgaXQncyByZWNvbW1lbmRl
ZCB0byBzdXBwb3J0CisgICAgLy8gICAgIHRoaXMgb25seSBvbiBNYWMgT1MgWCB0byBsaW1pdCB0
aGUgYW1vdW50IG9mIGNvZGUgZGVwZW5kZW50CisgICAgLy8gICAgIG9uIHRoaXMgZXh0ZW5zaW9u
KQogCiAgICAgLy8gVGFrZXMgZnVsbCBuYW1lIG9mIGV4dGVuc2lvbjsgZm9yIGV4YW1wbGUsCiAg
ICAgLy8gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIuCkBAIC0xMDcsNiArMTExLDEw
IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3Vy
Y2UKICAgICAgICAgVFJBTlNMQVRFRF9TSEFERVJfU09VUkNFX0xFTkdUSF9BTkdMRSA9IDB4OTNB
MCwKKworICAgICAgICAvLyBHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUKKyAgICAgICAgVEVYVFVS
RV9SRUNUQU5HTEVfQVJCID0gIDB4ODRGNSwKKyAgICAgICAgVEVYVFVSRV9CSU5ESU5HX1JFQ1RB
TkdMRV9BUkIgPSAweDg0RjYsCiAgICAgfTsKIAogICAgIC8vIEdMX0FSQl9yb2J1c3RuZXNzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25z
M0RDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgJKHJldmlzaW9uIDEwMDk2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENo
cm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgIC8v
ICAgR0xfQ0hST01JVU1fc3dhcGJ1ZmZlcnNfY29tcGxldGVfY2FsbGJhY2sKICAgICAvLyAgIEdM
X0NIUk9NSVVNX3JhdGVfbGltaXRfb2Zmc2NyZWVuX2NvbnRleHQKICAgICAvLyAgIEdMX0NIUk9N
SVVNX3BhaW50X2ZyYW1lYnVmZmVyX2NhbnZhcworICAgIC8vICAgR0xfQ0hST01JVU1faW9zdXJm
YWNlIChNYWMgT1MgWCBzcGVjaWZpYykKIAogICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKQEAgLTkxLDYgKzkyLDEx
IEBAIHB1YmxpYzoKICAgICAvLyBHTF9DSFJPTUlVTV9wYWludF9mcmFtZWJ1ZmZlcl9jYW52YXMK
ICAgICB2b2lkIHBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhpbnQgZnJhbWVidWZmZXIsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBJbWFnZUJ1ZmZlciopOwog
CisgICAgLy8gR0xfQ0hST01JVU1faW9zdXJmYWNlCisgICAgLy8gVG8gYXZvaWQgbmVlZGluZyB0
byBleHBvc2UgZXh0cmFuZW91cyBlbnVtcywgYXNzdW1lcyBpbnRlcm5hbCBmb3JtYXQKKyAgICAv
LyBSR0JBLCBmb3JtYXQgQkdSQSwgYW5kIHR5cGUgVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLgor
ICAgIHZvaWQgdGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNKHVuc2lnbmVkIHRhcmdldCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBpb1N1cmZhY2VJZCwgdW5zaWduZWQgcGxhbmUp
OworCiBwcml2YXRlOgogICAgIC8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBzdHJpY3Rs
eSBvd25lZCBieSB0aGUgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gYW5kIGRvIG5v
dAogICAgIC8vIG5lZWQgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IGFueSBvdGhlciBjb2RlLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMDA5Njcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDEyIEBAIGJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKICAgICBpZiAobV9jYXBhYmlsaXRp
ZXMudXNpbmdTZXRWaXNpYmlsaXR5KQogICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVk
KCJHTF9DSFJPTUlVTV9zZXRfdmlzaWJpbGl0eSIpOwogCisgICAgaWYgKGV4dGVuc2lvbnMtPnN1
cHBvcnRzKCJHTF9DSFJPTUlVTV9pb3N1cmZhY2UiKSkgeworICAgICAgICBBU1NFUlQoZXh0ZW5z
aW9ucy0+c3VwcG9ydHMoIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKTsKKyAgICAgICAgZXh0
ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIik7CisgICAg
ICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2lvc3VyZmFjZSIpOwor
ICAgIH0KKwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX2NhcGFiaWxpdGllcy5tYXhU
ZXh0dXJlU2l6ZSkpOwogICAgIG1fY2FwYWJpbGl0aWVzLmJlc3RUZXh0dXJlRm9ybWF0ID0gUGxh
dGZvcm1Db2xvcjo6YmVzdFRleHR1cmVGb3JtYXQobV9jb250ZXh0LmdldCgpKTsKIApAQCAtODI2
LDYgKzgzMiwyOCBAQCBjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbUZsaXAqIExhCiAg
ICAgcmV0dXJuIG1fcGx1Z2luTGF5ZXJQcm9ncmFtRmxpcC5nZXQoKTsKIH0KIAorY29uc3QgQ0NQ
bHVnaW5MYXllckltcGw6OlRleFJlY3RQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBs
dWdpbkxheWVyVGV4UmVjdFByb2dyYW0oKQoreworICAgIGlmICghbV9wbHVnaW5MYXllclRleFJl
Y3RQcm9ncmFtKQorICAgICAgICBtX3BsdWdpbkxheWVyVGV4UmVjdFByb2dyYW0gPSBhZG9wdFB0
cihuZXcgQ0NQbHVnaW5MYXllckltcGw6OlRleFJlY3RQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkp
OworICAgIGlmICghbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7
CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnBsdWdpbkxheWVy
VGV4UmVjdFByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9wbHVnaW5M
YXllclRleFJlY3RQcm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgfQor
ICAgIHJldHVybiBtX3BsdWdpbkxheWVyVGV4UmVjdFByb2dyYW0uZ2V0KCk7Cit9CisKK2NvbnN0
IENDUGx1Z2luTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXAqIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAoKQoreworICAgIGlmICghbV9wbHVn
aW5MYXllclRleFJlY3RQcm9ncmFtRmxpcCkKKyAgICAgICAgbV9wbHVnaW5MYXllclRleFJlY3RQ
cm9ncmFtRmxpcCA9IGFkb3B0UHRyKG5ldyBDQ1BsdWdpbkxheWVySW1wbDo6VGV4UmVjdFByb2dy
YW1GbGlwKG1fY29udGV4dC5nZXQoKSkpOworICAgIGlmICghbV9wbHVnaW5MYXllclRleFJlY3RQ
cm9ncmFtRmxpcC0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcDo6aW5pdGlhbGl6
ZSIsIHRoaXMsIDApOworICAgICAgICBtX3BsdWdpbkxheWVyVGV4UmVjdFByb2dyYW1GbGlwLT5p
bml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgfQorICAgIHJldHVybiBtX3BsdWdpbkxh
eWVyVGV4UmVjdFByb2dyYW1GbGlwLmdldCgpOworfQorCiBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpSR0JBUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVyUkdCQVByb2dy
YW0oKQogewogICAgIGlmICghbV92aWRlb0xheWVyUkdCQVByb2dyYW0pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24gMTAwOTY3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyOCw2ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ0ND
YW52YXNMYXllckltcGw6OlByb2dyYW0qIGNhbnZhc0xheWVyUHJvZ3JhbSgpOwogICAgIGNvbnN0
IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwbHVnaW5MYXllclByb2dyYW0oKTsKICAgICBj
b25zdCBDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbUZsaXAqIHBsdWdpbkxheWVyUHJvZ3JhbUZs
aXAoKTsKKyAgICBjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6VGV4UmVjdFByb2dyYW0qIHBsdWdp
bkxheWVyVGV4UmVjdFByb2dyYW0oKTsKKyAgICBjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6VGV4
UmVjdFByb2dyYW1GbGlwKiBwbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcCgpOwogICAgIGNv
bnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVyUkdCQVByb2dyYW0o
KTsKICAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtKiB2aWRlb0xheWVyWVVW
UHJvZ3JhbSgpOwogCkBAIC0yMTUsNiArMjE3LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8Q0ND
YW52YXNMYXllckltcGw6OlByb2dyYW0+IG1fY2FudmFzTGF5ZXJQcm9ncmFtOwogICAgIE93blB0
cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbT4gbV9wbHVnaW5MYXllclByb2dyYW07CiAgICAg
T3duUHRyPENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtRmxpcD4gbV9wbHVnaW5MYXllclByb2dy
YW1GbGlwOworICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6VGV4UmVjdFByb2dyYW0+IG1f
cGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NQbHVnaW5MYXllckltcGw6
OlRleFJlY3RQcm9ncmFtRmxpcD4gbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcDsKICAg
ICBPd25QdHI8Q0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlTWFz
a1Byb2dyYW07CiAgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbT4gbV9yZW5kZXJT
dXJmYWNlUHJvZ3JhbTsKICAgICBPd25QdHI8Q0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbUFB
PiBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5
ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMDk2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw2ICs0Niw5IEBAIFBsdWdpbkxheWVyQ2hyb21pdW06OlBsdWdpbkxheWVyQ2hy
b21pdW0KICAgICAsIG1fdGV4dHVyZUlkKDApCiAgICAgLCBtX2ZsaXBwZWQodHJ1ZSkKICAgICAs
IG1fdXZSZWN0KDAsIDAsIDEsIDEpCisgICAgLCBtX2lvU3VyZmFjZVdpZHRoKDApCisgICAgLCBt
X2lvU3VyZmFjZUhlaWdodCgwKQorICAgICwgbV9pb1N1cmZhY2VJZCgwKQogewogfQogCkBAIC03
Miw2ICs3NSwxOSBAQCB2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnNldFVWUmVjdChjb25zCiAg
ICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAordm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpzZXRJ
T1N1cmZhY2VQcm9wZXJ0aWVzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgaW9TdXJm
YWNlSWQpCit7CisgICAgbV9pb1N1cmZhY2VXaWR0aCA9IHdpZHRoOworICAgIG1faW9TdXJmYWNl
SGVpZ2h0ID0gaGVpZ2h0OworICAgIG1faW9TdXJmYWNlSWQgPSBpb1N1cmZhY2VJZDsKKyAgICBz
ZXROZWVkc0NvbW1pdCgpOworfQorCit1aW50MzJfdCBQbHVnaW5MYXllckNocm9taXVtOjpnZXRJ
T1N1cmZhY2VJZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW9TdXJmYWNlSWQ7Cit9CisKIHZv
aWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5
ZXIpCiB7CiAgICAgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhsYXllcik7CkBAIC04
MCw2ICs5Niw3IEBAIHZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXMKICAg
ICBwbHVnaW5MYXllci0+c2V0VGV4dHVyZUlkKG1fdGV4dHVyZUlkKTsKICAgICBwbHVnaW5MYXll
ci0+c2V0RmxpcHBlZChtX2ZsaXBwZWQpOwogICAgIHBsdWdpbkxheWVyLT5zZXRVVlJlY3QobV91
dlJlY3QpOworICAgIHBsdWdpbkxheWVyLT5zZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKG1faW9TdXJm
YWNlV2lkdGgsIG1faW9TdXJmYWNlSGVpZ2h0LCBtX2lvU3VyZmFjZUlkKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJD
aHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gMTAwOTY3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKIAorICAgIC8v
IENvZGUgcGF0aCBmb3IgcGx1Z2lucyB3aGljaCBzdXBwbHkgdGhlaXIgb3duIHRleHR1cmUgSUQu
CiAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKTsKICAgICB1bnNpZ25l
ZCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQogICAgIHZvaWQgc2V0
RmxpcHBlZChib29sKTsKQEAgLTQ4LDYgKzQ5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVW
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKICAgICBjb25zdCBGbG9hdFJlY3QmIHV2UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXZSZWN0OyB9CiAKKyAgICAvLyBDb2RlIHBhdGggZm9yIHBsdWdpbnMg
d2hpY2ggcmVuZGVyIHZpYSBhbiBJT1N1cmZhY2UuCisgICAgdm9pZCBzZXRJT1N1cmZhY2VQcm9w
ZXJ0aWVzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgaW9TdXJmYWNlSWQpOworICAg
IHVpbnQzMl90IGdldElPU3VyZmFjZUlkKCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgcHVz
aFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCopOwogCiBwcm90ZWN0ZWQ6CkBAIC01Nyw2ICs2Miw5
IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX2ZsaXBw
ZWQ7CiAgICAgRmxvYXRSZWN0IG1fdXZSZWN0OworICAgIGludCBtX2lvU3VyZmFjZVdpZHRoOwor
ICAgIGludCBtX2lvU3VyZmFjZUhlaWdodDsKKyAgICB1aW50MzJfdCBtX2lvU3VyZmFjZUlkOwog
fTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2hhZGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcAkocmV2aXNpb24gMTAwOTY3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21p
dW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNiArMzExLDM3IEBAIFN0cmluZyBGcmFnbWVu
dFNoYWRlclJHQkFUZXhBbHBoYTo6Z2V0U2gKICAgICApOwogfQogCitTdHJpbmcgRnJhZ21lbnRT
aGFkZXJSR0JBVGV4UmVjdEZsaXBBbHBoYTo6Z2V0U2hhZGVyU3RyaW5nKCkgY29uc3QKK3sKKyAg
ICAvLyBUaGlzIG11c3QgYmUgcGFpcmVkIHdpdGggVmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3Jt
IHRvIHBpY2sgdXAgdGhlIHRleFRyYW5zZm9ybSB1bmlmb3JtLgorICAgIC8vIFRoZSBuZWNlc3Nh
cnkgI2V4dGVuc2lvbiBwcmVwcm9jZXNzaW5nIGRpcmVjdGl2ZSBicmVha3MgdGhlIFNIQURFUiBh
bmQgU0hBREVSMCBtYWNyb3MuCisgICAgcmV0dXJuICIjZXh0ZW5zaW9uIEdMX0FSQl90ZXh0dXJl
X3JlY3RhbmdsZSA6IHJlcXVpcmVcbiIKKyAgICAgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDtcbiIKKyAgICAgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDtcbiIKKyAgICAg
ICAgICAgICJ1bmlmb3JtIHZlYzQgdGV4VHJhbnNmb3JtO1xuIgorICAgICAgICAgICAgInVuaWZv
cm0gc2FtcGxlcjJEUmVjdCBzX3RleHR1cmU7XG4iCisgICAgICAgICAgICAidW5pZm9ybSBmbG9h
dCBhbHBoYTtcbiIKKyAgICAgICAgICAgICJ2b2lkIG1haW4oKVxuIgorICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICIgICAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRFJlY3Qoc190ZXh0
dXJlLCB2ZWMyKHZfdGV4Q29vcmQueCwgdGV4VHJhbnNmb3JtLncgLSB2X3RleENvb3JkLnkpKTtc
biIKKyAgICAgICAgICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhD
b2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhO1xuIgorICAgICAgICAgICAg
In1cbiI7Cit9CisKK1N0cmluZyBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0QWxwaGE6OmdldFNo
YWRlclN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuICIjZXh0ZW5zaW9uIEdMX0FSQl90ZXh0
dXJlX3JlY3RhbmdsZSA6IHJlcXVpcmVcbiIKKyAgICAgICAgICAgICJwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDtcbiIKKyAgICAgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDtcbiIKKyAg
ICAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc190ZXh0dXJlO1xuIgorICAgICAgICAg
ICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7XG4iCisgICAgICAgICAgICAidm9pZCBtYWluKClcbiIK
KyAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAiICAgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0
dXJlMkRSZWN0KHNfdGV4dHVyZSwgdl90ZXhDb29yZCk7XG4iCisgICAgICAgICAgICAiICAgIGds
X0ZyYWdDb2xvciA9IHRleENvbG9yICogYWxwaGE7XG4iCisgICAgICAgICAgICAifVxuIjsKK30K
KwogU3RyaW5nIEZyYWdtZW50U2hhZGVyUkdCQVRleE9wYXF1ZTo6Z2V0U2hhZGVyU3RyaW5nKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gU0hBREVSKApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCShy
ZXZpc2lvbiAxMDA5NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TaGFkZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDE2IEBA
IHB1YmxpYzoKICAgICBTdHJpbmcgZ2V0U2hhZGVyU3RyaW5nKCkgY29uc3Q7CiB9OwogCitjbGFz
cyBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0RmxpcEFscGhhIDogcHVibGljIEZyYWdtZW50VGV4
QWxwaGFCaW5kaW5nIHsKK3B1YmxpYzoKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU3RyaW5nKCkgY29u
c3Q7Cit9OworCitjbGFzcyBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0QWxwaGEgOiBwdWJsaWMg
RnJhZ21lbnRUZXhBbHBoYUJpbmRpbmcgeworcHVibGljOgorICAgIFN0cmluZyBnZXRTaGFkZXJT
dHJpbmcoKSBjb25zdDsKK307CisKIGNsYXNzIEZyYWdtZW50U2hhZGVyUkdCQVRleE9wYXF1ZSA6
IHB1YmxpYyBGcmFnbWVudFRleE9wYXF1ZUJpbmRpbmcgewogcHVibGljOgogICAgIFN0cmluZyBn
ZXRTaGFkZXJTdHJpbmcoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHAJKHJldmlzaW9uIDEwMDk2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKIAor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJj
Yy9DQ1Byb3h5LmgiCkBAIC00MywxNiArNDQsMzIgQEAgc3RydWN0IFBsdWdpblByb2dyYW1CaW5k
aW5nIHsKICAgICAgICAgcHJvZ3JhbUlkID0gcHJvZ3JhbS0+cHJvZ3JhbSgpOwogICAgICAgICBz
YW1wbGVyTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlv
bigpOwogICAgICAgICBtYXRyaXhMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1h
dHJpeExvY2F0aW9uKCk7Ci0gICAgICAgIG9mZnNldExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkub2Zmc2V0TG9jYXRpb24oKTsKLSAgICAgICAgc2NhbGVMb2NhdGlvbiA9IHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLnNjYWxlTG9jYXRpb24oKTsKICAgICAgICAgYWxwaGFMb2NhdGlv
biA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOwogICAgIH0KICAg
ICBpbnQgcHJvZ3JhbUlkOwogICAgIGludCBzYW1wbGVyTG9jYXRpb247CiAgICAgaW50IG1hdHJp
eExvY2F0aW9uOworICAgIGludCBhbHBoYUxvY2F0aW9uOworfTsKKworc3RydWN0IFRleFN0cmV0
Y2hQbHVnaW5Qcm9ncmFtQmluZGluZyA6IFBsdWdpblByb2dyYW1CaW5kaW5nIHsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBwcm9ncmFtKQorICAgIHsKKyAg
ICAgICAgUGx1Z2luUHJvZ3JhbUJpbmRpbmc6OnNldChwcm9ncmFtKTsKKyAgICAgICAgb2Zmc2V0
TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5vZmZzZXRMb2NhdGlvbigpOworICAg
ICAgICBzY2FsZUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkuc2NhbGVMb2NhdGlv
bigpOworICAgIH0KICAgICBpbnQgb2Zmc2V0TG9jYXRpb247CiAgICAgaW50IHNjYWxlTG9jYXRp
b247Ci0gICAgaW50IGFscGhhTG9jYXRpb247Cit9OworCitzdHJ1Y3QgVGV4VHJhbnNmb3JtUGx1
Z2luUHJvZ3JhbUJpbmRpbmcgOiBQbHVnaW5Qcm9ncmFtQmluZGluZyB7CisgICAgdGVtcGxhdGU8
Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKKyAgICB7CisgICAgICAg
IFBsdWdpblByb2dyYW1CaW5kaW5nOjpzZXQocHJvZ3JhbSk7CisgICAgICAgIHRleFRyYW5zZm9y
bUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRpb24o
KTsKKyAgICB9CisgICAgaW50IHRleFRyYW5zZm9ybUxvY2F0aW9uOwogfTsKIAogfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCkBAIC02NCw0MSArODEsOTkgQEAgQ0NQbHVnaW5MYXllckltcGw6OkND
UGx1Z2luTGF5ZXJJbXBsKGludAogICAgICwgbV90ZXh0dXJlSWQoMCkKICAgICAsIG1fZmxpcHBl
ZCh0cnVlKQogICAgICwgbV91dlJlY3QoMCwgMCwgMSwgMSkKKyAgICAsIG1faW9TdXJmYWNlSWQo
MCkKKyAgICAsIG1faW9TdXJmYWNlV2lkdGgoMCkKKyAgICAsIG1faW9TdXJmYWNlSGVpZ2h0KDAp
CisgICAgLCBtX2lvU3VyZmFjZUNoYW5nZWQoZmFsc2UpCisgICAgLCBtX2lvU3VyZmFjZVRleHR1
cmVJZCgwKQogewogfQogCiBDQ1BsdWdpbkxheWVySW1wbDo6fkNDUGx1Z2luTGF5ZXJJbXBsKCkK
IHsKKyAgICBjbGVhbnVwUmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgQ0NQbHVnaW5MYXllckltcGw6
OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQogewogICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgUGx1Z2luUHJvZ3JhbUJpbmRpbmcgYmlu
ZGluZzsKLSAgICBpZiAobV9mbGlwcGVkKQotICAgICAgICBiaW5kaW5nLnNldChsYXllclJlbmRl
cmVyLT5wbHVnaW5MYXllclByb2dyYW1GbGlwKCkpOwotICAgIGVsc2UKLSAgICAgICAgYmluZGlu
Zy5zZXQobGF5ZXJSZW5kZXJlci0+cGx1Z2luTGF5ZXJQcm9ncmFtKCkpOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCkpOwotCi0gICAgLy8gRklYTUU6IHNldHRp
bmcgdGhlIHRleHR1cmUgcGFyYW1ldGVycyBldmVyeSB0aW1lIGlzIHJlZHVuZGFudC4gTW92ZSB0
aGlzIGNvZGUgc29tZXdoZXJlCi0gICAgLy8gd2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBlbiBvbmNl
IHBlciB0ZXh0dXJlLgotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
SU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Ci0gICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9T
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShiaW5kaW5n
LnByb2dyYW1JZCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoYmluZGlu
Zy5zYW1wbGVyTG9jYXRpb24sIDApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bTJmKGJpbmRpbmcub2Zmc2V0TG9jYXRpb24sIG1fdXZSZWN0LngoKSwgbV91dlJlY3QueSgpKSk7
Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0yZihiaW5kaW5nLnNjYWxlTG9jYXRp
b24sIG1fdXZSZWN0LndpZHRoKCksIG1fdXZSZWN0LmhlaWdodCgpKSk7Ci0gICAgbGF5ZXJSZW5k
ZXJlci0+ZHJhd1RleHR1cmVkUXVhZChkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCks
IGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyLT5zaGFyZWRH
ZW9tZXRyeVF1YWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRp
bmcubWF0cml4TG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
aW5kaW5nLmFscGhhTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtMSk7CisKKyAgICBpZiAobV9pb1N1cmZhY2VDaGFuZ2VkKSB7CisgICAgICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgICAgICBF
eHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMz
RENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICAgICAgQVNTRVJUKGV4
dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9pb3N1cmZhY2UiKSk7CisgICAgICAgIEFT
U0VSVChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpOwor
CisgICAgICAgIGlmICghbV9pb1N1cmZhY2VUZXh0dXJlSWQpCisgICAgICAgICAgICBtX2lvU3Vy
ZmFjZVRleHR1cmVJZCA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKworICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEV4dGVuc2lv
bnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBtX2lvU3VyZmFjZVRleHR1cmVJZCkpOworICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6OlRF
WFRVUkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUikpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShF
eHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6OlRFWFRV
UkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgICAgICBleHRlbnNpb25zLT50ZXhJ
bWFnZUlPU3VyZmFjZTJEQ0hST01JVU0oRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9B
UkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lv
U3VyZmFjZVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pb1N1cmZhY2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2lvU3VyZmFjZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgICAgIC8vIERvIG5vdCBjaGVjayBmb3Ig
ZXJyb3IgY29uZGl0aW9ucy4gdGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNIGlzIHN1cHBvc2Vk
IHRvIGhvbGQgb24gdG8KKyAgICAgICAgLy8gdGhlIGxhc3QgZ29vZCBJT1N1cmZhY2UgaWYgdGhl
IG5ldyBvbmUgaXMgYWxyZWFkeSBjbG9zZWQuIFRoaXMgaXMgb25seSBhIHBvc3NpYmlsaXR5Cisg
ICAgICAgIC8vIGR1cmluZyBsaXZlIHJlc2l6aW5nIG9mIHBsdWdpbnMuIEhvd2V2ZXIsIGl0IHNl
ZW1zIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0bworICAgICAgICAvLyBjb21wbGV0ZWx5
IGd1YXJkIGFnYWluc3QgZ2FyYmFnZSBiZWluZyBkcmF3bi4gSWYgdGhpcyBpcyBmb3VuZCB0byBi
ZSBhIHNpZ25pZmljYW50IGlzc3VlLAorICAgICAgICAvLyBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRv
IGV4cGxpY2l0bHkgdGVsbCB0aGUgZW1iZWRkZXIgd2hlbiB0byBmcmVlIHRoZSBzdXJmYWNlcyBp
dCBoYXMKKyAgICAgICAgLy8gYWxsb2NhdGVkLgorICAgICAgICBtX2lvU3VyZmFjZUNoYW5nZWQg
PSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9pb1N1cmZhY2VUZXh0dXJlSWQpIHsKKyAgICAg
ICAgVGV4VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJpbmRpbmcgYmluZGluZzsKKyAgICAgICAgaWYg
KG1fZmxpcHBlZCkKKyAgICAgICAgICAgIGJpbmRpbmcuc2V0KGxheWVyUmVuZGVyZXItPnBsdWdp
bkxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBi
aW5kaW5nLnNldChsYXllclJlbmRlcmVyLT5wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtKCkpOwor
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29u
dGV4dCgpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBtX2lvU3Vy
ZmFjZVRleHR1cmVJZCkpOworCisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9n
cmFtKGJpbmRpbmcucHJvZ3JhbUlkKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtMWkoYmluZGluZy5zYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICAgICAgLy8gTm90ZTog
dGhpcyBjb2RlIHBhdGggaWdub3JlcyBtX3V2UmVjdC4KKyAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVuaWZvcm00ZihiaW5kaW5nLnRleFRyYW5zZm9ybUxvY2F0aW9uLCAwLCAwLCBtX2lv
U3VyZmFjZVdpZHRoLCBtX2lvU3VyZmFjZUhlaWdodCkpOworICAgICAgICBsYXllclJlbmRlcmVy
LT5kcmF3VGV4dHVyZWRRdWFkKGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91
bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXItPnNoYXJlZEdlb21l
dHJ5UXVhZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRp
bmcubWF0cml4TG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmluZGluZy5hbHBoYUxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0xKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJl
KEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgVGV4U3RyZXRjaFBsdWdpblByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CisgICAgICAg
IGlmIChtX2ZsaXBwZWQpCisgICAgICAgICAgICBiaW5kaW5nLnNldChsYXllclJlbmRlcmVyLT5w
bHVnaW5MYXllclByb2dyYW1GbGlwKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiaW5k
aW5nLnNldChsYXllclJlbmRlcmVyLT5wbHVnaW5MYXllclByb2dyYW0oKSk7CisKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Cisg
ICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7CisKKyAgICAg
ICAgLy8gRklYTUU6IHNldHRpbmcgdGhlIHRleHR1cmUgcGFyYW1ldGVycyBldmVyeSB0aW1lIGlz
IHJlZHVuZGFudC4gTW92ZSB0aGlzIGNvZGUgc29tZXdoZXJlCisgICAgICAgIC8vIHdoZXJlIGl0
IHdpbGwgb25seSBoYXBwZW4gb25jZSBwZXIgdGV4dHVyZS4KKyAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01B
R19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKworICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dyYW1JZCkpOwor
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKGJpbmRpbmcuc2FtcGxlckxv
Y2F0aW9uLCAwKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMmYoYmlu
ZGluZy5vZmZzZXRMb2NhdGlvbiwgbV91dlJlY3QueCgpLCBtX3V2UmVjdC55KCkpKTsKKyAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0yZihiaW5kaW5nLnNjYWxlTG9jYXRpb24s
IG1fdXZSZWN0LndpZHRoKCksIG1fdXZSZWN0LmhlaWdodCgpKSk7CisgICAgICAgIGxheWVyUmVu
ZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgp
LCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVk
R2VvbWV0cnlRdWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmluZGluZy5tYXRyaXhMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaW5kaW5nLmFscGhhTG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLTEpOworICAgIH0KIH0KIAogCkBAIC0xMDksNiArMTg0LDIzIEBAIHZv
aWQgQ0NQbHVnaW5MYXllckltcGw6OmR1bXBMYXllclByb3BlcnQKICAgICBDQ0xheWVySW1wbDo6
ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKIH0KIAordm9pZCBDQ1BsdWdpbkxheWVy
SW1wbDo6c2V0SU9TdXJmYWNlUHJvcGVydGllcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQz
Ml90IGlvU3VyZmFjZUlkKQoreworICAgIGlmIChtX2lvU3VyZmFjZUlkICE9IGlvU3VyZmFjZUlk
KQorICAgICAgICBtX2lvU3VyZmFjZUNoYW5nZWQgPSB0cnVlOworCisgICAgbV9pb1N1cmZhY2VX
aWR0aCA9IHdpZHRoOworICAgIG1faW9TdXJmYWNlSGVpZ2h0ID0gaGVpZ2h0OworICAgIG1faW9T
dXJmYWNlSWQgPSBpb1N1cmZhY2VJZDsKK30KKwordm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6Y2xl
YW51cFJlc291cmNlcygpCit7CisgICAgLy8gRklYTUU6IGl0IHNlZW1zIHRoZXJlIGlzIG5vIGxh
eWVyIHJlbmRlcmVyIC8gR3JhcGhpY3NDb250ZXh0M0QgYXZhaWxhYmxlIGhlcmUuIElkZWFsbHkg
d2UKKyAgICAvLyB3b3VsZCBsaWtlIHRvIGRlbGV0ZSBtX2lvU3VyZmFjZVRleHR1cmVJZC4KKyAg
ICBtX2lvU3VyZmFjZVRleHR1cmVJZCA9IDA7CiB9CiAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQbHVnaW5MYXllckltcGwuaAkocmV2aXNpb24gMTAwOTY3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIFByb2dy
YW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFN0cmV0Y2gsIEZyYWdtZW50U2hhZGVyUkdCQVRl
eEFscGhhPiBQcm9ncmFtOwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVy
UG9zVGV4U3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBQcm9ncmFtRmxp
cDsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9y
bSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEFscGhhPiBUZXhSZWN0UHJvZ3JhbTsKKyAgICB0
eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21l
bnRTaGFkZXJSR0JBVGV4UmVjdEZsaXBBbHBoYT4gVGV4UmVjdFByb2dyYW1GbGlwOwogCiAgICAg
dmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAKQEAgLTUxLDE1ICs1
MywyNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpIHsgbV90
ZXh0dXJlSWQgPSBpZDsgfQogICAgIHZvaWQgc2V0RmxpcHBlZChib29sIGZsaXBwZWQpIHsgbV9m
bGlwcGVkID0gZmxpcHBlZDsgfQogICAgIHZvaWQgc2V0VVZSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkgeyBtX3V2UmVjdCA9IHJlY3Q7IH0KKyAgICB2b2lkIHNldElPU3VyZmFjZVByb3BlcnRp
ZXMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBpb1N1cmZhY2VJZCk7CiAKIHByaXZh
dGU6CiAgICAgZXhwbGljaXQgQ0NQbHVnaW5MYXllckltcGwoaW50KTsKIAogICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiUGx1Z2luTGF5
ZXIiOyB9CiAKKyAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKKwogICAgIHVuc2lnbmVkIG1f
dGV4dHVyZUlkOwogICAgIGJvb2wgbV9mbGlwcGVkOwogICAgIEZsb2F0UmVjdCBtX3V2UmVjdDsK
KyAgICB1aW50MzJfdCBtX2lvU3VyZmFjZUlkOworICAgIGludCBtX2lvU3VyZmFjZVdpZHRoOwor
ICAgIGludCBtX2lvU3VyZmFjZUhlaWdodDsKKworICAgIC8vIEludGVybmFscyBmb3IgdGhlIElP
U3VyZmFjZSByZW5kZXJpbmcgcGF0aC4KKyAgICBib29sIG1faW9TdXJmYWNlQ2hhbmdlZDsKKyAg
ICB1bnNpZ25lZCBtX2lvU3VyZmFjZVRleHR1cmVJZDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDA5NzEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDExLTExLTIx
ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1d
IFN1cHBvcnQgQ29yZSBBbmltYXRpb24gcGx1Z2lucyBpbiBjb21wb3NpdG9yCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIElPU3VyZmFjZSBzdXBw
b3J0IHRvIFdlYlBsdWdpbkNvbnRhaW5lci4gVGhpcyBjb2RlIHBhdGggaXMKKyAgICAgICAgdXNl
ZCBvbmx5IG9uIE1hYyBPUyBYLCBidXQgaXMgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIG9uIGFsbAor
ICAgICAgICBwbGF0Zm9ybXMgZm9yIHNpbXBsaWNpdHkuCisKKyAgICAgICAgKiBwdWJsaWMvV2Vi
R3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTSk6CisgICAgICAgICogcHVibGljL1dlYlBs
dWdpbkNvbnRhaW5lci5oOgorICAgICAgICAqIHNyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6dGV4SW1hZ2VJT1N1cmZh
Y2UyRENIUk9NSVVNKToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5j
cHA6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorICAgICAgICAq
IHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1
Z2luQ29udGFpbmVySW1wbDo6YWNjZWxlcmF0ZWRQbHVnaW5BbGxvY2F0ZWRJT1N1cmZhY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpwbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6aGFuZGxlS2V5Ym9hcmRF
dmVudCk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaDoKKwogMjAxMS0x
MS0yMSAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBb
Y2hyb21pdW1dIE1lZGlhU3RyZWFtIEFQSTogQWRkaW5nIGVtYmVkZGluZyBjb2RlIGZvciBHZXRV
c2VyTWVkaWEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNz
Q29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gMTAwOTY3KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzc1LDYgKzM3NSw5IEBAIHB1YmxpYzoKICAgICAvLyBib3RoIGNvbW1hbmQgYnVmZmVyIHBv
cnQgYW5kIGluLXByb2Nlc3MgcG9ydC4KICAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRUcmFuc2xh
dGVkU2hhZGVyU291cmNlQU5HTEUoV2ViR0xJZCBzaGFkZXIpIHsgcmV0dXJuIFdlYlN0cmluZygp
OyB9CiAKKyAgICAvLyBHTF9DSFJPTUlVTV9pb3N1cmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgdGV4
SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IHdpZHRo
LCBXR0MzRGludCBoZWlnaHQsIFdHQzNEdWludCBpb1N1cmZhY2VJZCwgV0dDM0R1aW50IHBsYW5l
KSB7IH0KKwogI2lmIFdFQktJVF9VU0lOR19TS0lBCiAgICAgR3JHTEludGVyZmFjZSogY3JlYXRl
R3JHTEludGVyZmFjZSgpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJQbHVnaW5Db250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJQbHVnaW5Db250YWluZXIuaAkocmV2aXNpb24gMTAwOTY3KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luQ29udGFpbmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDYgKzU5LDE1IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgZGVmYXVsdCB2
YWx1ZSBmb3IgaWQgaXMgemVybyB3aGljaCBpbmRpY2F0ZXMgc29mdHdhcmUgcmVuZGVyaW5nLgog
ICAgIC8vIEEgbm9uLXplcm8gdmFsdWUgd2lsbCB0cmlnZ2VyIGh3LWFjY2VsZXJhdGVkIGNvbXBv
c2l0aW5nLgogICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNraW5nVGV4dHVyZUlkKHVuc2lnbmVkKSA9
IDA7CisgICAgLy8gTm90aWZpZXMgdGhlIGNvbnRhaW5lciB0aGF0IHRoZSBwbHVnaW4gYWxsb2Nh
dGVkIGEgbmV3IElPU3VyZmFjZSBmb3IKKyAgICAvLyBpdHMgcmVuZGVyaW5nLCBhbmQgdGhhdCB0
aGUgY29tcG9zaXRvciBzaG91bGQgYmluZCB0byB0aGlzIHRleHR1cmUKKyAgICAvLyBhbmQgdXNl
IGl0IGZvciBzdWJzZXF1ZW50IHJlbmRlcmluZy4gQSBub24temVybyBpb1N1cmZhY2VJZCB0cmln
Z2VycworICAgIC8vIGhhcmR3YXJlLWFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nOyBhIHplcm8gdmFs
dWUgc3dpdGNoZXMgYmFjayB0byB0aGUKKyAgICAvLyBzb2Z0d2FyZSByZW5kZXJlZCBwYXRoLiAo
VGhpcyBlbnRyeSBwb2ludCBpcyB1c2VkIG9ubHkgb24gTWFjIE9TLAorICAgIC8vIGJ1dCBpcyBk
ZWZpbmVkIG9uIGFsbCBwbGF0Zm9ybXMgZm9yIHNpbXBsaWNpdHkuKQorICAgIHZpcnR1YWwgdm9p
ZCBhY2NlbGVyYXRlZFBsdWdpbkFsbG9jYXRlZElPU3VyZmFjZShpbnQgd2lkdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGlvU3VyZmFjZUlkKSA9IDA7CiAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGJhY2tpbmcg
dGV4dHVyZSBpcyByZWFkeSB0byBiZSBjb21wb3NpdGVkLgogICAgIHZpcnR1YWwgdm9pZCBjb21t
aXRCYWNraW5nVGV4dHVyZSgpIHt9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMDA5Njcp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsMTEgQEAgdm9pZCBFeHRlbnNpb25zM0RDaHJv
bWl1bTo6cGFpbnRGcmFtZWJ1ZgogICAgIG1fcHJpdmF0ZS0+cGFpbnRGcmFtZWJ1ZmZlclRvQ2Fu
dmFzKGZyYW1lYnVmZmVyLCB3aWR0aCwgaGVpZ2h0LCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZUJ1
ZmZlcik7CiB9CiAKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnRleEltYWdlSU9TdXJmYWNl
MkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMy
X3QgaW9TdXJmYWNlSWQsIHVuc2lnbmVkIHBsYW5lKQoreworICAgIG1fcHJpdmF0ZS0+dGV4SW1h
Z2VJT1N1cmZhY2UyRENIUk9NSVVNKHRhcmdldCwgd2lkdGgsIGhlaWdodCwgaW9TdXJmYWNlSWQs
IHBsYW5lKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0
M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMDk2NykKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OTgsNiArODk4LDcgQEAgREVMRUdBVEVfVE9fSU1QTChyYXRlTGltaXRP
ZmZzY3JlZW5Db250ZQogREVMRUdBVEVfVE9fSU1QTF9SKGdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIsIEdDM0RlbnVtKQogCiBERUxFR0FURV9UT19JTVBMXzFSKGdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRSwgUGxhdGZvcm0zRE9iamVjdCwgU3RyaW5nKQorREVMRUdBVEVfVE9fSU1QTF81
KHRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTSwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQs
IEdDM0R1aW50LCBHQzNEdWludCkKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBHcmFwaGljc0NvbnRl
eHQzRApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmgJKHJldmlzaW9uIDEwMDk2NykKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDcsNiArMzA3LDkgQEAgcHVibGljOgogICAgIC8vIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hh
ZGVyX3NvdXJjZQogICAgIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpOwogCisgICAgLy8gR0xfQ0hST01JVU1faW9zdXJmYWNlCisg
ICAgdm9pZCB0ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IHdpZHRoLCBHQzNEaW50IGhlaWdodCwgR0MzRHVpbnQgaW9TdXJmYWNlSWQsIEdDM0R1aW50
IHBsYW5lKTsKKwogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoV2ViS2l0
OjpXZWJWaWV3SW1wbCosIFBhc3NPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4s
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKTsKIApJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHJldmlz
aW9uIDEwMDk2NykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRh
aW5lckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsNiArMzQ3LDI1IEBAIHZvaWQgV2Vi
UGx1Z2luQ29udGFpbmVySW1wbDo6c2V0QmFja2luZ1QKICNlbmRpZgogfQogCit2b2lkIFdlYlBs
dWdpbkNvbnRhaW5lckltcGw6OmFjY2VsZXJhdGVkUGx1Z2luQWxsb2NhdGVkSU9TdXJmYWNlKGlu
dCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW9TdXJmYWNl
SWQpCit7CisjaWYgT1MoREFSV0lOKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgdWludDMyX3QgY3VycmVudElkID0gbV9wbGF0Zm9ybUxheWVyLT5nZXRJT1N1cmZhY2VJZCgp
OworICAgIGlmIChpb1N1cmZhY2VJZCA9PSBjdXJyZW50SWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fcGxhdGZvcm1MYXllci0+c2V0SU9TdXJmYWNlUHJvcGVydGllcyh3aWR0aCwgaGVpZ2h0
LCBpb1N1cmZhY2VJZCk7CisKKyAgICAvLyBJZiBhbnlvbmUgb2YgdGhlIElEcyBpcyB6ZXJvIHdl
IG5lZWQgdG8gc3dpdGNoIGJldHdlZW4gaGFyZHdhcmUKKyAgICAvLyBhbmQgc29mdHdhcmUgY29t
cG9zaXRpbmcuIFRoaXMgaXMgZG9uZSBieSB0cmlnZ2VyaW5nIGEgc3R5bGUgcmVjYWxjCisgICAg
Ly8gb24gdGhlIGNvbnRhaW5lciBlbGVtZW50LgorICAgIGlmICghKGlvU3VyZmFjZUlkICogY3Vy
cmVudElkKSkKKyAgICAgICAgbV9lbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFdlYkNvcmU6
OlN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlBsdWdpbkNvbnRh
aW5lckltcGw6OmNvbW1pdEJhY2tpbmdUZXh0dXJlKCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCkBAIC00NTYsNyArNDc1LDcgQEAgdm9pZCBXZWJQbHVnaW5Db250YWluZXJJ
bXBsOjp3aWxsRGVzdHJveQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIFdlYkNv
cmU6OkxheWVyQ2hyb21pdW0qIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnBsYXRmb3JtTGF5ZXIo
KSBjb25zdAogewotICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXItPnRleHR1cmVJZCgpID8gbV9w
bGF0Zm9ybUxheWVyLmdldCgpIDogMDsKKyAgICByZXR1cm4gKG1fcGxhdGZvcm1MYXllci0+dGV4
dHVyZUlkKCkgfHwgbV9wbGF0Zm9ybUxheWVyLT5nZXRJT1N1cmZhY2VJZCgpKSA/IG1fcGxhdGZv
cm1MYXllci5nZXQoKSA6IDA7CiB9CiAjZW5kaWYKIApAQCAtNTg1LDcgKzYwNCw3IEBAIHZvaWQg
V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6aGFuZGxlS2V5Ym8KICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKHdlYkV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6S2V5RG93bikgewotI2lmIGRl
ZmluZWQoT1NfTUFDT1NYKQorI2lmIE9TKERBUldJTikKICAgICAgICAgaWYgKHdlYkV2ZW50Lm1v
ZGlmaWVycyA9PSBXZWJJbnB1dEV2ZW50OjpNZXRhS2V5CiAjZWxzZQogICAgICAgICBpZiAod2Vi
RXZlbnQubW9kaWZpZXJzID09IFdlYklucHV0RXZlbnQ6OkNvbnRyb2xLZXkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgJ
KHJldmlzaW9uIDEwMDk2NykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdp
bkNvbnRhaW5lckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYlJl
Y3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0R2VvbWV0cnkoKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0QmFja2luZ1RleHR1cmVJZCh1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2b2lkIGFjY2Vs
ZXJhdGVkUGx1Z2luQWxsb2NhdGVkSU9TdXJmYWNlKGludCB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
aW9TdXJmYWNlSWQpOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXRCYWNraW5nVGV4dHVyZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclNjcmlwdE9iamVjdHMoKTsKICAgICB2aXJ0dWFsIE5QT2Jq
ZWN0KiBzY3JpcHRhYmxlT2JqZWN0Rm9yRWxlbWVudCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116277</attachid>
            <date>2011-11-22 14:42:00 -0800</date>
            <delta_ts>2011-11-22 18:02:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72921-20111122144159.patch</filename>
            <type>text/plain</type>
            <size>33384</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDExLTExLTIyICBLZW5uZXRo
IFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFN1cHBvcnQg
Q29yZSBBbmltYXRpb24gcGx1Z2lucyBpbiBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkyMQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgdG8gUGx1Z2luTGF5ZXJD
aHJvbWl1bSBhbmQgQ0NQbHVnaW5MYXllckltcGwgZm9yCisgICAgICAgIHVzaW5nIGFuIElPU3Vy
ZmFjZSBhcyB0aGUgYmFja2luZyBzdG9yZSBmb3IgYSBwbHVnaW4uIEFkZGVkIG1pbmltYWwKKyAg
ICAgICAgQVJCX3RleHR1cmVfcmVjdGFuZ2xlIHN1cHBvcnQgdG8gRXh0ZW5zaW9uczNELmggYW5k
IGEgQ2hyb21pdW0tCisgICAgICAgIHNwZWNpZmljIGV4dGVuc2lvbiBmb3IgYmluZGluZyBhbiBJ
T1N1cmZhY2UgdG8gYSB0ZXh0dXJlLgorCisgICAgICAgIFRoZXNlIGNoYW5nZXMgdGhlbXNlbHZl
cyBkbyBub3QgaGF2ZSBhbnkgZWZmZWN0LiBBIGZvbGxvdy1vbgorICAgICAgICBDaHJvbWl1bSBD
TCB3aWxsIG1ha2UgdGhlIHN3aXRjaCB0byB0aGlzIG5ldyBjb2RlIHBhdGguCisKKyAgICAgICAg
VGVzdGVkIG1hbnVhbGx5IGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgQ2hyb21pdW0gc2lkZSBj
aGFuZ2VzOworICAgICAgICBDaHJvbWl1bSdzIER1bXBSZW5kZXJUcmVlIHBvcnQgZG9lcyBub3Qg
c3VwcG9ydCBDb3JlIEFuaW1hdGlvbgorICAgICAgICBwbHVnaW5zLiBSYW4gdmlkZW8gYW5kIFN0
YWdlM0QgaW4gRmxhc2gsIGFuZCBVbml0eSAzRCBjb250ZW50LCB0bworICAgICAgICB2ZXJpZnku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclRl
eFJlY3RQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
cGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpzZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmdldElPU3VyZmFjZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0RmxpcEFs
cGhhOjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRTaGFkZXJS
R0JBVGV4UmVjdEFscGhhOjpnZXRTaGFkZXJTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwOgorICAgICAgICAoUGx1Z2lu
UHJvZ3JhbUJpbmRpbmc6OlRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGluZzo6c2V0KToKKyAg
ICAgICAgKFBsdWdpblByb2dyYW1CaW5kaW5nOjpUZXhUcmFuc2Zvcm1QbHVnaW5Qcm9ncmFtQmlu
ZGluZzo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpDQ1BsdWdp
bkxheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6fkNDUGx1
Z2luTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpzZXRJT1N1cmZhY2VQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpjbGVhbnVwUmVz
b3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdp
bkxheWVySW1wbC5oOgorCiAyMDExLTExLTIyICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgTGF5b3V0IFRlc3QgaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0
ZW5zaW9ucy1ldmVudHMuaHRtbCBpcyB0aW1pbmcgb3V0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaAkocmV2aXNpb24gMTAxMDEwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDYgKzU3LDEwIEBAIHB1YmxpYzoKICAgICAvLyAgIEdMX09FU19yZ2I4
X3JnYmE4CiAgICAgLy8gICBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAogICAgIC8vICAgR0xf
QU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCisgICAgLy8gICBHTF9BUkJfdGV4dHVyZV9y
ZWN0YW5nbGUgKG9ubHkgdGhlIHN1YnNldCByZXF1aXJlZCB0bworICAgIC8vICAgICBpbXBsZW1l
bnQgSU9TdXJmYWNlIGJpbmRpbmc7IGl0J3MgcmVjb21tZW5kZWQgdG8gc3VwcG9ydAorICAgIC8v
ICAgICB0aGlzIG9ubHkgb24gTWFjIE9TIFggdG8gbGltaXQgdGhlIGFtb3VudCBvZiBjb2RlIGRl
cGVuZGVudAorICAgIC8vICAgICBvbiB0aGlzIGV4dGVuc2lvbikKIAogICAgIC8vIFRha2VzIGZ1
bGwgbmFtZSBvZiBleHRlbnNpb247IGZvciBleGFtcGxlLAogICAgIC8vICJHTF9FWFRfdGV4dHVy
ZV9mb3JtYXRfQkdSQTg4ODgiLgpAQCAtMTA3LDYgKzExMSwxMCBAQCBwdWJsaWM6CiAKICAgICAg
ICAgLy8gR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCiAgICAgICAgIFRSQU5TTEFU
RURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgPSAweDkzQTAsCisKKyAgICAgICAgLy8gR0xf
QVJCX3RleHR1cmVfcmVjdGFuZ2xlCisgICAgICAgIFRFWFRVUkVfUkVDVEFOR0xFX0FSQiA9ICAw
eDg0RjUsCisgICAgICAgIFRFWFRVUkVfQklORElOR19SRUNUQU5HTEVfQVJCID0gMHg4NEY2LAog
ICAgIH07CiAKICAgICAvLyBHTF9BUkJfcm9idXN0bmVzcwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNp
b25zM0RDaHJvbWl1bS5oCShyZXZpc2lvbiAxMDEwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICAvLyAgIEdMX0NIUk9NSVVNX3N3YXBi
dWZmZXJzX2NvbXBsZXRlX2NhbGxiYWNrCiAgICAgLy8gICBHTF9DSFJPTUlVTV9yYXRlX2xpbWl0
X29mZnNjcmVlbl9jb250ZXh0CiAgICAgLy8gICBHTF9DSFJPTUlVTV9wYWludF9mcmFtZWJ1ZmZl
cl9jYW52YXMKKyAgICAvLyAgIEdMX0NIUk9NSVVNX2lvc3VyZmFjZSAoTWFjIE9TIFggc3BlY2lm
aWMpCiAKICAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHMoY29uc3QgU3RyaW5nJik7CkBAIC05MSw2ICs5MiwxMSBAQCBwdWJsaWM6CiAgICAgLy8g
R0xfQ0hST01JVU1fcGFpbnRfZnJhbWVidWZmZXJfY2FudmFzCiAgICAgdm9pZCBwYWludEZyYW1l
YnVmZmVyVG9DYW52YXMoaW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgSW1hZ2VCdWZmZXIqKTsKIAorICAgIC8vIEdMX0NIUk9NSVVN
X2lvc3VyZmFjZQorICAgIC8vIFRvIGF2b2lkIG5lZWRpbmcgdG8gZXhwb3NlIGV4dHJhbmVvdXMg
ZW51bXMsIGFzc3VtZXMgaW50ZXJuYWwgZm9ybWF0CisgICAgLy8gUkdCQSwgZm9ybWF0IEJHUkEs
IGFuZCB0eXBlIFVOU0lHTkVEX0lOVF84XzhfOF84X1JFVi4KKyAgICB2b2lkIHRleEltYWdlSU9T
dXJmYWNlMkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
dWludDMyX3QgaW9TdXJmYWNlSWQsIHVuc2lnbmVkIHBsYW5lKTsKKwogcHJpdmF0ZToKICAgICAv
LyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgc3RyaWN0bHkgb3duZWQgYnkgdGhlIEdyYXBo
aWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9uIGFuZCBkbyBub3QKICAgICAvLyBuZWVkIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBhbnkgb3RoZXIgY29kZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gMTAxMDEwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSwxMiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZSgpCiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nU2V0VmlzaWJpbGl0
eSkKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fc2V0X3Zp
c2liaWxpdHkiKTsKIAorICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1f
aW9zdXJmYWNlIikpIHsKKyAgICAgICAgQVNTRVJUKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9B
UkJfdGV4dHVyZV9yZWN0YW5nbGUiKSk7CisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJs
ZWQoIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBleHRlbnNpb25zLT5lbnN1
cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9pb3N1cmZhY2UiKTsKKyAgICB9CisKICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVEVYVFVSRV9TSVpFLCAmbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpKTsKICAgICBt
X2NhcGFiaWxpdGllcy5iZXN0VGV4dHVyZUZvcm1hdCA9IFBsYXRmb3JtQ29sb3I6OmJlc3RUZXh0
dXJlRm9ybWF0KG1fY29udGV4dC5nZXQoKSk7CiAKQEAgLTgyNiw2ICs4MzIsMjggQEAgY29uc3Qg
Q0NQbHVnaW5MYXllckltcGw6OlByb2dyYW1GbGlwKiBMYQogICAgIHJldHVybiBtX3BsdWdpbkxh
eWVyUHJvZ3JhbUZsaXAuZ2V0KCk7CiB9CiAKK2NvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpUZXhS
ZWN0UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclRleFJlY3RQcm9n
cmFtKCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbSkKKyAgICAgICAg
bV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDUGx1Z2luTGF5ZXJJ
bXBsOjpUZXhSZWN0UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBpZiAoIW1fcGx1Z2lu
TGF5ZXJUZXhSZWN0UHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVO
VCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwbHVnaW5MYXllclRleFJlY3RQcm9ncmFtOjppbml0
aWFsaXplIiwgdGhpcywgMCk7CisgICAgICAgIG1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbS0+
aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gbV9wbHVnaW5M
YXllclRleFJlY3RQcm9ncmFtLmdldCgpOworfQorCitjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6
VGV4UmVjdFByb2dyYW1GbGlwKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBsdWdpbkxheWVyVGV4
UmVjdFByb2dyYW1GbGlwKCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3Jh
bUZsaXApCisgICAgICAgIG1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAgPSBhZG9wdFB0
cihuZXcgQ0NQbHVnaW5MYXllckltcGw6OlRleFJlY3RQcm9ncmFtRmxpcChtX2NvbnRleHQuZ2V0
KCkpKTsKKyAgICBpZiAoIW1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAtPmluaXRpYWxp
emVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGx1
Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXA6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAg
ICAgbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZShtX2NvbnRleHQu
Z2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gbV9wbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxp
cC5nZXQoKTsKK30KKwogY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0qIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9MYXllclJHQkFQcm9ncmFtKCkKIHsKICAgICBpZiAoIW1f
dmlkZW9MYXllclJHQkFQcm9ncmFtKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgJKHJldmlzaW9uIDEwMTAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjgsNiArMTI4LDggQEAgcHVibGljOgogICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9n
cmFtKiBjYW52YXNMYXllclByb2dyYW0oKTsKICAgICBjb25zdCBDQ1BsdWdpbkxheWVySW1wbDo6
UHJvZ3JhbSogcGx1Z2luTGF5ZXJQcm9ncmFtKCk7CiAgICAgY29uc3QgQ0NQbHVnaW5MYXllcklt
cGw6OlByb2dyYW1GbGlwKiBwbHVnaW5MYXllclByb2dyYW1GbGlwKCk7CisgICAgY29uc3QgQ0NQ
bHVnaW5MYXllckltcGw6OlRleFJlY3RQcm9ncmFtKiBwbHVnaW5MYXllclRleFJlY3RQcm9ncmFt
KCk7CisgICAgY29uc3QgQ0NQbHVnaW5MYXllckltcGw6OlRleFJlY3RQcm9ncmFtRmxpcCogcGx1
Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAoKTsKICAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpSR0JBUHJvZ3JhbSogdmlkZW9MYXllclJHQkFQcm9ncmFtKCk7CiAgICAgY29uc3QgQ0NWaWRl
b0xheWVySW1wbDo6WVVWUHJvZ3JhbSogdmlkZW9MYXllcllVVlByb2dyYW0oKTsKIApAQCAtMjE1
LDYgKzIxNyw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9n
cmFtPiBtX2NhbnZhc0xheWVyUHJvZ3JhbTsKICAgICBPd25QdHI8Q0NQbHVnaW5MYXllckltcGw6
OlByb2dyYW0+IG1fcGx1Z2luTGF5ZXJQcm9ncmFtOwogICAgIE93blB0cjxDQ1BsdWdpbkxheWVy
SW1wbDo6UHJvZ3JhbUZsaXA+IG1fcGx1Z2luTGF5ZXJQcm9ncmFtRmxpcDsKKyAgICBPd25QdHI8
Q0NQbHVnaW5MYXllckltcGw6OlRleFJlY3RQcm9ncmFtPiBtX3BsdWdpbkxheWVyVGV4UmVjdFBy
b2dyYW07CisgICAgT3duUHRyPENDUGx1Z2luTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXA+
IG1fcGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXA7CiAgICAgT3duUHRyPENDUmVuZGVyU3Vy
ZmFjZTo6TWFza1Byb2dyYW0+IG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtOwogICAgIE93blB0
cjxDQ1JlbmRlclN1cmZhY2U6OlByb2dyYW0+IG1fcmVuZGVyU3VyZmFjZVByb2dyYW07CiAgICAg
T3duUHRyPENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW1BQT4gbV9yZW5kZXJTdXJmYWNlTWFz
a1Byb2dyYW1BQTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCShyZXZp
c2lvbiAxMDEwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9QbHVnaW5MYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOSBA
QCBQbHVnaW5MYXllckNocm9taXVtOjpQbHVnaW5MYXllckNocm9taXVtCiAgICAgLCBtX3RleHR1
cmVJZCgwKQogICAgICwgbV9mbGlwcGVkKHRydWUpCiAgICAgLCBtX3V2UmVjdCgwLCAwLCAxLCAx
KQorICAgICwgbV9pb1N1cmZhY2VXaWR0aCgwKQorICAgICwgbV9pb1N1cmZhY2VIZWlnaHQoMCkK
KyAgICAsIG1faW9TdXJmYWNlSWQoMCkKIHsKIH0KIApAQCAtNzIsNiArNzUsMTkgQEAgdm9pZCBQ
bHVnaW5MYXllckNocm9taXVtOjpzZXRVVlJlY3QoY29ucwogICAgIHNldE5lZWRzQ29tbWl0KCk7
CiB9CiAKK3ZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6c2V0SU9TdXJmYWNlUHJvcGVydGllcyhp
bnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGlvU3VyZmFjZUlkKQoreworICAgIG1faW9T
dXJmYWNlV2lkdGggPSB3aWR0aDsKKyAgICBtX2lvU3VyZmFjZUhlaWdodCA9IGhlaWdodDsKKyAg
ICBtX2lvU3VyZmFjZUlkID0gaW9TdXJmYWNlSWQ7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30K
KwordWludDMyX3QgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6Z2V0SU9TdXJmYWNlSWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2lvU3VyZmFjZUlkOworfQorCiB2b2lkIFBsdWdpbkxheWVyQ2hyb21p
dW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogewogICAgIExheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOwpAQCAtODAsNiArOTYsNyBAQCB2b2lkIFBs
dWdpbkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzCiAgICAgcGx1Z2luTGF5ZXItPnNldFRl
eHR1cmVJZChtX3RleHR1cmVJZCk7CiAgICAgcGx1Z2luTGF5ZXItPnNldEZsaXBwZWQobV9mbGlw
cGVkKTsKICAgICBwbHVnaW5MYXllci0+c2V0VVZSZWN0KG1fdXZSZWN0KTsKKyAgICBwbHVnaW5M
YXllci0+c2V0SU9TdXJmYWNlUHJvcGVydGllcyhtX2lvU3VyZmFjZVdpZHRoLCBtX2lvU3VyZmFj
ZUhlaWdodCwgbV9pb1N1cmZhY2VJZCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXll
ckNocm9taXVtLmgJKHJldmlzaW9uIDEwMTAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXll
ckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CiAKKyAgICAvLyBDb2RlIHBhdGggZm9yIHBsdWdp
bnMgd2hpY2ggc3VwcGx5IHRoZWlyIG93biB0ZXh0dXJlIElELgogICAgIHZvaWQgc2V0VGV4dHVy
ZUlkKHVuc2lnbmVkIHRleHR1cmVJZCk7CiAgICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KICAgICB2b2lkIHNldEZsaXBwZWQoYm9vbCk7CkBAIC00
OCw2ICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVVlJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7CiAgICAgY29uc3QgRmxvYXRSZWN0JiB1dlJlY3QoKSBjb25zdCB7IHJldHVybiBtX3V2UmVj
dDsgfQogCisgICAgLy8gQ29kZSBwYXRoIGZvciBwbHVnaW5zIHdoaWNoIHJlbmRlciB2aWEgYW4g
SU9TdXJmYWNlLgorICAgIHZvaWQgc2V0SU9TdXJmYWNlUHJvcGVydGllcyhpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIHVpbnQzMl90IGlvU3VyZmFjZUlkKTsKKyAgICB1aW50MzJfdCBnZXRJT1N1cmZh
Y2VJZCgpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXll
ckltcGwqKTsKIAogcHJvdGVjdGVkOgpAQCAtNTcsNiArNjIsOSBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fdGV4dHVyZUlkOwogICAgIGJvb2wgbV9mbGlwcGVkOwogICAgIEZsb2F0UmVjdCBt
X3V2UmVjdDsKKyAgICBpbnQgbV9pb1N1cmZhY2VXaWR0aDsKKyAgICBpbnQgbV9pb1N1cmZhY2VI
ZWlnaHQ7CisgICAgdWludDMyX3QgbV9pb1N1cmZhY2VJZDsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aGFkZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMTAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzExLDYgKzMxMSwzNyBAQCBTdHJpbmcgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGE6
OmdldFNoCiAgICAgKTsKIH0KIAorU3RyaW5nIEZyYWdtZW50U2hhZGVyUkdCQVRleFJlY3RGbGlw
QWxwaGE6OmdldFNoYWRlclN0cmluZygpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBtdXN0IGJlIHBh
aXJlZCB3aXRoIFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSB0byBwaWNrIHVwIHRoZSB0ZXhU
cmFuc2Zvcm0gdW5pZm9ybS4KKyAgICAvLyBUaGUgbmVjZXNzYXJ5ICNleHRlbnNpb24gcHJlcHJv
Y2Vzc2luZyBkaXJlY3RpdmUgYnJlYWtzIHRoZSBTSEFERVIgYW5kIFNIQURFUjAgbWFjcm9zLgor
ICAgIHJldHVybiAiI2V4dGVuc2lvbiBHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUgOiByZXF1aXJl
XG4iCisgICAgICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCisgICAgICAgICAg
ICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7XG4iCisgICAgICAgICAgICAidW5pZm9ybSB2ZWM0
IHRleFRyYW5zZm9ybTtcbiIKKyAgICAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc190
ZXh0dXJlO1xuIgorICAgICAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7XG4iCisgICAgICAg
ICAgICAidm9pZCBtYWluKClcbiIKKyAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAiICAg
IHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3Jk
LngsIHRleFRyYW5zZm9ybS53IC0gdl90ZXhDb29yZC55KSk7XG4iCisgICAgICAgICAgICAiICAg
IGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29sb3IueSwgdGV4Q29sb3Iueiwg
dGV4Q29sb3IudykgKiBhbHBoYTtcbiIKKyAgICAgICAgICAgICJ9XG4iOworfQorCitTdHJpbmcg
RnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEFscGhhOjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdAor
eworICAgIHJldHVybiAiI2V4dGVuc2lvbiBHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUgOiByZXF1
aXJlXG4iCisgICAgICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCisgICAgICAg
ICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7XG4iCisgICAgICAgICAgICAidW5pZm9ybSBz
YW1wbGVyMkRSZWN0IHNfdGV4dHVyZTtcbiIKKyAgICAgICAgICAgICJ1bmlmb3JtIGZsb2F0IGFs
cGhhO1xuIgorICAgICAgICAgICAgInZvaWQgbWFpbigpXG4iCisgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgIiAgICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEUmVjdChzX3RleHR1cmUs
IHZfdGV4Q29vcmQpO1xuIgorICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB0ZXhDb2xv
ciAqIGFscGhhO1xuIgorICAgICAgICAgICAgIn1cbiI7Cit9CisKIFN0cmluZyBGcmFnbWVudFNo
YWRlclJHQkFUZXhPcGFxdWU6OmdldFNoYWRlclN0cmluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFNIQURFUigKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NoYWRlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAkocmV2aXNpb24gMTAxMDEwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0u
aAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCwxNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5n
IGdldFNoYWRlclN0cmluZygpIGNvbnN0OwogfTsKIAorY2xhc3MgRnJhZ21lbnRTaGFkZXJSR0JB
VGV4UmVjdEZsaXBBbHBoYSA6IHB1YmxpYyBGcmFnbWVudFRleEFscGhhQmluZGluZyB7CitwdWJs
aWM6CisgICAgU3RyaW5nIGdldFNoYWRlclN0cmluZygpIGNvbnN0OworfTsKKworY2xhc3MgRnJh
Z21lbnRTaGFkZXJSR0JBVGV4UmVjdEFscGhhIDogcHVibGljIEZyYWdtZW50VGV4QWxwaGFCaW5k
aW5nIHsKK3B1YmxpYzoKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU3RyaW5nKCkgY29uc3Q7Cit9Owor
CiBjbGFzcyBGcmFnbWVudFNoYWRlclJHQkFUZXhPcGFxdWUgOiBwdWJsaWMgRnJhZ21lbnRUZXhP
cGFxdWVCaW5kaW5nIHsKIHB1YmxpYzoKICAgICBTdHJpbmcgZ2V0U2hhZGVyU3RyaW5nKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1BsdWdpbkxheWVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCShyZXZpc2lvbiAx
MDEwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1BsdWdpbkxheWVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25z
M0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgpAQCAtNDMs
MTYgKzQ0LDMyIEBAIHN0cnVjdCBQbHVnaW5Qcm9ncmFtQmluZGluZyB7CiAgICAgICAgIHByb2dy
YW1JZCA9IHByb2dyYW0tPnByb2dyYW0oKTsKICAgICAgICAgc2FtcGxlckxvY2F0aW9uID0gcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKTsKICAgICAgICAgbWF0cml4
TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOwotICAg
ICAgICBvZmZzZXRMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm9mZnNldExvY2F0
aW9uKCk7Ci0gICAgICAgIHNjYWxlTG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5z
Y2FsZUxvY2F0aW9uKCk7CiAgICAgICAgIGFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVu
dFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKICAgICB9CiAgICAgaW50IHByb2dyYW1JZDsKICAg
ICBpbnQgc2FtcGxlckxvY2F0aW9uOwogICAgIGludCBtYXRyaXhMb2NhdGlvbjsKKyAgICBpbnQg
YWxwaGFMb2NhdGlvbjsKK307CisKK3N0cnVjdCBUZXhTdHJldGNoUGx1Z2luUHJvZ3JhbUJpbmRp
bmcgOiBQbHVnaW5Qcm9ncmFtQmluZGluZyB7CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4g
dm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKKyAgICB7CisgICAgICAgIFBsdWdpblByb2dyYW1C
aW5kaW5nOjpzZXQocHJvZ3JhbSk7CisgICAgICAgIG9mZnNldExvY2F0aW9uID0gcHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkub2Zmc2V0TG9jYXRpb24oKTsKKyAgICAgICAgc2NhbGVMb2NhdGlvbiA9
IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnNjYWxlTG9jYXRpb24oKTsKKyAgICB9CiAgICAgaW50
IG9mZnNldExvY2F0aW9uOwogICAgIGludCBzY2FsZUxvY2F0aW9uOwotICAgIGludCBhbHBoYUxv
Y2F0aW9uOworfTsKKworc3RydWN0IFRleFRyYW5zZm9ybVBsdWdpblByb2dyYW1CaW5kaW5nIDog
UGx1Z2luUHJvZ3JhbUJpbmRpbmcgeworICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQg
c2V0KFByb2dyYW0qIHByb2dyYW0pCisgICAgeworICAgICAgICBQbHVnaW5Qcm9ncmFtQmluZGlu
Zzo6c2V0KHByb2dyYW0pOworICAgICAgICB0ZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IHByb2dyYW0t
PnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCk7CisgICAgfQorICAgIGludCB0
ZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKIH07CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpAQCAt
NjQsNDEgKzgxLDk5IEBAIENDUGx1Z2luTGF5ZXJJbXBsOjpDQ1BsdWdpbkxheWVySW1wbChpbnQK
ICAgICAsIG1fdGV4dHVyZUlkKDApCiAgICAgLCBtX2ZsaXBwZWQodHJ1ZSkKICAgICAsIG1fdXZS
ZWN0KDAsIDAsIDEsIDEpCisgICAgLCBtX2lvU3VyZmFjZUlkKDApCisgICAgLCBtX2lvU3VyZmFj
ZVdpZHRoKDApCisgICAgLCBtX2lvU3VyZmFjZUhlaWdodCgwKQorICAgICwgbV9pb1N1cmZhY2VD
aGFuZ2VkKGZhbHNlKQorICAgICwgbV9pb1N1cmZhY2VUZXh0dXJlSWQoMCkKIHsKIH0KIAogQ0NQ
bHVnaW5MYXllckltcGw6On5DQ1BsdWdpbkxheWVySW1wbCgpCiB7CisgICAgY2xlYW51cFJlc291
cmNlcygpOwogfQogCiB2b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOwotICAgIFBsdWdpblByb2dyYW1CaW5kaW5nIGJpbmRpbmc7Ci0gICAgaWYgKG1fZmxp
cHBlZCkKLSAgICAgICAgYmluZGluZy5zZXQobGF5ZXJSZW5kZXJlci0+cGx1Z2luTGF5ZXJQcm9n
cmFtRmxpcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGJpbmRpbmcuc2V0KGxheWVyUmVuZGVyZXIt
PnBsdWdpbkxheWVyUHJvZ3JhbSgpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV90ZXh0dXJlSWQpKTsKLQotICAgIC8vIEZJWE1FOiBzZXR0aW5nIHRoZSB0ZXh0dXJlIHBhcmFt
ZXRlcnMgZXZlcnkgdGltZSBpcyByZWR1bmRhbnQuIE1vdmUgdGhpcyBjb2RlIHNvbWV3aGVyZQot
ICAgIC8vIHdoZXJlIGl0IHdpbGwgb25seSBoYXBwZW4gb25jZSBwZXIgdGV4dHVyZS4KLSAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUikpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Ci0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotCi0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0oYmluZGluZy5wcm9ncmFtSWQpKTsKLSAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKGJpbmRpbmcuc2FtcGxlckxvY2F0aW9uLCAw
KSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0yZihiaW5kaW5nLm9mZnNldExv
Y2F0aW9uLCBtX3V2UmVjdC54KCksIG1fdXZSZWN0LnkoKSkpOwotICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51bmlmb3JtMmYoYmluZGluZy5zY2FsZUxvY2F0aW9uLCBtX3V2UmVjdC53aWR0aCgp
LCBtX3V2UmVjdC5oZWlnaHQoKSkpOwotICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1
YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwg
ZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLm1hdHJpeExvY2F0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5hbHBoYUxvY2F0aW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOworCisgICAgaWYgKG1f
aW9TdXJmYWNlQ2hhbmdlZCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0q
IGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQt
PmdldEV4dGVuc2lvbnMoKSk7CisgICAgICAgIEFTU0VSVChleHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfQ0hST01JVU1faW9zdXJmYWNlIikpOworICAgICAgICBBU1NFUlQoZXh0ZW5zaW9ucy0+c3Vw
cG9ydHMoIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKTsKKworICAgICAgICBpZiAoIW1faW9T
dXJmYWNlVGV4dHVyZUlkKQorICAgICAgICAgICAgbV9pb1N1cmZhY2VUZXh0dXJlSWQgPSBjb250
ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFj
dGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFO
R0xFX0FSQiwgbV9pb1N1cmZhY2VUZXh0dXJlSWQpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmko
RXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1Q
X1RPX0VER0UpKTsKKyAgICAgICAgZXh0ZW5zaW9ucy0+dGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9N
SVVNKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pb1N1cmZhY2VXaWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW9TdXJmYWNlSGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
b1N1cmZhY2VJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDApOworICAgICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMuIHRl
eEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTSBpcyBzdXBwb3NlZCB0byBob2xkIG9uIHRvCisgICAg
ICAgIC8vIHRoZSBsYXN0IGdvb2QgSU9TdXJmYWNlIGlmIHRoZSBuZXcgb25lIGlzIGFscmVhZHkg
Y2xvc2VkLiBUaGlzIGlzIG9ubHkgYSBwb3NzaWJpbGl0eQorICAgICAgICAvLyBkdXJpbmcgbGl2
ZSByZXNpemluZyBvZiBwbHVnaW5zLiBIb3dldmVyLCBpdCBzZWVtcyB0aGF0IHRoaXMgaXMgbm90
IHN1ZmZpY2llbnQgdG8KKyAgICAgICAgLy8gY29tcGxldGVseSBndWFyZCBhZ2FpbnN0IGdhcmJh
Z2UgYmVpbmcgZHJhd24uIElmIHRoaXMgaXMgZm91bmQgdG8gYmUgYSBzaWduaWZpY2FudCBpc3N1
ZSwKKyAgICAgICAgLy8gaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IHRlbGwgdGhl
IGVtYmVkZGVyIHdoZW4gdG8gZnJlZSB0aGUgc3VyZmFjZXMgaXQgaGFzCisgICAgICAgIC8vIGFs
bG9jYXRlZC4KKyAgICAgICAgbV9pb1N1cmZhY2VDaGFuZ2VkID0gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKG1faW9TdXJmYWNlVGV4dHVyZUlkKSB7CisgICAgICAgIFRleFRyYW5zZm9ybVBsdWdp
blByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CisgICAgICAgIGlmIChtX2ZsaXBwZWQpCisgICAgICAg
ICAgICBiaW5kaW5nLnNldChsYXllclJlbmRlcmVyLT5wbHVnaW5MYXllclRleFJlY3RQcm9ncmFt
RmxpcCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmluZGluZy5zZXQobGF5ZXJSZW5k
ZXJlci0+cGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbSgpKTsKKworICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShFeHRlbnNp
b25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgbV9pb1N1cmZhY2VUZXh0dXJlSWQpKTsKKwor
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dyYW1J
ZCkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKGJpbmRpbmcuc2Ft
cGxlckxvY2F0aW9uLCAwKSk7CisgICAgICAgIC8vIE5vdGU6IHRoaXMgY29kZSBwYXRoIGlnbm9y
ZXMgbV91dlJlY3QuCisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYoYmlu
ZGluZy50ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgMCwgMCwgbV9pb1N1cmZhY2VXaWR0aCwgbV9pb1N1
cmZhY2VIZWlnaHQpKTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChk
cmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3
T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyLT5zaGFyZWRHZW9tZXRyeVF1YWQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLm1hdHJpeExvY2F0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcuYWxwaGFMb2Nh
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CisgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRV
UkVfUkVDVEFOR0xFX0FSQiwgMCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFRleFN0cmV0Y2hQ
bHVnaW5Qcm9ncmFtQmluZGluZyBiaW5kaW5nOworICAgICAgICBpZiAobV9mbGlwcGVkKQorICAg
ICAgICAgICAgYmluZGluZy5zZXQobGF5ZXJSZW5kZXJlci0+cGx1Z2luTGF5ZXJQcm9ncmFtRmxp
cCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmluZGluZy5zZXQobGF5ZXJSZW5kZXJl
ci0+cGx1Z2luTGF5ZXJQcm9ncmFtKCkpOworCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCkpOworCisgICAgICAgIC8vIEZJWE1FOiBzZXR0aW5n
IHRoZSB0ZXh0dXJlIHBhcmFtZXRlcnMgZXZlcnkgdGltZSBpcyByZWR1bmRhbnQuIE1vdmUgdGhp
cyBjb2RlIHNvbWV3aGVyZQorICAgICAgICAvLyB3aGVyZSBpdCB3aWxsIG9ubHkgaGFwcGVuIG9u
Y2UgcGVyIHRleHR1cmUuCisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnVzZVByb2dyYW0oYmluZGluZy5wcm9ncmFtSWQpKTsKKyAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTJmKGJpbmRpbmcub2Zmc2V0TG9jYXRpb24s
IG1fdXZSZWN0LngoKSwgbV91dlJlY3QueSgpKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT51bmlmb3JtMmYoYmluZGluZy5zY2FsZUxvY2F0aW9uLCBtX3V2UmVjdC53aWR0aCgpLCBt
X3V2UmVjdC5oZWlnaHQoKSkpOworICAgICAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRR
dWFkKGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCks
IGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXItPnNoYXJlZEdlb21ldHJ5UXVhZCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcubWF0cml4TG9jYXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5hbHBo
YUxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsK
KyAgICB9CiB9CiAKIApAQCAtMTA5LDYgKzE4NCwyMyBAQCB2b2lkIENDUGx1Z2luTGF5ZXJJbXBs
OjpkdW1wTGF5ZXJQcm9wZXJ0CiAgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMo
dHMsIGluZGVudCk7CiB9CiAKK3ZvaWQgQ0NQbHVnaW5MYXllckltcGw6OnNldElPU3VyZmFjZVBy
b3BlcnRpZXMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBpb1N1cmZhY2VJZCkKK3sK
KyAgICBpZiAobV9pb1N1cmZhY2VJZCAhPSBpb1N1cmZhY2VJZCkKKyAgICAgICAgbV9pb1N1cmZh
Y2VDaGFuZ2VkID0gdHJ1ZTsKKworICAgIG1faW9TdXJmYWNlV2lkdGggPSB3aWR0aDsKKyAgICBt
X2lvU3VyZmFjZUhlaWdodCA9IGhlaWdodDsKKyAgICBtX2lvU3VyZmFjZUlkID0gaW9TdXJmYWNl
SWQ7Cit9CisKK3ZvaWQgQ0NQbHVnaW5MYXllckltcGw6OmNsZWFudXBSZXNvdXJjZXMoKQorewor
ICAgIC8vIEZJWE1FOiBpdCBzZWVtcyB0aGVyZSBpcyBubyBsYXllciByZW5kZXJlciAvIEdyYXBo
aWNzQ29udGV4dDNEIGF2YWlsYWJsZSBoZXJlLiBJZGVhbGx5IHdlCisgICAgLy8gd291bGQgbGlr
ZSB0byBkZWxldGUgbV9pb1N1cmZhY2VUZXh0dXJlSWQuCisgICAgbV9pb1N1cmZhY2VUZXh0dXJl
SWQgPSAwOwogfQogCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBs
LmgJKHJldmlzaW9uIDEwMTAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDggQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFk
ZXJQb3NUZXhTdHJldGNoLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJvZ3JhbTsKICAg
ICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFN0cmV0Y2gsIEZyYWdt
ZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUHJvZ3JhbUZsaXA7CisgICAgdHlwZWRlZiBQcm9n
cmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdC
QVRleFJlY3RBbHBoYT4gVGV4UmVjdFByb2dyYW07CisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGlu
ZzxWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdCQVRleFJlY3RG
bGlwQWxwaGE+IFRleFJlY3RQcm9ncmFtRmxpcDsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3KExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCkBAIC01MSwxNSArNTMsMjUgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVyZUlkID0gaWQ7IH0KICAg
ICB2b2lkIHNldEZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IG1fZmxpcHBlZCA9IGZsaXBwZWQ7IH0K
ICAgICB2b2lkIHNldFVWUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsgbV91dlJlY3QgPSBy
ZWN0OyB9CisgICAgdm9pZCBzZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKGludCB3aWR0aCwgaW50IGhl
aWdodCwgdWludDMyX3QgaW9TdXJmYWNlSWQpOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEND
UGx1Z2luTGF5ZXJJbXBsKGludCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlw
ZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlBsdWdpbkxheWVyIjsgfQogCisgICAgdm9pZCBj
bGVhbnVwUmVzb3VyY2VzKCk7CisKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKICAgICBib29s
IG1fZmxpcHBlZDsKICAgICBGbG9hdFJlY3QgbV91dlJlY3Q7CisgICAgdWludDMyX3QgbV9pb1N1
cmZhY2VJZDsKKyAgICBpbnQgbV9pb1N1cmZhY2VXaWR0aDsKKyAgICBpbnQgbV9pb1N1cmZhY2VI
ZWlnaHQ7CisKKyAgICAvLyBJbnRlcm5hbHMgZm9yIHRoZSBJT1N1cmZhY2UgcmVuZGVyaW5nIHBh
dGguCisgICAgYm9vbCBtX2lvU3VyZmFjZUNoYW5nZWQ7CisgICAgdW5zaWduZWQgbV9pb1N1cmZh
Y2VUZXh0dXJlSWQ7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2
aXNpb24gMTAxMDI1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxMS0xMS0yMiAgS2VubmV0aCBSdXNzZWxsICA8
a2JyQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBTdXBwb3J0IENvcmUgQW5pbWF0
aW9uIHBsdWdpbnMgaW4gY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzI5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBJT1N1cmZhY2Ugc3VwcG9ydCB0byBXZWJQbHVnaW5Db250
YWluZXIuIFRoaXMgY29kZSBwYXRoIGlzCisgICAgICAgIHVzZWQgb25seSBvbiBNYWMgT1MgWCwg
YnV0IGlzIGRlZmluZWQgaW4gdGhlIGhlYWRlciBvbiBhbGwKKyAgICAgICAgcGxhdGZvcm1zIGZv
ciBzaW1wbGljaXR5LgorCisgICAgICAgICogcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg6
CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZUlPU3VyZmFj
ZTJEQ0hST01JVU0pOgorICAgICAgICAqIHB1YmxpYy9XZWJQbHVnaW5Db250YWluZXIuaDoKKyAg
ICAgICAgKiBzcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uczNEQ2hyb21pdW06OnRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTSk6CisgICAg
ICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwOgorICAgICAgICAqIHNyYy9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaDoKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luQ29udGFp
bmVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnNl
dEJhY2tpbmdJT1N1cmZhY2VJZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5l
ckltcGw6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWlu
ZXJJbXBsOjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luQ29u
dGFpbmVySW1wbC5oOgorCiAyMDExLTExLTIyICBHcmVnIEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29n
bGUuY29tPgogCiAgICAgICAgIEVtcHR5IEFQSSBmb3Igd2ViIGludGVudHMKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0Qu
aAkocmV2aXNpb24gMTAxMDEwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
R3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3NSw5IEBAIHB1
YmxpYzoKICAgICAvLyBib3RoIGNvbW1hbmQgYnVmZmVyIHBvcnQgYW5kIGluLXByb2Nlc3MgcG9y
dC4KICAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUo
V2ViR0xJZCBzaGFkZXIpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CiAKKyAgICAvLyBHTF9DSFJP
TUlVTV9pb3N1cmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgdGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9N
SVVNKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IHdpZHRoLCBXR0MzRGludCBoZWlnaHQsIFdH
QzNEdWludCBpb1N1cmZhY2VJZCwgV0dDM0R1aW50IHBsYW5lKSB7IH0KKwogI2lmIFdFQktJVF9V
U0lOR19TS0lBCiAgICAgR3JHTEludGVyZmFjZSogY3JlYXRlR3JHTEludGVyZmFjZSgpOwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW5Db250YWlu
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVn
aW5Db250YWluZXIuaAkocmV2aXNpb24gMTAxMDEwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViUGx1Z2luQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDE4IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgaWQgaXMgemVybyB3
aGljaCBpbmRpY2F0ZXMgc29mdHdhcmUgcmVuZGVyaW5nLgogICAgIC8vIEEgbm9uLXplcm8gdmFs
dWUgd2lsbCB0cmlnZ2VyIGh3LWFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLgogICAgIHZpcnR1YWwg
dm9pZCBzZXRCYWNraW5nVGV4dHVyZUlkKHVuc2lnbmVkKSA9IDA7CisgICAgLy8gTm90aWZpZXMg
dGhlIGNvbnRhaW5lciB0aGF0IHRoZSBwbHVnaW4gYWxsb2NhdGVkIGEgbmV3IElPU3VyZmFjZSBm
b3IKKyAgICAvLyBpdHMgcmVuZGVyaW5nLCBhbmQgdGhhdCB0aGUgY29tcG9zaXRvciBzaG91bGQg
YmluZCB0byB0aGlzIHRleHR1cmUKKyAgICAvLyBhbmQgdXNlIGl0IGZvciBzdWJzZXF1ZW50IHJl
bmRlcmluZy4gQSBub24temVybyBpb1N1cmZhY2VJZCB0cmlnZ2VycworICAgIC8vIGhhcmR3YXJl
LWFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nOyBhIHplcm8gdmFsdWUgc3dpdGNoZXMgYmFjayB0byB0
aGUKKyAgICAvLyBzb2Z0d2FyZSByZW5kZXJlZCBwYXRoLiAoVGhpcyBlbnRyeSBwb2ludCBpcyB1
c2VkIG9ubHkgb24gTWFjIE9TLAorICAgIC8vIGJ1dCBpcyBkZWZpbmVkIG9uIGFsbCBwbGF0Zm9y
bXMgZm9yIHNpbXBsaWNpdHkuKQorICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNraW5nSU9TdXJmYWNl
SWQoaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IGlvU3VyZmFjZUlkKSA9IDA7CiAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGJhY2tpbmcgdGV4dHVy
ZSBpcyByZWFkeSB0byBiZSBjb21wb3NpdGVkLgorICAgIC8vIEZJWE1FOiBjb25zaWRlciByZW5h
bWluZyB0byBzb21ldGhpbmcgbW9yZSBnZW5lcmFsLCBub3cgdGhhdAorICAgIC8vIHRoZXJlIGFy
ZSBtdWx0aXBsZSBwcm92aWRlcnMuIE9uZSBpZGVhOiBjb21taXRCYWNraW5nU3RvcmUuCiAgICAg
dmlydHVhbCB2b2lkIGNvbW1pdEJhY2tpbmdUZXh0dXJlKCkge30KICAgICAKICAgICAvLyBEcm9w
IGFueSByZWZlcmVuY2VzIHRvIHNjcmlwdCBvYmplY3RzIGFsbG9jYXRlZCBieSB0aGUgcGx1Z2lu
LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0V4dGVuc2lvbnMz
RENocm9taXVtLmNwcAkocmV2aXNpb24gMTAxMDEwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiAr
MTQ1LDExIEBAIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnBhaW50RnJhbWVidWYKICAgICBt
X3ByaXZhdGUtPnBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFtZWJ1ZmZlciwgd2lkdGgsIGhl
aWdodCwgcHJlbXVsdGlwbHlBbHBoYSwgaW1hZ2VCdWZmZXIpOwogfQogCit2b2lkIEV4dGVuc2lv
bnMzRENocm9taXVtOjp0ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0odW5zaWduZWQgdGFyZ2V0
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGlvU3VyZmFjZUlkLCB1bnNpZ25lZCBw
bGFuZSkKK3sKKyAgICBtX3ByaXZhdGUtPnRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTSh0YXJn
ZXQsIHdpZHRoLCBoZWlnaHQsIGlvU3VyZmFjZUlkLCBwbGFuZSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0u
Y3BwCShyZXZpc2lvbiAxMDEwMTApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzRENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk4LDYgKzg5OCw3
IEBAIERFTEVHQVRFX1RPX0lNUEwocmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGUKIERFTEVHQVRFX1RP
X0lNUExfUihnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCLCBHQzNEZW51bSkKIAogREVMRUdBVEVf
VE9fSU1QTF8xUihnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUsIFBsYXRmb3JtM0RPYmpl
Y3QsIFN0cmluZykKK0RFTEVHQVRFX1RPX0lNUExfNSh0ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01J
VU0sIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEdWludCwgR0MzRHVpbnQpCiAKIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogLy8gR3JhcGhpY3NDb250ZXh0M0QKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCShyZXZp
c2lvbiAxMDEwMTApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDYgKzMwNyw5IEBAIHB1YmxpYzoK
ICAgICAvLyBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UKICAgICBTdHJpbmcgZ2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKTsKIAor
ICAgIC8vIEdMX0NIUk9NSVVNX2lvc3VyZmFjZQorICAgIHZvaWQgdGV4SW1hZ2VJT1N1cmZhY2Uy
RENIUk9NSVVNKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCB3aWR0aCwgR0MzRGludCBoZWlnaHQs
IEdDM0R1aW50IGlvU3VyZmFjZUlkLCBHQzNEdWludCBwbGFuZSk7CisKIHByaXZhdGU6CiAgICAg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKFdlYktpdDo6V2ViVmlld0ltcGwqLCBQYXNzT3duUHRy
PFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRh
aW5lckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCShyZXZpc2lvbiAxMDEwMTApCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQ3LDYgKzM0NywyNSBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnNldEJh
Y2tpbmdUCiAjZW5kaWYKIH0KIAordm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpzZXRCYWNr
aW5nSU9TdXJmYWNlSWQoaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlvU3VyZmFjZUlkKQoreworI2lm
IE9TKERBUldJTikgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHVpbnQzMl90
IGN1cnJlbnRJZCA9IG1fcGxhdGZvcm1MYXllci0+Z2V0SU9TdXJmYWNlSWQoKTsKKyAgICBpZiAo
aW9TdXJmYWNlSWQgPT0gY3VycmVudElkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BsYXRm
b3JtTGF5ZXItPnNldElPU3VyZmFjZVByb3BlcnRpZXMod2lkdGgsIGhlaWdodCwgaW9TdXJmYWNl
SWQpOworCisgICAgLy8gSWYgYW55b25lIG9mIHRoZSBJRHMgaXMgemVybyB3ZSBuZWVkIHRvIHN3
aXRjaCBiZXR3ZWVuIGhhcmR3YXJlCisgICAgLy8gYW5kIHNvZnR3YXJlIGNvbXBvc2l0aW5nLiBU
aGlzIGlzIGRvbmUgYnkgdHJpZ2dlcmluZyBhIHN0eWxlIHJlY2FsYworICAgIC8vIG9uIHRoZSBj
b250YWluZXIgZWxlbWVudC4KKyAgICBpZiAoIShpb1N1cmZhY2VJZCAqIGN1cnJlbnRJZCkpCisg
ICAgICAgIG1fZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhXZWJDb3JlOjpTeW50aGV0aWNT
dHlsZUNoYW5nZSk7CisjZW5kaWYKK30KKwogdm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpj
b21taXRCYWNraW5nVGV4dHVyZSgpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpAQCAtNDU2LDcgKzQ3NSw3IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6d2lsbERl
c3Ryb3kKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBXZWJDb3JlOjpMYXllckNo
cm9taXVtKiBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyLT50ZXh0dXJlSWQoKSA/IG1fcGxhdGZvcm1MYXll
ci5nZXQoKSA6IDA7CisgICAgcmV0dXJuIChtX3BsYXRmb3JtTGF5ZXItPnRleHR1cmVJZCgpIHx8
IG1fcGxhdGZvcm1MYXllci0+Z2V0SU9TdXJmYWNlSWQoKSkgPyBtX3BsYXRmb3JtTGF5ZXIuZ2V0
KCkgOiAwOwogfQogI2VuZGlmCiAKQEAgLTU4NSw3ICs2MDQsNyBAQCB2b2lkIFdlYlBsdWdpbkNv
bnRhaW5lckltcGw6OmhhbmRsZUtleWJvCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICh3ZWJF
dmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6OktleURvd24pIHsKLSNpZiBkZWZpbmVkKE9TX01B
Q09TWCkKKyNpZiBPUyhEQVJXSU4pCiAgICAgICAgIGlmICh3ZWJFdmVudC5tb2RpZmllcnMgPT0g
V2ViSW5wdXRFdmVudDo6TWV0YUtleQogI2Vsc2UKICAgICAgICAgaWYgKHdlYkV2ZW50Lm1vZGlm
aWVycyA9PSBXZWJJbnB1dEV2ZW50OjpDb250cm9sS2V5CkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oCShyZXZpc2lvbiAx
MDEwMTApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJ
bXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxSZWN0KGludCBkeCwgaW50IGR5LCBjb25zdCBXZWJSZWN0Jik7CiAgICAg
dmlydHVhbCB2b2lkIHJlcG9ydEdlb21ldHJ5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tp
bmdUZXh0dXJlSWQodW5zaWduZWQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNraW5nSU9TdXJm
YWNlSWQoaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGlvU3VyZmFjZUlkKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0QmFja2luZ1RleHR1cmUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTY3JpcHRPYmplY3RzKCk7CiAgICAgdmlydHVhbCBO
UE9iamVjdCogc2NyaXB0YWJsZU9iamVjdEZvckVsZW1lbnQoKTsK
</data>
<flag name="review"
          id="115422"
          type_id="1"
          status="+"
          setter="senorblanco"
    />
          </attachment>
      

    </bug>

</bugzilla>