<?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>45007</bug_id>
          
          <creation_ts>2010-08-31 16:58:30 -0700</creation_ts>
          <short_desc>Remove rendering types from SubframeLoader and split RenderEmbeddedObject::updateWidget in preparation for moving to DOM</short_desc>
          <delta_ts>2010-09-02 02:23:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>45049</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>272511</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-31 16:58:30 -0700</bug_when>
    <thetext>Remove rendering types from SubframeLoader and split RenderEmbeddedObject::updateWidget in preparation for moving to DOM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272528</commentid>
    <comment_count>1</comment_count>
      <attachid>66147</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-31 17:30:34 -0700</bug_when>
    <thetext>Created attachment 66147
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272656</commentid>
    <comment_count>2</comment_count>
      <attachid>66170</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-31 23:17:08 -0700</bug_when>
    <thetext>Created attachment 66170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272658</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-31 23:18:45 -0700</bug_when>
    <thetext>I&apos;m happy to divide this patch into smaller chunks if that would make review easier.

This is all prep work for getting rid of the lazyAttach codepath. :)  Once this is moved to the DOM, then the DOM can force the style update if needed to decide if a plugin should load or not.  Or we can remove the display: none causes no-load branch if its decided that&apos;s better for web compat (but that&apos;s a separate issue).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272659</commentid>
    <comment_count>4</comment_count>
      <attachid>66170</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-31 23:27:35 -0700</bug_when>
    <thetext>Comment on attachment 66170
Patch

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

&gt; WebCore/html/HTMLFrameOwnerElement.h:48
&gt; +    RenderPart* renderPart() const;
This is called RenderPart?  Maybe it should be renamed to RenderFrame?

&gt; WebCore/loader/SubframeLoader.cpp:107
&gt; +    // FIXME: None of this code should use renderers!
&gt; +    RenderEmbeddedObject* renderer = ownerElement-&gt;renderEmbeddedObject();
&gt; +    ASSERT(renderer);
&gt; +    if (!renderer)
&gt; +        return false;
The image loading system talks to renderers too, btw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273031</commentid>
    <comment_count>5</comment_count>
      <attachid>66170</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-09-01 14:40:44 -0700</bug_when>
    <thetext>Comment on attachment 66170
Patch

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

&gt; WebCore/rendering/RenderEmbeddedObject.cpp:369
&gt; +        updateWidgetForMediaElement(mediaElement, onlyCreateNonNetscapePlugins);

I clearly started reviewing this in the wrong order :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273159</commentid>
    <comment_count>6</comment_count>
      <attachid>66170</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-01 19:12:12 -0700</bug_when>
    <thetext>Comment on attachment 66170
Patch

Clearing flags on attachment: 66170

Committed r66631: &lt;http://trac.webkit.org/changeset/66631&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273160</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-01 19:12:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273269</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-02 02:23:45 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66631 might have broken Leopard Intel Debug (Tests)
The following changes are on the blame list:
http://trac.webkit.org/changeset/66629
http://trac.webkit.org/changeset/66630
http://trac.webkit.org/changeset/66631</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66147</attachid>
            <date>2010-08-31 17:30:34 -0700</date>
            <delta_ts>2010-08-31 23:17:05 -0700</delta_ts>
            <desc>wip</desc>
            <filename>bug-45007-20100831173033.patch</filename>
            <type>text/plain</type>
            <size>34923</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2JkNDlkYmNlZTViZTg0OTNkOWE4MWE0NjY5NGY3ZTAzOWNhZjMyNy4uNzZmYWVmZTg1NDQ0YjZh
NTBkMjgyYTA1MzY2Y2UyY2ZkZjQ1NmRkYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0wOC0zMSAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHJlbmRlcmluZyB0eXBlcyBmcm9tIFN1YmZyYW1l
TG9hZGVyIGFuZCBzcGxpdCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dXBkYXRlV2lkZ2V0IGluIHBy
ZXBhcmF0aW9uIGZvciBtb3ZpbmcgdG8gRE9NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NTAwNworCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMh
KQorCisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxFbWJlZEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCk6CisgICAgICAgICogaHRtbC9IVE1M
RnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50
QmFzZTo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjp3
aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6aGVpZ2h0KToK
KyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnJlbmRlckVtYmVkZGVkT2JqZWN0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9i
amVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnJl
bmRlcldpZGdldEZvckpTQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVs
ZW1lbnQ6OnVwZGF0ZVdpZGdldCk6CisgICAgICAgICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRvY3VtZW50UGFyc2VyOjphcHBlbmRCeXRlcyk6
CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZy
YW1lTG9hZGVyOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRlcjo6
bG9hZFBsdWdpbik6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmlzTmV0c2NhcGVQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6aGFzRmFsbGJhY2tDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcmFtYXRlcnNGcm9tT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OnVwZGF0ZVdpZGdldEZvck9iamVjdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyYW1hdGVyc0Zyb21FbWJlZCk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVXaWRnZXRGb3JF
bWJlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlV2lkZ2V0Rm9yTWVkaWFFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojp1cGRhdGVXaWRn
ZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldEhhc0ZhbGxiYWNrQ29udGVudCk6
CisKIDIwMTAtMDgtMzAgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVt
ZW50LmNwcAppbmRleCBmYjJiMzUxYjliYTgwZGIxNmViMzg5Y2EyODQ5ZmM4ODQyYjUzZTI5Li5l
Nzg4OWI4ZjM0ODQwYzliNjI3OTZiMTg1OTY4YmYzOWUxYmNkYzkzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxFbWJl
ZEVsZW1lbnQuY3BwCkBAIC0xODYsOCArMTg2LDggQEAgdm9pZCBIVE1MRW1iZWRFbGVtZW50Ojph
dHRhY2goKQogdm9pZCBIVE1MRW1iZWRFbGVtZW50Ojp1cGRhdGVXaWRnZXQoKQogewogICAgIGRv
Y3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLSAgICBpZiAobV9uZWVkV2lkZ2V0VXBk
YXRlICYmIHJlbmRlcmVyKCkgJiYgIWlzSW1hZ2VUeXBlKCkpCi0gICAgICAgIHRvUmVuZGVyRW1i
ZWRkZWRPYmplY3QocmVuZGVyZXIoKSktPnVwZGF0ZVdpZGdldCh0cnVlKTsKKyAgICBpZiAobV9u
ZWVkV2lkZ2V0VXBkYXRlICYmIHJlbmRlckVtYmVkZGVkT2JqZWN0KCkgJiYgIWlzSW1hZ2VUeXBl
KCkpCisgICAgICAgIHJlbmRlckVtYmVkZGVkT2JqZWN0KCktPnVwZGF0ZVdpZGdldCh0cnVlKTsK
IH0KIAogdm9pZCBIVE1MRW1iZWRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwIGIvV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAppbmRleCA2Y2FlODkxMWYwYmFkOWY0ZjZkY2Yy
NmFmNTA1MGU1Zjg0ZjdlNDQzLi45MjA1ZjRiMWQ2NjMyMWNmODZiNzllZTdkNDI4NTEzODI3M2Nm
NWY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKQEAgLTM3LDYgKzM3LDcg
QEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyRnJhbWUuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXZlbnRMaXN0ZW5lci5oIgpAQCAtMjEwLDEwICsyMTEsMTAgQEAgdm9pZCBIVE1MRnJhbWVF
bGVtZW50QmFzZTo6YXR0YWNoKCkKICAgICBzZXRSZW1haW5zQWxpdmVPblJlbW92YWxGcm9tVHJl
ZShmYWxzZSk7CiAKICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmF0dGFjaCgpOwotICAgIAot
ICAgIGlmIChSZW5kZXJQYXJ0KiByZW5kZXJQYXJ0ID0gdG9SZW5kZXJQYXJ0KHJlbmRlcmVyKCkp
KSB7CisKKyAgICBpZiAoUmVuZGVyRW1iZWRkZWRPYmplY3QqIG9iamVjdCA9IHJlbmRlckVtYmVk
ZGVkT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvbnRlbnRGcmFtZSgp
KQotICAgICAgICAgICAgcmVuZGVyUGFydC0+c2V0V2lkZ2V0KGZyYW1lLT52aWV3KCkpOworICAg
ICAgICAgICAgb2JqZWN0LT5zZXRXaWRnZXQoZnJhbWUtPnZpZXcoKSk7CiAgICAgfQogfQogCkBA
IC0yNTcsMjAgKzI1OCwyMCBAQCBib29sIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjppc1VSTEF0dHJp
YnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0CiAKIGludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6
d2lkdGgoKSBjb25zdAogewotICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICBpZiAoIXJlbmRlckJv
eCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiB0b1JlbmRlckJveChy
ZW5kZXJlcigpKS0+d2lkdGgoKTsKKyAgICByZXR1cm4gcmVuZGVyQm94KCktPndpZHRoKCk7CiB9
CiAKIGludCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAo
IXJlbmRlcmVyKCkpCisgICAgaWYgKCFyZW5kZXJCb3goKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgCisKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKLSAgICByZXR1cm4gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmhlaWdodCgpOworICAg
IHJldHVybiByZW5kZXJCb3goKS0+aGVpZ2h0KCk7CiB9CiAKIHZvaWQgSFRNTEZyYW1lRWxlbWVu
dEJhc2U6OnNldFJlbWFpbnNBbGl2ZU9uUmVtb3ZhbEZyb21UcmVlKGJvb2wgdmFsdWUpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcCBiL1dlYkNvcmUv
aHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCmluZGV4IGExYTY5ZjM5NGJlZjMxOWI4OGJm
OGQyZDI1OTM1ZGE0NWZlYjFlMDQuLmViY2I3ZjYxZmZjYzE1ZTJiMzZkNzE1ZDA2ZDQwYjIxZDA2
OTVkNjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCkBAIC0yNCw2ICsy
NCw3IEBACiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAK
ICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKQEAgLTM5LDYgKzQw
LDExIEBAIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6SFRNTEZyYW1lT3duZXJFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtCiB7CiB9CiAKK1JlbmRlckVtYmVkZGVkT2Jq
ZWN0KiBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OnJlbmRlckVtYmVkZGVkT2JqZWN0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdG9SZW5kZXJFbWJlZGRlZE9iamVjdChIVE1MRWxlbWVudDo6cmVuZGVy
ZXIoKSk7Cit9CisKIHZvaWQgSFRNTEZyYW1lT3duZXJFbGVtZW50Ojp3aWxsUmVtb3ZlKCkKIHsK
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29udGVudEZyYW1lKCkpIHsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRnJh
bWVPd25lckVsZW1lbnQuaAppbmRleCA4MDRhYjIyNjQ5YTY4OGQwYmY2NTAxNmNkNmQ1MTA2ZmNm
ZTIwMDdjLi5hMTUwMDNiNzYzNzM4ZjdkM2YwZDEwNTQ2ZjgxZjAzOWM5MTZjZjY5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCkBAIC0yOCw2ICsyOCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgRnJhbWU7CitjbGFzcyBSZW5kZXJF
bWJlZGRlZE9iamVjdDsKIAogI2lmIEVOQUJMRShTVkcpCiBjbGFzcyBTVkdEb2N1bWVudDsKQEAg
LTQxLDYgKzQyLDEwIEBAIHB1YmxpYzoKICAgICBET01XaW5kb3cqIGNvbnRlbnRXaW5kb3coKSBj
b25zdDsKICAgICBEb2N1bWVudCogY29udGVudERvY3VtZW50KCkgY29uc3Q7CiAKKyAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGp1c3Qgb3ZlcnJpZGUgcmVuZGVyZXIoKSwgZXhjZXB0IGRvaW5nIHNv
IHdvdWxkIHJlcXVpcmUKKyAgICAvLyB1cGRhdGluZyBtYW55IGZpbGVzIHRvIGluY2x1ZGUgUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaC4KKyAgICBSZW5kZXJFbWJlZGRlZE9iamVjdCogcmVuZGVyRW1i
ZWRkZWRPYmplY3QoKSBjb25zdDsKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgU1ZHRG9jdW1lbnQq
IGdldFNWR0RvY3VtZW50KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5jcHAKaW5kZXggYmYyZGViYTAxODBkYzJmYWZiMGJjMGExYzI5MzQzZTE5
MmEwYmViZC4uYTNhNWM1YjNiNWNhZDVmMGQwMmM1NzdhYmI4YmNhMzk5MjA2NGMxZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC02Miw5ICs2Miw5IEBAIFBhc3NSZWZQdHI8SFRN
TE9iamVjdEVsZW1lbnQ+IEhUTUxPYmplY3RFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnCiBSZW5kZXJXaWRnZXQqIEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJXaWRnZXRG
b3JKU0JpbmRpbmdzKCkgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVy
KCktPmlzV2lkZ2V0KCkpCisgICAgaWYgKCFyZW5kZXJFbWJlZGRlZE9iamVjdCgpKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIoKSk7CisgICAg
cmV0dXJuIHJlbmRlckVtYmVkZGVkT2JqZWN0KCk7CiB9CiAKIHZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKQEAgLTE2Myw4ICsxNjMs
OCBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjphdHRhY2goKQogdm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6dXBkYXRlV2lkZ2V0KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVl
ZGVkKCk7Ci0gICAgaWYgKG1fbmVlZFdpZGdldFVwZGF0ZSAmJiByZW5kZXJlcigpICYmICFtX3Vz
ZUZhbGxiYWNrQ29udGVudCAmJiAhaXNJbWFnZVR5cGUoKSkKLSAgICAgICAgdG9SZW5kZXJFbWJl
ZGRlZE9iamVjdChyZW5kZXJlcigpKS0+dXBkYXRlV2lkZ2V0KHRydWUpOworICAgIGlmIChtX25l
ZWRXaWRnZXRVcGRhdGUgJiYgcmVuZGVyRW1iZWRkZWRPYmplY3QoKSAmJiAhbV91c2VGYWxsYmFj
a0NvbnRlbnQgJiYgIWlzSW1hZ2VUeXBlKCkpCisgICAgICAgIHJlbmRlckVtYmVkZGVkT2JqZWN0
KCktPnVwZGF0ZVdpZGdldCh0cnVlKTsKIH0KIAogdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6Zmlu
aXNoUGFyc2luZ0NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1BsdWdpbkRv
Y3VtZW50LmNwcCBiL1dlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAppbmRleCAwOGU2
ZmFlNWEzYjFiMzYxNmFiYmM0ZjgwOGE5YWU1NTdmZmM4N2ZhLi5kZWZjYzFmYTNkYzRhZDRjZmI5
OThmYjY1Y2FiNmM5MTZjOGFkZWQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9QbHVnaW5E
b2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCkBAIC0x
MjQsNyArMTI0LDcgQEAgdm9pZCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6YXBwZW5kQnl0ZXMoRG9j
dW1lbnRXcml0ZXIqLCBjb25zdCBjaGFyKiwgaW50LCBib29sKQogCiAgICAgZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0KCk7CiAKLSAgICBpZiAoUmVuZGVyV2lkZ2V0KiByZW5kZXJlciA9IHRvUmVu
ZGVyV2lkZ2V0KG1fZW1iZWRFbGVtZW50LT5yZW5kZXJlcigpKSkgeworICAgIGlmIChSZW5kZXJX
aWRnZXQqIHJlbmRlcmVyID0gbV9lbWJlZEVsZW1lbnQtPnJlbmRlckVtYmVkZGVkT2JqZWN0KCkp
IHsKICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVkaXJlY3REYXRhVG9QbHVn
aW4ocmVuZGVyZXItPndpZGdldCgpKTsKICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVE
b2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VMb2FkZXIoKS0+c2V0U2hvdWxkQnVmZmVyRGF0
YShmYWxzZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2Fk
ZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCmluZGV4IDA4OWU3ODMx
ZTU2ZWYyNDFjNjc1MzY5ZDQ1OTRkNmY3MGQ3NTUzZDcuLmFhMTA0MTFiODVkMWI3MGVjNzEwZDZk
YWY3OTViNDgwOTIxOWQ2NjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9h
ZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKQEAgLTYzLDE2
ICs2Myw2IEBAIFN1YmZyYW1lTG9hZGVyOjpTdWJmcmFtZUxvYWRlcihGcmFtZSogZnJhbWUpCiB7
CiB9CiAKLXN0YXRpYyBIVE1MUGx1Z0luRWxlbWVudCogdG9QbHVnSW5FbGVtZW50KE5vZGUqIG5v
ZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChu
b2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShlbWJlZFRhZykg
fHwgbm9kZS0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MUGx1Z0luRWxlbWVudCo+KG5vZGUpOwotfQotCiB2b2lkIFN1YmZyYW1lTG9hZGVyOjpj
bGVhcigpCiB7CiAgICAgbV9jb250YWluc1BsdWdpbnMgPSBmYWxzZTsKQEAgLTk5LDcgKzg5LDcg
QEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6cmVxdWVzdEZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50LCBjb25zdCBTdHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBT
dWJmcmFtZUxvYWRlcjo6cmVxdWVzdE9iamVjdChSZW5kZXJFbWJlZGRlZE9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwKK2Jv
b2wgU3ViZnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBv
d25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1l
TmFtZSwKICAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQogewogICAgIGlm
ICh1cmwuaXNFbXB0eSgpICYmIG1pbWVUeXBlLmlzRW1wdHkoKSkKQEAgLTExMCw2ICsxMDAsMTIg
QEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6cmVxdWVzdE9iamVjdChSZW5kZXJFbWJlZGRlZE9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAorICAgIC8vIEZJWE1FOiBOb25lIG9mIHRoaXMgY29kZSBzaG91bGQgdXNlIHJlbmRlcmVycyEK
KyAgICBSZW5kZXJFbWJlZGRlZE9iamVjdCogcmVuZGVyZXIgPSBvd25lckVsZW1lbnQtPnJlbmRl
ckVtYmVkZGVkT2JqZWN0KCk7CisgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICBpZiAoIXJlbmRl
cmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBLVVJMIGNvbXBsZXRlZFVSTDsKICAg
ICBpZiAoIXVybC5pc0VtcHR5KCkpCiAgICAgICAgIGNvbXBsZXRlZFVSTCA9IGNvbXBsZXRlVVJM
KHVybCk7CkBAIC0xMjYsMTYgKzEyMiwxNyBAQCBib29sIFN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0
T2JqZWN0KFJlbmRlckVtYmVkZGVkT2JqZWN0KiByZW5kZXJlciwgY29uc3QgU3RyaW5nJgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAm
JiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5pc1NhbmRib3hlZChTYW5k
Ym94UGx1Z2lucykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBs
b2FkUGx1Z2luKHJlbmRlcmVyLCBjb21wbGV0ZWRVUkwsIG1pbWVUeXBlLCBwYXJhbU5hbWVzLCBw
YXJhbVZhbHVlcywgdXNlRmFsbGJhY2spOwotICAgIH0KIAotICAgIEFTU0VSVChyZW5kZXJlci0+
bm9kZSgpLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgcmVuZGVyZXItPm5vZGUoKS0+aGFzVGFn
TmFtZShlbWJlZFRhZykpOwotICAgIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihyZW5kZXJlci0+bm9kZSgpKTsKKyAgICAgICAgQVNT
RVJUKG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IG93bmVyRWxlbWVudC0+
aGFzVGFnTmFtZShlbWJlZFRhZykpOworICAgICAgICBIVE1MUGx1Z0luRWxlbWVudCogcGx1Z2lu
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4ob3duZXJFbGVtZW50KTsK
KworICAgICAgICByZXR1cm4gbG9hZFBsdWdpbihwbHVnaW5FbGVtZW50LCBjb21wbGV0ZWRVUkws
IG1pbWVUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgdXNlRmFsbGJhY2spOworICAgIH0K
IAogICAgIC8vIElmIHRoZSBwbHVnLWluIGVsZW1lbnQgYWxyZWFkeSBjb250YWlucyBhIHN1YmZy
YW1lLCBsb2FkT3JSZWRpcmVjdFN1YmZyYW1lIHdpbGwgcmUtdXNlIGl0LiBPdGhlcndpc2UsCiAg
ICAgLy8gaXQgd2lsbCBjcmVhdGUgYSBuZXcgZnJhbWUgYW5kIHNldCBpdCBhcyB0aGUgUmVuZGVy
UGFydCdzIHdpZGdldCwgY2F1c2luZyB3aGF0IHdhcyBwcmV2aW91c2x5IAogICAgIC8vIGluIHRo
ZSB3aWRnZXQgdG8gYmUgdG9ybiBkb3duLgotICAgIHJldHVybiBsb2FkT3JSZWRpcmVjdFN1YmZy
YW1lKGVsZW1lbnQsIGNvbXBsZXRlZFVSTCwgZnJhbWVOYW1lLCB0cnVlLCB0cnVlKTsKKyAgICBy
ZXR1cm4gbG9hZE9yUmVkaXJlY3RTdWJmcmFtZShvd25lckVsZW1lbnQsIGNvbXBsZXRlZFVSTCwg
ZnJhbWVOYW1lLCB0cnVlLCB0cnVlKTsKIH0KIAogCkBAIC0zMjcsMzcgKzMyNCw0NiBAQCBib29s
IFN1YmZyYW1lTG9hZGVyOjpzaG91bGRVc2VQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBibwogICAgIHVzZUZhbGxiYWNrID0gb2JqZWN0VHlwZSA9PSBPYmpl
Y3RDb250ZW50Tm9uZSAmJiBoYXNGYWxsYmFjazsKICAgICByZXR1cm4gb2JqZWN0VHlwZSA9PSBP
YmplY3RDb250ZW50Tm9uZSB8fCBvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnROZXRzY2FwZVBs
dWdpbiB8fCBvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnRPdGhlclBsdWdpbjsKIH0KLSAgCi1i
b29sIFN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2luKFJlbmRlckVtYmVkZGVkT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCAKKworRG9jdW1l
bnQqIFN1YmZyYW1lTG9hZGVyOjpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJh
bWUtPmRvY3VtZW50KCk7Cit9CisgICAgCitib29sIFN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2lu
KEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnaW5FbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIAogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGJvb2wgdXNlRmFsbGJhY2spCiB7
Ci0gICAgUmVmUHRyPFdpZGdldD4gd2lkZ2V0OworICAgIFJlbmRlckVtYmVkZGVkT2JqZWN0KiBy
ZW5kZXJlciA9IHBsdWdpbkVsZW1lbnQtPnJlbmRlckVtYmVkZGVkT2JqZWN0KCk7CiAKLSAgICBp
ZiAocmVuZGVyZXIgJiYgIXVzZUZhbGxiYWNrKSB7Ci0gICAgICAgIEhUTUxQbHVnSW5FbGVtZW50
KiBlbGVtZW50ID0gdG9QbHVnSW5FbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpOworICAgIC8vIEZJ
WE1FOiBUaGlzIGNvZGUgc2hvdWxkIG5vdCBkZXBlbmQgb24gcmVuZGVyZXIhCisgICAgaWYgKCFy
ZW5kZXJlciB8fCB1c2VGYWxsYmFjaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
IGlmICghU2VjdXJpdHlPcmlnaW46OmNhbkxvYWQodXJsLCBTdHJpbmcoKSwgbV9mcmFtZS0+ZG9j
dW1lbnQoKSkpIHsKLSAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWls
ZWQobV9mcmFtZSwgdXJsLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQorICAgIGlmICghU2VjdXJpdHlPcmlnaW46OmNhbkxvYWQodXJsLCBTdHJpbmcoKSwg
ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxl
ZChtX2ZyYW1lLCB1cmwuc3RyaW5nKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jaGVja0lmUnVuSW5zZWN1cmVDb250ZW50KG1f
ZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHVybCk7CisgICAgRnJhbWVMb2Fk
ZXIqIGZyYW1lTG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7CisgICAgZnJhbWVMb2FkZXItPmNo
ZWNrSWZSdW5JbnNlY3VyZUNvbnRlbnQoZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgdXJs
KTsKIAotICAgICAgICB3aWRnZXQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNyZWF0
ZVBsdWdpbihJbnRTaXplKHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKSwgcmVuZGVyZXItPmNvbnRl
bnRIZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aXNQbHVn
aW5Eb2N1bWVudCgpICYmICFtX2NvbnRhaW5zUGx1Z2lucyk7Ci0gICAgICAgIGlmICh3aWRnZXQp
IHsKLSAgICAgICAgICAgIHJlbmRlcmVyLT5zZXRXaWRnZXQod2lkZ2V0KTsKLSAgICAgICAgICAg
IG1fY29udGFpbnNQbHVnaW5zID0gdHJ1ZTsKKyAgICBJbnRTaXplIGNvbnRlbnRTaXplKHJlbmRl
cmVyLT5jb250ZW50V2lkdGgoKSwgcmVuZGVyZXItPmNvbnRlbnRIZWlnaHQoKSk7CisgICAgYm9v
bCBsb2FkTWFudWFsbHkgPSBkb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgIW1fY29u
dGFpbnNQbHVnaW5zOworICAgIFJlZlB0cjxXaWRnZXQ+IHdpZGdldCA9IGZyYW1lTG9hZGVyLT5j
bGllbnQoKS0+Y3JlYXRlUGx1Z2luKGNvbnRlbnRTaXplLAorICAgICAgICBwbHVnaW5FbGVtZW50
LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsK
IAotI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgICAgICAgICAgcmVuZGVy
ZXItPm5vZGUoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7Ci0j
ZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZW5kZXJlci0+c2V0U2hvd3NNaXNz
aW5nUGx1Z2luSW5kaWNhdG9yKCk7CisgICAgaWYgKCF3aWRnZXQpIHsKKyAgICAgICAgcmVuZGVy
ZXItPnNldFNob3dzTWlzc2luZ1BsdWdpbkluZGljYXRvcigpOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgcmV0dXJuIHdpZGdldDsKKyAgICByZW5kZXJlci0+c2V0V2lkZ2V0
KHdpZGdldCk7CisgICAgbV9jb250YWluc1BsdWdpbnMgPSB0cnVlOworCisjaWYgRU5BQkxFKFBM
VUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAgcGx1Z2luRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJl
Y2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogS1VSTCBTdWJmcmFtZUxvYWRlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNv
bnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5oIGIvV2ViQ29y
ZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuaAppbmRleCBkNDJlZjJjNjJmNTEwODBjOTA3MjEwZGRj
ZjYwZTE0ODhhNjI0MGQwLi45MDEzZTI0NTY4OWI2OWFiZjg5M2QwODAwMGMwNWNjMGRkYjkwOWE5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5oCisrKyBiL1dlYkNv
cmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmgKQEAgLTQwLDE2ICs0MCwxNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFt
ZUxvYWRlckNsaWVudDsKIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50OwogY2xhc3MgSFRNTEZyYW1l
T3duZXJFbGVtZW50OworY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7CiBjbGFzcyBJbnRTaXplOwog
Y2xhc3MgS1VSTDsKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKIGNsYXNzIE5v
ZGU7CiAjZW5kaWYKLWNsYXNzIFJlbmRlckVtYmVkZGVkT2JqZWN0OwogY2xhc3MgV2lkZ2V0Owog
CiAvLyBUaGlzIGlzIGEgc2xpZ2h0IG1pc25vbWVyLiBJdCBoYW5kbGVzIHRoZSBoaWdoZXIgbGV2
ZWwgbG9naWMgb2YgbG9hZGluZyBib3RoIHN1YmZyYW1lcyBhbmQgcGx1Z2lucy4KQEAgLTYwLDEw
ICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgYm9vbCByZXF1ZXN0
RnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IEF0
b21pY1N0cmluZyYgZnJhbWVOYW1lLCBib29sIGxvY2tIaXN0b3J5ID0gdHJ1ZSwgYm9vbCBsb2Nr
QmFja0ZvcndhcmRMaXN0ID0gdHJ1ZSk7ICAgIAotICAgIGJvb2wgcmVxdWVzdE9iamVjdChSZW5k
ZXJFbWJlZGRlZE9iamVjdCosIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcm
IGZyYW1lTmFtZSwKKyAgICBib29sIHJlcXVlc3RPYmplY3QoSFRNTEZyYW1lT3duZXJFbGVtZW50
KiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLAogICAg
ICAgICBjb25zdCBTdHJpbmcmIHNlcnZpY2VUeXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKIAogI2lmIEVOQUJM
RShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB0YWtl
IEVsZW1lbnQqIGluc3RlYWQgb2YgTm9kZSosIG9yIGJldHRlciB5ZXQgdGhlCisgICAgLy8gc3Bl
Y2lmaWMgdHlwZSBvZiBFbGVtZW50IHdoaWNoIHRoaXMgY29kZSBkZXBlbmRzIG9uLgogICAgIFBh
c3NSZWZQdHI8V2lkZ2V0PiBsb2FkTWVkaWFQbGF5ZXJQcm94eVBsdWdpbihOb2RlKiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1WYWx1ZXMpOwogI2VuZGlmCiAKQEAgLTc2LDExICs3OSwxMyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEZyYW1lKiBsb2FkT3JSZWRpcmVjdFN1YmZyYW1lKEhUTUxGcmFtZU93
bmVyRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwg
Ym9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKICAgICBGcmFtZSog
bG9hZFN1YmZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpOwotICAgIGJvb2wgbG9hZFBsdWdp
bihSZW5kZXJFbWJlZGRlZE9iamVjdCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLAorICAgIGJvb2wgbG9hZFBsdWdpbihIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLAogICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBib29sIHVzZUZh
bGxiYWNrKTsKIAogICAgIGJvb2wgc2hvdWxkVXNlUGx1Z2luKGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBib29sIGhhc0ZhbGxiYWNrLCBib29sJiB1c2VGYWxsYmFjayk7CiAK
KyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKKwogICAgIGJvb2wgbV9jb250YWluc1Bs
dWdpbnM7CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVt
YmVkZGVkT2JqZWN0LmNwcAppbmRleCBjY2JhNzkxOWM1Mjg1ODgwYTdlN2VhYTExZTRhYzQxMWZh
NWUwYzAxLi5kMzExY2ZlYWVjNzUzNzZiZGMwMTM0NjllZjJiOTIzYTZiMmI3NTE1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC0xMDIsNiArMTAyLDcg
QEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpIGNvbnN0CiB9CiAjZW5kaWYKIAorLy8gRklYTUU6IFRoaXMgYmVsb25ncyBpbiBIVE1MUGx1
Z2luRWxlbWVudC5jcHAgdG8gYmUgc2hhcmVkIGJ5IEhUTUxPYmplY3RFbGVtZW50IGFuZCBIVE1M
RW1iZWRFbGVtZW50Lgogc3RhdGljIGJvb2wgaXNVUkxBbGxvd2VkKERvY3VtZW50KiBkb2MsIGNv
bnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmIChkb2MtPmZyYW1lKCktPnBhZ2UoKS0+ZnJhbWVD
b3VudCgpID49IFBhZ2U6Om1heE51bWJlck9mRnJhbWVzKQpAQCAtMTIzLDYgKzEyNCw3IEBAIHN0
YXRpYyBib29sIGlzVVJMQWxsb3dlZChEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHVybCkK
IAogdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IENsYXNz
SWRUb1R5cGVNYXA7CiAKKy8vIEZJWE1FOiBUaGlzIGJlbG9uZ3MgaW4gSFRNTE9iamVjdEVsZW1l
bnQuY3BwCiBzdGF0aWMgQ2xhc3NJZFRvVHlwZU1hcCogY3JlYXRlQ2xhc3NJZFRvVHlwZU1hcCgp
CiB7CiAgICAgQ2xhc3NJZFRvVHlwZU1hcCogbWFwID0gbmV3IENsYXNzSWRUb1R5cGVNYXA7CkBA
IC0xMzUsNiArMTM3LDcgQEAgc3RhdGljIENsYXNzSWRUb1R5cGVNYXAqIGNyZWF0ZUNsYXNzSWRU
b1R5cGVNYXAoKQogICAgIHJldHVybiBtYXA7CiB9CiAKKy8vIEZJWE1FOiBUaGlzIGJlbG9uZ3Mg
aW4gSFRNTE9iamVjdEVsZW1lbnQuY3BwCiBzdGF0aWMgU3RyaW5nIHNlcnZpY2VUeXBlRm9yQ2xh
c3NJZChjb25zdCBTdHJpbmcmIGNsYXNzSWQpCiB7CiAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIGNs
YXNzSWQgaXMgZW1wdHkgKHNpbmNlIHdlIHdvbid0IGRvIGFueXRoaW5nIGJlbG93KS4KQEAgLTE0
Niw2ICsxNDksNyBAQCBzdGF0aWMgU3RyaW5nIHNlcnZpY2VUeXBlRm9yQ2xhc3NJZChjb25zdCBT
dHJpbmcmIGNsYXNzSWQpCiAgICAgcmV0dXJuIG1hcC0+Z2V0KGNsYXNzSWQpOwogfQogCisvLyBG
SVhNRTogVGhpcyBiZWxvbmdzIGluIEhUTUxPYmplY3RFbGVtZW50LmNwcAogc3RhdGljIHZvaWQg
bWFwRGF0YVBhcmFtVG9TcmMoVmVjdG9yPFN0cmluZz4qIHBhcmFtTmFtZXMsIFZlY3RvcjxTdHJp
bmc+KiBwYXJhbVZhbHVlcykKIHsKICAgICAvLyBTb21lIHBsdWdpbnMgZG9uJ3QgdW5kZXJzdGFu
ZCB0aGUgImRhdGEiIGF0dHJpYnV0ZSBvZiB0aGUgT0JKRUNUIHRhZyAoaS5lLiBSZWFsIGFuZCBX
TVAKQEAgLTE2NCwxNjMgKzE2OCwyMDYgQEAgc3RhdGljIHZvaWQgbWFwRGF0YVBhcmFtVG9TcmMo
VmVjdG9yPFN0cmluZz4qIHBhcmFtTmFtZXMsIFZlY3RvcjxTdHJpbmc+KiBwYXJhbVYKICAgICB9
CiB9CiAKLXZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnVwZGF0ZVdpZGdldChib29sIG9ubHlD
cmVhdGVOb25OZXRzY2FwZVBsdWdpbnMpCisvLyBGSVhNRTogVGhpcyBiZWxvbmdzIGluIHNvbWUg
bG9hZGVyIGhlYWRlcj8KK3N0YXRpYyBib29sIGlzTmV0c2NhcGVQbHVnaW4oRnJhbWUqIGZyYW1l
LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZXJ2aWNlVHlwZSkKIHsKLSAgICBp
ZiAoIW1fcmVwbGFjZW1lbnRUZXh0LmlzTnVsbCgpIHx8ICFub2RlKCkpIC8vIENoZWNrIHRoZSBu
b2RlIGluIGNhc2UgZGVzdHJveSgpIGhhcyBiZWVuIGNhbGxlZC4KKyAgICBLVVJMIGNvbXBsZXRl
ZFVSTDsKKyAgICBpZiAoIXVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvbXBsZXRlZFVSTCA9IGZy
YW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwodXJsKTsKKyAgICAKKyAgICBpZiAoZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKS0+b2JqZWN0Q29udGVudFR5cGUoY29tcGxldGVkVVJMLCBzZXJ2aWNl
VHlwZSkgPT0gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGJlbG9uZ3Mgb24gSFRN
TE9iamVjdEVsZW1lbnQuCitzdGF0aWMgYm9vbCBoYXNGYWxsYmFja0NvbnRlbnQoSFRNTE9iamVj
dEVsZW1lbnQqIG9iamVjdEVsZW1lbnQpCit7CisgICAgZm9yIChOb2RlKiBjaGlsZCA9IG9iamVj
dEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKKyAgICAgICAgaWYgKCghY2hpbGQtPmlzVGV4dE5vZGUoKSAmJiAhY2hpbGQtPmhhc1Rh
Z05hbWUocGFyYW1UYWcpKSAvLyBEaXNjb3VudCA8cGFyYW0+CisgICAgICAgICAgICB8fCAoY2hp
bGQtPmlzVGV4dE5vZGUoKSAmJiAhc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29udGFpbnNP
bmx5V2hpdGVzcGFjZSgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGJlbG9uZ3Mgb24gSFRNTE9iamVjdEVs
ZW1lbnQuCitzdGF0aWMgdm9pZCBwYXJhbWF0ZXJzRnJvbU9iamVjdChIVE1MT2JqZWN0RWxlbWVu
dCogb2JqZWN0RWxlbWVudCwgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcywgU3RyaW5nJiB1cmwsIFN0cmluZyYgc2VydmljZVR5cGUpCit7Cisg
ICAgSGFzaFNldDxTdHJpbmdJbXBsKiwgQ2FzZUZvbGRpbmdIYXNoPiB1bmlxdWVQYXJhbU5hbWVz
OworCisgICAgLy8gU2NhbiB0aGUgUEFSQU0gY2hpbGRyZW4gYW5kIHN0b3JlIHRoZWlyIG5hbWUv
dmFsdWUgcGFpcnMuCisgICAgLy8gR2V0IHRoZSBVUkwgYW5kIHR5cGUgZnJvbSB0aGUgcGFyYW1z
IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSB0aGVtLgorICAgIE5vZGUqIGNoaWxkID0gb2JqZWN0
RWxlbWVudC0+Zmlyc3RDaGlsZCgpOworICAgIHdoaWxlIChjaGlsZCkgeworICAgICAgICBpZiAo
Y2hpbGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpKSB7CisgICAgICAgICAgICBIVE1MUGFyYW1FbGVt
ZW50KiBwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudCo+KGNoaWxkKTsKKyAgICAgICAg
ICAgIFN0cmluZyBuYW1lID0gcC0+bmFtZSgpOworICAgICAgICAgICAgaWYgKHVybC5pc0VtcHR5
KCkgJiYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzcmMiKSB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAibW92aWUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiY29kZSIpIHx8IGVx
dWFsSWdub3JpbmdDYXNlKG5hbWUsICJ1cmwiKSkpCisgICAgICAgICAgICAgICAgdXJsID0gZGVw
cmVjYXRlZFBhcnNlVVJMKHAtPnZhbHVlKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IHNlcnZp
Y2VUeXBlIGNhbGN1bGF0aW9uIGRvZXMgbm90IGJlbG9uZyBpbiB0aGlzIGZ1bmN0aW9uLgorICAg
ICAgICAgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAidHlwZSIpKSB7CisgICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSBwLT52YWx1ZSgp
OworICAgICAgICAgICAgICAgIHNpemVfdCBwb3MgPSBzZXJ2aWNlVHlwZS5maW5kKCI7Iik7Cisg
ICAgICAgICAgICAgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAg
c2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZS5sZWZ0KHBvcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgdW5pcXVlUGFy
YW1OYW1lcy5hZGQobmFtZS5pbXBsKCkpOworICAgICAgICAgICAgICAgIHBhcmFtTmFtZXMuYXBw
ZW5kKHAtPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKHAtPnZh
bHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCk7CisgICAgfQorICAgIAorICAgIC8vIFdoZW4gT0JKRUNUIGlzIHVzZWQg
Zm9yIGFuIGFwcGxldCB2aWEgU3VuJ3MgSmF2YSBwbHVnaW4sIHRoZSBDT0RFQkFTRSBhdHRyaWJ1
dGUgaW4gdGhlIHRhZworICAgIC8vIHBvaW50cyB0byB0aGUgSmF2YSBwbHVnaW4gaXRzZWxmIChh
biBBY3RpdmVYIGNvbXBvbmVudCkgd2hpbGUgdGhlIGFjdHVhbCBhcHBsZXQgQ09ERUJBU0UgaXMK
KyAgICAvLyBpbiBhIFBBUkFNIHRhZy4gU2VlIDxodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3Rz
L3BsdWdpbi8xLjIvZG9jcy90YWdzLmh0bWw+LiBUaGlzIG1lYW5zCisgICAgLy8gd2UgaGF2ZSB0
byBleHBsaWNpdGx5IHN1cHByZXNzIHRoZSB0YWcncyBDT0RFQkFTRSBhdHRyaWJ1dGUgaWYgdGhl
cmUgaXMgbm9uZSBpbiBhIFBBUkFNLAorICAgIC8vIGVsc2Ugb3VyIEphdmEgcGx1Z2luIHdpbGwg
bWlzaW50ZXJwcmV0IGl0LiBbNDAwNDUzMV0KKyAgICBTdHJpbmcgY29kZWJhc2U7CisgICAgaWYg
KE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKHNlcnZpY2VUeXBlKSkgewor
ICAgICAgICBjb2RlYmFzZSA9ICJjb2RlYmFzZSI7CisgICAgICAgIHVuaXF1ZVBhcmFtTmFtZXMu
YWRkKGNvZGViYXNlLmltcGwoKSk7IC8vIHByZXRlbmQgd2UgZm91bmQgaXQgaW4gYSBQQVJBTSBh
bHJlYWR5CisgICAgfQorICAgIAorICAgIC8vIFR1cm4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIDxv
YmplY3Q+IGVsZW1lbnQgaW50byBhcnJheXMsIGJ1dCBkb24ndCBvdmVycmlkZSA8cGFyYW0+IHZh
bHVlcy4KKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBvYmplY3RFbGVtZW50LT5hdHRy
aWJ1dGVzKCk7CisgICAgaWYgKGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIEF0dHJp
YnV0ZSogaXQgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lID0gaXQtPm5hbWUoKS5sb2NhbE5hbWUoKTsKKyAgICAgICAg
ICAgIGlmICghdW5pcXVlUGFyYW1OYW1lcy5jb250YWlucyhuYW1lLmltcGwoKSkpIHsKKyAgICAg
ICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChuYW1lLnN0cmluZygpKTsKKyAgICAgICAgICAg
ICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnZhbHVlKCkuc3RyaW5nKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1hcERhdGFQYXJhbVRvU3JjKCZwYXJh
bU5hbWVzLCAmcGFyYW1WYWx1ZXMpOworICAgIAorICAgIC8vIElmIHdlIHN0aWxsIGRvbid0IGhh
dmUgYSB0eXBlLCB0cnkgdG8gbWFwIGZyb20gYSBzcGVjaWZpYyBDTEFTU0lEIHRvIGEgdHlwZS4K
KyAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICBzZXJ2aWNlVHlwZSA9IHNl
cnZpY2VUeXBlRm9yQ2xhc3NJZChvYmplY3RFbGVtZW50LT5jbGFzc0lkKCkpOyAgIAorfQorICAg
IAorCisvLyBGSVhNRTogVGhpcyBiZWxvbmdzIG9uIEhUTUxPYmplY3RFbGVtZW50LCBIVE1MUGx1
Z2luRWxlbWVudCBvciBIVE1MRnJhbWVPd25lckVsZW1lbnQuCitzdGF0aWMgdm9pZCB1cGRhdGVX
aWRnZXRGb3JPYmplY3RFbGVtZW50KEhUTUxPYmplY3RFbGVtZW50KiBvYmplY3RFbGVtZW50LCBi
b29sIG9ubHlDcmVhdGVOb25OZXRzY2FwZVBsdWdpbnMpCit7CisgICAgb2JqZWN0RWxlbWVudC0+
c2V0TmVlZFdpZGdldFVwZGF0ZShmYWxzZSk7CisgICAgaWYgKCFvYmplY3RFbGVtZW50LT5pc0Zp
bmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1
cmw7Ci0gICAgU3RyaW5nIHNlcnZpY2VUeXBlOworICAgIEZyYW1lKiBmcmFtZSA9IG9iamVjdEVs
ZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgU3RyaW5nIHVybCA9IG9iamVjdEVsZW1l
bnQtPnVybCgpOworICAgIFN0cmluZyBzZXJ2aWNlVHlwZSA9IG9iamVjdEVsZW1lbnQtPnNlcnZp
Y2VUeXBlKCk7CisKICAgICBWZWN0b3I8U3RyaW5nPiBwYXJhbU5hbWVzOwogICAgIFZlY3RvcjxT
dHJpbmc+IHBhcmFtVmFsdWVzOwotICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lVmlldygpLT5mcmFt
ZSgpOworICAgIHBhcmFtYXRlcnNGcm9tT2JqZWN0KG9iamVjdEVsZW1lbnQsIHBhcmFtTmFtZXMs
IHBhcmFtVmFsdWVzLCB1cmwsIHNlcnZpY2VUeXBlKTsKIAotICAgIC8vIFRoZSBjYWxscyB0byBT
dWJmcmFtZUxvYWRlcjo6cmVxdWVzdE9iamVjdCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBjYW4gcmVz
dWx0IGluIGEgcGx1Zy1pbiBiZWluZyBpbml0aWFsaXplZC4KLSAgICAvLyBUaGlzIGNhbiBydW4g
Y2F1c2UgYXJiaXRyYXJ5IEphdmFTY3JpcHQgdG8gcnVuIGFuZCBtYXkgcmVzdWx0IGluIHRoaXMg
UmVuZGVyT2JqZWN0IGJlaW5nIGRldGFjaGVkIGZyb20KLSAgICAvLyB0aGUgcmVuZGVyIHRyZWUg
YW5kIGRlc3Ryb3llZCwgY2F1c2luZyBhIGNyYXNoIGxpa2UgPHJkYXI6Ly9wcm9ibGVtLzY5NTQ1
NDY+LiAgQnkgZXh0ZW5kaW5nIG91ciBsaWZldGltZQotICAgIC8vIGFydGlmaWNhbGx5IHRvIGVu
c3VyZSB0aGF0IHdlIHJlbWFpbiBhbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHBsdWctaW4gaW5p
dGlhbGl6YXRpb24uCi0gICAgUmVuZGVyV2lkZ2V0UHJvdGVjdG9yIHByb3RlY3Rvcih0aGlzKTsK
KyAgICBpZiAoIWlzVVJMQWxsb3dlZChvYmplY3RFbGVtZW50LT5kb2N1bWVudCgpLCB1cmwpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKG9iamVjdFRhZykp
IHsKLSAgICAgICAgSFRNTE9iamVjdEVsZW1lbnQqIG9iamVjdEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MT2JqZWN0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgYm9vbCBmYWxsYmFja0NvbnRlbnQg
PSBoYXNGYWxsYmFja0NvbnRlbnQob2JqZWN0RWxlbWVudCk7CisgICAgb2JqZWN0RWxlbWVudC0+
cmVuZGVyRW1iZWRkZWRPYmplY3QoKS0+c2V0SGFzRmFsbGJhY2tDb250ZW50KGZhbGxiYWNrQ29u
dGVudCk7CiAKLSAgICAgICAgb2JqZWN0RWxlbWVudC0+c2V0TmVlZFdpZGdldFVwZGF0ZShmYWxz
ZSk7Ci0gICAgICAgIGlmICghb2JqZWN0RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJl
bigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIHVybCA9IG9i
amVjdEVsZW1lbnQtPnVybCgpOwotICAgICAgICBzZXJ2aWNlVHlwZSA9IG9iamVjdEVsZW1lbnQt
PnNlcnZpY2VUeXBlKCk7Ci0KLSAgICAgICAgSGFzaFNldDxTdHJpbmdJbXBsKiwgQ2FzZUZvbGRp
bmdIYXNoPiB1bmlxdWVQYXJhbU5hbWVzOwotCi0gICAgICAgIC8vIFNjYW4gdGhlIFBBUkFNIGNo
aWxkcmVuIGFuZCBzdG9yZSB0aGVpciBuYW1lL3ZhbHVlIHBhaXJzLgotICAgICAgICAvLyBHZXQg
dGhlIFVSTCBhbmQgdHlwZSBmcm9tIHRoZSBwYXJhbXMgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZl
IHRoZW0uCi0gICAgICAgIE5vZGUqIGNoaWxkID0gb2JqZWN0RWxlbWVudC0+Zmlyc3RDaGlsZCgp
OwotICAgICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFn
TmFtZShwYXJhbVRhZykpIHsKLSAgICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50KiBwID0g
c3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudCo+KGNoaWxkKTsKLSAgICAgICAgICAgICAgICBT
dHJpbmcgbmFtZSA9IHAtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHko
KSAmJiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNyYyIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJtb3ZpZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJjb2RlIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgInVybCIpKSkKLSAgICAgICAgICAgICAgICAgICAgdXJsID0g
ZGVwcmVjYXRlZFBhcnNlVVJMKHAtPnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGlmIChzZXJ2
aWNlVHlwZS5pc0VtcHR5KCkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInR5cGUiKSkgewot
ICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZSA9IHAtPnZhbHVlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBwb3MgPSBzZXJ2aWNlVHlwZS5maW5kKCI7Iik7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChwb3MgIT0gbm90Rm91bmQpCi0gICAgICAgICAgICAgICAgICAgICAgICBz
ZXJ2aWNlVHlwZSA9IHNlcnZpY2VUeXBlLmxlZnQocG9zKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAg
ICB1bmlxdWVQYXJhbU5hbWVzLmFkZChuYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHBhcmFtTmFtZXMuYXBwZW5kKHAtPm5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFt
VmFsdWVzLmFwcGVuZChwLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAgICB9
CisgICAgaWYgKG9ubHlDcmVhdGVOb25OZXRzY2FwZVBsdWdpbnMgJiYgaXNOZXRzY2FwZVBsdWdp
bihmcmFtZSwgdXJsLCBzZXJ2aWNlVHlwZSkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICAv
LyBXaGVuIE9CSkVDVCBpcyB1c2VkIGZvciBhbiBhcHBsZXQgdmlhIFN1bidzIEphdmEgcGx1Z2lu
LCB0aGUgQ09ERUJBU0UgYXR0cmlidXRlIGluIHRoZSB0YWcKLSAgICAgICAgLy8gcG9pbnRzIHRv
IHRoZSBKYXZhIHBsdWdpbiBpdHNlbGYgKGFuIEFjdGl2ZVggY29tcG9uZW50KSB3aGlsZSB0aGUg
YWN0dWFsIGFwcGxldCBDT0RFQkFTRSBpcwotICAgICAgICAvLyBpbiBhIFBBUkFNIHRhZy4gU2Vl
IDxodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3RzL3BsdWdpbi8xLjIvZG9jcy90YWdzLmh0bWw+
LiBUaGlzIG1lYW5zCi0gICAgICAgIC8vIHdlIGhhdmUgdG8gZXhwbGljaXRseSBzdXBwcmVzcyB0
aGUgdGFnJ3MgQ09ERUJBU0UgYXR0cmlidXRlIGlmIHRoZXJlIGlzIG5vbmUgaW4gYSBQQVJBTSwK
LSAgICAgICAgLy8gZWxzZSBvdXIgSmF2YSBwbHVnaW4gd2lsbCBtaXNpbnRlcnByZXQgaXQuIFs0
MDA0NTMxXQotICAgICAgICBTdHJpbmcgY29kZWJhc2U7Ci0gICAgICAgIGlmIChNSU1FVHlwZVJl
Z2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShzZXJ2aWNlVHlwZSkpIHsKLSAgICAgICAgICAg
IGNvZGViYXNlID0gImNvZGViYXNlIjsKLSAgICAgICAgICAgIHVuaXF1ZVBhcmFtTmFtZXMuYWRk
KGNvZGViYXNlLmltcGwoKSk7IC8vIHByZXRlbmQgd2UgZm91bmQgaXQgaW4gYSBQQVJBTSBhbHJl
YWR5Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFR1cm4gdGhlIGF0dHJpYnV0ZXMg
b2YgdGhlIDxvYmplY3Q+IGVsZW1lbnQgaW50byBhcnJheXMsIGJ1dCBkb24ndCBvdmVycmlkZSA8
cGFyYW0+IHZhbHVlcy4KLSAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gb2JqZWN0
RWxlbWVudC0+YXR0cmlidXRlcygpOwotICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGl0ID0gYXR0cmlidXRlcy0+YXR0cmlidXRl
SXRlbShpKTsKLSAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBpdC0+
bmFtZSgpLmxvY2FsTmFtZSgpOwotICAgICAgICAgICAgICAgIGlmICghdW5pcXVlUGFyYW1OYW1l
cy5jb250YWlucyhuYW1lLmltcGwoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1l
cy5hcHBlbmQobmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWVz
LmFwcGVuZChpdC0+dmFsdWUoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgYm9vbCBiZWZvcmVMb2FkQWxsb3dlZExvYWQgPSBvYmpl
Y3RFbGVtZW50LT5kaXNwYXRjaEJlZm9yZUxvYWRFdmVudCh1cmwpOwogCi0gICAgICAgIG1hcERh
dGFQYXJhbVRvU3JjKCZwYXJhbU5hbWVzLCAmcGFyYW1WYWx1ZXMpOworICAgIC8vIGJlZm9yZWxv
YWQgZXZlbnRzIGNhbiBtb2RpZnkgdGhlIERPTSwgcG90ZW50aWFsbHkgY2F1c2luZworICAgIC8v
IFJlbmRlcldpZGdldDo6ZGVzdHJveSgpIHRvIGJlIGNhbGxlZC4gIEVuc3VyZSB3ZSBoYXZlbid0
IGJlZW4KKyAgICAvLyBkZXN0cm95ZWQgYmVmb3JlIGNvbnRpbnVpbmcuCisgICAgLy8gRklYTUU6
IFNob3VsZCB0aGlzIHJlbmRlciBmYWxsYmFjayBjb250ZW50PworICAgIGlmICghb2JqZWN0RWxl
bWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIElmIHdlIHN0
aWxsIGRvbid0IGhhdmUgYSB0eXBlLCB0cnkgdG8gbWFwIGZyb20gYSBzcGVjaWZpYyBDTEFTU0lE
IHRvIGEgdHlwZS4KLSAgICAgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHNlcnZpY2VUeXBlID0gc2VydmljZVR5cGVGb3JDbGFzc0lkKG9iamVjdEVsZW1lbnQtPmNs
YXNzSWQoKSk7CisgICAgYm9vbCBzdWNjZXNzID0gYmVmb3JlTG9hZEFsbG93ZWRMb2FkICYmIGZy
YW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+cmVxdWVzdE9iamVjdChvYmplY3RFbGVt
ZW50LCB1cmwsIG9iamVjdEVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0ciksIHNlcnZpY2VU
eXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAKLSAgICAgICAgaWYgKCFpc1VSTEFsbG93
ZWQoZG9jdW1lbnQoKSwgdXJsKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN1Y2Nl
c3MgJiYgZmFsbGJhY2tDb250ZW50KQorICAgICAgICBvYmplY3RFbGVtZW50LT5yZW5kZXJGYWxs
YmFja0NvbnRlbnQoKTsKK30KIAotICAgICAgICAvLyBGaW5kIG91dCBpZiB3ZSBzdXBwb3J0IGZh
bGxiYWNrIGNvbnRlbnQuCi0gICAgICAgIG1faGFzRmFsbGJhY2tDb250ZW50ID0gZmFsc2U7Ci0g
ICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBvYmplY3RFbGVtZW50LT5maXJzdENoaWxkKCk7IGNo
aWxkICYmICFtX2hhc0ZhbGxiYWNrQ29udGVudDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICAgICAgaWYgKCghY2hpbGQtPmlzVGV4dE5vZGUoKSAmJiAhY2hpbGQtPmhh
c1RhZ05hbWUocGFyYW1UYWcpKSAvLyBEaXNjb3VudCA8cGFyYW0+Ci0gICAgICAgICAgICAgICAg
fHwgKGNoaWxkLT5pc1RleHROb2RlKCkgJiYgIXN0YXRpY19jYXN0PFRleHQqPihjaGlsZCktPmNv
bnRhaW5zT25seVdoaXRlc3BhY2UoKSkpCi0gICAgICAgICAgICAgICAgbV9oYXNGYWxsYmFja0Nv
bnRlbnQgPSB0cnVlOworLy8gRklYTUU6IFRoaXMgYmVsb25ncyBvbiBIVE1MRW1iZWRFbGVtZW50
Lgorc3RhdGljIHZvaWQgcGFyYW1hdGVyc0Zyb21FbWJlZChIVE1MRW1iZWRFbGVtZW50KiBlbWJl
ZEVsZW1lbnQsIFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMpCit7CisgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZW1iZWRFbGVtZW50
LT5hdHRyaWJ1dGVzKCk7CisgICAgaWYgKGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAg
IEF0dHJpYnV0ZSogaXQgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAg
ICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPm5hbWUoKS5sb2NhbE5hbWUoKS5zdHJpbmcoKSk7Cisg
ICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnZhbHVlKCkuc3RyaW5nKCkpOwogICAg
ICAgICB9CisgICAgfQorfQogCi0gICAgICAgIGlmIChvbmx5Q3JlYXRlTm9uTmV0c2NhcGVQbHVn
aW5zKSB7Ci0gICAgICAgICAgICBLVVJMIGNvbXBsZXRlZFVSTDsKLSAgICAgICAgICAgIGlmICgh
dXJsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb21wbGV0ZWRVUkwgPSBmcmFtZS0+bG9h
ZGVyKCktPmNvbXBsZXRlVVJMKHVybCk7CisvLyBGSVhNRTogVGhpcyBiZWxvbmdzIG9uIEhUTUxF
bWJlZEVsZW1lbnQsIEhUTUxQbHVnaW5FbGVtZW50IG9yIEhUTUxGcmFtZU93bmVyRWxlbWVudC4K
K3N0YXRpYyB2b2lkIHVwZGF0ZVdpZGdldEZvckVtYmVkRWxlbWVudChIVE1MRW1iZWRFbGVtZW50
KiBlbWJlZEVsZW1lbnQsIGJvb2wgb25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lucykKK3sKKyAg
ICBGcmFtZSogZnJhbWUgPSBlbWJlZEVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAg
U3RyaW5nIHVybCA9IGVtYmVkRWxlbWVudC0+dXJsKCk7CisgICAgU3RyaW5nIHNlcnZpY2VUeXBl
ID0gZW1iZWRFbGVtZW50LT5zZXJ2aWNlVHlwZSgpOwogCi0gICAgICAgICAgICBpZiAoZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+b2JqZWN0Q29udGVudFR5cGUoY29tcGxldGVkVVJMLCBzZXJ2
aWNlVHlwZSkgPT0gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgIGVtYmVkRWxlbWVudC0+c2V0TmVlZFdpZGdldFVwZGF0
ZShmYWxzZSk7CiAKLSAgICAgICAgYm9vbCBiZWZvcmVMb2FkQWxsb3dlZExvYWQgPSBvYmplY3RF
bGVtZW50LT5kaXNwYXRjaEJlZm9yZUxvYWRFdmVudCh1cmwpOwotICAgICAgICAKLSAgICAgICAg
Ly8gYmVmb3JlbG9hZCBldmVudHMgY2FuIG1vZGlmeSB0aGUgRE9NLCBwb3RlbnRpYWxseSBjYXVz
aW5nCi0gICAgICAgIC8vIFJlbmRlcldpZGdldDo6ZGVzdHJveSgpIHRvIGJlIGNhbGxlZC4gIEVu
c3VyZSB3ZSBoYXZlbid0IGJlZW4KLSAgICAgICAgLy8gZGVzdHJveWVkIGJlZm9yZSBjb250aW51
aW5nLgotICAgICAgICBpZiAoIW5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGJlZm9yZUxvYWRBbGxvd2VkTG9hZCAmJiBmcmFtZS0+
bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPnJlcXVlc3RPYmplY3QodGhpcywgdXJsLCBvYmpl
Y3RFbGVtZW50LT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1l
cywgcGFyYW1WYWx1ZXMpOwotICAgIAotICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbV9oYXNGYWxs
YmFja0NvbnRlbnQpCi0gICAgICAgICAgICBvYmplY3RFbGVtZW50LT5yZW5kZXJGYWxsYmFja0Nv
bnRlbnQoKTsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiBzZXJ2aWNlVHlwZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzVVJMQWxsb3dlZChlbWJlZEVsZW1lbnQtPmRv
Y3VtZW50KCksIHVybCkpCisgICAgICAgIHJldHVybjsKIAotICAgIH0gZWxzZSBpZiAobm9kZSgp
LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgewotICAgICAgICBIVE1MRW1iZWRFbGVtZW50KiBlbWJl
ZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVtZW50Kj4obm9kZSgpKTsKLSAgICAg
ICAgZW1iZWRFbGVtZW50LT5zZXROZWVkV2lkZ2V0VXBkYXRlKGZhbHNlKTsKLSAgICAgICAgdXJs
ID0gZW1iZWRFbGVtZW50LT51cmwoKTsKLSAgICAgICAgc2VydmljZVR5cGUgPSBlbWJlZEVsZW1l
bnQtPnNlcnZpY2VUeXBlKCk7CisgICAgVmVjdG9yPFN0cmluZz4gcGFyYW1OYW1lczsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVlczsKKyAgICBwYXJhbWF0ZXJzRnJvbUVtYmVkKGVtYmVk
RWxlbWVudCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogCi0gICAgICAgIGlmICh1cmwuaXNF
bXB0eSgpICYmIHNlcnZpY2VUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKCFpc1VSTEFsbG93ZWQoZG9jdW1lbnQoKSwgdXJsKSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICBpZiAob25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lucyAmJiBpc05ldHNjYXBl
UGx1Z2luKGZyYW1lLCB1cmwsIHNlcnZpY2VUeXBlKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIC8vIGFkZCBhbGwgYXR0cmlidXRlcyBzZXQgb24gdGhlIGVtYmVkIG9iamVjdAotICAgICAg
ICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbWJlZEVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsK
LSAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQXR0
cmlidXRlKiBpdCA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPm5hbWUoKS5sb2NhbE5hbWUoKS5zdHJpbmcoKSk7Ci0g
ICAgICAgICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLnN0cmluZygpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGlmIChlbWJlZEVsZW1lbnQtPmRpc3BhdGNo
QmVmb3JlTG9hZEV2ZW50KHVybCkpIHsKKyAgICAgICAgLy8gRklYTUU6IGJlZm9yZUxvYWQgY291
bGQgaGF2ZSBkZXRhY2hlZCB0aGUgcmVuZGVyZXIhICBKdXN0IGxpa2UgaW4gdGhlIDxvYmplY3Q+
IGNhc2UgYWJvdmUuCisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+
cmVxdWVzdE9iamVjdChlbWJlZEVsZW1lbnQsIHVybCwgZW1iZWRFbGVtZW50LT5nZXRBdHRyaWJ1
dGUobmFtZUF0dHIpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworICAg
IH0KK30KIAotICAgICAgICBpZiAob25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lucykgewotICAg
ICAgICAgICAgS1VSTCBjb21wbGV0ZWRVUkw7Ci0gICAgICAgICAgICBpZiAoIXVybC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgY29tcGxldGVkVVJMID0gZnJhbWUtPmxvYWRlcigpLT5jb21w
bGV0ZVVSTCh1cmwpOworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKSAgICAgICAg
CisvLyBGSVhNRTogVGhpcyBiZWxvbmdzIG9uIEhUTUxNZWRpYUVsZW1lbnQuCitzdGF0aWMgdm9p
ZCB1cGRhdGVXaWRnZXRGb3JNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50LCBib29sIGlnbm9yZWQpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcGFyYW1OYW1lczsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVlczsKKyAgICBLVVJMIGt1cmw7CiAKLSAgICAgICAg
ICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5vYmplY3RDb250ZW50VHlwZShjb21w
bGV0ZWRVUkwsIHNlcnZpY2VUeXBlKSA9PSBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW4pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgbWVkaWFFbGVtZW50LT5nZXRQ
bHVnaW5Qcm94eVBhcmFtcyhrdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgbWVk
aWFFbGVtZW50LT5zZXROZWVkV2lkZ2V0VXBkYXRlKGZhbHNlKTsKKyAgICBmcmFtZS0+bG9hZGVy
KCktPnN1YmZyYW1lTG9hZGVyKCktPmxvYWRNZWRpYVBsYXllclByb3h5UGx1Z2luKG1lZGlhRWxl
bWVudCwga3VybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworfQorI2VuZGlmCisKK3ZvaWQg
UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnVwZGF0ZVdpZGdldChib29sIG9ubHlDcmVhdGVOb25OZXRz
Y2FwZVBsdWdpbnMpCit7CisgICAgaWYgKCFtX3JlcGxhY2VtZW50VGV4dC5pc051bGwoKSB8fCAh
bm9kZSgpKSAvLyBDaGVjayB0aGUgbm9kZSBpbiBjYXNlIGRlc3Ryb3koKSBoYXMgYmVlbiBjYWxs
ZWQuCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoZW1iZWRFbGVtZW50LT5kaXNwYXRj
aEJlZm9yZUxvYWRFdmVudCh1cmwpKQotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJm
cmFtZUxvYWRlcigpLT5yZXF1ZXN0T2JqZWN0KHRoaXMsIHVybCwgZW1iZWRFbGVtZW50LT5nZXRB
dHRyaWJ1dGUobmFtZUF0dHIpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMp
OworICAgIC8vIFRoZSBjYWxscyB0byBTdWJmcmFtZUxvYWRlcjo6cmVxdWVzdE9iamVjdCB3aXRo
aW4gdGhpcyBmdW5jdGlvbiBjYW4gcmVzdWx0IGluIGEgcGx1Zy1pbiBiZWluZyBpbml0aWFsaXpl
ZC4KKyAgICAvLyBUaGlzIGNhbiBydW4gY2F1c2UgYXJiaXRyYXJ5IEphdmFTY3JpcHQgdG8gcnVu
IGFuZCBtYXkgcmVzdWx0IGluIHRoaXMgUmVuZGVyT2JqZWN0IGJlaW5nIGRldGFjaGVkIGZyb20K
KyAgICAvLyB0aGUgcmVuZGVyIHRyZWUgYW5kIGRlc3Ryb3llZCwgY2F1c2luZyBhIGNyYXNoIGxp
a2UgPHJkYXI6Ly9wcm9ibGVtLzY5NTQ1NDY+LiAgQnkgZXh0ZW5kaW5nIG91ciBsaWZldGltZQor
ICAgIC8vIGFydGlmaWNhbGx5IHRvIGVuc3VyZSB0aGF0IHdlIHJlbWFpbiBhbGl2ZSBmb3IgdGhl
IGR1cmF0aW9uIG9mIHBsdWctaW4gaW5pdGlhbGl6YXRpb24uCisgICAgUmVuZGVyV2lkZ2V0UHJv
dGVjdG9yIHByb3RlY3Rvcih0aGlzKTsKKworICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUob2Jq
ZWN0VGFnKSkgeworICAgICAgICBIVE1MT2JqZWN0RWxlbWVudCogb2JqZWN0RWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50Kj4obm9kZSgpKTsKKyAgICAgICAgdXBkYXRlV2lk
Z2V0Rm9yT2JqZWN0RWxlbWVudChvYmplY3RFbGVtZW50LCBvbmx5Q3JlYXRlTm9uTmV0c2NhcGVQ
bHVnaW5zKTsKKyAgICB9IGVsc2UgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShlbWJlZFRhZykpIHsK
KyAgICAgICAgSFRNTEVtYmVkRWxlbWVudCogZW1iZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEVtYmVkRWxlbWVudCo+KG5vZGUoKSk7CisgICAgICAgIHVwZGF0ZVdpZGdldEZvckVtYmVkRWxl
bWVudChlbWJlZEVsZW1lbnQsIG9ubHlDcmVhdGVOb25OZXRzY2FwZVBsdWdpbnMpOwogICAgIH0K
ICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykgICAgICAgIAogICAgIGVsc2UgaWYg
KG5vZGUoKS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgbm9kZSgpLT5oYXNUYWdOYW1lKGF1ZGlv
VGFnKSkgewogICAgICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obm9kZSgpKTsKLSAgICAgICAgS1VSTCBrdXJsOwotCi0g
ICAgICAgIG1lZGlhRWxlbWVudC0+Z2V0UGx1Z2luUHJveHlQYXJhbXMoa3VybCwgcGFyYW1OYW1l
cywgcGFyYW1WYWx1ZXMpOwotICAgICAgICBtZWRpYUVsZW1lbnQtPnNldE5lZWRXaWRnZXRVcGRh
dGUoZmFsc2UpOwotICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmxv
YWRNZWRpYVBsYXllclByb3h5UGx1Z2luKG5vZGUoKSwga3VybCwgcGFyYW1OYW1lcywgcGFyYW1W
YWx1ZXMpOworICAgICAgICB1cGRhdGVXaWRnZXRGb3JNZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50
LCBvbmx5Q3JlYXRlTm9uTmV0c2NhcGVQbHVnaW5zKTsKICAgICB9CiAjZW5kaWYKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmggYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCmluZGV4IDA5NDQwOTRkZmUzNzEzMGVk
ZTc3ZDY4YmVmNTJmNmM1NDgyMThjN2IuLjYzNzZmOTMzM2NhYTRlOGQxNzg2Y2EwN2M4MjY0NjNh
NDg3ZTM0ZTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaApAQCAt
NDEsNyArNDEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaG93c0NyYXNoZWRQbHVnaW5JbmRp
Y2F0b3IoKTsKICAgICBib29sIHNob3dzTWlzc2luZ1BsdWdpbkluZGljYXRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvd3NNaXNzaW5nUGx1Z2luSW5kaWNhdG9yOyB9CiAKKyAgICAvLyBGSVhNRTog
VGhpcyBiZWxvbmdzIG9uIEhUTUxPYmplY3RFbGVtZW50LgogICAgIGJvb2wgaGFzRmFsbGJhY2tD
b250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYWxsYmFja0NvbnRlbnQ7IH0KKyAgICB2b2lk
IHNldEhhc0ZhbGxiYWNrQ29udGVudChib29sIGhhc0ZhbGxiYWNrQ29udGVudCkgeyBtX2hhc0Zh
bGxiYWNrQ29udGVudCA9IGhhc0ZhbGxiYWNrQ29udGVudDsgfQogCiAgICAgdm9pZCBoYW5kbGVN
aXNzaW5nUGx1Z2luSW5kaWNhdG9yRXZlbnQoRXZlbnQqKTsKIApAQCAtNjgsNyArNzAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoaW50IHR4LCBpbnQg
dHksIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIFBhdGgmLCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50
VGV4dFJlY3QsIEZvbnQmLCBUZXh0UnVuJiwgZmxvYXQmIHRleHRXaWR0aCk7CiAKICAgICBTdHJp
bmcgbV9yZXBsYWNlbWVudFRleHQ7Ci0gICAgYm9vbCBtX2hhc0ZhbGxiYWNrQ29udGVudDsKKyAg
ICBib29sIG1faGFzRmFsbGJhY2tDb250ZW50OyAvLyBGSVhNRTogVGhpcyBiZWxvbmdzIG9uIEhU
TUxPYmplY3RFbGVtZW50LgogICAgIGJvb2wgbV9zaG93c01pc3NpbmdQbHVnaW5JbmRpY2F0b3I7
CiAgICAgYm9vbCBtX21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQ7CiAgICAgYm9vbCBt
X21vdXNlRG93bldhc0luTWlzc2luZ1BsdWdpbkluZGljYXRvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66170</attachid>
            <date>2010-08-31 23:17:08 -0700</date>
            <delta_ts>2010-09-01 19:12:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45007-20100831231707.patch</filename>
            <type>text/plain</type>
            <size>39337</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2JkNDlkYmNlZTViZTg0OTNkOWE4MWE0NjY5NGY3ZTAzOWNhZjMyNy4uMDkzYzM2MWU4ZmJjYTY5
YTFhMTMyZWVkNzIxMDcwNTE1ZDhkMDQ5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAxMC0wOC0zMSAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHJlbmRlcmluZyB0eXBlcyBmcm9tIFN1YmZyYW1l
TG9hZGVyIGFuZCBzcGxpdCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dXBkYXRlV2lkZ2V0IGluIHBy
ZXBhcmF0aW9uIGZvciBtb3ZpbmcgdG8gRE9NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NTAwNworCisgICAgICAgIFRoaXMgaXMganVzdCBtb3Zpbmcg
YXJvdW5kIGNvZGUgKGFuZCBhdHRlbXB0aW5nIHRvIG1ha2UgaXQgbW9yZSBzYW5lKS4KKyAgICAg
ICAgSSBhbHNvIHRyaWVkIHRvIHVzZSBtb3JlIHNwZWNpZmljIHR5cGVzIHdoZXJlIHBvc3NpYmxl
LgorICAgICAgICBUaGUgU3ViZnJhbWVMb2FkZXIgbm8gbG9uZ2VyIHVzZXMgYW55IHJlbmRlcmlu
ZyB0eXBlcyBpbiBpdHMgQVBJLgorCisgICAgICAgIEkgc3BsaXQgUmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OnVwZGF0ZVdpZGdldCBpbnRvIGEgYnVuY2ggb2YgZnVuY3Rpb25zLgorICAgICAgICBJdCB3
YXMgb2J2aW91cyBiZWZvcmUsIGJ1dCBub3cgc3VwZXItb2J2aW91cyBhZnRlciB0aGUgc3BsaXQg
dGhhdCB0aGVzZQorICAgICAgICBuZXcgZnVuY3Rpb25zIGRvIG5vdCBiZWxvbmcgaW4gUmVuZGVy
RW1iZWRkZWRPYmplY3QuICBJbnN0ZWFkIHRoZXkKKyAgICAgICAgbmVlZCB0byBiZSBtb3ZlZCB0
byB0aGVpciByZXNwZWN0aXZlIERPTSBjbGFzc2VzLiAgSSd2ZSBhZGRlZCBGSVhNRXMKKyAgICAg
ICAgbmV4dCB0byBlYWNoIG9mIHRoZSBmdW5jdGlvbnMgd2hpY2ggc2hvdWxkIGJlIG1vdmVkLCBi
dXQgSSd2ZSBub3QgbW92ZWQKKyAgICAgICAgYW55IG9mIHRoZSBsb2dpYyBvdXQgb2YgUmVuZGVy
RW1iZWRkZWRPYmplY3QuY3BwIHlldCBpbiBhbiBlZmZvcnQgdG8KKyAgICAgICAga2VlcCB0aGlz
IHBhdGNoIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4KKworICAgICAgICBObyBmdW5jdGlvbmFsIGNo
YW5nZSwgdGh1cyBubyB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50Ojp1cGRhdGVXaWRnZXQpOgor
ICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OmF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RnJhbWVFbGVtZW50QmFzZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxl
bWVudEJhc2U6OmhlaWdodCk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50OjpyZW5kZXJQYXJ0
KToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVs
ZW1lbnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9iamVjdEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
YmplY3RFbGVtZW50Ojp1cGRhdGVXaWRnZXQpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OnJlbmRlckVt
YmVkZGVkT2JqZWN0KToKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5FbGVtZW50Lmg6CisgICAg
ICAgICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRvY3VtZW50UGFyc2VyOjphcHBlbmRCeXRlcyk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpkb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRlcjo6bG9hZFBsdWdpbik6CisgICAgICAgICogbG9h
ZGVyL1N1YmZyYW1lTG9hZGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVk
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTmV0c2NhcGVQbHVnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6aGFzRmFsbGJhY2tDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcmFt
ZXRlcnNGcm9tT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVdpZGdldEZvck9iamVj
dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyYW1ldGVyc0Zyb21FbWJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjp1cGRhdGVXaWRnZXRGb3JFbWJlZEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6dXBkYXRlV2lkZ2V0Rm9yTWVkaWFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckVtYmVkZGVkT2JqZWN0Ojp1cGRhdGVXaWRnZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRP
YmplY3Q6OnNldEhhc0ZhbGxiYWNrQ29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5oOgorCiAyMDEwLTA4LTMwICBJbHlhIFRpa2hvbm92c2t5ICA8bG9p
c2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8u
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKaW5kZXggZmIyYjM1MWI5YmE4MGRiMTZlYjM4OWNh
Mjg0OWZjODg0MmI1M2UyOS4uZTc4ODliOGYzNDg0MGM5YjYyNzk2YjE4NTk2OGJmMzllMWJjZGM5
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCisrKyBiL1dl
YkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAtMTg2LDggKzE4Niw4IEBAIHZvaWQg
SFRNTEVtYmVkRWxlbWVudDo6YXR0YWNoKCkKIHZvaWQgSFRNTEVtYmVkRWxlbWVudDo6dXBkYXRl
V2lkZ2V0KCkKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0gICAg
aWYgKG1fbmVlZFdpZGdldFVwZGF0ZSAmJiByZW5kZXJlcigpICYmICFpc0ltYWdlVHlwZSgpKQot
ICAgICAgICB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KHJlbmRlcmVyKCkpLT51cGRhdGVXaWRnZXQo
dHJ1ZSk7CisgICAgaWYgKG1fbmVlZFdpZGdldFVwZGF0ZSAmJiByZW5kZXJFbWJlZGRlZE9iamVj
dCgpICYmICFpc0ltYWdlVHlwZSgpKQorICAgICAgICByZW5kZXJFbWJlZGRlZE9iamVjdCgpLT51
cGRhdGVXaWRnZXQodHJ1ZSk7CiB9CiAKIHZvaWQgSFRNTEVtYmVkRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRC
YXNlLmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKaW5kZXggNmNh
ZTg5MTFmMGJhZDlmNGY2ZGNmMjZhZjUwNTBlNWY4NGY3ZTQ0My4uYjk2NzkyNjA5YjUzMDI3OTBh
NWUwZjgxZGVjZDUxNzEwZDBkMTM2MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZUVsZW1lbnRCYXNlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2Uu
Y3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
S1VSTC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVj
dC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKQEAgLTIxMCwxMCArMjExLDEw
IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmF0dGFjaCgpCiAgICAgc2V0UmVtYWluc0Fs
aXZlT25SZW1vdmFsRnJvbVRyZWUoZmFsc2UpOwogCiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50
OjphdHRhY2goKTsKLSAgICAKLSAgICBpZiAoUmVuZGVyUGFydCogcmVuZGVyUGFydCA9IHRvUmVu
ZGVyUGFydChyZW5kZXJlcigpKSkgeworCisgICAgaWYgKFJlbmRlclBhcnQqIHBhcnQgPSByZW5k
ZXJQYXJ0KCkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvbnRlbnRGcmFtZSgpKQot
ICAgICAgICAgICAgcmVuZGVyUGFydC0+c2V0V2lkZ2V0KGZyYW1lLT52aWV3KCkpOworICAgICAg
ICAgICAgcGFydC0+c2V0V2lkZ2V0KGZyYW1lLT52aWV3KCkpOwogICAgIH0KIH0KIApAQCAtMjU3
LDIwICsyNTgsMjAgQEAgYm9vbCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6aXNVUkxBdHRyaWJ1dGUo
QXR0cmlidXRlICphdHRyKSBjb25zdAogCiBpbnQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OndpZHRo
KCkgY29uc3QKIHsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAgaWYgKCFyZW5kZXJCb3goKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gdG9SZW5kZXJCb3gocmVuZGVy
ZXIoKSktPndpZHRoKCk7CisgICAgcmV0dXJuIHJlbmRlckJveCgpLT53aWR0aCgpOwogfQogCiBp
bnQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5k
ZXJlcigpKQorICAgIGlmICghcmVuZGVyQm94KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIAor
CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
Ci0gICAgcmV0dXJuIHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5oZWlnaHQoKTsKKyAgICByZXR1
cm4gcmVuZGVyQm94KCktPmhlaWdodCgpOwogfQogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNl
OjpzZXRSZW1haW5zQWxpdmVPblJlbW92YWxGcm9tVHJlZShib29sIHZhbHVlKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwv
SFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAppbmRleCBhMWE2OWYzOTRiZWYzMTliODhiZjhkMmQy
NTkzNWRhNDVmZWIxZTA0Li4zZjk0NmYwZDNlNDUwOTM1MGM0NTIwMTIyODlmMGU0ODBjYzQ0NDc2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcApAQCAtMjQsNiArMjQsNyBA
QAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCiAKICNpZiBFTkFCTEUoU1ZH
KQogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKQEAgLTM5LDYgKzQwLDE1IEBAIEhUTUxGcmFt
ZU93bmVyRWxlbWVudDo6SFRNTEZyYW1lT3duZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtCiB7CiB9CiAKK1JlbmRlclBhcnQqIEhUTUxGcmFtZU93bmVyRWxlbWVu
dDo6cmVuZGVyUGFydCgpIGNvbnN0Cit7CisgICAgLy8gSFRNTE9iamVjdEVsZW1lbnQgYW5kIEhU
TUxFbWJlZEVsZW1lbnQgbWF5IHJldHVybiBhcmJpdHJhcnkgcmVuZGVyZXJzCisgICAgLy8gd2hl
biB1c2luZyBmYWxsYmFjayBjb250ZW50LgorICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVy
ZXIoKS0+aXNSZW5kZXJQYXJ0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0b1Jl
bmRlclBhcnQocmVuZGVyZXIoKSk7Cit9CisKIHZvaWQgSFRNTEZyYW1lT3duZXJFbGVtZW50Ojp3
aWxsUmVtb3ZlKCkKIHsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29udGVudEZyYW1lKCkpIHsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaCBiL1dlYkNv
cmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAppbmRleCA4MDRhYjIyNjQ5YTY4OGQwYmY2
NTAxNmNkNmQ1MTA2ZmNmZTIwMDdjLi5jODRkN2JiNTc4NTAxZjM3NTYyNjQ3ZmQ0NjljNWRkOGUw
N2UxNjJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgK
KysrIGIvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCkBAIC0yOCw2ICsyOCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgRnJhbWU7
CitjbGFzcyBSZW5kZXJQYXJ0OwogCiAjaWYgRU5BQkxFKFNWRykKIGNsYXNzIFNWR0RvY3VtZW50
OwpAQCAtNDEsNiArNDIsMTEgQEAgcHVibGljOgogICAgIERPTVdpbmRvdyogY29udGVudFdpbmRv
dygpIGNvbnN0OwogICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQoKSBjb25zdDsKIAorICAg
IC8vIE1vc3Qgc3ViY2xhc3NlcyB1c2UgUmVuZGVyUGFydCAoZWl0aGVyIFJlbmRlckVtYmVkZGVk
T2JqZWN0IG9yIFJlbmRlcklGcmFtZSkKKyAgICAvLyBleGNlcHQgZm9yIEhUTUxPYmplY3RFbGVt
ZW50IGFuZCBIVE1MRW1iZWRFbGVtZW50IHdoaWNoIG1heSByZXR1cm4gYW55CisgICAgLy8gUmVu
ZGVyT2JqZWN0IHdoZW4gdXNpbmcgZmFsbGJhY2sgY29udGVudC4KKyAgICBSZW5kZXJQYXJ0KiBy
ZW5kZXJQYXJ0KCkgY29uc3Q7CisKICNpZiBFTkFCTEUoU1ZHKQogICAgIFNWR0RvY3VtZW50KiBn
ZXRTVkdEb2N1bWVudChFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuY3BwCmluZGV4IGJmMmRlYmEwMTgwZGMyZmFmYjBiYzBhMWMyOTM0M2UxOTJh
MGJlYmQuLjA0YzAwYTllZDZjMmE4YzUzZTRiOGI1NzY0YWEwMzk0Y2FhYmI3NzYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtNjIsOSArNjIsNyBAQCBQYXNzUmVmUHRyPEhUTUxP
YmplY3RFbGVtZW50PiBIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZwogUmVuZGVyV2lkZ2V0KiBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9y
SlNCaW5kaW5ncygpIGNvbnN0CiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigp
LT5pc1dpZGdldCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9SZW5kZXJXaWRn
ZXQocmVuZGVyZXIoKSk7CisgICAgcmV0dXJuIHJlbmRlclBhcnQoKTsgLy8gVGhpcyB3aWxsIHJl
dHVybiAwIGlmIHRoZSByZW5kZXJlciBpcyBub3QgYSBSZW5kZXJQYXJ0LgogfQogCiB2b2lkIEhU
TUxPYmplY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkBA
IC0xMzIsOCArMTMwLDExIEBAIGJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVk
ZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQogICAgIHJldHVybiBpc0dlYXJzUGx1Z2luIHx8IEhUTUxQ
bHVnSW5FbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsKIH0KIAotUmVuZGVyT2JqZWN0
ICpIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBS
ZW5kZXJTdHlsZSogc3R5bGUpCitSZW5kZXJPYmplY3QqIEhUTUxPYmplY3RFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKKyAg
ICAvLyBGYWxsYmFjayBjb250ZW50IGJyZWFrcyB0aGUgRE9NLT5SZW5kZXJlciBjbGFzcyByZWxh
dGlvbnNoaXAgb2YgdGhpcworICAgIC8vIGNsYXNzIGFuZCBhbGwgc3VwZXJjbGFzc2VzIGJlY2F1
c2UgY3JlYXRlT2JqZWN0IHdvbid0IG5lY2Vzc2FyaWx5CisgICAgLy8gcmV0dXJuIGEgUmVuZGVy
RW1iZWRkZWRPYmplY3QsIFJlbmRlclBhcnQgb3IgZXZlbiBSZW5kZXJXaWRnZXQuCiAgICAgaWYg
KG1fdXNlRmFsbGJhY2tDb250ZW50KQogICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpjcmVh
dGVPYmplY3QodGhpcywgc3R5bGUpOwogICAgIGlmIChpc0ltYWdlVHlwZSgpKSB7CkBAIC0xNjMs
OCArMTY0LDggQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6YXR0YWNoKCkKIHZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlU3R5
bGVJZk5lZWRlZCgpOwotICAgIGlmIChtX25lZWRXaWRnZXRVcGRhdGUgJiYgcmVuZGVyZXIoKSAm
JiAhbV91c2VGYWxsYmFja0NvbnRlbnQgJiYgIWlzSW1hZ2VUeXBlKCkpCi0gICAgICAgIHRvUmVu
ZGVyRW1iZWRkZWRPYmplY3QocmVuZGVyZXIoKSktPnVwZGF0ZVdpZGdldCh0cnVlKTsKKyAgICBp
ZiAobV9uZWVkV2lkZ2V0VXBkYXRlICYmIHJlbmRlckVtYmVkZGVkT2JqZWN0KCkgJiYgIW1fdXNl
RmFsbGJhY2tDb250ZW50ICYmICFpc0ltYWdlVHlwZSgpKQorICAgICAgICByZW5kZXJFbWJlZGRl
ZE9iamVjdCgpLT51cGRhdGVXaWRnZXQodHJ1ZSk7CiB9CiAKIHZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRN
TFBsdWdJbkVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcApp
bmRleCAxODcxYjY1ODdjYWM3ZjEzODg3OTRlMzQ5N2IxMzgzNzAyOTU2M2RhLi41ZmZiNzZkNTI1
NzQxOGIwOGIxMGI3NzRhYzM2ZWE5NmRiMjA5MTVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5jcHAKQEAgLTgxLDYgKzgxLDE1IEBAIHZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFjaCgp
CiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpkZXRhY2goKTsKIH0KIAorUmVuZGVyRW1iZWRk
ZWRPYmplY3QqIEhUTUxQbHVnSW5FbGVtZW50OjpyZW5kZXJFbWJlZGRlZE9iamVjdCgpIGNvbnN0
Cit7CisgICAgLy8gSFRNTE9iamVjdEVsZW1lbnQgYW5kIEhUTUxFbWJlZEVsZW1lbnQgbWF5IHJl
dHVybiBhcmJpdHJhcnkgcmVuZGVyZXJzCisgICAgLy8gd2hlbiB1c2luZyBmYWxsYmFjayBjb250
ZW50LgorICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aXNFbWJlZGRlZE9iamVj
dCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdG9SZW5kZXJFbWJlZGRlZE9iamVj
dChyZW5kZXJlcigpKTsKK30KKwogUGFzc1NjcmlwdEluc3RhbmNlIEhUTUxQbHVnSW5FbGVtZW50
OjpnZXRJbnN0YW5jZSgpIGNvbnN0CiB7CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+
ZnJhbWUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oIGIv
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKaW5kZXggOGE3OTFiMTczOGVmY2M1NjFi
NDhhZjBkODQ4ZmZiZGE5Y2ViMWVkYi4uMjlmY2RiMDAwNzRmODUwMWU5N2FlMTQwMGRjYWQ5Njhi
ZDE3M2VjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKKysr
IGIvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKQEAgLTMyLDYgKzMyLDcgQEAgc3Ry
dWN0IE5QT2JqZWN0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJlbmRlckVtYmVk
ZGVkT2JqZWN0OwogY2xhc3MgUmVuZGVyV2lkZ2V0OwogY2xhc3MgV2lkZ2V0OwogCkBAIC01MCw2
ICs1MSw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2FwdHVyaW5nTW91c2VFdmVudHMoKSBjb25z
dCB7IHJldHVybiBtX2lzQ2FwdHVyaW5nTW91c2VFdmVudHM7IH0KICAgICB2b2lkIHNldElzQ2Fw
dHVyaW5nTW91c2VFdmVudHMoYm9vbCBjYXB0dXJpbmcpIHsgbV9pc0NhcHR1cmluZ01vdXNlRXZl
bnRzID0gY2FwdHVyaW5nOyB9CiAKKyAgICBSZW5kZXJFbWJlZGRlZE9iamVjdCogcmVuZGVyRW1i
ZWRkZWRPYmplY3QoKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIEhUTUxQbHVnSW5FbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcCBiL1dlYkNvcmUvbG9hZGVyL1BsdWdp
bkRvY3VtZW50LmNwcAppbmRleCAwOGU2ZmFlNWEzYjFiMzYxNmFiYmM0ZjgwOGE5YWU1NTdmZmM4
N2ZhLi5hZDExZGZiZjNjNTZmZmQ0MmQwZTQzMDJhOGNlMGY1OWM3ZWE5ZGViIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIv
UGx1Z2luRG9jdW1lbnQuY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBQbHVnaW5Eb2N1bWVu
dFBhcnNlcjo6YXBwZW5kQnl0ZXMoRG9jdW1lbnRXcml0ZXIqLCBjb25zdCBjaGFyKiwgaW50LCBi
b29sKQogCiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKLSAgICBpZiAoUmVuZGVy
V2lkZ2V0KiByZW5kZXJlciA9IHRvUmVuZGVyV2lkZ2V0KG1fZW1iZWRFbGVtZW50LT5yZW5kZXJl
cigpKSkgeworICAgIGlmIChSZW5kZXJQYXJ0KiByZW5kZXJlciA9IG1fZW1iZWRFbGVtZW50LT5y
ZW5kZXJQYXJ0KCkpIHsKICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVkaXJl
Y3REYXRhVG9QbHVnaW4ocmVuZGVyZXItPndpZGdldCgpKTsKICAgICAgICAgZnJhbWUtPmxvYWRl
cigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VMb2FkZXIoKS0+c2V0U2hv
dWxkQnVmZmVyRGF0YShmYWxzZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIv
U3ViZnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCmlu
ZGV4IDA4OWU3ODMxZTU2ZWYyNDFjNjc1MzY5ZDQ1OTRkNmY3MGQ3NTUzZDcuLjk3OWZmYzQ0YmRm
MTJkZTBlODA3YjkxZjY5OWVhNTVlZjMyOGU3NjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVy
L1N1YmZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5j
cHAKQEAgLTYzLDE2ICs2Myw2IEBAIFN1YmZyYW1lTG9hZGVyOjpTdWJmcmFtZUxvYWRlcihGcmFt
ZSogZnJhbWUpCiB7CiB9CiAKLXN0YXRpYyBIVE1MUGx1Z0luRWxlbWVudCogdG9QbHVnSW5FbGVt
ZW50KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIEFTU0VSVChub2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgbm9kZS0+aGFzVGFnTmFt
ZShlbWJlZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKTsKLQotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG5vZGUpOwotfQotCiB2b2lkIFN1YmZy
YW1lTG9hZGVyOjpjbGVhcigpCiB7CiAgICAgbV9jb250YWluc1BsdWdpbnMgPSBmYWxzZTsKQEAg
LTk5LDcgKzg5LDcgQEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6cmVxdWVzdEZyYW1lKEhUTUxGcmFt
ZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHIKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBTdWJmcmFtZUxvYWRlcjo6cmVxdWVzdE9iamVjdChSZW5kZXJFbWJlZGRlZE9i
amVjdCogcmVuZGVyZXIsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZy
YW1lTmFtZSwKK2Jvb2wgU3ViZnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QoSFRNTFBsdWdJbkVs
ZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZnJhbWVOYW1lLAogICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCiB7
CiAgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgbWltZVR5cGUuaXNFbXB0eSgpKQpAQCAtMTEwLDYg
KzEwMCwxMiBAQCBib29sIFN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0KFJlbmRlckVtYmVk
ZGVkT2JqZWN0KiByZW5kZXJlciwgY29uc3QgU3RyaW5nJgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCisgICAgLy8gRklYTUU6IE5vbmUgb2YgdGhpcyBjb2RlIHNob3VsZCB1c2UgcmVu
ZGVyZXJzIQorICAgIFJlbmRlckVtYmVkZGVkT2JqZWN0KiByZW5kZXJlciA9IG93bmVyRWxlbWVu
dC0+cmVuZGVyRW1iZWRkZWRPYmplY3QoKTsKKyAgICBBU1NFUlQocmVuZGVyZXIpOworICAgIGlm
ICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEtVUkwgY29tcGxldGVk
VVJMOwogICAgIGlmICghdXJsLmlzRW1wdHkoKSkKICAgICAgICAgY29tcGxldGVkVVJMID0gY29t
cGxldGVVUkwodXJsKTsKQEAgLTEyNiwxOSArMTIyLDE5IEBAIGJvb2wgU3ViZnJhbWVMb2FkZXI6
OnJlcXVlc3RPYmplY3QoUmVuZGVyRW1iZWRkZWRPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBTdHJp
bmcmCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1
bWVudCgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmlzU2FuZGJv
eGVkKFNhbmRib3hQbHVnaW5zKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIGxvYWRQbHVnaW4ocmVuZGVyZXIsIGNvbXBsZXRlZFVSTCwgbWltZVR5cGUsIHBhcmFt
TmFtZXMsIHBhcmFtVmFsdWVzLCB1c2VGYWxsYmFjayk7Ci0gICAgfQogCi0gICAgQVNTRVJUKHJl
bmRlcmVyLT5ub2RlKCktPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCByZW5kZXJlci0+bm9kZSgp
LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSk7Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KHJlbmRlcmVyLT5ub2RlKCkpOworICAg
ICAgICBBU1NFUlQob3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgb3duZXJF
bGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSk7CisgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50
KiBwbHVnaW5FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihvd25lckVs
ZW1lbnQpOworCisgICAgICAgIHJldHVybiBsb2FkUGx1Z2luKHBsdWdpbkVsZW1lbnQsIGNvbXBs
ZXRlZFVSTCwgbWltZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCB1c2VGYWxsYmFjayk7
CisgICAgfQogCiAgICAgLy8gSWYgdGhlIHBsdWctaW4gZWxlbWVudCBhbHJlYWR5IGNvbnRhaW5z
IGEgc3ViZnJhbWUsIGxvYWRPclJlZGlyZWN0U3ViZnJhbWUgd2lsbCByZS11c2UgaXQuIE90aGVy
d2lzZSwKICAgICAvLyBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBmcmFtZSBhbmQgc2V0IGl0IGFzIHRo
ZSBSZW5kZXJQYXJ0J3Mgd2lkZ2V0LCBjYXVzaW5nIHdoYXQgd2FzIHByZXZpb3VzbHkgCiAgICAg
Ly8gaW4gdGhlIHdpZGdldCB0byBiZSB0b3JuIGRvd24uCi0gICAgcmV0dXJuIGxvYWRPclJlZGly
ZWN0U3ViZnJhbWUoZWxlbWVudCwgY29tcGxldGVkVVJMLCBmcmFtZU5hbWUsIHRydWUsIHRydWUp
OworICAgIHJldHVybiBsb2FkT3JSZWRpcmVjdFN1YmZyYW1lKG93bmVyRWxlbWVudCwgY29tcGxl
dGVkVVJMLCBmcmFtZU5hbWUsIHRydWUsIHRydWUpOwogfQogCi0KICNpZiBFTkFCTEUoUExVR0lO
X1BST1hZX0ZPUl9WSURFTykKIFBhc3NSZWZQdHI8V2lkZ2V0PiBTdWJmcmFtZUxvYWRlcjo6bG9h
ZE1lZGlhUGxheWVyUHJveHlQbHVnaW4oTm9kZSogbm9kZSwgY29uc3QgS1VSTCYgdXJsLAogICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1WYWx1ZXMpCkBAIC0zMDQsNyArMzAwLDYgQEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6YWxs
b3dQbHVnaW5zKFJlYXNvbkZvckNhbGxpbmdBbGxvd1BsdWdpbnMgcmVhc29uKQogICAgIHJldHVy
biBhbGxvd2VkOwogfQogCi0KIGJvb2wgU3ViZnJhbWVMb2FkZXI6OnNob3VsZFVzZVBsdWdpbihj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgaGFzRmFsbGJhY2ss
IGJvb2wmIHVzZUZhbGxiYWNrKQogewogICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPnNob3VsZFVzZVBsdWdpbkRvY3VtZW50KG1pbWVUeXBlKSkgewpAQCAtMzI3LDM3ICszMjIs
NDYgQEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6c2hvdWxkVXNlUGx1Z2luKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm8KICAgICB1c2VGYWxsYmFjayA9IG9iamVjdFR5
cGUgPT0gT2JqZWN0Q29udGVudE5vbmUgJiYgaGFzRmFsbGJhY2s7CiAgICAgcmV0dXJuIG9iamVj
dFR5cGUgPT0gT2JqZWN0Q29udGVudE5vbmUgfHwgb2JqZWN0VHlwZSA9PSBPYmplY3RDb250ZW50
TmV0c2NhcGVQbHVnaW4gfHwgb2JqZWN0VHlwZSA9PSBPYmplY3RDb250ZW50T3RoZXJQbHVnaW47
CiB9Ci0gIAotYm9vbCBTdWJmcmFtZUxvYWRlcjo6bG9hZFBsdWdpbihSZW5kZXJFbWJlZGRlZE9i
amVjdCogcmVuZGVyZXIsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
CisKK0RvY3VtZW50KiBTdWJmcmFtZUxvYWRlcjo6ZG9jdW1lbnQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2ZyYW1lLT5kb2N1bWVudCgpOworfQorCitib29sIFN1YmZyYW1lTG9hZGVyOjpsb2Fk
UGx1Z2luKEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnaW5FbGVtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsCiAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxsYmFj
aykKIHsKLSAgICBSZWZQdHI8V2lkZ2V0PiB3aWRnZXQ7CisgICAgUmVuZGVyRW1iZWRkZWRPYmpl
Y3QqIHJlbmRlcmVyID0gcGx1Z2luRWxlbWVudC0+cmVuZGVyRW1iZWRkZWRPYmplY3QoKTsKIAot
ICAgIGlmIChyZW5kZXJlciAmJiAhdXNlRmFsbGJhY2spIHsKLSAgICAgICAgSFRNTFBsdWdJbkVs
ZW1lbnQqIGVsZW1lbnQgPSB0b1BsdWdJbkVsZW1lbnQocmVuZGVyZXItPm5vZGUoKSk7CisgICAg
Ly8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQgbm90IGRlcGVuZCBvbiByZW5kZXJlciEKKyAgICBp
ZiAoIXJlbmRlcmVyIHx8IHVzZUZhbGxiYWNrKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgaWYgKCFTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZCh1cmwsIFN0cmluZygpLCBtX2ZyYW1l
LT5kb2N1bWVudCgpKSkgewotICAgICAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9h
ZEZhaWxlZChtX2ZyYW1lLCB1cmwuc3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9CisgICAgaWYgKCFTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZCh1cmwsIFN0cmlu
ZygpLCBkb2N1bWVudCgpKSkgeworICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2Fk
RmFpbGVkKG1fZnJhbWUsIHVybC5zdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNoZWNrSWZSdW5JbnNlY3VyZUNvbnRl
bnQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgdXJsKTsKKyAgICBGcmFt
ZUxvYWRlciogZnJhbWVMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKTsKKyAgICBmcmFtZUxvYWRl
ci0+Y2hlY2tJZlJ1bkluc2VjdXJlQ29udGVudChkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigp
LCB1cmwpOwogCi0gICAgICAgIHdpZGdldCA9IG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
Y3JlYXRlUGx1Z2luKEludFNpemUocmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpLCByZW5kZXJlci0+
Y29udGVudEhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5p
c1BsdWdpbkRvY3VtZW50KCkgJiYgIW1fY29udGFpbnNQbHVnaW5zKTsKLSAgICAgICAgaWYgKHdp
ZGdldCkgewotICAgICAgICAgICAgcmVuZGVyZXItPnNldFdpZGdldCh3aWRnZXQpOwotICAgICAg
ICAgICAgbV9jb250YWluc1BsdWdpbnMgPSB0cnVlOworICAgIEludFNpemUgY29udGVudFNpemUo
cmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpLCByZW5kZXJlci0+Y29udGVudEhlaWdodCgpKTsKKyAg
ICBib29sIGxvYWRNYW51YWxseSA9IGRvY3VtZW50KCktPmlzUGx1Z2luRG9jdW1lbnQoKSAmJiAh
bV9jb250YWluc1BsdWdpbnM7CisgICAgUmVmUHRyPFdpZGdldD4gd2lkZ2V0ID0gZnJhbWVMb2Fk
ZXItPmNsaWVudCgpLT5jcmVhdGVQbHVnaW4oY29udGVudFNpemUsCisgICAgICAgIHBsdWdpbkVs
ZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLCBsb2FkTWFudWFs
bHkpOwogCi0jaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi0gICAgICAgICAgICBy
ZW5kZXJlci0+bm9kZSgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdl
KTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlbmRlcmVyLT5zZXRTaG93
c01pc3NpbmdQbHVnaW5JbmRpY2F0b3IoKTsKKyAgICBpZiAoIXdpZGdldCkgeworICAgICAgICBy
ZW5kZXJlci0+c2V0U2hvd3NNaXNzaW5nUGx1Z2luSW5kaWNhdG9yKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gd2lkZ2V0OworICAgIHJlbmRlcmVyLT5zZXRX
aWRnZXQod2lkZ2V0KTsKKyAgICBtX2NvbnRhaW5zUGx1Z2lucyA9IHRydWU7CisKKyNpZiBFTkFC
TEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAgICBwbHVnaW5FbGVtZW50LT5zZXROZWVkc1N0
eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyNlbmRpZgorICAgIHJldHVybiB0cnVl
OwogfQogCiBLVVJMIFN1YmZyYW1lTG9hZGVyOjpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVy
bCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmggYi9X
ZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5oCmluZGV4IGQ0MmVmMmM2MmY1MTA4MGM5MDcy
MTBkZGNmNjBlMTQ4OGE2MjQwZDAuLjhlZDQ1NmNhOTY4ZTM3Yzk1ZDQyOWIzNmRlZWIyMTRmMDRk
ZGU5MWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmgKKysrIGIv
V2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuaApAQCAtNDAsMTYgKzQwLDE3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNz
IEZyYW1lTG9hZGVyQ2xpZW50OwogY2xhc3MgSFRNTEFwcGxldEVsZW1lbnQ7CiBjbGFzcyBIVE1M
RnJhbWVPd25lckVsZW1lbnQ7CitjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsKIGNsYXNzIEludFNp
emU7CiBjbGFzcyBLVVJMOwogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogY2xh
c3MgTm9kZTsKICNlbmRpZgotY2xhc3MgUmVuZGVyRW1iZWRkZWRPYmplY3Q7CiBjbGFzcyBXaWRn
ZXQ7CiAKIC8vIFRoaXMgaXMgYSBzbGlnaHQgbWlzbm9tZXIuIEl0IGhhbmRsZXMgdGhlIGhpZ2hl
ciBsZXZlbCBsb2dpYyBvZiBsb2FkaW5nIGJvdGggc3ViZnJhbWVzIGFuZCBwbHVnaW5zLgpAQCAt
NjAsMTAgKzYxLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICBib29sIHJl
cXVlc3RGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnkgPSB0cnVlLCBib29s
IGxvY2tCYWNrRm9yd2FyZExpc3QgPSB0cnVlKTsgICAgCi0gICAgYm9vbCByZXF1ZXN0T2JqZWN0
KFJlbmRlckVtYmVkZGVkT2JqZWN0KiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0
cmluZyYgZnJhbWVOYW1lLAorICAgIGJvb2wgcmVxdWVzdE9iamVjdChIVE1MUGx1Z0luRWxlbWVu
dCosIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwKICAg
ICAgICAgY29uc3QgU3RyaW5nJiBzZXJ2aWNlVHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CiAKICNpZiBFTkFC
TEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdGFr
ZSBFbGVtZW50KiBpbnN0ZWFkIG9mIE5vZGUqLCBvciBiZXR0ZXIgeWV0IHRoZQorICAgIC8vIHNw
ZWNpZmljIHR5cGUgb2YgRWxlbWVudCB3aGljaCB0aGlzIGNvZGUgZGVwZW5kcyBvbi4KICAgICBQ
YXNzUmVmUHRyPFdpZGdldD4gbG9hZE1lZGlhUGxheWVyUHJveHlQbHVnaW4oTm9kZSosIGNvbnN0
IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzKTsKICNlbmRpZgogCkBAIC03NiwxMSArNzksMTMgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBGcmFtZSogbG9hZE9yUmVkaXJlY3RTdWJmcmFtZShIVE1MRnJhbWVP
d25lckVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUs
IGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CiAgICAgRnJhbWUq
IGxvYWRTdWJmcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKTsKLSAgICBib29sIGxvYWRQbHVn
aW4oUmVuZGVyRW1iZWRkZWRPYmplY3QqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwKKyAgICBib29sIGxvYWRQbHVnaW4oSFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwKICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VG
YWxsYmFjayk7CiAKICAgICBib29sIHNob3VsZFVzZVBsdWdpbihjb25zdCBLVVJMJiwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBoYXNGYWxsYmFjaywgYm9vbCYgdXNlRmFsbGJhY2spOwog
CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisKICAgICBib29sIG1fY29udGFpbnNQ
bHVnaW5zOwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bWJlZGRlZE9iamVjdC5jcHAKaW5kZXggY2NiYTc5MTljNTI4NTg4MGE3ZTdlYWExMWU0YWM0MTFm
YTVlMGMwMS4uNzRjNmU5MWNhZDFhMmJjNjE3MzA2NWM2ODdiZTdlNzNjNGE2NTNhMyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcApAQCAtMTAyLDYgKzEwMiw3
IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKSBjb25zdAogfQogI2VuZGlmCiAKKy8vIEZJWE1FOiBUaGlzIGJlbG9uZ3MgaW4gSFRNTFBs
dWdpbkVsZW1lbnQuY3BwIHRvIGJlIHNoYXJlZCBieSBIVE1MT2JqZWN0RWxlbWVudCBhbmQgSFRN
TEVtYmVkRWxlbWVudC4KIHN0YXRpYyBib29sIGlzVVJMQWxsb3dlZChEb2N1bWVudCogZG9jLCBj
b25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBpZiAoZG9jLT5mcmFtZSgpLT5wYWdlKCktPmZyYW1l
Q291bnQoKSA+PSBQYWdlOjptYXhOdW1iZXJPZkZyYW1lcykKQEAgLTEyMyw2ICsxMjQsNyBAQCBz
dGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRvYywgY29uc3QgU3RyaW5nJiB1cmwp
CiAKIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBDbGFz
c0lkVG9UeXBlTWFwOwogCisvLyBGSVhNRTogVGhpcyBiZWxvbmdzIGluIEhUTUxPYmplY3RFbGVt
ZW50LmNwcAogc3RhdGljIENsYXNzSWRUb1R5cGVNYXAqIGNyZWF0ZUNsYXNzSWRUb1R5cGVNYXAo
KQogewogICAgIENsYXNzSWRUb1R5cGVNYXAqIG1hcCA9IG5ldyBDbGFzc0lkVG9UeXBlTWFwOwpA
QCAtMTM1LDYgKzEzNyw3IEBAIHN0YXRpYyBDbGFzc0lkVG9UeXBlTWFwKiBjcmVhdGVDbGFzc0lk
VG9UeXBlTWFwKCkKICAgICByZXR1cm4gbWFwOwogfQogCisvLyBGSVhNRTogVGhpcyBiZWxvbmdz
IGluIEhUTUxPYmplY3RFbGVtZW50LmNwcAogc3RhdGljIFN0cmluZyBzZXJ2aWNlVHlwZUZvckNs
YXNzSWQoY29uc3QgU3RyaW5nJiBjbGFzc0lkKQogewogICAgIC8vIFJldHVybiBlYXJseSBpZiBj
bGFzc0lkIGlzIGVtcHR5IChzaW5jZSB3ZSB3b24ndCBkbyBhbnl0aGluZyBiZWxvdykuCkBAIC0x
NDYsNiArMTQ5LDcgQEAgc3RhdGljIFN0cmluZyBzZXJ2aWNlVHlwZUZvckNsYXNzSWQoY29uc3Qg
U3RyaW5nJiBjbGFzc0lkKQogICAgIHJldHVybiBtYXAtPmdldChjbGFzc0lkKTsKIH0KIAorLy8g
RklYTUU6IFRoaXMgYmVsb25ncyBpbiBIVE1MT2JqZWN0RWxlbWVudC5jcHAKIHN0YXRpYyB2b2lk
IG1hcERhdGFQYXJhbVRvU3JjKFZlY3RvcjxTdHJpbmc+KiBwYXJhbU5hbWVzLCBWZWN0b3I8U3Ry
aW5nPiogcGFyYW1WYWx1ZXMpCiB7CiAgICAgLy8gU29tZSBwbHVnaW5zIGRvbid0IHVuZGVyc3Rh
bmQgdGhlICJkYXRhIiBhdHRyaWJ1dGUgb2YgdGhlIE9CSkVDVCB0YWcgKGkuZS4gUmVhbCBhbmQg
V01QCkBAIC0xNjQsMTYzICsxNjgsMjA1IEBAIHN0YXRpYyB2b2lkIG1hcERhdGFQYXJhbVRvU3Jj
KFZlY3RvcjxTdHJpbmc+KiBwYXJhbU5hbWVzLCBWZWN0b3I8U3RyaW5nPiogcGFyYW1WCiAgICAg
fQogfQogCi12b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbCBvbmx5
Q3JlYXRlTm9uTmV0c2NhcGVQbHVnaW5zKQorLy8gRklYTUU6IFRoaXMgYmVsb25ncyBpbiBzb21l
IGxvYWRlciBoZWFkZXI/CitzdGF0aWMgYm9vbCBpc05ldHNjYXBlUGx1Z2luKEZyYW1lKiBmcmFt
ZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VydmljZVR5cGUpCiB7Ci0gICAg
aWYgKCFtX3JlcGxhY2VtZW50VGV4dC5pc051bGwoKSB8fCAhbm9kZSgpKSAvLyBDaGVjayB0aGUg
bm9kZSBpbiBjYXNlIGRlc3Ryb3koKSBoYXMgYmVlbiBjYWxsZWQuCi0gICAgICAgIHJldHVybjsK
LQotICAgIFN0cmluZyB1cmw7Ci0gICAgU3RyaW5nIHNlcnZpY2VUeXBlOwotICAgIFZlY3RvcjxT
dHJpbmc+IHBhcmFtTmFtZXM7Ci0gICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7Ci0gICAg
RnJhbWUqIGZyYW1lID0gZnJhbWVWaWV3KCktPmZyYW1lKCk7CisgICAgS1VSTCBjb21wbGV0ZWRV
Ukw7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQorICAgICAgICBjb21wbGV0ZWRVUkwgPSBmcmFt
ZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKHVybCk7CiAKLSAgICAvLyBUaGUgY2FsbHMgdG8gU3Vi
ZnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3Qgd2l0aGluIHRoaXMgZnVuY3Rpb24gY2FuIHJlc3Vs
dCBpbiBhIHBsdWctaW4gYmVpbmcgaW5pdGlhbGl6ZWQuCi0gICAgLy8gVGhpcyBjYW4gcnVuIGNh
dXNlIGFyYml0cmFyeSBKYXZhU2NyaXB0IHRvIHJ1biBhbmQgbWF5IHJlc3VsdCBpbiB0aGlzIFJl
bmRlck9iamVjdCBiZWluZyBkZXRhY2hlZCBmcm9tCi0gICAgLy8gdGhlIHJlbmRlciB0cmVlIGFu
ZCBkZXN0cm95ZWQsIGNhdXNpbmcgYSBjcmFzaCBsaWtlIDxyZGFyOi8vcHJvYmxlbS82OTU0NTQ2
Pi4gIEJ5IGV4dGVuZGluZyBvdXIgbGlmZXRpbWUKLSAgICAvLyBhcnRpZmljYWxseSB0byBlbnN1
cmUgdGhhdCB3ZSByZW1haW4gYWxpdmUgZm9yIHRoZSBkdXJhdGlvbiBvZiBwbHVnLWluIGluaXRp
YWxpemF0aW9uLgotICAgIFJlbmRlcldpZGdldFByb3RlY3RvciBwcm90ZWN0b3IodGhpcyk7Cisg
ICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPm9iamVjdENvbnRlbnRUeXBlKGNvbXBs
ZXRlZFVSTCwgc2VydmljZVR5cGUpID09IE9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgaWYgKG5vZGUo
KS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7Ci0gICAgICAgIEhUTUxPYmplY3RFbGVtZW50KiBv
YmplY3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihub2RlKCkpOwor
Ly8gRklYTUU6IFRoaXMgYmVsb25ncyBvbiBIVE1MT2JqZWN0RWxlbWVudC4KK3N0YXRpYyBib29s
IGhhc0ZhbGxiYWNrQ29udGVudChIVE1MT2JqZWN0RWxlbWVudCogb2JqZWN0RWxlbWVudCkKK3sK
KyAgICBmb3IgKE5vZGUqIGNoaWxkID0gb2JqZWN0RWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoKCFjaGlsZC0+
aXNUZXh0Tm9kZSgpICYmICFjaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykpIC8vIERpc2NvdW50
IDxwYXJhbT4KKyAgICAgICAgICAgIHx8IChjaGlsZC0+aXNUZXh0Tm9kZSgpICYmICFzdGF0aWNf
Y2FzdDxUZXh0Kj4oY2hpbGQpLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgICAgICBv
YmplY3RFbGVtZW50LT5zZXROZWVkV2lkZ2V0VXBkYXRlKGZhbHNlKTsKLSAgICAgICAgaWYgKCFv
YmplY3RFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgdXJsID0gb2JqZWN0RWxlbWVudC0+dXJsKCk7
Ci0gICAgICAgIHNlcnZpY2VUeXBlID0gb2JqZWN0RWxlbWVudC0+c2VydmljZVR5cGUoKTsKLQot
ICAgICAgICBIYXNoU2V0PFN0cmluZ0ltcGwqLCBDYXNlRm9sZGluZ0hhc2g+IHVuaXF1ZVBhcmFt
TmFtZXM7Ci0KLSAgICAgICAgLy8gU2NhbiB0aGUgUEFSQU0gY2hpbGRyZW4gYW5kIHN0b3JlIHRo
ZWlyIG5hbWUvdmFsdWUgcGFpcnMuCi0gICAgICAgIC8vIEdldCB0aGUgVVJMIGFuZCB0eXBlIGZy
b20gdGhlIHBhcmFtcyBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgdGhlbS4KLSAgICAgICAgTm9k
ZSogY2hpbGQgPSBvYmplY3RFbGVtZW50LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIHdoaWxlIChj
aGlsZCkgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHBhcmFtVGFnKSkgewot
ICAgICAgICAgICAgICAgIEhUTUxQYXJhbUVsZW1lbnQqIHAgPSBzdGF0aWNfY2FzdDxIVE1MUGFy
YW1FbGVtZW50Kj4oY2hpbGQpOwotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcC0+bmFt
ZSgpOwotICAgICAgICAgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpICYmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAic3JjIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIm1vdmllIikgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgImNvZGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1l
LCAidXJsIikpKQotICAgICAgICAgICAgICAgICAgICB1cmwgPSBkZXByZWNhdGVkUGFyc2VVUkwo
cC0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSAm
JiBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAidHlwZSIpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNlcnZpY2VUeXBlID0gcC0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBv
cyA9IHNlcnZpY2VUeXBlLmZpbmQoIjsiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyAh
PSBub3RGb3VuZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlID0gc2Vydmlj
ZVR5cGUubGVmdChwb3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
IW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuaXF1ZVBhcmFtTmFtZXMu
YWRkKG5hbWUuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQo
cC0+bmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKHAtPnZh
bHVlKCkpOwotICAgICAgICAgICAgICAgIH0KKy8vIEZJWE1FOiBUaGlzIGJlbG9uZ3Mgb24gSFRN
TE9iamVjdEVsZW1lbnQuCitzdGF0aWMgdm9pZCBwYXJhbWV0ZXJzRnJvbU9iamVjdChIVE1MT2Jq
ZWN0RWxlbWVudCogb2JqZWN0RWxlbWVudCwgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgU3RyaW5nJiB1cmwsIFN0cmluZyYgc2VydmljZVR5
cGUpCit7CisgICAgSGFzaFNldDxTdHJpbmdJbXBsKiwgQ2FzZUZvbGRpbmdIYXNoPiB1bmlxdWVQ
YXJhbU5hbWVzOworCisgICAgLy8gU2NhbiB0aGUgUEFSQU0gY2hpbGRyZW4gYW5kIHN0b3JlIHRo
ZWlyIG5hbWUvdmFsdWUgcGFpcnMuCisgICAgLy8gR2V0IHRoZSBVUkwgYW5kIHR5cGUgZnJvbSB0
aGUgcGFyYW1zIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSB0aGVtLgorICAgIE5vZGUqIGNoaWxk
ID0gb2JqZWN0RWxlbWVudC0+Zmlyc3RDaGlsZCgpOworICAgIHdoaWxlIChjaGlsZCkgeworICAg
ICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpKSB7CisgICAgICAgICAgICBIVE1M
UGFyYW1FbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudCo+KGNoaWxkKTsK
KyAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcC0+bmFtZSgpOworICAgICAgICAgICAgaWYgKHVy
bC5pc0VtcHR5KCkgJiYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzcmMiKSB8fCBlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAibW92aWUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiY29k
ZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJ1cmwiKSkpCisgICAgICAgICAgICAgICAg
dXJsID0gZGVwcmVjYXRlZFBhcnNlVVJMKHAtPnZhbHVlKCkpOworICAgICAgICAgICAgLy8gRklY
TUU6IHNlcnZpY2VUeXBlIGNhbGN1bGF0aW9uIGRvZXMgbm90IGJlbG9uZyBpbiB0aGlzIGZ1bmN0
aW9uLgorICAgICAgICAgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSAmJiBlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAidHlwZSIpKSB7CisgICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSBw
LT52YWx1ZSgpOworICAgICAgICAgICAgICAgIHNpemVfdCBwb3MgPSBzZXJ2aWNlVHlwZS5maW5k
KCI7Iik7CisgICAgICAgICAgICAgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkKKyAgICAgICAgICAg
ICAgICAgICAgc2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZS5sZWZ0KHBvcyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
dW5pcXVlUGFyYW1OYW1lcy5hZGQobmFtZS5pbXBsKCkpOworICAgICAgICAgICAgICAgIHBhcmFt
TmFtZXMuYXBwZW5kKHAtPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZXMuYXBw
ZW5kKHAtPnZhbHVlKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgfQorICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpOworICAgIH0KIAotICAgICAgICAvLyBXaGVuIE9CSkVDVCBpcyB1c2VkIGZvciBh
biBhcHBsZXQgdmlhIFN1bidzIEphdmEgcGx1Z2luLCB0aGUgQ09ERUJBU0UgYXR0cmlidXRlIGlu
IHRoZSB0YWcKLSAgICAgICAgLy8gcG9pbnRzIHRvIHRoZSBKYXZhIHBsdWdpbiBpdHNlbGYgKGFu
IEFjdGl2ZVggY29tcG9uZW50KSB3aGlsZSB0aGUgYWN0dWFsIGFwcGxldCBDT0RFQkFTRSBpcwot
ICAgICAgICAvLyBpbiBhIFBBUkFNIHRhZy4gU2VlIDxodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1
Y3RzL3BsdWdpbi8xLjIvZG9jcy90YWdzLmh0bWw+LiBUaGlzIG1lYW5zCi0gICAgICAgIC8vIHdl
IGhhdmUgdG8gZXhwbGljaXRseSBzdXBwcmVzcyB0aGUgdGFnJ3MgQ09ERUJBU0UgYXR0cmlidXRl
IGlmIHRoZXJlIGlzIG5vbmUgaW4gYSBQQVJBTSwKLSAgICAgICAgLy8gZWxzZSBvdXIgSmF2YSBw
bHVnaW4gd2lsbCBtaXNpbnRlcnByZXQgaXQuIFs0MDA0NTMxXQotICAgICAgICBTdHJpbmcgY29k
ZWJhc2U7Ci0gICAgICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlw
ZShzZXJ2aWNlVHlwZSkpIHsKLSAgICAgICAgICAgIGNvZGViYXNlID0gImNvZGViYXNlIjsKLSAg
ICAgICAgICAgIHVuaXF1ZVBhcmFtTmFtZXMuYWRkKGNvZGViYXNlLmltcGwoKSk7IC8vIHByZXRl
bmQgd2UgZm91bmQgaXQgaW4gYSBQQVJBTSBhbHJlYWR5Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIC8vIFR1cm4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIDxvYmplY3Q+IGVsZW1lbnQgaW50
byBhcnJheXMsIGJ1dCBkb24ndCBvdmVycmlkZSA8cGFyYW0+IHZhbHVlcy4KLSAgICAgICAgTmFt
ZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gb2JqZWN0RWxlbWVudC0+YXR0cmlidXRlcygpOwotICAg
ICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBBdHRyaWJ1
dGUqIGl0ID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBpdC0+bmFtZSgpLmxvY2FsTmFtZSgpOwotICAgICAg
ICAgICAgICAgIGlmICghdW5pcXVlUGFyYW1OYW1lcy5jb250YWlucyhuYW1lLmltcGwoKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQobmFtZS5zdHJpbmcoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWVzLmFwcGVuZChpdC0+dmFsdWUoKS5zdHJpbmco
KSk7Ci0gICAgICAgICAgICAgICAgfQorICAgIC8vIFdoZW4gT0JKRUNUIGlzIHVzZWQgZm9yIGFu
IGFwcGxldCB2aWEgU3VuJ3MgSmF2YSBwbHVnaW4sIHRoZSBDT0RFQkFTRSBhdHRyaWJ1dGUgaW4g
dGhlIHRhZworICAgIC8vIHBvaW50cyB0byB0aGUgSmF2YSBwbHVnaW4gaXRzZWxmIChhbiBBY3Rp
dmVYIGNvbXBvbmVudCkgd2hpbGUgdGhlIGFjdHVhbCBhcHBsZXQgQ09ERUJBU0UgaXMKKyAgICAv
LyBpbiBhIFBBUkFNIHRhZy4gU2VlIDxodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3RzL3BsdWdp
bi8xLjIvZG9jcy90YWdzLmh0bWw+LiBUaGlzIG1lYW5zCisgICAgLy8gd2UgaGF2ZSB0byBleHBs
aWNpdGx5IHN1cHByZXNzIHRoZSB0YWcncyBDT0RFQkFTRSBhdHRyaWJ1dGUgaWYgdGhlcmUgaXMg
bm9uZSBpbiBhIFBBUkFNLAorICAgIC8vIGVsc2Ugb3VyIEphdmEgcGx1Z2luIHdpbGwgbWlzaW50
ZXJwcmV0IGl0LiBbNDAwNDUzMV0KKyAgICBTdHJpbmcgY29kZWJhc2U7CisgICAgaWYgKE1JTUVU
eXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKHNlcnZpY2VUeXBlKSkgeworICAgICAg
ICBjb2RlYmFzZSA9ICJjb2RlYmFzZSI7CisgICAgICAgIHVuaXF1ZVBhcmFtTmFtZXMuYWRkKGNv
ZGViYXNlLmltcGwoKSk7IC8vIHByZXRlbmQgd2UgZm91bmQgaXQgaW4gYSBQQVJBTSBhbHJlYWR5
CisgICAgfQorCisgICAgLy8gVHVybiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgPG9iamVjdD4gZWxl
bWVudCBpbnRvIGFycmF5cywgYnV0IGRvbid0IG92ZXJyaWRlIDxwYXJhbT4gdmFsdWVzLgorICAg
IE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IG9iamVjdEVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsK
KyAgICBpZiAoYXR0cmlidXRlcykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9
IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUgPSBpdC0+bmFtZSgpLmxvY2FsTmFtZSgpOworICAgICAgICAgICAgaWYgKCF1
bmlxdWVQYXJhbU5hbWVzLmNvbnRhaW5zKG5hbWUuaW1wbCgpKSkgeworICAgICAgICAgICAgICAg
IHBhcmFtTmFtZXMuYXBwZW5kKG5hbWUuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHBhcmFt
VmFsdWVzLmFwcGVuZChpdC0+dmFsdWUoKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KKyAgICB9CiAKLSAgICAgICAgbWFwRGF0YVBhcmFtVG9TcmMoJnBhcmFtTmFtZXMsICZw
YXJhbVZhbHVlcyk7CisgICAgbWFwRGF0YVBhcmFtVG9TcmMoJnBhcmFtTmFtZXMsICZwYXJhbVZh
bHVlcyk7CiAKLSAgICAgICAgLy8gSWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIHR5cGUsIHRyeSB0
byBtYXAgZnJvbSBhIHNwZWNpZmljIENMQVNTSUQgdG8gYSB0eXBlLgotICAgICAgICBpZiAoc2Vy
dmljZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2VydmljZVR5cGUgPSBzZXJ2aWNlVHlw
ZUZvckNsYXNzSWQob2JqZWN0RWxlbWVudC0+Y2xhc3NJZCgpKTsKKyAgICAvLyBJZiB3ZSBzdGls
bCBkb24ndCBoYXZlIGEgdHlwZSwgdHJ5IHRvIG1hcCBmcm9tIGEgc3BlY2lmaWMgQ0xBU1NJRCB0
byBhIHR5cGUuCisgICAgaWYgKHNlcnZpY2VUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgc2Vydmlj
ZVR5cGUgPSBzZXJ2aWNlVHlwZUZvckNsYXNzSWQob2JqZWN0RWxlbWVudC0+Y2xhc3NJZCgpKTsK
K30KIAotICAgICAgICBpZiAoIWlzVVJMQWxsb3dlZChkb2N1bWVudCgpLCB1cmwpKQotICAgICAg
ICAgICAgcmV0dXJuOworLy8gRklYTUU6IFRoaXMgYmVsb25ncyBvbiBIVE1MT2JqZWN0RWxlbWVu
dCwgSFRNTFBsdWdpbkVsZW1lbnQgb3IgSFRNTEZyYW1lT3duZXJFbGVtZW50Lgorc3RhdGljIHZv
aWQgdXBkYXRlV2lkZ2V0Rm9yT2JqZWN0RWxlbWVudChIVE1MT2JqZWN0RWxlbWVudCogb2JqZWN0
RWxlbWVudCwgYm9vbCBvbmx5Q3JlYXRlTm9uTmV0c2NhcGVQbHVnaW5zKQoreworICAgIG9iamVj
dEVsZW1lbnQtPnNldE5lZWRXaWRnZXRVcGRhdGUoZmFsc2UpOworICAgIGlmICghb2JqZWN0RWxl
bWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQorICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgLy8gRmluZCBvdXQgaWYgd2Ugc3VwcG9ydCBmYWxsYmFjayBjb250ZW50LgotICAgICAg
ICBtX2hhc0ZhbGxiYWNrQ29udGVudCA9IGZhbHNlOwotICAgICAgICBmb3IgKE5vZGUqIGNoaWxk
ID0gb2JqZWN0RWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBjaGlsZCAmJiAhbV9oYXNGYWxsYmFja0Nv
bnRlbnQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgIGlmICgo
IWNoaWxkLT5pc1RleHROb2RlKCkgJiYgIWNoaWxkLT5oYXNUYWdOYW1lKHBhcmFtVGFnKSkgLy8g
RGlzY291bnQgPHBhcmFtPgotICAgICAgICAgICAgICAgIHx8IChjaGlsZC0+aXNUZXh0Tm9kZSgp
ICYmICFzdGF0aWNfY2FzdDxUZXh0Kj4oY2hpbGQpLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkp
KQotICAgICAgICAgICAgICAgIG1faGFzRmFsbGJhY2tDb250ZW50ID0gdHJ1ZTsKLSAgICAgICAg
fQorICAgIEZyYW1lKiBmcmFtZSA9IG9iamVjdEVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7
CisgICAgU3RyaW5nIHVybCA9IG9iamVjdEVsZW1lbnQtPnVybCgpOworICAgIFN0cmluZyBzZXJ2
aWNlVHlwZSA9IG9iamVjdEVsZW1lbnQtPnNlcnZpY2VUeXBlKCk7CiAKLSAgICAgICAgaWYgKG9u
bHlDcmVhdGVOb25OZXRzY2FwZVBsdWdpbnMpIHsKLSAgICAgICAgICAgIEtVUkwgY29tcGxldGVk
VVJMOwotICAgICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNv
bXBsZXRlZFVSTCA9IGZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwodXJsKTsKKyAgICBWZWN0
b3I8U3RyaW5nPiBwYXJhbU5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFtVmFsdWVzOwor
ICAgIHBhcmFtZXRlcnNGcm9tT2JqZWN0KG9iamVjdEVsZW1lbnQsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzLCB1cmwsIHNlcnZpY2VUeXBlKTsKIAotICAgICAgICAgICAgaWYgKGZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPm9iamVjdENvbnRlbnRUeXBlKGNvbXBsZXRlZFVSTCwgc2VydmljZVR5
cGUpID09IE9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbikKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KKyAgICBpZiAoIWlzVVJMQWxsb3dlZChvYmplY3RFbGVtZW50LT5kb2N1
bWVudCgpLCB1cmwpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYm9vbCBiZWZvcmVMb2Fk
QWxsb3dlZExvYWQgPSBvYmplY3RFbGVtZW50LT5kaXNwYXRjaEJlZm9yZUxvYWRFdmVudCh1cmwp
OwotICAgICAgICAKLSAgICAgICAgLy8gYmVmb3JlbG9hZCBldmVudHMgY2FuIG1vZGlmeSB0aGUg
RE9NLCBwb3RlbnRpYWxseSBjYXVzaW5nCi0gICAgICAgIC8vIFJlbmRlcldpZGdldDo6ZGVzdHJv
eSgpIHRvIGJlIGNhbGxlZC4gIEVuc3VyZSB3ZSBoYXZlbid0IGJlZW4KLSAgICAgICAgLy8gZGVz
dHJveWVkIGJlZm9yZSBjb250aW51aW5nLgotICAgICAgICBpZiAoIW5vZGUoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGJlZm9yZUxvYWRB
bGxvd2VkTG9hZCAmJiBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPnJlcXVlc3RP
YmplY3QodGhpcywgdXJsLCBvYmplY3RFbGVtZW50LT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCBz
ZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwotICAgIAotICAgICAgICBpZiAo
IXN1Y2Nlc3MgJiYgbV9oYXNGYWxsYmFja0NvbnRlbnQpCi0gICAgICAgICAgICBvYmplY3RFbGVt
ZW50LT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKKyAgICBib29sIGZhbGxiYWNrQ29udGVudCA9
IGhhc0ZhbGxiYWNrQ29udGVudChvYmplY3RFbGVtZW50KTsKKyAgICBvYmplY3RFbGVtZW50LT5y
ZW5kZXJFbWJlZGRlZE9iamVjdCgpLT5zZXRIYXNGYWxsYmFja0NvbnRlbnQoZmFsbGJhY2tDb250
ZW50KTsKIAotICAgIH0gZWxzZSBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgewot
ICAgICAgICBIVE1MRW1iZWRFbGVtZW50KiBlbWJlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
RW1iZWRFbGVtZW50Kj4obm9kZSgpKTsKLSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXROZWVkV2lk
Z2V0VXBkYXRlKGZhbHNlKTsKLSAgICAgICAgdXJsID0gZW1iZWRFbGVtZW50LT51cmwoKTsKLSAg
ICAgICAgc2VydmljZVR5cGUgPSBlbWJlZEVsZW1lbnQtPnNlcnZpY2VUeXBlKCk7CisgICAgaWYg
KG9ubHlDcmVhdGVOb25OZXRzY2FwZVBsdWdpbnMgJiYgaXNOZXRzY2FwZVBsdWdpbihmcmFtZSwg
dXJsLCBzZXJ2aWNlVHlwZSkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAodXJsLmlz
RW1wdHkoKSAmJiBzZXJ2aWNlVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmICghaXNVUkxBbGxvd2VkKGRvY3VtZW50KCksIHVybCkpCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgYm9vbCBiZWZvcmVMb2FkQWxsb3dlZExvYWQgPSBvYmplY3RFbGVtZW50LT5k
aXNwYXRjaEJlZm9yZUxvYWRFdmVudCh1cmwpOwogCi0gICAgICAgIC8vIGFkZCBhbGwgYXR0cmli
dXRlcyBzZXQgb24gdGhlIGVtYmVkIG9iamVjdAotICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJp
YnV0ZXMgPSBlbWJlZEVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0
ZXMpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5s
ZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9IGF0dHJpYnV0
ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQo
aXQtPm5hbWUoKS5sb2NhbE5hbWUoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1W
YWx1ZXMuYXBwZW5kKGl0LT52YWx1ZSgpLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorICAgIC8vIGJlZm9yZWxvYWQgZXZlbnRzIGNhbiBtb2RpZnkgdGhlIERPTSwgcG90ZW50
aWFsbHkgY2F1c2luZworICAgIC8vIFJlbmRlcldpZGdldDo6ZGVzdHJveSgpIHRvIGJlIGNhbGxl
ZC4gIEVuc3VyZSB3ZSBoYXZlbid0IGJlZW4KKyAgICAvLyBkZXN0cm95ZWQgYmVmb3JlIGNvbnRp
bnVpbmcuCisgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIHJlbmRlciBmYWxsYmFjayBjb250ZW50
PworICAgIGlmICghb2JqZWN0RWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBzdWNjZXNzID0gYmVmb3JlTG9hZEFsbG93ZWRMb2FkICYmIGZyYW1lLT5sb2Fk
ZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+cmVxdWVzdE9iamVjdChvYmplY3RFbGVtZW50LCB1cmws
IG9iamVjdEVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0ciksIHNlcnZpY2VUeXBlLCBwYXJh
bU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAKLSAgICAgICAgaWYgKG9ubHlDcmVhdGVOb25OZXRzY2Fw
ZVBsdWdpbnMpIHsKLSAgICAgICAgICAgIEtVUkwgY29tcGxldGVkVVJMOwotICAgICAgICAgICAg
aWYgKCF1cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbXBsZXRlZFVSTCA9IGZyYW1l
LT5sb2FkZXIoKS0+Y29tcGxldGVVUkwodXJsKTsKKyAgICBpZiAoIXN1Y2Nlc3MgJiYgZmFsbGJh
Y2tDb250ZW50KQorICAgICAgICBvYmplY3RFbGVtZW50LT5yZW5kZXJGYWxsYmFja0NvbnRlbnQo
KTsKK30KIAotICAgICAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPm9iamVj
dENvbnRlbnRUeXBlKGNvbXBsZXRlZFVSTCwgc2VydmljZVR5cGUpID09IE9iamVjdENvbnRlbnRO
ZXRzY2FwZVBsdWdpbikKLSAgICAgICAgICAgICAgICByZXR1cm47CisvLyBGSVhNRTogVGhpcyBi
ZWxvbmdzIG9uIEhUTUxFbWJlZEVsZW1lbnQuCitzdGF0aWMgdm9pZCBwYXJhbWV0ZXJzRnJvbUVt
YmVkKEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkRWxlbWVudCwgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBOYW1lZE5vZGVNYXAq
IGF0dHJpYnV0ZXMgPSBlbWJlZEVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoYXR0cmli
dXRlcykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVu
Z3RoKCk7ICsraSkgeworICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9IGF0dHJpYnV0ZXMtPmF0
dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChpdC0+bmFtZSgp
LmxvY2FsTmFtZSgpLnN0cmluZygpKTsKKyAgICAgICAgICAgIHBhcmFtVmFsdWVzLmFwcGVuZChp
dC0+dmFsdWUoKS5zdHJpbmcoKSk7CiAgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIEZJWE1FOiBU
aGlzIGJlbG9uZ3Mgb24gSFRNTEVtYmVkRWxlbWVudCwgSFRNTFBsdWdpbkVsZW1lbnQgb3IgSFRN
TEZyYW1lT3duZXJFbGVtZW50Lgorc3RhdGljIHZvaWQgdXBkYXRlV2lkZ2V0Rm9yRW1iZWRFbGVt
ZW50KEhUTUxFbWJlZEVsZW1lbnQqIGVtYmVkRWxlbWVudCwgYm9vbCBvbmx5Q3JlYXRlTm9uTmV0
c2NhcGVQbHVnaW5zKQoreworICAgIEZyYW1lKiBmcmFtZSA9IGVtYmVkRWxlbWVudC0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKKyAgICBTdHJpbmcgdXJsID0gZW1iZWRFbGVtZW50LT51cmwoKTsKKyAg
ICBTdHJpbmcgc2VydmljZVR5cGUgPSBlbWJlZEVsZW1lbnQtPnNlcnZpY2VUeXBlKCk7CiAKLSAg
ICAgICAgaWYgKGVtYmVkRWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQodXJsKSkKLSAg
ICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+cmVxdWVzdE9iamVj
dCh0aGlzLCB1cmwsIGVtYmVkRWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgc2Vydmlj
ZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKyAgICBlbWJlZEVsZW1lbnQtPnNldE5l
ZWRXaWRnZXRVcGRhdGUoZmFsc2UpOworCisgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgc2Vydmlj
ZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1VSTEFsbG93ZWQo
ZW1iZWRFbGVtZW50LT5kb2N1bWVudCgpLCB1cmwpKQorICAgICAgICByZXR1cm47CisKKyAgICBW
ZWN0b3I8U3RyaW5nPiBwYXJhbU5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFtVmFsdWVz
OworICAgIHBhcmFtZXRlcnNGcm9tRW1iZWQoZW1iZWRFbGVtZW50LCBwYXJhbU5hbWVzLCBwYXJh
bVZhbHVlcyk7CisKKyAgICBpZiAob25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lucyAmJiBpc05l
dHNjYXBlUGx1Z2luKGZyYW1lLCB1cmwsIHNlcnZpY2VUeXBlKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKGVtYmVkRWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQodXJsKSkgewor
ICAgICAgICAvLyBGSVhNRTogYmVmb3JlTG9hZCBjb3VsZCBoYXZlIGRldGFjaGVkIHRoZSByZW5k
ZXJlciEgIEp1c3QgbGlrZSBpbiB0aGUgPG9iamVjdD4gY2FzZSBhYm92ZS4KKyAgICAgICAgZnJh
bWUtPmxvYWRlcigpLT5zdWJmcmFtZUxvYWRlcigpLT5yZXF1ZXN0T2JqZWN0KGVtYmVkRWxlbWVu
dCwgdXJsLCBlbWJlZEVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0ciksIHNlcnZpY2VUeXBl
LCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgfQorfQorCisjaWYgRU5BQkxFKFBMVUdJ
Tl9QUk9YWV9GT1JfVklERU8pCisvLyBGSVhNRTogVGhpcyBiZWxvbmdzIG9uIEhUTUxNZWRpYUVs
ZW1lbnQuCitzdGF0aWMgdm9pZCB1cGRhdGVXaWRnZXRGb3JNZWRpYUVsZW1lbnQoSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50LCBib29sIGlnbm9yZWQpCit7CisgICAgVmVjdG9yPFN0cmlu
Zz4gcGFyYW1OYW1lczsKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVlczsKKyAgICBLVVJM
IGt1cmw7CisKKyAgICBtZWRpYUVsZW1lbnQtPmdldFBsdWdpblByb3h5UGFyYW1zKGt1cmwsIHBh
cmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKyAgICBtZWRpYUVsZW1lbnQtPnNldE5lZWRXaWRnZXRV
cGRhdGUoZmFsc2UpOworICAgIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+bG9h
ZE1lZGlhUGxheWVyUHJveHlQbHVnaW4obWVkaWFFbGVtZW50LCBrdXJsLCBwYXJhbU5hbWVzLCBw
YXJhbVZhbHVlcyk7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dXBk
YXRlV2lkZ2V0KGJvb2wgb25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lucykKK3sKKyAgICBpZiAo
IW1fcmVwbGFjZW1lbnRUZXh0LmlzTnVsbCgpIHx8ICFub2RlKCkpIC8vIENoZWNrIHRoZSBub2Rl
IGluIGNhc2UgZGVzdHJveSgpIGhhcyBiZWVuIGNhbGxlZC4KKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVGhlIGNhbGxzIHRvIFN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0IHdpdGhpbiB0
aGlzIGZ1bmN0aW9uIGNhbiByZXN1bHQgaW4gYSBwbHVnLWluIGJlaW5nIGluaXRpYWxpemVkLgor
ICAgIC8vIFRoaXMgY2FuIHJ1biBjYXVzZSBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0byBydW4gYW5k
IG1heSByZXN1bHQgaW4gdGhpcyBSZW5kZXJPYmplY3QgYmVpbmcgZGV0YWNoZWQgZnJvbQorICAg
IC8vIHRoZSByZW5kZXIgdHJlZSBhbmQgZGVzdHJveWVkLCBjYXVzaW5nIGEgY3Jhc2ggbGlrZSA8
cmRhcjovL3Byb2JsZW0vNjk1NDU0Nj4uICBCeSBleHRlbmRpbmcgb3VyIGxpZmV0aW1lCisgICAg
Ly8gYXJ0aWZpY2FsbHkgdG8gZW5zdXJlIHRoYXQgd2UgcmVtYWluIGFsaXZlIGZvciB0aGUgZHVy
YXRpb24gb2YgcGx1Zy1pbiBpbml0aWFsaXphdGlvbi4KKyAgICBSZW5kZXJXaWRnZXRQcm90ZWN0
b3IgcHJvdGVjdG9yKHRoaXMpOworCisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShvYmplY3RU
YWcpKSB7CisgICAgICAgIEhUTUxPYmplY3RFbGVtZW50KiBvYmplY3RFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihub2RlKCkpOworICAgICAgICB1cGRhdGVXaWRnZXRG
b3JPYmplY3RFbGVtZW50KG9iamVjdEVsZW1lbnQsIG9ubHlDcmVhdGVOb25OZXRzY2FwZVBsdWdp
bnMpOworICAgIH0gZWxzZSBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSkgeworICAg
ICAgICBIVE1MRW1iZWRFbGVtZW50KiBlbWJlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRW1i
ZWRFbGVtZW50Kj4obm9kZSgpKTsKKyAgICAgICAgdXBkYXRlV2lkZ2V0Rm9yRW1iZWRFbGVtZW50
KGVtYmVkRWxlbWVudCwgb25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lucyk7CiAgICAgfQogI2lm
IEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKSAgICAgICAgCiAgICAgZWxzZSBpZiAobm9k
ZSgpLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBub2RlKCktPmhhc1RhZ05hbWUoYXVkaW9UYWcp
KSB7CiAgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxNZWRpYUVsZW1lbnQqPihub2RlKCkpOwotICAgICAgICBLVVJMIGt1cmw7Ci0KLSAgICAg
ICAgbWVkaWFFbGVtZW50LT5nZXRQbHVnaW5Qcm94eVBhcmFtcyhrdXJsLCBwYXJhbU5hbWVzLCBw
YXJhbVZhbHVlcyk7Ci0gICAgICAgIG1lZGlhRWxlbWVudC0+c2V0TmVlZFdpZGdldFVwZGF0ZShm
YWxzZSk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+bG9hZE1l
ZGlhUGxheWVyUHJveHlQbHVnaW4obm9kZSgpLCBrdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVl
cyk7CisgICAgICAgIHVwZGF0ZVdpZGdldEZvck1lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQsIG9u
bHlDcmVhdGVOb25OZXRzY2FwZVBsdWdpbnMpOwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgKaW5kZXggMDk0NDA5NGRmZTM3MTMwZWRlNzdk
NjhiZWY1MmY2YzU0ODIxOGM3Yi4uNjM3NmY5MzMzY2FhNGU4ZDE3ODZjYTA3YzgyNjQ2M2E0ODdl
MzRlMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3Qu
aAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCkBAIC00MSw3
ICs0MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNob3dzQ3Jhc2hlZFBsdWdpbkluZGljYXRv
cigpOwogICAgIGJvb2wgc2hvd3NNaXNzaW5nUGx1Z2luSW5kaWNhdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9zaG93c01pc3NpbmdQbHVnaW5JbmRpY2F0b3I7IH0KIAorICAgIC8vIEZJWE1FOiBUaGlz
IGJlbG9uZ3Mgb24gSFRNTE9iamVjdEVsZW1lbnQuCiAgICAgYm9vbCBoYXNGYWxsYmFja0NvbnRl
bnQoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZhbGxiYWNrQ29udGVudDsgfQorICAgIHZvaWQgc2V0
SGFzRmFsbGJhY2tDb250ZW50KGJvb2wgaGFzRmFsbGJhY2tDb250ZW50KSB7IG1faGFzRmFsbGJh
Y2tDb250ZW50ID0gaGFzRmFsbGJhY2tDb250ZW50OyB9CiAKICAgICB2b2lkIGhhbmRsZU1pc3Np
bmdQbHVnaW5JbmRpY2F0b3JFdmVudChFdmVudCopOwogCkBAIC02OCw3ICs3MCw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShpbnQgdHgsIGludCB0eSwg
RmxvYXRSZWN0JiBjb250ZW50UmVjdCwgUGF0aCYsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0
UmVjdCwgRm9udCYsIFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIFN0cmluZyBt
X3JlcGxhY2VtZW50VGV4dDsKLSAgICBib29sIG1faGFzRmFsbGJhY2tDb250ZW50OworICAgIGJv
b2wgbV9oYXNGYWxsYmFja0NvbnRlbnQ7IC8vIEZJWE1FOiBUaGlzIGJlbG9uZ3Mgb24gSFRNTE9i
amVjdEVsZW1lbnQuCiAgICAgYm9vbCBtX3Nob3dzTWlzc2luZ1BsdWdpbkluZGljYXRvcjsKICAg
ICBib29sIG1fbWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZDsKICAgICBib29sIG1fbW91
c2VEb3duV2FzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBjMmRiM2UyNWZhMDFmNDI2NDQzYjE5OWQyMDc3NTlh
NmQyMmZhMzVmLi5lZWFjMjAzNjMxOGNiMjZhNWViNTY5ZGFlNDAzNzM0ZjhmNDk0YjY3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMTU1LDYgKzE1NSw3
IEBAIHB1YmxpYzoKICAgICAvLyB0aGVpciBwYXJlbnQgZG9jdW1lbnQuCiAgICAgYm9vbCBzaG91
bGRQcm9wYWdhdGVDb21wb3NpdGluZ1RvRW5jbG9zaW5nSUZyYW1lKCkgY29uc3Q7CiAKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBSZW5kZXJJRnJhbWUqCiAgICAgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiBlbmNsb3NpbmdJRnJhbWVFbGVtZW50KCkgY29uc3Q7CiAKICAgICBzdGF0aWMg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yKiBpZnJhbWVDb250ZW50c0NvbXBvc2l0b3IoUmVuZGVySUZy
YW1lKik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>