<?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>182762</bug_id>
          
          <creation_ts>2018-02-13 19:19:27 -0800</creation_ts>
          <short_desc>[RenderTreeBuilder] Move RenderElement::takeChild() to RenderTreeBuilder</short_desc>
          <delta_ts>2018-02-14 09:11:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1398904</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-02-13 19:19:27 -0800</bug_when>
    <thetext>It means no more takeChild() mutation logic in the renderers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398905</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-13 19:19:54 -0800</bug_when>
    <thetext>&lt;rdar://problem/37523756&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398907</commentid>
    <comment_count>2</comment_count>
      <attachid>333760</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-02-13 19:27:04 -0800</bug_when>
    <thetext>Created attachment 333760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398987</commentid>
    <comment_count>3</comment_count>
      <attachid>333760</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-02-13 23:09:39 -0800</bug_when>
    <thetext>Comment on attachment 333760
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        This patch removes the remaining takeChild() related mutation logic from the renderers.

Yay!

&gt; Source/WebCore/rendering/updating/RenderTreeBuilder.cpp:571
&gt; +RenderPtr&lt;RenderObject&gt; RenderTreeBuilder::takeChildFromRenderElement(RenderElement&amp; parent, RenderObject&amp; child)

The order of the parameters does not match the order implied by the name of this function. We should swap the parameters such that this function takes the child as the first argument and the parent as the second.

&gt; Source/WebCore/rendering/updating/RenderTreeBuilder.cpp:586
&gt; +        // We only repaint |oldChild| if we have a RenderLayer as its visual overflow may not be tracked by its parent.

oldChild =&gt; child

&gt; Source/WebCore/rendering/updating/RenderTreeBuilder.cpp:602
&gt; +    // If oldChild is the start or end of the selection, then clear the selection to

Ditto.

&gt; Source/WebCore/rendering/updating/RenderTreeBuilder.cpp:612
&gt; +    // WARNING: There should be no code running between willBeRemovedFromTree and the actual removal below.

willBeRemovedFromTree =&gt; willBeRemovedFromTree()

&gt; Source/WebCore/rendering/updating/RenderTreeBuilder.cpp:613
&gt; +    // This is needed to avoid race conditions where willBeRemovedFromTree would dirty the tree&apos;s structure

Ditto.

&gt; Source/WebCore/rendering/updating/RenderTreeBuilder.cpp:614
&gt; +    // and the code running here would force an untimely rebuilding, leaving |oldChild| dangling.

oldChild =&gt; child

&gt; Source/WebCore/rendering/updating/RenderTreeBuilder.cpp:617
&gt; +    // rendererRemovedFromTree walks the whole subtree. We can improve performance

rendererRemovedFromTree =&gt; rendererRemovedFromTree()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399071</commentid>
    <comment_count>4</comment_count>
      <attachid>333803</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-02-14 08:35:23 -0800</bug_when>
    <thetext>Created attachment 333803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399072</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-02-14 08:37:24 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/rendering/updating/RenderTreeBuilder.cpp:571
&gt; &gt; +RenderPtr&lt;RenderObject&gt; RenderTreeBuilder::takeChildFromRenderElement(RenderElement&amp; parent, RenderObject&amp; child)
&gt; 
&gt; The order of the parameters does not match the order implied by the name of
&gt; this function. We should swap the parameters such that this function takes
&gt; the child as the first argument and the parent as the second.
Indeed. Since, at this point all the takeChild*() functions have this order, I&apos;d rather address this issue in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399081</commentid>
    <comment_count>6</comment_count>
      <attachid>333803</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-14 09:11:16 -0800</bug_when>
    <thetext>Comment on attachment 333803
Patch

Clearing flags on attachment: 333803

Committed r228464: &lt;https://trac.webkit.org/changeset/228464&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399082</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-14 09:11:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333760</attachid>
            <date>2018-02-13 19:27:04 -0800</date>
            <delta_ts>2018-02-14 08:35:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182762-20180213192703.patch</filename>
            <type>text/plain</type>
            <size>24983</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI4NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI2MTg1ZDY0Y2U4ZmQ0
MDFkZGY3YzJjOTRkODE2NWRkYmVmNDQ2NS4uZDBkYjcxYzIyOTcxZTE2ZjdmYTMzNmJkNTIyNDBj
NmQ3Mjc3NWJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE4LTAyLTEzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1JlbmRlclRyZWVCdWlsZGVy
XSBNb3ZlIFJlbmRlckVsZW1lbnQ6OnRha2VDaGlsZCgpIHRvIFJlbmRlclRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI3NjIKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM3NTIzNzU2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgcmVtYWluaW5n
IHRha2VDaGlsZCgpIHJlbGF0ZWQgbXV0YXRpb24gbG9naWMgZnJvbSB0aGUgcmVuZGVyZXJzLgor
CisgICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRUbyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6dGFrZUNoaWxkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnRha2VDaGlsZEludGVy
bmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvdXBk
YXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJl
ZUJ1aWxkZXI6OnRha2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRl
cjo6Y2hpbGRGbG93U3RhdGVDaGFuZ2VzQW5kQWZmZWN0c1BhcmVudEJsb2NrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjp0YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjpyZW1vdmVMZWZ0b3ZlckFu
b255bW91c0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpCbG9j
azo6dGFrZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpCbG9j
azo6ZHJvcEFub255bW91c0JveENoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJl
ZUJ1aWxkZXI6OklubGluZTo6c3BsaXRGbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRy
ZWVCdWlsZGVyOjpJbmxpbmU6OnNwbGl0SW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUcmVlQnVpbGRlcjo6SW5saW5lOjpjaGlsZEJlY2FtZU5vbklubGluZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyUnVieS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6UnVieTo6dGFrZUNoaWxkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJTVkcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OlNWRzo6dGFrZUNoaWxkKTogTGVmdG92ZXIgZnJvbSB0
aGUgcHJldmlvdXMgcGF0Y2guCisKIDIwMTgtMDItMTMgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbUmVuZGVyVHJlZUJ1aWxkZXJdIE1vdmUgUmVuZGVyQmxvY2s6
OnRha2VDaGlsZCgpIHRvIFJlbmRlclRyZWVCdWlsZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCBlMmQ2M2E5ZjMxYTJjZjhl
YzUzNDMyNDQ1N2QzN2E1ZDE1N2RhZjI4Li5iNDBiYmZkNzRmMmMyY2M3Nzc1MmI2MzlkZjMxNDY4
ODI3NTA5MGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKQEAgLTI2OTYsMTAgKzI2OTYsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6bW92ZUNoaWxkVG8oUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlckJv
eE1vZGUKICAgICBpZiAobm9ybWFsaXplQWZ0ZXJJbnNlcnRpb24gPT0gTm9ybWFsaXplQWZ0ZXJJ
bnNlcnRpb246OlllcyAmJiAodG9Cb3hNb2RlbE9iamVjdC0+aXNSZW5kZXJCbG9jaygpIHx8IHRv
Qm94TW9kZWxPYmplY3QtPmlzUmVuZGVySW5saW5lKCkpKSB7CiAgICAgICAgIC8vIFRha2VzIGNh
cmUgb2YgYWRkaW5nIHRoZSBuZXcgY2hpbGQgY29ycmVjdGx5IGlmIHRvQmxvY2sgYW5kIGZyb21C
bG9jawogICAgICAgICAvLyBoYXZlIGRpZmZlcmVudCBraW5kIG9mIGNoaWxkcmVuIChibG9jayB2
cyBpbmxpbmUpLgotICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gdGFrZUNoaWxkSW50ZXJuYWwo
KmNoaWxkKTsKKyAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGJ1aWxkZXIudGFrZUNoaWxkRnJv
bVJlbmRlckVsZW1lbnQoKnRoaXMsICpjaGlsZCk7CiAgICAgICAgIGJ1aWxkZXIuaW5zZXJ0Q2hp
bGQoKnRvQm94TW9kZWxPYmplY3QsIFdURk1vdmUoY2hpbGRUb01vdmUpLCBiZWZvcmVDaGlsZCk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IHRha2VDaGlsZEludGVy
bmFsKCpjaGlsZCk7CisgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSBidWlsZGVyLnRha2VDaGls
ZEZyb21SZW5kZXJFbGVtZW50KCp0aGlzLCAqY2hpbGQpOwogICAgICAgICB0b0JveE1vZGVsT2Jq
ZWN0LT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY2hpbGRUb01vdmUpLCBiZWZvcmVDaGls
ZCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
CmluZGV4IDJjZGQ3OGM5MjExNGZjMzg5YzMzM2Q1M2IxZWI2MmRlYzk1MTQ0OTYuLmQxZDM4MzVm
MmRmMDM4ZDFkZTA2YzlhYzMzOTczZjZiOWVlNjAzYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTQ4MSwxMSArNDgxLDYgQEAgdm9pZCBSZW5kZXJF
bGVtZW50OjphZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlclRyZWVCdWlsZGVyJiBi
dWlsZGVyLCBSZW4KICAgICBidWlsZGVyLmluc2VydENoaWxkKCp0aGlzLCBXVEZNb3ZlKG5ld0No
aWxkKSwgYmVmb3JlQ2hpbGQpOwogfQogCi1SZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJF
bGVtZW50Ojp0YWtlQ2hpbGQoUmVuZGVyVHJlZUJ1aWxkZXImLCBSZW5kZXJPYmplY3QmIG9sZENo
aWxkKQotewotICAgIHJldHVybiB0YWtlQ2hpbGRJbnRlcm5hbChvbGRDaGlsZCk7Ci19Ci0KIHZv
aWQgUmVuZGVyRWxlbWVudDo6cmVtb3ZlQW5kRGVzdHJveUNoaWxkKFJlbmRlclRyZWVCdWlsZGVy
JiBidWlsZGVyLCBSZW5kZXJPYmplY3QmIG9sZENoaWxkKQogewogICAgIGlmIChpczxSZW5kZXJF
bGVtZW50PihvbGRDaGlsZCkpIHsKQEAgLTU4Miw2NSArNTc3LDYgQEAgdm9pZCBSZW5kZXJFbGVt
ZW50OjppbnNlcnRDaGlsZEludGVybmFsKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxk
UHRyLCBSZW4KICAgICAgICAgbmV3Q2hpbGQtPnNldEhhc091dGxpbmVBdXRvQW5jZXN0b3IoKTsK
IH0KIAotUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyRWxlbWVudDo6dGFrZUNoaWxkSW50
ZXJuYWwoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRI
X01FU1NBR0UoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUo
KSwgIkxheW91dCBtdXN0IG5vdCBtdXRhdGUgcmVuZGVyIHRyZWUiKTsKLQotICAgIEFTU0VSVChj
YW5IYXZlQ2hpbGRyZW4oKSB8fCBjYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSk7Ci0gICAgQVNT
RVJUKG9sZENoaWxkLnBhcmVudCgpID09IHRoaXMpOwotCi0gICAgaWYgKG9sZENoaWxkLmlzRmxv
YXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94
PihvbGRDaGlsZCkucmVtb3ZlRmxvYXRpbmdPclBvc2l0aW9uZWRDaGlsZEZyb21CbG9ja0xpc3Rz
KCk7Ci0KLSAgICAvLyBTbyB0aGF0IHdlJ2xsIGdldCB0aGUgYXBwcm9wcmlhdGUgZGlydHkgYml0
IHNldCAoZWl0aGVyIHRoYXQgYSBub3JtYWwgZmxvdyBjaGlsZCBnb3QgeWFua2VkIG9yCi0gICAg
Ly8gdGhhdCBhIHBvc2l0aW9uZWQgY2hpbGQgZ290IHlhbmtlZCkuIFdlIGFsc28gcmVwYWludCwg
c28gdGhhdCB0aGUgYXJlYSBleHBvc2VkIHdoZW4gdGhlIGNoaWxkCi0gICAgLy8gZGlzYXBwZWFy
cyBnZXRzIHJlcGFpbnRlZCBwcm9wZXJseS4KLSAgICBpZiAoIXJlbmRlclRyZWVCZWluZ0Rlc3Ry
b3llZCgpICYmIG9sZENoaWxkLmV2ZXJIYWRMYXlvdXQoKSkgewotICAgICAgICBvbGRDaGlsZC5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICAgICAgLy8gV2Ugb25seSBy
ZXBhaW50IHxvbGRDaGlsZHwgaWYgd2UgaGF2ZSBhIFJlbmRlckxheWVyIGFzIGl0cyB2aXN1YWwg
b3ZlcmZsb3cgbWF5IG5vdCBiZSB0cmFja2VkIGJ5IGl0cyBwYXJlbnQuCi0gICAgICAgIGlmIChv
bGRDaGlsZC5pc0JvZHkoKSkKLSAgICAgICAgICAgIHZpZXcoKS5yZXBhaW50Um9vdENvbnRlbnRz
KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9sZENoaWxkLnJlcGFpbnQoKTsKLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgbGluZSBib3ggd3JhcHBlciwgZGVsZXRlIGl0LgotICAg
IGlmIChpczxSZW5kZXJCb3g+KG9sZENoaWxkKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94
PihvbGRDaGlsZCkuZGVsZXRlTGluZUJveFdyYXBwZXIoKTsKLSAgICBlbHNlIGlmIChpczxSZW5k
ZXJMaW5lQnJlYWs+KG9sZENoaWxkKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFr
PihvbGRDaGlsZCkuZGVsZXRlSW5saW5lQm94V3JhcHBlcigpOwotICAgIAotICAgIGlmICghcmVu
ZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkgJiYgaXM8UmVuZGVyRmxleGlibGVCb3g+KHRoaXMpICYm
ICFvbGRDaGlsZC5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgb2xkQ2hpbGQu
aXNCb3goKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHRoaXMpLT5jbGVh
ckNhY2hlZENoaWxkSW50cmluc2ljQ29udGVudExvZ2ljYWxIZWlnaHQoZG93bmNhc3Q8UmVuZGVy
Qm94PihvbGRDaGlsZCkpOwotCi0gICAgLy8gSWYgb2xkQ2hpbGQgaXMgdGhlIHN0YXJ0IG9yIGVu
ZCBvZiB0aGUgc2VsZWN0aW9uLCB0aGVuIGNsZWFyIHRoZSBzZWxlY3Rpb24gdG8KLSAgICAvLyBh
dm9pZCBwcm9ibGVtcyBvZiBpbnZhbGlkIHBvaW50ZXJzLgotICAgIGlmICghcmVuZGVyVHJlZUJl
aW5nRGVzdHJveWVkKCkgJiYgb2xkQ2hpbGQuaXNTZWxlY3Rpb25Cb3JkZXIoKSkKLSAgICAgICAg
ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZXROZWVkc1NlbGVjdGlvblVwZGF0ZSgpOwotCi0gICAgaWYg
KCFyZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKLSAgICAgICAgb2xkQ2hpbGQud2lsbEJlUmVt
b3ZlZEZyb21UcmVlKCk7Ci0KLSAgICBvbGRDaGlsZC5yZXNldEZyYWdtZW50ZWRGbG93U3RhdGVP
blJlbW92YWwoKTsKLQotICAgIC8vIFdBUk5JTkc6IFRoZXJlIHNob3VsZCBiZSBubyBjb2RlIHJ1
bm5pbmcgYmV0d2VlbiB3aWxsQmVSZW1vdmVkRnJvbVRyZWUgYW5kIHRoZSBhY3R1YWwgcmVtb3Zh
bCBiZWxvdy4KLSAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMg
d2hlcmUgd2lsbEJlUmVtb3ZlZEZyb21UcmVlIHdvdWxkIGRpcnR5IHRoZSB0cmVlJ3Mgc3RydWN0
dXJlCi0gICAgLy8gYW5kIHRoZSBjb2RlIHJ1bm5pbmcgaGVyZSB3b3VsZCBmb3JjZSBhbiB1bnRp
bWVseSByZWJ1aWxkaW5nLCBsZWF2aW5nIHxvbGRDaGlsZHwgZGFuZ2xpbmcuCi0gICAgYXV0byBj
aGlsZFRvVGFrZSA9IGRldGFjaFJlbmRlcmVySW50ZXJuYWwob2xkQ2hpbGQpOwotCi0gICAgLy8g
cmVuZGVyZXJSZW1vdmVkRnJvbVRyZWUgd2Fsa3MgdGhlIHdob2xlIHN1YnRyZWUuIFdlIGNhbiBp
bXByb3ZlIHBlcmZvcm1hbmNlCi0gICAgLy8gYnkgc2tpcHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVz
dHJveWluZyB0aGUgZW50aXJlIHRyZWUuCi0gICAgaWYgKCFyZW5kZXJUcmVlQmVpbmdEZXN0cm95
ZWQoKSAmJiBpczxSZW5kZXJFbGVtZW50PigqY2hpbGRUb1Rha2UpKQotICAgICAgICBSZW5kZXJD
b3VudGVyOjpyZW5kZXJlclJlbW92ZWRGcm9tVHJlZShkb3duY2FzdDxSZW5kZXJFbGVtZW50Pigq
Y2hpbGRUb1Rha2UpKTsKLQotICAgIGlmICghcmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpIHsK
LSAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FY
T2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQodGhpcyk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGNoaWxkVG9UYWtlOwotfQotCiBSZW5kZXJCbG9jayogUmVu
ZGVyRWxlbWVudDo6Y29udGFpbmluZ0Jsb2NrRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7CiAg
ICAgYXV0byogcmVuZGVyZXIgPSBwYXJlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5oCmluZGV4IGFmZWE1MTIwM2I5ZTY1MmFiMGI4NzJlMGMyNTRlYzI3MmQzYmVm
NjkuLmNiOGM1OGI2M2Y5NjVlZDkzMmFlZTExY2E5NjM5MDVmZmQ1NTEzMTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaApAQCAtODksNyArODksNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZChSZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+LCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihSZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7Ci0gICAg
dmlydHVhbCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtlQ2hpbGQoUmVuZGVyVHJlZUJ1aWxk
ZXImLCBSZW5kZXJPYmplY3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCByZW1vdmVB
bmREZXN0cm95Q2hpbGQoUmVuZGVyVHJlZUJ1aWxkZXImLCBSZW5kZXJPYmplY3QmKTsKIAogICAg
IC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gdGhlIHJlbmRlciB0cmVl
IGhpZXJhcmNoeSBjaGFuZ2VzIHRvIG1ha2Ugc3VyZSBsYXllcnMgZ2V0CkBAIC0xMDEsNyArMTAw
LDYgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBmaW5kTmV4dExheWVyKFJlbmRlckxheWVy
KiBwYXJlbnRMYXllciwgUmVuZGVyT2JqZWN0KiBzdGFydFBvaW50LCBib29sIGNoZWNrUGFyZW50
ID0gdHJ1ZSk7CiAKICAgICB2b2lkIGluc2VydENoaWxkSW50ZXJuYWwoUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4sIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwotICAgIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IHRha2VDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCYpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKIAogICAgIHZpcnR1YWwgUmVuZGVyRWxlbWVudCogaG92ZXJBbmNlc3RvcigpIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggZDU0YzE5MDg3
MzUyZGNjODA3NDg2ZWI2MTZjZWMyZDk3NTZiYzA5ZS4uNDcyYTU5NGEyNzJlNmI1ZGU2NDkwYzA3
YzFkOTQxODI4YjNjYjhhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aApAQCAtNzc2LDYgKzc3Niw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG91dGxpbmVCb3Vu
ZHNGb3JSZXBhaW50KG51bGxwdHIpOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVS
ZW1vdmVkRnJvbVRyZWUoKTsKKyAgICB2b2lkIHJlc2V0RnJhZ21lbnRlZEZsb3dTdGF0ZU9uUmVt
b3ZhbCgpOworCiBwcm90ZWN0ZWQ6CiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucy4gRGFuZ2Vyb3VzIHRvIHVzZSEK
QEAgLTc5MSw3ICs3OTQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZURl
c3Ryb3llZChSZW5kZXJUcmVlQnVpbGRlciYpOwogCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVk
SW50b1RyZWUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21UcmVlKCk7CiAK
ICAgICB2b2lkIHNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0Qml0KGJvb2wgYikgeyBt
X2JpdGZpZWxkcy5zZXROZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dChiKTsgfQogICAgIHZv
aWQgc2V0Tm9ybWFsQ2hpbGROZWVkc0xheW91dEJpdChib29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0
Tm9ybWFsQ2hpbGROZWVkc0xheW91dChiKTsgfQpAQCAtODAyLDcgKzgwNCw2IEBAIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVCb3JkZXJTdHlsZUNvbG9yKGNvbnN0IEVCb3Jk
ZXJTdHlsZSYsIGNvbnN0IEJveFNpZGUmLCBDb2xvciYpOwogCiAgICAgdm9pZCBpbml0aWFsaXpl
RnJhZ21lbnRlZEZsb3dTdGF0ZU9uSW5zZXJ0aW9uKCk7Ci0gICAgdm9pZCByZXNldEZyYWdtZW50
ZWRGbG93U3RhdGVPblJlbW92YWwoKTsKICAgICBzdGF0aWMgRnJhZ21lbnRlZEZsb3dTdGF0ZSBj
b21wdXRlZEZyYWdtZW50ZWRGbG93U3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAKIHByaXZh
dGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVCdWlsZGVyLmNwcAppbmRleCBiODA1MmJiMzdlYThiN2MyNzVlY2ZhNmUyN2QwNTI0ZjYx
ZWZjZjdkLi4xZmFhYWI5MmU1YTI4NGZlYjEwZjQ1NDQ4MDdmOTQ2OTNlMzE0MzI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVp
bGRlci5jcHAKQEAgLTI2LDkgKzI2LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKIAorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAi
UmVuZGVyQnV0dG9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQ291bnRlci5oIgogI2luY2x1ZGUgIlJl
bmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJHcmlkLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJSdWJ5LmgiCiAjaW5jbHVkZSAiUmVuZGVyUnVieUJhc2UuaCIKQEAgLTIzMCw3ICsyMzUsNyBA
QCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJUcmVlQnVpbGRlcjo6dGFrZUNoaWxkKFJl
bmRlckVsZW1lbnQmIHBhcmVudCwgUmVuZAogICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocGFyZW50
KSkKICAgICAgICAgcmV0dXJuIGJsb2NrQnVpbGRlcigpLnRha2VDaGlsZChkb3duY2FzdDxSZW5k
ZXJCbG9jaz4ocGFyZW50KSwgY2hpbGQpOwogCi0gICAgcmV0dXJuIHBhcmVudC50YWtlQ2hpbGQo
KnRoaXMsIGNoaWxkKTsKKyAgICByZXR1cm4gdGFrZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQocGFy
ZW50LCBjaGlsZCk7CiB9CiAKIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6Omluc2VydENoaWxkKFJl
bmRlclRyZWVQb3NpdGlvbiYgcG9zaXRpb24sIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxk
KQpAQCAtMzU5LDcgKzM2NCw3IEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OmNoaWxkRmxvd1N0
YXRlQ2hhbmdlc0FuZEFmZmVjdHNQYXJlbnRCbG9jayhSZW5kZXJFbGVtZW50CiAgICAgICAgIGF1
dG8gbmV3QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCkuY3JlYXRlQW5vbnlt
b3VzQmxvY2soKTsKICAgICAgICAgYXV0byYgYmxvY2sgPSAqbmV3QmxvY2s7CiAgICAgICAgIHBh
cmVudC0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld0Jsb2NrKSwgJmNoaWxkKTsKLSAg
ICAgICAgYXV0byB0aGlzVG9Nb3ZlID0gcGFyZW50LT50YWtlQ2hpbGRJbnRlcm5hbChjaGlsZCk7
CisgICAgICAgIGF1dG8gdGhpc1RvTW92ZSA9IHRha2VDaGlsZEZyb21SZW5kZXJFbGVtZW50KCpw
YXJlbnQsIGNoaWxkKTsKICAgICAgICAgYmxvY2suaW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3Zl
KHRoaXNUb01vdmUpLCBudWxscHRyKTsKICAgICB9CiB9CkBAIC01NjMsNCArNTY4LDY0IEBAIFJl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjp0YWtlQ2hpbGRGcm9tUmVu
ZGVyR3JpZChSZW5kZXJHcmlkJiBwCiAgICAgcmV0dXJuIHRha2VuQ2hpbGQ7CiB9CiAKK1JlbmRl
clB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjp0YWtlQ2hpbGRGcm9tUmVuZGVy
RWxlbWVudChSZW5kZXJFbGVtZW50JiBwYXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKCFwYXJlbnQudmlldygpLmZyYW1lVmlldygp
LmxheW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpLCAiTGF5b3V0IG11c3Qgbm90IG11dGF0ZSBy
ZW5kZXIgdHJlZSIpOworCisgICAgQVNTRVJUKHBhcmVudC5jYW5IYXZlQ2hpbGRyZW4oKSB8fCBw
YXJlbnQuY2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkpOworICAgIEFTU0VSVChjaGlsZC5wYXJl
bnQoKSA9PSAmcGFyZW50KTsKKworICAgIGlmIChjaGlsZC5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCisgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpLnJlbW92ZUZs
b2F0aW5nT3JQb3NpdGlvbmVkQ2hpbGRGcm9tQmxvY2tMaXN0cygpOworCisgICAgLy8gU28gdGhh
dCB3ZSdsbCBnZXQgdGhlIGFwcHJvcHJpYXRlIGRpcnR5IGJpdCBzZXQgKGVpdGhlciB0aGF0IGEg
bm9ybWFsIGZsb3cgY2hpbGQgZ290IHlhbmtlZCBvcgorICAgIC8vIHRoYXQgYSBwb3NpdGlvbmVk
IGNoaWxkIGdvdCB5YW5rZWQpLiBXZSBhbHNvIHJlcGFpbnQsIHNvIHRoYXQgdGhlIGFyZWEgZXhw
b3NlZCB3aGVuIHRoZSBjaGlsZAorICAgIC8vIGRpc2FwcGVhcnMgZ2V0cyByZXBhaW50ZWQgcHJv
cGVybHkuCisgICAgaWYgKCFwYXJlbnQucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkgJiYgY2hp
bGQuZXZlckhhZExheW91dCgpKSB7CisgICAgICAgIGNoaWxkLnNldE5lZWRzTGF5b3V0QW5kUHJl
ZldpZHRoc1JlY2FsYygpOworICAgICAgICAvLyBXZSBvbmx5IHJlcGFpbnQgfG9sZENoaWxkfCBp
ZiB3ZSBoYXZlIGEgUmVuZGVyTGF5ZXIgYXMgaXRzIHZpc3VhbCBvdmVyZmxvdyBtYXkgbm90IGJl
IHRyYWNrZWQgYnkgaXRzIHBhcmVudC4KKyAgICAgICAgaWYgKGNoaWxkLmlzQm9keSgpKQorICAg
ICAgICAgICAgcGFyZW50LnZpZXcoKS5yZXBhaW50Um9vdENvbnRlbnRzKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNoaWxkLnJlcGFpbnQoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBo
YXZlIGEgbGluZSBib3ggd3JhcHBlciwgZGVsZXRlIGl0LgorICAgIGlmIChpczxSZW5kZXJCb3g+
KGNoaWxkKSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94PihjaGlsZCkuZGVsZXRlTGluZUJv
eFdyYXBwZXIoKTsKKyAgICBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KGNoaWxkKSkKKyAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkuZGVsZXRlSW5saW5lQm94V3Jh
cHBlcigpOworCisgICAgaWYgKCFwYXJlbnQucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkgJiYg
aXM8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCkgJiYgIWNoaWxkLmlzRmxvYXRpbmdPck91dE9m
Rmxvd1Bvc2l0aW9uZWQoKSAmJiBjaGlsZC5pc0JveCgpKQorICAgICAgICBkb3duY2FzdDxSZW5k
ZXJGbGV4aWJsZUJveD4ocGFyZW50KS5jbGVhckNhY2hlZENoaWxkSW50cmluc2ljQ29udGVudExv
Z2ljYWxIZWlnaHQoZG93bmNhc3Q8UmVuZGVyQm94PihjaGlsZCkpOworCisgICAgLy8gSWYgb2xk
Q2hpbGQgaXMgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgc2VsZWN0aW9uLCB0aGVuIGNsZWFyIHRo
ZSBzZWxlY3Rpb24gdG8KKyAgICAvLyBhdm9pZCBwcm9ibGVtcyBvZiBpbnZhbGlkIHBvaW50ZXJz
LgorICAgIGlmICghcGFyZW50LnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpICYmIGNoaWxkLmlz
U2VsZWN0aW9uQm9yZGVyKCkpCisgICAgICAgIHBhcmVudC5mcmFtZSgpLnNlbGVjdGlvbigpLnNl
dE5lZWRzU2VsZWN0aW9uVXBkYXRlKCk7CisKKyAgICBpZiAoIXBhcmVudC5yZW5kZXJUcmVlQmVp
bmdEZXN0cm95ZWQoKSkKKyAgICAgICAgY2hpbGQud2lsbEJlUmVtb3ZlZEZyb21UcmVlKCk7CisK
KyAgICBjaGlsZC5yZXNldEZyYWdtZW50ZWRGbG93U3RhdGVPblJlbW92YWwoKTsKKworICAgIC8v
IFdBUk5JTkc6IFRoZXJlIHNob3VsZCBiZSBubyBjb2RlIHJ1bm5pbmcgYmV0d2VlbiB3aWxsQmVS
ZW1vdmVkRnJvbVRyZWUgYW5kIHRoZSBhY3R1YWwgcmVtb3ZhbCBiZWxvdy4KKyAgICAvLyBUaGlz
IGlzIG5lZWRlZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlcmUgd2lsbEJlUmVtb3ZlZEZy
b21UcmVlIHdvdWxkIGRpcnR5IHRoZSB0cmVlJ3Mgc3RydWN0dXJlCisgICAgLy8gYW5kIHRoZSBj
b2RlIHJ1bm5pbmcgaGVyZSB3b3VsZCBmb3JjZSBhbiB1bnRpbWVseSByZWJ1aWxkaW5nLCBsZWF2
aW5nIHxvbGRDaGlsZHwgZGFuZ2xpbmcuCisgICAgYXV0byBjaGlsZFRvVGFrZSA9IHBhcmVudC5k
ZXRhY2hSZW5kZXJlckludGVybmFsKGNoaWxkKTsKKworICAgIC8vIHJlbmRlcmVyUmVtb3ZlZEZy
b21UcmVlIHdhbGtzIHRoZSB3aG9sZSBzdWJ0cmVlLiBXZSBjYW4gaW1wcm92ZSBwZXJmb3JtYW5j
ZQorICAgIC8vIGJ5IHNraXBwaW5nIHRoaXMgc3RlcCB3aGVuIGRlc3Ryb3lpbmcgdGhlIGVudGly
ZSB0cmVlLgorICAgIGlmICghcGFyZW50LnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpICYmIGlz
PFJlbmRlckVsZW1lbnQ+KCpjaGlsZFRvVGFrZSkpCisgICAgICAgIFJlbmRlckNvdW50ZXI6OnJl
bmRlcmVyUmVtb3ZlZEZyb21UcmVlKGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpjaGlsZFRvVGFr
ZSkpOworCisgICAgaWYgKCFwYXJlbnQucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpIHsKKyAg
ICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gcGFyZW50LmRvY3VtZW50KCkuZXhpc3Rp
bmdBWE9iamVjdENhY2hlKCkpCisgICAgICAgICAgICBjYWNoZS0+Y2hpbGRyZW5DaGFuZ2VkKCZw
YXJlbnQpOworICAgIH0KKworICAgIHJldHVybiBjaGlsZFRvVGFrZTsKK30KKworCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRl
ci5oCmluZGV4IDFhMmNkZGNlOTAwMGJhOWM2NWI2YjBhNjQ0NmE5ZTYzMmY4YWQ5ZTUuLmIwYmQ1
ZTEzNjQ4MDU4OTA4MTcyOTcwOTQ3NjQ3OWM1OWQ3ZTZkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oCkBAIC03OCw2
ICs3OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc2VydENoaWxkVG9SZW5kZXJUYWJsZVJvdyhS
ZW5kZXJUYWJsZVJvdyYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpOwogICAgIHZvaWQgaW5zZXJ0Q2hpbGRU
b1JlbmRlck1hdGhNTEZlbmNlZChSZW5kZXJNYXRoTUxGZW5jZWQmIHBhcmVudCwgUmVuZGVyUHRy
PFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRy
KTsKIAorICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZEZyb21SZW5kZXJFbGVt
ZW50KFJlbmRlckVsZW1lbnQmIHBhcmVudCwgUmVuZGVyT2JqZWN0JiBjaGlsZCkgV0FSTl9VTlVT
RURfUkVUVVJOOworCiAgICAgYm9vbCBjaGlsZFJlcXVpcmVzVGFibGUoY29uc3QgUmVuZGVyRWxl
bWVudCYgcGFyZW50LCBjb25zdCBSZW5kZXJPYmplY3QmIGNoaWxkKTsKICAgICB2b2lkIG1ha2VD
aGlsZHJlbk5vbklubGluZShSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJPYmplY3QqIGluc2Vy
dGlvblBvaW50ID0gbnVsbHB0cik7CiAgICAgUmVuZGVyT2JqZWN0KiBzcGxpdEFub255bW91c0Jv
eGVzQXJvdW5kQ2hpbGQoUmVuZGVyQm94JiBwYXJlbnQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVCdWlsZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwCmluZGV4IDAzY2RmNWE4MjYwNDljZmQ2MGExOWI5
YTUxMzU3MTdlNzhlYTJkNGYuLjE4OWIyNzI0MDNlZDE4OTg1Zjg1OGNhNDUxOGZkZDRmZTYxYWY1
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlQnVpbGRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5jcHAKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIFJl
bmRlclRyZWVCdWlsZGVyOjpCbG9jazo6cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayhSZW5k
ZXJCbG9jayYgYW5vbnltbwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBqdXN0
IGJlIGEgbW92ZUFsbENoaWxyZW5UbyAoc2VlIHdlYmtpdC5vcmcvYi8xODI0OTUpCiAgICAgYW5v
bnltb3VzQmxvY2subW92ZUFsbENoaWxkcmVuVG9JbnRlcm5hbCgqcGFyZW50KTsKLSAgICBhdXRv
IHRvQmVEZXN0cm95ZWQgPSBwYXJlbnQtPnRha2VDaGlsZEludGVybmFsKGFub255bW91c0Jsb2Nr
KTsKKyAgICBhdXRvIHRvQmVEZXN0cm95ZWQgPSBtX2J1aWxkZXIudGFrZUNoaWxkRnJvbVJlbmRl
ckVsZW1lbnQoKnBhcmVudCwgYW5vbnltb3VzQmxvY2spOwogICAgIC8vIGFub255bW91c0Jsb2Nr
IGlzIGRlYWQgaGVyZS4KIH0KIApAQCAtMjcwLDcgKzI3MCw3IEBAIFJlbmRlclB0cjxSZW5kZXJP
YmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjpCbG9jazo6dGFrZUNoaWxkKFJlbmRlckJsb2NrJiBw
YXJlbnQsCiAgICAgLy8gTm8gbmVlZCB0byB3YXN0ZSB0aW1lIGluIG1lcmdpbmcgb3IgcmVtb3Zp
bmcgZW1wdHkgYW5vbnltb3VzIGJsb2Nrcy4KICAgICAvLyBXZSBjYW4ganVzdCBiYWlsIG91dCBp
ZiBvdXIgZG9jdW1lbnQgaXMgZ2V0dGluZyBkZXN0cm95ZWQuCiAgICAgaWYgKHBhcmVudC5yZW5k
ZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC5SZW5kZXJCb3g6
OnRha2VDaGlsZChtX2J1aWxkZXIsIG9sZENoaWxkKTsKKyAgICAgICAgcmV0dXJuIG1fYnVpbGRl
ci50YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVudChwYXJlbnQsIG9sZENoaWxkKTsKIAogICAgIC8v
IElmIHRoaXMgY2hpbGQgaXMgYSBibG9jaywgYW5kIGlmIG91ciBwcmV2aW91cyBhbmQgbmV4dCBz
aWJsaW5ncyBhcmUgYm90aCBhbm9ueW1vdXMgYmxvY2tzCiAgICAgLy8gd2l0aCBpbmxpbmUgY29u
dGVudCwgdGhlbiB3ZSBjYW4gZm9sZCB0aGUgaW5saW5lIGNvbnRlbnQgYmFjayB0b2dldGhlci4K
QEAgLTI5Myw3ICsyOTMsNyBAQCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJUcmVlQnVp
bGRlcjo6QmxvY2s6OnRha2VDaGlsZChSZW5kZXJCbG9jayYgcGFyZW50LAogICAgICAgICAgICAg
QVNTRVJUKCFpbmxpbmVDaGlsZHJlbkJsb2NrLmNvbnRpbnVhdGlvbigpKTsKICAgICAgICAgICAg
IC8vIENhY2hlIHRoaXMgdmFsdWUgYXMgaXQgbWlnaHQgZ2V0IGNoYW5nZWQgaW4gc2V0U3R5bGUo
KSBjYWxsLgogICAgICAgICAgICAgaW5saW5lQ2hpbGRyZW5CbG9jay5zZXRTdHlsZShSZW5kZXJT
dHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShwYXJlbnQuc3R5bGUoKSwgQkxP
Q0spKTsKLSAgICAgICAgICAgIGF1dG8gYmxvY2tUb01vdmUgPSBwYXJlbnQudGFrZUNoaWxkSW50
ZXJuYWwoaW5saW5lQ2hpbGRyZW5CbG9jayk7CisgICAgICAgICAgICBhdXRvIGJsb2NrVG9Nb3Zl
ID0gbV9idWlsZGVyLnRha2VDaGlsZEZyb21SZW5kZXJFbGVtZW50KHBhcmVudCwgaW5saW5lQ2hp
bGRyZW5CbG9jayk7CiAKICAgICAgICAgICAgIC8vIE5vdyBqdXN0IHB1dCB0aGUgaW5saW5lQ2hp
bGRyZW5CbG9jayBpbnNpZGUgdGhlIGJsb2NrQ2hpbGRyZW5CbG9jay4KICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBwcmV2ID09ICZpbmxpbmVDaGlsZHJlbkJsb2NrID8g
YmxvY2tDaGlsZHJlbkJsb2NrLmZpcnN0Q2hpbGQoKSA6IG51bGxwdHI7CkBAIC0zMjAsNyArMzIw
LDcgQEAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjp0
YWtlQ2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCwKIAogICAgIHBhcmVudC5pbnZhbGlkYXRlTGlu
ZUxheW91dFBhdGgoKTsKIAotICAgIGF1dG8gdGFrZW5DaGlsZCA9IHBhcmVudC5SZW5kZXJCb3g6
OnRha2VDaGlsZChtX2J1aWxkZXIsIG9sZENoaWxkKTsKKyAgICBhdXRvIHRha2VuQ2hpbGQgPSBt
X2J1aWxkZXIudGFrZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQocGFyZW50LCBvbGRDaGlsZCk7CiAK
ICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gcHJldiA/IHByZXYgOiBuZXh0OwogICAgIGlmIChj
YW5NZXJnZUFub255bW91c0Jsb2NrcyAmJiBjaGlsZCAmJiAhY2hpbGQtPnByZXZpb3VzU2libGlu
ZygpICYmICFjaGlsZC0+bmV4dFNpYmxpbmcoKSAmJiBwYXJlbnQuY2FuRHJvcEFub255bW91c0Js
b2NrQ2hpbGQoKSkgewpAQCAtMzYwLDcgKzM2MCw3IEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6
OkJsb2NrOjpkcm9wQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVy
CiAgICAgcGFyZW50LnNldENoaWxkcmVuSW5saW5lKGNoaWxkLmNoaWxkcmVuSW5saW5lKCkpOwog
ICAgIGF1dG8qIG5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmcoKTsKIAotICAgIGF1dG8g
dG9CZURlbGV0ZWQgPSBwYXJlbnQudGFrZUNoaWxkSW50ZXJuYWwoY2hpbGQpOworICAgIGF1dG8g
dG9CZURlbGV0ZWQgPSBtX2J1aWxkZXIudGFrZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQocGFyZW50
LCBjaGlsZCk7CiAgICAgY2hpbGQubW92ZUFsbENoaWxkcmVuVG8obV9idWlsZGVyLCAmcGFyZW50
LCBuZXh0U2libGluZywgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFmdGVySW5zZXJ0
aW9uOjpObyk7CiAgICAgLy8gRGVsZXRlIHRoZSBub3ctZW1wdHkgYmxvY2sncyBsaW5lcyBhbmQg
bnVrZSBpdC4KICAgICBjaGlsZC5kZWxldGVMaW5lcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVySW5saW5lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlcklubGluZS5j
cHAKaW5kZXggYTMwMTZkNDBiOTM5OTg3ODE4MTkwOGM5NzU5MjJkYjhlYmU0MzlkMC4uZGM3ZGY2
NGU1YzY2ODAyYTJlZmYyZTk1YmM4ZjE2NWI3NzA0ODJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVySW5saW5lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJJbmxp
bmUuY3BwCkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6SW5saW5l
OjpzcGxpdEZsb3coUmVuZGVySW5saW5lJiBwYXJlbnQsIFJlbmRlck9iamVjdCogYmUKICAgICAg
ICAgd2hpbGUgKG8pIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbm8gPSBvOwogICAgICAg
ICAgICAgbyA9IG5vLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92
ZSA9IGJsb2NrLT50YWtlQ2hpbGRJbnRlcm5hbCgqbm8pOworICAgICAgICAgICAgYXV0byBjaGls
ZFRvTW92ZSA9IG1fYnVpbGRlci50YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVudCgqYmxvY2ssICpu
byk7CiAgICAgICAgICAgICBwcmUtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjaGlsZFRv
TW92ZSksIG51bGxwdHIpOwogICAgICAgICAgICAgbm8tPnNldE5lZWRzTGF5b3V0QW5kUHJlZldp
ZHRoc1JlY2FsYygpOwogICAgICAgICB9CkBAIC0zMDUsNyArMzA1LDcgQEAgdm9pZCBSZW5kZXJU
cmVlQnVpbGRlcjo6SW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVySW5saW5lJiBwYXJlbnQsIFJl
bmRlckJsb2NrKgogICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGFub255bW91cyB3cmFw
cGVyIGhhcyBtdWx0aXBsZSBjaGlsZHJlbiwgd2UgZW5kIHVwIHRyYXZlcnNpbmcgdXAgdG8gdGhl
IHRvcG1vc3Qgd3JhcHBlcgogICAgICAgICAgICAgLy8gZXZlcnkgdGltZSwgd2hpY2ggaXMgYSBi
aXQgd2FzdGVmdWwuCiAgICAgICAgIH0KLSAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IHJlbmRl
cmVyVG9Nb3ZlLT5wYXJlbnQoKS0+dGFrZUNoaWxkSW50ZXJuYWwoKnJlbmRlcmVyVG9Nb3ZlKTsK
KyAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IG1fYnVpbGRlci50YWtlQ2hpbGRGcm9tUmVuZGVy
RWxlbWVudCgqcmVuZGVyZXJUb01vdmUtPnBhcmVudCgpLCAqcmVuZGVyZXJUb01vdmUpOwogICAg
ICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihtX2J1aWxkZXIs
IFdURk1vdmUoY2hpbGRUb01vdmUpKTsKICAgICAgICAgcmVuZGVyZXJUb01vdmUtPnNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICByZW5kZXJlclRvTW92ZSA9IG5l
eHRTaWJsaW5nOwpAQCAtMzQzLDcgKzM0Myw3IEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6Oklu
bGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJCbG9jayoKICAg
ICAgICAgICAgIC8vICphZnRlciogY3VycmVudENoaWxkIGFuZCBhcHBlbmQgdGhlbSBhbGwgdG8g
dGhlIGNsb25lLgogICAgICAgICAgICAgZm9yIChhdXRvKiBzaWJsaW5nID0gY3VycmVudENoaWxk
LT5uZXh0U2libGluZygpOyBzaWJsaW5nOykgewogICAgICAgICAgICAgICAgIGF1dG8qIG5leHQg
PSBzaWJsaW5nLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgIGF1dG8gY2hpbGRUb01v
dmUgPSBjdXJyZW50LT50YWtlQ2hpbGRJbnRlcm5hbCgqc2libGluZyk7CisgICAgICAgICAgICAg
ICAgYXV0byBjaGlsZFRvTW92ZSA9IG1fYnVpbGRlci50YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVu
dCgqY3VycmVudCwgKnNpYmxpbmcpOwogICAgICAgICAgICAgICAgIGNsb25lSW5saW5lLT5hZGRD
aGlsZElnbm9yaW5nQ29udGludWF0aW9uKG1fYnVpbGRlciwgV1RGTW92ZShjaGlsZFRvTW92ZSkp
OwogICAgICAgICAgICAgICAgIHNpYmxpbmctPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1Jl
Y2FsYygpOwogICAgICAgICAgICAgICAgIHNpYmxpbmcgPSBuZXh0OwpAQCAtMzY3LDcgKzM2Nyw3
IEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlcklu
bGluZSYgcGFyZW50LCBSZW5kZXJCbG9jayoKICAgICAvLyBhbmQgcHV0IHRoZW0gaW4gdGhlIHRv
QmxvY2suCiAgICAgZm9yIChhdXRvKiBjdXJyZW50ID0gY3VycmVudENoaWxkLT5uZXh0U2libGlu
ZygpOyBjdXJyZW50OykgewogICAgICAgICBhdXRvKiBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxp
bmcoKTsKLSAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGZyb21CbG9jay0+dGFrZUNoaWxkSW50
ZXJuYWwoKmN1cnJlbnQpOworICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gbV9idWlsZGVyLnRh
a2VDaGlsZEZyb21SZW5kZXJFbGVtZW50KCpmcm9tQmxvY2ssICpjdXJyZW50KTsKICAgICAgICAg
dG9CbG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgbnVsbHB0
cik7CiAgICAgICAgIGN1cnJlbnQgPSBuZXh0OwogICAgIH0KQEAgLTM4OSw3ICszODksNyBAQCB2
b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpJbmxpbmU6OmNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRl
cklubGluZSYgcGFyZW50LCBSZW5kZQogICAgICAgICBvbGRDb250aW51YXRpb24tPnJlbW92ZUZy
b21Db250aW51YXRpb25DaGFpbigpOwogICAgIG5ld0JveC0+aW5zZXJ0SW50b0NvbnRpbnVhdGlv
bkNoYWluQWZ0ZXIocGFyZW50KTsKICAgICBhdXRvKiBiZWZvcmVDaGlsZCA9IGNoaWxkLm5leHRT
aWJsaW5nKCk7Ci0gICAgYXV0byByZW1vdmVkQ2hpbGQgPSBwYXJlbnQudGFrZUNoaWxkSW50ZXJu
YWwoY2hpbGQpOworICAgIGF1dG8gcmVtb3ZlZENoaWxkID0gbV9idWlsZGVyLnRha2VDaGlsZEZy
b21SZW5kZXJFbGVtZW50KHBhcmVudCwgY2hpbGQpOwogICAgIHNwbGl0RmxvdyhwYXJlbnQsIGJl
Zm9yZUNoaWxkLCBXVEZNb3ZlKG5ld0JveCksIFdURk1vdmUocmVtb3ZlZENoaWxkKSwgb2xkQ29u
dGludWF0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyUnVieS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmNwcAppbmRleCAzNzQ5YTY1N2NjMzZj
MGVlODg4MGFlODE1ZWUxYzdhYjdhODA3NjlmLi4zYzcwM2YwODU4MmExNTdjZDQ3YTUyMmE1MTk1
OWI5OWY5NzViNzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmNwcApAQCAtMzgyLDcgKzM4Miw3IEBA
IFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjpSdWJ5Ojp0YWtlQ2hp
bGQoUmVuZGVyUnVieUFzSW5saW5lJiBwCiAjaWZuZGVmIEFTU0VSVF9ESVNBQkxFRAogICAgICAg
ICBBU1NFUlQoaXNSdWJ5Q2hpbGRGb3JOb3JtYWxSZW1vdmFsKGNoaWxkKSk7CiAjZW5kaWYKLSAg
ICAgICAgcmV0dXJuIHBhcmVudC5SZW5kZXJJbmxpbmU6OnRha2VDaGlsZChtX2J1aWxkZXIsIGNo
aWxkKTsKKyAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVu
dChwYXJlbnQsIGNoaWxkKTsKICAgICB9CiAgICAgLy8gSWYgdGhlIGNoaWxkJ3MgcGFyZW50IGlz
IGFuIGFub3ltb3VzIGJsb2NrIChtdXN0IGJlIGdlbmVyYXRlZCA6YmVmb3JlLzphZnRlciBjb250
ZW50KQogICAgIC8vIGp1c3QgdXNlIHRoZSBibG9jaydzIHJlbW92ZSBtZXRob2QuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJT
VkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWls
ZGVyU1ZHLmNwcAppbmRleCA1N2FjNzY5ZDE3ZGFlOTk5NGRlN2QyOWE2NWY0NzVkN2RmMDM2ZjZl
Li5jNjdjZmRkYzJiNDM0NjU2OGFkNTVmM2UzYzViNzg3ODk4M2E5NTAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJTVkcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRl
clNWRy5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVy
VHJlZUJ1aWxkZXI6OlNWRzo6dGFrZUNoaWxkKFJlbmRlclNWR1RleHQmIHBhcmVudCwKIAogICAg
IFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyosIDI+IGFmZmVjdGVkQXR0cmlidXRlczsK
ICAgICBwYXJlbnQuc3VidHJlZUNoaWxkV2lsbEJlUmVtb3ZlZCgmY2hpbGQsIGFmZmVjdGVkQXR0
cmlidXRlcyk7Ci0gICAgYXV0byB0YWtlbkNoaWxkID0gcGFyZW50LlJlbmRlckJsb2NrRmxvdzo6
dGFrZUNoaWxkKG1fYnVpbGRlciwgY2hpbGQpOworICAgIGF1dG8gdGFrZW5DaGlsZCA9IG1fYnVp
bGRlci5ibG9ja0J1aWxkZXIoKS50YWtlQ2hpbGQocGFyZW50LCBjaGlsZCk7CiAgICAgcGFyZW50
LnN1YnRyZWVDaGlsZFdhc1JlbW92ZWQoYWZmZWN0ZWRBdHRyaWJ1dGVzKTsKICAgICByZXR1cm4g
dGFrZW5DaGlsZDsKIH0KQEAgLTg5LDExICs4OSwxMSBAQCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0
PiBSZW5kZXJUcmVlQnVpbGRlcjo6U1ZHOjp0YWtlQ2hpbGQoUmVuZGVyU1ZHSW5saW5lJiBwYXJl
bgogCiAgICAgYXV0byogdGV4dEFuY2VzdG9yID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVy
U1ZHVGV4dEFuY2VzdG9yKHBhcmVudCk7CiAgICAgaWYgKCF0ZXh0QW5jZXN0b3IpCi0gICAgICAg
IHJldHVybiBwYXJlbnQuUmVuZGVyRWxlbWVudDo6dGFrZUNoaWxkKG1fYnVpbGRlciwgY2hpbGQp
OworICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRha2VDaGlsZEZyb21SZW5kZXJFbGVtZW50KHBh
cmVudCwgY2hpbGQpOwogCiAgICAgVmVjdG9yPFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiwgMj4g
YWZmZWN0ZWRBdHRyaWJ1dGVzOwogICAgIHRleHRBbmNlc3Rvci0+c3VidHJlZUNoaWxkV2lsbEJl
UmVtb3ZlZCgmY2hpbGQsIGFmZmVjdGVkQXR0cmlidXRlcyk7Ci0gICAgYXV0byB0YWtlbkNoaWxk
ID0gcGFyZW50LlJlbmRlckVsZW1lbnQ6OnRha2VDaGlsZChtX2J1aWxkZXIsIGNoaWxkKTsKKyAg
ICBhdXRvIHRha2VuQ2hpbGQgPSBtX2J1aWxkZXIudGFrZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQo
cGFyZW50LCBjaGlsZCk7CiAgICAgdGV4dEFuY2VzdG9yLT5zdWJ0cmVlQ2hpbGRXYXNSZW1vdmVk
KGFmZmVjdGVkQXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIHRha2VuQ2hpbGQ7CiB9CkBAIC0xMDEs
MTMgKzEwMSwxMyBAQCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJUcmVlQnVpbGRlcjo6
U1ZHOjp0YWtlQ2hpbGQoUmVuZGVyU1ZHSW5saW5lJiBwYXJlbgogUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gUmVuZGVyVHJlZUJ1aWxkZXI6OlNWRzo6dGFrZUNoaWxkKFJlbmRlclNWR0NvbnRhaW5l
ciYgcGFyZW50LCBSZW5kZXJPYmplY3QmIGNoaWxkKQogewogICAgIFNWR1Jlc291cmNlc0NhY2hl
OjpjbGllbnRXaWxsQmVSZW1vdmVkRnJvbVRyZWUoY2hpbGQpOwotICAgIHJldHVybiBwYXJlbnQu
UmVuZGVyRWxlbWVudDo6dGFrZUNoaWxkKG1fYnVpbGRlciwgY2hpbGQpOworICAgIHJldHVybiBt
X2J1aWxkZXIudGFrZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQocGFyZW50LCBjaGlsZCk7CiB9CiAK
IFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjpTVkc6OnRha2VDaGls
ZChSZW5kZXJTVkdSb290JiBwYXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpCiB7CiAgICAgU1ZH
UmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJlZShjaGlsZCk7Ci0gICAg
cmV0dXJuIHBhcmVudC5SZW5kZXJFbGVtZW50Ojp0YWtlQ2hpbGQobV9idWlsZGVyLCBjaGlsZCk7
CisgICAgcmV0dXJuIG1fYnVpbGRlci50YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVudChwYXJlbnQs
IGNoaWxkKTsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333803</attachid>
            <date>2018-02-14 08:35:23 -0800</date>
            <delta_ts>2018-02-14 09:11:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182762-20180214083546.patch</filename>
            <type>text/plain</type>
            <size>24971</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI4NDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY5NDA1MmI3NDY4Zjdi
ZDNjZjBlODcyYjBmMDU0MjQ3YzMzMzYwYi4uYjdmNjVkNWE3ZDM0N2NhZjgzNzI2MmNiZDU0YTVi
ZDMxYmNiM2UwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE4LTAyLTE0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1JlbmRlclRyZWVCdWlsZGVy
XSBNb3ZlIFJlbmRlckVsZW1lbnQ6OnRha2VDaGlsZCgpIHRvIFJlbmRlclRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI3NjIKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM3NTIzNzU2PgorCisgICAgICAgIFJldmlld2VkIGJ5IERh
bmllbCBCYXRlcy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlIHJlbWFpbmluZyB0
YWtlQ2hpbGQoKSByZWxhdGVkIG11dGF0aW9uIGxvZ2ljIGZyb20gdGhlIHJlbmRlcmVycy4KKwor
ICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6bW92ZUNoaWxkVG8pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnRha2VDaGlsZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp0YWtlQ2hpbGRJbnRlcm5h
bCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0
aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVC
dWlsZGVyOjp0YWtlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6
OmNoaWxkRmxvd1N0YXRlQ2hhbmdlc0FuZEFmZmVjdHNQYXJlbnRCbG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6dGFrZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oOgorICAgICAg
ICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckJsb2NrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpCbG9jazo6cmVtb3ZlTGVmdG92ZXJBbm9u
eW1vdXNCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6
OnRha2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6
OmRyb3BBbm9ueW1vdXNCb3hDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVCdWlsZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVC
dWlsZGVyOjpJbmxpbmU6OnNwbGl0Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVl
QnVpbGRlcjo6SW5saW5lOjpzcGxpdElubGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VHJlZUJ1aWxkZXI6OklubGluZTo6Y2hpbGRCZWNhbWVOb25JbmxpbmUpOgorICAgICAgICAqIHJl
bmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlclJ1YnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OlJ1Ynk6OnRha2VDaGlsZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyU1ZHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRyZWVCdWlsZGVyOjpTVkc6OnRha2VDaGlsZCk6IExlZnRvdmVyIGZyb20gdGhl
IHByZXZpb3VzIHBhdGNoLgorCiAyMDE4LTAyLTEzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMjgzMTMpOiBNZW1idXN0ZXIgfCBtYWNP
UyB8IEFsbCBEZXZpY2VzIHwgMS41IE1CCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCBlMmQ2M2E5ZjMxYTJjZjhlYzUzNDMyNDQ1
N2QzN2E1ZDE1N2RhZjI4Li5iNDBiYmZkNzRmMmMyY2M3Nzc1MmI2MzlkZjMxNDY4ODI3NTA5MGM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKQEAgLTI2OTYsMTAgKzI2OTYsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
bW92ZUNoaWxkVG8oUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlckJveE1vZGUKICAg
ICBpZiAobm9ybWFsaXplQWZ0ZXJJbnNlcnRpb24gPT0gTm9ybWFsaXplQWZ0ZXJJbnNlcnRpb246
OlllcyAmJiAodG9Cb3hNb2RlbE9iamVjdC0+aXNSZW5kZXJCbG9jaygpIHx8IHRvQm94TW9kZWxP
YmplY3QtPmlzUmVuZGVySW5saW5lKCkpKSB7CiAgICAgICAgIC8vIFRha2VzIGNhcmUgb2YgYWRk
aW5nIHRoZSBuZXcgY2hpbGQgY29ycmVjdGx5IGlmIHRvQmxvY2sgYW5kIGZyb21CbG9jawogICAg
ICAgICAvLyBoYXZlIGRpZmZlcmVudCBraW5kIG9mIGNoaWxkcmVuIChibG9jayB2cyBpbmxpbmUp
LgotICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gdGFrZUNoaWxkSW50ZXJuYWwoKmNoaWxkKTsK
KyAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGJ1aWxkZXIudGFrZUNoaWxkRnJvbVJlbmRlckVs
ZW1lbnQoKnRoaXMsICpjaGlsZCk7CiAgICAgICAgIGJ1aWxkZXIuaW5zZXJ0Q2hpbGQoKnRvQm94
TW9kZWxPYmplY3QsIFdURk1vdmUoY2hpbGRUb01vdmUpLCBiZWZvcmVDaGlsZCk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IHRha2VDaGlsZEludGVybmFsKCpjaGls
ZCk7CisgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSBidWlsZGVyLnRha2VDaGlsZEZyb21SZW5k
ZXJFbGVtZW50KCp0aGlzLCAqY2hpbGQpOwogICAgICAgICB0b0JveE1vZGVsT2JqZWN0LT5pbnNl
cnRDaGlsZEludGVybmFsKFdURk1vdmUoY2hpbGRUb01vdmUpLCBiZWZvcmVDaGlsZCk7CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IDJj
ZGQ3OGM5MjExNGZjMzg5YzMzM2Q1M2IxZWI2MmRlYzk1MTQ0OTYuLmQxZDM4MzVmMmRmMDM4ZDFk
ZTA2YzlhYzMzOTczZjZiOWVlNjAzYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAKQEAgLTQ4MSwxMSArNDgxLDYgQEAgdm9pZCBSZW5kZXJFbGVtZW50Ojph
ZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlclRyZWVCdWlsZGVyJiBidWlsZGVyLCBS
ZW4KICAgICBidWlsZGVyLmluc2VydENoaWxkKCp0aGlzLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVm
b3JlQ2hpbGQpOwogfQogCi1SZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJFbGVtZW50Ojp0
YWtlQ2hpbGQoUmVuZGVyVHJlZUJ1aWxkZXImLCBSZW5kZXJPYmplY3QmIG9sZENoaWxkKQotewot
ICAgIHJldHVybiB0YWtlQ2hpbGRJbnRlcm5hbChvbGRDaGlsZCk7Ci19Ci0KIHZvaWQgUmVuZGVy
RWxlbWVudDo6cmVtb3ZlQW5kRGVzdHJveUNoaWxkKFJlbmRlclRyZWVCdWlsZGVyJiBidWlsZGVy
LCBSZW5kZXJPYmplY3QmIG9sZENoaWxkKQogewogICAgIGlmIChpczxSZW5kZXJFbGVtZW50Pihv
bGRDaGlsZCkpIHsKQEAgLTU4Miw2NSArNTc3LDYgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjppbnNl
cnRDaGlsZEludGVybmFsKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkUHRyLCBSZW4K
ICAgICAgICAgbmV3Q2hpbGQtPnNldEhhc091dGxpbmVBdXRvQW5jZXN0b3IoKTsKIH0KIAotUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyRWxlbWVudDo6dGFrZUNoaWxkSW50ZXJuYWwoUmVu
ZGVyT2JqZWN0JiBvbGRDaGlsZCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uo
IXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKSwgIkxheW91
dCBtdXN0IG5vdCBtdXRhdGUgcmVuZGVyIHRyZWUiKTsKLQotICAgIEFTU0VSVChjYW5IYXZlQ2hp
bGRyZW4oKSB8fCBjYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSk7Ci0gICAgQVNTRVJUKG9sZENo
aWxkLnBhcmVudCgpID09IHRoaXMpOwotCi0gICAgaWYgKG9sZENoaWxkLmlzRmxvYXRpbmdPck91
dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94PihvbGRDaGls
ZCkucmVtb3ZlRmxvYXRpbmdPclBvc2l0aW9uZWRDaGlsZEZyb21CbG9ja0xpc3RzKCk7Ci0KLSAg
ICAvLyBTbyB0aGF0IHdlJ2xsIGdldCB0aGUgYXBwcm9wcmlhdGUgZGlydHkgYml0IHNldCAoZWl0
aGVyIHRoYXQgYSBub3JtYWwgZmxvdyBjaGlsZCBnb3QgeWFua2VkIG9yCi0gICAgLy8gdGhhdCBh
IHBvc2l0aW9uZWQgY2hpbGQgZ290IHlhbmtlZCkuIFdlIGFsc28gcmVwYWludCwgc28gdGhhdCB0
aGUgYXJlYSBleHBvc2VkIHdoZW4gdGhlIGNoaWxkCi0gICAgLy8gZGlzYXBwZWFycyBnZXRzIHJl
cGFpbnRlZCBwcm9wZXJseS4KLSAgICBpZiAoIXJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpICYm
IG9sZENoaWxkLmV2ZXJIYWRMYXlvdXQoKSkgewotICAgICAgICBvbGRDaGlsZC5zZXROZWVkc0xh
eW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICAgICAgLy8gV2Ugb25seSByZXBhaW50IHxv
bGRDaGlsZHwgaWYgd2UgaGF2ZSBhIFJlbmRlckxheWVyIGFzIGl0cyB2aXN1YWwgb3ZlcmZsb3cg
bWF5IG5vdCBiZSB0cmFja2VkIGJ5IGl0cyBwYXJlbnQuCi0gICAgICAgIGlmIChvbGRDaGlsZC5p
c0JvZHkoKSkKLSAgICAgICAgICAgIHZpZXcoKS5yZXBhaW50Um9vdENvbnRlbnRzKCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG9sZENoaWxkLnJlcGFpbnQoKTsKLSAgICB9Ci0KLSAgICAv
LyBJZiB3ZSBoYXZlIGEgbGluZSBib3ggd3JhcHBlciwgZGVsZXRlIGl0LgotICAgIGlmIChpczxS
ZW5kZXJCb3g+KG9sZENoaWxkKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94PihvbGRDaGls
ZCkuZGVsZXRlTGluZUJveFdyYXBwZXIoKTsKLSAgICBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJl
YWs+KG9sZENoaWxkKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPihvbGRDaGls
ZCkuZGVsZXRlSW5saW5lQm94V3JhcHBlcigpOwotICAgIAotICAgIGlmICghcmVuZGVyVHJlZUJl
aW5nRGVzdHJveWVkKCkgJiYgaXM8UmVuZGVyRmxleGlibGVCb3g+KHRoaXMpICYmICFvbGRDaGls
ZC5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgb2xkQ2hpbGQuaXNCb3goKSkK
LSAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHRoaXMpLT5jbGVhckNhY2hlZENo
aWxkSW50cmluc2ljQ29udGVudExvZ2ljYWxIZWlnaHQoZG93bmNhc3Q8UmVuZGVyQm94PihvbGRD
aGlsZCkpOwotCi0gICAgLy8gSWYgb2xkQ2hpbGQgaXMgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUg
c2VsZWN0aW9uLCB0aGVuIGNsZWFyIHRoZSBzZWxlY3Rpb24gdG8KLSAgICAvLyBhdm9pZCBwcm9i
bGVtcyBvZiBpbnZhbGlkIHBvaW50ZXJzLgotICAgIGlmICghcmVuZGVyVHJlZUJlaW5nRGVzdHJv
eWVkKCkgJiYgb2xkQ2hpbGQuaXNTZWxlY3Rpb25Cb3JkZXIoKSkKLSAgICAgICAgZnJhbWUoKS5z
ZWxlY3Rpb24oKS5zZXROZWVkc1NlbGVjdGlvblVwZGF0ZSgpOwotCi0gICAgaWYgKCFyZW5kZXJU
cmVlQmVpbmdEZXN0cm95ZWQoKSkKLSAgICAgICAgb2xkQ2hpbGQud2lsbEJlUmVtb3ZlZEZyb21U
cmVlKCk7Ci0KLSAgICBvbGRDaGlsZC5yZXNldEZyYWdtZW50ZWRGbG93U3RhdGVPblJlbW92YWwo
KTsKLQotICAgIC8vIFdBUk5JTkc6IFRoZXJlIHNob3VsZCBiZSBubyBjb2RlIHJ1bm5pbmcgYmV0
d2VlbiB3aWxsQmVSZW1vdmVkRnJvbVRyZWUgYW5kIHRoZSBhY3R1YWwgcmVtb3ZhbCBiZWxvdy4K
LSAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlcmUgd2ls
bEJlUmVtb3ZlZEZyb21UcmVlIHdvdWxkIGRpcnR5IHRoZSB0cmVlJ3Mgc3RydWN0dXJlCi0gICAg
Ly8gYW5kIHRoZSBjb2RlIHJ1bm5pbmcgaGVyZSB3b3VsZCBmb3JjZSBhbiB1bnRpbWVseSByZWJ1
aWxkaW5nLCBsZWF2aW5nIHxvbGRDaGlsZHwgZGFuZ2xpbmcuCi0gICAgYXV0byBjaGlsZFRvVGFr
ZSA9IGRldGFjaFJlbmRlcmVySW50ZXJuYWwob2xkQ2hpbGQpOwotCi0gICAgLy8gcmVuZGVyZXJS
ZW1vdmVkRnJvbVRyZWUgd2Fsa3MgdGhlIHdob2xlIHN1YnRyZWUuIFdlIGNhbiBpbXByb3ZlIHBl
cmZvcm1hbmNlCi0gICAgLy8gYnkgc2tpcHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWluZyB0
aGUgZW50aXJlIHRyZWUuCi0gICAgaWYgKCFyZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSAmJiBp
czxSZW5kZXJFbGVtZW50PigqY2hpbGRUb1Rha2UpKQotICAgICAgICBSZW5kZXJDb3VudGVyOjpy
ZW5kZXJlclJlbW92ZWRGcm9tVHJlZShkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqY2hpbGRUb1Rh
a2UpKTsKLQotICAgIGlmICghcmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpIHsKLSAgICAgICAg
aWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2Fj
aGUoKSkKLSAgICAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQodGhpcyk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGNoaWxkVG9UYWtlOwotfQotCiBSZW5kZXJCbG9jayogUmVuZGVyRWxlbWVu
dDo6Y29udGFpbmluZ0Jsb2NrRm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgYXV0byog
cmVuZGVyZXIgPSBwYXJlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5oCmluZGV4IGFmZWE1MTIwM2I5ZTY1MmFiMGI4NzJlMGMyNTRlYzI3MmQzYmVmNjkuLmNiOGM1
OGI2M2Y5NjVlZDkzMmFlZTExY2E5NjM5MDVmZmQ1NTEzMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuaApAQCAtODksNyArODksNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRl
clN0eWxlJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZChSZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+LCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihSZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0No
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7Ci0gICAgdmlydHVhbCBS
ZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtlQ2hpbGQoUmVuZGVyVHJlZUJ1aWxkZXImLCBSZW5k
ZXJPYmplY3QmKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCByZW1vdmVBbmREZXN0cm95
Q2hpbGQoUmVuZGVyVHJlZUJ1aWxkZXImLCBSZW5kZXJPYmplY3QmKTsKIAogICAgIC8vIFRoZSBm
b2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gdGhlIHJlbmRlciB0cmVlIGhpZXJhcmNo
eSBjaGFuZ2VzIHRvIG1ha2Ugc3VyZSBsYXllcnMgZ2V0CkBAIC0xMDEsNyArMTAwLDYgQEAgcHVi
bGljOgogICAgIFJlbmRlckxheWVyKiBmaW5kTmV4dExheWVyKFJlbmRlckxheWVyKiBwYXJlbnRM
YXllciwgUmVuZGVyT2JqZWN0KiBzdGFydFBvaW50LCBib29sIGNoZWNrUGFyZW50ID0gdHJ1ZSk7
CiAKICAgICB2b2lkIGluc2VydENoaWxkSW50ZXJuYWwoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4s
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwotICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IHRha2VDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAog
ICAgIHZpcnR1YWwgUmVuZGVyRWxlbWVudCogaG92ZXJBbmNlc3RvcigpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggZDU0YzE5MDg3MzUyZGNjODA3
NDg2ZWI2MTZjZWMyZDk3NTZiYzA5ZS4uNDcyYTU5NGEyNzJlNmI1ZGU2NDkwYzA3YzFkOTQxODI4
YjNjYjhhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNzc2
LDYgKzc3Niw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG91dGxpbmVCb3VuZHNGb3JSZXBh
aW50KG51bGxwdHIpOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVSZW1vdmVkRnJv
bVRyZWUoKTsKKyAgICB2b2lkIHJlc2V0RnJhZ21lbnRlZEZsb3dTdGF0ZU9uUmVtb3ZhbCgpOwor
CiBwcm90ZWN0ZWQ6CiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucy4gRGFuZ2Vyb3VzIHRvIHVzZSEKQEAgLTc5MSw3
ICs3OTQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZChS
ZW5kZXJUcmVlQnVpbGRlciYpOwogCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21UcmVlKCk7CiAKICAgICB2b2lk
IHNldE5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0Qml0KGJvb2wgYikgeyBtX2JpdGZpZWxk
cy5zZXROZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dChiKTsgfQogICAgIHZvaWQgc2V0Tm9y
bWFsQ2hpbGROZWVkc0xheW91dEJpdChib29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0Tm9ybWFsQ2hp
bGROZWVkc0xheW91dChiKTsgfQpAQCAtODAyLDcgKzgwNCw2IEBAIHByb3RlY3RlZDoKICAgICBz
dGF0aWMgdm9pZCBjYWxjdWxhdGVCb3JkZXJTdHlsZUNvbG9yKGNvbnN0IEVCb3JkZXJTdHlsZSYs
IGNvbnN0IEJveFNpZGUmLCBDb2xvciYpOwogCiAgICAgdm9pZCBpbml0aWFsaXplRnJhZ21lbnRl
ZEZsb3dTdGF0ZU9uSW5zZXJ0aW9uKCk7Ci0gICAgdm9pZCByZXNldEZyYWdtZW50ZWRGbG93U3Rh
dGVPblJlbW92YWwoKTsKICAgICBzdGF0aWMgRnJhZ21lbnRlZEZsb3dTdGF0ZSBjb21wdXRlZEZy
YWdtZW50ZWRGbG93U3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAKIHByaXZhdGU6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWls
ZGVyLmNwcAppbmRleCBiODA1MmJiMzdlYThiN2MyNzVlY2ZhNmUyN2QwNTI0ZjYxZWZjZjdkLi43
MWJjNGViYThmODFkYjJiMzMxZTJlNTQ2YmE2OWU2ZDIyNjUxOTMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAK
QEAgLTI2LDkgKzI2LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VHJlZUJ1aWxkZXIuaCIKIAorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyQnV0
dG9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQ291bnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1l
bnQuaCIKICNpbmNsdWRlICJSZW5kZXJHcmlkLmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFr
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJSdWJ5Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyUnVieUJhc2UuaCIKQEAgLTIzMCw3ICsyMzUsNyBAQCBSZW5kZXJQ
dHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJUcmVlQnVpbGRlcjo6dGFrZUNoaWxkKFJlbmRlckVsZW1l
bnQmIHBhcmVudCwgUmVuZAogICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocGFyZW50KSkKICAgICAg
ICAgcmV0dXJuIGJsb2NrQnVpbGRlcigpLnRha2VDaGlsZChkb3duY2FzdDxSZW5kZXJCbG9jaz4o
cGFyZW50KSwgY2hpbGQpOwogCi0gICAgcmV0dXJuIHBhcmVudC50YWtlQ2hpbGQoKnRoaXMsIGNo
aWxkKTsKKyAgICByZXR1cm4gdGFrZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQocGFyZW50LCBjaGls
ZCk7CiB9CiAKIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6Omluc2VydENoaWxkKFJlbmRlclRyZWVQ
b3NpdGlvbiYgcG9zaXRpb24sIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkKQpAQCAtMzU5
LDcgKzM2NCw3IEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OmNoaWxkRmxvd1N0YXRlQ2hhbmdl
c0FuZEFmZmVjdHNQYXJlbnRCbG9jayhSZW5kZXJFbGVtZW50CiAgICAgICAgIGF1dG8gbmV3Qmxv
Y2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCkuY3JlYXRlQW5vbnltb3VzQmxvY2so
KTsKICAgICAgICAgYXV0byYgYmxvY2sgPSAqbmV3QmxvY2s7CiAgICAgICAgIHBhcmVudC0+aW5z
ZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld0Jsb2NrKSwgJmNoaWxkKTsKLSAgICAgICAgYXV0
byB0aGlzVG9Nb3ZlID0gcGFyZW50LT50YWtlQ2hpbGRJbnRlcm5hbChjaGlsZCk7CisgICAgICAg
IGF1dG8gdGhpc1RvTW92ZSA9IHRha2VDaGlsZEZyb21SZW5kZXJFbGVtZW50KCpwYXJlbnQsIGNo
aWxkKTsKICAgICAgICAgYmxvY2suaW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKHRoaXNUb01v
dmUpLCBudWxscHRyKTsKICAgICB9CiB9CkBAIC01NjMsNCArNTY4LDY0IEBAIFJlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjp0YWtlQ2hpbGRGcm9tUmVuZGVyR3JpZChS
ZW5kZXJHcmlkJiBwCiAgICAgcmV0dXJuIHRha2VuQ2hpbGQ7CiB9CiAKK1JlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjp0YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVudChS
ZW5kZXJFbGVtZW50JiBwYXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKCFwYXJlbnQudmlldygpLmZyYW1lVmlldygpLmxheW91dENv
bnRleHQoKS5sYXlvdXRTdGF0ZSgpLCAiTGF5b3V0IG11c3Qgbm90IG11dGF0ZSByZW5kZXIgdHJl
ZSIpOworCisgICAgQVNTRVJUKHBhcmVudC5jYW5IYXZlQ2hpbGRyZW4oKSB8fCBwYXJlbnQuY2Fu
SGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkpOworICAgIEFTU0VSVChjaGlsZC5wYXJlbnQoKSA9PSAm
cGFyZW50KTsKKworICAgIGlmIChjaGlsZC5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCisgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpLnJlbW92ZUZsb2F0aW5nT3JQ
b3NpdGlvbmVkQ2hpbGRGcm9tQmxvY2tMaXN0cygpOworCisgICAgLy8gU28gdGhhdCB3ZSdsbCBn
ZXQgdGhlIGFwcHJvcHJpYXRlIGRpcnR5IGJpdCBzZXQgKGVpdGhlciB0aGF0IGEgbm9ybWFsIGZs
b3cgY2hpbGQgZ290IHlhbmtlZCBvcgorICAgIC8vIHRoYXQgYSBwb3NpdGlvbmVkIGNoaWxkIGdv
dCB5YW5rZWQpLiBXZSBhbHNvIHJlcGFpbnQsIHNvIHRoYXQgdGhlIGFyZWEgZXhwb3NlZCB3aGVu
IHRoZSBjaGlsZAorICAgIC8vIGRpc2FwcGVhcnMgZ2V0cyByZXBhaW50ZWQgcHJvcGVybHkuCisg
ICAgaWYgKCFwYXJlbnQucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkgJiYgY2hpbGQuZXZlckhh
ZExheW91dCgpKSB7CisgICAgICAgIGNoaWxkLnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1Jl
Y2FsYygpOworICAgICAgICAvLyBXZSBvbmx5IHJlcGFpbnQgfGNoaWxkfCBpZiB3ZSBoYXZlIGEg
UmVuZGVyTGF5ZXIgYXMgaXRzIHZpc3VhbCBvdmVyZmxvdyBtYXkgbm90IGJlIHRyYWNrZWQgYnkg
aXRzIHBhcmVudC4KKyAgICAgICAgaWYgKGNoaWxkLmlzQm9keSgpKQorICAgICAgICAgICAgcGFy
ZW50LnZpZXcoKS5yZXBhaW50Um9vdENvbnRlbnRzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNoaWxkLnJlcGFpbnQoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIGEgbGluZSBi
b3ggd3JhcHBlciwgZGVsZXRlIGl0LgorICAgIGlmIChpczxSZW5kZXJCb3g+KGNoaWxkKSkKKyAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyQm94PihjaGlsZCkuZGVsZXRlTGluZUJveFdyYXBwZXIoKTsK
KyAgICBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KGNoaWxkKSkKKyAgICAgICAgZG93bmNh
c3Q8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkuZGVsZXRlSW5saW5lQm94V3JhcHBlcigpOworCisg
ICAgaWYgKCFwYXJlbnQucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkgJiYgaXM8UmVuZGVyRmxl
eGlibGVCb3g+KHBhcmVudCkgJiYgIWNoaWxkLmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9u
ZWQoKSAmJiBjaGlsZC5pc0JveCgpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJv
eD4ocGFyZW50KS5jbGVhckNhY2hlZENoaWxkSW50cmluc2ljQ29udGVudExvZ2ljYWxIZWlnaHQo
ZG93bmNhc3Q8UmVuZGVyQm94PihjaGlsZCkpOworCisgICAgLy8gSWYgY2hpbGQgaXMgdGhlIHN0
YXJ0IG9yIGVuZCBvZiB0aGUgc2VsZWN0aW9uLCB0aGVuIGNsZWFyIHRoZSBzZWxlY3Rpb24gdG8K
KyAgICAvLyBhdm9pZCBwcm9ibGVtcyBvZiBpbnZhbGlkIHBvaW50ZXJzLgorICAgIGlmICghcGFy
ZW50LnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpICYmIGNoaWxkLmlzU2VsZWN0aW9uQm9yZGVy
KCkpCisgICAgICAgIHBhcmVudC5mcmFtZSgpLnNlbGVjdGlvbigpLnNldE5lZWRzU2VsZWN0aW9u
VXBkYXRlKCk7CisKKyAgICBpZiAoIXBhcmVudC5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkK
KyAgICAgICAgY2hpbGQud2lsbEJlUmVtb3ZlZEZyb21UcmVlKCk7CisKKyAgICBjaGlsZC5yZXNl
dEZyYWdtZW50ZWRGbG93U3RhdGVPblJlbW92YWwoKTsKKworICAgIC8vIFdBUk5JTkc6IFRoZXJl
IHNob3VsZCBiZSBubyBjb2RlIHJ1bm5pbmcgYmV0d2VlbiB3aWxsQmVSZW1vdmVkRnJvbVRyZWUo
KSBhbmQgdGhlIGFjdHVhbCByZW1vdmFsIGJlbG93LgorICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRv
IGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVyZSB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKSB3b3Vs
ZCBkaXJ0eSB0aGUgdHJlZSdzIHN0cnVjdHVyZQorICAgIC8vIGFuZCB0aGUgY29kZSBydW5uaW5n
IGhlcmUgd291bGQgZm9yY2UgYW4gdW50aW1lbHkgcmVidWlsZGluZywgbGVhdmluZyB8Y2hpbGR8
IGRhbmdsaW5nLgorICAgIGF1dG8gY2hpbGRUb1Rha2UgPSBwYXJlbnQuZGV0YWNoUmVuZGVyZXJJ
bnRlcm5hbChjaGlsZCk7CisKKyAgICAvLyByZW5kZXJlclJlbW92ZWRGcm9tVHJlZSgpIHdhbGtz
IHRoZSB3aG9sZSBzdWJ0cmVlLiBXZSBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZQorICAgIC8vIGJ5
IHNraXBwaW5nIHRoaXMgc3RlcCB3aGVuIGRlc3Ryb3lpbmcgdGhlIGVudGlyZSB0cmVlLgorICAg
IGlmICghcGFyZW50LnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpICYmIGlzPFJlbmRlckVsZW1l
bnQ+KCpjaGlsZFRvVGFrZSkpCisgICAgICAgIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyUmVtb3Zl
ZEZyb21UcmVlKGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpjaGlsZFRvVGFrZSkpOworCisgICAg
aWYgKCFwYXJlbnQucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpIHsKKyAgICAgICAgaWYgKEFY
T2JqZWN0Q2FjaGUqIGNhY2hlID0gcGFyZW50LmRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENh
Y2hlKCkpCisgICAgICAgICAgICBjYWNoZS0+Y2hpbGRyZW5DaGFuZ2VkKCZwYXJlbnQpOworICAg
IH0KKworICAgIHJldHVybiBjaGlsZFRvVGFrZTsKK30KKworCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oCmluZGV4IDFh
MmNkZGNlOTAwMGJhOWM2NWI2YjBhNjQ0NmE5ZTYzMmY4YWQ5ZTUuLmIwYmQ1ZTEzNjQ4MDU4OTA4
MTcyOTcwOTQ3NjQ3OWM1OWQ3ZTZkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oCkBAIC03OCw2ICs3OCw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGluc2VydENoaWxkVG9SZW5kZXJUYWJsZVJvdyhSZW5kZXJUYWJsZVJv
dyYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCA9IG51bGxwdHIpOwogICAgIHZvaWQgaW5zZXJ0Q2hpbGRUb1JlbmRlck1hdGhN
TEZlbmNlZChSZW5kZXJNYXRoTUxGZW5jZWQmIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKTsKIAorICAgIFJl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZEZyb21SZW5kZXJFbGVtZW50KFJlbmRlckVs
ZW1lbnQmIHBhcmVudCwgUmVuZGVyT2JqZWN0JiBjaGlsZCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
CiAgICAgYm9vbCBjaGlsZFJlcXVpcmVzVGFibGUoY29uc3QgUmVuZGVyRWxlbWVudCYgcGFyZW50
LCBjb25zdCBSZW5kZXJPYmplY3QmIGNoaWxkKTsKICAgICB2b2lkIG1ha2VDaGlsZHJlbk5vbklu
bGluZShSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJPYmplY3QqIGluc2VydGlvblBvaW50ID0g
bnVsbHB0cik7CiAgICAgUmVuZGVyT2JqZWN0KiBzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hp
bGQoUmVuZGVyQm94JiBwYXJlbnQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVy
QmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVC
dWlsZGVyQmxvY2suY3BwCmluZGV4IDAzY2RmNWE4MjYwNDljZmQ2MGExOWI5YTUxMzU3MTdlNzhl
YTJkNGYuLjE4OWIyNzI0MDNlZDE4OTg1Zjg1OGNhNDUxOGZkZDRmZTYxYWY1OWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckJs
b2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZUJ1aWxkZXJCbG9jay5jcHAKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIFJlbmRlclRyZWVCdWls
ZGVyOjpCbG9jazo6cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayhSZW5kZXJCbG9jayYgYW5v
bnltbwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBqdXN0IGJlIGEgbW92ZUFs
bENoaWxyZW5UbyAoc2VlIHdlYmtpdC5vcmcvYi8xODI0OTUpCiAgICAgYW5vbnltb3VzQmxvY2su
bW92ZUFsbENoaWxkcmVuVG9JbnRlcm5hbCgqcGFyZW50KTsKLSAgICBhdXRvIHRvQmVEZXN0cm95
ZWQgPSBwYXJlbnQtPnRha2VDaGlsZEludGVybmFsKGFub255bW91c0Jsb2NrKTsKKyAgICBhdXRv
IHRvQmVEZXN0cm95ZWQgPSBtX2J1aWxkZXIudGFrZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQoKnBh
cmVudCwgYW5vbnltb3VzQmxvY2spOwogICAgIC8vIGFub255bW91c0Jsb2NrIGlzIGRlYWQgaGVy
ZS4KIH0KIApAQCAtMjcwLDcgKzI3MCw3IEBAIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRl
clRyZWVCdWlsZGVyOjpCbG9jazo6dGFrZUNoaWxkKFJlbmRlckJsb2NrJiBwYXJlbnQsCiAgICAg
Ly8gTm8gbmVlZCB0byB3YXN0ZSB0aW1lIGluIG1lcmdpbmcgb3IgcmVtb3ZpbmcgZW1wdHkgYW5v
bnltb3VzIGJsb2Nrcy4KICAgICAvLyBXZSBjYW4ganVzdCBiYWlsIG91dCBpZiBvdXIgZG9jdW1l
bnQgaXMgZ2V0dGluZyBkZXN0cm95ZWQuCiAgICAgaWYgKHBhcmVudC5yZW5kZXJUcmVlQmVpbmdE
ZXN0cm95ZWQoKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC5SZW5kZXJCb3g6OnRha2VDaGlsZCht
X2J1aWxkZXIsIG9sZENoaWxkKTsKKyAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50YWtlQ2hpbGRG
cm9tUmVuZGVyRWxlbWVudChwYXJlbnQsIG9sZENoaWxkKTsKIAogICAgIC8vIElmIHRoaXMgY2hp
bGQgaXMgYSBibG9jaywgYW5kIGlmIG91ciBwcmV2aW91cyBhbmQgbmV4dCBzaWJsaW5ncyBhcmUg
Ym90aCBhbm9ueW1vdXMgYmxvY2tzCiAgICAgLy8gd2l0aCBpbmxpbmUgY29udGVudCwgdGhlbiB3
ZSBjYW4gZm9sZCB0aGUgaW5saW5lIGNvbnRlbnQgYmFjayB0b2dldGhlci4KQEAgLTI5Myw3ICsy
OTMsNyBAQCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6
OnRha2VDaGlsZChSZW5kZXJCbG9jayYgcGFyZW50LAogICAgICAgICAgICAgQVNTRVJUKCFpbmxp
bmVDaGlsZHJlbkJsb2NrLmNvbnRpbnVhdGlvbigpKTsKICAgICAgICAgICAgIC8vIENhY2hlIHRo
aXMgdmFsdWUgYXMgaXQgbWlnaHQgZ2V0IGNoYW5nZWQgaW4gc2V0U3R5bGUoKSBjYWxsLgogICAg
ICAgICAgICAgaW5saW5lQ2hpbGRyZW5CbG9jay5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRl
QW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShwYXJlbnQuc3R5bGUoKSwgQkxPQ0spKTsKLSAgICAg
ICAgICAgIGF1dG8gYmxvY2tUb01vdmUgPSBwYXJlbnQudGFrZUNoaWxkSW50ZXJuYWwoaW5saW5l
Q2hpbGRyZW5CbG9jayk7CisgICAgICAgICAgICBhdXRvIGJsb2NrVG9Nb3ZlID0gbV9idWlsZGVy
LnRha2VDaGlsZEZyb21SZW5kZXJFbGVtZW50KHBhcmVudCwgaW5saW5lQ2hpbGRyZW5CbG9jayk7
CiAKICAgICAgICAgICAgIC8vIE5vdyBqdXN0IHB1dCB0aGUgaW5saW5lQ2hpbGRyZW5CbG9jayBp
bnNpZGUgdGhlIGJsb2NrQ2hpbGRyZW5CbG9jay4KICAgICAgICAgICAgIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQgPSBwcmV2ID09ICZpbmxpbmVDaGlsZHJlbkJsb2NrID8gYmxvY2tDaGlsZHJl
bkJsb2NrLmZpcnN0Q2hpbGQoKSA6IG51bGxwdHI7CkBAIC0zMjAsNyArMzIwLDcgQEAgUmVuZGVy
UHRyPFJlbmRlck9iamVjdD4gUmVuZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjp0YWtlQ2hpbGQoUmVu
ZGVyQmxvY2smIHBhcmVudCwKIAogICAgIHBhcmVudC5pbnZhbGlkYXRlTGluZUxheW91dFBhdGgo
KTsKIAotICAgIGF1dG8gdGFrZW5DaGlsZCA9IHBhcmVudC5SZW5kZXJCb3g6OnRha2VDaGlsZCht
X2J1aWxkZXIsIG9sZENoaWxkKTsKKyAgICBhdXRvIHRha2VuQ2hpbGQgPSBtX2J1aWxkZXIudGFr
ZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQocGFyZW50LCBvbGRDaGlsZCk7CiAKICAgICBSZW5kZXJP
YmplY3QqIGNoaWxkID0gcHJldiA/IHByZXYgOiBuZXh0OwogICAgIGlmIChjYW5NZXJnZUFub255
bW91c0Jsb2NrcyAmJiBjaGlsZCAmJiAhY2hpbGQtPnByZXZpb3VzU2libGluZygpICYmICFjaGls
ZC0+bmV4dFNpYmxpbmcoKSAmJiBwYXJlbnQuY2FuRHJvcEFub255bW91c0Jsb2NrQ2hpbGQoKSkg
ewpAQCAtMzYwLDcgKzM2MCw3IEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjpkcm9w
QW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyCiAgICAgcGFyZW50
LnNldENoaWxkcmVuSW5saW5lKGNoaWxkLmNoaWxkcmVuSW5saW5lKCkpOwogICAgIGF1dG8qIG5l
eHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmcoKTsKIAotICAgIGF1dG8gdG9CZURlbGV0ZWQg
PSBwYXJlbnQudGFrZUNoaWxkSW50ZXJuYWwoY2hpbGQpOworICAgIGF1dG8gdG9CZURlbGV0ZWQg
PSBtX2J1aWxkZXIudGFrZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQocGFyZW50LCBjaGlsZCk7CiAg
ICAgY2hpbGQubW92ZUFsbENoaWxkcmVuVG8obV9idWlsZGVyLCAmcGFyZW50LCBuZXh0U2libGlu
ZywgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFmdGVySW5zZXJ0aW9uOjpObyk7CiAg
ICAgLy8gRGVsZXRlIHRoZSBub3ctZW1wdHkgYmxvY2sncyBsaW5lcyBhbmQgbnVrZSBpdC4KICAg
ICBjaGlsZC5kZWxldGVMaW5lcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVySW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlcklubGluZS5jcHAKaW5kZXggYTMw
MTZkNDBiOTM5OTg3ODE4MTkwOGM5NzU5MjJkYjhlYmU0MzlkMC4uZGM3ZGY2NGU1YzY2ODAyYTJl
ZmYyZTk1YmM4ZjE2NWI3NzA0ODJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJJbmxpbmUuY3BwCkBAIC0y
MzUsNyArMjM1LDcgQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6SW5saW5lOjpzcGxpdEZsb3co
UmVuZGVySW5saW5lJiBwYXJlbnQsIFJlbmRlck9iamVjdCogYmUKICAgICAgICAgd2hpbGUgKG8p
IHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbm8gPSBvOwogICAgICAgICAgICAgbyA9IG5v
LT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGJsb2NrLT50
YWtlQ2hpbGRJbnRlcm5hbCgqbm8pOworICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IG1f
YnVpbGRlci50YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVudCgqYmxvY2ssICpubyk7CiAgICAgICAg
ICAgICBwcmUtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjaGlsZFRvTW92ZSksIG51bGxw
dHIpOwogICAgICAgICAgICAgbm8tPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygp
OwogICAgICAgICB9CkBAIC0zMDUsNyArMzA1LDcgQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6
SW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVySW5saW5lJiBwYXJlbnQsIFJlbmRlckJsb2NrKgog
ICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGFub255bW91cyB3cmFwcGVyIGhhcyBtdWx0
aXBsZSBjaGlsZHJlbiwgd2UgZW5kIHVwIHRyYXZlcnNpbmcgdXAgdG8gdGhlIHRvcG1vc3Qgd3Jh
cHBlcgogICAgICAgICAgICAgLy8gZXZlcnkgdGltZSwgd2hpY2ggaXMgYSBiaXQgd2FzdGVmdWwu
CiAgICAgICAgIH0KLSAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IHJlbmRlcmVyVG9Nb3ZlLT5w
YXJlbnQoKS0+dGFrZUNoaWxkSW50ZXJuYWwoKnJlbmRlcmVyVG9Nb3ZlKTsKKyAgICAgICAgYXV0
byBjaGlsZFRvTW92ZSA9IG1fYnVpbGRlci50YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVudCgqcmVu
ZGVyZXJUb01vdmUtPnBhcmVudCgpLCAqcmVuZGVyZXJUb01vdmUpOwogICAgICAgICBjbG9uZUlu
bGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihtX2J1aWxkZXIsIFdURk1vdmUoY2hp
bGRUb01vdmUpKTsKICAgICAgICAgcmVuZGVyZXJUb01vdmUtPnNldE5lZWRzTGF5b3V0QW5kUHJl
ZldpZHRoc1JlY2FsYygpOwogICAgICAgICByZW5kZXJlclRvTW92ZSA9IG5leHRTaWJsaW5nOwpA
QCAtMzQzLDcgKzM0Myw3IEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OklubGluZTo6c3BsaXRJ
bmxpbmVzKFJlbmRlcklubGluZSYgcGFyZW50LCBSZW5kZXJCbG9jayoKICAgICAgICAgICAgIC8v
ICphZnRlciogY3VycmVudENoaWxkIGFuZCBhcHBlbmQgdGhlbSBhbGwgdG8gdGhlIGNsb25lLgog
ICAgICAgICAgICAgZm9yIChhdXRvKiBzaWJsaW5nID0gY3VycmVudENoaWxkLT5uZXh0U2libGlu
ZygpOyBzaWJsaW5nOykgewogICAgICAgICAgICAgICAgIGF1dG8qIG5leHQgPSBzaWJsaW5nLT5u
ZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSBjdXJyZW50
LT50YWtlQ2hpbGRJbnRlcm5hbCgqc2libGluZyk7CisgICAgICAgICAgICAgICAgYXV0byBjaGls
ZFRvTW92ZSA9IG1fYnVpbGRlci50YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVudCgqY3VycmVudCwg
KnNpYmxpbmcpOwogICAgICAgICAgICAgICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9yaW5n
Q29udGludWF0aW9uKG1fYnVpbGRlciwgV1RGTW92ZShjaGlsZFRvTW92ZSkpOwogICAgICAgICAg
ICAgICAgIHNpYmxpbmctPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAg
ICAgICAgICAgICAgIHNpYmxpbmcgPSBuZXh0OwpAQCAtMzY3LDcgKzM2Nyw3IEBAIHZvaWQgUmVu
ZGVyVHJlZUJ1aWxkZXI6OklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlcklubGluZSYgcGFyZW50
LCBSZW5kZXJCbG9jayoKICAgICAvLyBhbmQgcHV0IHRoZW0gaW4gdGhlIHRvQmxvY2suCiAgICAg
Zm9yIChhdXRvKiBjdXJyZW50ID0gY3VycmVudENoaWxkLT5uZXh0U2libGluZygpOyBjdXJyZW50
OykgewogICAgICAgICBhdXRvKiBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAg
ICAgYXV0byBjaGlsZFRvTW92ZSA9IGZyb21CbG9jay0+dGFrZUNoaWxkSW50ZXJuYWwoKmN1cnJl
bnQpOworICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gbV9idWlsZGVyLnRha2VDaGlsZEZyb21S
ZW5kZXJFbGVtZW50KCpmcm9tQmxvY2ssICpjdXJyZW50KTsKICAgICAgICAgdG9CbG9jay0+aW5z
ZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgbnVsbHB0cik7CiAgICAgICAg
IGN1cnJlbnQgPSBuZXh0OwogICAgIH0KQEAgLTM4OSw3ICszODksNyBAQCB2b2lkIFJlbmRlclRy
ZWVCdWlsZGVyOjpJbmxpbmU6OmNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRlcklubGluZSYgcGFy
ZW50LCBSZW5kZQogICAgICAgICBvbGRDb250aW51YXRpb24tPnJlbW92ZUZyb21Db250aW51YXRp
b25DaGFpbigpOwogICAgIG5ld0JveC0+aW5zZXJ0SW50b0NvbnRpbnVhdGlvbkNoYWluQWZ0ZXIo
cGFyZW50KTsKICAgICBhdXRvKiBiZWZvcmVDaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKCk7Ci0g
ICAgYXV0byByZW1vdmVkQ2hpbGQgPSBwYXJlbnQudGFrZUNoaWxkSW50ZXJuYWwoY2hpbGQpOwor
ICAgIGF1dG8gcmVtb3ZlZENoaWxkID0gbV9idWlsZGVyLnRha2VDaGlsZEZyb21SZW5kZXJFbGVt
ZW50KHBhcmVudCwgY2hpbGQpOwogICAgIHNwbGl0RmxvdyhwYXJlbnQsIGJlZm9yZUNoaWxkLCBX
VEZNb3ZlKG5ld0JveCksIFdURk1vdmUocmVtb3ZlZENoaWxkKSwgb2xkQ29udGludWF0aW9uKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVCdWlsZGVyUnVieS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmNwcAppbmRleCAzNzQ5YTY1N2NjMzZjMGVlODg4MGFlODE1
ZWUxYzdhYjdhODA3NjlmLi4zYzcwM2YwODU4MmExNTdjZDQ3YTUyMmE1MTk1OWI5OWY5NzViNzFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZUJ1aWxkZXJSdWJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmNwcApAQCAtMzgyLDcgKzM4Miw3IEBAIFJlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjpSdWJ5Ojp0YWtlQ2hpbGQoUmVuZGVyUnVi
eUFzSW5saW5lJiBwCiAjaWZuZGVmIEFTU0VSVF9ESVNBQkxFRAogICAgICAgICBBU1NFUlQoaXNS
dWJ5Q2hpbGRGb3JOb3JtYWxSZW1vdmFsKGNoaWxkKSk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJu
IHBhcmVudC5SZW5kZXJJbmxpbmU6OnRha2VDaGlsZChtX2J1aWxkZXIsIGNoaWxkKTsKKyAgICAg
ICAgcmV0dXJuIG1fYnVpbGRlci50YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVudChwYXJlbnQsIGNo
aWxkKTsKICAgICB9CiAgICAgLy8gSWYgdGhlIGNoaWxkJ3MgcGFyZW50IGlzIGFuIGFub3ltb3Vz
IGJsb2NrIChtdXN0IGJlIGdlbmVyYXRlZCA6YmVmb3JlLzphZnRlciBjb250ZW50KQogICAgIC8v
IGp1c3QgdXNlIHRoZSBibG9jaydzIHJlbW92ZSBtZXRob2QuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJTVkcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyU1ZHLmNwcApp
bmRleCA1N2FjNzY5ZDE3ZGFlOTk5NGRlN2QyOWE2NWY0NzVkN2RmMDM2ZjZlLi5jNjdjZmRkYzJi
NDM0NjU2OGFkNTVmM2UzYzViNzg3ODk4M2E5NTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJTVkcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlclNWRy5jcHAKQEAg
LTc4LDcgKzc4LDcgQEAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyVHJlZUJ1aWxkZXI6
OlNWRzo6dGFrZUNoaWxkKFJlbmRlclNWR1RleHQmIHBhcmVudCwKIAogICAgIFZlY3RvcjxTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcyosIDI+IGFmZmVjdGVkQXR0cmlidXRlczsKICAgICBwYXJlbnQu
c3VidHJlZUNoaWxkV2lsbEJlUmVtb3ZlZCgmY2hpbGQsIGFmZmVjdGVkQXR0cmlidXRlcyk7Ci0g
ICAgYXV0byB0YWtlbkNoaWxkID0gcGFyZW50LlJlbmRlckJsb2NrRmxvdzo6dGFrZUNoaWxkKG1f
YnVpbGRlciwgY2hpbGQpOworICAgIGF1dG8gdGFrZW5DaGlsZCA9IG1fYnVpbGRlci5ibG9ja0J1
aWxkZXIoKS50YWtlQ2hpbGQocGFyZW50LCBjaGlsZCk7CiAgICAgcGFyZW50LnN1YnRyZWVDaGls
ZFdhc1JlbW92ZWQoYWZmZWN0ZWRBdHRyaWJ1dGVzKTsKICAgICByZXR1cm4gdGFrZW5DaGlsZDsK
IH0KQEAgLTg5LDExICs4OSwxMSBAQCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJUcmVl
QnVpbGRlcjo6U1ZHOjp0YWtlQ2hpbGQoUmVuZGVyU1ZHSW5saW5lJiBwYXJlbgogCiAgICAgYXV0
byogdGV4dEFuY2VzdG9yID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2Vz
dG9yKHBhcmVudCk7CiAgICAgaWYgKCF0ZXh0QW5jZXN0b3IpCi0gICAgICAgIHJldHVybiBwYXJl
bnQuUmVuZGVyRWxlbWVudDo6dGFrZUNoaWxkKG1fYnVpbGRlciwgY2hpbGQpOworICAgICAgICBy
ZXR1cm4gbV9idWlsZGVyLnRha2VDaGlsZEZyb21SZW5kZXJFbGVtZW50KHBhcmVudCwgY2hpbGQp
OwogCiAgICAgVmVjdG9yPFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiwgMj4gYWZmZWN0ZWRBdHRy
aWJ1dGVzOwogICAgIHRleHRBbmNlc3Rvci0+c3VidHJlZUNoaWxkV2lsbEJlUmVtb3ZlZCgmY2hp
bGQsIGFmZmVjdGVkQXR0cmlidXRlcyk7Ci0gICAgYXV0byB0YWtlbkNoaWxkID0gcGFyZW50LlJl
bmRlckVsZW1lbnQ6OnRha2VDaGlsZChtX2J1aWxkZXIsIGNoaWxkKTsKKyAgICBhdXRvIHRha2Vu
Q2hpbGQgPSBtX2J1aWxkZXIudGFrZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQocGFyZW50LCBjaGls
ZCk7CiAgICAgdGV4dEFuY2VzdG9yLT5zdWJ0cmVlQ2hpbGRXYXNSZW1vdmVkKGFmZmVjdGVkQXR0
cmlidXRlcyk7CiAgICAgcmV0dXJuIHRha2VuQ2hpbGQ7CiB9CkBAIC0xMDEsMTMgKzEwMSwxMyBA
QCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJUcmVlQnVpbGRlcjo6U1ZHOjp0YWtlQ2hp
bGQoUmVuZGVyU1ZHSW5saW5lJiBwYXJlbgogUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVy
VHJlZUJ1aWxkZXI6OlNWRzo6dGFrZUNoaWxkKFJlbmRlclNWR0NvbnRhaW5lciYgcGFyZW50LCBS
ZW5kZXJPYmplY3QmIGNoaWxkKQogewogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRXaWxs
QmVSZW1vdmVkRnJvbVRyZWUoY2hpbGQpOwotICAgIHJldHVybiBwYXJlbnQuUmVuZGVyRWxlbWVu
dDo6dGFrZUNoaWxkKG1fYnVpbGRlciwgY2hpbGQpOworICAgIHJldHVybiBtX2J1aWxkZXIudGFr
ZUNoaWxkRnJvbVJlbmRlckVsZW1lbnQocGFyZW50LCBjaGlsZCk7CiB9CiAKIFJlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjpTVkc6OnRha2VDaGlsZChSZW5kZXJTVkdS
b290JiBwYXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2Fj
aGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJlZShjaGlsZCk7Ci0gICAgcmV0dXJuIHBhcmVu
dC5SZW5kZXJFbGVtZW50Ojp0YWtlQ2hpbGQobV9idWlsZGVyLCBjaGlsZCk7CisgICAgcmV0dXJu
IG1fYnVpbGRlci50YWtlQ2hpbGRGcm9tUmVuZGVyRWxlbWVudChwYXJlbnQsIGNoaWxkKTsKIH0K
IAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>